feat: implement frontend video platform configuration and abstraction

- Add NEXT_PUBLIC_VIDEO_PLATFORM environment variable support
- Create video platform abstraction layer with factory pattern
- Implement Whereby and Jitsi platform providers
- Update room meeting page to use platform-agnostic component
- Add platform display in room management (cards and table views)
- Support single platform per deployment configuration
- Maintain backward compatibility with existing Whereby integration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-04 12:21:51 -06:00
parent 41224a424c
commit 293f7d4f1f
20 changed files with 1254 additions and 293 deletions

View File

@@ -74,6 +74,11 @@ import type {
V1ZulipGetTopicsResponse,
V1WherebyWebhookData,
V1WherebyWebhookResponse,
V1JitsiEventsWebhookData,
V1JitsiEventsWebhookResponse,
V1JibriRecordingCompleteData,
V1JibriRecordingCompleteResponse,
V1JitsiHealthCheckResponse,
} from "./types.gen";
export class DefaultService {
@@ -255,7 +260,6 @@ export class DefaultService {
/**
* Rooms Test Webhook
* Test webhook configuration by sending a sample payload.
* @param data The data for the request.
* @param data.roomId
* @returns WebhookTestResult Successful Response
@@ -939,4 +943,70 @@ export class DefaultService {
},
});
}
/**
* Jitsi Events Webhook
* Handle Prosody event-sync webhooks from Jitsi Meet.
*
* Expected event types:
* - muc-occupant-joined: participant joined the room
* - muc-occupant-left: participant left the room
* - jibri-recording-on: recording started
* - jibri-recording-off: recording stopped
* @param data The data for the request.
* @param data.requestBody
* @returns unknown Successful Response
* @throws ApiError
*/
public v1JitsiEventsWebhook(
data: V1JitsiEventsWebhookData,
): CancelablePromise<V1JitsiEventsWebhookResponse> {
return this.httpRequest.request({
method: "POST",
url: "/v1/jitsi/events",
body: data.requestBody,
mediaType: "application/json",
errors: {
422: "Validation Error",
},
});
}
/**
* Jibri Recording Complete
* Handle Jibri recording completion webhook.
*
* This endpoint is called by the Jibri finalize script when a recording
* is completed and uploaded to storage.
* @param data The data for the request.
* @param data.requestBody
* @returns unknown Successful Response
* @throws ApiError
*/
public v1JibriRecordingComplete(
data: V1JibriRecordingCompleteData,
): CancelablePromise<V1JibriRecordingCompleteResponse> {
return this.httpRequest.request({
method: "POST",
url: "/v1/jibri/recording-complete",
body: data.requestBody,
mediaType: "application/json",
errors: {
422: "Validation Error",
},
});
}
/**
* Jitsi Health Check
* Simple health check endpoint for Jitsi webhook configuration.
* @returns unknown Successful Response
* @throws ApiError
*/
public v1JitsiHealthCheck(): CancelablePromise<V1JitsiHealthCheckResponse> {
return this.httpRequest.request({
method: "GET",
url: "/v1/jitsi/health",
});
}
}