@webex/internal-media-core 0.0.1-beta

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 (215) hide show
  1. package/README.md +80 -0
  2. package/dist/esm/index.js +12660 -0
  3. package/dist/transpiled/Logger/index.js +41 -0
  4. package/dist/transpiled/Logger/index.js.map +1 -0
  5. package/dist/transpiled/Media/Device/Device.js +21 -0
  6. package/dist/transpiled/Media/Device/Device.js.map +1 -0
  7. package/dist/transpiled/Media/Device/DeviceMocks.js +65 -0
  8. package/dist/transpiled/Media/Device/DeviceMocks.js.map +1 -0
  9. package/dist/transpiled/Media/Device/index.js +2 -0
  10. package/dist/transpiled/Media/Device/index.js.map +1 -0
  11. package/dist/transpiled/Media/Effects/BNR/Bnr.integration-test.js +47 -0
  12. package/dist/transpiled/Media/Effects/BNR/Bnr.integration-test.js.map +1 -0
  13. package/dist/transpiled/Media/Effects/BNR/Bnr.js +187 -0
  14. package/dist/transpiled/Media/Effects/BNR/Bnr.js.map +1 -0
  15. package/dist/transpiled/Media/Effects/BNR/Bnr.test.js +37 -0
  16. package/dist/transpiled/Media/Effects/BNR/Bnr.test.js.map +1 -0
  17. package/dist/transpiled/Media/Effects/BNR/BnrMock.js +92 -0
  18. package/dist/transpiled/Media/Effects/BNR/BnrMock.js.map +1 -0
  19. package/dist/transpiled/Media/Effects/BNR/index.js +2 -0
  20. package/dist/transpiled/Media/Effects/BNR/index.js.map +1 -0
  21. package/dist/transpiled/Media/Media.integration-test.js +40 -0
  22. package/dist/transpiled/Media/Media.integration-test.js.map +1 -0
  23. package/dist/transpiled/Media/Media.test.js +291 -0
  24. package/dist/transpiled/Media/Media.test.js.map +1 -0
  25. package/dist/transpiled/Media/Track/BufferSourceAudioTrack.js +4 -0
  26. package/dist/transpiled/Media/Track/BufferSourceAudioTrack.js.map +1 -0
  27. package/dist/transpiled/Media/Track/CameraVideoTrack.js +4 -0
  28. package/dist/transpiled/Media/Track/CameraVideoTrack.js.map +1 -0
  29. package/dist/transpiled/Media/Track/LocalAudioTrack.js +4 -0
  30. package/dist/transpiled/Media/Track/LocalAudioTrack.js.map +1 -0
  31. package/dist/transpiled/Media/Track/LocalTrack.js +4 -0
  32. package/dist/transpiled/Media/Track/LocalTrack.js.map +1 -0
  33. package/dist/transpiled/Media/Track/LocalVideoTrack.js +4 -0
  34. package/dist/transpiled/Media/Track/LocalVideoTrack.js.map +1 -0
  35. package/dist/transpiled/Media/Track/MicrophoneAudioTrack.js +4 -0
  36. package/dist/transpiled/Media/Track/MicrophoneAudioTrack.js.map +1 -0
  37. package/dist/transpiled/Media/Track/RemoteAudioTrack.js +4 -0
  38. package/dist/transpiled/Media/Track/RemoteAudioTrack.js.map +1 -0
  39. package/dist/transpiled/Media/Track/RemoteTrack.js +4 -0
  40. package/dist/transpiled/Media/Track/RemoteTrack.js.map +1 -0
  41. package/dist/transpiled/Media/Track/RemoteVideoTrack.js +4 -0
  42. package/dist/transpiled/Media/Track/RemoteVideoTrack.js.map +1 -0
  43. package/dist/transpiled/Media/Track/Track.integration-test.js +118 -0
  44. package/dist/transpiled/Media/Track/Track.integration-test.js.map +1 -0
  45. package/dist/transpiled/Media/Track/Track.js +120 -0
  46. package/dist/transpiled/Media/Track/Track.js.map +1 -0
  47. package/dist/transpiled/Media/Track/Track.test.js +26 -0
  48. package/dist/transpiled/Media/Track/Track.test.js.map +1 -0
  49. package/dist/transpiled/Media/Track/TrackMock.js +109 -0
  50. package/dist/transpiled/Media/Track/TrackMock.js.map +1 -0
  51. package/dist/transpiled/Media/Track/Utils.js +31 -0
  52. package/dist/transpiled/Media/Track/Utils.js.map +1 -0
  53. package/dist/transpiled/Media/Track/index.js +2 -0
  54. package/dist/transpiled/Media/Track/index.js.map +1 -0
  55. package/dist/transpiled/Media/index.js +401 -0
  56. package/dist/transpiled/Media/index.js.map +1 -0
  57. package/dist/transpiled/MediaConnection/EventEmitter.js +4 -0
  58. package/dist/transpiled/MediaConnection/EventEmitter.js.map +1 -0
  59. package/dist/transpiled/MediaConnection/MediaConnection.integration-test.js +218 -0
  60. package/dist/transpiled/MediaConnection/MediaConnection.integration-test.js.map +1 -0
  61. package/dist/transpiled/MediaConnection/MediaConnection.js +357 -0
  62. package/dist/transpiled/MediaConnection/MediaConnection.js.map +1 -0
  63. package/dist/transpiled/MediaConnection/MediaConnection.test.js +427 -0
  64. package/dist/transpiled/MediaConnection/MediaConnection.test.js.map +1 -0
  65. package/dist/transpiled/MediaConnection/RoapMediaConnection.integration-test.js +368 -0
  66. package/dist/transpiled/MediaConnection/RoapMediaConnection.integration-test.js.map +1 -0
  67. package/dist/transpiled/MediaConnection/RoapMediaConnection.js +148 -0
  68. package/dist/transpiled/MediaConnection/RoapMediaConnection.js.map +1 -0
  69. package/dist/transpiled/MediaConnection/RoapMediaConnection.test.js +320 -0
  70. package/dist/transpiled/MediaConnection/RoapMediaConnection.test.js.map +1 -0
  71. package/dist/transpiled/MediaConnection/config.js +2 -0
  72. package/dist/transpiled/MediaConnection/config.js.map +1 -0
  73. package/dist/transpiled/MediaConnection/eventTypes.js +36 -0
  74. package/dist/transpiled/MediaConnection/eventTypes.js.map +1 -0
  75. package/dist/transpiled/MediaConnection/index.js +4 -0
  76. package/dist/transpiled/MediaConnection/index.js.map +1 -0
  77. package/dist/transpiled/MediaConnection/logger.js +22 -0
  78. package/dist/transpiled/MediaConnection/logger.js.map +1 -0
  79. package/dist/transpiled/MediaConnection/roap.js +399 -0
  80. package/dist/transpiled/MediaConnection/roap.js.map +1 -0
  81. package/dist/transpiled/MediaConnection/roap.test.js +873 -0
  82. package/dist/transpiled/MediaConnection/roap.test.js.map +1 -0
  83. package/dist/transpiled/MediaConnection/roap.typegen.js +2 -0
  84. package/dist/transpiled/MediaConnection/roap.typegen.js.map +1 -0
  85. package/dist/transpiled/MediaConnection/testUtils/EventListener.js +102 -0
  86. package/dist/transpiled/MediaConnection/testUtils/EventListener.js.map +1 -0
  87. package/dist/transpiled/MediaConnection/testUtils/RoapListener.js +15 -0
  88. package/dist/transpiled/MediaConnection/testUtils/RoapListener.js.map +1 -0
  89. package/dist/transpiled/MediaConnection/testUtils/index.js +17 -0
  90. package/dist/transpiled/MediaConnection/testUtils/index.js.map +1 -0
  91. package/dist/transpiled/MediaConnection/testUtils/logger.js +31 -0
  92. package/dist/transpiled/MediaConnection/testUtils/logger.js.map +1 -0
  93. package/dist/transpiled/MediaConnection/testUtils.js +14 -0
  94. package/dist/transpiled/MediaConnection/testUtils.js.map +1 -0
  95. package/dist/transpiled/MediaConnection/utils.js +71 -0
  96. package/dist/transpiled/MediaConnection/utils.js.map +1 -0
  97. package/dist/transpiled/MediaConnection/utils.test-fixtures.js +287 -0
  98. package/dist/transpiled/MediaConnection/utils.test-fixtures.js.map +1 -0
  99. package/dist/transpiled/MediaConnection/utils.test.js +20 -0
  100. package/dist/transpiled/MediaConnection/utils.test.js.map +1 -0
  101. package/dist/transpiled/common/peerConnectionMock.js +52 -0
  102. package/dist/transpiled/common/peerConnectionMock.js.map +1 -0
  103. package/dist/transpiled/constants.js +9 -0
  104. package/dist/transpiled/constants.js.map +1 -0
  105. package/dist/transpiled/index.intergation-test.js +14 -0
  106. package/dist/transpiled/index.intergation-test.js.map +1 -0
  107. package/dist/transpiled/index.js +41 -0
  108. package/dist/transpiled/index.js.map +1 -0
  109. package/dist/types/Logger/index.d.ts +16 -0
  110. package/dist/types/Logger/index.d.ts.map +1 -0
  111. package/dist/types/Media/Device/Device.d.ts +20 -0
  112. package/dist/types/Media/Device/Device.d.ts.map +1 -0
  113. package/dist/types/Media/Device/DeviceMocks.d.ts +18 -0
  114. package/dist/types/Media/Device/DeviceMocks.d.ts.map +1 -0
  115. package/dist/types/Media/Device/index.d.ts +2 -0
  116. package/dist/types/Media/Device/index.d.ts.map +1 -0
  117. package/dist/types/Media/Effects/BNR/Bnr.d.ts +5 -0
  118. package/dist/types/Media/Effects/BNR/Bnr.d.ts.map +1 -0
  119. package/dist/types/Media/Effects/BNR/Bnr.integration-test.d.ts +2 -0
  120. package/dist/types/Media/Effects/BNR/Bnr.integration-test.d.ts.map +1 -0
  121. package/dist/types/Media/Effects/BNR/Bnr.test.d.ts +2 -0
  122. package/dist/types/Media/Effects/BNR/Bnr.test.d.ts.map +1 -0
  123. package/dist/types/Media/Effects/BNR/BnrMock.d.ts +3 -0
  124. package/dist/types/Media/Effects/BNR/BnrMock.d.ts.map +1 -0
  125. package/dist/types/Media/Effects/BNR/index.d.ts +2 -0
  126. package/dist/types/Media/Effects/BNR/index.d.ts.map +1 -0
  127. package/dist/types/Media/Media.integration-test.d.ts +2 -0
  128. package/dist/types/Media/Media.integration-test.d.ts.map +1 -0
  129. package/dist/types/Media/Media.test.d.ts +2 -0
  130. package/dist/types/Media/Media.test.d.ts.map +1 -0
  131. package/dist/types/Media/Track/BufferSourceAudioTrack.d.ts +4 -0
  132. package/dist/types/Media/Track/BufferSourceAudioTrack.d.ts.map +1 -0
  133. package/dist/types/Media/Track/CameraVideoTrack.d.ts +4 -0
  134. package/dist/types/Media/Track/CameraVideoTrack.d.ts.map +1 -0
  135. package/dist/types/Media/Track/LocalAudioTrack.d.ts +4 -0
  136. package/dist/types/Media/Track/LocalAudioTrack.d.ts.map +1 -0
  137. package/dist/types/Media/Track/LocalTrack.d.ts +4 -0
  138. package/dist/types/Media/Track/LocalTrack.d.ts.map +1 -0
  139. package/dist/types/Media/Track/LocalVideoTrack.d.ts +4 -0
  140. package/dist/types/Media/Track/LocalVideoTrack.d.ts.map +1 -0
  141. package/dist/types/Media/Track/MicrophoneAudioTrack.d.ts +4 -0
  142. package/dist/types/Media/Track/MicrophoneAudioTrack.d.ts.map +1 -0
  143. package/dist/types/Media/Track/RemoteAudioTrack.d.ts +4 -0
  144. package/dist/types/Media/Track/RemoteAudioTrack.d.ts.map +1 -0
  145. package/dist/types/Media/Track/RemoteTrack.d.ts +4 -0
  146. package/dist/types/Media/Track/RemoteTrack.d.ts.map +1 -0
  147. package/dist/types/Media/Track/RemoteVideoTrack.d.ts +4 -0
  148. package/dist/types/Media/Track/RemoteVideoTrack.d.ts.map +1 -0
  149. package/dist/types/Media/Track/Track.d.ts +34 -0
  150. package/dist/types/Media/Track/Track.d.ts.map +1 -0
  151. package/dist/types/Media/Track/Track.integration-test.d.ts +2 -0
  152. package/dist/types/Media/Track/Track.integration-test.d.ts.map +1 -0
  153. package/dist/types/Media/Track/Track.test.d.ts +2 -0
  154. package/dist/types/Media/Track/Track.test.d.ts.map +1 -0
  155. package/dist/types/Media/Track/TrackMock.d.ts +64 -0
  156. package/dist/types/Media/Track/TrackMock.d.ts.map +1 -0
  157. package/dist/types/Media/Track/Utils.d.ts +3 -0
  158. package/dist/types/Media/Track/Utils.d.ts.map +1 -0
  159. package/dist/types/Media/Track/index.d.ts +2 -0
  160. package/dist/types/Media/Track/index.d.ts.map +1 -0
  161. package/dist/types/Media/index.d.ts +16 -0
  162. package/dist/types/Media/index.d.ts.map +1 -0
  163. package/dist/types/MediaConnection/EventEmitter.d.ts +6 -0
  164. package/dist/types/MediaConnection/EventEmitter.d.ts.map +1 -0
  165. package/dist/types/MediaConnection/MediaConnection.d.ts +64 -0
  166. package/dist/types/MediaConnection/MediaConnection.d.ts.map +1 -0
  167. package/dist/types/MediaConnection/MediaConnection.integration-test.d.ts +2 -0
  168. package/dist/types/MediaConnection/MediaConnection.integration-test.d.ts.map +1 -0
  169. package/dist/types/MediaConnection/MediaConnection.test.d.ts +2 -0
  170. package/dist/types/MediaConnection/MediaConnection.test.d.ts.map +1 -0
  171. package/dist/types/MediaConnection/RoapMediaConnection.d.ts +43 -0
  172. package/dist/types/MediaConnection/RoapMediaConnection.d.ts.map +1 -0
  173. package/dist/types/MediaConnection/RoapMediaConnection.integration-test.d.ts +2 -0
  174. package/dist/types/MediaConnection/RoapMediaConnection.integration-test.d.ts.map +1 -0
  175. package/dist/types/MediaConnection/RoapMediaConnection.test.d.ts +2 -0
  176. package/dist/types/MediaConnection/RoapMediaConnection.test.d.ts.map +1 -0
  177. package/dist/types/MediaConnection/config.d.ts +10 -0
  178. package/dist/types/MediaConnection/config.d.ts.map +1 -0
  179. package/dist/types/MediaConnection/eventTypes.d.ts +65 -0
  180. package/dist/types/MediaConnection/eventTypes.d.ts.map +1 -0
  181. package/dist/types/MediaConnection/index.d.ts +5 -0
  182. package/dist/types/MediaConnection/index.d.ts.map +1 -0
  183. package/dist/types/MediaConnection/logger.d.ts +12 -0
  184. package/dist/types/MediaConnection/logger.d.ts.map +1 -0
  185. package/dist/types/MediaConnection/roap.d.ts +37 -0
  186. package/dist/types/MediaConnection/roap.d.ts.map +1 -0
  187. package/dist/types/MediaConnection/roap.test.d.ts +2 -0
  188. package/dist/types/MediaConnection/roap.test.d.ts.map +1 -0
  189. package/dist/types/MediaConnection/roap.typegen.d.ts +86 -0
  190. package/dist/types/MediaConnection/roap.typegen.d.ts.map +1 -0
  191. package/dist/types/MediaConnection/testUtils/EventListener.d.ts +22 -0
  192. package/dist/types/MediaConnection/testUtils/EventListener.d.ts.map +1 -0
  193. package/dist/types/MediaConnection/testUtils/RoapListener.d.ts +9 -0
  194. package/dist/types/MediaConnection/testUtils/RoapListener.d.ts.map +1 -0
  195. package/dist/types/MediaConnection/testUtils/index.d.ts +10 -0
  196. package/dist/types/MediaConnection/testUtils/index.d.ts.map +1 -0
  197. package/dist/types/MediaConnection/testUtils/logger.d.ts +3 -0
  198. package/dist/types/MediaConnection/testUtils/logger.d.ts.map +1 -0
  199. package/dist/types/MediaConnection/testUtils.d.ts +7 -0
  200. package/dist/types/MediaConnection/testUtils.d.ts.map +1 -0
  201. package/dist/types/MediaConnection/utils.d.ts +11 -0
  202. package/dist/types/MediaConnection/utils.d.ts.map +1 -0
  203. package/dist/types/MediaConnection/utils.test-fixtures.d.ts +6 -0
  204. package/dist/types/MediaConnection/utils.test-fixtures.d.ts.map +1 -0
  205. package/dist/types/MediaConnection/utils.test.d.ts +2 -0
  206. package/dist/types/MediaConnection/utils.test.d.ts.map +1 -0
  207. package/dist/types/common/peerConnectionMock.d.ts +5 -0
  208. package/dist/types/common/peerConnectionMock.d.ts.map +1 -0
  209. package/dist/types/constants.d.ts +9 -0
  210. package/dist/types/constants.d.ts.map +1 -0
  211. package/dist/types/index.d.ts +23 -0
  212. package/dist/types/index.d.ts.map +1 -0
  213. package/dist/types/index.intergation-test.d.ts +2 -0
  214. package/dist/types/index.intergation-test.d.ts.map +1 -0
  215. package/package.json +153 -0
