@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,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"}