@techsee/techsee-media-service 999.20.0-nodejs.lite.2 → 999.20.1-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +28 -27
  2. package/lib/LocalStreamManager.d.ts +0 -1
  3. package/lib/LocalStreamManager.d.ts.map +1 -1
  4. package/lib/LocalStreamManager.js +84 -82
  5. package/lib/LocalStreamManager.js.map +1 -1
  6. package/lib/MediaConstants.d.ts +3 -21
  7. package/lib/MediaConstants.d.ts.map +1 -1
  8. package/lib/MediaConstants.js +13 -32
  9. package/lib/MediaConstants.js.map +1 -1
  10. package/lib/MediaContracts.d.ts +3 -9
  11. package/lib/MediaContracts.d.ts.map +1 -1
  12. package/lib/MediaContracts.js +4 -1
  13. package/lib/MediaContracts.js.map +1 -1
  14. package/lib/MediaPublisher.d.ts +0 -1
  15. package/lib/MediaPublisher.d.ts.map +1 -1
  16. package/lib/MediaPublisher.js +10 -7
  17. package/lib/MediaPublisher.js.map +1 -1
  18. package/lib/MediaServiceBase.d.ts +0 -1
  19. package/lib/MediaServiceBase.d.ts.map +1 -1
  20. package/lib/MediaServiceBase.js +199 -170
  21. package/lib/MediaServiceBase.js.map +1 -1
  22. package/lib/MediaSession/MediaServer.d.ts +0 -1
  23. package/lib/MediaSession/MediaServer.d.ts.map +1 -1
  24. package/lib/MediaSession/MediaServer.js +74 -62
  25. package/lib/MediaSession/MediaServer.js.map +1 -1
  26. package/lib/MediaSession/MediaSessionBase.d.ts +0 -1
  27. package/lib/MediaSession/MediaSessionBase.d.ts.map +1 -1
  28. package/lib/MediaSession/MediaSessionBase.js +23 -19
  29. package/lib/MediaSession/MediaSessionBase.js.map +1 -1
  30. package/lib/MediaSession/SessionOpentok.d.ts +2 -3
  31. package/lib/MediaSession/SessionOpentok.d.ts.map +1 -1
  32. package/lib/MediaSession/SessionOpentok.js +80 -51
  33. package/lib/MediaSession/SessionOpentok.js.map +1 -1
  34. package/lib/MediaSession/SessionTurn.d.ts +0 -1
  35. package/lib/MediaSession/SessionTurn.d.ts.map +1 -1
  36. package/lib/MediaSession/SessionTurn.js +151 -109
  37. package/lib/MediaSession/SessionTurn.js.map +1 -1
  38. package/lib/MediaSession/TurnConstants.d.ts +0 -1
  39. package/lib/MediaSession/TurnConstants.d.ts.map +1 -1
  40. package/lib/MediaSession/TurnConstants.js +16 -1
  41. package/lib/MediaSession/TurnConstants.js.map +1 -1
  42. package/lib/MediaSubscriber.d.ts +0 -1
  43. package/lib/MediaSubscriber.d.ts.map +1 -1
  44. package/lib/MediaSubscriber.js +43 -37
  45. package/lib/MediaSubscriber.js.map +1 -1
  46. package/lib/MediaUtils/Compatibility.d.ts +0 -3
  47. package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
  48. package/lib/MediaUtils/Compatibility.js +34 -76
  49. package/lib/MediaUtils/Compatibility.js.map +1 -1
  50. package/lib/MediaUtils/MediaDomUtils.d.ts +3 -6
  51. package/lib/MediaUtils/MediaDomUtils.d.ts.map +1 -1
  52. package/lib/MediaUtils/MediaDomUtils.js +65 -70
  53. package/lib/MediaUtils/MediaDomUtils.js.map +1 -1
  54. package/lib/MediaUtils/MediaTracer.d.ts +0 -1
  55. package/lib/MediaUtils/MediaTracer.d.ts.map +1 -1
  56. package/lib/MediaUtils/MediaTracer.js +5 -2
  57. package/lib/MediaUtils/MediaTracer.js.map +1 -1
  58. package/lib/MultiParty/DetectWebRtcService.d.ts +14 -17
  59. package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -1
  60. package/lib/MultiParty/DetectWebRtcService.js +54 -98
  61. package/lib/MultiParty/DetectWebRtcService.js.map +1 -1
  62. package/lib/MultiParty/MediaCapabilitiesHelper.d.ts +10 -0
  63. package/lib/MultiParty/MediaCapabilitiesHelper.d.ts.map +1 -0
  64. package/lib/MultiParty/MediaCapabilitiesHelper.js +140 -0
  65. package/lib/MultiParty/MediaCapabilitiesHelper.js.map +1 -0
  66. package/lib/MultiParty/MultiParty.d.ts +21 -0
  67. package/lib/MultiParty/MultiParty.d.ts.map +1 -0
  68. package/lib/MultiParty/MultiParty.js +160 -0
  69. package/lib/MultiParty/MultiParty.js.map +1 -0
  70. package/lib/MultiParty/OpentokMultiparty.d.ts +32 -0
  71. package/lib/MultiParty/OpentokMultiparty.d.ts.map +1 -0
  72. package/lib/MultiParty/OpentokMultiparty.js +184 -0
  73. package/lib/MultiParty/OpentokMultiparty.js.map +1 -0
  74. package/lib/TechseeMediaStream.d.ts +0 -1
  75. package/lib/TechseeMediaStream.d.ts.map +1 -1
  76. package/lib/TechseeMediaStream.js +12 -9
  77. package/lib/TechseeMediaStream.js.map +1 -1
  78. package/lib/oldCode/constants.js +20 -0
  79. package/lib/oldCode/constants.js.map +1 -0
  80. package/lib/oldCode/event-emitter.js +39 -0
  81. package/lib/oldCode/event-emitter.js.map +1 -0
  82. package/lib/oldCode/index.js +64 -0
  83. package/lib/oldCode/index.js.map +1 -0
  84. package/lib/oldCode/opentok/session.js +310 -0
  85. package/lib/oldCode/opentok/session.js.map +1 -0
  86. package/lib/oldCode/opentok/stream.js +310 -0
  87. package/lib/oldCode/opentok/stream.js.map +1 -0
  88. package/lib/oldCode/publisher.js +143 -0
  89. package/lib/oldCode/publisher.js.map +1 -0
  90. package/lib/oldCode/service.js +395 -0
  91. package/lib/oldCode/service.js.map +1 -0
  92. package/lib/oldCode/session.js +110 -0
  93. package/lib/oldCode/session.js.map +1 -0
  94. package/lib/oldCode/stream.js +195 -0
  95. package/lib/oldCode/stream.js.map +1 -0
  96. package/lib/oldCode/subscriber.js +90 -0
  97. package/lib/oldCode/subscriber.js.map +1 -0
  98. package/lib/oldCode/tracer.d.ts +36 -0
  99. package/lib/oldCode/tracer.d.ts.map +1 -0
  100. package/lib/oldCode/tracer.js +161 -0
  101. package/lib/oldCode/tracer.js.map +1 -0
  102. package/lib/oldCode/utils/ImageFixer.d.ts +1 -0
  103. package/lib/oldCode/utils/ImageFixer.d.ts.map +1 -0
  104. package/lib/oldCode/utils/ImageFixer.js +59 -0
  105. package/lib/oldCode/utils/ImageFixer.js.map +1 -0
  106. package/lib/oldCode/webrtc/constants.js +114 -0
  107. package/lib/oldCode/webrtc/constants.js.map +1 -0
  108. package/lib/oldCode/webrtc/helper.js +173 -0
  109. package/lib/oldCode/webrtc/helper.js.map +1 -0
  110. package/lib/oldCode/webrtc/session-kms.js +558 -0
  111. package/lib/oldCode/webrtc/session-kms.js.map +1 -0
  112. package/lib/oldCode/webrtc/session-loopback.js +336 -0
  113. package/lib/oldCode/webrtc/session-loopback.js.map +1 -0
  114. package/lib/oldCode/webrtc/session-turn.js +880 -0
  115. package/lib/oldCode/webrtc/session-turn.js.map +1 -0
  116. package/lib/oldCode/webrtc/session-turn.v2.js +583 -0
  117. package/lib/oldCode/webrtc/session-turn.v2.js.map +1 -0
  118. package/lib/oldCode/webrtc/session.js +52 -0
  119. package/lib/oldCode/webrtc/session.js.map +1 -0
  120. package/lib/oldCode/webrtc/stream.js +674 -0
  121. package/lib/oldCode/webrtc/stream.js.map +1 -0
  122. package/lib/oldCode/webrtc/temasys/adapter-loader.js +12 -0
  123. package/lib/oldCode/webrtc/temasys/adapter-loader.js.map +1 -0
  124. package/lib/oldCode/webrtc/temasys/adapter.js +5861 -0
  125. package/lib/oldCode/webrtc/temasys/adapter.js.map +1 -0
  126. package/lib/oldCode/webrtc/webrtc-ie-shim.js +3007 -0
  127. package/lib/oldCode/webrtc/webrtc-ie-shim.js.map +1 -0
  128. package/lib/qos/raw-qos.js +145 -84
  129. package/lib/qos/raw-qos.js.map +1 -1
  130. package/lib/webrtc-ie-shim.js +2950 -1896
  131. package/lib/webrtc-ie-shim.js.map +1 -1
  132. package/package.json +59 -65
  133. package/lib/MediaUtils/index.d.ts +0 -2
  134. package/lib/MediaUtils/index.d.ts.map +0 -1
  135. package/lib/MediaUtils/index.js +0 -6
  136. package/lib/MediaUtils/index.js.map +0 -1
  137. package/lib/MultiParty/MediaCapabilitiesService.d.ts +0 -18
  138. package/lib/MultiParty/MediaCapabilitiesService.d.ts.map +0 -1
  139. package/lib/MultiParty/MediaCapabilitiesService.js +0 -158
  140. package/lib/MultiParty/MediaCapabilitiesService.js.map +0 -1
  141. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts +0 -6
  142. package/lib/MultiParty/MediaCapabilitiesUtils.d.ts.map +0 -1
  143. package/lib/MultiParty/MediaCapabilitiesUtils.js +0 -123
  144. package/lib/MultiParty/MediaCapabilitiesUtils.js.map +0 -1
  145. package/lib/MultiParty/MediaTracer.d.ts +0 -4
  146. package/lib/MultiParty/MediaTracer.d.ts.map +0 -1
  147. package/lib/MultiParty/MediaTracer.js +0 -10
  148. package/lib/MultiParty/MediaTracer.js.map +0 -1
  149. package/lib/MultiParty/MultiPartyService.d.ts +0 -49
  150. package/lib/MultiParty/MultiPartyService.d.ts.map +0 -1
  151. package/lib/MultiParty/MultiPartyService.js +0 -30
  152. package/lib/MultiParty/MultiPartyService.js.map +0 -1
  153. package/lib/MultiParty/MultiPartyServiceFactory.d.ts +0 -4
  154. package/lib/MultiParty/MultiPartyServiceFactory.d.ts.map +0 -1
  155. package/lib/MultiParty/MultiPartyServiceFactory.js +0 -13
  156. package/lib/MultiParty/MultiPartyServiceFactory.js.map +0 -1
  157. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts +0 -89
  158. package/lib/MultiParty/MultipartyServiceEventTypes.d.ts.map +0 -1
  159. package/lib/MultiParty/MultipartyServiceEventTypes.js +0 -16
  160. package/lib/MultiParty/MultipartyServiceEventTypes.js.map +0 -1
  161. package/lib/MultiParty/index.d.ts +0 -7
  162. package/lib/MultiParty/index.d.ts.map +0 -1
  163. package/lib/MultiParty/index.js +0 -25
  164. package/lib/MultiParty/index.js.map +0 -1
  165. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts +0 -38
  166. package/lib/MultiParty/opentok/OpentokMultiPartyService.d.ts.map +0 -1
  167. package/lib/MultiParty/opentok/OpentokMultiPartyService.js +0 -492
  168. package/lib/MultiParty/opentok/OpentokMultiPartyService.js.map +0 -1
  169. package/lib/MultiParty/opentok/OpentokPublisher.d.ts +0 -34
  170. package/lib/MultiParty/opentok/OpentokPublisher.d.ts.map +0 -1
  171. package/lib/MultiParty/opentok/OpentokPublisher.js +0 -121
  172. package/lib/MultiParty/opentok/OpentokPublisher.js.map +0 -1
  173. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts +0 -20
  174. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.d.ts.map +0 -1
  175. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js +0 -49
  176. package/lib/MultiParty/opentok/OpentokPublisherEventMapper.js.map +0 -1
  177. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts +0 -6
  178. package/lib/MultiParty/opentok/OpentokScreenPublisher.d.ts.map +0 -1
  179. package/lib/MultiParty/opentok/OpentokScreenPublisher.js +0 -48
  180. package/lib/MultiParty/opentok/OpentokScreenPublisher.js.map +0 -1
  181. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts +0 -2
  182. package/lib/MultiParty/opentok/OpentokSubscriber.d.ts.map +0 -1
  183. package/lib/MultiParty/opentok/OpentokSubscriber.js +0 -26
  184. package/lib/MultiParty/opentok/OpentokSubscriber.js.map +0 -1
  185. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts +0 -19
  186. package/lib/MultiParty/opentok/OpentokVideoPublisher.d.ts.map +0 -1
  187. package/lib/MultiParty/opentok/OpentokVideoPublisher.js +0 -182
  188. package/lib/MultiParty/opentok/OpentokVideoPublisher.js.map +0 -1
  189. package/lib/MultiParty/opentok/trace.d.ts +0 -3
  190. package/lib/MultiParty/opentok/trace.d.ts.map +0 -1
  191. package/lib/MultiParty/opentok/trace.js +0 -18
  192. package/lib/MultiParty/opentok/trace.js.map +0 -1
  193. package/lib/MultiParty/opentok.d.ts +0 -463
  194. package/lib/MultiParty/types.d.ts +0 -33
  195. package/lib/MultiParty/types.d.ts.map +0 -1
  196. package/lib/MultiParty/types.js +0 -3
  197. package/lib/MultiParty/types.js.map +0 -1
  198. package/lib/MultiParty/utils.d.ts +0 -10
  199. package/lib/MultiParty/utils.d.ts.map +0 -1
  200. package/lib/MultiParty/utils.js +0 -17
  201. package/lib/MultiParty/utils.js.map +0 -1
  202. package/lib/qos/raw-qos.d.ts +0 -29
  203. package/lib/qos/raw-qos.d.ts.map +0 -1
  204. package/lib/webrtc-ie-shim.d.ts +0 -4
  205. package/lib/webrtc-ie-shim.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SessionOpentok.d.ts","sourceRoot":"","sources":["../../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AAKxF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AAED,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,WAAW,GAAG,GAAG,CAAC;AAEvB,KAAK,YAAY,GAAG,GAAG,CAAC;AA8BxB,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAA8B;IAE9C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,OAAO,KAAK,SAAS,GAEpB;gBAEW,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,iBAAiB,IAAI,IAAI;IAMzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0B5E,OAAO,CAAC,wBAAwB;IAoFhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,yBAAyB;IAmCjC,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,iCAAiC;IAsBzC,OAAO,CAAC,kBAAkB;CAK7B"}
