@techsee/techsee-media-service 999.19.3-alphasap → 999.19.6-nodejs20

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 (213) hide show
  1. package/README.md +27 -28
  2. package/lib/LocalStreamManager.d.ts +1 -0
  3. package/lib/LocalStreamManager.d.ts.map +1 -1
  4. package/lib/LocalStreamManager.js +82 -84
  5. package/lib/LocalStreamManager.js.map +1 -1
  6. package/lib/MediaConstants.d.ts +20 -3
  7. package/lib/MediaConstants.d.ts.map +1 -1
  8. package/lib/MediaConstants.js +31 -13
  9. package/lib/MediaConstants.js.map +1 -1
  10. package/lib/MediaContracts.d.ts +7 -1
  11. package/lib/MediaContracts.d.ts.map +1 -1
  12. package/lib/MediaContracts.js +1 -4
  13. package/lib/MediaContracts.js.map +1 -1
  14. package/lib/MediaPublisher.d.ts +1 -0
  15. package/lib/MediaPublisher.d.ts.map +1 -1
  16. package/lib/MediaPublisher.js +7 -10
  17. package/lib/MediaPublisher.js.map +1 -1
  18. package/lib/MediaServiceBase.d.ts +1 -0
  19. package/lib/MediaServiceBase.d.ts.map +1 -1
  20. package/lib/MediaServiceBase.js +169 -198
  21. package/lib/MediaServiceBase.js.map +1 -1
  22. package/lib/MediaSession/MediaServer.d.ts +1 -0
  23. package/lib/MediaSession/MediaServer.d.ts.map +1 -1
  24. package/lib/MediaSession/MediaServer.js +62 -74
  25. package/lib/MediaSession/MediaServer.js.map +1 -1
  26. package/lib/MediaSession/MediaSessionBase.d.ts +1 -0
  27. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  28. package/lib/MediaSession/MediaSessionBase.js +19 -23
  29. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  30. package/lib/MediaSession/SessionOpentok.d.ts +1 -0
  31. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  32. package/lib/MediaSession/SessionOpentok.js +51 -80
  33. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  34. package/lib/MediaSession/SessionTurn.d.ts +1 -0
  35. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  36. package/lib/MediaSession/SessionTurn.js +109 -151
  37. package/lib/MediaSession/SessionTurn.js.map +1 -1
  38. package/lib/MediaSession/TurnConstants.d.ts +1 -0
  39. package/lib/MediaSession/TurnConstants.d.ts.map +1 -1
  40. package/lib/MediaSession/TurnConstants.js +1 -16
  41. package/lib/MediaSession/TurnConstants.js.map +1 -1
  42. package/lib/MediaSubscriber.d.ts +1 -0
  43. package/lib/MediaSubscriber.d.ts.map +1 -1
  44. package/lib/MediaSubscriber.js +37 -43
  45. package/lib/MediaSubscriber.js.map +1 -1
  46. package/lib/MediaUtils/Compatibility.d.ts +3 -0
  47. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  48. package/lib/MediaUtils/Compatibility.js +76 -34
  49. package/lib/MediaUtils/Compatibility.js.map +1 -1
  50. package/lib/MediaUtils/MediaDomUtils.d.ts +4 -2
  51. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  52. package/lib/MediaUtils/MediaDomUtils.js +64 -62
  53. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  54. package/lib/MediaUtils/MediaTracer.d.ts +1 -0
  55. package/lib/MediaUtils/MediaTracer.d.ts.map +1 -1
  56. package/lib/MediaUtils/MediaTracer.js +2 -5
  57. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  58. package/lib/MediaUtils/index.d.ts +2 -0
  59. package/lib/MediaUtils/index.d.ts.map +1 -0
  60. package/lib/MediaUtils/index.js +6 -0
  61. package/lib/MediaUtils/index.js.map +1 -0
  62. package/lib/MultiParty/DetectWebRtcService.d.ts +17 -14
  63. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
  64. package/lib/MultiParty/DetectWebRtcService.js +98 -54
  65. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  66. package/lib/MultiParty/MediaCapabilitiesService.d.ts +18 -0
  67. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +1 -0
  68. package/lib/MultiParty/MediaCapabilitiesService.js +158 -0
  69. package/lib/MultiParty/MediaCapabilitiesService.js.map +1 -0
  70. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +6 -0
  71. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +1 -0
  72. package/lib/MultiParty/MediaCapabilitiesUtils.js +123 -0
  73. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +1 -0
  74. package/lib/MultiParty/MediaTracer.d.ts +4 -0
  75. package/lib/MultiParty/MediaTracer.d.ts.map +1 -0
  76. package/lib/MultiParty/MediaTracer.js +10 -0
  77. package/lib/MultiParty/MediaTracer.js.map +1 -0
  78. package/lib/MultiParty/MultiPartyService.d.ts +49 -0
  79. package/lib/MultiParty/MultiPartyService.d.ts.map +1 -0
  80. package/lib/MultiParty/MultiPartyService.js +30 -0
  81. package/lib/MultiParty/MultiPartyService.js.map +1 -0
  82. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +4 -0
  83. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +1 -0
  84. package/lib/MultiParty/MultiPartyServiceFactory.js +13 -0
  85. package/lib/MultiParty/MultiPartyServiceFactory.js.map +1 -0
  86. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +89 -0
  87. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +1 -0
  88. package/lib/MultiParty/MultipartyServiceEventTypes.js +16 -0
  89. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +1 -0
  90. package/lib/MultiParty/index.d.ts +7 -0
  91. package/lib/MultiParty/index.d.ts.map +1 -0
  92. package/lib/MultiParty/index.js +25 -0
  93. package/lib/MultiParty/index.js.map +1 -0
  94. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +38 -0
  95. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +1 -0
  96. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +492 -0
  97. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +1 -0
  98. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +34 -0
  99. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +1 -0
  100. package/lib/MultiParty/opentok/OpentokPublisher.js +121 -0
  101. package/lib/MultiParty/opentok/OpentokPublisher.js.map +1 -0
  102. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts +20 -0
  103. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts.map +1 -0
  104. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js +49 -0
  105. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +1 -0
  106. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts +6 -0
  107. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts.map +1 -0
  108. package/lib/MultiParty/opentok/OpentokScreenPublisher.js +48 -0
  109. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +1 -0
  110. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts +2 -0
  111. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts.map +1 -0
  112. package/lib/MultiParty/opentok/OpentokSubscriber.js +26 -0
  113. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +1 -0
  114. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts +19 -0
  115. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts.map +1 -0
  116. package/lib/MultiParty/opentok/OpentokVideoPublisher.js +182 -0
  117. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +1 -0
  118. package/lib/MultiParty/opentok/trace.d.ts +3 -0
  119. package/lib/MultiParty/opentok/trace.d.ts.map +1 -0
  120. package/lib/MultiParty/opentok/trace.js +18 -0
  121. package/lib/MultiParty/opentok/trace.js.map +1 -0
  122. package/lib/MultiParty/opentok.d.ts +463 -0
  123. package/lib/MultiParty/types.d.ts +33 -0
  124. package/lib/MultiParty/types.d.ts.map +1 -0
  125. package/lib/MultiParty/types.js +3 -0
  126. package/lib/MultiParty/types.js.map +1 -0
  127. package/lib/MultiParty/utils.d.ts +10 -0
  128. package/lib/MultiParty/utils.d.ts.map +1 -0
  129. package/lib/MultiParty/utils.js +17 -0
  130. package/lib/MultiParty/utils.js.map +1 -0
  131. package/lib/TechseeMediaStream.d.ts +1 -0
  132. package/lib/TechseeMediaStream.d.ts.map +1 -1
  133. package/lib/TechseeMediaStream.js +9 -12
  134. package/lib/TechseeMediaStream.js.map +1 -1
  135. package/lib/qos/raw-qos.d.ts +29 -0
  136. package/lib/qos/raw-qos.d.ts.map +1 -0
  137. package/lib/qos/raw-qos.js +84 -145
  138. package/lib/qos/raw-qos.js.map +1 -1
  139. package/lib/webrtc-ie-shim.d.ts +4 -0
  140. package/lib/webrtc-ie-shim.d.ts.map +1 -0
  141. package/lib/webrtc-ie-shim.js +1896 -2950
  142. package/lib/webrtc-ie-shim.js.map +1 -1
  143. package/package.json +66 -60
  144. package/lib/MultiParty/Contracts.d.ts +0 -11
  145. package/lib/MultiParty/Contracts.d.ts.map +0 -1
  146. package/lib/MultiParty/Contracts.js +0 -6
  147. package/lib/MultiParty/Contracts.js.map +0 -1
  148. package/lib/MultiParty/MediaCapabilitiesHelper.d.ts +0 -12
  149. package/lib/MultiParty/MediaCapabilitiesHelper.d.ts.map +0 -1
  150. package/lib/MultiParty/MediaCapabilitiesHelper.js +0 -167
  151. package/lib/MultiParty/MediaCapabilitiesHelper.js.map +0 -1
  152. package/lib/MultiParty/MultiParty.d.ts +0 -21
  153. package/lib/MultiParty/MultiParty.d.ts.map +0 -1
  154. package/lib/MultiParty/MultiParty.js +0 -155
  155. package/lib/MultiParty/MultiParty.js.map +0 -1
  156. package/lib/MultiParty/MultipartyFactory.d.ts +0 -2
  157. package/lib/MultiParty/MultipartyFactory.d.ts.map +0 -1
  158. package/lib/MultiParty/MultipartyFactory.js +0 -15
  159. package/lib/MultiParty/MultipartyFactory.js.map +0 -1
  160. package/lib/MultiParty/OpentokMultiparty.d.ts +0 -24
  161. package/lib/MultiParty/OpentokMultiparty.d.ts.map +0 -1
  162. package/lib/MultiParty/OpentokMultiparty.js +0 -408
  163. package/lib/MultiParty/OpentokMultiparty.js.map +0 -1
  164. package/lib/oldCode/constants.js +0 -20
  165. package/lib/oldCode/constants.js.map +0 -1
  166. package/lib/oldCode/event-emitter.js +0 -39
  167. package/lib/oldCode/event-emitter.js.map +0 -1
  168. package/lib/oldCode/index.js +0 -64
  169. package/lib/oldCode/index.js.map +0 -1
  170. package/lib/oldCode/opentok/session.js +0 -310
  171. package/lib/oldCode/opentok/session.js.map +0 -1
  172. package/lib/oldCode/opentok/stream.js +0 -310
  173. package/lib/oldCode/opentok/stream.js.map +0 -1
  174. package/lib/oldCode/publisher.js +0 -143
  175. package/lib/oldCode/publisher.js.map +0 -1
  176. package/lib/oldCode/service.js +0 -395
  177. package/lib/oldCode/service.js.map +0 -1
  178. package/lib/oldCode/session.js +0 -110
  179. package/lib/oldCode/session.js.map +0 -1
  180. package/lib/oldCode/stream.js +0 -195
  181. package/lib/oldCode/stream.js.map +0 -1
  182. package/lib/oldCode/subscriber.js +0 -90
  183. package/lib/oldCode/subscriber.js.map +0 -1
  184. package/lib/oldCode/tracer.d.ts +0 -36
  185. package/lib/oldCode/tracer.d.ts.map +0 -1
  186. package/lib/oldCode/tracer.js +0 -161
  187. package/lib/oldCode/tracer.js.map +0 -1
  188. package/lib/oldCode/utils/ImageFixer.d.ts +0 -1
  189. package/lib/oldCode/utils/ImageFixer.d.ts.map +0 -1
  190. package/lib/oldCode/utils/ImageFixer.js +0 -59
  191. package/lib/oldCode/utils/ImageFixer.js.map +0 -1
  192. package/lib/oldCode/webrtc/constants.js +0 -114
  193. package/lib/oldCode/webrtc/constants.js.map +0 -1
  194. package/lib/oldCode/webrtc/helper.js +0 -173
  195. package/lib/oldCode/webrtc/helper.js.map +0 -1
  196. package/lib/oldCode/webrtc/session-kms.js +0 -558
  197. package/lib/oldCode/webrtc/session-kms.js.map +0 -1
  198. package/lib/oldCode/webrtc/session-loopback.js +0 -336
  199. package/lib/oldCode/webrtc/session-loopback.js.map +0 -1
  200. package/lib/oldCode/webrtc/session-turn.js +0 -880
  201. package/lib/oldCode/webrtc/session-turn.js.map +0 -1
  202. package/lib/oldCode/webrtc/session-turn.v2.js +0 -583
  203. package/lib/oldCode/webrtc/session-turn.v2.js.map +0 -1
  204. package/lib/oldCode/webrtc/session.js +0 -52
  205. package/lib/oldCode/webrtc/session.js.map +0 -1
  206. package/lib/oldCode/webrtc/stream.js +0 -674
  207. package/lib/oldCode/webrtc/stream.js.map +0 -1
  208. package/lib/oldCode/webrtc/temasys/adapter-loader.js +0 -12
  209. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +0 -1
  210. package/lib/oldCode/webrtc/temasys/adapter.js +0 -5861
  211. package/lib/oldCode/webrtc/temasys/adapter.js.map +0 -1
  212. package/lib/oldCode/webrtc/webrtc-ie-shim.js +0 -3007
  213. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.OpentokPublisher = void 0;
