@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.
- package/dist/index.d.ts +22 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +252 -378
- package/dist/index.js.map +1 -1
- package/dist/peripheral-twin.d.ts +34 -0
- package/dist/peripheral-twin.d.ts.map +1 -0
- package/dist/peripheral-twin.js +234 -0
- package/dist/peripheral-twin.js.map +1 -0
- package/dist/services/phyhub-connection.service.d.ts +1 -0
- package/dist/services/phyhub-connection.service.d.ts.map +1 -1
- package/dist/services/phyhub-connection.service.js +17 -0
- package/dist/services/phyhub-connection.service.js.map +1 -1
- package/dist/services/phyhub-direct-connection.service.d.ts +21 -0
- package/dist/services/phyhub-direct-connection.service.d.ts.map +1 -0
- package/dist/services/phyhub-direct-connection.service.js +101 -0
- package/dist/services/phyhub-direct-connection.service.js.map +1 -0
- package/dist/services/webrtc/data-channel-handler.d.ts +45 -0
- package/dist/services/webrtc/data-channel-handler.d.ts.map +1 -0
- package/dist/services/webrtc/data-channel-handler.js +260 -0
- package/dist/services/webrtc/data-channel-handler.js.map +1 -0
- package/dist/services/webrtc/index.d.ts +8 -0
- package/dist/services/webrtc/index.d.ts.map +1 -0
- package/dist/services/webrtc/index.js +18 -0
- package/dist/services/webrtc/index.js.map +1 -0
- package/dist/services/webrtc/media-stream-handler.d.ts +57 -0
- package/dist/services/webrtc/media-stream-handler.d.ts.map +1 -0
- package/dist/services/webrtc/media-stream-handler.js +383 -0
- package/dist/services/webrtc/media-stream-handler.js.map +1 -0
- package/dist/services/webrtc/peer-connection-manager.d.ts +40 -0
- package/dist/services/webrtc/peer-connection-manager.d.ts.map +1 -0
- package/dist/services/webrtc/peer-connection-manager.js +336 -0
- package/dist/services/webrtc/peer-connection-manager.js.map +1 -0
- package/dist/services/webrtc/types.d.ts +134 -0
- package/dist/services/webrtc/types.d.ts.map +1 -0
- package/dist/services/webrtc/types.js +12 -0
- package/dist/services/webrtc/types.js.map +1 -0
- package/dist/services/webrtc/webrtc-globals.d.ts +4 -0
- package/dist/services/webrtc/webrtc-globals.d.ts.map +1 -0
- package/dist/services/webrtc/webrtc-globals.js +72 -0
- package/dist/services/webrtc/webrtc-globals.js.map +1 -0
- package/dist/services/webrtc/webrtc-manager.d.ts +35 -0
- package/dist/services/webrtc/webrtc-manager.d.ts.map +1 -0
- package/dist/services/webrtc/webrtc-manager.js +274 -0
- package/dist/services/webrtc/webrtc-manager.js.map +1 -0
- package/dist/test/communication-comprehensive-test.d.ts +8 -0
- package/dist/test/communication-comprehensive-test.d.ts.map +1 -0
- package/dist/test/communication-comprehensive-test.js +356 -0
- package/dist/test/communication-comprehensive-test.js.map +1 -0
- package/dist/test/webrtc-channel-names-test.d.ts +2 -0
- package/dist/test/webrtc-channel-names-test.d.ts.map +1 -0
- package/dist/test/webrtc-channel-names-test.js +177 -0
- package/dist/test/webrtc-channel-names-test.js.map +1 -0
- package/dist/test/webrtc-comprehensive-test.d.ts +2 -0
- package/dist/test/webrtc-comprehensive-test.d.ts.map +1 -0
- package/dist/test/webrtc-comprehensive-test.js +328 -0
- package/dist/test/webrtc-comprehensive-test.js.map +1 -0
- package/dist/test/webrtc-reconnect-test.d.ts +4 -0
- package/dist/test/webrtc-reconnect-test.d.ts.map +1 -0
- package/dist/test/webrtc-reconnect-test.js +244 -0
- package/dist/test/webrtc-reconnect-test.js.map +1 -0
- package/dist/test/webrtc-test-harness.d.ts +4 -0
- package/dist/test/webrtc-test-harness.d.ts.map +1 -0
- package/dist/test/webrtc-test-harness.js +169 -0
- package/dist/test/webrtc-test-harness.js.map +1 -0
- package/dist/twin-messaging.d.ts +20 -0
- package/dist/twin-messaging.d.ts.map +1 -0
- package/dist/twin-messaging.js +94 -0
- package/dist/twin-messaging.js.map +1 -0
- package/dist/twin-registry.d.ts +9 -0
- package/dist/twin-registry.d.ts.map +1 -0
- package/dist/twin-registry.js +26 -0
- package/dist/twin-registry.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/twin.types.d.ts +62 -14
- package/dist/types/twin.types.d.ts.map +1 -1
- package/dist/types/twin.types.js +8 -1
- package/dist/types/twin.types.js.map +1 -1
- package/docs/webrtc-howto.md +398 -0
- package/docs/webrtc-test.md +330 -0
- package/package.json +3 -3
- package/scripts/webrtc-test.sh +401 -0
- package/src/index.ts +378 -568
- package/src/peripheral-twin.ts +337 -0
- package/src/services/phyhub-connection.service.ts +24 -0
- package/src/services/phyhub-direct-connection.service.ts +159 -0
- package/src/services/webrtc/data-channel-handler.ts +362 -0
- package/src/services/webrtc/index.ts +36 -0
- package/src/services/webrtc/media-stream-handler.ts +536 -0
- package/src/services/webrtc/peer-connection-manager.ts +467 -0
- package/src/services/webrtc/types.ts +273 -0
- package/src/services/webrtc/webrtc-globals.ts +108 -0
- package/src/services/webrtc/webrtc-manager.ts +490 -0
- package/src/test/communication-comprehensive-test.ts +533 -0
- package/src/test/webrtc-channel-names-test.ts +266 -0
- package/src/test/webrtc-comprehensive-test.ts +494 -0
- package/src/test/webrtc-reconnect-test.ts +345 -0
- package/src/test/webrtc-test-harness.ts +254 -0
- package/src/twin-messaging.ts +184 -0
- package/src/twin-registry.ts +39 -0
- package/src/types/index.ts +3 -0
- package/src/types/twin.types.ts +80 -14
- package/dist/services/webrtc/datachannel.d.ts +0 -10
- package/dist/services/webrtc/datachannel.d.ts.map +0 -1
- package/dist/services/webrtc/datachannel.js +0 -290
- package/dist/services/webrtc/datachannel.js.map +0 -1
- package/dist/services/webrtc/mediastream.d.ts +0 -10
- package/dist/services/webrtc/mediastream.d.ts.map +0 -1
- package/dist/services/webrtc/mediastream.js +0 -396
- package/dist/services/webrtc/mediastream.js.map +0 -1
- package/dist/services/webrtc/peer-connection-ice.d.ts +0 -32
- package/dist/services/webrtc/peer-connection-ice.d.ts.map +0 -1
- package/dist/services/webrtc/peer-connection-ice.js +0 -483
- package/dist/services/webrtc/peer-connection-ice.js.map +0 -1
- package/src/services/webrtc/datachannel.ts +0 -421
- package/src/services/webrtc/mediastream.ts +0 -602
- 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 @@
|
|
|
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"}
|