1
+ {"version":3,"sources":["../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EAAE,yBAAyB,EACjD,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AAKxF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,EAAE,EAAE,GAAG,CAAC;KACX;CACJ;AAED,UAAU,YAAY;IAClB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,aAAK,WAAW,GAAG,GAAG,CAAA;AAEtB,aAAK,YAAY,GAAG,GAAG,CAAA;AA+BvB,UAAU,cAAc;IACpB,WAAW,EAAE,GAAG,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAChD,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAGD,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,gBAAgB,CAAE,YAAW,aAAa;IAC3F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAA8B;IAE9C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,OAAO,KAAK,SAAS,GAEpB;gBAEW,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAAE,aAAa,EAAE,sBAAsB;IAkBhH,iBAAiB,IAAI,IAAI;IAMzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0B5E,OAAO,CAAC,wBAAwB;IA+EhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,yBAAyB;IA8BjC,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,gCAAgC;IAexC,OAAO,CAAC,qBAAqB;IA0C7B,OAAO,CAAC,iCAAiC;IAsBzC,OAAO,CAAC,kBAAkB;CAK7B","file":"SessionOpentok.d.ts","sourcesContent":["import {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaSession,\n ISessionStreamsManager, MediaSessionConfiguration,\n MediaSessionParams,\n RemoteTrackStats\n} from '../MediaContracts';\n\nimport {SessionClientRole, SessionClientType} from '../MediaConstants';\nimport {throwableGuard} from '@techsee/techsee-common/lib/core/guards';\nimport {IMediaSessionPeer, MediaSessionBase, recordingEvents} from './MediaSessionBase';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\n\nconst trace = getMediaTracer('OpentokSession');\n\ndeclare global {\n interface Window {\n OT: any;\n }\n}\n\ninterface OTConnection {\n connectionId: string;\n}\n\ntype OTPublisher = any\n\ntype OTSubscriber = any\n\ninterface IOTSession {\n\n sessionId: string;\n\n connection: Nullable<OTConnection>;\n\n isConnected(): boolean;\n\n connect(token: string, cb: any): void;\n\n disconnect(): void;\n\n publish(publisher: OTPublisher, cb: any): void;\n\n unpublish(publisher: OTPublisher): void;\n\n subscribe(stream: any, container: any, uiProps: any, doneCb: any): OTSubscriber;\n\n unsubscribe(subscriber: OTSubscriber): void;\n\n getSubscribersForStream(stream: any): OTSubscriber[];\n\n off(): void;\n\n on(param: string, cb: any): void;\n\n once(param: string, cb: any): void;\n}\n\ninterface OTStreamSource {\n videoSource: any;\n audioSource: any;\n}\n\ninterface OTPeerConnection extends IMediaSessionPeer {\n localStream: Nullable<OTStreamSource>;\n connection: OTConnection;\n publisher: Nullable<OTPublisher>;\n subscriber: Nullable<OTSubscriber>;\n}\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class OpentokSession extends MediaSessionBase<OTPeerConnection> implements IMediaSession {\n private readonly _credentials: any;\n private _lastStreamEvents: any[] = [];\n private _session: Nullable<IOTSession> = null;\n\n get id(): string {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n }\n\n private get ownPeerId(): string {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration, streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n\n this._credentials = sessionParams.credentials;\n\n this.connect = this.connect.bind(this);\n this.disconnect = this.disconnect.bind(this);\n this.onMediaStreamDestroyed = this.onMediaStreamDestroyed.bind(this);\n this.onMediaStreamRenewed = this.onMediaStreamRenewed.bind(this);\n\n this.createStreamForPublishing = this.createStreamForPublishing.bind(this);\n this.createMediaPublisher = this.createMediaPublisher.bind(this);\n this.connectionCreatedHandler = this.connectionCreatedHandler.bind(this);\n this.connectionDestroyedHandler = this.connectionDestroyedHandler.bind(this);\n this.streamCreatedHandler = this.streamCreatedHandler.bind(this);\n this.streamDestroyedHandler = this.streamDestroyedHandler.bind(this);\n }\n\n sessionDisconnect(): void {\n if (this._session) {\n this._session.disconnect();\n }\n }\n\n connect(): Promise<void> {\n trace.info('Connect to session', this._credentials);\n\n if (this._session) {\n trace.error('Session already exists');\n\n return Promise.reject('Cannot connect to session while another session is active');\n }\n\n return new Promise((resolve, reject) => {\n const handleError = (error: any): void => {\n this._session && this._session!.off();\n this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n\n const {apiKey, sessionId} = this._sessionParams.credentials;\n\n this._session = (window as any).OTSESSION = window.OT.initSession(apiKey, sessionId);\n this._lastStreamEvents = [];\n\n this._session!.on('connectionCreated', this.connectionCreatedHandler);\n this._session!.on('connectionDestroyed', this.connectionDestroyedHandler);\n this._session!.on('streamCreated', this.streamCreatedHandler);\n this._session!.on('streamDestroyed', this.streamDestroyedHandler);\n this._session!.on('archiveStarted', (event: any) => {\n trace.info('archiveStarted event', event);\n this.emitEvent(recordingEvents.RECORD_STARTED, event);\n });\n\n this._session!.on('archiveStopped', (event: any) => {\n trace.info('archiveStopped event', event);\n this.emitEvent(recordingEvents.RECORD_STOPPED, event);\n });\n\n const connectHandler = (error: any): void => {\n if (error) {\n handleError(error);\n\n return;\n }\n\n resolve();\n };\n\n this._session!.connect(this._credentials.token, connectHandler);\n });\n }\n\n disconnect(): Promise<void> {\n return new Promise((resolve) => {\n trace.info('Disconnecting from session');\n const currentSession = this._session;\n\n this._session = null;\n\n this._peerConnections.forEach((peerConnection) => {\n this.destroyPeerConnection(peerConnection);\n });\n\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n this._lastStreamEvents = [];\n\n trace.info('Disconnection from session completed');\n\n resolve();\n });\n }\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n const promises: Promise<void>[] = [];\n\n this._peerConnections.forEach((peerConnection) => {\n if (peerConnection.peerRole === clientRole) {\n promises.push(this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n\n return Promise.all(promises).then(() => undefined);\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>): Promise<void> {\n return Promise.reject(new Error('Not implemented'));\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n return new Promise((resolve: any, reject: any) => {\n const peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n\n return;\n }\n\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack!.subscriber.getStats((error: any, stats: any) => {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({trackId: mediaTrack.id, trackStats: {}});\n\n return;\n }\n\n resolve({trackId: mediaTrack.id, trackStats: stats});\n });\n });\n }\n\n //#region OpenTok Events Handlers\n\n private connectionCreatedHandler(event: any): void {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n const destinationRole = JSON.parse(connection.data).clientRole;\n\n this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId)\n .then((streams: OTStreamSource) => {\n const peerConnection: OTPeerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: this._sessionParams.clientType === SessionClientType.INITIATOR\n ? SessionClientType.GUEST : SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n\n if (connection.connectionId !== this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n\n return peerConnection;\n }\n\n return this.createMediaPublisher(streams)\n .then((publisher: OTPublisher) => {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n\n return peerConnection;\n });\n })\n .then((peerConnection: OTPeerConnection) => {\n this._peerConnections.set(peerConnection.peerId, peerConnection);\n\n if (connection.connectionId === this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n\n /*\n When publisher connect after others participants,\n make sure the publisher will not loose their stream to subscribe\n */\n return this._lastStreamEvents.reduce((promiseChain: any, streamEvent: any) => promiseChain\n .then(() => this.streamCreatedHandler(streamEvent)), Promise.resolve())\n .then(() => {\n if (peerConnection.publisher) {\n return new Promise<void>((resolve, reject) => {\n trace.info('Starting publish to peerConnection.publisher');\n this._session!.publish(peerConnection.publisher, (error: any) => {\n if (error) {\n trace.error(`Publish to peerConnection error ${error}`);\n\n return reject(error);\n }\n\n trace.info('Publish to peerConnection success');\n\n return resolve();\n });\n });\n }\n\n return Promise.resolve();\n });\n }\n })\n .catch((error: any) => {\n //Need to handle fail cases during reliability\n trace.error(`Error handling new peer connection: ${error}`);\n });\n }\n\n private connectionDestroyedHandler(event: any): void {\n trace.info('connectionDestroyedHandler', event);\n const {connection} = event;\n\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId)!);\n }\n }\n\n private streamCreatedHandler(event: any): void {\n trace.info('streamCreatedHandler', event.stream);\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return;\n }\n\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n this._lastStreamEvents.push(event);\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(connection.connectionId)!;\n\n trace.info('Subscribing the stream');\n\n this.createMediaSubscriber(stream).then((subscriber: OTSubscriber) => {\n peerConnection.subscriber = subscriber;\n });\n }\n\n private streamDestroyedHandler(event: any): void {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n\n const peerConnection = this._peerConnections.get(stream.connection.connectionId);\n\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n\n return;\n }\n\n this.destroySubscriberOnPeerConnection(peerConnection)\n .catch(() => trace.warn('Error destroying subscriber on stream destroy'));\n }\n\n //#endregion\n\n //#region PeerConnection\n\n private destroyPeerConnection(peerConnection: OTPeerConnection): void {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection)\n .catch(() => trace.warn('Error destroying publisher on peer destroy'));\n this.destroySubscriberOnPeerConnection(peerConnection)\n .catch(() => trace.warn('Error destroying subscriber on peer destroy'));\n }\n\n //#endregion\n\n //#region Publisher\n\n private createStreamForPublishing(destinationRole: SessionClientRole, shouldCreateStream: boolean): Promise<OTStreamSource> {\n trace.info('createStreamForPublishing');\n const stream: OTStreamSource = {videoSource: null, audioSource: null};\n\n if (!shouldCreateStream) {\n trace.info(`createStreamForPublishing - destinationRole: ${destinationRole} not supposed to create a stream`);\n\n return Promise.resolve(stream);\n }\n\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then((mediaStream: Nullable<MediaStream>) => {\n\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach((track) => {\n if (track.kind === 'video') {\n stream.videoSource = track;\n } else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n } else if (this._sessionParams.clientRole === SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n\n return stream;\n });\n }\n\n private createMediaPublisher(stream: OTStreamSource): Promise<OTPublisher> {\n const otParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource,\n showControls: false,\n insertDefaultUI: false\n };\n\n return new Promise((resolve, reject) => {\n const otPublisher = window.OT.initPublisher(undefined, otParams, (error: any) => {\n if (error) {\n reject(error);\n\n return;\n }\n otPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n //We preventing the default, in order to prevent stop the stream by OT.\n //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.\n event.preventDefault();\n });\n otPublisher.on('videoElementCreated', (event: any) => {\n event.element.muted = true;\n });\n otPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, otPublisher.stream.hasAudio);\n });\n\n resolve(otPublisher);\n });\n });\n }\n\n private destroyPublisherOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session!.unpublish(peerConnection.publisher);\n }\n\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n\n return Promise.resolve();\n }\n\n //#endregion\n\n //#region Subscriber\n\n private createMediaSubscriber(remoteStream: any): Promise<OTSubscriber> {\n return new Promise((resolve: any, reject: any) => {\n if (!this.sessionExistsGuard(false)) {\n reject('Session not exists');\n\n return;\n }\n\n const subscriber: OTSubscriber = this._session!.subscribe(remoteStream, null, {insertDefaultUI: false}, (err: any) => {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n\n return;\n }\n\n subscriber.on('videoElementCreated', (event: any) => {\n const {element} = event;\n const peerConnection = this._peerConnections.get(remoteStream.connection.connectionId)!;\n const otMediaStream: MediaStream = element.srcObject;\n\n peerConnection.subscriber = subscriber;\n\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n\n return;\n }\n\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach((mediaTrack: MediaStreamTrack) => {\n this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n\n this.registerPeersRemoteTracks(peerConnection);\n });\n\n resolve(subscriber);\n });\n });\n }\n\n private destroySubscriberOnPeerConnection(peerConnection: OTPeerConnection): Promise<void> {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session!.unsubscribe(peerConnection.subscriber);\n }\n\n peerConnection.subscriber = null;\n\n return Promise.resolve();\n\n /**\n REMARK- opentok provide the same media track id for all participates.\n when we unregister the media track we check by the id which is the same for all.\n **/\n // return this.unregisterPeersRemoteMediaTracks(peerConnection)\n // .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n // .then(() => {\n // peerConnection.subscriber = null;\n // });\n }\n\n //#endregion\n\n private sessionExistsGuard(shouldThrow = true): boolean {\n const connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n\n return throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n }\n}\n"]}
@@ -1,27 +1,33 @@
1
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);
2
+
3
+ var __extends = undefined && undefined.__extends || function () {
4
+ var _extendStatics = function extendStatics(d, b) {
5
+ _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
6
+ d.__proto__ = b;
7
+ } || function (d, b) {
8
+ for (var p in b) {
9
+ if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
10
+ }
11
+ };
12
+ return _extendStatics(d, b);
8
13
  };
