- Shipped
- August 5, 2026 at 6:35 AM UTC
- Author
- Kamo
- Commit
- e9c987e
Kamo Meets was the only possible backend: OrgMeetConfig was a flat Meet settings bag and a MeetingRecord held nothing but a room name. This adds the schema for running an organization on Zoom or Microsoft Teams instead. - meet.provider: MeetingProviderType / MeetingProviderStatus, the per-org OrgMeetingProviderEntity (encrypted credential blob, last-verified state) and OrgMeetingOAuthTokenEntity, mirroring the email_provider package that already backs the email provider abstraction. - MeetingRecord gains the hosting provider's own identity — remote meeting id, join and host URLs, passcode, host account — so a meeting can be rejoined and reconciled whoever hosts it. - MeetingRecording gains providerRecordingId, which keeps the pull of a remote provider's cloud recording idempotent. - OrgMeetConfig gains the settings Zoom and Teams support that a Meet-only config had no reason to carry: join-before-host, passcode shaping, lobby bypass scope, presenter and attendee controls, cloud recording, transcripts, provider-sent invitations, and the fallback host meetings are created under when a member has no account on the provider. Every org with no provider row resolves to KAMO_MEET, so this is inert until an admin chooses otherwise. Columns were applied to production by KamoInitializer before this landed. PlatformOAuthProviderType gains ZOOM(9) for the Zoom Marketplace app; Teams meetings reuse MICROSOFT(3). Its guard test moves with it, since an enum and the test pinning its persisted ids cannot land separately.