Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Slack integration: links on self-hosted domains never unfurl (parseCapShareUrl only accepts cap.so / cap.link)

Aperta Adatta ai principianti
#2,546 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@mangeshraut712 ci sta già lavorando.

Dal 14/10/2026.

  • #1 di @mangeshraut712 — chiusa senza merge
  • #2549 di @mangeshraut712 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
nextjs, typescript
Ambito
api, backend

Direzione di ricerca

Inizia da parseCapShareUrl in apps/web/lib/oembed.ts, chiamata sia da processSlackEvent sia da /api/oembed, e verifica come serverEnv().WEB_URL viene già letto altrove in apps/web. Conferma che un link /s/<id> su un host diverso da cap.so restituisce oggi null. È completato quando un link di condivisione sull'host WEB_URL configurato si risolve in un ID video in entrambi i percorsi e i link su altri host continuano a restituire null.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Description

On a self-hosted Cap server, the Slack integration never shows a preview or inline player for share links on the server's own domain.

The Slack app installs and connects fine, Slack sends link_shared events, and /api/integrations/slack/events returns 200, but Cap never calls chat.unfurl. Nothing is logged, so it fails silently.

Expected: a public link like https://video.example.com/s/<id> unfurls in Slack with the title, thumbnail and inline player, the same as cap.so links.

Actual: Slack shows a plain link. Because the app claims the domain, Slack also skips its own Open Graph preview, so it's worse than having no app installed.

Cause: processSlackEvent passes each link through parseCapShareUrl (apps/web/lib/oembed.ts), which only accepts Cap's hosted domains:

if (hostname === "cap.so" && segments.length === 2 && segments[0] === "s") {
  videoId = segments[1];
}
if (hostname === "cap.link" && segments.length === 1 && segments[0] !== "video") {
  videoId = segments[0];
}

For any other host it returns null, so the link is dropped before the video is looked up. /api/oembed uses the same function, so it returns 400 for the server's own links, even though the share page advertises that oEmbed URL.

Suggested fix: also accept the host of WEB_URL with the /s/<id> path:

const webHost = new URL(serverEnv().WEB_URL).hostname.toLowerCase().replace(/^www\./, "");

if ((hostname === "cap.so" || hostname === webHost) && segments.length === 2 && segments[0] === "s") {
  videoId = segments[1];
}

This fixes both Slack unfurls and /api/oembed on self-hosted servers.

Reproduction
  1. Run Cap self-hosted with WEB_URL=https://video.example.com (official cap-web Docker image).
  2. Create a Slack app from apps/web/slack-app-manifest.json, replacing cap.so with video.example.com in the unfurl domain, redirect URL and event URL.
  3. Set SLACK_CLIENT_ID, SLACK_CLIENT_SECRET and SLACK_SIGNING_SECRET, restart cap-web, and verify the event URL in Slack (it verifies).
  4. In Cap: Organization Settings → Integrations → Slack → Connect (it connects).
  5. Use a public video with no password; the organization has no access email domain.
  6. Paste https://video.example.com/s/<id> in a Slack channel.
  7. No preview appears. The server receives the Slack event (200), and Slack never loads /embed/<id>.

Quick check without Slack:

curl -s -o /dev/null -w "%{http_code}\n" \
  "https://video.example.com/api/oembed?url=https%3A%2F%2Fvideo.example.com%2Fs%2F<id>&format=json"
# returns 400 (expected 200 with oEmbed JSON)
Additional Context
  • Cap version: official ghcr.io/capsoftware/cap-web Docker image built 2026-09-07 (arm64 sha256:5b65d137f7f7ddd767e1acb37380a4609f43287458410515a013157b56cfa83d). The same parseCapShareUrl code is on main today.
  • Operating system, version: server is Linux arm64 (AWS ECS Fargate), self-hosted with Aurora MySQL and S3, NEXT_PUBLIC_IS_CAP not set. Slack desktop app on macOS.
  • Device (optional): n/a (server-side issue)
  • Related: #2058 (Slack integration), #2122 / #2123 (share metadata on custom domains). Those fixed the Open Graph tags; this is the separate Slack-app path.
Lingua principale
Rust
Stelle
23.2k
Fork
2k
Merge medio
1g 10h
PR unite (30g)
100

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di CapSoftware/Cap

Tutte le issue di CapSoftware/Cap

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.