@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.
- 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,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PhyHubDirectConnection = void 0;
|
|
4
|
+
const socket_io_proxy_1 = require("@phystack/socket.io-proxy");
|
|
5
|
+
const DEFAULT_PHYHUB_URLS = {
|
|
6
|
+
eu: 'https://phyhub.eu.omborigrid.net',
|
|
7
|
+
us: 'https://phyhub.us.omborigrid.net',
|
|
8
|
+
uae: 'https://phyhub.uae.omborigrid.net',
|
|
9
|
+
au: 'https://phyhub.au.omborigrid.net',
|
|
10
|
+
in: 'https://phyhub.in.omborigrid.net',
|
|
11
|
+
qa: 'https://phyhub.qa.omborigrid.net',
|
|
12
|
+
dev: 'https://phyhub.dev.omborigrid.net',
|
|
13
|
+
local: 'http://localhost:3000',
|
|
14
|
+
};
|
|
15
|
+
class PhyHubDirectConnection {
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.socket = null;
|
|
18
|
+
this.config = {
|
|
19
|
+
...config,
|
|
20
|
+
phyhubUrl: config.phyhubUrl || DEFAULT_PHYHUB_URLS.eu,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
static fromEnv() {
|
|
24
|
+
var _a;
|
|
25
|
+
const deviceId = process.env.DEVICE_ID || process.env.PHYGRID_DEVICE_ID;
|
|
26
|
+
const accessKey = process.env.ACCESS_KEY || process.env.PHYGRID_DEVICE_KEY;
|
|
27
|
+
if (!deviceId) {
|
|
28
|
+
throw new Error('[PhyHubDirectConnection] DEVICE_ID or PHYGRID_DEVICE_ID env var required');
|
|
29
|
+
}
|
|
30
|
+
if (!accessKey) {
|
|
31
|
+
throw new Error('[PhyHubDirectConnection] ACCESS_KEY or PHYGRID_DEVICE_KEY env var required');
|
|
32
|
+
}
|
|
33
|
+
const region = (_a = process.env.PHYHUB_REGION) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
34
|
+
const phyhubUrl = process.env.PHYHUB_URL || (region ? DEFAULT_PHYHUB_URLS[region] : undefined);
|
|
35
|
+
if (!phyhubUrl) {
|
|
36
|
+
throw new Error(`[PhyHubDirectConnection] PHYHUB_URL or valid PHYHUB_REGION required. Valid regions: ${Object.keys(DEFAULT_PHYHUB_URLS).join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
return new PhyHubDirectConnection({
|
|
39
|
+
deviceId,
|
|
40
|
+
accessKey,
|
|
41
|
+
phyhubUrl,
|
|
42
|
+
instanceId: process.env.TWIN_ID || process.env.INSTANCE_ID,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static isEnabled() {
|
|
46
|
+
return process.env.PHYHUB_DIRECT === 'true' || process.env.PHYHUB_DIRECT === '1';
|
|
47
|
+
}
|
|
48
|
+
getDeviceId() {
|
|
49
|
+
return this.config.deviceId;
|
|
50
|
+
}
|
|
51
|
+
getInstanceId() {
|
|
52
|
+
return this.config.instanceId || this.config.deviceId;
|
|
53
|
+
}
|
|
54
|
+
async connect() {
|
|
55
|
+
var _a;
|
|
56
|
+
if ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) {
|
|
57
|
+
return this.socket;
|
|
58
|
+
}
|
|
59
|
+
const { deviceId, accessKey, phyhubUrl } = this.config;
|
|
60
|
+
console.log(`[PhyHubDirectConnection] Connecting to ${phyhubUrl}`);
|
|
61
|
+
console.log(`[PhyHubDirectConnection] Device ID: ${deviceId}`);
|
|
62
|
+
this.socket = await (0, socket_io_proxy_1.getSocketIOWithProxy)(phyhubUrl, {
|
|
63
|
+
auth: {
|
|
64
|
+
deviceId,
|
|
65
|
+
accessKey,
|
|
66
|
+
},
|
|
67
|
+
reconnection: true,
|
|
68
|
+
reconnectionAttempts: 5,
|
|
69
|
+
reconnectionDelay: 1000,
|
|
70
|
+
timeout: 10000,
|
|
71
|
+
});
|
|
72
|
+
await new Promise((resolve, reject) => {
|
|
73
|
+
const timeout = setTimeout(() => {
|
|
74
|
+
reject(new Error('Connection timeout'));
|
|
75
|
+
}, 15000);
|
|
76
|
+
this.socket.on('connect', () => {
|
|
77
|
+
clearTimeout(timeout);
|
|
78
|
+
console.log(`[PhyHubDirectConnection] Connected successfully`);
|
|
79
|
+
resolve();
|
|
80
|
+
});
|
|
81
|
+
this.socket.on('connect_error', (error) => {
|
|
82
|
+
clearTimeout(timeout);
|
|
83
|
+
console.error(`[PhyHubDirectConnection] Connection error:`, error.message);
|
|
84
|
+
reject(error);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return this.socket;
|
|
88
|
+
}
|
|
89
|
+
disconnect() {
|
|
90
|
+
if (this.socket) {
|
|
91
|
+
this.socket.disconnect();
|
|
92
|
+
this.socket = null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
getSocket() {
|
|
96
|
+
return this.socket;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.PhyHubDirectConnection = PhyHubDirectConnection;
|
|
100
|
+
exports.default = PhyHubDirectConnection;
|
|
101
|
+
//# sourceMappingURL=phyhub-direct-connection.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phyhub-direct-connection.service.js","sourceRoot":"","sources":["../../src/services/phyhub-direct-connection.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PeerConnectionManagerOptions } from './peer-connection-manager';
|
|
2
|
+
import { TwinMessagingInterface, PhygridDataChannel } from './types';
|
|
3
|
+
export interface DataChannelHandlerOptions extends Partial<PeerConnectionManagerOptions> {
|
|
4
|
+
useStun?: boolean;
|
|
5
|
+
stunServers?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class DataChannelHandler {
|
|
8
|
+
private targetTwinId;
|
|
9
|
+
private channelName;
|
|
10
|
+
private isInitiator;
|
|
11
|
+
private twinMessaging;
|
|
12
|
+
private options;
|
|
13
|
+
private pcManager;
|
|
14
|
+
private dataChannel;
|
|
15
|
+
private isOpen;
|
|
16
|
+
private isClosed;
|
|
17
|
+
private isConnecting;
|
|
18
|
+
private messageListeners;
|
|
19
|
+
private closeListeners;
|
|
20
|
+
private onConnectedCallback?;
|
|
21
|
+
private onDisconnectedCallback?;
|
|
22
|
+
private onErrorCallback?;
|
|
23
|
+
private onReconnectingCallback?;
|
|
24
|
+
private onReconnectedCallback?;
|
|
25
|
+
constructor(targetTwinId: string, isInitiator: boolean, twinMessaging: TwinMessagingInterface, options?: DataChannelHandlerOptions, channelName?: string);
|
|
26
|
+
setCallbacks(callbacks: {
|
|
27
|
+
onConnected?: () => void;
|
|
28
|
+
onDisconnected?: () => void;
|
|
29
|
+
onError?: (error: Error) => void;
|
|
30
|
+
onReconnecting?: (attempt: number) => void;
|
|
31
|
+
onReconnected?: (attempt: number) => void;
|
|
32
|
+
}): void;
|
|
33
|
+
connect(): Promise<PhygridDataChannel>;
|
|
34
|
+
close(): void;
|
|
35
|
+
private setupDataChannel;
|
|
36
|
+
private attachDataChannelHandlers;
|
|
37
|
+
private handleMessage;
|
|
38
|
+
private handlePeerConnected;
|
|
39
|
+
private handlePeerDisconnected;
|
|
40
|
+
private handleReconnected;
|
|
41
|
+
private handleError;
|
|
42
|
+
private notifyCloseListeners;
|
|
43
|
+
private createPhygridDataChannel;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data-channel-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-channel-handler.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/data-channel-handler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAyB,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,yBAA0B,SAAQ,OAAO,CAAC,4BAA4B,CAAC;IAEtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAAsC;IAErD,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,cAAc,CAA8B;IAGpD,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAAa;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,sBAAsB,CAAC,CAA4B;IAC3D,OAAO,CAAC,qBAAqB,CAAC,CAA4B;gBAGxD,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,OAAO,EACpB,aAAa,EAAE,sBAAsB,EACrC,OAAO,GAAE,yBAA8B,EACvC,WAAW,GAAE,MAAkB;IAkBjC,YAAY,CAAC,SAAS,EAAE;QACtB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,GAAG,IAAI;IAWF,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAoE5C,KAAK,IAAI,IAAI;YA6BC,gBAAgB;IAwB9B,OAAO,CAAC,yBAAyB;IAgCjC,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,wBAAwB;CA0DjC"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataChannelHandler = void 0;
|
|
4
|
+
const peer_connection_manager_1 = require("./peer-connection-manager");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
class DataChannelHandler {
|
|
7
|
+
constructor(targetTwinId, isInitiator, twinMessaging, options = {}, channelName = 'default') {
|
|
8
|
+
var _a, _b, _c, _d, _e;
|
|
9
|
+
this.pcManager = null;
|
|
10
|
+
this.dataChannel = null;
|
|
11
|
+
this.isOpen = false;
|
|
12
|
+
this.isClosed = false;
|
|
13
|
+
this.isConnecting = false;
|
|
14
|
+
this.messageListeners = new Set();
|
|
15
|
+
this.closeListeners = new Set();
|
|
16
|
+
this.targetTwinId = targetTwinId;
|
|
17
|
+
this.channelName = channelName;
|
|
18
|
+
this.isInitiator = isInitiator;
|
|
19
|
+
this.twinMessaging = twinMessaging;
|
|
20
|
+
this.options = {
|
|
21
|
+
useStun: (_a = options.useStun) !== null && _a !== void 0 ? _a : types_1.DEFAULT_WEBRTC_OPTIONS.useStun,
|
|
22
|
+
stunServers: (_b = options.stunServers) !== null && _b !== void 0 ? _b : types_1.DEFAULT_WEBRTC_OPTIONS.stunServers,
|
|
23
|
+
connectionTimeout: (_c = options.connectionTimeout) !== null && _c !== void 0 ? _c : types_1.DEFAULT_WEBRTC_OPTIONS.connectionTimeout,
|
|
24
|
+
initialRetryDelay: (_d = options.initialRetryDelay) !== null && _d !== void 0 ? _d : types_1.DEFAULT_WEBRTC_OPTIONS.initialRetryDelay,
|
|
25
|
+
maxRetryDelay: (_e = options.maxRetryDelay) !== null && _e !== void 0 ? _e : types_1.DEFAULT_WEBRTC_OPTIONS.maxRetryDelay,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
setCallbacks(callbacks) {
|
|
29
|
+
this.onConnectedCallback = callbacks.onConnected;
|
|
30
|
+
this.onDisconnectedCallback = callbacks.onDisconnected;
|
|
31
|
+
this.onErrorCallback = callbacks.onError;
|
|
32
|
+
this.onReconnectingCallback = callbacks.onReconnecting;
|
|
33
|
+
this.onReconnectedCallback = callbacks.onReconnected;
|
|
34
|
+
}
|
|
35
|
+
async connect() {
|
|
36
|
+
if (this.isClosed) {
|
|
37
|
+
throw new Error('DataChannelHandler has been closed');
|
|
38
|
+
}
|
|
39
|
+
this.isConnecting = true;
|
|
40
|
+
const channelId = `dc-${this.channelName}-${this.targetTwinId}`;
|
|
41
|
+
const channelPrefix = `dc-${this.channelName}`;
|
|
42
|
+
const pcConfig = {
|
|
43
|
+
targetTwinId: this.targetTwinId,
|
|
44
|
+
isInitiator: this.isInitiator,
|
|
45
|
+
connectionType: 'datachannel',
|
|
46
|
+
channelPrefix,
|
|
47
|
+
useStun: this.options.useStun,
|
|
48
|
+
stunServers: this.options.stunServers,
|
|
49
|
+
onConnected: () => this.handlePeerConnected(),
|
|
50
|
+
onDisconnected: () => this.handlePeerDisconnected(),
|
|
51
|
+
onError: (err) => this.handleError(err),
|
|
52
|
+
onReconnecting: (attempt) => {
|
|
53
|
+
var _a;
|
|
54
|
+
this.isConnecting = true;
|
|
55
|
+
this.isOpen = false;
|
|
56
|
+
this.dataChannel = null;
|
|
57
|
+
(_a = this.onReconnectingCallback) === null || _a === void 0 ? void 0 : _a.call(this, attempt);
|
|
58
|
+
},
|
|
59
|
+
onReconnected: (attempt) => this.handleReconnected(attempt),
|
|
60
|
+
onPeerConnectionCreated: (pc) => {
|
|
61
|
+
if (this.isInitiator) {
|
|
62
|
+
console.log('[DataChannelHandler] Creating data channel before offer');
|
|
63
|
+
this.dataChannel = pc.createDataChannel(channelId);
|
|
64
|
+
this.dataChannel.binaryType = 'arraybuffer';
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log('[DataChannelHandler] Setting up ondatachannel handler');
|
|
68
|
+
pc.ondatachannel = (event) => {
|
|
69
|
+
console.log('[DataChannelHandler] Received data channel from initiator');
|
|
70
|
+
this.dataChannel = event.channel;
|
|
71
|
+
this.dataChannel.binaryType = 'arraybuffer';
|
|
72
|
+
this.attachDataChannelHandlers(this.dataChannel, () => {
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
this.pcManager = new peer_connection_manager_1.PeerConnectionManager(pcConfig, this.twinMessaging, {
|
|
79
|
+
connectionTimeout: this.options.connectionTimeout,
|
|
80
|
+
initialRetryDelay: this.options.initialRetryDelay,
|
|
81
|
+
maxRetryDelay: this.options.maxRetryDelay,
|
|
82
|
+
});
|
|
83
|
+
const pc = await this.pcManager.connect();
|
|
84
|
+
await this.setupDataChannel(pc);
|
|
85
|
+
return this.createPhygridDataChannel();
|
|
86
|
+
}
|
|
87
|
+
close() {
|
|
88
|
+
if (this.isClosed)
|
|
89
|
+
return;
|
|
90
|
+
this.isClosed = true;
|
|
91
|
+
this.isOpen = false;
|
|
92
|
+
if (this.dataChannel) {
|
|
93
|
+
try {
|
|
94
|
+
this.dataChannel.close();
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error('[DataChannelHandler] Error closing data channel:', err);
|
|
98
|
+
}
|
|
99
|
+
this.dataChannel = null;
|
|
100
|
+
}
|
|
101
|
+
if (this.pcManager) {
|
|
102
|
+
this.pcManager.close();
|
|
103
|
+
this.pcManager = null;
|
|
104
|
+
}
|
|
105
|
+
this.notifyCloseListeners();
|
|
106
|
+
this.messageListeners.clear();
|
|
107
|
+
this.closeListeners.clear();
|
|
108
|
+
}
|
|
109
|
+
async setupDataChannel(pc) {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
if (this.dataChannel) {
|
|
112
|
+
this.attachDataChannelHandlers(this.dataChannel, resolve);
|
|
113
|
+
}
|
|
114
|
+
else if (this.isInitiator) {
|
|
115
|
+
const channelId = `channel-${this.targetTwinId}`;
|
|
116
|
+
this.dataChannel = pc.createDataChannel(channelId);
|
|
117
|
+
this.dataChannel.binaryType = 'arraybuffer';
|
|
118
|
+
this.attachDataChannelHandlers(this.dataChannel, resolve);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const existingHandler = pc.ondatachannel;
|
|
122
|
+
pc.ondatachannel = (event) => {
|
|
123
|
+
existingHandler === null || existingHandler === void 0 ? void 0 : existingHandler.call(pc, event);
|
|
124
|
+
resolve();
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
attachDataChannelHandlers(dc, onReady) {
|
|
130
|
+
dc.onopen = () => {
|
|
131
|
+
var _a;
|
|
132
|
+
this.isOpen = true;
|
|
133
|
+
this.isConnecting = false;
|
|
134
|
+
(_a = this.onConnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
135
|
+
onReady();
|
|
136
|
+
};
|
|
137
|
+
dc.onmessage = (event) => {
|
|
138
|
+
this.handleMessage(event.data);
|
|
139
|
+
};
|
|
140
|
+
dc.onclose = () => {
|
|
141
|
+
var _a;
|
|
142
|
+
this.isOpen = false;
|
|
143
|
+
if (!this.isClosed) {
|
|
144
|
+
(_a = this.onDisconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
dc.onerror = (event) => {
|
|
148
|
+
var _a;
|
|
149
|
+
const error = new Error(`DataChannel error: ${((_a = event.error) === null || _a === void 0 ? void 0 : _a.message) || 'Unknown error'}`);
|
|
150
|
+
this.handleError(error);
|
|
151
|
+
};
|
|
152
|
+
if (dc.readyState === 'open') {
|
|
153
|
+
this.isOpen = true;
|
|
154
|
+
this.isConnecting = false;
|
|
155
|
+
onReady();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
handleMessage(data) {
|
|
159
|
+
let parsedData = data;
|
|
160
|
+
if (typeof data === 'string') {
|
|
161
|
+
try {
|
|
162
|
+
parsedData = JSON.parse(data);
|
|
163
|
+
}
|
|
164
|
+
catch (_a) {
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
this.messageListeners.forEach((listener) => {
|
|
168
|
+
try {
|
|
169
|
+
listener(parsedData);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
console.error('[DataChannelHandler] Error in message listener:', err);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
handlePeerConnected() {
|
|
177
|
+
}
|
|
178
|
+
handlePeerDisconnected() {
|
|
179
|
+
var _a;
|
|
180
|
+
this.isOpen = false;
|
|
181
|
+
(_a = this.onDisconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
182
|
+
}
|
|
183
|
+
handleReconnected(attempt) {
|
|
184
|
+
var _a, _b;
|
|
185
|
+
const pc = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getPeerConnection();
|
|
186
|
+
if (pc) {
|
|
187
|
+
this.setupDataChannel(pc).catch((err) => {
|
|
188
|
+
console.error('[DataChannelHandler] Error re-setting up data channel:', err);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
(_b = this.onReconnectedCallback) === null || _b === void 0 ? void 0 : _b.call(this, attempt);
|
|
192
|
+
}
|
|
193
|
+
handleError(error) {
|
|
194
|
+
var _a;
|
|
195
|
+
console.error('[DataChannelHandler] DataChannel error:', error);
|
|
196
|
+
(_a = this.onErrorCallback) === null || _a === void 0 ? void 0 : _a.call(this, error);
|
|
197
|
+
}
|
|
198
|
+
notifyCloseListeners() {
|
|
199
|
+
this.closeListeners.forEach((listener) => {
|
|
200
|
+
try {
|
|
201
|
+
listener();
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
console.error('[DataChannelHandler] Error in close listener:', err);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
createPhygridDataChannel() {
|
|
209
|
+
return {
|
|
210
|
+
send: (data) => {
|
|
211
|
+
var _a;
|
|
212
|
+
let messageToSend;
|
|
213
|
+
if (typeof data === 'object' && !(data instanceof ArrayBuffer)) {
|
|
214
|
+
messageToSend = JSON.stringify(data);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
messageToSend = data;
|
|
218
|
+
}
|
|
219
|
+
if (((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {
|
|
220
|
+
try {
|
|
221
|
+
this.dataChannel.send(messageToSend);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
console.error('[DataChannelHandler] Error sending message:', err);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
onMessage: (callback) => {
|
|
229
|
+
this.messageListeners.add(callback);
|
|
230
|
+
},
|
|
231
|
+
offMessage: (callback) => {
|
|
232
|
+
this.messageListeners.delete(callback);
|
|
233
|
+
},
|
|
234
|
+
onClose: (callback) => {
|
|
235
|
+
this.closeListeners.add(callback);
|
|
236
|
+
},
|
|
237
|
+
offClose: (callback) => {
|
|
238
|
+
this.closeListeners.delete(callback);
|
|
239
|
+
},
|
|
240
|
+
close: () => {
|
|
241
|
+
this.close();
|
|
242
|
+
},
|
|
243
|
+
isOpen: () => {
|
|
244
|
+
var _a;
|
|
245
|
+
return this.isOpen && ((_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.readyState) === 'open';
|
|
246
|
+
},
|
|
247
|
+
isConnecting: () => {
|
|
248
|
+
return this.isConnecting;
|
|
249
|
+
},
|
|
250
|
+
getTargetTwinId: () => {
|
|
251
|
+
return this.targetTwinId;
|
|
252
|
+
},
|
|
253
|
+
getChannelName: () => {
|
|
254
|
+
return this.channelName;
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
exports.DataChannelHandler = DataChannelHandler;
|
|
260
|
+
//# sourceMappingURL=data-channel-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-channel-handler.js","sourceRoot":"","sources":["../../../src/services/webrtc/data-channel-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { WebRTCManager } from './webrtc-manager';
|
|
2
|
+
export { DataChannelHandler } from './data-channel-handler';
|
|
3
|
+
export { MediaStreamHandler } from './media-stream-handler';
|
|
4
|
+
export { PeerConnectionManager } from './peer-connection-manager';
|
|
5
|
+
export { ensureWebRTCGlobals, isWebRTCAvailable, isWebRTCInitialized } from './webrtc-globals';
|
|
6
|
+
export type { TwinMessagingInterface, WebRTCManagerOptions, WebRTCEvent, WebRTCStandardEvent, WebRTCVerboseEvent, WebRTCEventData, WebRTCEventCallback, PhygridDataChannel, PhygridMediaStream, MediaStreamOptions, ExtendedMediaStreamTrack, ConnectionType, ConnectionState, } from './types';
|
|
7
|
+
export { DEFAULT_WEBRTC_OPTIONS } from './types';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG/F,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACd,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_WEBRTC_OPTIONS = exports.isWebRTCInitialized = exports.isWebRTCAvailable = exports.ensureWebRTCGlobals = exports.PeerConnectionManager = exports.MediaStreamHandler = exports.DataChannelHandler = exports.WebRTCManager = void 0;
|
|
4
|
+
var webrtc_manager_1 = require("./webrtc-manager");
|
|
5
|
+
Object.defineProperty(exports, "WebRTCManager", { enumerable: true, get: function () { return webrtc_manager_1.WebRTCManager; } });
|
|
6
|
+
var data_channel_handler_1 = require("./data-channel-handler");
|
|
7
|
+
Object.defineProperty(exports, "DataChannelHandler", { enumerable: true, get: function () { return data_channel_handler_1.DataChannelHandler; } });
|
|
8
|
+
var media_stream_handler_1 = require("./media-stream-handler");
|
|
9
|
+
Object.defineProperty(exports, "MediaStreamHandler", { enumerable: true, get: function () { return media_stream_handler_1.MediaStreamHandler; } });
|
|
10
|
+
var peer_connection_manager_1 = require("./peer-connection-manager");
|
|
11
|
+
Object.defineProperty(exports, "PeerConnectionManager", { enumerable: true, get: function () { return peer_connection_manager_1.PeerConnectionManager; } });
|
|
12
|
+
var webrtc_globals_1 = require("./webrtc-globals");
|
|
13
|
+
Object.defineProperty(exports, "ensureWebRTCGlobals", { enumerable: true, get: function () { return webrtc_globals_1.ensureWebRTCGlobals; } });
|
|
14
|
+
Object.defineProperty(exports, "isWebRTCAvailable", { enumerable: true, get: function () { return webrtc_globals_1.isWebRTCAvailable; } });
|
|
15
|
+
Object.defineProperty(exports, "isWebRTCInitialized", { enumerable: true, get: function () { return webrtc_globals_1.isWebRTCInitialized; } });
|
|
16
|
+
var types_1 = require("./types");
|
|
17
|
+
Object.defineProperty(exports, "DEFAULT_WEBRTC_OPTIONS", { enumerable: true, get: function () { return types_1.DEFAULT_WEBRTC_OPTIONS; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/webrtc/index.ts"],"names":[],"mappings":";;;AAQA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAGtB,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAG9B,mDAA+F;AAAtF,qHAAA,mBAAmB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAAE,qHAAA,mBAAmB,OAAA;AAmBpE,iCAAiD;AAAxC,+GAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PeerConnectionManagerOptions } from './peer-connection-manager';
|
|
2
|
+
import { TwinMessagingInterface, PhygridMediaStream, MediaStreamOptions } from './types';
|
|
3
|
+
export interface MediaStreamHandlerOptions extends Partial<PeerConnectionManagerOptions> {
|
|
4
|
+
useStun?: boolean;
|
|
5
|
+
stunServers?: string[];
|
|
6
|
+
mediaOptions?: MediaStreamOptions;
|
|
7
|
+
}
|
|
8
|
+
export declare class MediaStreamHandler {
|
|
9
|
+
private targetTwinId;
|
|
10
|
+
private channelName;
|
|
11
|
+
private isInitiator;
|
|
12
|
+
private twinMessaging;
|
|
13
|
+
private options;
|
|
14
|
+
private pcManager;
|
|
15
|
+
private remoteStream;
|
|
16
|
+
private localStream;
|
|
17
|
+
private isClosed;
|
|
18
|
+
private isReceiving;
|
|
19
|
+
private isConnecting;
|
|
20
|
+
private tracks;
|
|
21
|
+
private trackLastFrameTime;
|
|
22
|
+
private frameActivityInterval;
|
|
23
|
+
private trackListeners;
|
|
24
|
+
private frameListeners;
|
|
25
|
+
private closeListeners;
|
|
26
|
+
private onConnectedCallback?;
|
|
27
|
+
private onDisconnectedCallback?;
|
|
28
|
+
private onErrorCallback?;
|
|
29
|
+
private onReconnectingCallback?;
|
|
30
|
+
private onReconnectedCallback?;
|
|
31
|
+
constructor(targetTwinId: string, isInitiator: boolean, twinMessaging: TwinMessagingInterface, options?: MediaStreamHandlerOptions, channelName?: string);
|
|
32
|
+
setCallbacks(callbacks: {
|
|
33
|
+
onConnected?: () => void;
|
|
34
|
+
onDisconnected?: () => void;
|
|
35
|
+
onError?: (error: Error) => void;
|
|
36
|
+
onReconnecting?: (attempt: number) => void;
|
|
37
|
+
onReconnected?: (attempt: number) => void;
|
|
38
|
+
}): void;
|
|
39
|
+
connect(): Promise<PhygridMediaStream>;
|
|
40
|
+
close(): void;
|
|
41
|
+
private setupMediaStream;
|
|
42
|
+
private handleRemoteStream;
|
|
43
|
+
private addTrackToCollection;
|
|
44
|
+
private setupTrackFrameMonitoring;
|
|
45
|
+
private startFrameActivityMonitor;
|
|
46
|
+
private stopFrameActivityMonitor;
|
|
47
|
+
private checkFrameActivity;
|
|
48
|
+
private handlePeerConnected;
|
|
49
|
+
private handlePeerDisconnected;
|
|
50
|
+
private handleReconnected;
|
|
51
|
+
private handleError;
|
|
52
|
+
private notifyTrackListeners;
|
|
53
|
+
private notifyFrameListeners;
|
|
54
|
+
private notifyCloseListeners;
|
|
55
|
+
private createPhygridMediaStream;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=media-stream-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/services/webrtc/media-stream-handler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAyB,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAInB,MAAM,SAAS,CAAC;AAIjB,MAAM,WAAW,yBAA0B,SAAQ,OAAO,CAAC,4BAA4B,CAAC;IAEtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAGvB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAEb;IAEF,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,qBAAqB,CAA+B;IAG5D,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,cAAc,CAA8B;IAGpD,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,sBAAsB,CAAC,CAAa;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,sBAAsB,CAAC,CAA4B;IAC3D,OAAO,CAAC,qBAAqB,CAAC,CAA4B;gBAGxD,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,OAAO,EACpB,aAAa,EAAE,sBAAsB,EACrC,OAAO,GAAE,yBAA8B,EACvC,WAAW,GAAE,MAAkB;IA8BjC,YAAY,CAAC,SAAS,EAAE;QACtB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QACjC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,GAAG,IAAI;IAWF,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAoF5C,KAAK,IAAI,IAAI;YA4CC,gBAAgB;IAyC9B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,yBAAyB;IA8BjC,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,wBAAwB;CAqGjC"}
|