@techsee/techsee-media-service 0.6.1-alpha.8 → 0.7.0-alpha.2

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.
Files changed (149) hide show
  1. package/lib/constants.js.map +1 -0
  2. package/lib/event-emitter.js.map +1 -0
  3. package/lib/{oldCode/index.js → index.js} +1 -1
  4. package/lib/index.js.map +1 -0
  5. package/lib/{oldCode/opentok → opentok}/session.js +0 -6
  6. package/lib/opentok/session.js.map +1 -0
  7. package/lib/opentok/stream.js.map +1 -0
  8. package/lib/publisher.js.map +1 -0
  9. package/lib/qos/raw-qos.js.map +1 -1
  10. package/lib/{oldCode/service.js → service.js} +6 -4
  11. package/lib/service.js.map +1 -0
  12. package/lib/session.js.map +1 -0
  13. package/lib/stream.js.map +1 -0
  14. package/lib/subscriber.js.map +1 -0
  15. package/lib/tracer.js +22 -0
  16. package/lib/tracer.js.map +1 -0
  17. package/lib/v2/Contracts.d.ts +41 -0
  18. package/lib/v2/Contracts.d.ts.map +1 -0
  19. package/lib/v2/Contracts.js +31 -0
  20. package/lib/v2/Contracts.js.map +1 -0
  21. package/lib/v2/LocalStreamManager.d.ts +8 -0
  22. package/lib/v2/LocalStreamManager.d.ts.map +1 -0
  23. package/lib/v2/LocalStreamManager.js +94 -0
  24. package/lib/v2/LocalStreamManager.js.map +1 -0
  25. package/lib/v2/MediaServiceBase.d.ts +24 -0
  26. package/lib/v2/MediaServiceBase.d.ts.map +1 -0
  27. package/lib/v2/MediaServiceBase.js +85 -0
  28. package/lib/v2/MediaServiceBase.js.map +1 -0
  29. package/lib/v2/MediaSubscriber.d.ts +8 -0
  30. package/lib/v2/MediaSubscriber.d.ts.map +1 -0
  31. package/lib/v2/MediaSubscriber.js +17 -0
  32. package/lib/v2/MediaSubscriber.js.map +1 -0
  33. package/lib/webrtc/constants.js.map +1 -0
  34. package/lib/{oldCode/webrtc → webrtc}/helper.js +4 -2
  35. package/lib/webrtc/helper.js.map +1 -0
  36. package/lib/webrtc/session-kms.js.map +1 -0
  37. package/lib/webrtc/session-loopback.js.map +1 -0
  38. package/lib/{oldCode/webrtc → webrtc}/session-turn.js +41 -47
  39. package/lib/webrtc/session-turn.js.map +1 -0
  40. package/lib/{oldCode/webrtc → webrtc}/session-turn.v2.js +48 -85
  41. package/lib/webrtc/session-turn.v2.js.map +1 -0
  42. package/lib/webrtc/session.js.map +1 -0
  43. package/lib/{oldCode/webrtc → webrtc}/stream.js +9 -7
  44. package/lib/webrtc/stream.js.map +1 -0
  45. package/lib/webrtc/temasys/adapter-loader.js.map +1 -0
  46. package/lib/webrtc/temasys/adapter.js.map +1 -0
  47. package/lib/webrtc/webrtc-ie-shim.js.map +1 -0
  48. package/package.json +4 -6
  49. package/lib/LocalStreamManager.d.ts +0 -21
  50. package/lib/LocalStreamManager.d.ts.map +0 -1
  51. package/lib/LocalStreamManager.js +0 -268
  52. package/lib/LocalStreamManager.js.map +0 -1
  53. package/lib/MediaConstants.d.ts +0 -52
  54. package/lib/MediaConstants.d.ts.map +0 -1
  55. package/lib/MediaConstants.js +0 -68
  56. package/lib/MediaConstants.js.map +0 -1
  57. package/lib/MediaContracts.d.ts +0 -122
  58. package/lib/MediaContracts.d.ts.map +0 -1
  59. package/lib/MediaContracts.js +0 -6
  60. package/lib/MediaContracts.js.map +0 -1
  61. package/lib/MediaPublisher.d.ts +0 -14
  62. package/lib/MediaPublisher.d.ts.map +0 -1
  63. package/lib/MediaPublisher.js +0 -43
  64. package/lib/MediaPublisher.js.map +0 -1
  65. package/lib/MediaServiceBase.d.ts +0 -64
  66. package/lib/MediaServiceBase.d.ts.map +0 -1
  67. package/lib/MediaServiceBase.js +0 -591
  68. package/lib/MediaServiceBase.js.map +0 -1
  69. package/lib/MediaSession/MediaSessionBase.d.ts +0 -23
  70. package/lib/MediaSession/MediaSessionBase.d.ts.map +0 -1
  71. package/lib/MediaSession/MediaSessionBase.js +0 -63
  72. package/lib/MediaSession/MediaSessionBase.js.map +0 -1
  73. package/lib/MediaSession/SessionOpentok.v3.d.ts +0 -49
  74. package/lib/MediaSession/SessionOpentok.v3.d.ts.map +0 -1
  75. package/lib/MediaSession/SessionOpentok.v3.js +0 -379
  76. package/lib/MediaSession/SessionOpentok.v3.js.map +0 -1
  77. package/lib/MediaSession/SessionTurn.v3.d.ts +0 -32
  78. package/lib/MediaSession/SessionTurn.v3.d.ts.map +0 -1
  79. package/lib/MediaSession/SessionTurn.v3.js +0 -439
  80. package/lib/MediaSession/SessionTurn.v3.js.map +0 -1
  81. package/lib/MediaSession/TurnConstants.d.ts +0 -18
  82. package/lib/MediaSession/TurnConstants.d.ts.map +0 -1
  83. package/lib/MediaSession/TurnConstants.js +0 -36
  84. package/lib/MediaSession/TurnConstants.js.map +0 -1
  85. package/lib/MediaSubscriber.d.ts +0 -35
  86. package/lib/MediaSubscriber.d.ts.map +0 -1
  87. package/lib/MediaSubscriber.js +0 -203
  88. package/lib/MediaSubscriber.js.map +0 -1
  89. package/lib/MediaUtils/Compatibility.d.ts +0 -11
  90. package/lib/MediaUtils/Compatibility.d.ts.map +0 -1
  91. package/lib/MediaUtils/Compatibility.js +0 -71
  92. package/lib/MediaUtils/Compatibility.js.map +0 -1
  93. package/lib/MediaUtils/MediaDomUtils.d.ts +0 -4
  94. package/lib/MediaUtils/MediaDomUtils.d.ts.map +0 -1
  95. package/lib/MediaUtils/MediaDomUtils.js +0 -200
  96. package/lib/MediaUtils/MediaDomUtils.js.map +0 -1
  97. package/lib/MediaUtils/MediaTracer.d.ts +0 -3
  98. package/lib/MediaUtils/MediaTracer.d.ts.map +0 -1
  99. package/lib/MediaUtils/MediaTracer.js +0 -12
  100. package/lib/MediaUtils/MediaTracer.js.map +0 -1
  101. package/lib/TechseeMediaStream.d.ts +0 -14
  102. package/lib/TechseeMediaStream.d.ts.map +0 -1
  103. package/lib/TechseeMediaStream.js +0 -58
  104. package/lib/TechseeMediaStream.js.map +0 -1
  105. package/lib/oldCode/constants.js.map +0 -1
  106. package/lib/oldCode/event-emitter.js.map +0 -1
  107. package/lib/oldCode/index.js.map +0 -1
  108. package/lib/oldCode/opentok/session.js.map +0 -1
  109. package/lib/oldCode/opentok/stream.js.map +0 -1
  110. package/lib/oldCode/publisher.js.map +0 -1
  111. package/lib/oldCode/service.js.map +0 -1
  112. package/lib/oldCode/session.js.map +0 -1
  113. package/lib/oldCode/stream.js.map +0 -1
  114. package/lib/oldCode/subscriber.js.map +0 -1
  115. package/lib/oldCode/tracer.d.ts +0 -35
  116. package/lib/oldCode/tracer.d.ts.map +0 -1
  117. package/lib/oldCode/tracer.js +0 -151
  118. package/lib/oldCode/tracer.js.map +0 -1
  119. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  120. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  121. package/lib/oldCode/utils/ImageFixer.js +0 -58
  122. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  123. package/lib/oldCode/webrtc/constants.js.map +0 -1
  124. package/lib/oldCode/webrtc/helper.js.map +0 -1
  125. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  126. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  127. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  128. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  129. package/lib/oldCode/webrtc/session.js.map +0 -1
  130. package/lib/oldCode/webrtc/stream.js.map +0 -1
  131. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  132. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  133. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
  134. package/lib/webrtc-ie-shim.js +0 -3218
  135. package/lib/webrtc-ie-shim.js.map +0 -1
  136. /package/lib/{oldCode/constants.js → constants.js} +0 -0
  137. /package/lib/{oldCode/event-emitter.js → event-emitter.js} +0 -0
  138. /package/lib/{oldCode/opentok → opentok}/stream.js +0 -0
  139. /package/lib/{oldCode/publisher.js → publisher.js} +0 -0
  140. /package/lib/{oldCode/session.js → session.js} +0 -0
  141. /package/lib/{oldCode/stream.js → stream.js} +0 -0
  142. /package/lib/{oldCode/subscriber.js → subscriber.js} +0 -0
  143. /package/lib/{oldCode/webrtc → webrtc}/constants.js +0 -0
  144. /package/lib/{oldCode/webrtc → webrtc}/session-kms.js +0 -0
  145. /package/lib/{oldCode/webrtc → webrtc}/session-loopback.js +0 -0
  146. /package/lib/{oldCode/webrtc → webrtc}/session.js +0 -0
  147. /package/lib/{oldCode/webrtc → webrtc}/temasys/adapter-loader.js +0 -0
  148. /package/lib/{oldCode/webrtc → webrtc}/temasys/adapter.js +0 -0
  149. /package/lib/{oldCode/webrtc → webrtc}/webrtc-ie-shim.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["v2/LocalStreamManager.js"],"names":["Object","defineProperty","exports","value","latestUserMediaStream","userMediaPromise","latestDesktopMediaStream","desktopMediaPromise","LocalStreamManager","environment","prototype","getUserMediaStream","constraints","videoTrack","getVideoTracks","length","readyState","Promise","resolve","destroyUserMediaStream","reject","navigator","mediaDevices","getUserMedia","then","stream","catch","err","e","getDesktopMediaStream","track","destroyDesktopMediaStream","getDisplayMedia","getTracks","forEach","stop"],"mappings":"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","file":"LocalStreamManager.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar latestUserMediaStream = null;\nvar userMediaPromise = null;\nvar latestDesktopMediaStream = null;\nvar desktopMediaPromise = null;\nvar LocalStreamManager = /** @class */ (function () {\n function LocalStreamManager(environment) {\n this.environment = environment;\n }\n LocalStreamManager.prototype.getUserMediaStream = function (constraints) {\n if (userMediaPromise) {\n return userMediaPromise;\n }\n if (latestUserMediaStream) {\n var videoTrack = latestUserMediaStream.getVideoTracks();\n if (videoTrack.length > 0 && videoTrack[0].readyState === 'live') {\n return Promise.resolve(latestUserMediaStream);\n }\n else {\n this.destroyUserMediaStream();\n }\n }\n userMediaPromise = new Promise(function (resolve, reject) {\n try {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(function (stream) {\n latestUserMediaStream = stream;\n userMediaPromise = null;\n resolve(stream);\n })\n .catch(function (err) {\n userMediaPromise = null;\n reject(err);\n });\n }\n catch (e) {\n userMediaPromise = null;\n reject(e);\n }\n });\n return userMediaPromise;\n };\n LocalStreamManager.prototype.getDesktopMediaStream = function (constraints) {\n if (desktopMediaPromise) {\n return desktopMediaPromise;\n }\n if (latestDesktopMediaStream) {\n var track = latestDesktopMediaStream.getVideoTracks();\n if (track.length > 0 && track[0].readyState === 'live') {\n return Promise.resolve(latestDesktopMediaStream);\n }\n else {\n this.destroyDesktopMediaStream();\n }\n }\n desktopMediaPromise = new Promise(function (resolve, reject) {\n try {\n //@ts-ignore\n navigator.mediaDevices.getDisplayMedia(constraints)\n .then(function (stream) {\n latestDesktopMediaStream = stream;\n desktopMediaPromise = null;\n resolve(stream);\n })\n .catch(function (err) {\n desktopMediaPromise = null;\n reject(err);\n });\n }\n catch (e) {\n desktopMediaPromise = null;\n reject(e);\n }\n });\n return desktopMediaPromise;\n };\n LocalStreamManager.prototype.destroyUserMediaStream = function () {\n if (latestUserMediaStream) {\n latestUserMediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n latestUserMediaStream = null;\n userMediaPromise = null;\n };\n LocalStreamManager.prototype.destroyDesktopMediaStream = function () {\n if (latestDesktopMediaStream) {\n latestDesktopMediaStream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n latestDesktopMediaStream = null;\n desktopMediaPromise = null;\n };\n return LocalStreamManager;\n}());\nexports.LocalStreamManager = LocalStreamManager;\n\n//# sourceMappingURL=LocalStreamManager.js.map\n"]}