@@ -0,0 +1,368 @@
1
+ import { expect } from 'chai';
2
+ import * as DetectRTC from 'detectrtc';
3
+ import { RemoteTrackType } from './eventTypes';
4
+ import { ConnectionState, Event, RoapMediaConnection } from './index';
5
+ import { createControlledPromise, AnyValue, EventListener } from './testUtils';
6
+ const logFn = (action, message) => console.log(`TEST: ${action}: ${message}`);
7
+ describe('2 RoapMediaConnections connected to each other', () => {
8
+ let localStream;
9
+ let lastRoapOfferMessage;
10
+ let testConnections;
11
+ const setupConnectionEventHandlers = () => {
12
+ const getOtherConnection = (connection) => {
13
+ return connection === testConnections[0].mc ? testConnections[1].mc : testConnections[0].mc;
14
+ };
15
+ testConnections.forEach(({ mc, debug }) => {
16
+ if (mc) {
17
+ mc.on(Event.ROAP_MESSAGE_TO_SEND, (e) => {
18
+ console.log(`TEST: got ROAP_MESSAGE_TO_SEND from ${debug}: ${e.roapMessage.sdp}`);
19
+ if (e.roapMessage.messageType === 'OFFER') {
20
+ const message = e.roapMessage;
21
+ lastRoapOfferMessage = message;
22
+ message.sdp = message.sdp?.replace(/\r\na=group:BUNDLE 0 1 2/gi, '');
23
+ getOtherConnection(mc).roapMessageReceived(message);
24
+ }
25
+ else {
26
+ getOtherConnection(mc).roapMessageReceived(e.roapMessage);
27
+ }
28
+ });
29
+ }
30
+ });
31
+ };
32
+ const createTestConnections = (options, configOverrides) => {
33
+ const { send, receive } = options;
34
+ const createTestConnection = (debug) => {
35
+ const mc = new RoapMediaConnection({
36
+ iceServers: [],
37
+ skipInactiveTransceivers: false,
38
+ sdpMunging: { convertPort9to0: false },
39
+ ...configOverrides,
40
+ }, { send, receive }, debug);
41
+ return {
42
+ mc,
43
+ debug,
44
+ connectionListener: new EventListener(mc, Event.CONNECTION_STATE_CHANGED, logFn, {
45
+ useChaiExpect: true,
46
+ strict: true,
47
+ debug,
48
+ }),
49
+ remoteTrackAddedListener: new EventListener(mc, Event.REMOTE_TRACK_ADDED, logFn, {
50
+ useChaiExpect: true,
51
+ strict: false,
52
+ debug,
53
+ }),
54
+ };
55
+ };
56
+ testConnections = [createTestConnection('mc1'), createTestConnection('mc2')];
57
+ setupConnectionEventHandlers();
58
+ };
59
+ const waitForConnectionsEstablished = async () => {
60
+ await testConnections[0].connectionListener.waitForEvent({ state: ConnectionState.CONNECTING });
61
+ await testConnections[1].connectionListener.waitForEvent({ state: ConnectionState.CONNECTING });
62
+ await testConnections[0].connectionListener.waitForEvent({ state: ConnectionState.CONNECTED });
63
+ await testConnections[1].connectionListener.waitForEvent({ state: ConnectionState.CONNECTED });
64
+ };
65
+ const waitForRemoteTracksAdded = async (type) => {
66
+ await testConnections[0].remoteTrackAddedListener.waitForEvent({ type, track: AnyValue });
67
+ await testConnections[1].remoteTrackAddedListener.waitForEvent({ type, track: AnyValue });
68
+ };
69
+ beforeEach(async () => {
70
+ localStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
71
+ expect(localStream.getAudioTracks().length).to.equal(1);
72
+ expect(localStream.getVideoTracks().length).to.equal(1);
73
+ });
74
+ afterEach(() => {
75
+ testConnections?.forEach((testConnection) => {
76
+ testConnection.mc.close();
77
+ });
78
+ localStream?.getTracks().forEach((track) => track.stop());
79
+ });
80
+ it('audio only (both ways)', async () => {
81
+ const audioTrack = localStream.getAudioTracks()[0];
82
+ createTestConnections({
83
+ send: {
84
+ audio: audioTrack,
85
+ },
86
+ receive: { audio: true, video: false, screenShareVideo: false },
87
+ });
88
+ await testConnections[0].mc.initiateOffer();
89
+ await waitForConnectionsEstablished();
90
+ await waitForRemoteTracksAdded(RemoteTrackType.AUDIO);
91
+ expect(lastRoapOfferMessage?.sdp?.match(/^m=audio/gm)?.length).to.equal(1);
92
+ expect(lastRoapOfferMessage?.sdp?.match(/^m=video/gm)?.length).to.equal(2);
93
+ });
94
+ it('audio only (both ways) with skipInactiveTransceivers=true', async () => {
95
+ const audioTrack = localStream.getAudioTracks()[0];
96
+ createTestConnections({
97
+ send: {
98
+ audio: audioTrack,
99
+ },
100
+ receive: { audio: true, video: false, screenShareVideo: false },
101
+ }, { skipInactiveTransceivers: true });
102
+ await testConnections[0].mc.initiateOffer();
103
+ await waitForConnectionsEstablished();
104
+ await waitForRemoteTracksAdded(RemoteTrackType.AUDIO);
105
+ expect(lastRoapOfferMessage?.sdp?.match(/^m=audio/gm)?.length).to.equal(1);
106
+ expect(lastRoapOfferMessage?.sdp?.match(/^m=video/gm)).to.equal(null);
107
+ });
108
+ it('audio and video both ways', async () => {
109
+ const audioTrack = localStream.getAudioTracks()[0];
110
+ const videoTrack = localStream.getVideoTracks()[0];
111
+ createTestConnections({
112
+ send: {
113
+ audio: audioTrack,
114
+ video: videoTrack,
115
+ },
116
+ receive: { audio: true, video: true, screenShareVideo: false },
117
+ });
118
+ await testConnections[0].mc.initiateOffer();
119
+ await waitForConnectionsEstablished();
120
+ await waitForRemoteTracksAdded(RemoteTrackType.VIDEO);
121
+ await waitForRemoteTracksAdded(RemoteTrackType.AUDIO);
122
+ });
123
+ it('updateLocalTracks() should add an audio track (outgoing call)', async () => {
124
+ createTestConnections({
125
+ send: {},
126
+ receive: { audio: true, video: true, screenShareVideo: true },
127
+ });
128
+ await testConnections[0].mc.initiateOffer();
129
+ await waitForConnectionsEstablished();
130
+ testConnections[0].mc.updateSendOptions({ audio: localStream.getAudioTracks()[0] });
131
+ await testConnections[1].remoteTrackAddedListener.waitForEvent({
132
+ type: RemoteTrackType.AUDIO,
133
+ track: AnyValue,
134
+ });
135
+ });
136
+ it('updateLocalTracks() should add an audio track (incoming call)', async () => {
137
+ createTestConnections({
138
+ send: {},
139
+ receive: { audio: true, video: true, screenShareVideo: true },
140
+ });
141
+ await testConnections[0].mc.initiateOffer();
142
+ await waitForConnectionsEstablished();
143
+ testConnections[1].mc.updateSendOptions({ audio: localStream.getAudioTracks()[0] });
144
+ await testConnections[0].remoteTrackAddedListener.waitForEvent({
145
+ type: RemoteTrackType.AUDIO,
146
+ track: AnyValue,
147
+ });
148
+ });
149
+ describe('reconnect() method', () => {
150
+ let connectionStateListener;
151
+ const getIceDetails = (sdp) => {
152
+ return {
153
+ ufrag: sdp?.match(/^a=ice-ufrag:.*$/gm),
154
+ pwd: sdp?.match(/^a=ice-pwd:.*$/gm),
155
+ };
156
+ };
157
+ const checkIceDetailsChanged = (before, after) => {
158
+ expect(before.ufrag?.length).to.equal(after.ufrag?.length);
159
+ expect(before.pwd?.length).to.equal(after.pwd?.length);
160
+ expect(before.ufrag?.length).to.equal(before.pwd?.length);
161
+ if (before.ufrag && after.ufrag && before.pwd && after.pwd) {
162
+ for (let i = 0; i < before.ufrag?.length; i += 1) {
163
+ expect(before.ufrag[i]).not.to.equal(after.ufrag[i]);
164
+ expect(before.pwd[i]).not.to.equal(after.pwd[i]);
165
+ }
166
+ }
167
+ };
168
+ beforeEach(async () => {
169
+ const audioTrack = localStream.getAudioTracks()[0];
170
+ const videoTrack = localStream.getVideoTracks()[0];
171
+ createTestConnections({
172
+ send: {
173
+ audio: audioTrack,
174
+ video: videoTrack,
175
+ },
176
+ receive: { audio: true, video: true, screenShareVideo: true },
177
+ });
178
+ await testConnections[0].mc.initiateOffer();
179
+ await waitForConnectionsEstablished();
180
+ await waitForRemoteTracksAdded(RemoteTrackType.AUDIO);
181
+ await waitForRemoteTracksAdded(RemoteTrackType.VIDEO);
182
+ connectionStateListener = new EventListener(testConnections[0].mc, Event.CONNECTION_STATE_CHANGED, logFn, { useChaiExpect: true, debug: testConnections[0].debug });
183
+ });
184
+ it('starts a new ICE connection with increased Roap seq', async () => {
185
+ const before = {
186
+ ice: getIceDetails(lastRoapOfferMessage?.sdp),
187
+ seq: lastRoapOfferMessage?.seq || 0,
188
+ };
189
+ console.log('TEST: triggering reconnection...');
190
+ await testConnections[0].mc.reconnect();
191
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTING });
192
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTED });
193
+ const after = {
194
+ ice: getIceDetails(lastRoapOfferMessage?.sdp),
195
+ seq: lastRoapOfferMessage?.seq || 0,
196
+ };
197
+ expect(before.seq).lessThan(after.seq);
198
+ checkIceDetailsChanged(before.ice, after.ice);
199
+ });
200
+ it('starts a new ICE connection with increased Roap seq (incoming call)', async () => {
201
+ console.log('TEST: triggering reconnection...');
202
+ await testConnections[0].mc.reconnect(false);
203
+ testConnections[1].mc.reconnect(true);
204
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTING });
205
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTED });
206
+ });
207
+ });
208
+ if (!DetectRTC.browser.isSafari) {
209
+ describe('DTMF', () => {
210
+ let dtmfToneChangeListeners;
211
+ let newAudioTrack;
212
+ beforeEach(async () => {
213
+ const audioTrack = localStream.getAudioTracks()[0];
214
+ newAudioTrack = audioTrack.clone();
215
+ createTestConnections({
216
+ send: {
217
+ audio: audioTrack,
218
+ },
219
+ receive: { audio: true, video: false, screenShareVideo: false },
220
+ });
221
+ dtmfToneChangeListeners = [];
222
+ testConnections.forEach((testConn) => {
223
+ dtmfToneChangeListeners.push(new EventListener(testConn.mc, Event.DTMF_TONE_CHANGED, logFn, {
224
+ debug: testConn.debug,
225
+ strict: true,
226
+ useChaiExpect: true,
227
+ }));
228
+ });
229
+ await testConnections[0].mc.initiateOffer();
230
+ await waitForConnectionsEstablished();
231
+ await waitForRemoteTracksAdded(RemoteTrackType.AUDIO);
232
+ });
233
+ const checkDtmf = async (testConnectionIndex, dtmfSequence) => {
234
+ const idx = testConnectionIndex;
235
+ testConnections[idx].mc.insertDTMF(dtmfSequence);
236
+ for (const expectedTone of dtmfSequence) {
237
+ await dtmfToneChangeListeners[idx].waitForEvent({
238
+ tone: expectedTone.toUpperCase(),
239
+ });
240
+ }
241
+ await dtmfToneChangeListeners[idx].waitForEvent({ tone: '' });
242
+ };
243
+ it('sends DTMF signals when insertDTMF() is called', async () => {
244
+ const TEST_DTMF_SEQUENCE = '0123456789ABCD*,#';
245
+ await checkDtmf(0, TEST_DTMF_SEQUENCE);
246
+ await checkDtmf(1, TEST_DTMF_SEQUENCE);
247
+ });
248
+ it('sends DTMF signals when insertDTMF() is called after audio track is replaced', async () => {
249
+ await testConnections[0].mc.updateSendOptions({ audio: newAudioTrack });
250
+ await checkDtmf(0, '987');
251
+ });
252
+ it('sends DTMF signals when insertDTMF() is called after transceiver was inactive', async () => {
253
+ const roapListener = new EventListener(testConnections[0].mc, Event.ROAP_MESSAGE_TO_SEND, logFn, {
254
+ debug: testConnections[0].debug,
255
+ strict: false,
256
+ useChaiExpect: true,
257
+ });
258
+ await testConnections[0].mc.updateSendReceiveOptions({
259
+ send: { audio: null },
260
+ receive: {
261
+ audio: false,
262
+ video: false,
263
+ screenShareVideo: false,
264
+ },
265
+ });
266
+ await roapListener.waitForEvent({ roapMessage: { messageType: 'OK', seq: 2 } });
267
+ expect(() => testConnections[0].mc.insertDTMF('123')).to.throw();
268
+ await testConnections[0].mc.updateSendReceiveOptions({
269
+ send: { audio: newAudioTrack },
270
+ receive: {
271
+ audio: true,
272
+ video: false,
273
+ screenShareVideo: false,
274
+ },
275
+ });
276
+ await roapListener.waitForEvent({ roapMessage: { messageType: 'OK', seq: 3 } });
277
+ await checkDtmf(0, '#5');
278
+ });
279
+ });
280
+ }
281
+ });
282
+ describe('1 RoapMediaConnection connected to a raw RTCPeerConnection', () => {
283
+ let localStream;
284
+ beforeEach(async () => {
285
+ localStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
286
+ expect(localStream.getAudioTracks().length).to.equal(1);
287
+ expect(localStream.getVideoTracks().length).to.equal(1);
288
+ });
289
+ afterEach(() => {
290
+ localStream?.getTracks().forEach((track) => track.stop());
291
+ });
292
+ it('incoming audio call (with a single m-line)', async () => {
293
+ let failMessage;
294
+ const audioTrack = localStream.getAudioTracks()[0];
295
+ const pc = new RTCPeerConnection();
296
+ const mc = new RoapMediaConnection({ iceServers: [], skipInactiveTransceivers: true, sdpMunging: { convertPort9to0: false } }, {
297
+ send: {
298
+ audio: audioTrack,
299
+ },
300
+ receive: {
301
+ audio: true,
302
+ video: false,
303
+ screenShareVideo: false,
304
+ },
305
+ }, 'mc');
306
+ const expectingRoapFromMc = {
307
+ OFFER: false,
308
+ OFFER_REQUEST: false,
309
+ OFFER_RESPONSE: false,
310
+ ANSWER: false,
311
+ OK: false,
312
+ ERROR: false,
313
+ };
314
+ const connectionStateListener = new EventListener(mc, Event.CONNECTION_STATE_CHANGED, logFn, {
315
+ useChaiExpect: true,
316
+ });
317
+ const remoteTrackAddedListener = new EventListener(mc, Event.REMOTE_TRACK_ADDED, logFn, {
318
+ useChaiExpect: true,
319
+ strict: false,
320
+ });
321
+ const roapOkSent = createControlledPromise();
322
+ mc.on(Event.ROAP_MESSAGE_TO_SEND, async (e) => {
323
+ console.log(`TEST: got ROAP_MESSAGE_TO_SEND: ${e.roapMessage.messageType}, ${e.roapMessage.sdp}`);
324
+ if (expectingRoapFromMc[e.roapMessage.messageType]) {
325
+ if (e.roapMessage.messageType === 'ANSWER') {
326
+ await pc.setRemoteDescription({ type: 'answer', sdp: e.roapMessage.sdp });
327
+ mc.roapMessageReceived({ messageType: 'OK', seq: e.roapMessage.seq });
328
+ }
329
+ else if (e.roapMessage.messageType === 'OFFER') {
330
+ await pc.setRemoteDescription({ type: 'offer', sdp: e.roapMessage.sdp });
331
+ const answer = await pc.createAnswer();
332
+ await pc.setLocalDescription(answer);
333
+ mc.roapMessageReceived({ messageType: 'ANSWER', seq: e.roapMessage.seq, sdp: answer.sdp });
334
+ }
335
+ else if (e.roapMessage.messageType === 'OK') {
336
+ roapOkSent.resolve({});
337
+ }
338
+ }
339
+ else {
340
+ failMessage = `unexpected roap message received: ${JSON.stringify(e.roapMessage)}`;
341
+ }
342
+ });
343
+ pc.addTransceiver(audioTrack);
344
+ await pc.setLocalDescription();
345
+ const sdp = pc.localDescription?.sdp.replaceAll(/\r\n(a=mid:.*|a=group:BUNDLE.*)/g, '');
346
+ console.log(`TEST: sending SDP offer to RoapMediaConnection: ${sdp}`);
347
+ expectingRoapFromMc.ANSWER = true;
348
+ mc.roapMessageReceived({
349
+ messageType: 'OFFER',
350
+ seq: 1,
351
+ sdp,
352
+ });
353
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTING });
354
+ await connectionStateListener.waitForEvent({ state: ConnectionState.CONNECTED });
355
+ await remoteTrackAddedListener.waitForEvent({
356
+ type: RemoteTrackType.AUDIO,
357
+ track: AnyValue,
358
+ });
359
+ expect(failMessage).to.equal(undefined);
360
+ expectingRoapFromMc.OFFER = true;
361
+ expectingRoapFromMc.ANSWER = false;
362
+ expectingRoapFromMc.OK = true;
363
+ mc.updateReceiveOptions({ audio: false, video: false, screenShareVideo: false });
364
+ await roapOkSent;
365
+ expect(failMessage).to.equal(undefined);
366
+ });
367
+ });
368
+ //# sourceMappingURL=RoapMediaConnection.integration-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoapMediaConnection.integration-test.js","sourceRoot":"","sources":["../../../src/MediaConnection/RoapMediaConnection.integration-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import EventEmitter from './EventEmitter';
2
+ import { MediaConnection } from './MediaConnection';
3
+ import { Roap } from './roap';
4
+ import { Event, } from './eventTypes';
5
+ import { getLogger, getErrorDescription } from './logger';
6
+ export class RoapMediaConnection extends EventEmitter {
7
+ id;
8
+ debugId;
9
+ mediaConnection;
10
+ roap;
11
+ sdpNegotiationStarted;
12
+ constructor(mediaConnectionConfig, options, debugId) {
13
+ super();
14
+ this.debugId = debugId;
15
+ this.id = debugId || 'RoapMediaConnection';
16
+ this.sdpNegotiationStarted = false;
17
+ this.log('constructor()', `config: ${JSON.stringify(mediaConnectionConfig)}, options: ${JSON.stringify(options)}`);
18
+ this.mediaConnection = this.createMediaConnection(mediaConnectionConfig, options, debugId);
19
+ this.roap = this.createRoap(debugId);
20
+ }
21
+ log(action, description) {
22
+ getLogger().info(`${this.id}:${action} ${description}`);
23
+ }
24
+ error(action, description, error) {
25
+ getLogger().error(`${this.id}:${action} ${description} ${getErrorDescription(error)}`);
26
+ }
27
+ createMediaConnection(mediaConnectionConfig, options, debugId) {
28
+ const mediaConnection = new MediaConnection(mediaConnectionConfig, options, debugId);
29
+ mediaConnection.on(Event.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));
30
+ mediaConnection.on(Event.CONNECTION_STATE_CHANGED, this.onConnectionStateChanged.bind(this));
31
+ mediaConnection.on(Event.DTMF_TONE_CHANGED, this.onDtmfToneChanged.bind(this));
32
+ return mediaConnection;
33
+ }
34
+ createRoap(debugId, seq) {
35
+ const roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);
36
+ roap.on(Event.ROAP_MESSAGE_TO_SEND, this.onRoapMessageToSend.bind(this));
37
+ roap.on(Event.ROAP_FAILURE, this.onRoapFailure.bind(this));
38
+ return roap;
39
+ }
40
+ initiateOffer() {
41
+ this.log('initiateOffer()', 'called');
42
+ if (this.sdpNegotiationStarted) {
43
+ this.error('initiateOffer()', 'SDP negotiation already started');
44
+ return Promise.reject(new Error('SDP negotiation already started'));
45
+ }
46
+ this.mediaConnection.initializeTransceivers(false);
47
+ this.sdpNegotiationStarted = true;
48
+ return this.roap.initiateOffer();
49
+ }
50
+ close() {
51
+ this.log('close()', 'called');
52
+ this.closeMediaConnection();
53
+ this.stopRoapSession();
54
+ }
55
+ closeMediaConnection() {
56
+ this.mediaConnection.close();
57
+ this.mediaConnection.removeAllListeners();
58
+ }
59
+ stopRoapSession() {
60
+ this.roap.stop();
61
+ this.roap.removeAllListeners();
62
+ }
63
+ reconnect(initiateOffer = true) {
64
+ this.log('reconnect()', 'called');
65
+ const config = this.mediaConnection.getConfig();
66
+ const options = this.mediaConnection.getSendReceiveOptions();
67
+ const seq = this.roap.getSeq();
68
+ this.stopRoapSession();
69
+ this.closeMediaConnection();
70
+ this.sdpNegotiationStarted = false;
71
+ this.mediaConnection = this.createMediaConnection(config, options, this.debugId);
72
+ this.roap = this.createRoap(this.debugId, seq);
73
+ if (initiateOffer) {
74
+ return this.initiateOffer();
75
+ }
76
+ return Promise.resolve();
77
+ }
78
+ updateSendOptions(tracks) {
79
+ this.log('updateSendOptions()', `called with ${JSON.stringify(tracks)}`);
80
+ const newOfferNeeded = this.mediaConnection.updateSendOptions(tracks);
81
+ if (newOfferNeeded) {
82
+ this.log('updateSendOptions()', 'triggering offer...');
83
+ return this.roap.initiateOffer();
84
+ }
85
+ return Promise.resolve();
86
+ }
87
+ updateReceiveOptions(options) {
88
+ this.log('updateReceiveOptions()', `called with ${JSON.stringify(options)}`);
89
+ const newOfferNeeded = this.mediaConnection.updateReceiveOptions(options);
90
+ if (newOfferNeeded) {
91
+ this.log('updateReceiveOptions()', 'triggering offer...');
92
+ return this.roap.initiateOffer();
93
+ }
94
+ return Promise.resolve();
95
+ }
96
+ updateSendReceiveOptions(options) {
97
+ this.log('updateSendReceiveOptions()', `called with ${JSON.stringify(options)}`);
98
+ const newOfferNeeded = this.mediaConnection.updateSendReceiveOptions(options);
99
+ if (newOfferNeeded) {
100
+ this.log('updateSendReceiveOptions()', 'triggering offer...');
101
+ return this.roap.initiateOffer();
102
+ }
103
+ return Promise.resolve();
104
+ }
105
+ getConnectionState() {
106
+ return this.mediaConnection.getConnectionState();
107
+ }
108
+ getStats() {
109
+ return this.mediaConnection.getStats();
110
+ }
111
+ insertDTMF(tones, duration, interToneGap) {
112
+ this.log('insertDTMF()', `called with tones="${tones}", duration=${duration}, interToneGap=${interToneGap}`);
113
+ this.mediaConnection.insertDTMF(tones, duration, interToneGap);
114
+ }
115
+ roapMessageReceived(roapMessage) {
116
+ this.log('roapMessageReceived()', `called with messageType=${roapMessage.messageType}, seq=${roapMessage.seq}`);
117
+ if (!this.sdpNegotiationStarted && roapMessage.messageType === 'OFFER') {
118
+ this.sdpNegotiationStarted = true;
119
+ this.mediaConnection.initializeTransceivers(true);
120
+ }
121
+ this.roap.roapMessageReceived(roapMessage);
122
+ }
123
+ onRoapMessageToSend(event) {
124
+ this.emit(Event.ROAP_MESSAGE_TO_SEND, event);
125
+ }
126
+ onRoapFailure() {
127
+ this.emit(Event.ROAP_FAILURE);
128
+ }
129
+ onRemoteTrack(event) {
130
+ this.emit(Event.REMOTE_TRACK_ADDED, event);
131
+ }
132
+ onConnectionStateChanged(event) {
133
+ this.emit(Event.CONNECTION_STATE_CHANGED, event);
134
+ }
135
+ onDtmfToneChanged(event) {
136
+ this.emit(Event.DTMF_TONE_CHANGED, event);
137
+ }
138
+ createLocalOffer() {
139
+ return this.mediaConnection.createLocalOffer();
140
+ }
141
+ handleRemoteOffer(sdp) {
142
+ return this.mediaConnection.handleRemoteOffer(sdp);
143
+ }
144
+ handleRemoteAnswer(sdp) {
145
+ return this.mediaConnection.handleRemoteAnswer(sdp);
146
+ }
147
+ }
148
+ //# sourceMappingURL=RoapMediaConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoapMediaConnection.js","sourceRoot":"","sources":["../../../src/MediaConnection/RoapMediaConnection.ts"],"names":[],"mappings":"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"}