@phystack/hub-client 4.4.52 → 4.4.54

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 +268 -365
  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 +367 -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 +335 -0
  32. package/dist/services/webrtc/peer-connection-manager.js.map +1 -0
  33. package/dist/services/webrtc/types.d.ts +133 -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 +23 -0
  66. package/dist/twin-messaging.d.ts.map +1 -0
  67. package/dist/twin-messaging.js +91 -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 +66 -15
  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 +399 -540
  86. package/src/peripheral-twin.ts +333 -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 +515 -0
  92. package/src/services/webrtc/peer-connection-manager.ts +463 -0
  93. package/src/services/webrtc/types.ts +270 -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 +188 -0
  102. package/src/twin-registry.ts +39 -0
  103. package/src/types/index.ts +3 -0
  104. package/src/types/twin.types.ts +87 -15
  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,367 @@
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
+ console.log('[MediaStreamHandler] Adding transceiver before offer');
78
+ pc.addTransceiver('video', { direction: this.options.mediaOptions.direction });
79
+ }
80
+ else if (this.localStream) {
81
+ console.log('[MediaStreamHandler] Adding local tracks before answer');
82
+ this.localStream.getTracks().forEach((track) => {
83
+ pc.addTrack(track, this.localStream);
84
+ });
85
+ }
86
+ pc.ontrack = (event) => {
87
+ console.log('[MediaStreamHandler] Received remote track');
88
+ if (event.streams && event.streams[0]) {
89
+ this.remoteStream = event.streams[0];
90
+ this.handleRemoteStream(event.streams[0]);
91
+ }
92
+ };
93
+ },
94
+ };
95
+ this.pcManager = new peer_connection_manager_1.PeerConnectionManager(pcConfig, this.twinMessaging, {
96
+ connectionTimeout: this.options.connectionTimeout,
97
+ initialRetryDelay: this.options.initialRetryDelay,
98
+ maxRetryDelay: this.options.maxRetryDelay,
99
+ });
100
+ const pc = await this.pcManager.connect();
101
+ await this.setupMediaStream(pc);
102
+ return this.createPhygridMediaStream();
103
+ }
104
+ close() {
105
+ if (this.isClosed)
106
+ return;
107
+ this.isClosed = true;
108
+ this.isReceiving = false;
109
+ this.stopFrameActivityMonitor();
110
+ this.tracks.forEach((track) => {
111
+ try {
112
+ track.stop();
113
+ }
114
+ catch (err) {
115
+ console.error('[MediaStreamHandler] Error stopping track:', err);
116
+ }
117
+ });
118
+ this.tracks = [];
119
+ if (this.remoteStream) {
120
+ this.remoteStream.getTracks().forEach((track) => track.stop());
121
+ this.remoteStream = null;
122
+ }
123
+ if (this.localStream) {
124
+ this.localStream.getTracks().forEach((track) => track.stop());
125
+ this.localStream = null;
126
+ }
127
+ if (this.pcManager) {
128
+ this.pcManager.close();
129
+ this.pcManager = null;
130
+ }
131
+ this.notifyCloseListeners();
132
+ this.trackListeners.clear();
133
+ this.frameListeners.clear();
134
+ this.closeListeners.clear();
135
+ this.trackLastFrameTime.clear();
136
+ }
137
+ async setupMediaStream(_pc) {
138
+ if (this.options.mediaOptions.direction === 'sendonly') {
139
+ return;
140
+ }
141
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
142
+ return;
143
+ }
144
+ return new Promise((resolve) => {
145
+ const timeout = setTimeout(() => {
146
+ console.log('[MediaStreamHandler] Proceeding without waiting for remote tracks');
147
+ resolve();
148
+ }, 1000);
149
+ const checkForTracks = () => {
150
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
151
+ clearTimeout(timeout);
152
+ resolve();
153
+ }
154
+ };
155
+ const interval = setInterval(() => {
156
+ checkForTracks();
157
+ if (this.remoteStream && this.remoteStream.getTracks().length > 0) {
158
+ clearInterval(interval);
159
+ }
160
+ }, 100);
161
+ setTimeout(() => clearInterval(interval), 1000);
162
+ });
163
+ }
164
+ handleRemoteStream(stream) {
165
+ var _a;
166
+ this.startFrameActivityMonitor();
167
+ stream.getTracks().forEach((track) => {
168
+ this.addTrackToCollection(track, stream);
169
+ });
170
+ (_a = this.onConnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
171
+ }
172
+ addTrackToCollection(track, stream) {
173
+ const existingIndex = this.tracks.findIndex((existingTrack) => existingTrack.id === track.id);
174
+ if (existingIndex !== -1) {
175
+ this.tracks.splice(existingIndex, 1);
176
+ }
177
+ this.tracks.push(track);
178
+ this.trackLastFrameTime.set(track.id, Date.now());
179
+ this.setupTrackFrameMonitoring(track, stream);
180
+ this.notifyTrackListeners(track);
181
+ }
182
+ setupTrackFrameMonitoring(track, stream) {
183
+ const extendedTrack = track;
184
+ if (typeof extendedTrack.onFrame === 'function') {
185
+ const originalOnFrame = extendedTrack.onFrame;
186
+ extendedTrack.onFrame = (frame) => {
187
+ this.trackLastFrameTime.set(track.id, Date.now());
188
+ this.isReceiving = true;
189
+ this.notifyFrameListeners(frame);
190
+ originalOnFrame.call(extendedTrack, frame);
191
+ };
192
+ }
193
+ track.onended = () => {
194
+ this.trackLastFrameTime.delete(track.id);
195
+ const index = this.tracks.findIndex((existingTrack) => existingTrack.id === track.id);
196
+ if (index !== -1) {
197
+ this.tracks.splice(index, 1);
198
+ }
199
+ const allEnded = stream.getTracks().every((streamTrack) => streamTrack.readyState === 'ended');
200
+ if (allEnded && !this.isClosed) {
201
+ this.handlePeerDisconnected();
202
+ }
203
+ };
204
+ }
205
+ startFrameActivityMonitor() {
206
+ if (this.frameActivityInterval)
207
+ return;
208
+ this.frameActivityInterval = setInterval(() => {
209
+ this.checkFrameActivity();
210
+ }, 1000);
211
+ }
212
+ stopFrameActivityMonitor() {
213
+ if (this.frameActivityInterval) {
214
+ clearInterval(this.frameActivityInterval);
215
+ this.frameActivityInterval = null;
216
+ }
217
+ }
218
+ checkFrameActivity() {
219
+ if (this.trackLastFrameTime.size === 0)
220
+ return;
221
+ const now = Date.now();
222
+ let hasActiveTrack = false;
223
+ this.trackLastFrameTime.forEach((lastTime) => {
224
+ if (now - lastTime < FRAME_INACTIVITY_TIMEOUT) {
225
+ hasActiveTrack = true;
226
+ }
227
+ });
228
+ if (!hasActiveTrack && this.isReceiving) {
229
+ console.log('[MediaStreamHandler] Frame inactivity detected, connection may be stale');
230
+ this.isReceiving = false;
231
+ if (!this.isClosed && this.pcManager) {
232
+ this.pcManager.reconnect();
233
+ }
234
+ }
235
+ }
236
+ handlePeerConnected() {
237
+ this.isConnecting = false;
238
+ }
239
+ handlePeerDisconnected() {
240
+ var _a;
241
+ this.isReceiving = false;
242
+ (_a = this.onDisconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
243
+ }
244
+ handleReconnected(attempt) {
245
+ var _a;
246
+ console.log(`[MediaStreamHandler] Reconnected after ${attempt} attempts`);
247
+ (_a = this.onReconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this, attempt);
248
+ }
249
+ handleError(error) {
250
+ var _a;
251
+ console.error('[MediaStreamHandler] MediaStream error:', error);
252
+ (_a = this.onErrorCallback) === null || _a === void 0 ? void 0 : _a.call(this, error);
253
+ }
254
+ notifyTrackListeners(track) {
255
+ this.trackListeners.forEach((listener) => {
256
+ try {
257
+ listener(track);
258
+ }
259
+ catch (err) {
260
+ console.error('[MediaStreamHandler] Error in track listener:', err);
261
+ }
262
+ });
263
+ }
264
+ notifyFrameListeners(frameData) {
265
+ this.frameListeners.forEach((listener) => {
266
+ try {
267
+ listener(frameData);
268
+ }
269
+ catch (err) {
270
+ console.error('[MediaStreamHandler] Error in frame listener:', err);
271
+ }
272
+ });
273
+ }
274
+ notifyCloseListeners() {
275
+ this.closeListeners.forEach((listener) => {
276
+ try {
277
+ listener();
278
+ }
279
+ catch (err) {
280
+ console.error('[MediaStreamHandler] Error in close listener:', err);
281
+ }
282
+ });
283
+ }
284
+ createPhygridMediaStream() {
285
+ return {
286
+ getTracks: () => [...this.tracks],
287
+ addTrack: (track) => {
288
+ var _a;
289
+ if (this.isClosed) {
290
+ console.warn('[MediaStreamHandler] Cannot add track to closed stream');
291
+ return;
292
+ }
293
+ if (this.localStream) {
294
+ const existing = this.localStream.getTrackById(track.id);
295
+ if (existing) {
296
+ this.localStream.removeTrack(existing);
297
+ }
298
+ this.localStream.addTrack(track);
299
+ }
300
+ this.tracks.push(track);
301
+ const pc = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getPeerConnection();
302
+ if (pc && pc.connectionState === 'connected' && this.localStream) {
303
+ const senders = pc.getSenders();
304
+ const existingSender = senders.find((sender) => { var _a; return ((_a = sender.track) === null || _a === void 0 ? void 0 : _a.id) === track.id; });
305
+ if (existingSender) {
306
+ existingSender.replaceTrack(track);
307
+ }
308
+ else {
309
+ pc.addTrack(track, this.localStream);
310
+ }
311
+ }
312
+ this.notifyTrackListeners(track);
313
+ },
314
+ onTrack: (callback) => {
315
+ this.trackListeners.add(callback);
316
+ this.tracks.forEach((track) => {
317
+ try {
318
+ callback(track);
319
+ }
320
+ catch (err) {
321
+ console.error('[MediaStreamHandler] Error in track listener:', err);
322
+ }
323
+ });
324
+ },
325
+ offTrack: (callback) => {
326
+ this.trackListeners.delete(callback);
327
+ },
328
+ onFrame: (callback) => {
329
+ this.frameListeners.add(callback);
330
+ },
331
+ offFrame: (callback) => {
332
+ this.frameListeners.delete(callback);
333
+ },
334
+ onClose: (callback) => {
335
+ this.closeListeners.add(callback);
336
+ },
337
+ offClose: (callback) => {
338
+ this.closeListeners.delete(callback);
339
+ },
340
+ close: () => {
341
+ this.close();
342
+ },
343
+ isReceivingFrames: () => {
344
+ if (this.trackLastFrameTime.size === 0)
345
+ return false;
346
+ const now = Date.now();
347
+ for (const lastTime of this.trackLastFrameTime.values()) {
348
+ if (now - lastTime < FRAME_INACTIVITY_TIMEOUT) {
349
+ return true;
350
+ }
351
+ }
352
+ return false;
353
+ },
354
+ getTargetTwinId: () => {
355
+ return this.targetTwinId;
356
+ },
357
+ getChannelName: () => {
358
+ return this.channelName;
359
+ },
360
+ isConnecting: () => {
361
+ return this.isConnecting;
362
+ },
363
+ };
364
+ }
365
+ }
366
+ exports.MediaStreamHandler = MediaStreamHandler;
367
+ //# 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":";;;AAUA,uEAAgG;AAChG,mCAOiB;AAEjB,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAatC,MAAa,kBAAkB;IAiC7B,YACE,YAAoB,EACpB,WAAoB,EACpB,aAAqC,EACrC,UAAqC,EAAE,EACvC,cAAsB,SAAS;;QA7BzB,cAAS,GAAiC,IAAI,CAAC;QAC/C,iBAAY,GAAuB,IAAI,CAAC;QACxC,gBAAW,GAAuB,IAAI,CAAC;QACvC,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,iBAAY,GAAG,KAAK,CAAC;QAGrB,WAAM,GAAuB,EAAE,CAAC;QAChC,uBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAC;QACpD,0BAAqB,GAA0B,IAAI,CAAC;QAGpD,mBAAc,GAA2C,IAAI,GAAG,EAAE,CAAC;QACnE,mBAAc,GAAkC,IAAI,GAAG,EAAE,CAAC;QAC1D,mBAAc,GAAoB,IAAI,GAAG,EAAE,CAAC;QAgBlD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,8BAAsB,CAAC,OAAO;YAC1D,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,8BAAsB,CAAC,WAAW;YACtE,iBAAiB,EAAE,MAAA,OAAO,CAAC,iBAAiB,mCAAI,8BAAsB,CAAC,iBAAiB;YACxF,iBAAiB,EAAE,MAAA,OAAO,CAAC,iBAAiB,mCAAI,8BAAsB,CAAC,iBAAiB;YACxF,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,8BAAsB,CAAC,aAAa;YAC5E,YAAY,EAAE;gBACZ,SAAS,EAAE,MAAA,MAAA,OAAO,CAAC,YAAY,0CAAE,SAAS,mCAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;gBACrF,WAAW,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,WAAW;aAC/C;SACF,CAAC;QAGF,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,mCAAI,IAAI,CAAC;QACnE,CAAC;IACH,CAAC;IAKD,YAAY,CAAC,SAMZ;QACC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,WAAW,CAAC;QACjD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,cAAc,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC,cAAc,CAAC;QACvD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,aAAa,CAAC;IACvD,CAAC;IAKD,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,MAAM,aAAa,GAAG,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;QAElD,MAAM,QAAQ,GAAyB;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,aAAa;YAC7B,aAAa;YACb,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7C,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACnD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACvC,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;;gBAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAA,IAAI,CAAC,sBAAsB,qDAAG,OAAO,CAAC,CAAC;YACzC,CAAC;YACD,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAE3D,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAErB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;oBACpE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;gBACjF,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBAE5B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;oBACtE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC7C,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAY,CAAC,CAAC;oBACxC,CAAC,CAAC,CAAC;gBACL,CAAC;gBAGD,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;oBAC1D,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACrC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,+CAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE;YACvE,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjD,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;SAC1C,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACzC,CAAC;IAKD,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAGhC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAMO,KAAK,CAAC,gBAAgB,CAAC,GAAsB;QAInD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAGD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QAGD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;gBACjF,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,IAAI,CAAC,CAAC;YAGT,MAAM,cAAc,GAAG,GAAG,EAAE;gBAC1B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClE,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YAGF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,cAAc,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClE,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YAGR,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAAmB;;QAC5C,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,MAAA,IAAI,CAAC,mBAAmB,oDAAI,CAAC;IAC/B,CAAC;IAEO,oBAAoB,CAAC,KAAuB,EAAE,MAAmB;QAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9F,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAGlD,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAG9C,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,yBAAyB,CAAC,KAAuB,EAAE,MAAmB;QAC5E,MAAM,aAAa,GAAG,KAAiC,CAAC;QAGxD,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAChD,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;YAC9C,aAAa,CAAC,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;gBACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC;QACJ,CAAC;QAGD,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;YACtF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;YAGD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC;YAC/F,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,qBAAqB;YAAE,OAAO;QAEvC,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAEO,wBAAwB;QAC9B,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC1C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC3C,IAAI,GAAG,GAAG,QAAQ,GAAG,wBAAwB,EAAE,CAAC;gBAC9C,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACvF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAGzB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAE5B,CAAC;IAEO,sBAAsB;;QAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,MAAA,IAAI,CAAC,sBAAsB,oDAAI,CAAC;IAClC,CAAC;IAEO,iBAAiB,CAAC,OAAe;;QAGvC,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,WAAW,CAAC,CAAC;QAC1E,MAAA,IAAI,CAAC,qBAAqB,qDAAG,OAAO,CAAC,CAAC;IACxC,CAAC;IAEO,WAAW,CAAC,KAAY;;QAC9B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QAChE,MAAA,IAAI,CAAC,eAAe,qDAAG,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,oBAAoB,CAAC,KAAuB;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,SAAc;QACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB;QAC9B,OAAO;YACL,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAEjC,QAAQ,EAAE,CAAC,KAAuB,EAAE,EAAE;;gBACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;oBACvE,OAAO;gBACT,CAAC;gBAGD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACzD,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBACzC,CAAC;oBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;gBAGD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAGxB,MAAM,EAAE,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,iBAAiB,EAAE,CAAC;gBAC/C,IAAI,EAAE,IAAI,EAAE,CAAC,eAAe,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjE,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;oBAChC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,EAAE,MAAK,KAAK,CAAC,EAAE,CAAA,EAAA,CAAC,CAAC;oBAC/E,IAAI,cAAc,EAAE,CAAC;wBACnB,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC;yBAAM,CAAC;wBACN,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,OAAO,EAAE,CAAC,QAA2C,EAAE,EAAE;gBACvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAGlC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC5B,IAAI,CAAC;wBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClB,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,EAAE,CAAC,QAA2C,EAAE,EAAE;gBACxD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,EAAE,CAAC,QAAkC,EAAE,EAAE;gBAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,QAAQ,EAAE,CAAC,QAAkC,EAAE,EAAE;gBAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,EAAE,CAAC,QAAoB,EAAE,EAAE;gBAChC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,QAAQ,EAAE,CAAC,QAAoB,EAAE,EAAE;gBACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;YAED,iBAAiB,EAAE,GAAG,EAAE;gBACtB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAErD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;oBACxD,IAAI,GAAG,GAAG,QAAQ,GAAG,wBAAwB,EAAE,CAAC;wBAC9C,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,eAAe,EAAE,GAAG,EAAE;gBACpB,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;YAED,cAAc,EAAE,GAAG,EAAE;gBACnB,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC;YAED,YAAY,EAAE,GAAG,EAAE;gBACjB,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAjeD,gDAieC"}
@@ -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;YAmBb,sBAAsB;YA8BtB,WAAW;YAiCX,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;CAwBhB"}