@phystack/hub-client 4.5.19-dev → 4.5.20-dev

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 (119) hide show
  1. package/dist/index.d.ts +22 -28
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +252 -378
  4. package/dist/index.js.map +1 -1
  5. package/dist/peripheral-twin.d.ts +34 -0
  6. package/dist/peripheral-twin.d.ts.map +1 -0
  7. package/dist/peripheral-twin.js +234 -0
  8. package/dist/peripheral-twin.js.map +1 -0
  9. package/dist/services/phyhub-connection.service.d.ts +1 -0
  10. package/dist/services/phyhub-connection.service.d.ts.map +1 -1
  11. package/dist/services/phyhub-connection.service.js +17 -0
  12. package/dist/services/phyhub-connection.service.js.map +1 -1
  13. package/dist/services/phyhub-direct-connection.service.d.ts +21 -0
  14. package/dist/services/phyhub-direct-connection.service.d.ts.map +1 -0
  15. package/dist/services/phyhub-direct-connection.service.js +101 -0
  16. package/dist/services/phyhub-direct-connection.service.js.map +1 -0
  17. package/dist/services/webrtc/data-channel-handler.d.ts +45 -0
  18. package/dist/services/webrtc/data-channel-handler.d.ts.map +1 -0
  19. package/dist/services/webrtc/data-channel-handler.js +260 -0
  20. package/dist/services/webrtc/data-channel-handler.js.map +1 -0
  21. package/dist/services/webrtc/index.d.ts +8 -0
  22. package/dist/services/webrtc/index.d.ts.map +1 -0
  23. package/dist/services/webrtc/index.js +18 -0
  24. package/dist/services/webrtc/index.js.map +1 -0
  25. package/dist/services/webrtc/media-stream-handler.d.ts +57 -0
  26. package/dist/services/webrtc/media-stream-handler.d.ts.map +1 -0
  27. package/dist/services/webrtc/media-stream-handler.js +383 -0
  28. package/dist/services/webrtc/media-stream-handler.js.map +1 -0
  29. package/dist/services/webrtc/peer-connection-manager.d.ts +40 -0
  30. package/dist/services/webrtc/peer-connection-manager.d.ts.map +1 -0
  31. package/dist/services/webrtc/peer-connection-manager.js +336 -0
  32. package/dist/services/webrtc/peer-connection-manager.js.map +1 -0
  33. package/dist/services/webrtc/types.d.ts +134 -0
  34. package/dist/services/webrtc/types.d.ts.map +1 -0
  35. package/dist/services/webrtc/types.js +12 -0
  36. package/dist/services/webrtc/types.js.map +1 -0
  37. package/dist/services/webrtc/webrtc-globals.d.ts +4 -0
  38. package/dist/services/webrtc/webrtc-globals.d.ts.map +1 -0
  39. package/dist/services/webrtc/webrtc-globals.js +72 -0
  40. package/dist/services/webrtc/webrtc-globals.js.map +1 -0
  41. package/dist/services/webrtc/webrtc-manager.d.ts +35 -0
  42. package/dist/services/webrtc/webrtc-manager.d.ts.map +1 -0
  43. package/dist/services/webrtc/webrtc-manager.js +274 -0
  44. package/dist/services/webrtc/webrtc-manager.js.map +1 -0
  45. package/dist/test/communication-comprehensive-test.d.ts +8 -0
  46. package/dist/test/communication-comprehensive-test.d.ts.map +1 -0
  47. package/dist/test/communication-comprehensive-test.js +356 -0
  48. package/dist/test/communication-comprehensive-test.js.map +1 -0
  49. package/dist/test/webrtc-channel-names-test.d.ts +2 -0
  50. package/dist/test/webrtc-channel-names-test.d.ts.map +1 -0
  51. package/dist/test/webrtc-channel-names-test.js +177 -0
  52. package/dist/test/webrtc-channel-names-test.js.map +1 -0
  53. package/dist/test/webrtc-comprehensive-test.d.ts +2 -0
  54. package/dist/test/webrtc-comprehensive-test.d.ts.map +1 -0
  55. package/dist/test/webrtc-comprehensive-test.js +328 -0
  56. package/dist/test/webrtc-comprehensive-test.js.map +1 -0
  57. package/dist/test/webrtc-reconnect-test.d.ts +4 -0
  58. package/dist/test/webrtc-reconnect-test.d.ts.map +1 -0
  59. package/dist/test/webrtc-reconnect-test.js +244 -0
  60. package/dist/test/webrtc-reconnect-test.js.map +1 -0
  61. package/dist/test/webrtc-test-harness.d.ts +4 -0
  62. package/dist/test/webrtc-test-harness.d.ts.map +1 -0
  63. package/dist/test/webrtc-test-harness.js +169 -0
  64. package/dist/test/webrtc-test-harness.js.map +1 -0
  65. package/dist/twin-messaging.d.ts +20 -0
  66. package/dist/twin-messaging.d.ts.map +1 -0
  67. package/dist/twin-messaging.js +94 -0
  68. package/dist/twin-messaging.js.map +1 -0
  69. package/dist/twin-registry.d.ts +9 -0
  70. package/dist/twin-registry.d.ts.map +1 -0
  71. package/dist/twin-registry.js +26 -0
  72. package/dist/twin-registry.js.map +1 -0
  73. package/dist/types/index.d.ts +4 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/index.js +20 -0
  76. package/dist/types/index.js.map +1 -0
  77. package/dist/types/twin.types.d.ts +62 -14
  78. package/dist/types/twin.types.d.ts.map +1 -1
  79. package/dist/types/twin.types.js +8 -1
  80. package/dist/types/twin.types.js.map +1 -1
  81. package/docs/webrtc-howto.md +398 -0
  82. package/docs/webrtc-test.md +330 -0
  83. package/package.json +3 -3
  84. package/scripts/webrtc-test.sh +401 -0
  85. package/src/index.ts +378 -568
  86. package/src/peripheral-twin.ts +337 -0
  87. package/src/services/phyhub-connection.service.ts +24 -0
  88. package/src/services/phyhub-direct-connection.service.ts +159 -0
  89. package/src/services/webrtc/data-channel-handler.ts +362 -0
  90. package/src/services/webrtc/index.ts +36 -0
  91. package/src/services/webrtc/media-stream-handler.ts +536 -0
  92. package/src/services/webrtc/peer-connection-manager.ts +467 -0
  93. package/src/services/webrtc/types.ts +273 -0
  94. package/src/services/webrtc/webrtc-globals.ts +108 -0
  95. package/src/services/webrtc/webrtc-manager.ts +490 -0
  96. package/src/test/communication-comprehensive-test.ts +533 -0
  97. package/src/test/webrtc-channel-names-test.ts +266 -0
  98. package/src/test/webrtc-comprehensive-test.ts +494 -0
  99. package/src/test/webrtc-reconnect-test.ts +345 -0
  100. package/src/test/webrtc-test-harness.ts +254 -0
  101. package/src/twin-messaging.ts +184 -0
  102. package/src/twin-registry.ts +39 -0
  103. package/src/types/index.ts +3 -0
  104. package/src/types/twin.types.ts +80 -14
  105. package/dist/services/webrtc/datachannel.d.ts +0 -10
  106. package/dist/services/webrtc/datachannel.d.ts.map +0 -1
  107. package/dist/services/webrtc/datachannel.js +0 -290
  108. package/dist/services/webrtc/datachannel.js.map +0 -1
  109. package/dist/services/webrtc/mediastream.d.ts +0 -10
  110. package/dist/services/webrtc/mediastream.d.ts.map +0 -1
  111. package/dist/services/webrtc/mediastream.js +0 -396
  112. package/dist/services/webrtc/mediastream.js.map +0 -1
  113. package/dist/services/webrtc/peer-connection-ice.d.ts +0 -32
  114. package/dist/services/webrtc/peer-connection-ice.d.ts.map +0 -1
  115. package/dist/services/webrtc/peer-connection-ice.js +0 -483
  116. package/dist/services/webrtc/peer-connection-ice.js.map +0 -1
  117. package/src/services/webrtc/datachannel.ts +0 -421
  118. package/src/services/webrtc/mediastream.ts +0 -602
  119. package/src/services/webrtc/peer-connection-ice.ts +0 -689