9
14
  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; }
15
+ _extendStatics(d, b);
16
+ function __() {
17
+ this.constructor = d;
18
+ }
14
19
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
20
  };
16
- })();
21
+ }();
17
22
  Object.defineProperty(exports, "__esModule", { value: true });
18
23
  exports.OpentokSession = void 0;
19
24
  var MediaConstants_1 = require("../MediaConstants");
20
25
  var guards_1 = require("@techsee/techsee-common/lib/core/guards");
21
26
  var MediaSessionBase_1 = require("./MediaSessionBase");
22
27
  var MediaTracer_1 = require("../MediaUtils/MediaTracer");
23
- var trace = (0, MediaTracer_1.getMediaTracer)('OpentokSession');
24
- var OpentokSession = (function (_super) {
28
+ var trace = MediaTracer_1.getMediaTracer('OpentokSession');
29
+ //Currently this version supports subscribing only. Publishing will be implemented as needed.
30
+ var OpentokSession = /** @class */function (_super) {
25
31
  __extends(OpentokSession, _super);
26
32
  function OpentokSession(sessionParams, streamFactory) {
27
33
  var _this = _super.call(this, sessionParams, streamFactory) || this;
@@ -41,14 +47,14 @@ var OpentokSession = (function (_super) {
41
47
  return _this;
42
48
  }
43
49
  Object.defineProperty(OpentokSession.prototype, "id", {
44
- get: function () {
50
+ get: function get() {
45
51
  return this._session && this._session.sessionId ? this._session.sessionId : '';
46
52
  },
47
53
  enumerable: false,
48
54
  configurable: true
49
55
  });
50
56
  Object.defineProperty(OpentokSession.prototype, "ownPeerId", {
51
- get: function () {
57
+ get: function get() {
52
58
  return this._session && this._session.connection ? this._session.connection.connectionId : '';
53
59
  },
54
60
  enumerable: false,
@@ -67,16 +73,16 @@ var OpentokSession = (function (_super) {
67
73
  return Promise.reject('Cannot connect to session while another session is active');
68
74
  }
69
75
  return new Promise(function (resolve, reject) {
70
- var handleError = function (error) {
76
+ var handleError = function handleError(error) {
71
77
  _this._session && _this._session.off();
72
78
  _this._session = null;
73
79
  trace.error('handleConnect error:', error);
74
80
  reject(error);
75
81
  };
76
- var _a = _this._sessionParams.credentials, apiKey = _a.apiKey, sessionId = _a.sessionId;
77
- _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId, {
78
- ipWhitelist: _this._sessionParams.ipWhitelist || false
79
- });
82
+ var _a = _this._sessionParams.credentials,
83
+ apiKey = _a.apiKey,
84
+ sessionId = _a.sessionId;
85
+ _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);
80
86
  _this._lastStreamEvents = [];
81
87
  _this._session.on('connectionCreated', _this.connectionCreatedHandler);
82
88
  _this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);
@@ -90,7 +96,7 @@ var OpentokSession = (function (_super) {
90
96
  trace.info('archiveStopped event', event);
91
97
  _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);
92
98
  });
93
- var connectHandler = function (error) {
99
+ var connectHandler = function connectHandler(error) {
94
100
  if (error) {
95
101
  handleError(error);
96
102
  return;
@@ -129,9 +135,12 @@ var OpentokSession = (function (_super) {
129
135
  promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));
130
136
  }
131
137
  });
132
- return Promise.all(promises).then(function () { return undefined; });
138
+ return Promise.all(promises).then(function () {
139
+ return undefined;
140
+ });
133
141
  };
134
142
  OpentokSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {
143
+ //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)
135
144
  return Promise.resolve();
136
145
  };
137
146
  OpentokSession.prototype.replaceStreamTracks = function (mediaStream) {
@@ -145,6 +154,7 @@ var OpentokSession = (function (_super) {
145
154
  reject(new Error('Cannot find peer or subscriber for getting stats'));
146
155
  return;
147
156
  }
157
+ //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats
148
158
  peerConnectionOfTrack.subscriber.getStats(function (error, stats) {
149
159
  if (error) {
150
160
  trace.warn('Error getting stats', error);
@@ -155,6 +165,7 @@ var OpentokSession = (function (_super) {
155
165
  });
156
166
  });
157
167
  };
168
+ //#region OpenTok Events Handlers
158
169
  OpentokSession.prototype.connectionCreatedHandler = function (event) {
159
170
  var _this = this;
160
171
  trace.info('connectionCreatedHandler', event);
@@ -163,14 +174,11 @@ var OpentokSession = (function (_super) {
163
174
  return;
164
175
  }
165
176
  var destinationRole = JSON.parse(connection.data).clientRole;
166
- this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId)
167
- .then(function (streams) {
177
+ this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId).then(function (streams) {
168
178
  var peerConnection = {
169
179
  peerId: connection.connectionId,
170
180
  peerRole: destinationRole,
171
- peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR
172
- ? MediaConstants_1.SessionClientType.GUEST
173
- : MediaConstants_1.SessionClientType.INITIATOR,
181
+ peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,
174
182
  connection: connection,
175
183
  publisher: null,
176
184
  subscriber: null,
@@ -178,7 +186,7 @@ var OpentokSession = (function (_super) {
178
186
  localStream: streams,
179
187
  connectionTimoutPrt: null
180
188
  };
181
- if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {
189
+ if (connection.connectionId !== _this.ownPeerId || !streams.videoSource && !streams.audioSource) {
182
190
  trace.info('Peer connection without publisher was created', peerConnection);
183
191
  return peerConnection;
184
192
  }
@@ -187,22 +195,25 @@ var OpentokSession = (function (_super) {
187
195
  trace.info('Peer connection with publisher was created', peerConnection);
188
196
  return peerConnection;
189
197
  });
190
- })
191
- .then(function (peerConnection) {
198
+ }).then(function (peerConnection) {
192
199
  _this._peerConnections.set(peerConnection.peerId, peerConnection);
193
200
  if (connection.connectionId === _this.ownPeerId) {
194
201
  trace.info('Before subscribe the event streams');
195
- return _this._lastStreamEvents
196
- .reduce(function (promiseChain, streamEvent) {
197
- return promiseChain.then(function () { return _this.streamCreatedHandler(streamEvent); });
198
- }, Promise.resolve())
199
- .then(function () {
202
+ /*
203
+ When publisher connect after others participants,
204
+ make sure the publisher will not loose their stream to subscribe
205
+ */
206
+ return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) {
207
+ return promiseChain.then(function () {
208
+ return _this.streamCreatedHandler(streamEvent);
209
+ });
210
+ }, Promise.resolve()).then(function () {
200
211
  if (peerConnection.publisher) {
201
212
  return new Promise(function (resolve, reject) {
202
213
  trace.info('Starting publish to peerConnection.publisher');
203
214
  _this._session.publish(peerConnection.publisher, function (error) {
204
215
  if (error) {
205
- trace.error("Publish to peerConnection error ".concat(error));
216
+ trace.error("Publish to peerConnection error " + error);
206
217
  return reject(error);
207
218
  }
208
219
  trace.info('Publish to peerConnection success');
@@ -213,9 +224,9 @@ var OpentokSession = (function (_super) {
213
224
  return Promise.resolve();
214
225
  });
215
226
  }
216
- })
217
- .catch(function (error) {
218
- trace.error("Error handling new peer connection: ".concat(error));
227
+ }).catch(function (error) {
228
+ //Need to handle fail cases during reliability
229
+ trace.error("Error handling new peer connection: " + error);
219
230
  });
220
231
  };
221
232
  OpentokSession.prototype.connectionDestroyedHandler = function (event) {
@@ -261,6 +272,8 @@ var OpentokSession = (function (_super) {
261
272
  return trace.warn('Error destroying subscriber on stream destroy');
262
273
  });
263
274
  };
275
+ //#endregion
276
+ //#region PeerConnection
264
277
  OpentokSession.prototype.destroyPeerConnection = function (peerConnection) {
265
278
  this._peerConnections.delete(peerConnection.peerId);
266
279
  this.destroyPublisherOnPeerConnection(peerConnection).catch(function () {
@@ -270,29 +283,27 @@ var OpentokSession = (function (_super) {
270
283
  return trace.warn('Error destroying subscriber on peer destroy');
271
284
  });
272
285
  };
286
+ //#endregion
287
+ //#region Publisher
273
288
  OpentokSession.prototype.createStreamForPublishing = function (destinationRole, shouldCreateStream) {
274
289
  var _this = this;
275
290
  trace.info('createStreamForPublishing');
276
291
  var stream = { videoSource: null, audioSource: null };
277
292
  if (!shouldCreateStream) {
278
- trace.info("createStreamForPublishing - destinationRole: ".concat(destinationRole, " not supposed to create a stream"));
293
+ trace.info("createStreamForPublishing - destinationRole: " + destinationRole + " not supposed to create a stream");
279
294
  return Promise.resolve(stream);
280
295
  }
281
- return this._sessionStreamsManager
282
- .getMediaStreamForRole(destinationRole)
283
- .then(function (mediaStream) {
296
+ return this._sessionStreamsManager.getMediaStreamForRole(destinationRole).then(function (mediaStream) {
284
297
  if (mediaStream) {
285
298
  trace.info('Media stream found for publishing', mediaStream);
286
299
  mediaStream.getTracks().forEach(function (track) {
287
300
  if (track.kind === 'video') {
288
301
  stream.videoSource = track;
289
- }
290
- else if (track.kind === 'audio') {
302
+ } else if (track.kind === 'audio') {
291
303
  stream.audioSource = track;
292
304
  }
293
305
  });
294
- }
295
- else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {
306
+ } else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {
296
307
  trace.warn('No local media was found for publishing to destinationRole:', destinationRole);
297
308
  }
298
309
  return stream;
@@ -315,6 +326,8 @@ var OpentokSession = (function (_super) {
315
326
  }
316
327
  otPublisher.on('streamDestroyed', function (event) {
317
328
  trace.info('Publisher stream destroyed', event);
329
+ //We preventing the default, in order to prevent stop the stream by OT.
330
+ //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.
318
331
  event.preventDefault();
319
332
  });
320
333
  otPublisher.on('videoElementCreated', function (event) {
@@ -335,6 +348,8 @@ var OpentokSession = (function (_super) {
335
348
  peerConnection.localStream = null;
336
349
  return Promise.resolve();
337
350
  };
351
+ //#endregion
352
+ //#region Subscriber
338
353
  OpentokSession.prototype.createMediaSubscriber = function (remoteStream) {
339
354
  var _this = this;
340
355
  return new Promise(function (resolve, reject) {
@@ -373,13 +388,27 @@ var OpentokSession = (function (_super) {
373
388
  }
374
389
  peerConnection.subscriber = null;
375
390
  return Promise.resolve();
391
+ /**
392
+ REMARK- opentok provide the same media track id for all participates.
393
+ when we unregister the media track we check by the id which is the same for all.
394
+ **/
395
+ // return this.unregisterPeersRemoteMediaTracks(peerConnection)
396
+ // .catch(() => trace.warn('Error removing remote streams from peerConnection'))
397
+ // .then(() => {
398
+ // peerConnection.subscriber = null;
399
+ // });
376
400
  };
401
+ //#endregion
377
402
  OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {
378
- if (shouldThrow === void 0) { shouldThrow = true; }
403
+ if (shouldThrow === void 0) {
404
+ shouldThrow = true;
405
+ }
379
406
  var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);
380
- return (0, guards_1.throwableGuard)(connected, 'There no OpenTok session exists', shouldThrow);
407
+ return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);
381
408
  };
382
409
  return OpentokSession;
383
- }(MediaSessionBase_1.MediaSessionBase));
410
+ }(MediaSessionBase_1.MediaSessionBase);
384
411
  exports.OpentokSession = OpentokSession;
385
- //# sourceMappingURL=SessionOpentok.js.map
412
+
413
+ //# sourceMappingURL=SessionOpentok.js.map
414
+ //# sourceMappingURL=SessionOpentok.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionOpentok.js","sourceRoot":"","sources":["../../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["MediaSession/SessionOpentok.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","defineProperty","exports","value","OpentokSession","MediaConstants_1","require","guards_1","MediaSessionBase_1","MediaTracer_1","trace","getMediaTracer","_super","sessionParams","streamFactory","_this","_lastStreamEvents","_session","_credentials","credentials","connect","bind","disconnect","onMediaStreamDestroyed","onMediaStreamRenewed","createStreamForPublishing","createMediaPublisher","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","get","sessionId","enumerable","configurable","connection","connectionId","sessionDisconnect","info","error","Promise","reject","resolve","handleError","off","_a","_sessionParams","apiKey","window","OTSESSION","OT","initSession","on","event","emitEvent","recordingEvents","RECORD_STARTED","RECORD_STOPPED","connectHandler","token","currentSession","_peerConnections","forEach","peerConnection","destroyPeerConnection","clientRole","promises","peerRole","push","destroyPublisherOnPeerConnection","all","then","undefined","mediaStream","replaceStreamTracks","Error","getRemoteTrackStats","mediaTrack","peerConnectionOfTrack","getPeerConnectionByMediaTrack","subscriber","getStats","stats","warn","trackId","id","trackStats","sessionExistsGuard","destinationRole","JSON","parse","data","ownPeerId","streams","peerId","peerType","clientType","SessionClientType","INITIATOR","GUEST","publisher","remoteMediaTracks","localStream","connectionTimoutPrt","videoSource","audioSource","set","reduce","promiseChain","streamEvent","publish","catch","has","stream","createMediaSubscriber","destroySubscriberOnPeerConnection","delete","shouldCreateStream","_sessionStreamsManager","getMediaStreamForRole","getTracks","track","kind","SessionClientRole","USER","otParams","publishAudio","publishVideo","showControls","insertDefaultUI","otPublisher","initPublisher","preventDefault","element","muted","hasAudio","unpublish","remoteStream","subscribe","err","otMediaStream","srcObject","addRemoteTrackToPeer","registerPeersRemoteTracks","unsubscribe","shouldThrow","connected","throwableGuard","MediaSessionBase"],"mappings":"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","file":"SessionOpentok.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokSession = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar guards_1 = require(\"@techsee/techsee-common/lib/core/guards\");\nvar MediaSessionBase_1 = require(\"./MediaSessionBase\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('OpentokSession');\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nvar OpentokSession = /** @class */ (function (_super) {\n __extends(OpentokSession, _super);\n function OpentokSession(sessionParams, streamFactory) {\n var _this = _super.call(this, sessionParams, streamFactory) || this;\n _this._lastStreamEvents = [];\n _this._session = null;\n _this._credentials = sessionParams.credentials;\n _this.connect = _this.connect.bind(_this);\n _this.disconnect = _this.disconnect.bind(_this);\n _this.onMediaStreamDestroyed = _this.onMediaStreamDestroyed.bind(_this);\n _this.onMediaStreamRenewed = _this.onMediaStreamRenewed.bind(_this);\n _this.createStreamForPublishing = _this.createStreamForPublishing.bind(_this);\n _this.createMediaPublisher = _this.createMediaPublisher.bind(_this);\n _this.connectionCreatedHandler = _this.connectionCreatedHandler.bind(_this);\n _this.connectionDestroyedHandler = _this.connectionDestroyedHandler.bind(_this);\n _this.streamCreatedHandler = _this.streamCreatedHandler.bind(_this);\n _this.streamDestroyedHandler = _this.streamDestroyedHandler.bind(_this);\n return _this;\n }\n Object.defineProperty(OpentokSession.prototype, \"id\", {\n get: function () {\n return this._session && this._session.sessionId ? this._session.sessionId : '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(OpentokSession.prototype, \"ownPeerId\", {\n get: function () {\n return this._session && this._session.connection ? this._session.connection.connectionId : '';\n },\n enumerable: false,\n configurable: true\n });\n OpentokSession.prototype.sessionDisconnect = function () {\n if (this._session) {\n this._session.disconnect();\n }\n };\n OpentokSession.prototype.connect = function () {\n var _this = this;\n trace.info('Connect to session', this._credentials);\n if (this._session) {\n trace.error('Session already exists');\n return Promise.reject('Cannot connect to session while another session is active');\n }\n return new Promise(function (resolve, reject) {\n var handleError = function (error) {\n _this._session && _this._session.off();\n _this._session = null;\n trace.error('handleConnect error:', error);\n reject(error);\n };\n var _a = _this._sessionParams.credentials, apiKey = _a.apiKey, sessionId = _a.sessionId;\n _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);\n _this._lastStreamEvents = [];\n _this._session.on('connectionCreated', _this.connectionCreatedHandler);\n _this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this._session.on('streamCreated', _this.streamCreatedHandler);\n _this._session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this._session.on('archiveStarted', function (event) {\n trace.info('archiveStarted event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STARTED, event);\n });\n _this._session.on('archiveStopped', function (event) {\n trace.info('archiveStopped event', event);\n _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);\n });\n var connectHandler = function (error) {\n if (error) {\n handleError(error);\n return;\n }\n resolve();\n };\n _this._session.connect(_this._credentials.token, connectHandler);\n });\n };\n OpentokSession.prototype.disconnect = function () {\n var _this = this;\n return new Promise(function (resolve) {\n trace.info('Disconnecting from session');\n var currentSession = _this._session;\n _this._session = null;\n _this._peerConnections.forEach(function (peerConnection) {\n _this.destroyPeerConnection(peerConnection);\n });\n if (!currentSession) {\n trace.info('No active session - resolving');\n resolve();\n return;\n }\n currentSession.off();\n currentSession.disconnect();\n _this._lastStreamEvents = [];\n trace.info('Disconnection from session completed');\n resolve();\n });\n };\n OpentokSession.prototype.onMediaStreamDestroyed = function (clientRole) {\n var _this = this;\n var promises = [];\n this._peerConnections.forEach(function (peerConnection) {\n if (peerConnection.peerRole === clientRole) {\n promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));\n }\n });\n return Promise.all(promises).then(function () { return undefined; });\n };\n OpentokSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)\n return Promise.resolve();\n };\n OpentokSession.prototype.replaceStreamTracks = function (mediaStream) {\n return Promise.reject(new Error('Not implemented'));\n };\n OpentokSession.prototype.getRemoteTrackStats = function (mediaTrack) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var peerConnectionOfTrack = _this.getPeerConnectionByMediaTrack(mediaTrack);\n if (!peerConnectionOfTrack || !peerConnectionOfTrack.subscriber) {\n reject(new Error('Cannot find peer or subscriber for getting stats'));\n return;\n }\n //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats\n peerConnectionOfTrack.subscriber.getStats(function (error, stats) {\n if (error) {\n trace.warn('Error getting stats', error);\n resolve({ trackId: mediaTrack.id, trackStats: {} });\n return;\n }\n resolve({ trackId: mediaTrack.id, trackStats: stats });\n });\n });\n };\n //#region OpenTok Events Handlers\n OpentokSession.prototype.connectionCreatedHandler = function (event) {\n var _this = this;\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n var destinationRole = JSON.parse(connection.data).clientRole;\n this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId)\n .then(function (streams) {\n var peerConnection = {\n peerId: connection.connectionId,\n peerRole: destinationRole,\n peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR\n ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,\n connection: connection,\n publisher: null,\n subscriber: null,\n remoteMediaTracks: [],\n localStream: streams,\n connectionTimoutPrt: null\n };\n if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {\n trace.info('Peer connection without publisher was created', peerConnection);\n return peerConnection;\n }\n return _this.createMediaPublisher(streams)\n .then(function (publisher) {\n peerConnection.publisher = publisher;\n trace.info('Peer connection with publisher was created', peerConnection);\n return peerConnection;\n });\n })\n .then(function (peerConnection) {\n _this._peerConnections.set(peerConnection.peerId, peerConnection);\n if (connection.connectionId === _this.ownPeerId) {\n trace.info('Before subscribe the event streams');\n /*\n When publisher connect after others participants,\n make sure the publisher will not loose their stream to subscribe\n */\n return _this._lastStreamEvents.reduce(function (promiseChain, streamEvent) { return promiseChain\n .then(function () { return _this.streamCreatedHandler(streamEvent); }); }, Promise.resolve())\n .then(function () {\n if (peerConnection.publisher) {\n return new Promise(function (resolve, reject) {\n trace.info('Starting publish to peerConnection.publisher');\n _this._session.publish(peerConnection.publisher, function (error) {\n if (error) {\n trace.error(\"Publish to peerConnection error \" + error);\n return reject(error);\n }\n trace.info('Publish to peerConnection success');\n return resolve();\n });\n });\n }\n return Promise.resolve();\n });\n }\n })\n .catch(function (error) {\n //Need to handle fail cases during reliability\n trace.error(\"Error handling new peer connection: \" + error);\n });\n };\n OpentokSession.prototype.connectionDestroyedHandler = function (event) {\n trace.info('connectionDestroyedHandler', event);\n var connection = event.connection;\n if (!this.sessionExistsGuard(false) || !connection) {\n return;\n }\n if (this._peerConnections.has(connection.connectionId)) {\n this.destroyPeerConnection(this._peerConnections.get(connection.connectionId));\n }\n };\n OpentokSession.prototype.streamCreatedHandler = function (event) {\n trace.info('streamCreatedHandler', event.stream);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!this.sessionExistsGuard(false) || !stream || connection.connectionId === this.ownPeerId) {\n return;\n }\n if (!this._peerConnections.has(connection.connectionId)) {\n trace.warn('Unexpected case, connection should exist on this stage');\n this._lastStreamEvents.push(event);\n return;\n }\n var peerConnection = this._peerConnections.get(connection.connectionId);\n trace.info('Subscribing the stream');\n this.createMediaSubscriber(stream).then(function (subscriber) {\n peerConnection.subscriber = subscriber;\n });\n };\n OpentokSession.prototype.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n if (!this.sessionExistsGuard(false) || !stream) {\n return;\n }\n var peerConnection = this._peerConnections.get(stream.connection.connectionId);\n if (!peerConnection) {\n trace.warn('Peer connection for remote stream not found');\n return;\n }\n this.destroySubscriberOnPeerConnection(peerConnection)\n .catch(function () { return trace.warn('Error destroying subscriber on stream destroy'); });\n };\n //#endregion\n //#region PeerConnection\n OpentokSession.prototype.destroyPeerConnection = function (peerConnection) {\n this._peerConnections.delete(peerConnection.peerId);\n this.destroyPublisherOnPeerConnection(peerConnection)\n .catch(function () { return trace.warn('Error destroying publisher on peer destroy'); });\n this.destroySubscriberOnPeerConnection(peerConnection)\n .catch(function () { return trace.warn('Error destroying subscriber on peer destroy'); });\n };\n //#endregion\n //#region Publisher\n OpentokSession.prototype.createStreamForPublishing = function (destinationRole, shouldCreateStream) {\n var _this = this;\n trace.info('createStreamForPublishing');\n var stream = { videoSource: null, audioSource: null };\n if (!shouldCreateStream) {\n trace.info(\"createStreamForPublishing - destinationRole: \" + destinationRole + \" not supposed to create a stream\");\n return Promise.resolve(stream);\n }\n return this._sessionStreamsManager.getMediaStreamForRole(destinationRole)\n .then(function (mediaStream) {\n if (mediaStream) {\n trace.info('Media stream found for publishing', mediaStream);\n mediaStream.getTracks().forEach(function (track) {\n if (track.kind === 'video') {\n stream.videoSource = track;\n }\n else if (track.kind === 'audio') {\n stream.audioSource = track;\n }\n });\n }\n else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {\n trace.warn('No local media was found for publishing to destinationRole:', destinationRole);\n }\n return stream;\n });\n };\n OpentokSession.prototype.createMediaPublisher = function (stream) {\n var otParams = {\n videoSource: stream.videoSource ? stream.videoSource : false,\n audioSource: stream.audioSource ? stream.audioSource : false,\n publishAudio: !!stream.audioSource,\n publishVideo: !!stream.videoSource,\n showControls: false,\n insertDefaultUI: false\n };\n return new Promise(function (resolve, reject) {\n var otPublisher = window.OT.initPublisher(undefined, otParams, function (error) {\n if (error) {\n reject(error);\n return;\n }\n otPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n //We preventing the default, in order to prevent stop the stream by OT.\n //We managing streams by ourselves and if we allow OT to close the stream, it cannot be reused.\n event.preventDefault();\n });\n otPublisher.on('videoElementCreated', function (event) {\n event.element.muted = true;\n });\n otPublisher.on('streamCreated', function (event) {\n trace.info('publisher stream created', event, otPublisher.stream.hasAudio);\n });\n resolve(otPublisher);\n });\n });\n };\n OpentokSession.prototype.destroyPublisherOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.publisher) {\n this._session.unpublish(peerConnection.publisher);\n }\n peerConnection.publisher = null;\n peerConnection.localStream = null;\n return Promise.resolve();\n };\n //#endregion\n //#region Subscriber\n OpentokSession.prototype.createMediaSubscriber = function (remoteStream) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (!_this.sessionExistsGuard(false)) {\n reject('Session not exists');\n return;\n }\n var subscriber = _this._session.subscribe(remoteStream, null, { insertDefaultUI: false }, function (err) {\n if (err) {\n trace.warn('Error creating subscriber', err);\n reject(err);\n return;\n }\n subscriber.on('videoElementCreated', function (event) {\n var element = event.element;\n var peerConnection = _this._peerConnections.get(remoteStream.connection.connectionId);\n var otMediaStream = element.srcObject;\n peerConnection.subscriber = subscriber;\n if (!otMediaStream) {\n trace.warn('MediaStream not found in OT video element');\n return;\n }\n trace.info('Registering remote media tracks', peerConnection.subscriber, otMediaStream);\n otMediaStream.getTracks().forEach(function (mediaTrack) {\n _this.addRemoteTrackToPeer(peerConnection, mediaTrack);\n });\n _this.registerPeersRemoteTracks(peerConnection);\n });\n resolve(subscriber);\n });\n });\n };\n OpentokSession.prototype.destroySubscriberOnPeerConnection = function (peerConnection) {\n if (this.sessionExistsGuard(false) && peerConnection.subscriber) {\n this._session.unsubscribe(peerConnection.subscriber);\n }\n peerConnection.subscriber = null;\n return Promise.resolve();\n /**\n REMARK- opentok provide the same media track id for all participates.\n when we unregister the media track we check by the id which is the same for all.\n **/\n // return this.unregisterPeersRemoteMediaTracks(peerConnection)\n // .catch(() => trace.warn('Error removing remote streams from peerConnection'))\n // .then(() => {\n // peerConnection.subscriber = null;\n // });\n };\n //#endregion\n OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {\n if (shouldThrow === void 0) { shouldThrow = true; }\n var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);\n return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);\n };\n return OpentokSession;\n}(MediaSessionBase_1.MediaSessionBase));\nexports.OpentokSession = OpentokSession;\n\n//# sourceMappingURL=SessionOpentok.js.map\n"]}
@@ -35,4 +35,3 @@ export declare class TurnWebRtcSession extends MediaSessionBase<RTCPeerConnectio
35
35
  _iceStateDisconnected(peerConnection: RTCPeerConnection): void;
36
36
  sessionDisconnect(): void;
37
37
  }
38
- //# sourceMappingURL=SessionTurn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTurn.d.ts","sourceRoot":"","sources":["../../src/MediaSession/SessionTurn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAElB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAiD,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAWvH,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAKpD,qBAAa,iBAAkB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAE,YAAW,aAAa;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAM;IACrC,OAAO,CAAC,OAAO,CAAM;IAErB,IAAI,EAAE,IAAI,MAAM,CAEf;gBAGG,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EAC7D,eAAe,EAAE,oBAAoB,EACrC,aAAa,EAAE,sBAAsB;IA6BzC,OAAO,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiChE,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBlD,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCtE,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,GAAG,IAAI;IAuDhD,oBAAoB,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI;IAyBjD,wBAAwB,CAAC,qBAAqB,EAAE,GAAG,GAAG,IAAI;IAgB1D,gBAAgB,CAAC,aAAa,EAAE,GAAG,GAAG,IAAI;IAoD1C,8BAA8B,IAAI,IAAI;IAgBtC,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAapE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY5E,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,qBAAqB;IAoE7B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,mBAAmB;IAY3B,4BAA4B,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI;IAuBzD,sBAAsB,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvG,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAejD,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQvE,qBAAqB,CAAC,cAAc,EAAE,iBAAiB,GAAG,IAAI;IAS9D,iBAAiB,IAAI,IAAI;CAM5B"}
1
+ {"version":3,"sources":["../src/MediaSession/SessionTurn.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EAElB,gBAAgB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAiD,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAWvH,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAKpD,qBAAa,iBAAkB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAE,YAAW,aAAa;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAM;IACrC,OAAO,CAAC,OAAO,CAAM;IAErB,IAAI,EAAE,IAAI,MAAM,CAEf;gBAEW,aAAa,EAAE,kBAAkB,GAAG,yBAAyB,EACrE,eAAe,EAAE,oBAAoB,EACrC,aAAa,EAAE,sBAAsB;IA4BzC,OAAO,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiChE,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYlD,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BtE,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,GAAG,IAAI;IAsDhD,oBAAoB,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI;IAwBjD,wBAAwB,CAAC,qBAAqB,EAAE,GAAG,GAAG,IAAI;IAgB1D,gBAAgB,CAAC,aAAa,EAAE,GAAG,GAAG,IAAI;IAuD1C,8BAA8B,IAAI,IAAI;IActC,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5F,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY5E,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,qBAAqB;IA6D7B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,mBAAmB;IAY3B,4BAA4B,CAAC,gBAAgB,EAAE,GAAG,GAAG,IAAI;IAuBzD,sBAAsB,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvG,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAejD,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQvE,qBAAqB,CAAC,cAAc,EAAE,iBAAiB,GAAG,IAAI;IAM9D,iBAAiB,IAAI,IAAI;CAM5B","file":"SessionTurn.d.ts","sourcesContent":["import * as io from 'socket.io-client';\nimport once from 'lodash/once';\nimport {Nullable} from '@techsee/techsee-common';\n\nimport {\n IMediaSession,\n ISessionStreamsManager,\n MediaSessionConfiguration,\n MediaSessionHandlers,\n MediaSessionParams,\n RemoteMediaTrack,\n RemoteTrackStats\n} from '../MediaContracts';\n\nimport {KnownMediaStream, MediaSessionDisconnectReason, SessionClientRole, SessionClientType} from '../MediaConstants';\n\nimport {\n SOCKET_EVENTS,\n SOCKET_PATH,\n SOCKET_RECONNECTION_ATTEMPTS,\n SOCKET_RECONNECTION_DELAY,\n SOCKET_RECONNECTION_DELAY_MAX\n} from './TurnConstants';\n\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {MediaSessionBase} from './MediaSessionBase';\n\nconst trace = getMediaTracer('TurnWebRtcSession');\n\n//Currently this version supports subscribing only. Publishing will be implemented as needed.\nexport class TurnWebRtcSession extends MediaSessionBase<RTCPeerConnection> implements IMediaSession {\n private readonly _sessionHandlers: MediaSessionHandlers;\n private readonly _pendingPeersIce: any;\n private readonly _configuration: any;\n private _socket: any;\n\n get id(): string {\n return this._sessionParams.sessionId;\n }\n\n constructor(sessionParams: MediaSessionParams & MediaSessionConfiguration,\n sessionHandlers: MediaSessionHandlers,\n streamFactory: ISessionStreamsManager) {\n super(sessionParams, streamFactory);\n this._sessionHandlers = sessionHandlers;\n this._socket = null;\n this._pendingPeersIce = {};\n\n const iceServers = sessionParams.credentials.ice.map((item: any) => ({\n urls: item.url,\n username: item.login,\n credential: item.password\n }));\n\n this._configuration = {\n iceServers,\n iceTransportPolicy: 'relay'\n };\n\n this._joinResponseHandler = this._joinResponseHandler.bind(this);\n this._iceCandidateReceivedHandler = this._iceCandidateReceivedHandler.bind(this);\n this._sendOfferHandler = this._sendOfferHandler.bind(this);\n this._sdpOfferHandler = this._sdpOfferHandler.bind(this);\n this._initiatorPeerReconnectHandler = this._initiatorPeerReconnectHandler.bind(this);\n this._peerDisconnectedHandler = this._peerDisconnectedHandler.bind(this);\n this._onSocketDisconnectedHandler = this._onSocketDisconnectedHandler.bind(this);\n }\n\n //#region Socket Connectivity\n\n connect(connectOnly = false): Promise<void> {\n trace.info('Connect to session');\n\n return this._connectSocket(this._sessionParams.credentials.url, connectOnly)\n .then(() => {\n trace.info('Joining SessionId: ' + this._sessionParams.sessionId);\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.JOIN_ROOM, {\n clientType: this._sessionParams.clientType,\n sessionId: this._sessionParams.sessionId\n });\n })\n .catch((error) => {\n throw error;\n });\n }\n\n disconnect(): Promise<void> {\n trace.info('disconnect - call disconnect from session', MediaSessionDisconnectReason.ForcedByConsumer);\n\n return this._disconnectInternal(MediaSessionDisconnectReason.ForcedByConsumer);\n }\n\n _connectSocket(url: string, connectOnly: boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n const socket = this._socket = io.connect(url, {\n 'forceNew': true,\n 'reconnectionDelay': SOCKET_RECONNECTION_DELAY,\n 'reconnectionDelayMax': SOCKET_RECONNECTION_DELAY_MAX,\n 'reconnectionAttempts': SOCKET_RECONNECTION_ATTEMPTS,\n 'path': SOCKET_PATH\n });\n\n const done = once((err?: any) => {\n err ? reject(err) : resolve();\n });\n\n socket.once('connect', () => done());\n socket.on(SOCKET_EVENTS.INCOMING.ERROR, done);\n socket.on('connect_error', done);\n socket.on('connect_timeout', done);\n socket.on('disconnect', this._onSocketDisconnectedHandler);\n\n if (!connectOnly) {\n trace.info('Subscribing socket events');\n\n socket.on(SOCKET_EVENTS.INCOMING.SEND_OFFER, this._sendOfferHandler);\n socket.on(SOCKET_EVENTS.INCOMING.JOIN_RESPONSE, this._joinResponseHandler);\n socket.on(SOCKET_EVENTS.INCOMING.PEER_DISCONNECTED, this._peerDisconnectedHandler);\n socket.on(SOCKET_EVENTS.INCOMING.SDP_OFFER, this._sdpOfferHandler);\n socket.on(SOCKET_EVENTS.INCOMING.PUBLISHER_RECONNECT, this._initiatorPeerReconnectHandler);\n socket.on(SOCKET_EVENTS.INCOMING.ICE_CANDIDATE, this._iceCandidateReceivedHandler);\n }\n });\n }\n\n _onSocketDisconnectedHandler(reason: string): void {\n if (this._socket) {\n // The initial example of differentiating between \"forced\" disconnect and \"network\" disconnect is taken from:\n // https://socket.io/docs/client-api/#Event-%E2%80%98disconnect%E2%80%99\n if (reason !== 'io server disconnect' && reason !== 'io client disconnect') {\n trace.info('_onSocketDisconnectedHandler disconnect from session', MediaSessionDisconnectReason.SignalingChannelDisconnect);\n // the disconnection was initiated by the server or by client, you need to call (connect) manually\n this._disconnectInternal(MediaSessionDisconnectReason.SignalingChannelDisconnect).catch(() => undefined);\n }\n }\n }\n\n replaceStreamTracks(mediaStream: Nullable<MediaStream>): Promise<void> {\n const promises: any[] = [];\n\n if (mediaStream && this._peerConnections) {\n trace.info('replaceStreamTracks - Replace local tracks to peer connection');\n\n this._peerConnections.forEach((peerConnection: RTCPeerConnection) => {\n mediaStream.getTracks().forEach((track) => {\n const sender = peerConnection.getSenders().find((s: any) => s.track.kind === track.kind);\n\n if (sender) {\n promises.push(sender.replaceTrack(track)\n .then(() => trace.info(`replaceStreamTracks - Local ${track.kind} ${track.id} track replace to peer connection`)));\n }\n });\n });\n }\n\n return Promise.all(promises).then(() => {\n window.mediaStreamAlreadyReplaced = true;\n trace.info('replaceStreamTracks: replace stream tracks - Success');\n });\n }\n\n //#endregion\n\n //#region WebRTC Initiator - session Initiator (User on mobile device)\n\n // Received by Initiator, causing him to emit SDP_OFFER\n _sendOfferHandler(sendOfferEventData: any): void {\n const {uid, peerId} = sendOfferEventData;\n\n trace.info('_sendOfferHandler');\n\n //Currently we not support of passing role through signaling, so we assume every connection is \"AGENT\" like\n const peerConnection = this._createPeerConnection(peerId, SessionClientType.GUEST, SessionClientRole.AGENT);\n const offerParams = {offerToReceiveAudio: true, offerToReceiveVideo: true};\n\n //TODO - Alex: Currently we not sending \"role\" through signaling, and by default we assume that the one who asks fot offer, is agent.\n //On later stages we can send or the client \"role\" or the list of \"streams\" that peer is interested in.\n this._sessionStreamsManager.getMediaStreamForRole(SessionClientRole.AGENT)\n .then((mediaStream: Nullable<MediaStream>) => {\n trace.info('_sendOfferHandler stream and peer created');\n\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection for sending offer');\n mediaStream.getTracks().forEach((track) => {\n peerConnection.addTrack(track, mediaStream);\n trace.info(`Local ${track.kind} ${track.id} track added to peer connection`);\n });\n } else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(() => peerConnection.createOffer(offerParams))\n .then((offerDesc) => {\n trace.info('Initiator has created sdp offer', {offerDesc});\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.SDP_OFFER, {\n uid,\n peerId,\n sessionId: this._sessionParams.sessionId,\n sdpOffer: offerDesc.sdp\n });\n\n return peerConnection.setLocalDescription(offerDesc)\n .then(() => {\n trace.info('Local description was set on peerConnection', peerConnection);\n this._setPeerConnectionMonitor(peerConnection);\n\n // make sure using the tracks of the last stream that used\n if (window.latestUserMediaStream && window.mediaStreamAlreadyReplaced) {\n this.replaceStreamTracks(window.latestUserMediaStream.mediaStream)\n .catch((e) => trace.warn('_sendOfferHandler - Failed to replaceStreamTrace', e));\n }\n });\n })\n .catch((e) => {\n trace.warn('Error', e);\n });\n }\n\n // Received by the Initiator: Indicates that publish should be started\n _joinResponseHandler(joinResponseData: any): void {\n const {sdpAnswer, uid, peerId} = joinResponseData;\n\n trace.info('joinResponse Received', {sdpAnswer});\n\n this._withPeerConnection(peerId, (peerConnection: RTCPeerConnection) => {\n const answer = new RTCSessionDescription({\n type: 'answer',\n sdp: sdpAnswer\n });\n\n peerConnection.setRemoteDescription(answer)\n .then(() => {\n trace.info('Remote description was set', answer);\n\n this._processQueuedIceCandidates(peerId);\n })\n .catch((e) => {\n trace.warn('Error', e);\n });\n });\n }\n\n // Received by Initiator after a guests socket has been disconnected\n _peerDisconnectedHandler(peerDisconnectedEvent: any): void {\n const {peerId} = peerDisconnectedEvent;\n\n trace.info('_peerDisconnectedHandler');\n\n this._withPeerConnection(peerId, (peerConnection: any) => {\n this._destroyPeerConnection(peerConnection);\n //this._disconnectInternal(MediaSessionDisconnectReason.PeerDisconnected).catch(() => undefined);\n });\n }\n\n //#endregion WebRTC Initiator - session Initiator (User on mobile device)\n\n //#region WebRTC Guest - session Guest (Agent on dashboard platform)\n\n // Received by Guest, causing him to emit SDP_ANSWER\n _sdpOfferHandler(sdpOfferEvent: any): void {\n const {sdpOffer, peerId, uid} = sdpOfferEvent;\n\n trace.info('sdpOffer Received', {sdpOffer});\n\n const peerConnection = this._createPeerConnection(peerId, SessionClientType.INITIATOR, SessionClientRole.USER);\n\n this._sessionStreamsManager.getMediaStreamForRole(SessionClientRole.USER)\n .then((mediaStream: Nullable<MediaStream>) => {\n if (mediaStream) {\n trace.info('Adding local tracks to peer connection offer handler');\n mediaStream.getTracks().forEach((track) => {\n peerConnection.addTrack(track, mediaStream);\n trace.info(`Local ${track.kind} track added to peer connection`);\n });\n } else {\n trace.info('No media stream was found for publishing');\n }\n })\n .then(() => {\n const remoteDesc = new RTCSessionDescription({type: 'offer', sdp: sdpOffer});\n\n return peerConnection.setRemoteDescription(remoteDesc)\n .then(() => {\n trace.info('Remote description was set', remoteDesc);\n\n return peerConnection.createAnswer()\n .then((sdpAnswer) => {\n trace.info('_sdpOfferHandler answer created', sdpAnswer);\n\n this._socket.emit(SOCKET_EVENTS.OUTGOING.SDP_ANSWER, {\n uid,\n peerId,\n sessionId: this._sessionParams.sessionId,\n sdpAnswer: sdpAnswer.sdp\n });\n\n return peerConnection.setLocalDescription(sdpAnswer)\n .then(() => {\n trace.info('_sdpOfferHandler local desc was set');\n\n this._processQueuedIceCandidates(peerId);\n this._setPeerConnectionMonitor(peerConnection);\n });\n });\n });\n\n })\n .catch((e) => {\n trace.error('Error in _sdpOfferHandler', e);\n throw e;\n });\n }\n\n // Received by Guest after an Initiator reconnects to room\n _initiatorPeerReconnectHandler(): void {\n trace.info('_initiatorPeerReconnectHandler disconnect from session', MediaSessionDisconnectReason.InitiatorPeerReconnected);\n this._disconnectInternal(MediaSessionDisconnectReason.InitiatorPeerReconnected)\n .catch((error: any) => {\n trace.warn('Error while disconnecting during userPeerReconnectHandler.', error);\n });\n }\n\n //#endregion WebRTC Guest - session Guest (Agent on dashboard platform)\n\n //#region Peer Connection\n\n //#region Streams Handling\n\n onMediaStreamDestroyed(clientRole: SessionClientRole): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n trace.info('onMediaStreamDestroyed disconnect all peer connections from session', MediaSessionDisconnectReason.PublishedStreamDestroyed);\n this._peerConnections.forEach((peerConnection: RTCPeerConnection) => {\n this._disconnectInternal(MediaSessionDisconnectReason.PublishedStreamDestroyed).catch(() => undefined);\n });\n\n return Promise.resolve();\n }\n\n onMediaStreamRenewed(clientRole: SessionClientRole, mediaStream: MediaStream): Promise<void> {\n //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation\n return Promise.resolve();\n }\n\n getRemoteTrackStats(mediaTrack: MediaStreamTrack): Promise<RemoteTrackStats> {\n const peerConnectionOfTrack = this.getPeerConnectionByMediaTrack(mediaTrack);\n\n if (peerConnectionOfTrack !== null) {\n return (peerConnectionOfTrack as any).getStats(mediaTrack);\n }\n\n return Promise.reject(new Error('Provided track is not remote track'));\n }\n\n //#endregion\n\n private _disconnectInternal(reason: MediaSessionDisconnectReason): Promise<void> {\n this._peerConnections.forEach((peerConnection: RTCPeerConnection) => {\n this._destroyPeerConnection(peerConnection);\n });\n\n if (this._socket) {\n trace.info('Disconnecting from session', reason);\n this.sessionDisconnect();\n this._socket = null;\n setTimeout(() => this._sessionHandlers.onDisconnectedHandler(reason));\n }\n\n return Promise.resolve();\n }\n\n private _createPeerConnection(peerId: string, peerConnectionType: SessionClientType, peerConnectionRole: SessionClientRole): RTCPeerConnection {\n if (this._peerConnections.get(peerId)) {\n throw new Error(`${this._sessionParams.clientType} peer connection for ${peerId} already exists`);\n }\n\n const peerConnection: any = new RTCPeerConnection(this._configuration);\n\n peerConnection.peerId = peerId;\n peerConnection.peerType = peerConnectionType;\n peerConnection.remoteMediaTracks = [];\n peerConnection.peerRole = peerConnectionRole;\n peerConnection.connectionTimoutPrt = null;\n\n peerConnection.onconnectionstatechange = () => {\n trace.info('onconnectionstatechange', peerConnection);\n };\n\n peerConnection.oniceconnectionstatechange = (state: any) => {\n trace.info(`ICE Connection state for peer ${peerId} was changed to: ${state.currentTarget.iceConnectionState}`, state);\n const cnState = state.currentTarget.iceConnectionState;\n\n clearTimeout(peerConnection.connectionTimoutPrt);\n\n if (['closed', 'disconnected', 'failed'].indexOf(cnState) > -1) {\n this._iceStateDisconnected(peerConnection);\n } else if (cnState === 'connected') {\n this.registerPeersRemoteTracks(peerConnection);\n }\n };\n\n peerConnection.onicecandidate = (event: any) => {\n if (event.candidate) {\n trace.info(`${this._sessionParams.clientType} peerConn.onicecandidate`, event.candidate);\n this._socket.emit(SOCKET_EVENTS.OUTGOING.ICE_CANDIDATE, {\n sessionId: this._sessionParams.sessionId,\n peerId: peerId,\n candidate: event.candidate,\n clientType: this._sessionParams.clientType\n });\n } else {\n trace.info('ICE Candidate is null in peerConnection', event);\n }\n };\n\n peerConnection.ontrack = (trackEvent: any) => {\n const track: MediaStreamTrack = trackEvent.track;\n\n trace.info(`MediaStreamTrack arrived from peerConnection: ${track.kind}`, track);\n this.addRemoteTrackToPeer(peerConnection, track);\n if (peerConnection.connectionState === 'connected') {\n this.registerPeersRemoteTracks(peerConnection);\n }\n };\n\n this._peerConnections.set(peerId, peerConnection);\n\n trace.info(`${peerConnectionType} peerConnection created`);\n\n return peerConnection;\n }\n\n private _setPeerConnectionMonitor(peerConnection: RTCPeerConnection) {\n clearTimeout(peerConnection.connectionTimoutPrt);\n peerConnection.connectionTimoutPrt = setTimeout(() => {\n trace.info('PeerConnection ICE state timeout', peerConnection);\n this._handlePeerConnectionTimeout(peerConnection);\n }, this._sessionParams.peerConnectivityTimeoutSeconds * 1000);\n }\n\n private _handlePeerConnectionTimeout(peerConnection: RTCPeerConnection) {\n trace.info('_handlePeerConnectionTimeout disconnect from session', MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout);\n if (peerConnection.peerRole === SessionClientRole.USER) {\n this._disconnectInternal(MediaSessionDisconnectReason.PeerConnectionStateChangeTimeout).catch(() => undefined);\n }\n }\n\n private _destroyPeerConnection(peerConnection: RTCPeerConnection): void {\n trace.info('Destroying PeerConnection', peerConnection.peerType);\n peerConnection.ontrack = null;\n peerConnection.onicecandidate = null;\n peerConnection.onconnectionstatechange = null;\n peerConnection.oniceconnectionstatechange = null;\n peerConnection.onicegatheringstatechange = null;\n\n clearTimeout(peerConnection.connectionTimoutPrt);\n this.unregisterPeersRemoteMediaTracks(peerConnection).catch(() => undefined);\n\n this._peerConnections.delete(peerConnection.peerId);\n peerConnection.close();\n }\n\n private _withPeerConnection(peerId: any, callback: any): void | undefined {\n if (this._peerConnections.get(peerId)) {\n return callback(this._peerConnections.get(peerId));\n }\n\n return undefined;\n }\n\n //#endregion\n\n //#region ICE Candidates\n\n _iceCandidateReceivedHandler(iceCandidateData: any): void {\n const {candidate, peerId} = iceCandidateData;\n\n trace.info('_iceCandidateReceivedHandler', candidate);\n if (!candidate) {\n trace.info('Unexpected case, iceCandidate message arrived without candidate');\n\n return;\n }\n\n const peerConnection = this._peerConnections.get(peerId);\n\n if (!peerConnection || !peerConnection.remoteDescription) {\n trace.info('Queueing iceCandidate', candidate);\n this._queueIceCandidate(candidate, peerId);\n\n return;\n }\n\n trace.info('Going to add iceCandidate', candidate);\n this._addIceCandidateToPeer(candidate, peerConnection).catch(() => undefined);\n }\n\n _addIceCandidateToPeer(iceCandidate: RTCIceCandidate, peerConnection: RTCPeerConnection): Promise<void> {\n return peerConnection.addIceCandidate(iceCandidate)\n .then(() => {\n trace.info('ICE Candidate add to peer connection');\n })\n .catch((e) => {\n trace.warn('Error adding ICE Candidate to peer connection', e);\n throw e;\n });\n }\n\n _processQueuedIceCandidates(peerId: string): void {\n this._withPeerConnection(peerId, (peerConnection: RTCPeerConnection) => {\n const pendingIces = this._pendingPeersIce[peerId];\n\n if (pendingIces) {\n pendingIces.forEach((pendingIce: RTCIceCandidate) => {\n trace.info('Adding pending ICE to peer connections');\n this._addIceCandidateToPeer(pendingIce, peerConnection).catch(() => undefined);\n });\n } else {\n trace.info('No pending ICE found for peer', peerId);\n }\n });\n }\n\n _queueIceCandidate(iceCandidate: RTCIceCandidate, peerId: string): void {\n if (!this._pendingPeersIce[peerId]) {\n this._pendingPeersIce[peerId] = [];\n }\n\n this._pendingPeersIce[peerId].push(iceCandidate);\n }\n\n _iceStateDisconnected(peerConnection: RTCPeerConnection): void {\n trace.info('_iceStateDisconnected disconnect from session', MediaSessionDisconnectReason.PeerConnectionInterrupted);\n this._disconnectInternal(MediaSessionDisconnectReason.PeerConnectionInterrupted).catch(() => undefined);\n }\n\n //#endregion\n sessionDisconnect(): void {\n if (this._socket) {\n this._socket.off();\n this._socket.disconnect();\n }\n }\n}\n"]}