import { Jargon } from '../jargon' import { Bookmark, ListSession, ProcessingStatus, ResourceId, ResourceResponse, Session, SessionHighlight, SessionReport, SessionStream, SessionTranscript, } from '../models' export interface ListSessionsParams { completed?: boolean } export interface FetchStreamsParams { hasAudio?: boolean hasVideo?: boolean videoType?: string } export interface FetchOpentokTokenParams { email?: string name?: string } export class Sessions { constructor(private jargon: Jargon) { } public list(params?: ListSessionsParams): ResourceResponse { return this.jargon.request({ method: 'GET', url: '/sessions', params, }) } public fetch(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'GET', url: `/sessions/${sessionId}`, }) } public create(payload?: Partial): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/sessions`, data: { session: payload, }, }) } public createAnonymous(payload?: Partial): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/sessions/anonymous`, data: payload, }) } public update(sessionId: ResourceId, payload: Partial): ResourceResponse { return this.jargon.request({ method: 'PUT', url: `/sessions/${sessionId}`, data: { session: payload, }, }) } public updateStatus(sessionId: ResourceId, payload: Partial): ResourceResponse { return this.jargon.request({ method: 'PUT', url: `/sessions/${sessionId}`, data: { session: { processingStatuses: [payload], }, }, }) } // moderator session actions public start(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/sessions/${sessionId}/start`, }) } public stop(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/sessions/${sessionId}/stop`, }) } public complete(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'POST', url: `/sessions/${sessionId}/complete`, }) } public search(term: string): ResourceResponse { return this.jargon.request({ method: 'GET', url: `/sessions/search`, params: { q: term, }, }) } // related models public fetchReport(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'GET', url: `sessions/${sessionId}/report`, }) } public fetchStreams(sessionId: ResourceId, params?: FetchStreamsParams): ResourceResponse { return this.jargon.request({ method: 'GET', url: `sessions/${sessionId}/streams`, params, }) } public fetchHighlights(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'GET', url: `sessions/${sessionId}/highlights`, }) } public fetchTranscript(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'GET', url: `sessions/${sessionId}/transcript`, }) } public fetchOpentokToken(opentokId: string, params?: FetchOpentokTokenParams): ResourceResponse { return this.jargon.request({ method: 'GET', url: `sessions/join/${opentokId}`, params, }).then((response) => response.token) } // related actions public startPipeline(sessionId: ResourceId): ResourceResponse { return this.jargon.request({ method: 'POST', url: `sessions/${sessionId}/start_pipeline`, }) } public bookmark(sessionId: ResourceId, payload: Partial): ResourceResponse { return this.jargon.request({ method: 'POST', url: `sessions/${sessionId}/bookmarks`, data: { bookmark: payload, }, }) } }