Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte Adaptée aux débutants
#2,546 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@mangeshraut712 y travaille déjà.

Depuis le 14/10/2026.

  • #1 par @mangeshraut712 — fermée sans fusion
  • #2549 par @mangeshraut712 — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
nextjs, typescript
Domaine
api, backend

Piste de recherche

Commence par parseCapShareUrl dans apps/web/lib/oembed.ts, appelée par processSlackEvent et /api/oembed, puis vérifie comment serverEnv().WEB_URL est déjà lu ailleurs dans apps/web. Confirme qu'un lien /s/<id> sur un hôte autre que cap.so renvoie aujourd'hui null. C'est terminé lorsqu'un lien de partage sur l'hôte WEB_URL configuré se résout en ID de vidéo dans les deux chemins, et que les liens sur les autres hôtes renvoient toujours null.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.
Langage dominant
Rust
Étoiles
23.2k
Forks
2k
Merge moyen
1 j 10 h
PR mergées (30 j)
100

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de CapSoftware/Cap

Toutes les issues de CapSoftware/Cap

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.