55
+ var TypedEventEmitter_1 = require("@techsee/techsee-common/lib/helpers/TypedEventEmitter");
56
+ var trace_1 = require("./trace");
57
+ var OpentokPublisherEventMapper_1 = require("./OpentokPublisherEventMapper");
58
+ var MediaCapabilitiesUtils_1 = require("../MediaCapabilitiesUtils");
59
+ var OpentokPublisher = (function (_super) {
60
+ __extends(OpentokPublisher, _super);
61
+ function OpentokPublisher(options, mediaCapabilitiesService) {
62
+ var _this = _super.call(this) || this;
63
+ _this.options = options;
64
+ _this.mediaCapabilitiesService = mediaCapabilitiesService;
65
+ _this.isMobile = (0, MediaCapabilitiesUtils_1.checkIsMobile)();
66
+ _this.publisherProperties = {
67
+ insertMode: 'append',
68
+ fitMode: 'cover',
69
+ width: '100%',
70
+ height: '100%',
71
+ style: {
72
+ buttonDisplayMode: 'off',
73
+ archiveStatusDisplayMode: 'off',
74
+ audioLevelDisplayMode: 'off'
75
+ }
76
+ };
77
+ _this.get = function () { return _this.currentPublisher; };
78
+ _this.destroy = function () { return _this.currentPublisher.destroy(); };
79
+ _this.clearVideoFilter = function () { return _this.currentPublisher.clearVideoFilter(); };
80
+ _this.getVideoFilter = function () { return _this.currentPublisher.getVideoFilter(); };
81
+ _this.getImgData = function () { return _this.currentPublisher.getImgData() || null; };
82
+ _this.initializeEventHandlers = function () {
83
+ _this.currentPublisher.on('videoElementCreated', function (event) {
84
+ (0, trace_1.traceInfo)('videoElementCreated', event);
85
+ _this.emit('videoElementCreated', event);
86
+ });
87
+ _this.currentPublisher.on('streamCreated', function (event) { return __awaiter(_this, void 0, void 0, function () {
88
+ var hasAudio, participantId;
89
+ return __generator(this, function (_a) {
90
+ switch (_a.label) {
91
+ case 0:
92
+ (0, trace_1.traceInfo)('publisher stream created', {
93
+ event: event
94
+ });
95
+ hasAudio = event.stream.hasAudio;
96
+ participantId = this.options.participantId;
97
+ return [4, this.mediaCapabilitiesService.updateDevicesList()];
98
+ case 1:
99
+ _a.sent();
100
+ this.emit('streamCreated', (0, OpentokPublisherEventMapper_1.createStreamCreatedEvent)(event.stream, this.options.participantId, this.isMobile, this.selectedCamera));
101
+ (0, trace_1.traceInfo)('publisher stream created', {
102
+ event: event,
103
+ hasAudio: hasAudio,
104
+ participantId: participantId
105
+ });
106
+ return [2];
107
+ }
108
+ });
109
+ }); });
110
+ _this.currentPublisher.on('streamDestroyed', function (event) {
111
+ (0, trace_1.traceInfo)('Publisher stream destroyed', event);
112
+ _this.currentPublisher.off();
113
+ _this.emit('streamDestroyed', (0, OpentokPublisherEventMapper_1.createStreamDestroyedEvent)(event.stream, _this.options.participantId));
114
+ });
115
+ };
116
+ return _this;
117
+ }
118
+ return OpentokPublisher;
119
+ }(TypedEventEmitter_1.TypedEventEmitter));
120
+ exports.OpentokPublisher = OpentokPublisher;
121
+ //# sourceMappingURL=OpentokPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokPublisher.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokPublisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { MultiPartyCameraTypes } from '../../MediaConstants';
2
+ import { MultipartyServiceCameraSourceChangedEvent, MultipartyServiceMediaAccessDeniedEvent, MultipartyServiceStreamCreatedEvent, MultipartyServiceStreamDestroyedEvent } from '../MultipartyServiceEventTypes';
3
+ export declare type OTStreamCreatedEventParams = {
4
+ connection: {
5
+ connectionId: string;
6
+ data: string;
7
+ };
8
+ hasVideo: boolean;
9
+ hasAudio: boolean;
10
+ videoDimensions: {
11
+ height: number;
12
+ width: number;
13
+ };
14
+ videoType: string;
15
+ };
16
+ export declare function createStreamCreatedEvent(stream: OTStreamCreatedEventParams, participantId: string, isMobile: boolean, selectedCamera?: MultiPartyCameraTypes): MultipartyServiceStreamCreatedEvent;
17
+ export declare function createStreamDestroyedEvent(stream: OTStreamCreatedEventParams, participantId: string): MultipartyServiceStreamDestroyedEvent;
18
+ export declare function createMediaAccessDeniedEvent(isOwnConnection: boolean): MultipartyServiceMediaAccessDeniedEvent;
19
+ export declare function createCameraSourceChangedEvent(stream: OTStreamCreatedEventParams | undefined, selectedCamera: MultiPartyCameraTypes, isMobile: boolean): MultipartyServiceCameraSourceChangedEvent;
20
+ //# sourceMappingURL=OpentokPublisherEventMapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokPublisherEventMapper.d.ts","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokPublisherEventMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAiB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACH,yCAAyC,EACzC,uCAAuC,EACvC,mCAAmC,EACnC,qCAAqC,EACxC,MAAM,gCAAgC,CAAC;AAGxC,oBAAY,0BAA0B,GAAG;IACrC,UAAU,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,0BAA0B,EAClC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,EACjB,cAAc,CAAC,EAAE,qBAAqB,GACvC,mCAAmC,CAerC;AAED,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,0BAA0B,EAClC,aAAa,EAAE,MAAM,GACtB,qCAAqC,CAWvC;AAED,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,OAAO,GAAG,uCAAuC,CAE9G;AAED,wBAAgB,8BAA8B,CAC1C,MAAM,EAAE,0BAA0B,GAAG,SAAS,EAC9C,cAAc,EAAE,qBAAqB,EACrC,QAAQ,EAAE,OAAO,GAClB,yCAAyC,CAW3C"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCameraSourceChangedEvent = exports.createMediaAccessDeniedEvent = exports.createStreamDestroyedEvent = exports.createStreamCreatedEvent = void 0;
4
+ var utils_1 = require("../utils");
5
+ function createStreamCreatedEvent(stream, participantId, isMobile, selectedCamera) {
6
+ var hasAudio = stream.hasAudio, hasVideo = stream.hasVideo, connection = stream.connection, videoDimensions = stream.videoDimensions, videoType = stream.videoType;
7
+ var connectionId = stream.connection.connectionId;
8
+ return {
9
+ participantId: participantId,
10
+ clientRole: (0, utils_1.decodeClientRole)(connection.data),
11
+ connectionId: connectionId,
12
+ hasVideo: hasVideo,
13
+ hasAudio: hasAudio,
14
+ isOwnConnection: true,
15
+ mirror: selectedCamera ? (0, utils_1.shouldMirrorCamera)(isMobile, selectedCamera) : false,
16
+ videoDimensions: videoDimensions,
17
+ videoType: videoType
18
+ };
19
+ }
20
+ exports.createStreamCreatedEvent = createStreamCreatedEvent;
21
+ function createStreamDestroyedEvent(stream, participantId) {
22
+ var connection = stream.connection;
23
+ var connectionId = stream.connection.connectionId;
24
+ return {
25
+ participantId: participantId,
26
+ connectionId: connectionId,
27
+ isOwnConnection: true,
28
+ clientRole: (0, utils_1.decodeClientRole)(connection.data),
29
+ videoType: stream.videoType
30
+ };
31
+ }
32
+ exports.createStreamDestroyedEvent = createStreamDestroyedEvent;
33
+ function createMediaAccessDeniedEvent(isOwnConnection) {
34
+ return { isOwnConnection: isOwnConnection };
35
+ }
36
+ exports.createMediaAccessDeniedEvent = createMediaAccessDeniedEvent;
37
+ function createCameraSourceChangedEvent(stream, selectedCamera, isMobile) {
38
+ var videoDimensions = (stream === null || stream === void 0 ? void 0 : stream.videoDimensions) || {
39
+ width: 0,
40
+ height: 0
41
+ };
42
+ return {
43
+ cameraSource: selectedCamera,
44
+ mirror: (0, utils_1.shouldMirrorCamera)(isMobile, selectedCamera),
45
+ videoDimensions: videoDimensions
46
+ };
47
+ }
48
+ exports.createCameraSourceChangedEvent = createCameraSourceChangedEvent;
49
+ //# sourceMappingURL=OpentokPublisherEventMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokPublisherEventMapper.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokPublisherEventMapper.ts"],"names":[],"mappings":";;;AAOA,kCAA8D;AAgB9D,SAAgB,wBAAwB,CACpC,MAAkC,EAClC,aAAqB,EACrB,QAAiB,EACjB,cAAsC;IAE/B,IAAA,QAAQ,GAAsD,MAAM,SAA5D,EAAE,QAAQ,GAA4C,MAAM,SAAlD,EAAE,UAAU,GAAgC,MAAM,WAAtC,EAAE,eAAe,GAAe,MAAM,gBAArB,EAAE,SAAS,GAAI,MAAM,UAAV,CAAW;IACrE,IAAA,YAAY,GAAI,MAAM,CAAC,UAAU,aAArB,CAAsB;IAEzC,OAAO;QACH,aAAa,eAAA;QACb,UAAU,EAAE,IAAA,wBAAgB,EAAC,UAAU,CAAC,IAAI,CAAC;QAC7C,YAAY,cAAA;QACZ,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,eAAe,EAAE,IAAI;QACrB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,IAAA,0BAAkB,EAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;QAC7E,eAAe,iBAAA;QACf,SAAS,EAAE,SAA2B;KACzC,CAAC;AACN,CAAC;AApBD,4DAoBC;AAED,SAAgB,0BAA0B,CACtC,MAAkC,EAClC,aAAqB;IAEd,IAAA,UAAU,GAAI,MAAM,WAAV,CAAW;IACrB,IAAA,YAAY,GAAI,MAAM,CAAC,UAAU,aAArB,CAAsB;IAEzC,OAAO;QACH,aAAa,eAAA;QACb,YAAY,cAAA;QACZ,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAA,wBAAgB,EAAC,UAAU,CAAC,IAAI,CAAC;QAC7C,SAAS,EAAE,MAAM,CAAC,SAA2B;KAChD,CAAC;AACN,CAAC;AAdD,gEAcC;AAED,SAAgB,4BAA4B,CAAC,eAAwB;IACjE,OAAO,EAAC,eAAe,iBAAA,EAAC,CAAC;AAC7B,CAAC;AAFD,oEAEC;AAED,SAAgB,8BAA8B,CAC1C,MAA8C,EAC9C,cAAqC,EACrC,QAAiB;IAEjB,IAAM,eAAe,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,KAAI;QAC/C,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;KACZ,CAAC;IAEF,OAAO;QACH,YAAY,EAAE,cAAc;QAC5B,MAAM,EAAE,IAAA,0BAAkB,EAAC,QAAQ,EAAE,cAAc,CAAC;QACpD,eAAe,iBAAA;KAClB,CAAC;AACN,CAAC;AAfD,wEAeC"}
@@ -0,0 +1,6 @@
1
+ import { IMediaCapablities, IOpentokPublisher, OpentokPublisher, OpentokPublisherOptions } from './OpentokPublisher';
2
+ export declare class OpentokScreenPublisher extends OpentokPublisher implements IOpentokPublisher {
3
+ protected currentPublisher: OT.Publisher;
4
+ constructor(options: OpentokPublisherOptions, mediaCapabilitiesService: IMediaCapablities);
5
+ }
6
+ //# sourceMappingURL=OpentokScreenPublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokScreenPublisher.d.ts","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokScreenPublisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAGnH,qBAAa,sBAAuB,SAAQ,gBAAiB,YAAW,iBAAiB;IACrF,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,SAAS,CAAC;gBAE7B,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,iBAAiB;CAmB5F"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.OpentokScreenPublisher = void 0;
30
+ var trace_1 = require("./trace");
31
+ var OpentokPublisher_1 = require("./OpentokPublisher");
32
+ var MediaConstants_1 = require("../../MediaConstants");
33
+ var OpentokScreenPublisher = (function (_super) {
34
+ __extends(OpentokScreenPublisher, _super);
35
+ function OpentokScreenPublisher(options, mediaCapabilitiesService) {
36
+ var _this = _super.call(this, options, mediaCapabilitiesService) || this;
37
+ var participantId = options.participantId;
38
+ _this.currentPublisher = OT.initPublisher(participantId, __assign(__assign({}, _this.publisherProperties), { videoSource: MediaConstants_1.VideoTypesEnum.SCREEN }), trace_1.traceError);
39
+ _this.initializeEventHandlers();
40
+ _this.currentPublisher.on('accessDenied', function () {
41
+ (0, trace_1.traceInfo)('Publisher denied Screen Sharing permissions');
42
+ });
43
+ return _this;
44
+ }
45
+ return OpentokScreenPublisher;
46
+ }(OpentokPublisher_1.OpentokPublisher));
47
+ exports.OpentokScreenPublisher = OpentokScreenPublisher;
48
+ //# sourceMappingURL=OpentokScreenPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokScreenPublisher.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokScreenPublisher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA8C;AAC9C,uDAAmH;AACnH,uDAAoD;AAEpD;IAA4C,0CAAgB;IAGxD,gCAAY,OAAgC,EAAE,wBAA2C;QAAzF,YACI,kBAAM,OAAO,EAAE,wBAAwB,CAAC,SAiB3C;QAfU,IAAA,aAAa,GAAI,OAAO,cAAX,CAAY;QAEhC,KAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,aAAa,CACpC,aAAa,wBACT,KAAI,CAAC,mBAAmB,KAAE,WAAW,EAAE,+BAAc,CAAC,MAAM,KAChE,kBAAU,CACb,CAAC;QAEF,KAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,KAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,cAAc,EAAE;YACrC,IAAA,iBAAS,EAAC,6CAA6C,CAAC,CAAC;QAI7D,CAAC,CAAC,CAAC;;IACP,CAAC;IACL,6BAAC;AAAD,CAAC,AAtBD,CAA4C,mCAAgB,GAsB3D;AAtBY,wDAAsB"}
@@ -0,0 +1,2 @@
1
+ export declare function createSubscriber(session: OT.Session, stream: OT.Stream, participantId: string, backgroundImageURI: string): OT.Subscriber;
2
+ //# sourceMappingURL=OpentokSubscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokSubscriber.d.ts","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokSubscriber.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,EAAE,CAAC,OAAO,EACnB,MAAM,EAAE,EAAE,CAAC,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,GAC3B,EAAE,CAAC,UAAU,CA0Bf"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSubscriber = void 0;
4
+ var trace_1 = require("./trace");
5
+ function createSubscriber(session, stream, participantId, backgroundImageURI) {
6
+ var subscriber = session.subscribe(stream, participantId, {
7
+ insertMode: 'append',
8
+ fitMode: 'cover',
9
+ width: '100%',
10
+ height: '100%',
11
+ style: {
12
+ buttonDisplayMode: 'off',
13
+ audioLevelDisplayMode: 'off',
14
+ videoDisabledDisplayMode: 'off',
15
+ backgroundImageURI: backgroundImageURI
16
+ }
17
+ }, function (err) {
18
+ (0, trace_1.traceError)(err);
19
+ });
20
+ subscriber.on('videoElementCreated', function (event) {
21
+ (0, trace_1.traceInfo)('videoElementCreated', event);
22
+ });
23
+ return subscriber;
24
+ }
25
+ exports.createSubscriber = createSubscriber;
26
+ //# sourceMappingURL=OpentokSubscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokSubscriber.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokSubscriber.ts"],"names":[],"mappings":";;;AAAA,iCAA8C;AAE9C,SAAgB,gBAAgB,CAC5B,OAAmB,EACnB,MAAiB,EACjB,aAAqB,EACrB,kBAA0B;IAE1B,IAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAChC,MAAM,EACN,aAAa,EACb;QACI,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE;YACH,iBAAiB,EAAE,KAAK;YACxB,qBAAqB,EAAE,KAAK;YAC5B,wBAAwB,EAAE,KAAK;YAC/B,kBAAkB,oBAAA;SACrB;KACJ,EACD,UAAC,GAAG;QACA,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CACJ,CAAC;IAEF,UAAU,CAAC,EAAE,CAAC,qBAAqB,EAAE,UAAC,KAAc;QAChD,IAAA,iBAAS,EAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACtB,CAAC;AA/BD,4CA+BC"}
@@ -0,0 +1,19 @@
1
+ import { VideoSettings } from '../types';
2
+ import { IMediaCapablities, IOpentokPublisher, OpentokPublisher, OpentokPublisherOptions } from './OpentokPublisher';
3
+ export interface IOpentokVideoPublisher extends IOpentokPublisher {
4
+ publishAudio: (enabled: boolean) => void;
5
+ switchCamera: () => Promise<void>;
6
+ }
7
+ export declare class OpentokVideoPublisher extends OpentokPublisher implements IOpentokVideoPublisher {
8
+ protected currentPublisher: OT.Publisher;
9
+ private videoFilter?;
10
+ private backgroundReplacementImg?;
11
+ private videoFilterPublisherSetting?;
12
+ constructor(videoSettings: VideoSettings, options: OpentokPublisherOptions, mediaCapabilitiesService: IMediaCapablities);
13
+ publishAudio: (enabled: boolean) => void;
14
+ switchCamera: () => Promise<void>;
15
+ private getVideoSourceId;
16
+ private setVideoFilterPublisherSetting;
17
+ publishVideo: (enabled: boolean) => void;
18
+ }
19
+ //# sourceMappingURL=OpentokVideoPublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokVideoPublisher.d.ts","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokVideoPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAMvC,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAUnH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC7D,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AACD,qBAAa,qBAAsB,SAAQ,gBAAiB,YAAW,sBAAsB;IACzF,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,SAAS,CAAC;IACzC,OAAO,CAAC,WAAW,CAAC,CAAkB;IACtC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAC1C,OAAO,CAAC,2BAA2B,CAAC,CAAqE;gBAGrG,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,uBAAuB,EAChC,wBAAwB,EAAE,iBAAiB;IAkDxC,YAAY,YAAa,OAAO,KAAG,IAAI,CAAgD;IAEvF,YAAY,QAAa,QAAQ,IAAI,CAAC,CAsC3C;IAEF,OAAO,CAAC,gBAAgB,CAMtB;IAEF,OAAO,CAAC,8BAA8B,CAiBpC;IAEK,YAAY,YAAa,OAAO,KAAG,IAAI,CAAgD;CACjG"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (_) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.OpentokVideoPublisher = void 0;
66
+ var utils_1 = require("../utils");
67
+ var trace_1 = require("./trace");
68
+ var OpentokPublisherEventMapper_1 = require("./OpentokPublisherEventMapper");
69
+ var MediaConstants_1 = require("../../MediaConstants");
70
+ var account_constants_1 = require("@techsee/techsee-common/lib/constants/account.constants");
71
+ var OpentokPublisher_1 = require("./OpentokPublisher");
72
+ var Compatibility_1 = require("../../MediaUtils/Compatibility");
73
+ var OpentokFacingMode;
74
+ (function (OpentokFacingMode) {
75
+ OpentokFacingMode["USER"] = "user";
76
+ OpentokFacingMode["ENVIRONMENT"] = "environment";
77
+ })(OpentokFacingMode || (OpentokFacingMode = {}));
78
+ var OPENTOK_MIRRORED_CSS_CLASS = 'OT_mirrored';
79
+ var OpentokVideoPublisher = (function (_super) {
80
+ __extends(OpentokVideoPublisher, _super);
81
+ function OpentokVideoPublisher(videoSettings, options, mediaCapabilitiesService) {
82
+ var _this = _super.call(this, options, mediaCapabilitiesService) || this;
83
+ _this.publishAudio = function (enabled) { return _this.currentPublisher.publishAudio(enabled); };
84
+ _this.switchCamera = function () { return __awaiter(_this, void 0, void 0, function () {
85
+ var newSelectedCamera, newVideoSourceId, err_1;
86
+ var _a, _b, _c;
87
+ return __generator(this, function (_d) {
88
+ switch (_d.label) {
89
+ case 0:
90
+ if (!this.mediaCapabilitiesService.supportSwitchCamera) {
91
+ throw new Error('Not Support switch camera');
92
+ }
93
+ _d.label = 1;
94
+ case 1:
95
+ _d.trys.push([1, 8, , 9]);
96
+ newSelectedCamera = this.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.BACK
97
+ ? MediaConstants_1.MultiPartyCameraTypes.FRONT
98
+ : MediaConstants_1.MultiPartyCameraTypes.BACK;
99
+ newVideoSourceId = this.getVideoSourceId(newSelectedCamera);
100
+ if (!this.currentPublisher.getVideoFilter()) return [3, 4];
101
+ return [4, this.currentPublisher.clearVideoFilter()];
102
+ case 2:
103
+ _d.sent();
104
+ return [4, (0, Compatibility_1.waitAfterClearingFilter)()];
105
+ case 3:
106
+ _d.sent();
107
+ _d.label = 4;
108
+ case 4: return [4, this.currentPublisher.setVideoSource(newVideoSourceId)];
109
+ case 5:
110
+ _d.sent();
111
+ if ((0, utils_1.shouldMirrorCamera)(!this.isMobile, newSelectedCamera)) {
112
+ (_a = this.currentPublisher.element) === null || _a === void 0 ? void 0 : _a.classList.add(OPENTOK_MIRRORED_CSS_CLASS);
113
+ }
114
+ else {
115
+ (_b = this.currentPublisher.element) === null || _b === void 0 ? void 0 : _b.classList.remove(OPENTOK_MIRRORED_CSS_CLASS);
116
+ }
117
+ this.selectedCamera = newSelectedCamera;
118
+ this.setVideoFilterPublisherSetting();
119
+ if (!(this.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT && ((_c = this.videoFilterPublisherSetting) === null || _c === void 0 ? void 0 : _c.videoFilter))) return [3, 7];
120
+ return [4, this.currentPublisher.applyVideoFilter(this.videoFilterPublisherSetting.videoFilter)];
121
+ case 6:
122
+ _d.sent();
123
+ _d.label = 7;
124
+ case 7:
125
+ this.emit('cameraSourceChanged', (0, OpentokPublisherEventMapper_1.createCameraSourceChangedEvent)(this.currentPublisher.stream, this.selectedCamera, this.isMobile));
126
+ return [3, 9];
127
+ case 8:
128
+ err_1 = _d.sent();
129
+ (0, trace_1.traceError)(JSON.stringify(err_1));
130
+ throw err_1;
131
+ case 9: return [2];
132
+ }
133
+ });
134
+ }); };
135
+ _this.getVideoSourceId = function (selectedCamera) {
136
+ (0, trace_1.traceInfo)('getVideoSourceId: ', selectedCamera);
137
+ return selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT
138
+ ? _this.mediaCapabilitiesService.frontCameraDeviceId
139
+ : _this.mediaCapabilitiesService.backCameraDeviceId;
140
+ };
141
+ _this.setVideoFilterPublisherSetting = function () {
142
+ var videoFilter = {};
143
+ switch (_this.videoFilter) {
144
+ case account_constants_1.VideoFilterType.BLUR:
145
+ videoFilter = { videoFilter: { type: account_constants_1.VideoFilterType.BLUR } };
146
+ break;
147
+ case account_constants_1.VideoFilterType.BACKGROUND:
148
+ videoFilter = {
149
+ videoFilter: { type: account_constants_1.VideoFilterType.BACKGROUND, backgroundImgUrl: _this.backgroundReplacementImg }
150
+ };
151
+ break;
152
+ default:
153
+ break;
154
+ }
155
+ _this.videoFilterPublisherSetting = _this.selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT ? videoFilter : {};
156
+ };
157
+ _this.publishVideo = function (enabled) { return _this.currentPublisher.publishVideo(enabled); };
158
+ var selectedCamera = videoSettings.selectedCamera, cameraEnabled = videoSettings.cameraEnabled, startWithAudioMuted = videoSettings.startWithAudioMuted, videoFilter = videoSettings.videoFilter, backgroundReplacementImg = videoSettings.backgroundReplacementImg;
159
+ _this.selectedCamera = selectedCamera;
160
+ _this.videoFilter = videoFilter;
161
+ _this.backgroundReplacementImg = backgroundReplacementImg;
162
+ var participantId = options.participantId, backgroundImageURI = options.backgroundImageURI;
163
+ var videoSource = (!_this.isMobile && _this.getVideoSourceId(selectedCamera)) || undefined;
164
+ var facingMode = (_this.isMobile &&
165
+ !videoSource &&
166
+ (selectedCamera === MediaConstants_1.MultiPartyCameraTypes.FRONT
167
+ ? OpentokFacingMode.USER
168
+ : OpentokFacingMode.ENVIRONMENT)) ||
169
+ undefined;
170
+ _this.setVideoFilterPublisherSetting();
171
+ _this.currentPublisher = OT.initPublisher(participantId, __assign(__assign(__assign({}, _this.publisherProperties), { style: __assign(__assign({}, _this.publisherProperties.style), { archiveStatusDisplayMode: 'off', audioLevelDisplayMode: 'off', backgroundImageURI: backgroundImageURI }), publishAudio: !startWithAudioMuted, publishVideo: cameraEnabled, videoSource: videoSource, facingMode: facingMode, mirror: (0, utils_1.shouldMirrorCamera)(_this.isMobile, selectedCamera) }), _this.videoFilterPublisherSetting), trace_1.traceError);
172
+ _this.initializeEventHandlers();
173
+ _this.currentPublisher.on('accessDenied', function () {
174
+ (0, trace_1.traceInfo)('Publisher denied media permissions');
175
+ _this.emit('mediaDeviceAccessDenied', (0, OpentokPublisherEventMapper_1.createMediaAccessDeniedEvent)(true));
176
+ });
177
+ return _this;
178
+ }
179
+ return OpentokVideoPublisher;
180
+ }(OpentokPublisher_1.OpentokPublisher));
181
+ exports.OpentokVideoPublisher = OpentokVideoPublisher;
182
+ //# sourceMappingURL=OpentokVideoPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpentokVideoPublisher.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/OpentokVideoPublisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const traceError: (error?: any) => void;
2
+ export declare const traceInfo: (...params: any) => void;
3
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/MultiParty/opentok/trace.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,WAAY,GAAG,KAAG,IAExC,CAAC;AAEF,eAAO,MAAM,SAAS,cAAe,GAAG,KAAG,IAE1C,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traceInfo = exports.traceError = void 0;
4
+ var MediaTracer_1 = require("../MediaTracer");
5
+ var trace = (0, MediaTracer_1.getMediaTracer)('OpentokMultipartyService');
6
+ var traceError = function (error) {
7
+ trace.error(JSON.stringify(error));
8
+ };
9
+ exports.traceError = traceError;
10
+ var traceInfo = function () {
11
+ var params = [];
12
+ for (var _i = 0; _i < arguments.length; _i++) {
13
+ params[_i] = arguments[_i];
14
+ }
15
+ trace.info(params);
16
+ };
17
+ exports.traceInfo = traceInfo;
18
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/MultiParty/opentok/trace.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAE9C,IAAM,KAAK,GAAG,IAAA,4BAAc,EAAC,0BAA0B,CAAC,CAAC;AAElD,IAAM,UAAU,GAAG,UAAC,KAAW;IAClC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAEK,IAAM,SAAS,GAAG;IAAC,gBAAc;SAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;QAAd,2BAAc;;IACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}