Closes #1985
/claim #1985
Implements a complete BigBlueButton (BBB) app-store integration, allowing Cal.com users to connect their self-hosted BBB server and automatically create meeting rooms for bookings.
No new dependencies — BBB uses a simple query-string + checksum API. All HTTP is done with native fetch, XML parsing uses a tiny regex-based parser, and crypto uses Node.js built-in createHash. Zero new npm packages.
Checksum correctness — The buildBBBUrl function computes hash(apiName + queryString + sharedSecret) exactly per the BBB API security model, supporting sha1/sha256/sha384/sha512.
fullName in join URL — The BBB join endpoint requires fullName to be present in the checksum input. Our getBBBJoinUrl always includes it. (Competing PR #27958 was flagged by cubic for missing this.)
moderatorPW in end API — The BBB end endpoint requires the moderator password. We store attendeePW:moderatorPW in bookingRef.meetingPassword so the split is available at update/delete time. (Competing PR #27958 was flagged by cubic for passing empty password to end.)
Server-side validation — The /save endpoint validates that the BBB server is reachable and returns API version >= 2.0 before persisting credentials. Users get a clear error if the URL or secret is wrong.
| File | Purpose |
|---|---|
packages/app-store/bigbluebutton/lib/bbbapi.ts |
Core BBB API client |
packages/app-store/bigbluebutton/lib/bbbapi.test.ts |
14 unit tests |
packages/app-store/bigbluebutton/lib/VideoApiAdapter.ts |
Cal.com VideoApiAdapter |
packages/app-store/bigbluebutton/zod.ts |
Credential schema |
packages/app-store/bigbluebutton/_metadata.ts |
App metadata |
packages/app-store/bigbluebutton/api/add.ts |
Install endpoint |
packages/app-store/bigbluebutton/api/save.ts |
Save + validate credentials |
packages/app-store/bigbluebutton/pages/setup/index.tsx |
Setup form |
apps/web/components/apps/bigbluebutton/Setup.tsx |
Web setup component |
| Generated files | Updated metadata/adapter registries |
New keys added to apps/web/public/static/locales/en/common.json (see i18n-keys.md):
bigbluebutton_connectedbigbluebutton_setupbigbluebutton_setup_descriptionbigbluebutton_server_url + _hintbigbluebutton_shared_secret + _placeholder + _hintbigbluebutton_checksum_algorithmbigbluebutton_setup_helpbigbluebutton_api_docssudo bbb-conf --secretkiro-dev28
@kiro-dev28
Cal.com, Inc.
@cal