@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
@@ -1 +1 @@
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
+ {"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,aAAK,WAAW,GAAG,GAAG,CAAC;AAEvB,aAAK,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,33 +1,27 @@
1
1
  "use strict";
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);
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);
13
8
  };
14
9
  return function (d, b) {
15
- _extendStatics(d, b);
16
- function __() {
17
- this.constructor = d;
18
- }
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; }
19
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20
15
  };
21
- }();
16
+ })();
22
17
  Object.defineProperty(exports, "__esModule", { value: true });
23
18
  exports.OpentokSession = void 0;
24
19
  var MediaConstants_1 = require("../MediaConstants");
25
20
  var guards_1 = require("@techsee/techsee-common/lib/core/guards");
26
21
  var MediaSessionBase_1 = require("./MediaSessionBase");
27
22
  var MediaTracer_1 = require("../MediaUtils/MediaTracer");
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) {
23
+ var trace = (0, MediaTracer_1.getMediaTracer)('OpentokSession');
24
+ var OpentokSession = (function (_super) {
31
25
  __extends(OpentokSession, _super);
32
26
  function OpentokSession(sessionParams, streamFactory) {
33
27
  var _this = _super.call(this, sessionParams, streamFactory) || this;
@@ -47,14 +41,14 @@ var OpentokSession = /** @class */function (_super) {
47
41
  return _this;
48
42
  }
49
43
  Object.defineProperty(OpentokSession.prototype, "id", {
50
- get: function get() {
44
+ get: function () {
51
45
  return this._session && this._session.sessionId ? this._session.sessionId : '';
52
46
  },
53
47
  enumerable: false,
54
48
  configurable: true
55
49
  });
56
50
  Object.defineProperty(OpentokSession.prototype, "ownPeerId", {
57
- get: function get() {
51
+ get: function () {
58
52
  return this._session && this._session.connection ? this._session.connection.connectionId : '';
59
53
  },
60
54
  enumerable: false,
@@ -73,16 +67,16 @@ var OpentokSession = /** @class */function (_super) {
73
67
  return Promise.reject('Cannot connect to session while another session is active');
74
68
  }
75
69
  return new Promise(function (resolve, reject) {
76
- var handleError = function handleError(error) {
70
+ var handleError = function (error) {
77
71
  _this._session && _this._session.off();
78
72
  _this._session = null;
79
73
  trace.error('handleConnect error:', error);
80
74
  reject(error);
81
75
  };
82
- var _a = _this._sessionParams.credentials,
83
- apiKey = _a.apiKey,
84
- sessionId = _a.sessionId;
85
- _this._session = window.OTSESSION = window.OT.initSession(apiKey, sessionId);
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
+ });
86
80
  _this._lastStreamEvents = [];
87
81
  _this._session.on('connectionCreated', _this.connectionCreatedHandler);
88
82
  _this._session.on('connectionDestroyed', _this.connectionDestroyedHandler);
@@ -96,7 +90,7 @@ var OpentokSession = /** @class */function (_super) {
96
90
  trace.info('archiveStopped event', event);
97
91
  _this.emitEvent(MediaSessionBase_1.recordingEvents.RECORD_STOPPED, event);
98
92
  });
99
- var connectHandler = function connectHandler(error) {
93
+ var connectHandler = function (error) {
100
94
  if (error) {
101
95
  handleError(error);
102
96
  return;
@@ -135,12 +129,9 @@ var OpentokSession = /** @class */function (_super) {
135
129
  promises.push(_this.destroyPublisherOnPeerConnection(peerConnection));
136
130
  }
137
131
  });
138
- return Promise.all(promises).then(function () {
139
- return undefined;
140
- });
132
+ return Promise.all(promises).then(function () { return undefined; });
141
133
  };
142
134
  OpentokSession.prototype.onMediaStreamRenewed = function (clientRole, mediaStream) {
143
- //TODO - Alex: need to implement adding new tracks to peer connection and forcing negotiation (in OT API)
144
135
  return Promise.resolve();
145
136
  };
146
137
  OpentokSession.prototype.replaceStreamTracks = function (mediaStream) {
@@ -154,7 +145,6 @@ var OpentokSession = /** @class */function (_super) {
154
145
  reject(new Error('Cannot find peer or subscriber for getting stats'));
155
146
  return;
156
147
  }
157
- //https://tokbox.com/developer/sdks/js/reference/Subscriber.html#getStats
158
148
  peerConnectionOfTrack.subscriber.getStats(function (error, stats) {
159
149
  if (error) {
160
150
  trace.warn('Error getting stats', error);
@@ -165,7 +155,6 @@ var OpentokSession = /** @class */function (_super) {
165
155
  });
166
156
  });
167
157
  };
168
- //#region OpenTok Events Handlers
169
158
  OpentokSession.prototype.connectionCreatedHandler = function (event) {
170
159
  var _this = this;
171
160
  trace.info('connectionCreatedHandler', event);
@@ -174,11 +163,14 @@ var OpentokSession = /** @class */function (_super) {
174
163
  return;
175
164
  }
176
165
  var destinationRole = JSON.parse(connection.data).clientRole;
177
- this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId).then(function (streams) {
166
+ this.createStreamForPublishing(destinationRole, connection.connectionId === this.ownPeerId)
167
+ .then(function (streams) {
178
168
  var peerConnection = {
179
169
  peerId: connection.connectionId,
180
170
  peerRole: destinationRole,
181
- peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR ? MediaConstants_1.SessionClientType.GUEST : MediaConstants_1.SessionClientType.INITIATOR,
171
+ peerType: _this._sessionParams.clientType === MediaConstants_1.SessionClientType.INITIATOR
172
+ ? MediaConstants_1.SessionClientType.GUEST
173
+ : MediaConstants_1.SessionClientType.INITIATOR,
182
174
  connection: connection,
183
175
  publisher: null,
184
176
  subscriber: null,
@@ -186,7 +178,7 @@ var OpentokSession = /** @class */function (_super) {
186
178
  localStream: streams,
187
179
  connectionTimoutPrt: null
188
180
  };
189
- if (connection.connectionId !== _this.ownPeerId || !streams.videoSource && !streams.audioSource) {
181
+ if (connection.connectionId !== _this.ownPeerId || (!streams.videoSource && !streams.audioSource)) {
190
182
  trace.info('Peer connection without publisher was created', peerConnection);
191
183
  return peerConnection;
192
184
  }
@@ -195,25 +187,22 @@ var OpentokSession = /** @class */function (_super) {
195
187
  trace.info('Peer connection with publisher was created', peerConnection);
196
188
  return peerConnection;
197
189
  });
198
- }).then(function (peerConnection) {
190
+ })
191
+ .then(function (peerConnection) {
199
192
  _this._peerConnections.set(peerConnection.peerId, peerConnection);
200
193
  if (connection.connectionId === _this.ownPeerId) {
201
194
  trace.info('Before subscribe the event streams');
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 () {
195
+ return _this._lastStreamEvents
196
+ .reduce(function (promiseChain, streamEvent) {
197
+ return promiseChain.then(function () { return _this.streamCreatedHandler(streamEvent); });
198
+ }, Promise.resolve())
199
+ .then(function () {
211
200
  if (peerConnection.publisher) {
212
201
  return new Promise(function (resolve, reject) {
213
202
  trace.info('Starting publish to peerConnection.publisher');
214
203
  _this._session.publish(peerConnection.publisher, function (error) {
215
204
  if (error) {
216
- trace.error("Publish to peerConnection error " + error);
205
+ trace.error("Publish to peerConnection error ".concat(error));
217
206
  return reject(error);
218
207
  }
219
208
  trace.info('Publish to peerConnection success');
@@ -224,9 +213,9 @@ var OpentokSession = /** @class */function (_super) {
224
213
  return Promise.resolve();
225
214
  });
226
215
  }
227
- }).catch(function (error) {
228
- //Need to handle fail cases during reliability
229
- trace.error("Error handling new peer connection: " + error);
216
+ })
217
+ .catch(function (error) {
218
+ trace.error("Error handling new peer connection: ".concat(error));
230
219
  });
231
220
  };
232
221
  OpentokSession.prototype.connectionDestroyedHandler = function (event) {
@@ -272,8 +261,6 @@ var OpentokSession = /** @class */function (_super) {
272
261
  return trace.warn('Error destroying subscriber on stream destroy');
273
262
  });
274
263
  };
275
- //#endregion
276
- //#region PeerConnection
277
264
  OpentokSession.prototype.destroyPeerConnection = function (peerConnection) {
278
265
  this._peerConnections.delete(peerConnection.peerId);
279
266
  this.destroyPublisherOnPeerConnection(peerConnection).catch(function () {
@@ -283,27 +270,29 @@ var OpentokSession = /** @class */function (_super) {
283
270
  return trace.warn('Error destroying subscriber on peer destroy');
284
271
  });
285
272
  };
286
- //#endregion
287
- //#region Publisher
288
273
  OpentokSession.prototype.createStreamForPublishing = function (destinationRole, shouldCreateStream) {
289
274
  var _this = this;
290
275
  trace.info('createStreamForPublishing');
291
276
  var stream = { videoSource: null, audioSource: null };
292
277
  if (!shouldCreateStream) {
293
- trace.info("createStreamForPublishing - destinationRole: " + destinationRole + " not supposed to create a stream");
278
+ trace.info("createStreamForPublishing - destinationRole: ".concat(destinationRole, " not supposed to create a stream"));
294
279
  return Promise.resolve(stream);
295
280
  }
296
- return this._sessionStreamsManager.getMediaStreamForRole(destinationRole).then(function (mediaStream) {
281
+ return this._sessionStreamsManager
282
+ .getMediaStreamForRole(destinationRole)
283
+ .then(function (mediaStream) {
297
284
  if (mediaStream) {
298
285
  trace.info('Media stream found for publishing', mediaStream);
299
286
  mediaStream.getTracks().forEach(function (track) {
300
287
  if (track.kind === 'video') {
301
288
  stream.videoSource = track;
302
- } else if (track.kind === 'audio') {
289
+ }
290
+ else if (track.kind === 'audio') {
303
291
  stream.audioSource = track;
304
292
  }
305
293
  });
306
- } else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {
294
+ }
295
+ else if (_this._sessionParams.clientRole === MediaConstants_1.SessionClientRole.USER) {
307
296
  trace.warn('No local media was found for publishing to destinationRole:', destinationRole);
308
297
  }
309
298
  return stream;
@@ -326,8 +315,6 @@ var OpentokSession = /** @class */function (_super) {
326
315
  }
327
316
  otPublisher.on('streamDestroyed', function (event) {
328
317
  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.
331
318
  event.preventDefault();
332
319
  });
333
320
  otPublisher.on('videoElementCreated', function (event) {
@@ -348,8 +335,6 @@ var OpentokSession = /** @class */function (_super) {
348
335
  peerConnection.localStream = null;
349
336
  return Promise.resolve();
350
337
  };
351
- //#endregion
352
- //#region Subscriber
353
338
  OpentokSession.prototype.createMediaSubscriber = function (remoteStream) {
354
339
  var _this = this;
355
340
  return new Promise(function (resolve, reject) {
@@ -388,27 +373,13 @@ var OpentokSession = /** @class */function (_super) {
388
373
  }
389
374
  peerConnection.subscriber = null;
390
375
  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
- // });
400
376
  };
401
- //#endregion
402
377
  OpentokSession.prototype.sessionExistsGuard = function (shouldThrow) {
403
- if (shouldThrow === void 0) {
404
- shouldThrow = true;
405
- }
378
+ if (shouldThrow === void 0) { shouldThrow = true; }
406
379
  var connected = !!(this._session && this._session.connection && this._session.connection.connectionId);
407
- return guards_1.throwableGuard(connected, 'There no OpenTok session exists', shouldThrow);
380
+ return (0, guards_1.throwableGuard)(connected, 'There no OpenTok session exists', shouldThrow);
408
381
  };
409
382
  return OpentokSession;
410
- }(MediaSessionBase_1.MediaSessionBase);
383
+ }(MediaSessionBase_1.MediaSessionBase));
411
384
  exports.OpentokSession = OpentokSession;
412
-
413
- //# sourceMappingURL=SessionOpentok.js.map
414
- //# sourceMappingURL=SessionOpentok.js.map
385
+ //# sourceMappingURL=SessionOpentok.js.map
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"SessionOpentok.js","sourceRoot":"","sources":["../../src/MediaSession/SessionOpentok.ts"],"names":[],"mappings":"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"}
@@ -35,3 +35,4 @@ 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,"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"]}
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"}