@techsee/techsee-media-service 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts +1 -2
- package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.d.ts +2 -4
- package/lib/MultiParty/OpentokMultiPartyService.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiPartyService.js +9 -14
- package/lib/MultiParty/OpentokMultiPartyService.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SessionClientRole } from '../MediaConstants';
|
|
2
1
|
import { SessionSettings } from './Contracts';
|
|
3
2
|
import { MultiPartyService } from './MultiPartyService';
|
|
4
|
-
export declare const createMultiPartyService: (settings: SessionSettings, getParticipantDomId: (
|
|
3
|
+
export declare const createMultiPartyService: (settings: SessionSettings, getParticipantDomId: (connectionId: string) => string) => MultiPartyService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MultiPartyServiceFactory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MultiPartyServiceFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,aAAc,eAAe,sCAAsC,MAAM,KAAK,MAAM,KAAG,iBAM1H,CAAC","file":"MultiPartyServiceFactory.d.ts","sourcesContent":["import {MediaServiceType, SessionClientRole} from '../MediaConstants';\nimport {OpentokMultiPartyService} from './OpentokMultiPartyService';\nimport {SessionSettings} from './Contracts';\nimport {MultiPartyService} from './MultiPartyService';\n\nexport const createMultiPartyService = (settings: SessionSettings, getParticipantDomId: (connectionId: string) => string): MultiPartyService => {\n if (settings.mediaServiceType === MediaServiceType.OPENTOK) {\n return new OpentokMultiPartyService(settings, getParticipantDomId);\n }\n\n throw new Error('NOT_SUPPORTED');\n};\n"]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { MultiPartyService, Subscriber } from './MultiPartyService';
|
|
2
|
-
import { SessionClientRole } from '../MediaConstants';
|
|
3
2
|
import { BrandingSettings, Credentials, SessionSettings } from './Contracts';
|
|
4
3
|
export declare class OpentokMultiPartyService extends MultiPartyService {
|
|
5
4
|
subscribers: Array<Subscriber>;
|
|
6
5
|
session?: any;
|
|
7
6
|
currentPublisher?: any;
|
|
8
7
|
branding?: BrandingSettings;
|
|
9
|
-
getParticipantId: (
|
|
8
|
+
getParticipantId: (connectionId: string) => string;
|
|
10
9
|
participantCount: number;
|
|
11
|
-
constructor(settings: SessionSettings, getParticipantDomId: (
|
|
10
|
+
constructor(settings: SessionSettings, getParticipantDomId: (connectionId: string) => string);
|
|
12
11
|
get ownConnectionId(): string | undefined;
|
|
13
12
|
connect: (credentials: Credentials) => void;
|
|
14
13
|
disconnect: () => void;
|
|
@@ -18,7 +17,6 @@ export declare class OpentokMultiPartyService extends MultiPartyService {
|
|
|
18
17
|
switchCamera: () => Promise<void>;
|
|
19
18
|
private getClientRole;
|
|
20
19
|
initPublisher: (settings: SessionSettings) => Promise<void>;
|
|
21
|
-
private getParticipantIdForStream;
|
|
22
20
|
streamCreatedHandler: (event: any) => Promise<void>;
|
|
23
21
|
streamPropertyChangedHandler: (event: any) => void;
|
|
24
22
|
streamDestroyedHandler: (event: any) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,iBAAiB,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAC;AACjI,OAAO,EAAwB,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAa3E,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC3D,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IACpC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAElF,gBAAgB,SAAK;gBAET,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM;IAO3H,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA6BxC;IAEF,UAAU,QAAO,IAAI,CAYnB;IAEF,OAAO,CAAC,eAAe,CAwBrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBAA8B,OAAO,KAAG,QAAQ,IAAI,CAAC,CAiBtE;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAkC3C;IAEF,OAAO,CAAC,aAAa;IAIrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CA6E9D;IAEF,OAAO,CAAC,yBAAyB;IAMjC,oBAAoB,kBAEhB,QAAQ,IAAI,CAAC,CAgDf;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAY/C;IAEF,sBAAsB,kBAGlB,IAAI,CAON;IAEF,wBAAwB,kBAEpB,IAAI,CAmBN;IAEF,0BAA0B,kBAGtB,IAAI,CAcN;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAGjC;CACJ","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import {maxParticipantsNumber, MULTI_PARTY_EVENTS, MultiPartyService, Subscriber, DEFAULT_AVATAR_URI} from './MultiPartyService';\nimport {MultiPartyCameraTypes, SessionClientRole} from '../MediaConstants';\nimport {BrandingSettings, Credentials, SessionSettings} from './Contracts';\nimport {getMediaTracer} from '../MediaUtils';\nimport {checkAudioCapabilities, checkVideoCapabilities, checkIsMobile} from './MediaCapabilitiesUtils';\nimport {MediaCapabilitiesService} from './MediaCapabilitiesService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n subscribers: Array<Subscriber> = [];\n session?: any;\n currentPublisher?: any;\n branding?: BrandingSettings;\n getParticipantId: (clientRole: SessionClientRole, connectionId: string) => string;\n\n participantCount = 0;\n\n constructor(settings: SessionSettings, getParticipantDomId: (clientRole: SessionClientRole, connectionId: string) => string) {\n super(settings);\n\n this.branding = settings.branding;\n this.getParticipantId = getParticipantDomId;\n }\n\n get ownConnectionId(): string | undefined {\n return this.session?.connection?.connectionId;\n }\n\n connect = (credentials: Credentials): void => {\n try {\n this.session = window?.OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(err)}});\n\n return;\n }\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on('streamPropertyChanged', this.streamPropertyChangedHandler);\n this.session.on('sessionDisconnected', this.sessionDisconnectedHandler);\n\n this.session.connect(credentials.token, async (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = null;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n\n return;\n }\n\n await this.createPublisher(this.settings);\n });\n };\n\n disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n this.participantCount = 0;\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n private createPublisher = async (settings: Readonly<SessionSettings>): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n\n this.currentPublisher && this.session?.publish(this.currentPublisher, this.traceErrorCallback);\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (shouldPublishVideo: boolean): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(`cameraType not valid: ${this.settings.selectedCamera}`);\n }\n\n return this.currentPublisher?.setVideoSource(deviceId)\n .then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {cameraSource: cameraType});\n trace.info(`Success to switch camera to cameraType: ${cameraType}`);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (connection?.data && JSON.parse(connection.data).clientRole) || SessionClientRole.USER;\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const {selectedCamera} = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {frontCameraDeviceId, backCameraDeviceId} = mediaCapabilitiesService;\n\n const videoSourceId = (selectedCamera === MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) || undefined;\n const mobileCameraType = settings.selectedCamera === MultiPartyCameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT;\n\n const properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n };\n\n this.currentPublisher = window?.OT.initPublisher(this.getParticipantIdForStream(this.session?.connection),\n properties, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n this.emit(MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {event: event,\n participantId: this.getParticipantIdForStream(event?.stream?.connection)});\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantIdForStream(connection);\n const isOwnConnection = this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on('streamCreated', async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantIdForStream(event?.stream?.connection);\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated,\n {event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection: this.ownConnectionId === event?.stream?.connection?.connectionId,\n });\n\n trace.info('publisher stream created', {event,\n hasAudio: this.currentPublisher?.['stream.hasAudio'],\n participantId});\n });\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getParticipantIdForStream(connection: any) {\n const clientRole = this.getClientRole(connection);\n\n return this.getParticipantId(clientRole, connection.connectionId);\n }\n\n streamCreatedHandler = async (event: any & {\n stream: any;\n }): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const {stream} = event;\n const {connection} = stream;\n const participantId = this.getParticipantIdForStream(connection);\n\n await MediaCapabilitiesService.setDevicesList();\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated,\n {event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === (event?.stream?.connection?.connectionId) as string,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio});\n\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n\n if (this.subscribers.length >= maxParticipantsNumber - 1) {\n trace.info(`a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`);\n } else {\n const properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n };\n\n const subscriber = event.target.subscribe(event.stream, participantId, properties, (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n });\n\n this.subscribers.push({\n subscriber,\n connectionId: connection.connectionId,\n clientRole: this.getClientRole(connection)\n });\n }\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const {stream} = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantIdForStream(stream?.connection),\n isOwnConnection: this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (event: any & {\n stream: any;\n reason: string;\n }): void => {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n const destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {event: event, participantId: this.getParticipantIdForStream(event?.stream?.connection)});\n this.subscribers = this.subscribers.filter((subscriber) => subscriber.connectionId !== destroyedConnectionId);\n };\n\n connectionCreatedHandler = (event: any & {\n connection: any;\n }): void => {\n trace.info('connectionCreatedHandler', event);\n\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n ++this.participantCount;\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.participantCount);\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole, event,\n participantId: this.getParticipantIdForStream(connection),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (event: any & {\n connection: any;\n reason: string;\n }): void => {\n const {connection} = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {clientRole, event, participantId: this.getParticipantIdForStream(event?.connection)});\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\n --this.participantCount;\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.participantCount);\n this.session = null;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n this?.session?.signal({retryAfterReconnect: true});\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiPartyService.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,iBAAiB,EAAE,UAAU,EAAqB,MAAM,qBAAqB,CAAC;AAEjI,OAAO,EAAC,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,aAAa,CAAC;AAa3E,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC3D,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IACpC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAEnD,gBAAgB,SAAK;gBAET,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM;IAO5F,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,OAAO,gBAAiB,WAAW,KAAG,IAAI,CA6BxC;IAEF,UAAU,QAAO,IAAI,CAYnB;IAEF,OAAO,CAAC,eAAe,CAwBrB;IAEK,YAAY,eAAsB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAmB9D;IAEK,YAAY,uBAA8B,OAAO,KAAG,QAAQ,IAAI,CAAC,CAiBtE;IAEK,YAAY,QAAa,QAAQ,IAAI,CAAC,CAkC3C;IAEF,OAAO,CAAC,aAAa;IAIrB,aAAa,aAAoB,eAAe,KAAG,QAAQ,IAAI,CAAC,CA6E9D;IAEF,oBAAoB,kBAEhB,QAAQ,IAAI,CAAC,CAgDf;IAEF,4BAA4B,UAAW,GAAG,KAAG,IAAI,CAY/C;IAEF,sBAAsB,kBAGlB,IAAI,CAON;IAEF,wBAAwB,kBAEpB,IAAI,CAmBN;IAEF,0BAA0B,kBAGtB,IAAI,CAcN;IAEF,kBAAkB,iCAAoB,IAAI,CAExC;IAEF,OAAO,CAAC,0BAA0B,CAGjC;CACJ","file":"OpentokMultiPartyService.d.ts","sourcesContent":["import {maxParticipantsNumber, MULTI_PARTY_EVENTS, MultiPartyService, Subscriber, DEFAULT_AVATAR_URI} from './MultiPartyService';\nimport {MultiPartyCameraTypes, SessionClientRole} from '../MediaConstants';\nimport {BrandingSettings, Credentials, SessionSettings} from './Contracts';\nimport {getMediaTracer} from '../MediaUtils';\nimport {checkAudioCapabilities, checkVideoCapabilities, checkIsMobile} from './MediaCapabilitiesUtils';\nimport {MediaCapabilitiesService} from './MediaCapabilitiesService';\n\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\nexport class OpentokMultiPartyService extends MultiPartyService {\n subscribers: Array<Subscriber> = [];\n session?: any;\n currentPublisher?: any;\n branding?: BrandingSettings;\n getParticipantId: (connectionId: string) => string;\n\n participantCount = 0;\n\n constructor(settings: SessionSettings, getParticipantDomId: (connectionId: string) => string) {\n super(settings);\n\n this.branding = settings.branding;\n this.getParticipantId = getParticipantDomId;\n }\n\n get ownConnectionId(): string | undefined {\n return this.session?.connection?.connectionId;\n }\n\n connect = (credentials: Credentials): void => {\n try {\n this.session = window?.OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(err)}});\n\n return;\n }\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n this.session.on('streamPropertyChanged', this.streamPropertyChangedHandler);\n this.session.on('sessionDisconnected', this.sessionDisconnectedHandler);\n\n this.session.connect(credentials.token, async (error?: any) => {\n if (error) {\n this.session?.off();\n this.session = null;\n this.traceErrorCallback(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n\n return;\n }\n\n await this.createPublisher(this.settings);\n });\n };\n\n disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n this.participantCount = 0;\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n private createPublisher = async (settings: Readonly<SessionSettings>): Promise<void> => {\n const canStartWithAudio = await checkAudioCapabilities();\n const canStartWithVideo = await checkVideoCapabilities();\n\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.initPublisher({\n ...settings,\n cameraEnabled: settings.cameraEnabled && canStartWithVideo,\n startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio\n });\n\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n\n this.currentPublisher && this.session?.publish(this.currentPublisher, this.traceErrorCallback);\n }\n };\n\n public publishAudio = async (shouldMute: boolean): Promise<void> => {\n const canPublishAudio = await checkAudioCapabilities();\n\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute\n });\n } else {\n this.currentPublisher.publishAudio(shouldMute);\n }\n };\n\n public publishVideo = async (shouldPublishVideo: boolean): Promise<void> => {\n const canPublishVideo = await checkVideoCapabilities();\n\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n await this.createPublisher({\n ...this.settings,\n cameraEnabled: shouldPublishVideo\n });\n } else {\n this.currentPublisher.publishVideo(shouldPublishVideo);\n }\n };\n\n public switchCamera = async (): Promise<void> => {\n try {\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n\n let deviceId = '';\n let cameraType: MultiPartyCameraTypes;\n\n switch (this.settings.selectedCamera) {\n case MultiPartyCameraTypes.BACK:\n cameraType = MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MultiPartyCameraTypes.FRONT:\n cameraType = MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(`cameraType not valid: ${this.settings.selectedCamera}`);\n }\n\n return this.currentPublisher?.setVideoSource(deviceId)\n .then(() => {\n this.settings.selectedCamera = cameraType;\n this.emit(MULTI_PARTY_EVENTS.cameraSourceChanged, {cameraSource: cameraType});\n trace.info(`Success to switch camera to cameraType: ${cameraType}`);\n });\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n private getClientRole(connection?: any): SessionClientRole {\n return (connection?.data && JSON.parse(connection.data).clientRole) || SessionClientRole.USER;\n }\n\n initPublisher = async (settings: SessionSettings): Promise<void> => {\n try {\n const {selectedCamera} = settings;\n const isMobile = checkIsMobile();\n\n const mediaCapabilitiesService = await MediaCapabilitiesService.getInstance();\n const {frontCameraDeviceId, backCameraDeviceId} = mediaCapabilitiesService;\n\n const videoSourceId = (selectedCamera === MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) || undefined;\n const mobileCameraType = settings.selectedCamera === MultiPartyCameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT;\n\n const properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n };\n\n this.currentPublisher = window?.OT.initPublisher(this.getParticipantId(this.session?.connection.connectionId),\n properties, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n this.emit(MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {event: event,\n participantId: this.getParticipantId(event?.stream?.connection.connectionId)});\n });\n this.currentPublisher.on('accessDenied', (event: any) => {\n trace.info('Publisher denied media permissions', event);\n const connection = this.session?.connection;\n const connectionId = connection?.connectionId;\n const participantId = this.getParticipantId(connection.connectionId);\n const isOwnConnection = this.ownConnectionId === connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId,\n isOwnConnection,\n participantId\n });\n });\n this.currentPublisher.on('streamCreated', async (event: any) => {\n await MediaCapabilitiesService.setDevicesList();\n\n const participantId = this.getParticipantId(event?.stream?.connection.connectionId);\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated,\n {event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n hasAudio: event?.stream?.hasAudio,\n hasVideo: event?.stream?.hasVideo,\n isOwnConnection: this.ownConnectionId === event?.stream?.connection?.connectionId,\n });\n\n trace.info('publisher stream created', {event,\n hasAudio: this.currentPublisher?.['stream.hasAudio'],\n participantId});\n });\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n streamCreatedHandler = async (event: any & {\n stream: any;\n }): Promise<void> => {\n trace.info('streamCreatedHandler', event.stream);\n\n const {stream} = event;\n const {connection} = stream;\n const participantId = this.getParticipantId(connection.connectionId);\n\n await MediaCapabilitiesService.setDevicesList();\n\n this.emit(MULTI_PARTY_EVENTS.streamCreated,\n {event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted,\n isOwnConnection: this.ownConnectionId === (event?.stream?.connection?.connectionId) as string,\n hasVideo: event?.stream?.hasVideo,\n hasAudio: event?.stream?.hasAudio});\n\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n\n if (this.subscribers.length >= maxParticipantsNumber - 1) {\n trace.info(`a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`);\n } else {\n const properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: this.branding?.backgroundImageURI || DEFAULT_AVATAR_URI\n },\n };\n\n const subscriber = event.target.subscribe(event.stream, participantId, properties, (err: any) => {\n this.traceErrorCallback(err);\n subscriber?.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n });\n\n this.subscribers.push({\n subscriber,\n connectionId: connection.connectionId,\n clientRole: this.getClientRole(connection)\n });\n }\n };\n\n streamPropertyChangedHandler = (event: any): void => {\n trace.info('streamPropertyChangedHandler', event);\n\n const {stream} = event;\n\n this.emit(MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream?.hasVideo,\n hasAudio: stream?.hasAudio,\n participantId: this.getParticipantId(stream?.connection.connectionId),\n isOwnConnection: this.ownConnectionId === stream?.connection?.connectionId,\n stream\n });\n };\n\n streamDestroyedHandler = (event: any & {\n stream: any;\n reason: string;\n }): void => {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n const destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {event: event, participantId: this.getParticipantId(event?.stream?.connection.connectionId)});\n this.subscribers = this.subscribers.filter((subscriber) => subscriber.connectionId !== destroyedConnectionId);\n };\n\n connectionCreatedHandler = (event: any & {\n connection: any;\n }): void => {\n trace.info('connectionCreatedHandler', event);\n\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n ++this.participantCount;\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.participantCount);\n\n const clientRole = this.getClientRole(connection);\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole, event,\n participantId: this.getParticipantId(connection.connectionId),\n isOwnConnection: this.ownConnectionId === connection.connectionId\n });\n };\n\n connectionDestroyedHandler = (event: any & {\n connection: any;\n reason: string;\n }): void => {\n const {connection} = event;\n const clientRole = this.getClientRole(connection);\n\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {clientRole, event, participantId: this.getParticipantId(event?.connection.connectionId)});\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\n --this.participantCount;\n this.emit(MULTI_PARTY_EVENTS.participantsNumberChanged, this.participantCount);\n this.session = null;\n };\n\n traceErrorCallback = (error?: Error): void => {\n trace.error(JSON.stringify(error));\n };\n\n private sessionDisconnectedHandler = (event: any) => {\n trace.info('sessionDisconnectedHandler', event);\n this?.session?.signal({retryAfterReconnect: true});\n }\n}\n"]}
|
|
@@ -564,7 +564,7 @@ function (_super) {
|
|
|
564
564
|
videoSource: !isMobile ? videoSourceId : undefined,
|
|
565
565
|
facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined
|
|
566
566
|
};
|
|
567
|
-
this.currentPublisher = window === null || window === void 0 ? void 0 : window.OT.initPublisher(this.
|
|
567
|
+
this.currentPublisher = window === null || window === void 0 ? void 0 : window.OT.initPublisher(this.getParticipantId((_b = this.session) === null || _b === void 0 ? void 0 : _b.connection.connectionId), properties, this.traceErrorCallback);
|
|
568
568
|
|
|
569
569
|
if (!this.currentPublisher) {
|
|
570
570
|
trace.error('failed to init publisher');
|
|
@@ -581,7 +581,7 @@ function (_super) {
|
|
|
581
581
|
|
|
582
582
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {
|
|
583
583
|
event: event,
|
|
584
|
-
participantId: _this.
|
|
584
|
+
participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)
|
|
585
585
|
});
|
|
586
586
|
});
|
|
587
587
|
this.currentPublisher.on('accessDenied', function (event) {
|
|
@@ -591,7 +591,7 @@ function (_super) {
|
|
|
591
591
|
var connection = (_a = _this.session) === null || _a === void 0 ? void 0 : _a.connection;
|
|
592
592
|
var connectionId = connection === null || connection === void 0 ? void 0 : connection.connectionId;
|
|
593
593
|
|
|
594
|
-
var participantId = _this.
|
|
594
|
+
var participantId = _this.getParticipantId(connection.connectionId);
|
|
595
595
|
|
|
596
596
|
var isOwnConnection = _this.ownConnectionId === connectionId;
|
|
597
597
|
|
|
@@ -617,7 +617,7 @@ function (_super) {
|
|
|
617
617
|
case 1:
|
|
618
618
|
_g.sent();
|
|
619
619
|
|
|
620
|
-
participantId = this.
|
|
620
|
+
participantId = this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId);
|
|
621
621
|
this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, {
|
|
622
622
|
event: event,
|
|
623
623
|
participantId: participantId,
|
|
@@ -672,7 +672,7 @@ function (_super) {
|
|
|
672
672
|
trace.info('streamCreatedHandler', event.stream);
|
|
673
673
|
stream = event.stream;
|
|
674
674
|
connection = stream.connection;
|
|
675
|
-
participantId = this.
|
|
675
|
+
participantId = this.getParticipantId(connection.connectionId);
|
|
676
676
|
return [4
|
|
677
677
|
/*yield*/
|
|
678
678
|
, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];
|
|
@@ -740,7 +740,7 @@ function (_super) {
|
|
|
740
740
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoAudioStatus, {
|
|
741
741
|
hasVideo: stream === null || stream === void 0 ? void 0 : stream.hasVideo,
|
|
742
742
|
hasAudio: stream === null || stream === void 0 ? void 0 : stream.hasAudio,
|
|
743
|
-
participantId: _this.
|
|
743
|
+
participantId: _this.getParticipantId(stream === null || stream === void 0 ? void 0 : stream.connection.connectionId),
|
|
744
744
|
isOwnConnection: _this.ownConnectionId === ((_a = stream === null || stream === void 0 ? void 0 : stream.connection) === null || _a === void 0 ? void 0 : _a.connectionId),
|
|
745
745
|
stream: stream
|
|
746
746
|
});
|
|
@@ -755,7 +755,7 @@ function (_super) {
|
|
|
755
755
|
|
|
756
756
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, {
|
|
757
757
|
event: event,
|
|
758
|
-
participantId: _this.
|
|
758
|
+
participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId)
|
|
759
759
|
});
|
|
760
760
|
|
|
761
761
|
_this.subscribers = _this.subscribers.filter(function (subscriber) {
|
|
@@ -780,7 +780,7 @@ function (_super) {
|
|
|
780
780
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionCreated, {
|
|
781
781
|
clientRole: clientRole,
|
|
782
782
|
event: event,
|
|
783
|
-
participantId: _this.
|
|
783
|
+
participantId: _this.getParticipantId(connection.connectionId),
|
|
784
784
|
isOwnConnection: _this.ownConnectionId === connection.connectionId
|
|
785
785
|
});
|
|
786
786
|
};
|
|
@@ -795,7 +795,7 @@ function (_super) {
|
|
|
795
795
|
_this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, {
|
|
796
796
|
clientRole: clientRole,
|
|
797
797
|
event: event,
|
|
798
|
-
participantId: _this.
|
|
798
|
+
participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId)
|
|
799
799
|
});
|
|
800
800
|
|
|
801
801
|
if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {
|
|
@@ -841,11 +841,6 @@ function (_super) {
|
|
|
841
841
|
return (connection === null || connection === void 0 ? void 0 : connection.data) && JSON.parse(connection.data).clientRole || MediaConstants_1.SessionClientRole.USER;
|
|
842
842
|
};
|
|
843
843
|
|
|
844
|
-
OpentokMultiPartyService.prototype.getParticipantIdForStream = function (connection) {
|
|
845
|
-
var clientRole = this.getClientRole(connection);
|
|
846
|
-
return this.getParticipantId(clientRole, connection.connectionId);
|
|
847
|
-
};
|
|
848
|
-
|
|
849
844
|
return OpentokMultiPartyService;
|
|
850
845
|
}(MultiPartyService_1.MultiPartyService);
|
|
851
846
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MultiParty/OpentokMultiPartyService.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","_","label","sent","trys","ops","f","y","g","verb","Symbol","iterator","v","op","TypeError","pop","push","defineProperty","exports","OpentokMultiPartyService","MultiPartyService_1","require","MediaConstants_1","MediaUtils_1","MediaCapabilitiesUtils_1","MediaCapabilitiesService_1","trace","getMediaTracer","OpentokFacingMode","_super","settings","getParticipantDomId","_this","subscribers","participantCount","connect","credentials","session","window","OT","initSession","apiKey","sessionId","err","error","JSON","stringify","emit","MULTI_PARTY_EVENTS","connectFailed","meta","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","_a","_b","off","traceErrorCallback","createPublisher","disconnect","info","canStartWithAudio","canStartWithVideo","checkAudioCapabilities","checkVideoCapabilities","currentPublisher","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraType_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","setVideoSource","cameraSourceChanged","cameraSource","isMobile","videoSourceId","mobileCameraType","properties","err_2","_c","checkIsMobile","undefined","USER","ENVIRONMENT","insertMode","fitMode","width","height","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","getParticipantIdForStream","connection","event","videoElementCreated","streamDestroyed","participantId","stream","connectionId","isOwnConnection","ownConnectionId","mediaDeviceAccessDenied","_d","_e","_f","_g","setDevicesList","streamCreated","hasAudio","hasVideo","subscriber_1","maxParticipantsNumber","target","subscribe","subscriber","clientRole","getClientRole","videoAudioStatus","destroyedConnectionId","filter","participantsNumberChanged","connectionCreated","connectionDestroyed","signal","retryAfterReconnect","getParticipantId","get","enumerable","configurable","data","parse","SessionClientRole","MultiPartyService"],"mappings":"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","file":"OpentokMultiPartyService.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiPartyService = void 0;\nvar MultiPartyService_1 = require(\"./MultiPartyService\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaUtils_1 = require(\"../MediaUtils\");\nvar MediaCapabilitiesUtils_1 = require(\"./MediaCapabilitiesUtils\");\nvar MediaCapabilitiesService_1 = require(\"./MediaCapabilitiesService\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\n// The preferred camera position to use for the video source\nvar OpentokFacingMode;\n(function (OpentokFacingMode) {\n OpentokFacingMode[\"USER\"] = \"user\";\n OpentokFacingMode[\"ENVIRONMENT\"] = \"environment\";\n})(OpentokFacingMode || (OpentokFacingMode = {}));\nvar OpentokMultiPartyService = /** @class */ (function (_super) {\n __extends(OpentokMultiPartyService, _super);\n function OpentokMultiPartyService(settings, getParticipantDomId) {\n var _this = _super.call(this, settings) || this;\n _this.subscribers = [];\n _this.participantCount = 0;\n _this.connect = function (credentials) {\n try {\n _this.session = window === null || window === void 0 ? void 0 : window.OT.initSession(credentials.apiKey, credentials.sessionId);\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(err) } });\n return;\n }\n _this.session.on('connectionCreated', _this.connectionCreatedHandler);\n _this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this.session.on('streamCreated', _this.streamCreatedHandler);\n _this.session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this.session.on('streamPropertyChanged', _this.streamPropertyChangedHandler);\n _this.session.on('sessionDisconnected', _this.sessionDisconnectedHandler);\n _this.session.connect(credentials.token, function (error) { return __awaiter(_this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (error) {\n (_a = this.session) === null || _a === void 0 ? void 0 : _a.off();\n this.session = null;\n this.traceErrorCallback(error);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.createPublisher(this.settings)];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n }); });\n };\n _this.disconnect = function () {\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n _this.session.disconnect();\n _this.participantCount = 0;\n trace.info('Disconnection from session completed');\n }\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n _this.createPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var canStartWithAudio, canStartWithVideo;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canStartWithAudio = _b.sent();\n return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 2:\n canStartWithVideo = _b.sent();\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 4];\n return [4 /*yield*/, this.initPublisher(__assign(__assign({}, settings), { cameraEnabled: settings.cameraEnabled && canStartWithVideo, startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio }))];\n case 3:\n _b.sent();\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n this.currentPublisher && ((_a = this.session) === null || _a === void 0 ? void 0 : _a.publish(this.currentPublisher, this.traceErrorCallback));\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishAudio = function (shouldMute) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishAudio;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canPublishAudio = _a.sent();\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { \n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishAudio(shouldMute);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishVideo = function (shouldPublishVideo) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishVideo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 1:\n canPublishVideo = _a.sent();\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { cameraEnabled: shouldPublishVideo }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishVideo(shouldPublishVideo);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.switchCamera = function () { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesService, deviceId, cameraType_1, err_1;\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _b.sent();\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n deviceId = '';\n switch (this.settings.selectedCamera) {\n case MediaConstants_1.MultiPartyCameraTypes.BACK:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [2 /*return*/, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n _this.settings.selectedCamera = cameraType_1;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.cameraSourceChanged, { cameraSource: cameraType_1 });\n trace.info(\"Success to switch camera to cameraType: \" + cameraType_1);\n })];\n case 2:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.initPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var selectedCamera, isMobile, mediaCapabilitiesService, frontCameraDeviceId, backCameraDeviceId, videoSourceId, mobileCameraType, properties, err_2;\n var _this = this;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 2, , 3]);\n selectedCamera = settings.selectedCamera;\n isMobile = MediaCapabilitiesUtils_1.checkIsMobile();\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _c.sent();\n frontCameraDeviceId = mediaCapabilitiesService.frontCameraDeviceId, backCameraDeviceId = mediaCapabilitiesService.backCameraDeviceId;\n videoSourceId = (selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) || undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT;\n properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_a = this.branding) === null || _a === void 0 ? void 0 : _a.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n };\n this.currentPublisher = window === null || window === void 0 ? void 0 : window.OT.initPublisher(this.getParticipantIdForStream((_b = this.session) === null || _b === void 0 ? void 0 : _b.connection), properties, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n }\n else {\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n var _a;\n trace.info('Publisher stream destroyed', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, { event: event, participantId: _this.getParticipantIdForStream((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection) });\n });\n this.currentPublisher.on('accessDenied', function (event) {\n var _a;\n trace.info('Publisher denied media permissions', event);\n var connection = (_a = _this.session) === null || _a === void 0 ? void 0 : _a.connection;\n var connectionId = connection === null || connection === void 0 ? void 0 : connection.connectionId;\n var participantId = _this.getParticipantIdForStream(connection);\n var isOwnConnection = _this.ownConnectionId === connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId: connectionId,\n isOwnConnection: isOwnConnection,\n participantId: participantId\n });\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var participantId;\n var _a, _b, _c, _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _g.sent();\n participantId = this.getParticipantIdForStream((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, { event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted, hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio,\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n isOwnConnection: this.ownConnectionId === ((_e = (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.connection) === null || _e === void 0 ? void 0 : _e.connectionId),\n });\n trace.info('publisher stream created', { event: event,\n hasAudio: (_f = this.currentPublisher) === null || _f === void 0 ? void 0 : _f['stream.hasAudio'],\n participantId: participantId });\n return [2 /*return*/];\n }\n });\n }); });\n }\n return [3 /*break*/, 3];\n case 2:\n err_2 = _c.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, participantId, properties, subscriber_1;\n var _this = this;\n var _a, _b, _c, _d, _e;\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection;\n participantId = this.getParticipantIdForStream(connection);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _f.sent();\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, { event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted, isOwnConnection: this.ownConnectionId === ((_b = (_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId),\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n hasAudio: (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.hasAudio });\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return [2 /*return*/];\n }\n if (this.subscribers.length >= MultiPartyService_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n }\n else {\n properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_e = this.branding) === null || _e === void 0 ? void 0 : _e.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n };\n subscriber_1 = event.target.subscribe(event.stream, participantId, properties, function (err) {\n _this.traceErrorCallback(err);\n subscriber_1 === null || subscriber_1 === void 0 ? void 0 : subscriber_1.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n });\n this.subscribers.push({\n subscriber: subscriber_1,\n connectionId: connection.connectionId,\n clientRole: this.getClientRole(connection)\n });\n }\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamPropertyChangedHandler = function (event) {\n var _a;\n trace.info('streamPropertyChangedHandler', event);\n var stream = event.stream;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream === null || stream === void 0 ? void 0 : stream.hasVideo,\n hasAudio: stream === null || stream === void 0 ? void 0 : stream.hasAudio,\n participantId: _this.getParticipantIdForStream(stream === null || stream === void 0 ? void 0 : stream.connection),\n isOwnConnection: _this.ownConnectionId === ((_a = stream === null || stream === void 0 ? void 0 : stream.connection) === null || _a === void 0 ? void 0 : _a.connectionId),\n stream: stream\n });\n };\n _this.streamDestroyedHandler = function (event) {\n var _a;\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, { event: event, participantId: _this.getParticipantIdForStream((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection) });\n _this.subscribers = _this.subscribers.filter(function (subscriber) { return subscriber.connectionId !== destroyedConnectionId; });\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n ++_this.participantCount;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.participantCount);\n var clientRole = _this.getClientRole(connection);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole: clientRole, event: event,\n participantId: _this.getParticipantIdForStream(connection),\n isOwnConnection: _this.ownConnectionId === connection.connectionId\n });\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var clientRole = _this.getClientRole(connection);\n trace.info('connectionDestroyedHandler', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, { clientRole: clientRole, event: event, participantId: _this.getParticipantIdForStream(event === null || event === void 0 ? void 0 : event.connection) });\n if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {\n return;\n }\n --_this.participantCount;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.participantCount);\n _this.session = null;\n };\n _this.traceErrorCallback = function (error) {\n trace.error(JSON.stringify(error));\n };\n _this.sessionDisconnectedHandler = function (event) {\n var _a;\n trace.info('sessionDisconnectedHandler', event);\n (_a = _this === null || _this === void 0 ? void 0 : _this.session) === null || _a === void 0 ? void 0 : _a.signal({ retryAfterReconnect: true });\n };\n _this.branding = settings.branding;\n _this.getParticipantId = getParticipantDomId;\n return _this;\n }\n Object.defineProperty(OpentokMultiPartyService.prototype, \"ownConnectionId\", {\n get: function () {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId;\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiPartyService.prototype.getClientRole = function (connection) {\n return ((connection === null || connection === void 0 ? void 0 : connection.data) && JSON.parse(connection.data).clientRole) || MediaConstants_1.SessionClientRole.USER;\n };\n OpentokMultiPartyService.prototype.getParticipantIdForStream = function (connection) {\n var clientRole = this.getClientRole(connection);\n return this.getParticipantId(clientRole, connection.connectionId);\n };\n return OpentokMultiPartyService;\n}(MultiPartyService_1.MultiPartyService));\nexports.OpentokMultiPartyService = OpentokMultiPartyService;\n\n//# sourceMappingURL=OpentokMultiPartyService.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MultiParty/OpentokMultiPartyService.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","_","label","sent","trys","ops","f","y","g","verb","Symbol","iterator","v","op","TypeError","pop","push","defineProperty","exports","OpentokMultiPartyService","MultiPartyService_1","require","MediaConstants_1","MediaUtils_1","MediaCapabilitiesUtils_1","MediaCapabilitiesService_1","trace","getMediaTracer","OpentokFacingMode","_super","settings","getParticipantDomId","_this","subscribers","participantCount","connect","credentials","session","window","OT","initSession","apiKey","sessionId","err","error","JSON","stringify","emit","MULTI_PARTY_EVENTS","connectFailed","meta","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","streamPropertyChangedHandler","sessionDisconnectedHandler","token","_a","_b","off","traceErrorCallback","createPublisher","disconnect","info","canStartWithAudio","canStartWithVideo","checkAudioCapabilities","checkVideoCapabilities","currentPublisher","initPublisher","cameraEnabled","startWithAudioMuted","Error","publish","publishAudio","shouldMute","canPublishAudio","publishVideo","shouldPublishVideo","canPublishVideo","switchCamera","mediaCapabilitiesService","deviceId","cameraType_1","err_1","MediaCapabilitiesService","getInstance","supportSwitchCamera","selectedCamera","MultiPartyCameraTypes","BACK","FRONT","frontCameraDeviceId","backCameraDeviceId","setVideoSource","cameraSourceChanged","cameraSource","isMobile","videoSourceId","mobileCameraType","properties","err_2","_c","checkIsMobile","undefined","USER","ENVIRONMENT","insertMode","fitMode","width","height","style","buttonDisplayMode","archiveStatusDisplayMode","audioLevelDisplayMode","backgroundImageURI","branding","DEFAULT_AVATAR_URI","videoSource","facingMode","getParticipantId","connection","connectionId","event","videoElementCreated","streamDestroyed","participantId","stream","isOwnConnection","ownConnectionId","mediaDeviceAccessDenied","_d","_e","_f","_g","setDevicesList","streamCreated","hasAudio","hasVideo","subscriber_1","maxParticipantsNumber","target","subscribe","subscriber","clientRole","getClientRole","videoAudioStatus","destroyedConnectionId","filter","participantsNumberChanged","connectionCreated","connectionDestroyed","signal","retryAfterReconnect","get","enumerable","configurable","data","parse","SessionClientRole","MultiPartyService"],"mappings":"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","file":"OpentokMultiPartyService.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiPartyService = void 0;\nvar MultiPartyService_1 = require(\"./MultiPartyService\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaUtils_1 = require(\"../MediaUtils\");\nvar MediaCapabilitiesUtils_1 = require(\"./MediaCapabilitiesUtils\");\nvar MediaCapabilitiesService_1 = require(\"./MediaCapabilitiesService\");\nvar trace = MediaUtils_1.getMediaTracer('Multiparty');\n// The preferred camera position to use for the video source\nvar OpentokFacingMode;\n(function (OpentokFacingMode) {\n OpentokFacingMode[\"USER\"] = \"user\";\n OpentokFacingMode[\"ENVIRONMENT\"] = \"environment\";\n})(OpentokFacingMode || (OpentokFacingMode = {}));\nvar OpentokMultiPartyService = /** @class */ (function (_super) {\n __extends(OpentokMultiPartyService, _super);\n function OpentokMultiPartyService(settings, getParticipantDomId) {\n var _this = _super.call(this, settings) || this;\n _this.subscribers = [];\n _this.participantCount = 0;\n _this.connect = function (credentials) {\n try {\n _this.session = window === null || window === void 0 ? void 0 : window.OT.initSession(credentials.apiKey, credentials.sessionId);\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(err) } });\n return;\n }\n _this.session.on('connectionCreated', _this.connectionCreatedHandler);\n _this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this.session.on('streamCreated', _this.streamCreatedHandler);\n _this.session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this.session.on('streamPropertyChanged', _this.streamPropertyChangedHandler);\n _this.session.on('sessionDisconnected', _this.sessionDisconnectedHandler);\n _this.session.connect(credentials.token, function (error) { return __awaiter(_this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (error) {\n (_a = this.session) === null || _a === void 0 ? void 0 : _a.off();\n this.session = null;\n this.traceErrorCallback(error);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.createPublisher(this.settings)];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n }); });\n };\n _this.disconnect = function () {\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n _this.session.disconnect();\n _this.participantCount = 0;\n trace.info('Disconnection from session completed');\n }\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n _this.createPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var canStartWithAudio, canStartWithVideo;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canStartWithAudio = _b.sent();\n return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 2:\n canStartWithVideo = _b.sent();\n if (!canStartWithAudio && !canStartWithVideo) {\n // FIXME: use emitter\n trace.error('Did not create publisher due to lack of media capabilities.');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 4];\n return [4 /*yield*/, this.initPublisher(__assign(__assign({}, settings), { cameraEnabled: settings.cameraEnabled && canStartWithVideo, startWithAudioMuted: settings.startWithAudioMuted && canStartWithAudio }))];\n case 3:\n _b.sent();\n if (!this.currentPublisher) {\n throw new Error('Creating session requires initialized publisher');\n }\n this.currentPublisher && ((_a = this.session) === null || _a === void 0 ? void 0 : _a.publish(this.currentPublisher, this.traceErrorCallback));\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishAudio = function (shouldMute) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishAudio;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkAudioCapabilities()];\n case 1:\n canPublishAudio = _a.sent();\n // why do we care about audio if 'shouldMute' is true?\n if (shouldMute && !canPublishAudio) {\n trace.error('could not publish audio');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { \n // so if 'shouldMute' is true then we DON't mute?\n startWithAudioMuted: !shouldMute }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishAudio(shouldMute);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.publishVideo = function (shouldPublishVideo) { return __awaiter(_this, void 0, void 0, function () {\n var canPublishVideo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesUtils_1.checkVideoCapabilities()];\n case 1:\n canPublishVideo = _a.sent();\n if (shouldPublishVideo && !canPublishVideo) {\n trace.error('could not publish video');\n return [2 /*return*/];\n }\n if (!!this.currentPublisher) return [3 /*break*/, 3];\n return [4 /*yield*/, this.createPublisher(__assign(__assign({}, this.settings), { cameraEnabled: shouldPublishVideo }))];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n this.currentPublisher.publishVideo(shouldPublishVideo);\n _a.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n _this.switchCamera = function () { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesService, deviceId, cameraType_1, err_1;\n var _this = this;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _b.sent();\n if (!mediaCapabilitiesService.supportSwitchCamera) {\n throw new Error('Not Support switch camera');\n }\n deviceId = '';\n switch (this.settings.selectedCamera) {\n case MediaConstants_1.MultiPartyCameraTypes.BACK:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.FRONT;\n deviceId = mediaCapabilitiesService.frontCameraDeviceId;\n break;\n case MediaConstants_1.MultiPartyCameraTypes.FRONT:\n cameraType_1 = MediaConstants_1.MultiPartyCameraTypes.BACK;\n deviceId = mediaCapabilitiesService.backCameraDeviceId;\n break;\n default:\n throw new Error(\"cameraType not valid: \" + this.settings.selectedCamera);\n }\n return [2 /*return*/, (_a = this.currentPublisher) === null || _a === void 0 ? void 0 : _a.setVideoSource(deviceId).then(function () {\n _this.settings.selectedCamera = cameraType_1;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.cameraSourceChanged, { cameraSource: cameraType_1 });\n trace.info(\"Success to switch camera to cameraType: \" + cameraType_1);\n })];\n case 2:\n err_1 = _b.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.initPublisher = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var selectedCamera, isMobile, mediaCapabilitiesService, frontCameraDeviceId, backCameraDeviceId, videoSourceId, mobileCameraType, properties, err_2;\n var _this = this;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 2, , 3]);\n selectedCamera = settings.selectedCamera;\n isMobile = MediaCapabilitiesUtils_1.checkIsMobile();\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.getInstance()];\n case 1:\n mediaCapabilitiesService = _c.sent();\n frontCameraDeviceId = mediaCapabilitiesService.frontCameraDeviceId, backCameraDeviceId = mediaCapabilitiesService.backCameraDeviceId;\n videoSourceId = (selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT ? frontCameraDeviceId : backCameraDeviceId) || undefined;\n mobileCameraType = settings.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT;\n properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n archiveStatusDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_a = this.branding) === null || _a === void 0 ? void 0 : _a.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.cameraEnabled,\n videoSource: !isMobile ? videoSourceId : undefined,\n facingMode: isMobile || !videoSourceId ? mobileCameraType : undefined\n };\n this.currentPublisher = window === null || window === void 0 ? void 0 : window.OT.initPublisher(this.getParticipantId((_b = this.session) === null || _b === void 0 ? void 0 : _b.connection.connectionId), properties, this.traceErrorCallback);\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n }\n else {\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoElementCreated, event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n var _a;\n trace.info('Publisher stream destroyed', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, { event: event, participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId) });\n });\n this.currentPublisher.on('accessDenied', function (event) {\n var _a;\n trace.info('Publisher denied media permissions', event);\n var connection = (_a = _this.session) === null || _a === void 0 ? void 0 : _a.connection;\n var connectionId = connection === null || connection === void 0 ? void 0 : connection.connectionId;\n var participantId = _this.getParticipantId(connection.connectionId);\n var isOwnConnection = _this.ownConnectionId === connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.mediaDeviceAccessDenied, {\n connectionId: connectionId,\n isOwnConnection: isOwnConnection,\n participantId: participantId\n });\n });\n this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {\n var participantId;\n var _a, _b, _c, _d, _e, _f;\n return __generator(this, function (_g) {\n switch (_g.label) {\n case 0: return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _g.sent();\n participantId = this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId);\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, { event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted, hasAudio: (_b = event === null || event === void 0 ? void 0 : event.stream) === null || _b === void 0 ? void 0 : _b.hasAudio,\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n isOwnConnection: this.ownConnectionId === ((_e = (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.connection) === null || _e === void 0 ? void 0 : _e.connectionId),\n });\n trace.info('publisher stream created', { event: event,\n hasAudio: (_f = this.currentPublisher) === null || _f === void 0 ? void 0 : _f['stream.hasAudio'],\n participantId: participantId });\n return [2 /*return*/];\n }\n });\n }); });\n }\n return [3 /*break*/, 3];\n case 2:\n err_2 = _c.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.streamCreatedHandler = function (event) { return __awaiter(_this, void 0, void 0, function () {\n var stream, connection, participantId, properties, subscriber_1;\n var _this = this;\n var _a, _b, _c, _d, _e;\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n trace.info('streamCreatedHandler', event.stream);\n stream = event.stream;\n connection = stream.connection;\n participantId = this.getParticipantId(connection.connectionId);\n return [4 /*yield*/, MediaCapabilitiesService_1.MediaCapabilitiesService.setDevicesList()];\n case 1:\n _f.sent();\n this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamCreated, { event: event, participantId: participantId,\n startWithAudioMuted: this.settings.startWithAudioMuted, isOwnConnection: this.ownConnectionId === ((_b = (_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId),\n hasVideo: (_c = event === null || event === void 0 ? void 0 : event.stream) === null || _c === void 0 ? void 0 : _c.hasVideo,\n hasAudio: (_d = event === null || event === void 0 ? void 0 : event.stream) === null || _d === void 0 ? void 0 : _d.hasAudio });\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return [2 /*return*/];\n }\n if (this.subscribers.length >= MultiPartyService_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiPartyService_1.maxParticipantsNumber);\n }\n else {\n properties = {\n insertMode: 'append',\n fitMode: 'cover',\n width: '100%',\n height: '100%',\n style: {\n buttonDisplayMode: 'off',\n audioLevelDisplayMode: 'off',\n backgroundImageURI: ((_e = this.branding) === null || _e === void 0 ? void 0 : _e.backgroundImageURI) || MultiPartyService_1.DEFAULT_AVATAR_URI\n },\n };\n subscriber_1 = event.target.subscribe(event.stream, participantId, properties, function (err) {\n _this.traceErrorCallback(err);\n subscriber_1 === null || subscriber_1 === void 0 ? void 0 : subscriber_1.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n });\n this.subscribers.push({\n subscriber: subscriber_1,\n connectionId: connection.connectionId,\n clientRole: this.getClientRole(connection)\n });\n }\n return [2 /*return*/];\n }\n });\n }); };\n _this.streamPropertyChangedHandler = function (event) {\n var _a;\n trace.info('streamPropertyChangedHandler', event);\n var stream = event.stream;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.videoAudioStatus, {\n hasVideo: stream === null || stream === void 0 ? void 0 : stream.hasVideo,\n hasAudio: stream === null || stream === void 0 ? void 0 : stream.hasAudio,\n participantId: _this.getParticipantId(stream === null || stream === void 0 ? void 0 : stream.connection.connectionId),\n isOwnConnection: _this.ownConnectionId === ((_a = stream === null || stream === void 0 ? void 0 : stream.connection) === null || _a === void 0 ? void 0 : _a.connectionId),\n stream: stream\n });\n };\n _this.streamDestroyedHandler = function (event) {\n var _a;\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.streamDestroyed, { event: event, participantId: _this.getParticipantId((_a = event === null || event === void 0 ? void 0 : event.stream) === null || _a === void 0 ? void 0 : _a.connection.connectionId) });\n _this.subscribers = _this.subscribers.filter(function (subscriber) { return subscriber.connectionId !== destroyedConnectionId; });\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n ++_this.participantCount;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.participantCount);\n var clientRole = _this.getClientRole(connection);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionCreated, {\n clientRole: clientRole, event: event,\n participantId: _this.getParticipantId(connection.connectionId),\n isOwnConnection: _this.ownConnectionId === connection.connectionId\n });\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n var clientRole = _this.getClientRole(connection);\n trace.info('connectionDestroyedHandler', event);\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.connectionDestroyed, { clientRole: clientRole, event: event, participantId: _this.getParticipantId(event === null || event === void 0 ? void 0 : event.connection.connectionId) });\n if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {\n return;\n }\n --_this.participantCount;\n _this.emit(MultiPartyService_1.MULTI_PARTY_EVENTS.participantsNumberChanged, _this.participantCount);\n _this.session = null;\n };\n _this.traceErrorCallback = function (error) {\n trace.error(JSON.stringify(error));\n };\n _this.sessionDisconnectedHandler = function (event) {\n var _a;\n trace.info('sessionDisconnectedHandler', event);\n (_a = _this === null || _this === void 0 ? void 0 : _this.session) === null || _a === void 0 ? void 0 : _a.signal({ retryAfterReconnect: true });\n };\n _this.branding = settings.branding;\n _this.getParticipantId = getParticipantDomId;\n return _this;\n }\n Object.defineProperty(OpentokMultiPartyService.prototype, \"ownConnectionId\", {\n get: function () {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.connection) === null || _b === void 0 ? void 0 : _b.connectionId;\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiPartyService.prototype.getClientRole = function (connection) {\n return ((connection === null || connection === void 0 ? void 0 : connection.data) && JSON.parse(connection.data).clientRole) || MediaConstants_1.SessionClientRole.USER;\n };\n return OpentokMultiPartyService;\n}(MultiPartyService_1.MultiPartyService));\nexports.OpentokMultiPartyService = OpentokMultiPartyService;\n\n//# sourceMappingURL=OpentokMultiPartyService.js.map\n"]}
|