diff --git a/src/frontend/src/features/rooms/livekit/api/recordRoom.ts b/src/frontend/src/features/rooms/livekit/api/recordRoom.ts new file mode 100644 index 00000000..6c405c4d --- /dev/null +++ b/src/frontend/src/features/rooms/livekit/api/recordRoom.ts @@ -0,0 +1,39 @@ +import { fetchServerApi } from './fetchServerApi' +import { buildServerApiUrl } from './buildServerApiUrl' +import { useRoomData } from '../hooks/useRoomData' +import { useParams } from 'wouter' + +export const useRecordRoom = () => { + const data = useRoomData() + const { roomId: roomSlug } = useParams() + + const recordRoom = () => { + if (!data || !data?.livekit) { + throw new Error('Room data is not available') + } + if (!roomSlug) { + throw new Error('Room ID is not available') + } + return fetchServerApi( + buildServerApiUrl( + data.livekit.url, + '/twirp/livekit.Egress/StartRoomCompositeEgress' + ), + data.livekit.token, + { + method: 'POST', + body: JSON.stringify({ + room_name: data.livekit.room, + audio_only: true, + file_outputs: [ + { + file_extension: 'ogg', + filepath: `{room_name}_{time}_${roomSlug}`, + }, + ], + }), + } + ) + } + return { recordRoom } +}