@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
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaStreamHandler = void 0;
4
+ const peer_connection_manager_1 = require("./peer-connection-manager");
5
+ const types_1 = require("./types");
6
+ const FRAME_INACTIVITY_TIMEOUT = 5000;
7
+ class MediaStreamHandler {
8
+ constructor(targetTwinId, isInitiator, twinMessaging, options = {}, channelName = 'default') {
9
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
10
+ this.pcManager = null;
11
+ this.remoteStream = null;
12
+ this.localStream = null;
13
+ this.isClosed = false;
14
+ this.isReceiving = false;
15
+ this.isConnecting = false;
16
+ this.tracks = [];
17
+ this.trackLastFrameTime = new Map();
18
+ this.frameActivityInterval = null;
19
+ this.trackListeners = new Set();
20
+ this.frameListeners = new Set();
21
+ this.closeListeners = new Set();
22
+ this.targetTwinId = targetTwinId;
23
+ this.channelName = channelName;
24
+ this.isInitiator = isInitiator;
25
+ this.twinMessaging = twinMessaging;
26
+ this.options = {
27
+ useStun: (_a = options.useStun) !== null && _a !== void 0 ? _a : types_1.DEFAULT_WEBRTC_OPTIONS.useStun,
28
+ stunServers: (_b = options.stunServers) !== null && _b !== void 0 ? _b : types_1.DEFAULT_WEBRTC_OPTIONS.stunServers,
29
+ connectionTimeout: (_c = options.connectionTimeout) !== null && _c !== void 0 ? _c : types_1.DEFAULT_WEBRTC_OPTIONS.connectionTimeout,
30
+ initialRetryDelay: (_d = options.initialRetryDelay) !== null && _d !== void 0 ? _d : types_1.DEFAULT_WEBRTC_OPTIONS.initialRetryDelay,
31
+ maxRetryDelay: (_e = options.maxRetryDelay) !== null && _e !== void 0 ? _e : types_1.DEFAULT_WEBRTC_OPTIONS.maxRetryDelay,
32
+ mediaOptions: {
33
+ direction: (_g = (_f = options.mediaOptions) === null || _f === void 0 ? void 0 : _f.direction) !== null && _g !== void 0 ? _g : (isInitiator ? 'recvonly' : 'sendrecv'),
34
+ localStream: (_h = options.mediaOptions) === null || _h === void 0 ? void 0 : _h.localStream,
35
+ },
36
+ };
37
+ if (!isInitiator && !this.options.mediaOptions.localStream) {
38
+ this.localStream = new MediaStream();
39
+ this.options.mediaOptions.localStream = this.localStream;
40
+ }
41
+ else {
42
+ this.localStream = (_j = this.options.mediaOptions.localStream) !== null && _j !== void 0 ? _j : null;
43
+ }
44
+ }
45
+ setCallbacks(callbacks) {
46
+ this.onConnectedCallback = callbacks.onConnected;
47
+ this.onDisconnectedCallback = callbacks.onDisconnected;
48
+ this.onErrorCallback = callbacks.onError;
49
+ this.onReconnectingCallback = callbacks.onReconnecting;
50
+ this.onReconnectedCallback = callbacks.onReconnected;
51
+ }
52
+ async connect() {
53
+ if (this.isClosed) {
54
+ throw new Error('MediaStreamHandler has been closed');
55
+ }
56
+ this.isConnecting = true;
57
+ const channelPrefix = `media-${this.channelName}`;
58
+ const pcConfig = {
59
+ targetTwinId: this.targetTwinId,
60
+ isInitiator: this.isInitiator,
61
+ connectionType: 'mediastream',
62
+ channelPrefix,
63
+ useStun: this.options.useStun,
64
+ stunServers: this.options.stunServers,
65
+ onConnected: () => this.handlePeerConnected(),
66
+ onDisconnected: () => this.handlePeerDisconnected(),
67
+ onError: (err) => this.handleError(err),
68
+ onReconnecting: (attempt) => {
69
+ var _a;
70
+ this.isConnecting = true;
71
+ this.isReceiving = false;
72
+ (_a = this.onReconnectingCallback) === null || _a === void 0 ? void 0 : _a.call(this, attempt);
73
+ },
74
+ onReconnected: (attempt) => this.handleReconnected(attempt),
75
+ onPeerConnectionCreated: (pc) => {
76
+ if (this.isInitiator) {
77
+ if (this.localStream && this.localStream.getTracks().length > 0) {
78
+ this.localStream.getTracks().forEach((track) => {
79
+ pc.addTrack(track, this.localStream);
80
+ });
81
+ }
82
+ else {
83
+ pc.addTransceiver('video', { direction: this.options.mediaOptions.direction });
84
+ }
85
+ }
86
+ else if (this.localStream) {
87
+ this.localStream.getTracks().forEach((track) => {
88
+ pc.addTrack(track, this.localStream);
89
+ });
90
+ }
91
+ pc.ontrack = (event) => {
92
+ let stream;
93
+ if (event.streams && event.streams[0]) {
94
+ stream = event.streams[0];
95
+ }
96
+ else {
97
+ if (!this.remoteStream) {
98
+ this.remoteStream = new MediaStream();
99
+ }
100
+ stream = this.remoteStream;
101
+ if (!stream.getTrackById(event.track.id)) {
102
+ stream.addTrack(event.track);
103
+ }
104
+ }
105
+ this.remoteStream = stream;
106
+ this.handleRemoteStream(stream);
107
+ };
108
+ },
109
+ };
110
+ this.pcManager = new peer_connection_manager_1.PeerConnectionManager(pcConfig, this.twinMessaging, {
111
+ connectionTimeout: this.options.connectionTimeout,
112
+ initialRetryDelay: this.options.initialRetryDelay,
113
+ maxRetryDelay: this.options.maxRetryDelay,
114
+ });
115
+ const pc = await this.pcManager.connect();
116
+ await this.setupMediaStream(pc);
117
+ return this.createPhygridMediaStream();
118
+ }
119
+ close() {
120
+ if (this.isClosed)
121
+ return;
122
+ this.isClosed = true;
123
+ this.isReceiving = false;
124
+ this.stopFrameActivityMonitor();
125
+ this.tracks.forEach((track) => {
126
+ try {
127
+ track.stop();
128
+ }
129
+ catch (err) {
130
+ console.error('[MediaStreamHandler] Error stopping track:', err);
131
+ }
132
+ });
133
+ this.tracks = [];
134
+ if (this.remoteStream) {
135
+ this.remoteStream.getTracks().forEach((track) => track.stop());
136
+ this.remoteStream = null;
137
+ }
138
+ if (this.localStream) {
139
+ this.localStream.getTracks().forEach((track) => track.stop());
140
+ this.localStream = null;
141
+ }
142
+ if (this.pcManager) {
143
+ this.pcManager.close();
144
+ this.pcManager = null;
145
+ }
146
+ this.notifyCloseListeners();
147
+ this.trackListeners.clear();
148
+ this.frameListeners.clear();
149
+ this.closeListeners.clear();
150
+ this.trackLastFrameTime.clear();
151
+ }
152
+ async setupMediaStream(_pc) {
153
+ if (this.options.mediaOptions.direction === 'sendonly') {
154
+ return;
155
+ }
156
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
157
+ return;
158
+ }
159
+ return new Promise((resolve) => {
160
+ const timeout = setTimeout(() => {
161
+ console.log('[MediaStreamHandler] Proceeding without waiting for remote tracks');
162
+ resolve();
163
+ }, 1000);
164
+ const checkForTracks = () => {
165
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
166
+ clearTimeout(timeout);
167
+ resolve();
168
+ }
169
+ };
170
+ const interval = setInterval(() => {
171
+ checkForTracks();
172
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
173
+ clearInterval(interval);
174
+ }
175
+ }, 100);
176
+ setTimeout(() => clearInterval(interval), 1000);
177
+ });
178
+ }
179
+ handleRemoteStream(stream) {
180
+ var _a;
181
+ this.startFrameActivityMonitor();
182
+ stream.getTracks().forEach((track) => {
183
+ this.addTrackToCollection(track, stream);
184
+ });
185
+ (_a = this.onConnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
186
+ }
187
+ addTrackToCollection(track, stream) {
188
+ const existingIndex = this.tracks.findIndex((existingTrack) => existingTrack.id === track.id);
189
+ if (existingIndex !== -1) {
190
+ this.tracks.splice(existingIndex, 1);
191
+ }
192
+ this.tracks.push(track);
193
+ this.trackLastFrameTime.set(track.id, Date.now());
194
+ this.setupTrackFrameMonitoring(track, stream);
195
+ this.notifyTrackListeners(track);
196
+ }
197
+ setupTrackFrameMonitoring(track, stream) {
198
+ const extendedTrack = track;
199
+ if (typeof extendedTrack.onFrame === 'function') {
200
+ const originalOnFrame = extendedTrack.onFrame;
201
+ extendedTrack.onFrame = (frame) => {
202
+ this.trackLastFrameTime.set(track.id, Date.now());
203
+ this.isReceiving = true;
204
+ this.notifyFrameListeners(frame);
205
+ originalOnFrame.call(extendedTrack, frame);
206
+ };
207
+ }
208
+ track.onended = () => {
209
+ this.trackLastFrameTime.delete(track.id);
210
+ const index = this.tracks.findIndex((existingTrack) => existingTrack.id === track.id);
211
+ if (index !== -1) {
212
+ this.tracks.splice(index, 1);
213
+ }
214
+ const allEnded = stream.getTracks().every((streamTrack) => streamTrack.readyState === 'ended');
215
+ if (allEnded && !this.isClosed) {
216
+ this.handlePeerDisconnected();
217
+ }
218
+ };
219
+ }
220
+ startFrameActivityMonitor() {
221
+ if (this.frameActivityInterval)
222
+ return;
223
+ this.frameActivityInterval = setInterval(() => {
224
+ this.checkFrameActivity();
225
+ }, 1000);
226
+ }
227
+ stopFrameActivityMonitor() {
228
+ if (this.frameActivityInterval) {
229
+ clearInterval(this.frameActivityInterval);
230
+ this.frameActivityInterval = null;
231
+ }
232
+ }
233
+ checkFrameActivity() {
234
+ if (this.trackLastFrameTime.size === 0)
235
+ return;
236
+ const now = Date.now();
237
+ let hasActiveTrack = false;
238
+ this.trackLastFrameTime.forEach((lastTime) => {
239
+ if (now - lastTime < FRAME_INACTIVITY_TIMEOUT) {
240
+ hasActiveTrack = true;
241
+ }
242
+ });
243
+ if (!hasActiveTrack && this.isReceiving) {
244
+ console.log('[MediaStreamHandler] Frame inactivity detected, connection may be stale');
245
+ this.isReceiving = false;
246
+ if (!this.isClosed && this.pcManager) {
247
+ this.pcManager.reconnect();
248
+ }
249
+ }
250
+ }
251
+ handlePeerConnected() {
252
+ this.isConnecting = false;
253
+ }
254
+ handlePeerDisconnected() {
255
+ var _a;
256
+ this.isReceiving = false;
257
+ (_a = this.onDisconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
258
+ }
259
+ handleReconnected(attempt) {
260
+ var _a;
261
+ console.log(`[MediaStreamHandler] Reconnected after ${attempt} attempts`);
262
+ (_a = this.onReconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this, attempt);
263
+ }
264
+ handleError(error) {
265
+ var _a;
266
+ console.error('[MediaStreamHandler] MediaStream error:', error);
267
+ (_a = this.onErrorCallback) === null || _a === void 0 ? void 0 : _a.call(this, error);
268
+ }
269
+ notifyTrackListeners(track) {
270
+ this.trackListeners.forEach((listener) => {
271
+ try {
272
+ listener(track);
273
+ }
274
+ catch (err) {
275
+ console.error('[MediaStreamHandler] Error in track listener:', err);
276
+ }
277
+ });
278
+ }
279
+ notifyFrameListeners(frameData) {
280
+ this.frameListeners.forEach((listener) => {
281
+ try {
282
+ listener(frameData);
283
+ }
284
+ catch (err) {
285
+ console.error('[MediaStreamHandler] Error in frame listener:', err);
286
+ }
287
+ });
288
+ }
289
+ notifyCloseListeners() {
290
+ this.closeListeners.forEach((listener) => {
291
+ try {
292
+ listener();
293
+ }
294
+ catch (err) {
295
+ console.error('[MediaStreamHandler] Error in close listener:', err);
296
+ }
297
+ });
298
+ }
299
+ createPhygridMediaStream() {
300
+ return {
301
+ getTracks: () => [...this.tracks],
302
+ getStream: () => this.remoteStream,
303
+ addTrack: (track) => {
304
+ var _a;
305
+ if (this.isClosed) {
306
+ console.warn('[MediaStreamHandler] Cannot add track to closed stream');
307
+ return;
308
+ }
309
+ if (this.localStream) {
310
+ const existing = this.localStream.getTrackById(track.id);
311
+ if (existing) {
312
+ this.localStream.removeTrack(existing);
313
+ }
314
+ this.localStream.addTrack(track);
315
+ }
316
+ this.tracks.push(track);
317
+ const pc = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getPeerConnection();
318
+ if (pc && pc.connectionState === 'connected' && this.localStream) {
319
+ const senders = pc.getSenders();
320
+ const existingSender = senders.find((sender) => { var _a; return ((_a = sender.track) === null || _a === void 0 ? void 0 : _a.id) === track.id; });
321
+ if (existingSender) {
322
+ existingSender.replaceTrack(track);
323
+ }
324
+ else {
325
+ pc.addTrack(track, this.localStream);
326
+ }
327
+ }
328
+ this.notifyTrackListeners(track);
329
+ },
330
+ onTrack: (callback) => {
331
+ this.trackListeners.add(callback);
332
+ this.tracks.forEach((track) => {
333
+ try {
334
+ callback(track);
335
+ }
336
+ catch (err) {
337
+ console.error('[MediaStreamHandler] Error in track listener:', err);
338
+ }
339
+ });
340
+ },
341
+ offTrack: (callback) => {
342
+ this.trackListeners.delete(callback);
343
+ },
344
+ onFrame: (callback) => {
345
+ this.frameListeners.add(callback);
346
+ },
347
+ offFrame: (callback) => {
348
+ this.frameListeners.delete(callback);
349
+ },
350
+ onClose: (callback) => {
351
+ this.closeListeners.add(callback);
352
+ },
353
+ offClose: (callback) => {
354
+ this.closeListeners.delete(callback);
355
+ },
356
+ close: () => {
357
+ this.close();
358
+ },
359
+ isReceivingFrames: () => {
360
+ if (this.trackLastFrameTime.size === 0)
361
+ return false;
362
+ const now = Date.now();
363
+ for (const lastTime of this.trackLastFrameTime.values()) {
364
+ if (now - lastTime < FRAME_INACTIVITY_TIMEOUT) {
365
+ return true;
366
+ }
367
+ }
368
+ return false;
369
+ },
370
+ getTargetTwinId: () => {
371
+ return this.targetTwinId;
372
+ },
373
+ getChannelName: () => {
374
+ return this.channelName;
375
+ },
376
+ isConnecting: () => {
377
+ return this.isConnecting;
378
+ },
379
+ };
380
+ }
381
+ }
382
+ exports.MediaStreamHandler = MediaStreamHandler;
383
+ //# sourceMappingURL=media-stream-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-stream-handler.js","sourceRoot":"","sources":["../../../src/services/webrtc/media-stream-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { TwinMessagingInterface, PeerConnectionConfig } from './types';
2
+ export interface PeerConnectionManagerOptions {
3
+ connectionTimeout: number;
4
+ initialRetryDelay: number;
5
+ maxRetryDelay: number;
6
+ }
7
+ export declare class PeerConnectionManager {
8
+ private pc;
9
+ private config;
10
+ private twinMessaging;
11
+ private options;
12
+ private isShuttingDown;
13
+ private isReconnecting;
14
+ private connectionId;
15
+ private pendingCandidates;
16
+ private connectionTimeout;
17
+ private messageHandler;
18
+ constructor(config: PeerConnectionConfig, twinMessaging: TwinMessagingInterface, options?: Partial<PeerConnectionManagerOptions>);
19
+ connect(): Promise<RTCPeerConnection>;
20
+ getPeerConnection(): RTCPeerConnection | null;
21
+ isConnected(): boolean;
22
+ close(): void;
23
+ reconnect(): void;
24
+ private attemptConnection;
25
+ private createPeerConnection;
26
+ private setupIceHandling;
27
+ private setupMessageHandler;
28
+ private handleSignalingMessage;
29
+ private handleOffer;
30
+ private handleAnswer;
31
+ private handleIceCandidate;
32
+ private applyPendingCandidates;
33
+ private createAndSendOffer;
34
+ private sendSignalingMessage;
35
+ private handleConnectionFailure;
36
+ private triggerReconnect;
37
+ private clearConnectionTimeout;
38
+ private cleanup;
39
+ }
40
+ //# sourceMappingURL=peer-connection-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-connection-manager.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/peer-connection-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EAGrB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,4BAA4B;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAA+B;IAE9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,cAAc,CAAyC;gBAG7D,MAAM,EAAE,oBAAoB,EAC5B,aAAa,EAAE,sBAAsB,EACrC,OAAO,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAe/C,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAa3C,iBAAiB,IAAI,iBAAiB,GAAG,IAAI;IAO7C,WAAW,IAAI,OAAO;IAOtB,KAAK,IAAI,IAAI;IAQb,SAAS,IAAI,IAAI;YAWH,iBAAiB;IA2F/B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,mBAAmB;YAyBb,sBAAsB;YA8BtB,WAAW;YA8BX,YAAY;YAWZ,kBAAkB;YAclB,sBAAsB;YActB,kBAAkB;YAalB,oBAAoB;IAYlC,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,OAAO;CAyBhB"}