@@ -1,483 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPeerConnection = createPeerConnection;
4
- exports.handleIceAndConnectionState = handleIceAndConnectionState;
5
- exports.attemptConnection = attemptConnection;
6
- exports.triggerReconnect = triggerReconnect;
7
- (async function initializeWebRTCGlobals() {
8
- if (typeof window !== 'undefined')
9
- return;
10
- try {
11
- const wrtc = require('@roamhq/wrtc');
12
- if (typeof global.MediaStream === 'undefined' && wrtc.MediaStream) {
13
- global.MediaStream = wrtc.MediaStream;
14
- console.log('Global MediaStream initialized');
15
- }
16
- if (typeof global.RTCDataChannel === 'undefined' && wrtc.RTCDataChannel) {
17
- global.RTCDataChannel = wrtc.RTCDataChannel;
18
- console.log('Global RTCDataChannel initialized');
19
- }
20
- if (typeof global.RTCPeerConnection === 'undefined' && wrtc.RTCPeerConnection) {
21
- global.RTCPeerConnection = wrtc.RTCPeerConnection;
22
- console.log('Global RTCPeerConnection initialized');
23
- }
24
- if (typeof global.RTCSessionDescription === 'undefined' && wrtc.RTCSessionDescription) {
25
- global.RTCSessionDescription = wrtc.RTCSessionDescription;
26
- console.log('Global RTCSessionDescription initialized');
27
- }
28
- if (typeof global.RTCIceCandidate === 'undefined' && wrtc.RTCIceCandidate) {
29
- global.RTCIceCandidate = wrtc.RTCIceCandidate;
30
- console.log('Global RTCIceCandidate initialized');
31
- }
32
- console.log('WebRTC globals successfully initialized');
33
- }
34
- catch (error) {
35
- console.error('Failed to initialize WebRTC globals:', error);
36
- }
37
- })().catch(err => console.error('Error in WebRTC globals initialization:', err));
38
- function createPeerConnection(useStun) {
39
- const pc = new RTCPeerConnection({
40
- iceServers: useStun
41
- ? [{ urls: 'stun:stun.l.google.com:19302' }, { urls: 'stun:stun1.l.google.com:19302' }]
42
- : [],
43
- });
44
- return pc;
45
- }
46
- function handleIceAndConnectionState(state, pc, callbacks, connectionId) {
47
- const extendedPc = pc;
48
- pc.onicecandidate = async (event) => {
49
- if (!pc)
50
- return;
51
- if (event.candidate && state.currentConnectionId === connectionId) {
52
- try {
53
- logIceCandidate('Local ICE candidate', event.candidate);
54
- await callbacks.sendSignalingMessage('ice', event.candidate);
55
- }
56
- catch (err) {
57
- callbacks.reportError('Error sending ICE candidate:', err);
58
- }
59
- }
60
- else if (event.candidate === null) {
61
- callbacks.reportConnectionState('ICE gathering complete');
62
- }
63
- };
64
- extendedPc.onicecandidatepairchange = (_event) => {
65
- callbacks.reportConnectionState('ICE candidate pair changed');
66
- pc.getStats()
67
- .then(stats => {
68
- const statsValues = [];
69
- stats.forEach((stat) => {
70
- statsValues.push(stat);
71
- });
72
- const transportStats = statsValues.find(s => s.type === 'transport');
73
- if (transportStats) {
74
- callbacks.reportConnectionState(`Transport selected: ${transportStats.selectedCandidatePairId}`);
75
- }
76
- const selectedPair = statsValues.find(s => s.type === 'candidate-pair' && s.selected);
77
- if (selectedPair) {
78
- callbacks.reportConnectionState(`Selected ICE candidate pair [${selectedPair.id}]:
79
- local=${selectedPair.localCandidateId},
80
- remote=${selectedPair.remoteCandidateId},
81
- state=${selectedPair.state},
82
- priority=${selectedPair.priority}`);
83
- const localCandidate = statsValues.find(s => s.type === 'local-candidate' && s.id === selectedPair.localCandidateId);
84
- const remoteCandidate = statsValues.find(s => s.type === 'remote-candidate' && s.id === selectedPair.remoteCandidateId);
85
- if (localCandidate) {
86
- logIceCandidateStats('Selected local ICE candidate', localCandidate);
87
- }
88
- if (remoteCandidate) {
89
- logIceCandidateStats('Selected remote ICE candidate', remoteCandidate);
90
- }
91
- }
92
- })
93
- .catch(err => {
94
- callbacks.reportError('Error getting ICE candidate stats:', err);
95
- });
96
- };
97
- pc.onconnectionstatechange = () => {
98
- if (!pc)
99
- return;
100
- callbacks.reportConnectionState(`Connection state: ${pc.connectionState}`);
101
- };
102
- pc.oniceconnectionstatechange = () => {
103
- if (!pc)
104
- return;
105
- callbacks.reportConnectionState(`ICE connection state: ${pc.iceConnectionState}`);
106
- if (pc.iceConnectionState === 'connected') {
107
- pc.getStats()
108
- .then(stats => {
109
- const statsValues = [];
110
- stats.forEach((stat) => {
111
- statsValues.push(stat);
112
- });
113
- const selectedPair = statsValues.find(s => s.type === 'candidate-pair' && s.selected);
114
- if (!selectedPair)
115
- return;
116
- const localCandidate = statsValues.find(s => s.type === 'local-candidate' && s.id === selectedPair.localCandidateId);
117
- const remoteCandidate = statsValues.find(s => s.type === 'remote-candidate' && s.id === selectedPair.remoteCandidateId);
118
- if (selectedPair && localCandidate && remoteCandidate) {
119
- callbacks.reportConnectionState('*** ICE CONNECTION ESTABLISHED ***');
120
- callbacks.reportConnectionState(`Selected candidates:
121
- Local: ${localCandidate.ip}:${localCandidate.port} (${localCandidate.protocol}) [${localCandidate.candidateType}]
122
- Remote: ${remoteCandidate.ip}:${remoteCandidate.port} (${remoteCandidate.protocol}) [${remoteCandidate.candidateType}]
123
- Round-trip time: ${selectedPair.currentRoundTripTime ? (selectedPair.currentRoundTripTime * 1000).toFixed(2) + 'ms' : 'unknown'}`);
124
- }
125
- })
126
- .catch(err => {
127
- callbacks.reportError('Error getting ICE candidate stats:', err);
128
- });
129
- }
130
- };
131
- }
132
- function logIceCandidate(label, candidate) {
133
- console.log(`${label}: ${candidate.candidate}`);
134
- try {
135
- const parts = candidate.candidate.split(' ');
136
- if (parts.length > 7) {
137
- const protocol = parts[2];
138
- const ip = parts[4];
139
- const port = parts[5];
140
- const type = parts[7];
141
- console.log(`Details: IP=${ip}, Port=${port}, Protocol=${protocol}, Type=${type}`);
142
- }
143
- }
144
- catch (e) {
145
- }
146
- }
147
- function logIceCandidateStats(label, candidate) {
148
- if (!candidate)
149
- return;
150
- console.log(`${label}: ${candidate.ip}:${candidate.port} (${candidate.protocol}) [${candidate.candidateType}]`);
151
- if (candidate.url)
152
- console.log(`STUN/TURN server: ${candidate.url}`);
153
- if (candidate.priority)
154
- console.log(`Priority: ${candidate.priority}`);
155
- if (candidate.networkType)
156
- console.log(`Network type: ${candidate.networkType}`);
157
- }
158
- async function attemptConnection(state, options, retryCount, currentUseStun, delay, INITIAL_RETRY_DELAY, CONNECTION_TIMEOUT, MAX_RETRY_DELAY, callbacks) {
159
- if (state.isShuttingDown) {
160
- throw new Error('Connection attempt cancelled - shutting down');
161
- }
162
- return new Promise((resolve, reject) => {
163
- var _a, _b, _c;
164
- let connectionEstablished = false;
165
- let timeoutId = null;
166
- let localConnection = null;
167
- const connectionId = ++state.currentConnectionId;
168
- const isInitiator = (_b = (_a = state.isInitiator) !== null && _a !== void 0 ? _a : options.isInitiator) !== null && _b !== void 0 ? _b : true;
169
- const connectionType = state.connectionType ||
170
- (((_c = options.mediaOptions) === null || _c === void 0 ? void 0 : _c.isMediaConnection) ? 'mediastream' : 'datachannel');
171
- const messageHandler = async (message) => {
172
- var _a;
173
- try {
174
- if (state.isShuttingDown) {
175
- return;
176
- }
177
- const channelId = `${state.channelPrefix}-${state.targetTwinId}`;
178
- const messageType = (_a = message.data) === null || _a === void 0 ? void 0 : _a.type;
179
- switch (messageType) {
180
- case `${channelId}:answer`:
181
- if (isInitiator && state.pc) {
182
- callbacks.reportConnectionState('Received answer, current signaling state: ' + state.pc.signalingState);
183
- if (state.pc.signalingState === 'have-local-offer') {
184
- await state.pc.setRemoteDescription(message.data.data);
185
- callbacks.reportConnectionState('Set remote description successfully');
186
- if (state.pendingCandidates.length > 0) {
187
- callbacks.reportConnectionState(`Applying ${state.pendingCandidates.length} pending ICE candidates after answer`);
188
- for (const candidate of state.pendingCandidates) {
189
- try {
190
- await state.pc.addIceCandidate(candidate);
191
- }
192
- catch (err) {
193
- callbacks.reportError('Error applying pending ICE candidate:', err);
194
- }
195
- }
196
- state.pendingCandidates = [];
197
- }
198
- }
199
- else {
200
- callbacks.reportConnectionState(`Ignoring answer - wrong state: ${state.pc.signalingState}`);
201
- }
202
- }
203
- break;
204
- case `${channelId}:offer`:
205
- if (!isInitiator && state.pc) {
206
- callbacks.reportConnectionState('Received offer, current signaling state: ' + state.pc.signalingState);
207
- if (state.pc.signalingState === 'stable' ||
208
- state.pc.signalingState === 'have-remote-offer') {
209
- if (state.pc.signalingState === 'have-remote-offer') {
210
- callbacks.reportConnectionState('Rolling back previous offer');
211
- await state.pc.setLocalDescription({ type: 'rollback' });
212
- }
213
- await state.pc.setRemoteDescription(message.data.data);
214
- callbacks.reportConnectionState('Set remote description successfully');
215
- callbacks.reportConnectionState('Creating answer...');
216
- const answer = await state.pc.createAnswer();
217
- await state.pc.setLocalDescription(answer);
218
- await callbacks.sendSignalingMessage('answer', answer);
219
- if (state.pendingCandidates.length > 0) {
220
- callbacks.reportConnectionState(`Applying ${state.pendingCandidates.length} pending ICE candidates after offer`);
221
- for (const candidate of state.pendingCandidates) {
222
- try {
223
- await state.pc.addIceCandidate(candidate);
224
- }
225
- catch (err) {
226
- callbacks.reportError('Error applying pending ICE candidate:', err);
227
- }
228
- }
229
- state.pendingCandidates = [];
230
- }
231
- }
232
- else {
233
- callbacks.reportConnectionState(`Ignoring offer - wrong state: ${state.pc.signalingState}`);
234
- }
235
- }
236
- break;
237
- case `${channelId}:ice`:
238
- if (state.pc) {
239
- if (state.pc.remoteDescription) {
240
- try {
241
- await state.pc.addIceCandidate(message.data.data);
242
- }
243
- catch (err) {
244
- callbacks.reportError('Error adding ICE candidate:', err);
245
- }
246
- }
247
- else {
248
- callbacks.reportConnectionState('Storing ICE candidate for later');
249
- state.pendingCandidates.push(message.data.data);
250
- }
251
- }
252
- break;
253
- }
254
- }
255
- catch (error) {
256
- callbacks.reportError('Error handling WebRTC message:', error);
257
- }
258
- };
259
- const cleanup = () => {
260
- callbacks.reportConnectionState('Running cleanup...');
261
- if (timeoutId)
262
- clearTimeout(timeoutId);
263
- callbacks.removeMessageHandling(messageHandler);
264
- if (localConnection instanceof RTCDataChannel) {
265
- localConnection.onopen = null;
266
- localConnection.onclose = null;
267
- localConnection.onerror = null;
268
- localConnection.close();
269
- }
270
- else if (localConnection instanceof MediaStream) {
271
- localConnection.getTracks().forEach(track => track.stop());
272
- }
273
- if (state.pc) {
274
- state.pc.onicecandidate = null;
275
- state.pc.onconnectionstatechange = null;
276
- state.pc.oniceconnectionstatechange = null;
277
- try {
278
- state.pc.close();
279
- }
280
- catch (err) {
281
- callbacks.reportError('Error closing peer connection', err);
282
- }
283
- state.pc = null;
284
- }
285
- state.pendingCandidates = [];
286
- state.activeDataChannel = null;
287
- state.activeMediaStream = null;
288
- callbacks.onCloseCleanup();
289
- };
290
- const safeReject = (error) => {
291
- cleanup();
292
- reject(error);
293
- };
294
- const retryConnection = () => {
295
- if (state.isShuttingDown) {
296
- safeReject(new Error('Connection attempt cancelled - shutting down'));
297
- return;
298
- }
299
- callbacks.reportConnectionState(`Connection attempt ${retryCount + 1} failed ${currentUseStun ? 'with' : 'without'} STUN`);
300
- cleanup();
301
- if (retryCount === 0) {
302
- callbacks.reportConnectionState(`Retrying with ${!currentUseStun ? 'STUN' : 'direct'} connection...`);
303
- callbacks
304
- .retryConnection(retryCount + 1, !currentUseStun)
305
- .then(res => resolve(res))
306
- .catch(err => reject(err));
307
- return;
308
- }
309
- callbacks.reportConnectionState(`Retrying in ${Math.floor(delay / 1000)} seconds... (attempt ${retryCount + 1})`);
310
- setTimeout(() => {
311
- const nextDelay = Math.min(MAX_RETRY_DELAY, INITIAL_RETRY_DELAY * Math.pow(2, retryCount));
312
- callbacks
313
- .retryConnection(retryCount + 1, currentUseStun, Math.min(nextDelay, MAX_RETRY_DELAY))
314
- .then(res => resolve(res))
315
- .catch(err => reject(err));
316
- }, delay);
317
- };
318
- const initConnection = async () => {
319
- if (typeof RTCPeerConnection === 'undefined') {
320
- callbacks.reportError('RTCPeerConnection is not available. WebRTC globals initialization may have failed.');
321
- throw new Error('RTCPeerConnection is not available. Cannot proceed with WebRTC connection.');
322
- }
323
- callbacks.setupMessageHandling(messageHandler);
324
- await callbacks.onSubscribe();
325
- callbacks.reportConnectionState(`Attempting data connection ${currentUseStun ? 'with' : 'without'} STUN servers...`);
326
- state.pc = createPeerConnection(currentUseStun);
327
- const pc = state.pc;
328
- handleIceAndConnectionState(state, pc, callbacks, connectionId);
329
- try {
330
- localConnection = await callbacks.onCreateConnection(pc, connectionId, isInitiator);
331
- if (localConnection instanceof RTCDataChannel) {
332
- state.activeDataChannel = localConnection;
333
- }
334
- else if (localConnection instanceof MediaStream) {
335
- state.activeMediaStream = localConnection;
336
- }
337
- pc.onconnectionstatechange = () => {
338
- if (!pc)
339
- return;
340
- callbacks.reportConnectionState(`Connection state: ${pc.connectionState}`);
341
- if (pc.connectionState === 'connected') {
342
- connectionEstablished = true;
343
- if (timeoutId)
344
- clearTimeout(timeoutId);
345
- if (connectionType === 'mediastream') {
346
- const hasTracks = pc.getReceivers().some(receiver => receiver.track);
347
- if (!hasTracks) {
348
- callbacks.reportConnectionState('Connected but no tracks received yet');
349
- return;
350
- }
351
- }
352
- if (connectionEstablished && !state.isShuttingDown) {
353
- const result = {
354
- _rawPeerConnection: pc,
355
- close: () => {
356
- state.isShuttingDown = true;
357
- cleanup();
358
- },
359
- };
360
- if (connectionType === 'datachannel') {
361
- Object.assign(result, {
362
- dataChannel: {
363
- send: () => { },
364
- onMessage: () => { },
365
- offMessage: () => { },
366
- onClose: () => { },
367
- offClose: () => { },
368
- close: () => {
369
- state.isShuttingDown = true;
370
- cleanup();
371
- },
372
- },
373
- _rawDataChannel: state.activeDataChannel,
374
- });
375
- }
376
- else if (connectionType === 'mediastream') {
377
- Object.assign(result, {
378
- mediaStream: {
379
- getTracks: () => [],
380
- onTrack: () => { },
381
- offTrack: () => { },
382
- onClose: () => { },
383
- offClose: () => { },
384
- close: () => {
385
- state.isShuttingDown = true;
386
- cleanup();
387
- },
388
- addTrack: () => { },
389
- },
390
- _rawMediaStream: state.activeMediaStream,
391
- });
392
- }
393
- resolve(result);
394
- }
395
- }
396
- else if (pc.connectionState === 'failed' ||
397
- pc.connectionState === 'disconnected' ||
398
- pc.connectionState === 'closed') {
399
- if (connectionEstablished) {
400
- callbacks.reportConnectionState('Connection lost, initiating retry...');
401
- retryConnection();
402
- }
403
- }
404
- };
405
- pc.oniceconnectionstatechange = () => {
406
- if (!pc)
407
- return;
408
- callbacks.reportConnectionState(`ICE connection state: ${pc.iceConnectionState}`);
409
- if (pc.iceConnectionState === 'failed' && connectionEstablished) {
410
- callbacks.reportConnectionState('ICE Connection failed, initiating retry...');
411
- retryConnection();
412
- }
413
- };
414
- if (isInitiator) {
415
- try {
416
- callbacks.reportConnectionState('Creating offer...');
417
- const offer = await pc.createOffer();
418
- callbacks.reportConnectionState('Setting local description...');
419
- await pc.setLocalDescription(offer);
420
- callbacks.reportConnectionState('Sending offer...');
421
- await callbacks.sendSignalingMessage('offer', offer);
422
- }
423
- catch (error) {
424
- callbacks.reportError('Error creating/sending offer:', error);
425
- retryConnection();
426
- return;
427
- }
428
- }
429
- timeoutId = setTimeout(() => {
430
- if (!connectionEstablished) {
431
- callbacks.reportConnectionState(`Connection attempt timed out ${currentUseStun ? 'with' : 'without'} STUN`);
432
- retryConnection();
433
- }
434
- }, CONNECTION_TIMEOUT);
435
- }
436
- catch (error) {
437
- callbacks.reportError('Error creating connection in callback', error);
438
- retryConnection();
439
- return;
440
- }
441
- };
442
- initConnection().catch(error => {
443
- callbacks.reportError('Unhandled error in connection attempt', error);
444
- safeReject(error);
445
- });
446
- });
447
- }
448
- function triggerReconnect(state, attempt, RECONNECT_DELAY, callbacks) {
449
- state.currentConnectionId++;
450
- callbacks.reportConnectionState(`Starting reconnection process (attempt ${attempt})`);
451
- if (state.activeDataChannel && typeof state.activeDataChannel.close === 'function') {
452
- try {
453
- state.activeDataChannel.close();
454
- }
455
- catch (err) {
456
- callbacks.reportError('Error closing active data channel:', err);
457
- }
458
- state.activeDataChannel = null;
459
- }
460
- if (state.pc) {
461
- try {
462
- state.pc.close();
463
- }
464
- catch (err) {
465
- callbacks.reportError('Error closing old peer connection:', err);
466
- }
467
- state.pc = null;
468
- }
469
- const reconnectAttempt = () => {
470
- var _a;
471
- callbacks
472
- .retryConnection(0, !((_a = state.useStun) !== null && _a !== void 0 ? _a : true))
473
- .then(() => {
474
- callbacks.reportConnectionState(`Reconnection successful (attempt ${attempt})`);
475
- })
476
- .catch(error => {
477
- callbacks.reportError(`Reconnection failed (attempt ${attempt})`, error);
478
- setTimeout(reconnectAttempt, Math.min(100 * Math.pow(2, attempt), 5000));
479
- });
480
- };
481
- setTimeout(reconnectAttempt, RECONNECT_DELAY);
482
- }
483
- //# sourceMappingURL=peer-connection-ice.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer-connection-ice.js","sourceRoot":"","sources":["../../../src/services/webrtc/peer-connection-ice.ts"],"names":[],"mappings":"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"}