@phystack/hub-client 4.4.29

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 (113) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc +10 -0
  3. package/CHANGELOG.md +1202 -0
  4. package/README-MEDIASTREAM.md +124 -0
  5. package/README.md +302 -0
  6. package/dist/constants/constants.d.ts +7 -0
  7. package/dist/constants/constants.d.ts.map +1 -0
  8. package/dist/constants/constants.js +10 -0
  9. package/dist/constants/constants.js.map +1 -0
  10. package/dist/helpers/browser.helper.d.ts +5 -0
  11. package/dist/helpers/browser.helper.d.ts.map +1 -0
  12. package/dist/helpers/browser.helper.js +19 -0
  13. package/dist/helpers/browser.helper.js.map +1 -0
  14. package/dist/helpers/cache.helper.d.ts +6 -0
  15. package/dist/helpers/cache.helper.d.ts.map +1 -0
  16. package/dist/helpers/cache.helper.js +46 -0
  17. package/dist/helpers/cache.helper.js.map +1 -0
  18. package/dist/helpers/date.helper.d.ts +4 -0
  19. package/dist/helpers/date.helper.d.ts.map +1 -0
  20. package/dist/helpers/date.helper.js +13 -0
  21. package/dist/helpers/date.helper.js.map +1 -0
  22. package/dist/helpers/session.helper.d.ts +13 -0
  23. package/dist/helpers/session.helper.d.ts.map +1 -0
  24. package/dist/helpers/session.helper.js +88 -0
  25. package/dist/helpers/session.helper.js.map +1 -0
  26. package/dist/helpers/shorten-look-ups.helper.d.ts +3 -0
  27. package/dist/helpers/shorten-look-ups.helper.d.ts.map +1 -0
  28. package/dist/helpers/shorten-look-ups.helper.js +80 -0
  29. package/dist/helpers/shorten-look-ups.helper.js.map +1 -0
  30. package/dist/helpers/signals-client.helper.d.ts +9 -0
  31. package/dist/helpers/signals-client.helper.d.ts.map +1 -0
  32. package/dist/helpers/signals-client.helper.js +44 -0
  33. package/dist/helpers/signals-client.helper.js.map +1 -0
  34. package/dist/helpers/signals.helper.d.ts +19 -0
  35. package/dist/helpers/signals.helper.d.ts.map +1 -0
  36. package/dist/helpers/signals.helper.js +48 -0
  37. package/dist/helpers/signals.helper.js.map +1 -0
  38. package/dist/helpers/wrtc/browser.d.ts +3 -0
  39. package/dist/helpers/wrtc/browser.d.ts.map +1 -0
  40. package/dist/helpers/wrtc/browser.js +11 -0
  41. package/dist/helpers/wrtc/browser.js.map +1 -0
  42. package/dist/helpers/wrtc/index.d.ts +5 -0
  43. package/dist/helpers/wrtc/index.d.ts.map +1 -0
  44. package/dist/helpers/wrtc/index.js +30 -0
  45. package/dist/helpers/wrtc/index.js.map +1 -0
  46. package/dist/helpers/wrtc/node.d.ts +3 -0
  47. package/dist/helpers/wrtc/node.d.ts.map +1 -0
  48. package/dist/helpers/wrtc/node.js +18 -0
  49. package/dist/helpers/wrtc/node.js.map +1 -0
  50. package/dist/index.d.ts +109 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +1013 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/services/online-status-subscription.service.d.ts +28 -0
  55. package/dist/services/online-status-subscription.service.d.ts.map +1 -0
  56. package/dist/services/online-status-subscription.service.js +96 -0
  57. package/dist/services/online-status-subscription.service.js.map +1 -0
  58. package/dist/services/phyhub-connection.service.d.ts +20 -0
  59. package/dist/services/phyhub-connection.service.d.ts.map +1 -0
  60. package/dist/services/phyhub-connection.service.js +176 -0
  61. package/dist/services/phyhub-connection.service.js.map +1 -0
  62. package/dist/services/signals.service.d.ts +97 -0
  63. package/dist/services/signals.service.d.ts.map +1 -0
  64. package/dist/services/signals.service.js +536 -0
  65. package/dist/services/signals.service.js.map +1 -0
  66. package/dist/services/webrtc/datachannel.d.ts +10 -0
  67. package/dist/services/webrtc/datachannel.d.ts.map +1 -0
  68. package/dist/services/webrtc/datachannel.js +290 -0
  69. package/dist/services/webrtc/datachannel.js.map +1 -0
  70. package/dist/services/webrtc/mediastream.d.ts +10 -0
  71. package/dist/services/webrtc/mediastream.d.ts.map +1 -0
  72. package/dist/services/webrtc/mediastream.js +396 -0
  73. package/dist/services/webrtc/mediastream.js.map +1 -0
  74. package/dist/services/webrtc/peer-connection-ice.d.ts +32 -0
  75. package/dist/services/webrtc/peer-connection-ice.d.ts.map +1 -0
  76. package/dist/services/webrtc/peer-connection-ice.js +483 -0
  77. package/dist/services/webrtc/peer-connection-ice.js.map +1 -0
  78. package/dist/types/signal.types.d.ts +354 -0
  79. package/dist/types/signal.types.d.ts.map +1 -0
  80. package/dist/types/signal.types.js +53 -0
  81. package/dist/types/signal.types.js.map +1 -0
  82. package/dist/types/twin.types.d.ts +705 -0
  83. package/dist/types/twin.types.d.ts.map +1 -0
  84. package/dist/types/twin.types.js +21 -0
  85. package/dist/types/twin.types.js.map +1 -0
  86. package/dist/types/webrtc.types.d.ts +41 -0
  87. package/dist/types/webrtc.types.d.ts.map +1 -0
  88. package/dist/types/webrtc.types.js +3 -0
  89. package/dist/types/webrtc.types.js.map +1 -0
  90. package/package.json +50 -0
  91. package/src/constants/constants.ts +12 -0
  92. package/src/helpers/browser.helper.ts +15 -0
  93. package/src/helpers/cache.helper.ts +52 -0
  94. package/src/helpers/date.helper.ts +8 -0
  95. package/src/helpers/session.helper.ts +96 -0
  96. package/src/helpers/shorten-look-ups.helper.ts +75 -0
  97. package/src/helpers/signals-client.helper.ts +54 -0
  98. package/src/helpers/signals.helper.ts +41 -0
  99. package/src/helpers/wrtc/browser.ts +9 -0
  100. package/src/helpers/wrtc/index.ts +32 -0
  101. package/src/helpers/wrtc/node.ts +16 -0
  102. package/src/index.ts +1429 -0
  103. package/src/services/online-status-subscription.service.ts +127 -0
  104. package/src/services/phyhub-connection.service.ts +213 -0
  105. package/src/services/signals.service.ts +783 -0
  106. package/src/services/webrtc/datachannel.ts +421 -0
  107. package/src/services/webrtc/mediastream.ts +602 -0
  108. package/src/services/webrtc/peer-connection-ice.ts +689 -0
  109. package/src/types/lodash.d.ts +3 -0
  110. package/src/types/signal.types.ts +382 -0
  111. package/src/types/twin.types.ts +803 -0
  112. package/src/types/webrtc.types.ts +48 -0
  113. package/tsconfig.json +45 -0
@@ -0,0 +1,483 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-connection-ice.js","sourceRoot":"","sources":["../../../src/services/webrtc/peer-connection-ice.ts"],"names":[],"mappings":"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"}