@techsee/techsee-media-service 999.20.1-alpha → 999.20.2-alpha
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/Contracts.d.ts +10 -0
- package/lib/MultiParty/Contracts.d.ts.map +1 -0
- package/lib/MultiParty/Contracts.js +6 -0
- package/lib/MultiParty/Contracts.js.map +1 -0
- package/lib/MultiParty/MultiParty.d.ts +4 -6
- package/lib/MultiParty/MultiParty.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiparty.d.ts +4 -11
- package/lib/MultiParty/OpentokMultiparty.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiparty.js +2 -2
- package/lib/MultiParty/OpentokMultiparty.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/Contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC7B,aAAa,EAAE,WAAW,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAA;CAC1B","file":"Contracts.d.ts","sourcesContent":["import {CameraTypes} from '../MediaConstants';\n\nexport interface ICredentials {\n apiKey: string,\n sessionId: string,\n token: string\n}\n\nexport interface ISessionSettings {\n defaultCamera: CameraTypes,\n isAudioSession: boolean\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["MultiParty/Contracts.js"],"names":["Object","defineProperty","exports","value"],"mappings":"AAAA;;AACAA,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;;AAEA","file":"Contracts.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n//# sourceMappingURL=Contracts.js.map\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { CameraTypes } from '../MediaConstants';
|
|
3
2
|
import { EventEmitter } from 'events';
|
|
3
|
+
import { ISessionSettings } from './Contracts';
|
|
4
4
|
export declare const participateDomId = "participate";
|
|
5
5
|
export declare const maxParticipantsNumber = 2;
|
|
6
6
|
export declare enum MULTI_PARTIES_EVENTS {
|
|
@@ -13,9 +13,7 @@ export declare enum MULTI_PARTIES_EVENTS {
|
|
|
13
13
|
export declare abstract class MultiParty extends EventEmitter {
|
|
14
14
|
abstract session: any;
|
|
15
15
|
abstract subscribers: Array<any> | undefined;
|
|
16
|
-
abstract connect(...args: any[]):
|
|
16
|
+
abstract connect(...args: any[]): void;
|
|
17
|
+
abstract disconnect(): void;
|
|
17
18
|
}
|
|
18
|
-
export declare const couldStartMultiparty: (settings:
|
|
19
|
-
defaultCamera: CameraTypes;
|
|
20
|
-
isAudioSession: boolean;
|
|
21
|
-
}) => Promise<boolean>;
|
|
19
|
+
export declare const couldStartMultiparty: (settings: ISessionSettings) => Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MultiParty.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MultiParty.ts"],"names":[],"mappings":";AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAI7C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,oBAAY,oBAAoB;IAC5B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;CAClC;AAED,8BAAsB,UAAW,SAAQ,YAAY;IACjD,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IACtC,QAAQ,CAAC,UAAU,IAAI,IAAI;CAC9B;AAED,eAAO,MAAM,oBAAoB,aAAoB,gBAAgB,KAAG,QAAQ,OAAO,CAuBtF,CAAC","file":"MultiParty.d.ts","sourcesContent":["import {MediaCapabilitiesHelper} from './MediaCapabilitiesHelper';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {CameraTypes} from '../MediaConstants';\nimport {EventEmitter} from 'events';\nimport {ISessionSettings} from './Contracts';\n\nconst trace = getMediaTracer('Multiparty');\n\nexport const participateDomId = 'participate';\nexport const maxParticipantsNumber = 2;\n\nexport enum MULTI_PARTIES_EVENTS {\n connectFailed = 'connectFailed',\n streamDestroyed = 'streamDestroyed',\n connectionCreated = 'connectionCreated',\n connectionDestroyed = 'connectionDestroyed',\n streamCreated = 'streamCreated'\n}\n\nexport abstract class MultiParty extends EventEmitter {\n abstract session: any;\n abstract subscribers: Array<any> | undefined;\n abstract connect(...args: any[]): void;\n abstract disconnect(): void;\n}\n\nexport const couldStartMultiparty = async (settings: ISessionSettings): Promise<boolean> => {\n try {\n const mediaCapabilitiesHelper = await MediaCapabilitiesHelper.init();\n\n if (!mediaCapabilitiesHelper.hasWebRTC() || !mediaCapabilitiesHelper.hasGetUserMediaSupported) {\n return false;\n }\n\n if (settings.isAudioSession) {\n return (settings.defaultCamera !== CameraTypes.NONE)\n ? mediaCapabilitiesHelper.hasCamera() && mediaCapabilitiesHelper.hasMicrophone()\n : mediaCapabilitiesHelper.hasMicrophone();\n }\n\n return (settings.defaultCamera !== CameraTypes.NONE)\n ? mediaCapabilitiesHelper.hasCamera()\n : false;\n\n } catch (err) {\n trace.error(JSON.stringify(err));\n\n return false;\n }\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MultiParty } from './MultiParty';
|
|
2
|
-
import {
|
|
2
|
+
import { ICredentials, ISessionSettings } from './Contracts';
|
|
3
3
|
export { couldStartMultiparty } from './MultiParty';
|
|
4
4
|
export declare class OpentokMultiparty extends MultiParty {
|
|
5
5
|
subscribers: Array<any>;
|
|
@@ -9,16 +9,9 @@ export declare class OpentokMultiparty extends MultiParty {
|
|
|
9
9
|
settings: {
|
|
10
10
|
[name: string]: any;
|
|
11
11
|
};
|
|
12
|
-
constructor(settings:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
connect(credentials: {
|
|
17
|
-
apiKey: string;
|
|
18
|
-
sessionId: string;
|
|
19
|
-
token: string;
|
|
20
|
-
}): void;
|
|
21
|
-
sessionDisconnect(): void;
|
|
12
|
+
constructor(settings: ISessionSettings);
|
|
13
|
+
connect(credentials: ICredentials): void;
|
|
14
|
+
disconnect(): void;
|
|
22
15
|
createPublisher(): void;
|
|
23
16
|
streamCreatedHandler(event: {
|
|
24
17
|
stream: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/OpentokMultiparty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiparty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgE,MAAM,cAAc,CAAC;AAKvG,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAM3D,OAAO,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAQlD,qBAAa,iBAAkB,SAAQ,UAAU;IAE7C,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAM;IAC7B,OAAO,EAAE,GAAG,CAAC;IACb,gBAAgB,EAAE,GAAG,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC;IACjB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;gBAEtB,QAAQ,EAAE,gBAAgB;IAKtC,OAAO,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI;IAqCxC,UAAU,IAAI,IAAI;IAUlB,eAAe,IAAI,IAAI;IAsBvB,oBAAoB,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI;IAqClD,sBAAsB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKxC,wBAAwB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAc1C,0BAA0B,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAK5C,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAMxC;IAED,OAAO,CAAC,kBAAkB;IAM1B,UAAU,UAAW,GAAG,KAAG,IAAI,CAE7B;CACL","file":"OpentokMultiparty.d.ts","sourcesContent":["import {MultiParty, participateDomId, maxParticipantsNumber, MULTI_PARTIES_EVENTS} from './MultiParty';\nimport {CameraTypes} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport get from 'lodash/get';\nimport {ICredentials, ISessionSettings} from './Contracts';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst OT = require('@opentok/client');\nconst trace = getMediaTracer('Multiparty');\n\nexport {couldStartMultiparty} from './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 OpentokMultiparty extends MultiParty {\n //todo: define interfaces\n subscribers: Array<any> = [];\n session: any;\n currentPublisher: any;\n credentials: any;\n settings: { [name: string]: any };\n\n constructor(settings: ISessionSettings) {\n super();\n this.settings = settings;\n }\n\n connect(credentials: ICredentials): void {\n this.credentials = credentials;\n\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTIES_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\n this.session.connect(this.credentials.token, (error: any) => {\n if (error) {\n this.traceError(error);\n this.emit(MULTI_PARTIES_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n this.session.off();\n this.session = null;\n\n return;\n }\n\n if (this.settings.defaultCamera === CameraTypes.NONE) {\n trace.info('camera is none, no need to create publisher');\n\n return;\n }\n\n this.createPublisher();\n });\n }\n\n disconnect(): void {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n\n trace.info('Disconnection from session completed');\n }\n }\n\n createPublisher(): void {\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n facingMode: this.settings.defaultCamera.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n\n this.currentPublisher = OT.initPublisher(`${participateDomId}1`, properties, this.traceError);\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, get(this.currentPublisher, 'stream.hasAudio'));\n });\n\n this.session.publish(this.currentPublisher, this.traceError);\n }\n\n streamCreatedHandler(event: { stream: any }): void {\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MULTI_PARTIES_EVENTS.streamCreated, event);\n\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !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 //fixme: use width and height passed in settings\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n\n const subscriber = this.session.subscribe(event.stream, `${participateDomId}${this.subscribers.length}`, properties, (err: any) => {\n this.traceError(err);\n\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: connection?.data?.clientRole ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n }\n\n streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.streamDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const clientRole = 'default'; //JSON.parse(connection.data).clientRole;\n\n this.emit(MULTI_PARTIES_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n\n }\n\n connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.connectionDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n get ownConnectionId(): string | undefined {\n if (this.session) {\n return this.session!.connection!.connectionId;\n }\n\n return undefined;\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this.session && this.session.connection && this.session.connection.connectionId);\n\n return throwableGuard(connected, 'Opentok session does not exist', shouldThrow);\n }\n\n traceError = (error: any): void => {\n trace.error(error);\n };\n}\n"]}
|
|
@@ -83,7 +83,7 @@ var OpentokMultiparty = /** @class */function (_super) {
|
|
|
83
83
|
_this.createPublisher();
|
|
84
84
|
});
|
|
85
85
|
};
|
|
86
|
-
OpentokMultiparty.prototype.
|
|
86
|
+
OpentokMultiparty.prototype.disconnect = function () {
|
|
87
87
|
trace.info('Disconnecting from session');
|
|
88
88
|
if (this.session) {
|
|
89
89
|
this.session.disconnect();
|
|
@@ -174,7 +174,7 @@ var OpentokMultiparty = /** @class */function (_super) {
|
|
|
174
174
|
shouldThrow = true;
|
|
175
175
|
}
|
|
176
176
|
var connected = !!(this.session && this.session.connection && this.session.connection.connectionId);
|
|
177
|
-
return guards_1.throwableGuard(connected, '
|
|
177
|
+
return guards_1.throwableGuard(connected, 'Opentok session does not exist', shouldThrow);
|
|
178
178
|
};
|
|
179
179
|
return OpentokMultiparty;
|
|
180
180
|
}(MultiParty_1.MultiParty);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MultiParty/OpentokMultiparty.js","../src/MultiParty/OpentokMultiparty.ts"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__importDefault","mod","__esModule","defineProperty","exports","value","OpentokMultiparty","couldStartMultiparty","MultiParty_1","require","MediaConstants_1","MediaTracer_1","guards_1","get_1","OT","trace","getMediaTracer","MultiParty_2","enumerable","get","OpentokFacingMode","_super","settings","_this","subscribers","traceError","error","connect","credentials","session","initSession","apiKey","sessionId","err","JSON","stringify","emit","MULTI_PARTIES_EVENTS","connectFailed","meta","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","token","off","defaultCamera","CameraTypes","NONE","info","createPublisher","sessionDisconnect","disconnect","properties","insertMode","width","height","facingMode","FRONT","USER","ENVIRONMENT","currentPublisher","initPublisher","participateDomId","event","default","publish","_a","stream","streamCreated","connection","sessionExistsGuard","connectionId","ownConnectionId","length","maxParticipantsNumber","subscriber_1","subscribe","push","subscriber","clientRole","data","parse","streamDestroyed","connectionCreated","connectionDestroyed","undefined","configurable","shouldThrow","connected","throwableGuard","MultiParty"],"mappings":"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","file":"OpentokMultiparty.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 __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiparty = exports.couldStartMultiparty = void 0;\nvar MultiParty_1 = require(\"./MultiParty\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar OT = require('@opentok/client');\nvar trace = MediaTracer_1.getMediaTracer('Multiparty');\nvar MultiParty_2 = require(\"./MultiParty\");\nObject.defineProperty(exports, \"couldStartMultiparty\", { enumerable: true, get: function () { return MultiParty_2.couldStartMultiparty; } });\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 OpentokMultiparty = /** @class */ (function (_super) {\n __extends(OpentokMultiparty, _super);\n function OpentokMultiparty(settings) {\n var _this = _super.call(this) || this;\n //todo: define interfaces\n _this.subscribers = [];\n _this.traceError = function (error) {\n trace.error(error);\n };\n _this.settings = settings;\n return _this;\n }\n OpentokMultiparty.prototype.connect = function (credentials) {\n var _this = this;\n this.credentials = credentials;\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MultiParty_1.MULTI_PARTIES_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.connect(this.credentials.token, function (error) {\n if (error) {\n _this.traceError(error);\n _this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });\n _this.session.off();\n _this.session = null;\n return;\n }\n if (_this.settings.defaultCamera === MediaConstants_1.CameraTypes.NONE) {\n trace.info('camera is none, no need to create publisher');\n return;\n }\n _this.createPublisher();\n });\n };\n OpentokMultiparty.prototype.sessionDisconnect = function () {\n trace.info('Disconnecting from session');\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n };\n OpentokMultiparty.prototype.createPublisher = function () {\n var _this = this;\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n facingMode: this.settings.defaultCamera.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n this.currentPublisher = OT.initPublisher(MultiParty_1.participateDomId + \"1\", properties, this.traceError);\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', function (event) {\n trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));\n });\n this.session.publish(this.currentPublisher, this.traceError);\n };\n OpentokMultiparty.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n var _a;\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.streamCreated, event);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n if (this.subscribers.length >= MultiParty_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiParty_1.maxParticipantsNumber);\n }\n else {\n //fixme: use width and height passed in settings\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n var subscriber_1 = this.session.subscribe(event.stream, \"\" + MultiParty_1.participateDomId + this.subscribers.length, properties, function (err) {\n _this.traceError(err);\n 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: ((_a = connection === null || connection === void 0 ? void 0 : connection.data) === null || _a === void 0 ? void 0 : _a.clientRole) ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n };\n OpentokMultiparty.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.streamDestroyed, { meta: { event: JSON.stringify(event) } });\n };\n OpentokMultiparty.prototype.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var clientRole = 'default'; //JSON.parse(connection.data).clientRole;\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });\n };\n OpentokMultiparty.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectionDestroyed, { meta: { event: JSON.stringify(event) } });\n };\n Object.defineProperty(OpentokMultiparty.prototype, \"ownConnectionId\", {\n get: function () {\n if (this.session) {\n return this.session.connection.connectionId;\n }\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiparty.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this.session && this.session.connection && this.session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n };\n return OpentokMultiparty;\n}(MultiParty_1.MultiParty));\nexports.OpentokMultiparty = OpentokMultiparty;\n","import {MultiParty, participateDomId, maxParticipantsNumber, MULTI_PARTIES_EVENTS} from './MultiParty';\nimport {CameraTypes} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport get from 'lodash/get';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst OT = require('@opentok/client');\nconst trace = getMediaTracer('Multiparty');\n\nexport {couldStartMultiparty} from './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 OpentokMultiparty extends MultiParty {\n //todo: define interfaces\n subscribers: Array<any> = [];\n session: any;\n currentPublisher: any;\n credentials: any;\n settings: { [name: string]: any };\n\n constructor(settings: { defaultCamera: CameraTypes, isAudioSession: boolean }) {\n super();\n this.settings = settings;\n }\n\n connect(credentials: { apiKey: string, sessionId: string, token: string }): void {\n this.credentials = credentials;\n\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTIES_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\n this.session.connect(this.credentials.token, (error: any) => {\n if (error) {\n this.traceError(error);\n this.emit(MULTI_PARTIES_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n this.session.off();\n this.session = null;\n\n return;\n }\n\n if (this.settings.defaultCamera === CameraTypes.NONE) {\n trace.info('camera is none, no need to create publisher');\n\n return;\n }\n\n this.createPublisher();\n });\n }\n\n sessionDisconnect(): void {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n\n trace.info('Disconnection from session completed');\n }\n }\n\n createPublisher(): void {\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n facingMode: this.settings.defaultCamera.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n\n this.currentPublisher = OT.initPublisher(`${participateDomId}1`, properties, this.traceError);\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, get(this.currentPublisher, 'stream.hasAudio'));\n });\n\n this.session.publish(this.currentPublisher, this.traceError);\n }\n\n streamCreatedHandler(event: { stream: any }): void {\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MULTI_PARTIES_EVENTS.streamCreated, event);\n\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !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 //fixme: use width and height passed in settings\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n\n const subscriber = this.session.subscribe(event.stream, `${participateDomId}${this.subscribers.length}`, properties, (err: any) => {\n this.traceError(err);\n\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: connection?.data?.clientRole ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n }\n\n streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.streamDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const clientRole = 'default'; //JSON.parse(connection.data).clientRole;\n\n this.emit(MULTI_PARTIES_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n\n }\n\n connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.connectionDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n get ownConnectionId(): string | undefined {\n if (this.session) {\n return this.session!.connection!.connectionId;\n }\n\n return undefined;\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this.session && this.session.connection && this.session.connection.connectionId);\n\n return throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n }\n\n traceError = (error: any): void => {\n trace.error(error);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["MultiParty/OpentokMultiparty.js","../src/MultiParty/OpentokMultiparty.ts"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__importDefault","mod","__esModule","defineProperty","exports","value","OpentokMultiparty","couldStartMultiparty","MultiParty_1","require","MediaConstants_1","MediaTracer_1","guards_1","get_1","OT","trace","getMediaTracer","MultiParty_2","enumerable","get","OpentokFacingMode","_super","settings","_this","subscribers","traceError","error","connect","credentials","session","initSession","apiKey","sessionId","err","JSON","stringify","emit","MULTI_PARTIES_EVENTS","connectFailed","meta","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","token","off","defaultCamera","CameraTypes","NONE","info","createPublisher","disconnect","properties","insertMode","width","height","facingMode","FRONT","USER","ENVIRONMENT","currentPublisher","initPublisher","participateDomId","event","default","publish","_a","stream","streamCreated","connection","sessionExistsGuard","connectionId","ownConnectionId","length","maxParticipantsNumber","subscriber_1","subscribe","push","subscriber","clientRole","data","parse","streamDestroyed","connectionCreated","connectionDestroyed","undefined","configurable","shouldThrow","connected","throwableGuard","MultiParty"],"mappings":"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","file":"OpentokMultiparty.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 __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiparty = exports.couldStartMultiparty = void 0;\nvar MultiParty_1 = require(\"./MultiParty\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar OT = require('@opentok/client');\nvar trace = MediaTracer_1.getMediaTracer('Multiparty');\nvar MultiParty_2 = require(\"./MultiParty\");\nObject.defineProperty(exports, \"couldStartMultiparty\", { enumerable: true, get: function () { return MultiParty_2.couldStartMultiparty; } });\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 OpentokMultiparty = /** @class */ (function (_super) {\n __extends(OpentokMultiparty, _super);\n function OpentokMultiparty(settings) {\n var _this = _super.call(this) || this;\n //todo: define interfaces\n _this.subscribers = [];\n _this.traceError = function (error) {\n trace.error(error);\n };\n _this.settings = settings;\n return _this;\n }\n OpentokMultiparty.prototype.connect = function (credentials) {\n var _this = this;\n this.credentials = credentials;\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MultiParty_1.MULTI_PARTIES_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.connect(this.credentials.token, function (error) {\n if (error) {\n _this.traceError(error);\n _this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });\n _this.session.off();\n _this.session = null;\n return;\n }\n if (_this.settings.defaultCamera === MediaConstants_1.CameraTypes.NONE) {\n trace.info('camera is none, no need to create publisher');\n return;\n }\n _this.createPublisher();\n });\n };\n OpentokMultiparty.prototype.disconnect = function () {\n trace.info('Disconnecting from session');\n if (this.session) {\n this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n };\n OpentokMultiparty.prototype.createPublisher = function () {\n var _this = this;\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n facingMode: this.settings.defaultCamera.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n this.currentPublisher = OT.initPublisher(MultiParty_1.participateDomId + \"1\", properties, this.traceError);\n this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', function (event) {\n trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));\n });\n this.session.publish(this.currentPublisher, this.traceError);\n };\n OpentokMultiparty.prototype.streamCreatedHandler = function (event) {\n var _this = this;\n var _a;\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.streamCreated, event);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n if (this.subscribers.length >= MultiParty_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiParty_1.maxParticipantsNumber);\n }\n else {\n //fixme: use width and height passed in settings\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n var subscriber_1 = this.session.subscribe(event.stream, \"\" + MultiParty_1.participateDomId + this.subscribers.length, properties, function (err) {\n _this.traceError(err);\n 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: ((_a = connection === null || connection === void 0 ? void 0 : connection.data) === null || _a === void 0 ? void 0 : _a.clientRole) ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n };\n OpentokMultiparty.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.streamDestroyed, { meta: { event: JSON.stringify(event) } });\n };\n OpentokMultiparty.prototype.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var clientRole = 'default'; //JSON.parse(connection.data).clientRole;\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });\n };\n OpentokMultiparty.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n this.emit(MultiParty_1.MULTI_PARTIES_EVENTS.connectionDestroyed, { meta: { event: JSON.stringify(event) } });\n };\n Object.defineProperty(OpentokMultiparty.prototype, \"ownConnectionId\", {\n get: function () {\n if (this.session) {\n return this.session.connection.connectionId;\n }\n return undefined;\n },\n enumerable: false,\n configurable: true\n });\n OpentokMultiparty.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this.session && this.session.connection && this.session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'Opentok session does not exist', shouldThrow);\n };\n return OpentokMultiparty;\n}(MultiParty_1.MultiParty));\nexports.OpentokMultiparty = OpentokMultiparty;\n","import {MultiParty, participateDomId, maxParticipantsNumber, MULTI_PARTIES_EVENTS} from './MultiParty';\nimport {CameraTypes} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport get from 'lodash/get';\nimport {ICredentials, ISessionSettings} from './Contracts';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst OT = require('@opentok/client');\nconst trace = getMediaTracer('Multiparty');\n\nexport {couldStartMultiparty} from './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 OpentokMultiparty extends MultiParty {\n //todo: define interfaces\n subscribers: Array<any> = [];\n session: any;\n currentPublisher: any;\n credentials: any;\n settings: { [name: string]: any };\n\n constructor(settings: ISessionSettings) {\n super();\n this.settings = settings;\n }\n\n connect(credentials: ICredentials): void {\n this.credentials = credentials;\n\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTIES_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\n this.session.connect(this.credentials.token, (error: any) => {\n if (error) {\n this.traceError(error);\n this.emit(MULTI_PARTIES_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n this.session.off();\n this.session = null;\n\n return;\n }\n\n if (this.settings.defaultCamera === CameraTypes.NONE) {\n trace.info('camera is none, no need to create publisher');\n\n return;\n }\n\n this.createPublisher();\n });\n }\n\n disconnect(): void {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n\n trace.info('Disconnection from session completed');\n }\n }\n\n createPublisher(): void {\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n facingMode: this.settings.defaultCamera.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n\n this.currentPublisher = OT.initPublisher(`${participateDomId}1`, properties, this.traceError);\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, get(this.currentPublisher, 'stream.hasAudio'));\n });\n\n this.session.publish(this.currentPublisher, this.traceError);\n }\n\n streamCreatedHandler(event: { stream: any }): void {\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MULTI_PARTIES_EVENTS.streamCreated, event);\n\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !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 //fixme: use width and height passed in settings\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n\n const subscriber = this.session.subscribe(event.stream, `${participateDomId}${this.subscribers.length}`, properties, (err: any) => {\n this.traceError(err);\n\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: connection?.data?.clientRole ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n }\n\n streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.streamDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const clientRole = 'default'; //JSON.parse(connection.data).clientRole;\n\n this.emit(MULTI_PARTIES_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n\n }\n\n connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTIES_EVENTS.connectionDestroyed, {meta: {event: JSON.stringify(event)}});\n }\n\n get ownConnectionId(): string | undefined {\n if (this.session) {\n return this.session!.connection!.connectionId;\n }\n\n return undefined;\n }\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this.session && this.session.connection && this.session.connection.connectionId);\n\n return throwableGuard(connected, 'Opentok session does not exist', shouldThrow);\n }\n\n traceError = (error: any): void => {\n trace.error(error);\n };\n}\n"]}
|