@phystack/hub-client 4.5.19-dev → 4.5.21-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,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PeerConnectionManager = void 0;
4
+ const webrtc_globals_1 = require("./webrtc-globals");
5
+ const types_1 = require("./types");
6
+ class PeerConnectionManager {
7
+ constructor(config, twinMessaging, options = {}) {
8
+ var _a, _b, _c;
9
+ this.pc = null;
10
+ this.isShuttingDown = false;
11
+ this.isReconnecting = false;
12
+ this.connectionId = 0;
13
+ this.pendingCandidates = [];
14
+ this.connectionTimeout = null;
15
+ this.messageHandler = null;
16
+ this.config = config;
17
+ this.twinMessaging = twinMessaging;
18
+ this.options = {
19
+ connectionTimeout: (_a = options.connectionTimeout) !== null && _a !== void 0 ? _a : types_1.DEFAULT_WEBRTC_OPTIONS.connectionTimeout,
20
+ initialRetryDelay: (_b = options.initialRetryDelay) !== null && _b !== void 0 ? _b : types_1.DEFAULT_WEBRTC_OPTIONS.initialRetryDelay,
21
+ maxRetryDelay: (_c = options.maxRetryDelay) !== null && _c !== void 0 ? _c : types_1.DEFAULT_WEBRTC_OPTIONS.maxRetryDelay,
22
+ };
23
+ }
24
+ async connect() {
25
+ await (0, webrtc_globals_1.ensureWebRTCGlobals)();
26
+ if (this.pc && this.pc.connectionState === 'connected') {
27
+ return this.pc;
28
+ }
29
+ return this.attemptConnection(0, this.config.useStun, this.options.initialRetryDelay);
30
+ }
31
+ getPeerConnection() {
32
+ return this.pc;
33
+ }
34
+ isConnected() {
35
+ var _a;
36
+ return ((_a = this.pc) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected';
37
+ }
38
+ close() {
39
+ this.isShuttingDown = true;
40
+ this.cleanup();
41
+ }
42
+ reconnect() {
43
+ if (this.isReconnecting || this.isShuttingDown) {
44
+ return;
45
+ }
46
+ this.triggerReconnect(0);
47
+ }
48
+ async attemptConnection(retryCount, useStun, delay) {
49
+ if (this.isShuttingDown) {
50
+ throw new Error('Connection attempt cancelled - shutting down');
51
+ }
52
+ return new Promise((resolve, reject) => {
53
+ const currentConnectionId = ++this.connectionId;
54
+ let connectionEstablished = false;
55
+ console.log(`[PeerConnectionManager] Creating peer connection (useStun=${useStun}, isInitiator=${this.config.isInitiator})`);
56
+ this.pc = this.createPeerConnection(useStun);
57
+ const pc = this.pc;
58
+ console.log(`[PeerConnectionManager] Peer connection created: ${pc.connectionState}`);
59
+ this.setupMessageHandler(currentConnectionId);
60
+ this.twinMessaging.subscribe(this.config.targetTwinId).catch(err => {
61
+ console.error('[PeerConnectionManager] Failed to subscribe to twin:', err);
62
+ });
63
+ this.setupIceHandling(pc, currentConnectionId);
64
+ pc.onconnectionstatechange = () => {
65
+ var _a, _b;
66
+ (_b = (_a = this.config).onSignalingStateChange) === null || _b === void 0 ? void 0 : _b.call(_a, pc.signalingState);
67
+ if (pc.connectionState === 'connected') {
68
+ connectionEstablished = true;
69
+ this.clearConnectionTimeout();
70
+ this.config.onConnected();
71
+ resolve(pc);
72
+ }
73
+ else if (pc.connectionState === 'failed' ||
74
+ pc.connectionState === 'disconnected' ||
75
+ pc.connectionState === 'closed') {
76
+ if (connectionEstablished && !this.isShuttingDown) {
77
+ this.config.onDisconnected();
78
+ this.triggerReconnect(0);
79
+ }
80
+ else if (!connectionEstablished) {
81
+ this.handleConnectionFailure(retryCount, useStun, delay, resolve, reject);
82
+ }
83
+ }
84
+ };
85
+ pc.oniceconnectionstatechange = () => {
86
+ var _a, _b;
87
+ (_b = (_a = this.config).onIceStateChange) === null || _b === void 0 ? void 0 : _b.call(_a, pc.iceConnectionState);
88
+ if (pc.iceConnectionState === 'failed' && connectionEstablished) {
89
+ this.triggerReconnect(0);
90
+ }
91
+ };
92
+ if (this.config.onPeerConnectionCreated) {
93
+ try {
94
+ const result = this.config.onPeerConnectionCreated(pc);
95
+ if (result instanceof Promise) {
96
+ result.catch(err => console.error('[PeerConnectionManager] Error in onPeerConnectionCreated:', err));
97
+ }
98
+ }
99
+ catch (err) {
100
+ console.error('[PeerConnectionManager] Error in onPeerConnectionCreated:', err);
101
+ }
102
+ }
103
+ if (this.config.isInitiator) {
104
+ this.createAndSendOffer(pc).catch(err => {
105
+ console.error('[PeerConnectionManager] Error creating offer:', err);
106
+ this.handleConnectionFailure(retryCount, useStun, delay, resolve, reject);
107
+ });
108
+ }
109
+ this.connectionTimeout = setTimeout(() => {
110
+ if (!connectionEstablished) {
111
+ console.log(`[PeerConnectionManager] Connection timeout (${useStun ? 'with' : 'without'} STUN)`);
112
+ this.handleConnectionFailure(retryCount, useStun, delay, resolve, reject);
113
+ }
114
+ }, this.options.connectionTimeout);
115
+ });
116
+ }
117
+ createPeerConnection(useStun) {
118
+ const iceServers = useStun
119
+ ? this.config.stunServers.map(url => ({ urls: url }))
120
+ : [];
121
+ return new RTCPeerConnection({ iceServers });
122
+ }
123
+ setupIceHandling(pc, connectionId) {
124
+ pc.onicecandidate = async (event) => {
125
+ var _a, _b, _c;
126
+ if (this.connectionId !== connectionId)
127
+ return;
128
+ console.log('[PeerConnectionManager] ICE candidate:', ((_a = event.candidate) === null || _a === void 0 ? void 0 : _a.candidate) || 'gathering complete');
129
+ (_c = (_b = this.config).onIceCandidate) === null || _c === void 0 ? void 0 : _c.call(_b, event.candidate);
130
+ if (event.candidate) {
131
+ try {
132
+ console.log('[PeerConnectionManager] Sending ICE candidate');
133
+ await this.sendSignalingMessage('ice', event.candidate);
134
+ }
135
+ catch (err) {
136
+ console.error('[PeerConnectionManager] Error sending ICE candidate:', err);
137
+ }
138
+ }
139
+ };
140
+ pc.onicegatheringstatechange = () => {
141
+ console.log('[PeerConnectionManager] ICE gathering state:', pc.iceGatheringState);
142
+ };
143
+ pc.oniceconnectionstatechange = () => {
144
+ console.log('[PeerConnectionManager] ICE connection state:', pc.iceConnectionState);
145
+ };
146
+ }
147
+ setupMessageHandler(connectionId) {
148
+ const ownTwinId = this.twinMessaging.getOwnTwinId();
149
+ if (this.messageHandler) {
150
+ this.twinMessaging.offMessage(ownTwinId, this.messageHandler);
151
+ }
152
+ this.messageHandler = async (message) => {
153
+ if (this.isShuttingDown || this.connectionId !== connectionId)
154
+ return;
155
+ if (message.sourceTwinId !== this.config.targetTwinId)
156
+ return;
157
+ try {
158
+ await this.handleSignalingMessage(message);
159
+ }
160
+ catch (err) {
161
+ console.error('[PeerConnectionManager] Error handling signaling message:', err);
162
+ }
163
+ };
164
+ this.twinMessaging.onMessage(ownTwinId, this.messageHandler);
165
+ }
166
+ async handleSignalingMessage(message) {
167
+ var _a;
168
+ if (!this.pc)
169
+ return;
170
+ const messageType = (_a = message.data) === null || _a === void 0 ? void 0 : _a.type;
171
+ if (!messageType)
172
+ return;
173
+ const prefix = `${this.config.channelPrefix}-`;
174
+ if (!messageType.startsWith(prefix))
175
+ return;
176
+ const signalType = messageType.split(':').pop();
177
+ console.log(`[PeerConnectionManager] Received signaling message: ${signalType}`);
178
+ switch (signalType) {
179
+ case 'offer':
180
+ await this.handleOffer(message.data.data);
181
+ break;
182
+ case 'answer':
183
+ await this.handleAnswer(message.data.data);
184
+ break;
185
+ case 'ice':
186
+ await this.handleIceCandidate(message.data.data);
187
+ break;
188
+ }
189
+ }
190
+ async handleOffer(offer) {
191
+ if (!this.pc || this.config.isInitiator) {
192
+ return;
193
+ }
194
+ const pc = this.pc;
195
+ if (pc.signalingState === 'stable' || pc.signalingState === 'have-remote-offer') {
196
+ if (pc.signalingState === 'have-remote-offer') {
197
+ await pc.setLocalDescription({ type: 'rollback' });
198
+ }
199
+ console.log('[PeerConnectionManager] Setting remote description (offer)');
200
+ await pc.setRemoteDescription(offer);
201
+ console.log(`[PeerConnectionManager] Remote description set. signalingState=${pc.signalingState}`);
202
+ await this.applyPendingCandidates();
203
+ console.log('[PeerConnectionManager] Creating answer...');
204
+ const answer = await pc.createAnswer();
205
+ console.log(`[PeerConnectionManager] Answer created. type=${answer.type}`);
206
+ console.log('[PeerConnectionManager] Setting local description (answer)');
207
+ await pc.setLocalDescription(answer);
208
+ console.log(`[PeerConnectionManager] Local description set. signalingState=${pc.signalingState}, iceGatheringState=${pc.iceGatheringState}`);
209
+ await this.sendSignalingMessage('answer', answer);
210
+ console.log('[PeerConnectionManager] Answer sent');
211
+ }
212
+ }
213
+ async handleAnswer(answer) {
214
+ if (!this.pc || !this.config.isInitiator)
215
+ return;
216
+ const pc = this.pc;
217
+ if (pc.signalingState === 'have-local-offer') {
218
+ await pc.setRemoteDescription(answer);
219
+ await this.applyPendingCandidates();
220
+ }
221
+ }
222
+ async handleIceCandidate(candidate) {
223
+ if (!this.pc)
224
+ return;
225
+ if (this.pc.remoteDescription) {
226
+ try {
227
+ await this.pc.addIceCandidate(candidate);
228
+ }
229
+ catch (err) {
230
+ console.error('[PeerConnectionManager] Error adding ICE candidate:', err);
231
+ }
232
+ }
233
+ else {
234
+ this.pendingCandidates.push(candidate);
235
+ }
236
+ }
237
+ async applyPendingCandidates() {
238
+ if (!this.pc || this.pendingCandidates.length === 0)
239
+ return;
240
+ for (const candidate of this.pendingCandidates) {
241
+ try {
242
+ await this.pc.addIceCandidate(candidate);
243
+ }
244
+ catch (err) {
245
+ console.error('[PeerConnectionManager] Error applying pending ICE candidate:', err);
246
+ }
247
+ }
248
+ this.pendingCandidates = [];
249
+ }
250
+ async createAndSendOffer(pc) {
251
+ console.log('[PeerConnectionManager] Creating offer...');
252
+ const offer = await pc.createOffer();
253
+ console.log(`[PeerConnectionManager] Offer created. type=${offer.type}`);
254
+ console.log('[PeerConnectionManager] Setting local description (offer)');
255
+ await pc.setLocalDescription(offer);
256
+ console.log(`[PeerConnectionManager] Local description set. signalingState=${pc.signalingState}, iceGatheringState=${pc.iceGatheringState}`);
257
+ await this.sendSignalingMessage('offer', offer);
258
+ console.log('[PeerConnectionManager] Offer sent');
259
+ }
260
+ async sendSignalingMessage(type, data) {
261
+ const channelId = `${this.config.channelPrefix}-${this.config.targetTwinId}`;
262
+ await this.twinMessaging.sendMessage(this.config.targetTwinId, {
263
+ type: `${channelId}:${type}`,
264
+ data,
265
+ });
266
+ }
267
+ handleConnectionFailure(retryCount, currentUseStun, delay, resolve, reject) {
268
+ this.cleanup();
269
+ if (this.isShuttingDown) {
270
+ reject(new Error('Connection cancelled - shutting down'));
271
+ return;
272
+ }
273
+ if (retryCount === 0) {
274
+ this.attemptConnection(1, !currentUseStun, this.options.initialRetryDelay)
275
+ .then(resolve)
276
+ .catch(reject);
277
+ return;
278
+ }
279
+ const nextDelay = Math.min(this.options.maxRetryDelay, delay * 2);
280
+ setTimeout(() => {
281
+ this.attemptConnection(retryCount + 1, currentUseStun, nextDelay)
282
+ .then(resolve)
283
+ .catch(reject);
284
+ }, delay);
285
+ }
286
+ triggerReconnect(attempt) {
287
+ var _a, _b;
288
+ if (this.isReconnecting || this.isShuttingDown)
289
+ return;
290
+ this.isReconnecting = true;
291
+ (_b = (_a = this.config).onReconnecting) === null || _b === void 0 ? void 0 : _b.call(_a, attempt);
292
+ this.cleanup();
293
+ const reconnectDelay = Math.min(this.options.maxRetryDelay, this.options.initialRetryDelay * Math.pow(2, attempt));
294
+ setTimeout(() => {
295
+ this.attemptConnection(0, !this.config.useStun, this.options.initialRetryDelay)
296
+ .then(() => {
297
+ var _a, _b;
298
+ this.isReconnecting = false;
299
+ (_b = (_a = this.config).onReconnected) === null || _b === void 0 ? void 0 : _b.call(_a, attempt);
300
+ })
301
+ .catch(err => {
302
+ console.error(`[PeerConnectionManager] Reconnection attempt ${attempt} failed:`, err);
303
+ this.triggerReconnect(attempt + 1);
304
+ });
305
+ }, reconnectDelay);
306
+ }
307
+ clearConnectionTimeout() {
308
+ if (this.connectionTimeout) {
309
+ clearTimeout(this.connectionTimeout);
310
+ this.connectionTimeout = null;
311
+ }
312
+ }
313
+ cleanup() {
314
+ this.clearConnectionTimeout();
315
+ if (this.messageHandler) {
316
+ const ownTwinId = this.twinMessaging.getOwnTwinId();
317
+ this.twinMessaging.offMessage(ownTwinId, this.messageHandler);
318
+ this.messageHandler = null;
319
+ }
320
+ if (this.pc) {
321
+ this.pc.onicecandidate = null;
322
+ this.pc.onconnectionstatechange = null;
323
+ this.pc.oniceconnectionstatechange = null;
324
+ try {
325
+ this.pc.close();
326
+ }
327
+ catch (err) {
328
+ console.error('[PeerConnectionManager] Error closing peer connection:', err);
329
+ }
330
+ this.pc = null;
331
+ }
332
+ this.pendingCandidates = [];
333
+ }
334
+ }
335
+ exports.PeerConnectionManager = PeerConnectionManager;
336
+ //# sourceMappingURL=peer-connection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-connection-manager.js","sourceRoot":"","sources":["../../../src/services/webrtc/peer-connection-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ export interface TwinMessagingInterface {
2
+ sendMessage(targetTwinId: string, data: any): Promise<void>;
3
+ subscribe(twinId: string): Promise<void>;
4
+ onMessage(twinId: string, callback: (msg: any) => void): void;
5
+ offMessage(twinId: string, callback: (msg: any) => void): void;
6
+ getOwnTwinId(): string;
7
+ }
8
+ export interface WebRTCManagerOptions {
9
+ verbose?: boolean;
10
+ useStun?: boolean;
11
+ stunServers?: string[];
12
+ connectionTimeout?: number;
13
+ initialRetryDelay?: number;
14
+ maxRetryDelay?: number;
15
+ }
16
+ export declare const DEFAULT_WEBRTC_OPTIONS: Required<WebRTCManagerOptions>;
17
+ export type WebRTCStandardEvent = 'connected' | 'disconnected' | 'error';
18
+ export type WebRTCVerboseEvent = 'reconnecting' | 'reconnected' | 'ice-state-change' | 'signaling-state-change' | 'ice-candidate';
19
+ export type WebRTCEvent = WebRTCStandardEvent | WebRTCVerboseEvent;
20
+ export interface WebRTCEventData {
21
+ connected: {
22
+ targetTwinId: string;
23
+ connectionType: 'datachannel' | 'mediastream';
24
+ };
25
+ disconnected: {
26
+ targetTwinId: string;
27
+ connectionType: 'datachannel' | 'mediastream';
28
+ };
29
+ error: {
30
+ targetTwinId?: string;
31
+ error: Error;
32
+ };
33
+ reconnecting: {
34
+ targetTwinId: string;
35
+ attempt: number;
36
+ };
37
+ reconnected: {
38
+ targetTwinId: string;
39
+ attempt: number;
40
+ };
41
+ 'ice-state-change': {
42
+ targetTwinId: string;
43
+ state: RTCIceConnectionState;
44
+ };
45
+ 'signaling-state-change': {
46
+ targetTwinId: string;
47
+ state: RTCSignalingState;
48
+ };
49
+ 'ice-candidate': {
50
+ targetTwinId: string;
51
+ candidate: RTCIceCandidate | null;
52
+ };
53
+ }
54
+ export type WebRTCEventCallback<E extends WebRTCEvent = WebRTCEvent> = (data: WebRTCEventData[E]) => void;
55
+ export interface PhygridDataChannel {
56
+ send(data: string | ArrayBuffer | object): void;
57
+ onMessage(callback: (data: any) => void): void;
58
+ offMessage(callback: (data: any) => void): void;
59
+ onClose(callback: () => void): void;
60
+ offClose(callback: () => void): void;
61
+ close(): void;
62
+ isOpen(): boolean;
63
+ isConnecting(): boolean;
64
+ getTargetTwinId(): string;
65
+ getChannelName(): string;
66
+ }
67
+ export interface ExtendedMediaStreamTrack extends MediaStreamTrack {
68
+ onFrame?: (frame: any) => void;
69
+ }
70
+ export interface MediaStreamOptions {
71
+ direction?: RTCRtpTransceiverDirection;
72
+ localStream?: MediaStream;
73
+ channelName?: string;
74
+ }
75
+ export interface PhygridMediaStream {
76
+ getTracks(): MediaStreamTrack[];
77
+ getStream(): MediaStream | null;
78
+ addTrack(track: MediaStreamTrack): void;
79
+ onTrack(callback: (track: MediaStreamTrack) => void): void;
80
+ offTrack(callback: (track: MediaStreamTrack) => void): void;
81
+ onFrame(callback: (frameData: any) => void): void;
82
+ offFrame(callback: (frameData: any) => void): void;
83
+ onClose(callback: () => void): void;
84
+ offClose(callback: () => void): void;
85
+ close(): void;
86
+ isReceivingFrames(): boolean;
87
+ isConnecting(): boolean;
88
+ getTargetTwinId(): string;
89
+ getChannelName(): string;
90
+ }
91
+ export type ConnectionType = 'datachannel' | 'mediastream';
92
+ export interface ConnectionState {
93
+ targetTwinId: string;
94
+ connectionType: ConnectionType;
95
+ isInitiator: boolean;
96
+ pc: RTCPeerConnection | null;
97
+ isConnected: boolean;
98
+ isReconnecting: boolean;
99
+ reconnectAttempts: number;
100
+ }
101
+ export type SignalingMessageType = 'offer' | 'answer' | 'ice';
102
+ export interface SignalingMessage {
103
+ type: string;
104
+ data: RTCSessionDescriptionInit | RTCIceCandidateInit;
105
+ }
106
+ export interface PeerConnectionConfig {
107
+ targetTwinId: string;
108
+ isInitiator: boolean;
109
+ connectionType: ConnectionType;
110
+ channelPrefix: string;
111
+ useStun: boolean;
112
+ stunServers: string[];
113
+ onConnected: () => void;
114
+ onDisconnected: () => void;
115
+ onError: (error: Error) => void;
116
+ onReconnecting?: (attempt: number) => void;
117
+ onReconnected?: (attempt: number) => void;
118
+ onIceStateChange?: (state: RTCIceConnectionState) => void;
119
+ onSignalingStateChange?: (state: RTCSignalingState) => void;
120
+ onIceCandidate?: (candidate: RTCIceCandidate | null) => void;
121
+ onPeerConnectionCreated?: (pc: RTCPeerConnection) => void | Promise<void>;
122
+ }
123
+ export interface DataChannelConfig extends PeerConnectionConfig {
124
+ onMessage: (data: any) => void;
125
+ onOpen: () => void;
126
+ onClose: () => void;
127
+ }
128
+ export interface MediaStreamConfig extends PeerConnectionConfig {
129
+ direction: RTCRtpTransceiverDirection;
130
+ localStream?: MediaStream;
131
+ onTrack: (track: MediaStreamTrack) => void;
132
+ onFrameInactive?: () => void;
133
+ }
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_WEBRTC_OPTIONS = void 0;
4
+ exports.DEFAULT_WEBRTC_OPTIONS = {
5
+ verbose: false,
6
+ useStun: true,
7
+ stunServers: ['stun:stun.l.google.com:19302', 'stun:stun1.l.google.com:19302'],
8
+ connectionTimeout: 15000,
9
+ initialRetryDelay: 1000,
10
+ maxRetryDelay: 30000,
11
+ };
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/webrtc/types.ts"],"names":[],"mappings":";;;AAuDa,QAAA,sBAAsB,GAAmC;IACpE,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,CAAC,8BAA8B,EAAE,+BAA+B,CAAC;IAC9E,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,KAAK;CACrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function ensureWebRTCGlobals(): Promise<void>;
2
+ export declare function isWebRTCInitialized(): boolean;
3
+ export declare function isWebRTCAvailable(): boolean;
4
+ //# sourceMappingURL=webrtc-globals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-globals.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/webrtc-globals.ts"],"names":[],"mappings":"AAkBA,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAazD;AAoDD,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAMD,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureWebRTCGlobals = ensureWebRTCGlobals;
4
+ exports.isWebRTCInitialized = isWebRTCInitialized;
5
+ exports.isWebRTCAvailable = isWebRTCAvailable;
6
+ let isInitialized = false;
7
+ let initializationPromise = null;
8
+ async function ensureWebRTCGlobals() {
9
+ if (isInitialized) {
10
+ return;
11
+ }
12
+ if (initializationPromise) {
13
+ return initializationPromise;
14
+ }
15
+ initializationPromise = doInitialize();
16
+ await initializationPromise;
17
+ }
18
+ async function doInitialize() {
19
+ var _a;
20
+ if (typeof window !== 'undefined') {
21
+ if (typeof RTCPeerConnection === 'undefined') {
22
+ throw new Error('WebRTC is not supported in this browser');
23
+ }
24
+ isInitialized = true;
25
+ return;
26
+ }
27
+ try {
28
+ const wrtc = require('@roamhq/wrtc');
29
+ if (typeof global.MediaStream === 'undefined' && wrtc.MediaStream) {
30
+ global.MediaStream = wrtc.MediaStream;
31
+ }
32
+ if (typeof global.RTCDataChannel === 'undefined' && wrtc.RTCDataChannel) {
33
+ global.RTCDataChannel = wrtc.RTCDataChannel;
34
+ }
35
+ if (typeof global.RTCPeerConnection === 'undefined' && wrtc.RTCPeerConnection) {
36
+ global.RTCPeerConnection = wrtc.RTCPeerConnection;
37
+ }
38
+ if (typeof global.RTCSessionDescription === 'undefined' && wrtc.RTCSessionDescription) {
39
+ global.RTCSessionDescription = wrtc.RTCSessionDescription;
40
+ }
41
+ if (typeof global.RTCIceCandidate === 'undefined' && wrtc.RTCIceCandidate) {
42
+ global.RTCIceCandidate = wrtc.RTCIceCandidate;
43
+ }
44
+ if (typeof global.RTCVideoSource === 'undefined' && ((_a = wrtc.nonstandard) === null || _a === void 0 ? void 0 : _a.RTCVideoSource)) {
45
+ global.RTCVideoSource = wrtc.nonstandard.RTCVideoSource;
46
+ }
47
+ isInitialized = true;
48
+ }
49
+ catch (error) {
50
+ throw new Error(`Failed to initialize WebRTC in Node.js environment. ` +
51
+ `Ensure @roamhq/wrtc is installed: ${error}`);
52
+ }
53
+ }
54
+ function isWebRTCInitialized() {
55
+ return isInitialized;
56
+ }
57
+ function isWebRTCAvailable() {
58
+ if (typeof window !== 'undefined') {
59
+ return typeof RTCPeerConnection !== 'undefined';
60
+ }
61
+ if (isInitialized) {
62
+ return true;
63
+ }
64
+ try {
65
+ require.resolve('@roamhq/wrtc');
66
+ return true;
67
+ }
68
+ catch (_a) {
69
+ return false;
70
+ }
71
+ }
72
+ //# sourceMappingURL=webrtc-globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-globals.js","sourceRoot":"","sources":["../../../src/services/webrtc/webrtc-globals.ts"],"names":[],"mappings":";;AAkBA,kDAaC;AAoDD,kDAEC;AAMD,8CAgBC;AAnGD,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,qBAAqB,GAAyB,IAAI,CAAC;AAShD,KAAK,UAAU,mBAAmB;IAEvC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAGD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,qBAAqB,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,qBAAqB,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,YAAY;;IAEzB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,aAAa,GAAG,IAAI,CAAC;QACrB,OAAO;IACT,CAAC;IAGD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAErC,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACxC,CAAC;QAED,IAAI,OAAQ,MAAc,CAAC,cAAc,KAAK,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAChF,MAAc,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,iBAAiB,KAAK,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9E,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,WAAW,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACtF,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1E,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAChD,CAAC;QAED,IAAI,OAAQ,MAAc,CAAC,cAAc,KAAK,WAAW,KAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,cAAc,CAAA,EAAE,CAAC;YAC7F,MAAc,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QACnE,CAAC;QAED,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,sDAAsD;YACpD,qCAAqC,KAAK,EAAE,CAC/C,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,SAAgB,mBAAmB;IACjC,OAAO,aAAa,CAAC;AACvB,CAAC;AAMD,SAAgB,iBAAiB;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,OAAO,iBAAiB,KAAK,WAAW,CAAC;IAClD,CAAC;IAGD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { TwinMessagingInterface, WebRTCManagerOptions, WebRTCEvent, WebRTCEventCallback, PhygridDataChannel, PhygridMediaStream, MediaStreamOptions } from './types';
2
+ type DataChannelCallback = (channel: PhygridDataChannel, sourceTwinId: string) => void;
3
+ type MediaStreamCallback = (stream: PhygridMediaStream, sourceTwinId: string) => void;
4
+ export declare class WebRTCManager {
5
+ private twinMessaging;
6
+ private options;
7
+ private dataChannelHandlers;
8
+ private mediaStreamHandlers;
9
+ private dataChannelListeners;
10
+ private mediaStreamListeners;
11
+ private eventListeners;
12
+ private isInitialized;
13
+ private isClosed;
14
+ constructor(twinMessaging: TwinMessagingInterface, options?: WebRTCManagerOptions);
15
+ createDataChannel(targetTwinId: string, channelName?: string): Promise<PhygridDataChannel>;
16
+ onDataChannel(callback: DataChannelCallback): void;
17
+ offDataChannel(callback: DataChannelCallback): void;
18
+ acceptDataChannel(sourceTwinId: string, channelName?: string): Promise<PhygridDataChannel>;
19
+ createMediaStream(targetTwinId: string, options?: MediaStreamOptions, channelName?: string): Promise<PhygridMediaStream>;
20
+ onMediaStream(callback: MediaStreamCallback): void;
21
+ offMediaStream(callback: MediaStreamCallback): void;
22
+ acceptMediaStream(sourceTwinId: string, options?: MediaStreamOptions, channelName?: string): Promise<PhygridMediaStream>;
23
+ on<E extends WebRTCEvent>(event: E, callback: WebRTCEventCallback<E>): void;
24
+ off<E extends WebRTCEvent>(event: E, callback: WebRTCEventCallback<E>): void;
25
+ static isAvailable(): boolean;
26
+ getActiveDataChannelCount(): number;
27
+ getActiveMediaStreamCount(): number;
28
+ close(): void;
29
+ private ensureInitialized;
30
+ private setupDataChannelHandlerCallbacks;
31
+ private setupMediaStreamHandlerCallbacks;
32
+ private emit;
33
+ }
34
+ export { TwinMessagingInterface, WebRTCManagerOptions, WebRTCEvent, PhygridDataChannel, PhygridMediaStream, MediaStreamOptions, } from './types';
35
+ //# sourceMappingURL=webrtc-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-manager.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/webrtc-manager.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAEjB,KAAK,mBAAmB,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;AACvF,KAAK,mBAAmB,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtF,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAAiC;IAGhD,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,mBAAmB,CAA8C;IAGzE,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,oBAAoB,CAAuC;IAGnE,OAAO,CAAC,cAAc,CAA8D;IAEpF,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,aAAa,EAAE,sBAAsB,EAAE,OAAO,GAAE,oBAAyB;IAsB/E,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,GAAE,MAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8C3G,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAOlD,cAAc,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAU7C,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,GAAE,MAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyDrG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAAkB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IA8C9B,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAOlD,cAAc,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAW7C,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAAkB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IAkE9B,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAU3E,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAc5E,MAAM,CAAC,WAAW,IAAI,OAAO;IAO7B,yBAAyB,IAAI,MAAM;IAOnC,yBAAyB,IAAI,MAAM;IAOnC,KAAK,IAAI,IAAI;YAmCC,iBAAiB;IAO/B,OAAO,CAAC,gCAAgC;IA2BxC,OAAO,CAAC,gCAAgC;IA2BxC,OAAO,CAAC,IAAI;CAYb;AAGD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}