import { Jargon } from '../jargon' import { ProcessingStatus, ResourceId, ResourceResponse, SessionStream, SessionStreamCreate, SessionStreamSceneCreate, User, } from '../models' export interface UpdateMediaPayload { recordEnd: number recordStart: number audioFile?: Blob audioFileName?: string videoFile?: Blob videoFileName?: string } export class SessionStreams { constructor(private jargon: Jargon) { } public fetch(streamId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'GET', url: `/streams/${streamId}`, }) } public create(payload: SessionStreamCreate, user?: Partial): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/streams`, data: { OTStream: payload, user, }, }) } public update(streamId: ResourceId, payload: Partial): ResourceResponse { return this.jargon.request({ method: 'PUT', url: `/streams/${streamId}`, data: { OTStream: payload, }, }) } public updateStatus(streamId: ResourceId, payload: Partial): ResourceResponse { return this.jargon.request({ method: 'PUT', url: `/streams/${streamId}`, data: { OTStream: { processingStatuses: [payload], }, }, }) } public updateMedia(streamId: ResourceId, payload: UpdateMediaPayload): ResourceResponse { const data = new FormData() data.append('ot_stream[record_start]', payload.recordStart.toString()) data.append('ot_stream[record_end]', payload.recordEnd.toString()) const videoFileName = payload.videoFileName || 'video.webm' const audioFileName = payload.audioFileName || 'audio.mp3' if (!!payload.videoFile) { data.append('ot_stream[video_file]', payload.videoFile, videoFileName) } if (!!payload.audioFile) { data.append('ot_stream[audio_file]', payload.audioFile, audioFileName) } return this.jargon.request({ method: 'PUT', url: `/streams/${streamId}`, data, headers: { 'Content-Type': 'multipart/form-data' }, }) } public updateScenes(streamId: ResourceId, payload: SessionStreamSceneCreate[]): ResourceResponse { return this.jargon.request({ method: 'PUT', url: `/streams/${streamId}`, data: { OTStream: { scenes: payload, }, }, }) } // related actions public startPipeline(streamId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'POST', url: `streams/${streamId}/start_pipeline`, }) } }