@@ -0,0 +1,24 @@
1
+ import { TechseeMediaSubscriber } from './MediaSubscriber';
2
+ import { MediaServiceOptions, MediaSessionParams, MediaSubscriberParams } from './Contracts';
3
+ import { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';
4
+ export declare abstract class TechseeMediaServiceBase {
5
+ private _session;
6
+ private _serviceOptions;
7
+ private _deviceMediaOptions?;
8
+ private readonly _environment;
9
+ private readonly _streamsManager;
10
+ protected constructor(environment: TsEnvironmentDetect);
11
+ protected abstract getPublishedStream(): Promise<MediaStream>;
12
+ localStreamsFactory(): Promise<MediaStream>;
13
+ initMediaService(serviceOptions: MediaServiceOptions): Promise<void>;
14
+ verifyMediaAccess(): Promise<MediaStream>;
15
+ connectToSession(sessionParams: MediaSessionParams): Promise<void> | undefined;
16
+ disconnectFromSession(): Promise<void>;
17
+ createSubscriber(subscriberParams: MediaSubscriberParams): TechseeMediaSubscriber;
18
+ clearService(): Promise<undefined>;
19
+ private subscribeSessionEvents;
20
+ private deviceOptionsGuard;
21
+ private normalizeServiceOptions;
22
+ private getUserMediaConstraints;
23
+ private getDisplayMediaConstraints;
24
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/MediaServiceBase.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAqB,mBAAmB,EAAE,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAG/G,OAAO,EAAC,mBAAmB,EAAC,MAAM,2DAA2D,CAAC;AAK9F,8BAAsB,uBAAuB;IACzC,OAAO,CAAC,QAAQ,CAMN;IAEV,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,mBAAmB,CAAC,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAErD,SAAS,aAAa,WAAW,EAAE,mBAAmB;IAQtD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IAE7D,mBAAmB;IAUnB,gBAAgB,CAAC,cAAc,EAAE,mBAAmB;IAWpD,iBAAiB;IAMjB,gBAAgB,CAAC,aAAa,EAAE,kBAAkB;IAgBlD,qBAAqB;IAMrB,gBAAgB,CAAC,gBAAgB,EAAE,qBAAqB;IAIxD,YAAY;IAMZ,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,0BAA0B;CAGrC","file":"MediaServiceBase.d.ts","sourcesContent":["import {Nullable} from '@techsee/techsee-common';\nimport {TechseeMediaSubscriber} from './MediaSubscriber';\nimport {DeviceMediaOptions, MediaServiceOptions, MediaSessionParams, MediaSubscriberParams} from './Contracts';\n\n//@ts-ignore\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\nimport {LocalStreamManager} from './LocalStreamManager';\n\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport abstract class TechseeMediaServiceBase {\n private _session: Nullable<{\n params: MediaSessionParams,\n connectPromise?: Promise<void>,\n connectResolve?: () => void\n connectReject?: () => void\n instance?: any,\n }> = null;\n\n private _serviceOptions: Nullable<MediaServiceOptions> = null;\n private _deviceMediaOptions?: Nullable<DeviceMediaOptions> = null;\n private readonly _environment: TsEnvironmentDetect;\n private readonly _streamsManager: LocalStreamManager;\n\n protected constructor(environment: TsEnvironmentDetect) {\n this._environment = environment;\n\n this._streamsManager = new LocalStreamManager(this._environment);\n\n this.localStreamsFactory = this.localStreamsFactory.bind(this);\n }\n\n protected abstract getPublishedStream(): Promise<MediaStream>;\n\n localStreamsFactory() {\n this.deviceOptionsGuard();\n\n return this.getPublishedStream();\n\n // if (this._deviceMediaOptions!.desktopStream) {\n // return this._streamsManager.getDesktopStream(this._deviceMediaOptions!.desktopStream.resolution);\n // }\n }\n\n initMediaService(serviceOptions: MediaServiceOptions) {\n if (!this._serviceOptions) {\n this._serviceOptions = this.normalizeServiceOptions(serviceOptions);\n } else {\n console.warn('Multiple initialization does not supposed to happen. Please check the flow.');\n }\n\n return Promise.resolve();\n }\n\n //Verifies that application has access to requested media, by creating stream of this media kind\n verifyMediaAccess() {\n this.deviceOptionsGuard();\n\n return this.getPublishedStream();\n }\n\n connectToSession(sessionParams: MediaSessionParams) {\n this.deviceOptionsGuard();\n\n if (!this._session) {\n this._session = {params: sessionParams};\n this._session.connectPromise = new Promise((resolve, reject) => {\n this._session!.connectResolve = resolve;\n this._session!.connectReject = reject;\n });\n } else {\n console.warn('Session connected already. Disconnect before connect to new session again');\n }\n\n return this._session.connectPromise;\n }\n\n disconnectFromSession() {\n this._session = null;\n\n return Promise.resolve();\n }\n\n createSubscriber(subscriberParams: MediaSubscriberParams) {\n return new TechseeMediaSubscriber(subscriberParams);\n }\n\n clearService() {\n return Promise.all([\n this.disconnectFromSession()\n ]).then(() => undefined);\n }\n\n private subscribeSessionEvents(session: any): void {\n\n }\n\n private deviceOptionsGuard() {\n if (!this._deviceMediaOptions) {\n throw new Error('Media service is not initialized');\n }\n }\n\n private normalizeServiceOptions(serviceOptions: MediaServiceOptions) {\n const options = cloneDeep(serviceOptions);\n\n if (!options.deviceMediaOptions.loopBackVideo) {\n options.deviceMediaOptions.loopBackVideo = serviceOptions.deviceMediaOptions.desktopStream;\n }\n\n return options;\n }\n\n private getUserMediaConstraints() {\n\n }\n\n private getDisplayMediaConstraints() {\n\n }\n}\n"]}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ var __importDefault = undefined && undefined.__importDefault || function (mod) {
4
+ return mod && mod.__esModule ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var MediaSubscriber_1 = require("./MediaSubscriber");
8
+ var LocalStreamManager_1 = require("./LocalStreamManager");
9
+ var cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
10
+ var TechseeMediaServiceBase = /** @class */function () {
11
+ function TechseeMediaServiceBase(environment) {
12
+ this._session = null;
13
+ this._serviceOptions = null;
14
+ this._deviceMediaOptions = null;
15
+ this._environment = environment;
16
+ this._streamsManager = new LocalStreamManager_1.LocalStreamManager(this._environment);
17
+ this.localStreamsFactory = this.localStreamsFactory.bind(this);
18
+ }
19
+ TechseeMediaServiceBase.prototype.localStreamsFactory = function () {
20
+ this.deviceOptionsGuard();
21
+ return this.getPublishedStream();
22
+ // if (this._deviceMediaOptions!.desktopStream) {
23
+ // return this._streamsManager.getDesktopStream(this._deviceMediaOptions!.desktopStream.resolution);
24
+ // }
25
+ };
26
+ TechseeMediaServiceBase.prototype.initMediaService = function (serviceOptions) {
27
+ if (!this._serviceOptions) {
28
+ this._serviceOptions = this.normalizeServiceOptions(serviceOptions);
29
+ } else {
30
+ console.warn('Multiple initialization does not supposed to happen. Please check the flow.');
31
+ }
32
+ return Promise.resolve();
33
+ };
34
+ //Verifies that application has access to requested media, by creating stream of this media kind
35
+ TechseeMediaServiceBase.prototype.verifyMediaAccess = function () {
36
+ this.deviceOptionsGuard();
37
+ return this.getPublishedStream();
38
+ };
39
+ TechseeMediaServiceBase.prototype.connectToSession = function (sessionParams) {
40
+ var _this = this;
41
+ this.deviceOptionsGuard();
42
+ if (!this._session) {
43
+ this._session = { params: sessionParams };
44
+ this._session.connectPromise = new Promise(function (resolve, reject) {
45
+ _this._session.connectResolve = resolve;
46
+ _this._session.connectReject = reject;
47
+ });
48
+ } else {
49
+ console.warn('Session connected already. Disconnect before connect to new session again');
50
+ }
51
+ return this._session.connectPromise;
52
+ };
53
+ TechseeMediaServiceBase.prototype.disconnectFromSession = function () {
54
+ this._session = null;
55
+ return Promise.resolve();
56
+ };
57
+ TechseeMediaServiceBase.prototype.createSubscriber = function (subscriberParams) {
58
+ return new MediaSubscriber_1.TechseeMediaSubscriber(subscriberParams);
59
+ };
60
+ TechseeMediaServiceBase.prototype.clearService = function () {
61
+ return Promise.all([this.disconnectFromSession()]).then(function () {
62
+ return undefined;
63
+ });
64
+ };
65
+ TechseeMediaServiceBase.prototype.subscribeSessionEvents = function (session) {};
66
+ TechseeMediaServiceBase.prototype.deviceOptionsGuard = function () {
67
+ if (!this._deviceMediaOptions) {
68
+ throw new Error('Media service is not initialized');
69
+ }
70
+ };
71
+ TechseeMediaServiceBase.prototype.normalizeServiceOptions = function (serviceOptions) {
72
+ var options = cloneDeep_1.default(serviceOptions);
73
+ if (!options.deviceMediaOptions.loopBackVideo) {
74
+ options.deviceMediaOptions.loopBackVideo = serviceOptions.deviceMediaOptions.desktopStream;
75
+ }
76
+ return options;
77
+ };
78
+ TechseeMediaServiceBase.prototype.getUserMediaConstraints = function () {};
79
+ TechseeMediaServiceBase.prototype.getDisplayMediaConstraints = function () {};
80
+ return TechseeMediaServiceBase;
81
+ }();
82
+ exports.TechseeMediaServiceBase = TechseeMediaServiceBase;
83
+
84
+ //# sourceMappingURL=MediaServiceBase.js.map
85
+ //# sourceMappingURL=MediaServiceBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["v2/MediaServiceBase.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","MediaSubscriber_1","require","LocalStreamManager_1","cloneDeep_1","TechseeMediaServiceBase","environment","_session","_serviceOptions","_deviceMediaOptions","_environment","_streamsManager","LocalStreamManager","localStreamsFactory","bind","prototype","deviceOptionsGuard","getPublishedStream","initMediaService","serviceOptions","normalizeServiceOptions","console","warn","Promise","resolve","verifyMediaAccess","connectToSession","sessionParams","_this","params","connectPromise","reject","connectResolve","connectReject","disconnectFromSession","createSubscriber","subscriberParams","TechseeMediaSubscriber","clearService","all","then","undefined","subscribeSessionEvents","session","Error","options","default","deviceMediaOptions","loopBackVideo","desktopStream","getUserMediaConstraints","getDisplayMediaConstraints"],"mappings":"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","file":"MediaServiceBase.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MediaSubscriber_1 = require(\"./MediaSubscriber\");\nvar LocalStreamManager_1 = require(\"./LocalStreamManager\");\nvar cloneDeep_1 = __importDefault(require(\"lodash/cloneDeep\"));\nvar TechseeMediaServiceBase = /** @class */ (function () {\n function TechseeMediaServiceBase(environment) {\n this._session = null;\n this._serviceOptions = null;\n this._deviceMediaOptions = null;\n this._environment = environment;\n this._streamsManager = new LocalStreamManager_1.LocalStreamManager(this._environment);\n this.localStreamsFactory = this.localStreamsFactory.bind(this);\n }\n TechseeMediaServiceBase.prototype.localStreamsFactory = function () {\n this.deviceOptionsGuard();\n return this.getPublishedStream();\n // if (this._deviceMediaOptions!.desktopStream) {\n // return this._streamsManager.getDesktopStream(this._deviceMediaOptions!.desktopStream.resolution);\n // }\n };\n TechseeMediaServiceBase.prototype.initMediaService = function (serviceOptions) {\n if (!this._serviceOptions) {\n this._serviceOptions = this.normalizeServiceOptions(serviceOptions);\n }\n else {\n console.warn('Multiple initialization does not supposed to happen. Please check the flow.');\n }\n return Promise.resolve();\n };\n //Verifies that application has access to requested media, by creating stream of this media kind\n TechseeMediaServiceBase.prototype.verifyMediaAccess = function () {\n this.deviceOptionsGuard();\n return this.getPublishedStream();\n };\n TechseeMediaServiceBase.prototype.connectToSession = function (sessionParams) {\n var _this = this;\n this.deviceOptionsGuard();\n if (!this._session) {\n this._session = { params: sessionParams };\n this._session.connectPromise = new Promise(function (resolve, reject) {\n _this._session.connectResolve = resolve;\n _this._session.connectReject = reject;\n });\n }\n else {\n console.warn('Session connected already. Disconnect before connect to new session again');\n }\n return this._session.connectPromise;\n };\n TechseeMediaServiceBase.prototype.disconnectFromSession = function () {\n this._session = null;\n return Promise.resolve();\n };\n TechseeMediaServiceBase.prototype.createSubscriber = function (subscriberParams) {\n return new MediaSubscriber_1.TechseeMediaSubscriber(subscriberParams);\n };\n TechseeMediaServiceBase.prototype.clearService = function () {\n return Promise.all([\n this.disconnectFromSession()\n ]).then(function () { return undefined; });\n };\n TechseeMediaServiceBase.prototype.subscribeSessionEvents = function (session) {\n };\n TechseeMediaServiceBase.prototype.deviceOptionsGuard = function () {\n if (!this._deviceMediaOptions) {\n throw new Error('Media service is not initialized');\n }\n };\n TechseeMediaServiceBase.prototype.normalizeServiceOptions = function (serviceOptions) {\n var options = cloneDeep_1.default(serviceOptions);\n if (!options.deviceMediaOptions.loopBackVideo) {\n options.deviceMediaOptions.loopBackVideo = serviceOptions.deviceMediaOptions.desktopStream;\n }\n return options;\n };\n TechseeMediaServiceBase.prototype.getUserMediaConstraints = function () {\n };\n TechseeMediaServiceBase.prototype.getDisplayMediaConstraints = function () {\n };\n return TechseeMediaServiceBase;\n}());\nexports.TechseeMediaServiceBase = TechseeMediaServiceBase;\n\n//# sourceMappingURL=MediaServiceBase.js.map\n"]}
@@ -0,0 +1,8 @@
1
+ import { MediaSubscriberParams } from './Contracts';
2
+ export declare enum MediaSubscriberEvent {
3
+ }
4
+ export declare class TechseeMediaSubscriber {
5
+ private _emitter;
6
+ constructor(subscriberParams: MediaSubscriberParams);
7
+ on(event: MediaSubscriberEvent): void;
8
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/MediaSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAElD,oBAAY,oBAAoB;CAE/B;AAED,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,QAAQ,CAAe;gBAEnB,gBAAgB,EAAE,qBAAqB;IAInD,EAAE,CAAC,KAAK,EAAE,oBAAoB;CAGjC","file":"MediaSubscriber.d.ts","sourcesContent":["import {EventEmitter} from 'events';\nimport {MediaSubscriberParams} from './Contracts';\n\nexport enum MediaSubscriberEvent {\n\n}\n\nexport class TechseeMediaSubscriber {\n private _emitter: EventEmitter;\n\n constructor(subscriberParams: MediaSubscriberParams) {\n this._emitter = new EventEmitter();\n }\n\n on(event: MediaSubscriberEvent) {\n\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ var events_1 = require("events");
5
+ var MediaSubscriberEvent;
6
+ (function (MediaSubscriberEvent) {})(MediaSubscriberEvent = exports.MediaSubscriberEvent || (exports.MediaSubscriberEvent = {}));
7
+ var TechseeMediaSubscriber = /** @class */function () {
8
+ function TechseeMediaSubscriber(subscriberParams) {
9
+ this._emitter = new events_1.EventEmitter();
10
+ }
11
+ TechseeMediaSubscriber.prototype.on = function (event) {};
12
+ return TechseeMediaSubscriber;
13
+ }();
14
+ exports.TechseeMediaSubscriber = TechseeMediaSubscriber;
15
+
16
+ //# sourceMappingURL=MediaSubscriber.js.map
17
+ //# sourceMappingURL=MediaSubscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["v2/MediaSubscriber.js"],"names":["Object","defineProperty","exports","value","events_1","require","MediaSubscriberEvent","TechseeMediaSubscriber","subscriberParams","_emitter","EventEmitter","prototype","on","event"],"mappings":"AAAA;;AACAA,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAEC,OAAO,IAAT,EAA7C;AACA,IAAIC,WAAWC,QAAQ,QAAR,CAAf;AACA,IAAIC,oBAAJ;AACA,CAAC,UAAUA,oBAAV,EAAgC,CAChC,CADD,EACGA,uBAAuBJ,QAAQI,oBAAR,KAAiCJ,QAAQI,oBAAR,GAA+B,EAAhE,CAD1B;AAEA,IAAIC,yBAAyB,aAAe,YAAY;AACpD,aAASA,sBAAT,CAAgCC,gBAAhC,EAAkD;AAC9C,aAAKC,QAAL,GAAgB,IAAIL,SAASM,YAAb,EAAhB;AACH;AACDH,2BAAuBI,SAAvB,CAAiCC,EAAjC,GAAsC,UAAUC,KAAV,EAAiB,CACtD,CADD;AAEA,WAAON,sBAAP;AACH,CAP2C,EAA5C;AAQAL,QAAQK,sBAAR,GAAiCA,sBAAjC;;AAEA","file":"MediaSubscriber.js","sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar MediaSubscriberEvent;\n(function (MediaSubscriberEvent) {\n})(MediaSubscriberEvent = exports.MediaSubscriberEvent || (exports.MediaSubscriberEvent = {}));\nvar TechseeMediaSubscriber = /** @class */ (function () {\n function TechseeMediaSubscriber(subscriberParams) {\n this._emitter = new events_1.EventEmitter();\n }\n TechseeMediaSubscriber.prototype.on = function (event) {\n };\n return TechseeMediaSubscriber;\n}());\nexports.TechseeMediaSubscriber = TechseeMediaSubscriber;\n\n//# sourceMappingURL=MediaSubscriber.js.map\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/constants.js"],"names":["SOCKET_EVENTS","OUTGOING","ICE_CANDIDATE","JOIN_PIPELINE","DESTROY_PIPELINE","JOIN_ROOM","SDP_OFFER","SDP_ANSWER","INCOMING","JOIN_RESPONSE","ERROR","PIPELINE_DESTROYED","SEND_OFFER","PUBLISHER_RECONNECT","PEER_DISCONNECTED","PIPELINE_TYPES","AUDIO_VIDEO_TO_SUBSCRIBERS","AUDIO_VIDEO_TO_SUBSCRIBERS_WITH_SMART","CLIENT_TYPES","PUBLISHER","SUBSCRIBER","INITIATOR","GUEST","PEER_CONNECTION_TYPES","SEND_ONLY","RECV_ONLY","SEND_RECV","COOKIES","UID","DEFAULT_STREAM_NAMES","MOBILE_CLIENT_VIDEO_STREAM","MOBILE_CLIENT_AUDIO_STREAM","DASHBOARD_AUDIO_STREAM","RECONNECT_TURN_SERVER_INTERVAL","FAILED_CONNECTING_TURN_SERVER_INTERVAL","WAIT_FOR_PC_INTERVAL","PUBLISH_APPROVAL_CHECK_INTERVAL","SOCKET_RECONNECTION_DELAY","SOCKET_RECONNECTION_DELAY_MAX","SOCKET_RECONNECTION_ATTEMPTS","SOCKET_PATH"],"mappings":";;;AAAO,IAAMA,wCAAgB;AACzBC,cAAU;AACN;AACAC,uBAAe,gBAFT;;AAIN;AACA;AACA;;AAEA;AACAC,uBAAe,cATT;;AAWN;AACAC,0BAAkB,iBAZZ;;AAcN;AACA;AACA;;AAEA;AACAC,mBAAW,UAnBL;;AAqBN;AACAC,mBAAW,cAtBL;;AAwBN;AACAC,oBAAY;AAzBN,KADe;AA4BzBC,cAAU;AACN;AACA;AACAC,uBAAe,cAHT,EAGyB;;AAE/B;AACAP,uBAAe,cANT;;AAQN;AACAQ,eAAO,cATD;;AAWN;AACA;AACA;;AAEA;AACAC,4BAAoB,mBAhBd;;AAkBN;AACA;AACA;;AAEA;AACAC,oBAAY,WAvBN;;AAyBN;AACAN,mBAAW,cA1BL;;AA4BN;AACAO,6BAAqB,oBA7Bf;;AA+BN;AACAC,2BAAmB;AAhCb;AA5Be,CAAtB;;AAgEP;AACO,IAAMC,0CAAiB;AAC1BC,gCAA4B,iBADF;AAE1BC,2CAAuC;AAFb,CAAvB;;AAKA,IAAMC,sCAAe;AACxBC,eAAW,WADa;AAExBC,gBAAY,YAFY;AAGxBC,eAAW,WAHa;AAIxBC,WAAO;AAJiB,CAArB;;AAOA,IAAMC,wDAAwB;AACjCC,eAAW,oBADsB;AAEjCC,eAAW,oBAFsB;AAGjCC,eAAW;AAHsB,CAA9B;;AAMP;AACO,IAAMC,4BAAU;AACnBC,SAAK;AADc,CAAhB;;AAIA,IAAMC,sDAAuB;AAChCC,gCAA4B,4BADI;AAEhCC,gCAA4B,4BAFI;AAGhCC,4BAAwB;AAHQ,CAA7B;;AAMP;AACO,IAAMC,0EAAiC,IAAvC;;AAEP;AACO,IAAMC,0FAAyC,KAA/C;;AAEP;AACO,IAAMC,sDAAuB,IAA7B;;AAEP;AACO,IAAMC,4EAAkC,IAAxC;;AAEA,IAAMC,gEAA4B,IAAlC;AAAA,IACHC,wEAAgC,IAD7B;AAAA,IAEHC,sEAA+B,GAF5B;AAAA,IAGHC,oCAAc,aAHX","file":"constants.js","sourcesContent":["export const SOCKET_EVENTS = {\n OUTGOING: {\n // Emitted to a peer, offering an ICE candidate\n ICE_CANDIDATE: 'onIceCandidate',\n\n //\n // KMS Events\n //\n\n // Initial event, sent by pub/sub as a request to create/join a pipeline\n JOIN_PIPELINE: 'joinPipeline',\n\n // Final event, sent by pub/sub as a request to destroy a pipeline, or response to PIPELINE_DESTROYED event\n DESTROY_PIPELINE: 'destroyPipeline',\n\n //\n // TURN Events\n //\n\n // Initial event, sent by pub/sub as a request to create/join a room\n JOIN_ROOM: 'joinRoom',\n\n // Sent by publisher, as a response to an SDP offer request (SEND_OFFER)\n SDP_OFFER: 'sdpOfferSend',\n\n // An SDP response (emitted after receiving an SDP offer)\n SDP_ANSWER: 'sdpAnswerSend'\n },\n INCOMING: {\n // In TURN - Received by a publisher, as a response to an SDP_ANSWER sent by a subscriber\n // In KMS - Received after JOIN_PIPELINE is processed\n JOIN_RESPONSE: 'joinResponse', // This event is received by a publisher, when the sig server receive an SDP answer from subscriber\n\n // An incoming ICE candidate sent by a peer\n ICE_CANDIDATE: 'iceCandidate',\n\n // An error occured in the signaling server\n ERROR: 'errorOccured',\n\n //\n // KMS Events\n //\n\n // KMS pipeline was destroyed, in response we do a cleanup\n PIPELINE_DESTROYED: 'pipelineDestroyed',\n\n //\n // TURN Events\n //\n\n // Received by a publisher (sent by signaling server when a peer joining a room)\n SEND_OFFER: 'sendOffer',\n\n // Recieved by a subscriber when publisher sent an SDP offer\n SDP_OFFER: 'sdpOfferRecv',\n\n // Recieved by all subscribers, when the publisher has reconnected\n PUBLISHER_RECONNECT: 'publisherReconnect',\n\n // Recieved by the publisher, when a subscriber has disconnected\n PEER_DISCONNECTED: 'peerDisconnected'\n }\n};\n\n// KMS - Pipeline types\nexport const PIPELINE_TYPES = {\n AUDIO_VIDEO_TO_SUBSCRIBERS: 'AudioVideoToSub',\n AUDIO_VIDEO_TO_SUBSCRIBERS_WITH_SMART: 'AudioVideoToSubWithSmart'\n};\n\nexport const CLIENT_TYPES = {\n PUBLISHER: 'publisher',\n SUBSCRIBER: 'subscriber',\n INITIATOR: 'publisher',\n GUEST: 'subscriber'\n};\n\nexport const PEER_CONNECTION_TYPES = {\n SEND_ONLY: 'WebRtcPeerSendonly',\n RECV_ONLY: 'WebRtcPeerRecvonly',\n SEND_RECV: 'WebRtcPeerSendrecv'\n};\n\n// Used to store the peer unique identifier (UID)\nexport const COOKIES = {\n UID: 'media-client.uid'\n};\n\nexport const DEFAULT_STREAM_NAMES = {\n MOBILE_CLIENT_VIDEO_STREAM: 'MOBILE_CLIENT_VIDEO_STREAM',\n MOBILE_CLIENT_AUDIO_STREAM: 'MOBILE_CLIENT_AUDIO_STREAM',\n DASHBOARD_AUDIO_STREAM: 'DASHBOARD_AUDIO_STREAM'\n};\n\n// When ICE exchange fail, an interval between reconnection attempts\nexport const RECONNECT_TURN_SERVER_INTERVAL = 1000;\n\n// When ICE exchange start, this is the timeout until the connection is deemed failed\nexport const FAILED_CONNECTING_TURN_SERVER_INTERVAL = 15000;\n\n// Grace to to wait before creating a publisher, if peer connection has not been created yet\nexport const WAIT_FOR_PC_INTERVAL = 2000;\n\n// Interval between checks of video publishing ability attempts\nexport const PUBLISH_APPROVAL_CHECK_INTERVAL = 1000;\n\nexport const SOCKET_RECONNECTION_DELAY = 3000,\n SOCKET_RECONNECTION_DELAY_MAX = 6000,\n SOCKET_RECONNECTION_ATTEMPTS = 100,\n SOCKET_PATH = '/socket2.io';\n"]}
@@ -7,7 +7,9 @@ var _service = require('../service');
7
7
 
8
8
  var _tracer = require('../tracer');
9
9
 
10
- var tracer = (0, _tracer.getTracer)('TSMediaServiceHelper');
10
+ var trace = (0, _tracer.getTracer)('TSMediaServiceHelper', function () {
11
+ return window.TSMediaServiceHelper === true;
12
+ });
11
13
 
12
14
  function _resolutionToConstraints(resolution) {
13
15
  var _resolution$split = resolution.split('x'),
@@ -58,7 +60,7 @@ var getMediaConstraints = exports.getMediaConstraints = function getMediaConstra
58
60
  var audioDevice = deviceOpts.audio && _.last(groupedDevices.audio);
59
61
 
60
62
  var mediaConstraints = {};
61
- tracer.trace('getMediaConstraints', videoDevice);
63
+ trace('getMediaConstraints', videoDevice);
62
64
  if (videoDevice) {
63
65
  var videoResolution = _resolutionToConstraints(resolution);
64
66
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/helper.js"],"names":["trace","window","TSMediaServiceHelper","_resolutionToConstraints","resolution","split","width","height","CONSTRAINTS_TYPES","MIN","IDEAL","POSSIBLE_RESOLUTIONS","FALLBACK_RESOLUTION","_constraintByType","value","type","min","ideal","getMediaConstraints","deviceOpts","constraintType","TsMediaService","getDevices","then","devices","groupedDevices","video","_","filter","device","kind","toLowerCase","audio","videoDevice","last","audioDevice","mediaConstraints","videoResolution","assign","deviceId","facingMode","frameRate","max","getVideoTrackSettings","stream","videoTracks","getTracks","track","isEmpty","videoTrack","getSettings","_constraintsByResolution","_handleGetUserMediaError","error","errorName","get","code","name","getHighestResolutionStream","constraints","createLocalMediaStream","successfulConstraintsFound","Promise","resolve","reject","reduce","total","potentialConstraints","catch","err"],"mappings":"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","file":"helper.js","sourcesContent":["import {TsMediaService} from '../service';\n\nimport {getTracer} from '../tracer';\n\nconst trace = getTracer('TSMediaServiceHelper', () => window.TSMediaServiceHelper === true);\n\nfunction _resolutionToConstraints(resolution) {\n const [width, height] = resolution.split('x');\n\n return {width, height};\n}\n\nexport const CONSTRAINTS_TYPES = {\n MIN: 'min',\n IDEAL: 'ideal'\n};\n\nexport const POSSIBLE_RESOLUTIONS = [\n //'3840x2160', // 4k - disabled since it's an overkill\n '1920x1080', // FHD\n '1280x720' // HD\n];\n\n// In case all possible resolution fails, we'll attempt to set the highest resolution as ideal\nexport const FALLBACK_RESOLUTION = POSSIBLE_RESOLUTIONS[0];\n\nfunction _constraintByType(value, type) {\n switch (type) {\n case CONSTRAINTS_TYPES.MIN:\n return {min: value};\n default:\n return {ideal: value};\n }\n}\n\nexport const getMediaConstraints = ({resolution, deviceOpts, constraintType}) =>\n TsMediaService.getDevices()\n .then((devices) => {\n const groupedDevices = {\n video: _.filter(devices, (device) =>\n device.kind.toLowerCase() === 'videoinput'),\n audio: _.filter(devices, (device) =>\n device.kind.toLowerCase() === 'audioinput')\n };\n\n const videoDevice = deviceOpts.video && _.last(groupedDevices.video);\n const audioDevice = deviceOpts.audio && _.last(groupedDevices.audio);\n\n const mediaConstraints = {};\n trace('getMediaConstraints', videoDevice);\n if (videoDevice) {\n const videoResolution = _resolutionToConstraints(resolution);\n\n _.assign(mediaConstraints, {\n video: {\n deviceId: videoDevice.deviceId,\n width: _constraintByType(videoResolution.width, constraintType),\n height: _constraintByType(videoResolution.height, constraintType),\n facingMode: 'environment',\n frameRate: {ideal: 15, max: 30}\n }\n });\n }\n\n if (audioDevice) {\n _.assign(mediaConstraints, {\n audio: {deviceId: audioDevice.deviceId}\n });\n }\n\n return mediaConstraints;\n });\n\nexport const getVideoTrackSettings = (stream) => {\n const videoTracks = stream.getTracks()\n .filter((track) => (track.kind === 'video'));\n\n if (_.isEmpty(videoTracks)) {\n return;\n }\n\n const videoTrack = videoTracks[0];\n\n return videoTrack.getSettings && videoTrack.getSettings();\n};\n\nfunction _constraintsByResolution(resolution, deviceOpts, constraintType) {\n return getMediaConstraints({\n resolution: resolution,\n deviceOpts: deviceOpts,\n constraintType: constraintType\n });\n}\n\nfunction _handleGetUserMediaError(error) {\n const errorName = _.get(error, 'name');\n\n if (errorName === 'NotAllowedError') {\n return {code: 1500, name: 'NotAllowedError'};\n }\n\n if (errorName === 'PermissionDismissedError') {\n return {code: 8, name: 'PermissionDismissedError'};\n }\n\n return {code: 999, name: errorName || 'UnknownError'};\n}\n\n/**\n * Scan possible resolutions from high to low, trying to set each as minimal.\n * Eventually, use a fallback as ideal so the browser may decide which to use.\n *\n * @method\n * @param {Object} [deviceOpts] Devices to limit to in the constraints\n * @param {Object} [constraints] Media constraints\n *\n * @returns { Promise }\n *\n */\nexport const getHighestResolutionStream = (deviceOpts, constraints) => {\n // In case we had a constraints scan before, return the best\n if (constraints) {\n return TsMediaService.createLocalMediaStream(constraints)\n .then((stream) => ({stream, constraints}));\n }\n\n let successfulConstraintsFound = false;\n\n return new Promise((resolve, reject) => {\n Promise.reduce(POSSIBLE_RESOLUTIONS, (total, resolution) => {\n if (successfulConstraintsFound) {\n return;\n }\n\n return _constraintsByResolution(resolution, deviceOpts, CONSTRAINTS_TYPES.MIN)\n .then((potentialConstraints) => TsMediaService.createLocalMediaStream(potentialConstraints)\n .then((stream) => {\n successfulConstraintsFound = true;\n\n return resolve({stream, constraints: potentialConstraints});\n }))\n .catch(() => null);\n }, 0)\n .then(() => {\n if (successfulConstraintsFound) {\n return;\n }\n\n _constraintsByResolution(FALLBACK_RESOLUTION, deviceOpts, CONSTRAINTS_TYPES.IDEAL)\n .then((potentialConstraints) => TsMediaService.createLocalMediaStream(potentialConstraints)\n .then((stream) => resolve({stream, constraints: potentialConstraints})))\n .catch((err) => reject(_handleGetUserMediaError(err)));\n });\n });\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/session-kms.js"],"names":["io","isIE11","TsEnvironmentDetect","require","WebRtcPeer","KMSWebRTCSession","credentials","isMobile","resolution","deviceOpts","_credentials","_isMobile","_resolution","_deviceOpts","iceServers","ice","map","item","urls","url","username","login","credential","password","_configuration","iceTransportPolicy","_socket","_pc","_connectSocket","Promise","resolve","reject","socket","connect","forceNew","done","_","once","err","on","SOCKET_EVENTS","INCOMING","ERROR","_setupConnection","pc","sessionId","uid","Cookies","get","COOKIES","UID","clientType","CLIENT_TYPES","PUBLISHER","SUBSCRIBER","PIPELINE_DESTROYED","destroyed","off","disconnect","emit","EVENTS","DISCONNECTED","reason","generateOffer","error","offer","OUTGOING","JOIN_PIPELINE","pipelineType","sdpOffer","_getPeerType","constraints","audio","PEER_CONNECTION_TYPES","SEND_RECV","RECV_ONLY","_connectRTCPeer","configuration","peerConnectionType","mediaConstraints","onicecandidate","candidate","ICE_CANDIDATE","JOIN_RESPONSE","sdpAnswer","set","processAnswer","CONNECTED","addIceCandidate","then","catch","_setTrackStateTo","state","track","setEnabled","enabled","video","peerConnection","getLocalStreams","forEach","stream","getTracks","onaddstream","tsStream","TsWebRTCStream","STREAM_CREATED","close","DESTROY_PIPELINE","event","createPublisher","target","params","mediaStream","tracks","reduce","result","filter","kind","videoDevice","audioDevice","push","tsstream","name","remote","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","PUBLISHER_EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","document","createElement","src","URL","createObjectURL","_mediaStream","playsInline","autoplay","appendChild","_element","attachMediaStream","assign","fitMode","insertMode","mirror","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","PIPELINE_TYPES","AUDIO_VIDEO_TO_SUBSCRIBERS","TsMediaSession"],"mappings":"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","file":"session-kms.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport {\n TsWebRTCStream\n} from './stream';\n\nimport * as io from 'socket.io-client';\n\nimport Cookies from 'js-cookie';\n\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nconst {WebRtcPeer} = require('kurento-utils');\n\nimport {\n CLIENT_TYPES,\n COOKIES,\n PEER_CONNECTION_TYPES,\n PIPELINE_TYPES,\n SOCKET_EVENTS\n} from './constants';\n\nimport {\n getMediaConstraints\n} from './helper';\n\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'MEDIA_SERVER' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class KMSWebRTCSession extends TsMediaSession {\n constructor({credentials, isMobile, resolution, deviceOpts}) {\n super();\n\n this._credentials = credentials;\n this._isMobile = isMobile;\n this._resolution = resolution;\n this._deviceOpts = deviceOpts;\n\n const iceServers = credentials.ice.map((item) => ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }));\n\n this._configuration = {\n iceServers,\n\n iceTransportPolicy: 'relay'\n };\n\n /**\n * Socket.io connection to the signaling server\n *\n * @private\n * @member { Object }\n */\n this._socket = null;\n\n /**\n * RTCPeerConnection to the media server.\n *\n * For now kurento-utils is used for connection establishment.\n *\n * @private\n * @member { Object }\n */\n this._pc = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return this._credentials.sessionId;\n }\n\n /**\n * PipelineType of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get pipelineType() {\n return this._credentials.pipelineType || PIPELINE_TYPES.AUDIO_VIDEO_TO_SUBSCRIBERS;\n }\n\n _connectSocket(url) {\n return new Promise((resolve, reject) => {\n const socket = io.connect(url, {forceNew: true});\n\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n\n //\n // When connection is established\n //\n socket.once('connect', () => done());\n //\n // errorOccured is ts-media-client signal\n //\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n //\n // And these 2 are socket.io connection failed events\n //\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n\n this._socket = socket;\n });\n }\n\n _setupConnection(pc, sessionId) {\n const uid = Cookies.get(COOKIES.UID);\n const clientType = this._isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER;\n\n return new Promise((resolve, reject) => {\n this._socket.on(SOCKET_EVENTS.INCOMING.PIPELINE_DESTROYED, () => {\n this.destroyed = true;\n\n this._socket.off();\n this._socket.disconnect();\n\n this.emit(EVENTS.DISCONNECTED, {\n reason: 'Client disconnected'\n });\n });\n\n pc.generateOffer((error, offer) => {\n if (error) {\n return reject(error);\n }\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_PIPELINE, {\n uid,\n sessionId,\n clientType,\n\n pipelineType: this.pipelineType,\n sdpOffer: offer\n });\n\n resolve();\n });\n });\n }\n\n _getPeerType(constraints, isMobile) {\n if (isMobile || constraints.audio) {\n return PEER_CONNECTION_TYPES.SEND_RECV;\n }\n\n return PEER_CONNECTION_TYPES.RECV_ONLY;\n }\n\n _connectRTCPeer({\n constraints,\n configuration,\n sessionId,\n isMobile\n }) {\n return new Promise((resolve, reject) => {\n const done = _.once((err) => {\n err ? reject(err) : resolve();\n });\n const peerConnectionType = this._getPeerType(constraints, isMobile);\n\n const pc = WebRtcPeer[peerConnectionType]({\n configuration,\n\n mediaConstraints: constraints,\n onicecandidate: (candidate) => {\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId,\n\n candidate,\n clientType: isMobile ? CLIENT_TYPES.PUBLISHER : CLIENT_TYPES.SUBSCRIBER\n });\n }\n }, (error) => {\n if (error) {\n return done(error);\n }\n\n this._socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, ({sdpAnswer, uid}) => {\n Cookies.set(COOKIES.UID, uid);\n\n pc.processAnswer(sdpAnswer, (error) => {\n if (error) {\n return done(error);\n }\n });\n\n this.emit(EVENTS.CONNECTED);\n\n this._socket.off(SOCKET_EVENTS.INCOMING.ERROR);\n this._socket.off('connect_error');\n this._socket.off('connect_timeout');\n\n return done();\n });\n\n this._socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, ({candidate}) => {\n pc.addIceCandidate(candidate);\n });\n\n this._setupConnection(pc, sessionId)\n .then(done)\n .catch(done);\n });\n\n this._pc = pc;\n });\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Establish socket and peer connection to the media server.\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#CONNECTED\n */\n connect() {\n return this._connectSocket(this._credentials.url)\n .then(() => (\n getMediaConstraints({\n resolution: this._resolution,\n deviceOpts: this._deviceOpts\n })\n ))\n .then((constraints) => {\n // streaming from dashboard is not supported and we\n // don't want to access the camera without a reason\n if (!this._isMobile && constraints.video) {\n delete constraints.video;\n }\n\n return this._connectRTCPeer({\n constraints,\n\n configuration: this._configuration,\n sessionId: this._credentials.sessionId,\n isMobile: this._isMobile\n });\n })\n .then(() => {\n this._pc.peerConnection.getLocalStreams().forEach((stream) => {\n stream.getTracks().forEach(this._setTrackStateTo(false));\n });\n\n this._pc.peerConnection.onaddstream = ({stream}) => {\n const tsStream = new TsWebRTCStream(this, stream);\n\n this.emit(EVENTS.STREAM_CREATED, tsStream);\n };\n });\n }\n\n /**\n * Close all media streams, disconnect RTCPeerConnection and socket.io\n *\n * @method\n * @returns { Promise }\n *\n * @fires SESSION_EVENTS#DISCONNECTED\n */\n disconnect() {\n return Promise.resolve()\n .then(() => {\n if (this.destroyed) {\n return null;\n }\n\n this._pc.peerConnection.close();\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.DESTROY_PIPELINE, {\n sessionId: this._credentials.sessionId\n });\n this._socket.disconnect();\n\n const event = {reason: 'disconnected'};\n\n this.emit(EVENTS.DISCONNECTED, event);\n\n return event;\n });\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(target, params) {\n if (!params) {\n params = target;\n target = null;\n }\n\n return Promise.resolve()\n .then(() => {\n //\n // Get media streams that were created on session initialization\n //\n const mediaStream = this._pc.peerConnection.getLocalStreams()[0];\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = this._pc.peerConnection.getLocalStreams().reduce((result, mediaStream) => {\n mediaStream.getTracks()\n .filter((track) => (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice))\n .forEach((track) => result.push(track));\n\n return result;\n }, []);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name);\n\n tsstream.remote = false;\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target\n });\n\n tsstream.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio\n });\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: '480x640',\n width: '100%',\n height: '100%'\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n publisher.tracks.forEach(this._setTrackStateTo(true));\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n publisher.tracks.forEach(this._setTrackStateTo(false));\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webrtc/session-loopback.js"],"names":["isIE11","TsEnvironmentDetect","LoopbackWebRTCSession","credentials","deviceOpts","_credentials","_deviceOpts","_constraints","_setTrackStateTo","state","track","setEnabled","enabled","connect","Promise","resolve","_toggleAllStreams","_","isEmpty","_streams","forEach","stream","_mediaStream","getTracks","_stopAllStreams","stop","disconnect","createPublisher","t","p","target","params","reject","then","result","constraints","catch","error","mediaStream","clear","tracks","filter","kind","videoDevice","audioDevice","videoTrackSettings","tsstream","TsWebRTCStream","name","publisher","TsMediaPublisher","videoParams","videoHeight","videoDimensions","height","videoWidth","width","_target","publish","emit","PUBLISHER_EVENTS","STREAM_CREATED","EVENTS","STREAM_PROPERTY_CHANGED","property","value","hasVideo","hasAudio","_element","video","document","createElement","src","URL","createObjectURL","playsInline","autoplay","appendChild","attachMediaStream","streamDimensions","assign","fitMode","insertMode","mirror","resolution","elementHeight","elementWidth","style","position","setupDimensionsListener","destroyPublisher","remove","DESTROYED","get","TsMediaSession"],"mappings":"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","file":"session-loopback.js","sourcesContent":["import {\n EVENTS,\n TsMediaSession\n} from '../session';\n\nimport {\n EVENTS as PUBLISHER_EVENTS,\n TsMediaPublisher\n} from '../publisher';\n\nimport { TsEnvironmentDetect } from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nimport {\n TsWebRTCStream,\n} from './stream';\n\nconst isIE11 = (new TsEnvironmentDetect()).isIE11();\n\nimport {\n getVideoTrackSettings,\n getHighestResolutionStream\n} from './helper';\n\n/**\n * WebRTC-specific implementation of TsMediaSession.\n *\n * Instance of this class is returned by TsMediaService.initSession call\n * with 'LOOPBACK' as desired mediaType.\n *\n * @class\n * @extends TsMediaSession\n *\n * @see TsMediaSession\n */\nexport class LoopbackWebRTCSession extends TsMediaSession {\n constructor({ credentials, deviceOpts }) {\n super();\n\n this._credentials = credentials;\n this._deviceOpts = deviceOpts;\n this._constraints = null;\n }\n\n /**\n * Id of the session.\n *\n * @member { String }\n *\n * @type { String }\n */\n get id() {\n return _.get(this._credentials, 'sessionId');\n }\n\n get isLoopback() {\n return true;\n }\n\n _setTrackStateTo(state) {\n return function (track) {\n if (track.setEnabled) {\n track.setEnabled(state);\n } else {\n track.enabled = state;\n }\n };\n }\n\n /**\n * Loopback does not connect, but still need to provide an implementation.\n *\n * @method\n * @returns { Promise }\n *\n */\n connect() {\n return Promise.resolve();\n }\n\n _toggleAllStreams(state) {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach(this._setTrackStateTo(state)));\n }\n }\n\n _stopAllStreams() {\n if (!_.isEmpty(this._streams)) {\n this._streams.forEach((stream) => stream._mediaStream.getTracks().forEach((track) => track.stop()));\n }\n }\n\n /**\n * Cleanup\n *\n * @method\n * @returns { Promise }\n *\n */\n disconnect() {\n return Promise.resolve();\n }\n\n /**\n * Create new TsMediaPublisher instance\n *\n * @method\n *\n * @param { DOMElement } [target] Video element\n * that will be used to render publishing video stream\n * @param { Object } params\n * @param { String } [params.videoDevice] Video device id\n * @param { String } [params.videoParams] Video device id\n * @param { String } [params.videoParams.fitMode] Video fit mode\n * @param { Number|String } [params.videoParams.width] Video element width\n * @param { Number|String } [params.videoParams.height] Video element height\n * @param { String } [params.audioDevice] Video device id\n *\n * @returns { Promise<TsMediaPublisher> } publisher\n *\n * @see TsMediaPublisher\n */\n createPublisher(t, p) {\n let target = t,\n params = p;\n\n if (!params) {\n params = target;\n target = null;\n }\n\n return new Promise((resolve, reject) => {\n getHighestResolutionStream(this._deviceOpts, this._constraints)\n .then((result) => {\n this._constraints = result.constraints;\n\n return resolve(result.stream);\n })\n .catch((error) => reject(error));\n })\n .then((mediaStream) => {\n // Clear previous streams\n this._streams.clear();\n\n //\n // Get tracks that are related to the publisher (audio or video)\n //\n const tracks = mediaStream.getTracks()\n .filter((track) => (\n (track.kind === 'video' && params.videoDevice) ||\n (track.kind === 'audio' && params.audioDevice)));\n\n const videoTrackSettings = getVideoTrackSettings(mediaStream);\n\n const tsstream = new TsWebRTCStream(this, mediaStream, params.name, false, videoTrackSettings);\n\n const publisher = new TsMediaPublisher(this, {\n stream: tsstream,\n tracks,\n videoParams: params.videoParams,\n\n videoHeight: tsstream.videoDimensions.height,\n videoWidth: tsstream.videoDimensions.width,\n\n _target: target,\n });\n\n tsstream.publisher = publisher;\n this.publisher = publisher;\n\n return publisher;\n });\n }\n\n /**\n * Publish stream from previously create TsMediaPublisher instance.\n *\n * Used internally by TsMediaPublisher.publish\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#STREAM_CREATED\n * @fires SESSION_EVENTS#STREAM_PROPERTY_CHANGED\n * @fires STREAM_EVENTS#PROPERTY_CHANGED\n *\n * @see TsMediaPublisher#publish\n */\n publish(publisher) {\n return Promise.resolve()\n .then(() => {\n publisher.emit(PUBLISHER_EVENTS.STREAM_CREATED, publisher.stream);\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasVideo',\n value: publisher.stream.hasVideo,\n });\n this.emit(EVENTS.STREAM_PROPERTY_CHANGED, {\n stream: publisher.stream,\n property: 'hasAudio',\n value: publisher.stream.hasAudio,\n });\n\n if (this.publisher._element) {\n return;\n }\n\n if (publisher._target) {\n //\n // New video element where publishing video stream will be rendered\n //\n const video = document.createElement('video');\n\n if (!isIE11) {\n video.src = URL.createObjectURL(publisher.stream._mediaStream);\n }\n\n video.playsInline = true;\n video.autoplay = true;\n\n if (isIE11) {\n publisher._target.appendChild(video);\n publisher._element = attachMediaStream(video, publisher.stream._mediaStream);\n }\n\n const streamDimensions = publisher.stream.videoDimensions;\n\n const params = _.assign({}, {\n fitMode: 'contain',\n insertMode: 'append',\n mirror: false,\n resolution: `${streamDimensions.width}x${streamDimensions.height}`,\n width: '100%',\n height: '100%',\n }, publisher.videoParams);\n\n const elementHeight = (typeof params.height === 'string') ? params.height : params.height + 'px';\n const elementWidth = (typeof params.width === 'string') ? params.width : params.width + 'px';\n\n _.assign((isIE11 ? publisher._element : video).style, {\n height: elementHeight,\n width: elementWidth,\n\n position: 'relative',\n 'object-fit': params.fitMode,\n });\n\n if (!isIE11) {\n publisher._target.appendChild(video);\n publisher._element = video;\n }\n\n publisher.stream.setupDimensionsListener(video);\n }\n\n //\n // Enable (unpause) all media tracks related to publisher.\n // They are sending data to the server from this moment.\n //\n this._toggleAllStreams(true);\n });\n }\n\n /**\n * Unpublish stream and destroy publisher's view.\n *\n * Used internally by TsMediaPublisher.destroy\n *\n * @method\n *\n * @param { TsMediaPublisher } publisher\n *\n * @returns { Promise }\n *\n * @fires PUBLISHER_EVENTS#DESTROYED\n *\n * @see TsMediaPublisher#destroy\n */\n destroyPublisher(publisher) {\n return new Promise((resolve) => {\n this._toggleAllStreams(false);\n this._stopAllStreams();\n\n if (publisher._element) {\n publisher._element.remove();\n }\n\n this.publisher = null;\n publisher.emit(PUBLISHER_EVENTS.DESTROYED);\n\n return resolve();\n });\n }\n}\n"]}