@phystack/device-simulator 6.3.5 → 6.3.6

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 (100) hide show
  1. package/dist/command.d.ts +6 -0
  2. package/dist/command.d.ts.map +1 -0
  3. package/dist/command.js +44 -0
  4. package/dist/command.js.map +1 -0
  5. package/dist/commands/list.d.ts +2 -0
  6. package/dist/commands/list.d.ts.map +1 -0
  7. package/dist/commands/list.js +20 -0
  8. package/dist/commands/list.js.map +1 -0
  9. package/dist/commands/remove.d.ts +2 -0
  10. package/dist/commands/remove.d.ts.map +1 -0
  11. package/dist/commands/remove.js +19 -0
  12. package/dist/commands/remove.js.map +1 -0
  13. package/dist/commands/run.d.ts +13 -0
  14. package/dist/commands/run.d.ts.map +1 -0
  15. package/dist/commands/run.js +353 -0
  16. package/dist/commands/run.js.map +1 -0
  17. package/dist/commands/start.d.ts +6 -0
  18. package/dist/commands/start.d.ts.map +1 -0
  19. package/dist/commands/start.js +216 -0
  20. package/dist/commands/start.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/services/dev-token.d.ts +2 -0
  25. package/dist/services/dev-token.d.ts.map +1 -0
  26. package/dist/services/dev-token.js +36 -0
  27. package/dist/services/dev-token.js.map +1 -0
  28. package/dist/services/env.d.ts +2 -0
  29. package/dist/services/env.d.ts.map +1 -0
  30. package/dist/services/env.js +14 -0
  31. package/dist/services/env.js.map +1 -0
  32. package/dist/simulator/index.d.ts +19 -0
  33. package/dist/simulator/index.d.ts.map +1 -0
  34. package/dist/simulator/index.js +153 -0
  35. package/dist/simulator/index.js.map +1 -0
  36. package/dist/simulator/local-server.d.ts +24 -0
  37. package/dist/simulator/local-server.d.ts.map +1 -0
  38. package/dist/simulator/local-server.js +125 -0
  39. package/dist/simulator/local-server.js.map +1 -0
  40. package/dist/simulator/logger.d.ts +11 -0
  41. package/dist/simulator/logger.d.ts.map +1 -0
  42. package/dist/simulator/logger.js +42 -0
  43. package/dist/simulator/logger.js.map +1 -0
  44. package/dist/simulator/message-router.d.ts +34 -0
  45. package/dist/simulator/message-router.d.ts.map +1 -0
  46. package/dist/simulator/message-router.js +388 -0
  47. package/dist/simulator/message-router.js.map +1 -0
  48. package/dist/simulator/twin-cache.d.ts +16 -0
  49. package/dist/simulator/twin-cache.d.ts.map +1 -0
  50. package/dist/simulator/twin-cache.js +54 -0
  51. package/dist/simulator/twin-cache.js.map +1 -0
  52. package/dist/simulator/types.d.ts +48 -0
  53. package/dist/simulator/types.d.ts.map +1 -0
  54. package/dist/simulator/types.js +16 -0
  55. package/dist/simulator/types.js.map +1 -0
  56. package/dist/utils/config-paths.d.ts +12 -0
  57. package/dist/utils/config-paths.d.ts.map +1 -0
  58. package/dist/utils/config-paths.js +33 -0
  59. package/dist/utils/config-paths.js.map +1 -0
  60. package/dist/utils/index.d.ts +3 -0
  61. package/dist/utils/index.d.ts.map +1 -0
  62. package/dist/utils/index.js +37 -0
  63. package/dist/utils/index.js.map +1 -0
  64. package/dist/utils/simulator-config.d.ts +25 -0
  65. package/dist/utils/simulator-config.d.ts.map +1 -0
  66. package/dist/utils/simulator-config.js +140 -0
  67. package/dist/utils/simulator-config.js.map +1 -0
  68. package/dist/utils/tenant-storage.d.ts +14 -0
  69. package/dist/utils/tenant-storage.d.ts.map +1 -0
  70. package/dist/utils/tenant-storage.js +65 -0
  71. package/dist/utils/tenant-storage.js.map +1 -0
  72. package/package.json +5 -2
  73. package/CHANGELOG.md +0 -51
  74. package/build-binary.sh +0 -37
  75. package/src/__tests__/e2e/binary.e2e.test.ts +0 -394
  76. package/src/__tests__/preload.ts +0 -44
  77. package/src/command.ts +0 -66
  78. package/src/commands/__tests__/run-helpers.test.ts +0 -181
  79. package/src/commands/list.ts +0 -25
  80. package/src/commands/remove.ts +0 -16
  81. package/src/commands/run.ts +0 -518
  82. package/src/commands/start.ts +0 -309
  83. package/src/index.ts +0 -46
  84. package/src/services/__tests__/dev-token.test.ts +0 -156
  85. package/src/services/dev-token.ts +0 -52
  86. package/src/services/env.ts +0 -10
  87. package/src/simulator/__tests__/message-router.test.ts +0 -782
  88. package/src/simulator/__tests__/twin-cache.test.ts +0 -129
  89. package/src/simulator/index.ts +0 -200
  90. package/src/simulator/local-server.ts +0 -184
  91. package/src/simulator/logger.ts +0 -44
  92. package/src/simulator/message-router.ts +0 -525
  93. package/src/simulator/twin-cache.ts +0 -61
  94. package/src/simulator/types.ts +0 -53
  95. package/src/utils/__tests__/simulator-config.test.ts +0 -230
  96. package/src/utils/config-paths.ts +0 -38
  97. package/src/utils/index.ts +0 -41
  98. package/src/utils/simulator-config.ts +0 -185
  99. package/src/utils/tenant-storage.ts +0 -106
  100. package/tsconfig.json +0 -12
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalServer = void 0;
4
+ const http_1 = require("http");
5
+ const events_1 = require("events");
6
+ const socket_io_1 = require("socket.io");
7
+ class LocalServer extends events_1.EventEmitter {
8
+ httpServer = null;
9
+ io = null;
10
+ port;
11
+ router = null;
12
+ connectedClients = new Map();
13
+ eventDebounceTimers = new Map();
14
+ constructor(port = 55000) {
15
+ super();
16
+ this.port = port;
17
+ }
18
+ getIO() {
19
+ return this.io;
20
+ }
21
+ setRouter(router) {
22
+ this.router = router;
23
+ }
24
+ start() {
25
+ this.httpServer = (0, http_1.createServer)((_req, res) => {
26
+ res.writeHead(200, { "Content-Type": "application/json" });
27
+ res.end(JSON.stringify({ status: "ok", simulator: true }));
28
+ });
29
+ this.io = new socket_io_1.Server(this.httpServer, {
30
+ cors: { origin: "*" },
31
+ });
32
+ this.io.on("connection", (socket) => {
33
+ this.setupSocketHandlers(socket);
34
+ });
35
+ return new Promise((resolve, reject) => {
36
+ this.httpServer.listen(this.port, "127.0.0.1", () => {
37
+ resolve();
38
+ });
39
+ this.httpServer.on("error", reject);
40
+ });
41
+ }
42
+ setupSocketHandlers(socket) {
43
+ const auth = (socket.handshake.auth || {});
44
+ const twinId = auth.instanceId || auth.moduleName;
45
+ socket.on("simulator", async (payload, callback) => {
46
+ if (this.router) {
47
+ await this.router.handleMessage(socket, "", payload, callback);
48
+ }
49
+ });
50
+ socket.on("ping", (data) => {
51
+ setTimeout(() => {
52
+ socket.emit("pong", { count: (data?.count || 0) + 1 });
53
+ }, 100);
54
+ });
55
+ if (!twinId)
56
+ return;
57
+ if (!this.connectedClients.has(twinId)) {
58
+ this.connectedClients.set(twinId, []);
59
+ }
60
+ this.connectedClients.get(twinId).push(socket);
61
+ this.emitDebounced(twinId);
62
+ socket.join(twinId);
63
+ socket.on("disconnect", () => {
64
+ const sockets = this.connectedClients.get(twinId);
65
+ if (sockets) {
66
+ const idx = sockets.indexOf(socket);
67
+ if (idx !== -1)
68
+ sockets.splice(idx, 1);
69
+ if (sockets.length === 0)
70
+ this.connectedClients.delete(twinId);
71
+ }
72
+ this.emitDebounced(twinId);
73
+ });
74
+ socket.on(twinId, async (payload, callback) => {
75
+ if (this.router) {
76
+ await this.router.handleMessage(socket, twinId, payload, callback);
77
+ }
78
+ });
79
+ socket.on("reconnect", () => {
80
+ socket.join(twinId);
81
+ });
82
+ socket.on("getDeviceTwin", (callback) => {
83
+ if (this.router) {
84
+ const result = this.router.handleLocalMethod("getDeviceInstance", {});
85
+ if (result && typeof result.then === "function") {
86
+ result.then((r) => callback(r?.twin || {}));
87
+ }
88
+ else {
89
+ callback(result?.twin || {});
90
+ }
91
+ }
92
+ });
93
+ }
94
+ stop() {
95
+ return new Promise((resolve) => {
96
+ if (this.io) {
97
+ this.io.disconnectSockets(true);
98
+ this.io.close();
99
+ }
100
+ if (this.httpServer) {
101
+ this.httpServer.close(() => resolve());
102
+ }
103
+ else {
104
+ resolve();
105
+ }
106
+ });
107
+ }
108
+ getConnectedClients() {
109
+ return Array.from(this.connectedClients.keys());
110
+ }
111
+ emitDebounced(twinId) {
112
+ const existing = this.eventDebounceTimers.get(twinId);
113
+ if (existing)
114
+ clearTimeout(existing);
115
+ const timer = setTimeout(() => {
116
+ this.eventDebounceTimers.delete(twinId);
117
+ const isConnected = this.connectedClients.has(twinId);
118
+ const event = isConnected ? "instanceConnected" : "instanceDisconnected";
119
+ this.emit(event, { twinId, activeCount: this.connectedClients.size });
120
+ }, 500);
121
+ this.eventDebounceTimers.set(twinId, timer);
122
+ }
123
+ }
124
+ exports.LocalServer = LocalServer;
125
+ //# sourceMappingURL=local-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-server.js","sourceRoot":"","sources":["../../src/simulator/local-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class SimulatorLogger {
2
+ log(message: string): void;
3
+ info(message: string): void;
4
+ success(message: string): void;
5
+ warn(message: string): void;
6
+ error(message: string): void;
7
+ dim(message: string): void;
8
+ printBanner(lines: string[]): void;
9
+ }
10
+ export declare const simulatorLog: SimulatorLogger;
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/simulator/logger.ts"],"names":[],"mappings":"AAWA,qBAAa,eAAe;IAC1B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;CAKnC;AAED,eAAO,MAAM,YAAY,iBAAwB,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.simulatorLog = exports.SimulatorLogger = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ function timestamp() {
9
+ const now = new Date();
10
+ const h = String(now.getHours()).padStart(2, "0");
11
+ const m = String(now.getMinutes()).padStart(2, "0");
12
+ const s = String(now.getSeconds()).padStart(2, "0");
13
+ return chalk_1.default.dim(`[${h}:${m}:${s}]`);
14
+ }
15
+ class SimulatorLogger {
16
+ log(message) {
17
+ console.log(`${timestamp()} ${message}`);
18
+ }
19
+ info(message) {
20
+ this.log(message);
21
+ }
22
+ success(message) {
23
+ this.log(chalk_1.default.green(message));
24
+ }
25
+ warn(message) {
26
+ this.log(chalk_1.default.yellow(message));
27
+ }
28
+ error(message) {
29
+ this.log(chalk_1.default.red(message));
30
+ }
31
+ dim(message) {
32
+ this.log(chalk_1.default.dim(message));
33
+ }
34
+ printBanner(lines) {
35
+ for (const line of lines) {
36
+ console.log(line);
37
+ }
38
+ }
39
+ }
40
+ exports.SimulatorLogger = SimulatorLogger;
41
+ exports.simulatorLog = new SimulatorLogger();
42
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/simulator/logger.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAE1B,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAa,eAAe;IAC1B,GAAG,CAAC,OAAe;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,KAAe;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AA9BD,0CA8BC;AAEY,QAAA,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Socket } from "socket.io";
2
+ import { TwinCache } from "./twin-cache";
3
+ import { EventPayload, TwinResponse } from "./types";
4
+ export declare class MessageRouter {
5
+ private twinCache;
6
+ private twinSubscriptions;
7
+ private messageDeliveryTracker;
8
+ private readonly MAX_TRACKED_MESSAGES;
9
+ private io;
10
+ constructor(twinCache: TwinCache, io: any);
11
+ handleMessage(socket: Socket, callerTwinId: string, payload: EventPayload, callback?: Function): Promise<any>;
12
+ handleIncomingTwinMessage(payload: EventPayload): void;
13
+ handleIncomingTwinUpdated(twin: TwinResponse): void;
14
+ private respond;
15
+ private handleGetDeviceStatus;
16
+ private handleGetDeviceInstance;
17
+ private handleGetTwinById;
18
+ private handleCreateInstanceTwin;
19
+ private handleCreatePeripheralTwin;
20
+ private handleDeletePeripheralTwin;
21
+ private handleGetPeripheralTwins;
22
+ private handleReportProperties;
23
+ private handleReportDeviceProperties;
24
+ private handleTwinSubscribe;
25
+ private handleTwinUnsubscribe;
26
+ private getSocketsFromARoom;
27
+ private generateMessageId;
28
+ private trackMessageDelivery;
29
+ private hasMessageBeenDelivered;
30
+ private handleTwinMessageFromSubscription;
31
+ private deliverTwinMessageLocally;
32
+ private createLocalTwin;
33
+ }
34
+ //# sourceMappingURL=message-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/simulator/message-router.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAkBnE,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,iBAAiB,CAAuC;IAEhE,OAAO,CAAC,sBAAsB,CAAuC;IAErE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAE7C,OAAO,CAAC,EAAE,CAAM;gBAEJ,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG;IAKnC,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,YAAY,EACrB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,GAAG,CAAC;IA6Gf,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKtD,yBAAyB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IASnD,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,iCAAiC;IAmBzC,OAAO,CAAC,yBAAyB;IAiGjC,OAAO,CAAC,eAAe;CAiBxB"}
@@ -0,0 +1,388 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageRouter = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const uuid_1 = require("uuid");
6
+ const types_1 = require("./types");
7
+ const logger_1 = require("./logger");
8
+ const UNSUPPORTED_METHODS = new Set([
9
+ "setWirelessNetwork",
10
+ "setLanNetwork",
11
+ "reboot",
12
+ "setEnv",
13
+ ]);
14
+ const SIGNAL_METHODS = new Set([
15
+ "sendEventSignal",
16
+ "sendSessionSignal",
17
+ "sendClientSignal",
18
+ ]);
19
+ class MessageRouter {
20
+ twinCache;
21
+ twinSubscriptions = new Map();
22
+ messageDeliveryTracker = new Map();
23
+ MAX_TRACKED_MESSAGES = 1000;
24
+ io;
25
+ constructor(twinCache, io) {
26
+ this.twinCache = twinCache;
27
+ this.io = io;
28
+ }
29
+ async handleMessage(socket, callerTwinId, payload, callback) {
30
+ const { method } = payload;
31
+ logger_1.simulatorLog.dim(`← ${callerTwinId} ${method || "(no method)"} ${payload.twinId ? `→ ${payload.twinId}` : ""}`);
32
+ if (!method) {
33
+ logger_1.simulatorLog.warn(`Received event without method from ${callerTwinId}, ignoring`);
34
+ if (callback)
35
+ callback({ status: "error", message: "No method specified" });
36
+ return undefined;
37
+ }
38
+ if (UNSUPPORTED_METHODS.has(method)) {
39
+ const result = {
40
+ status: "error",
41
+ message: `${method} is not supported in simulator mode`,
42
+ };
43
+ if (callback)
44
+ callback(result);
45
+ return result;
46
+ }
47
+ if (SIGNAL_METHODS.has(method)) {
48
+ const signalData = payload.data || {};
49
+ logger_1.simulatorLog.info(`Signal [${method}] from ${callerTwinId}: ${JSON.stringify(signalData)}`);
50
+ const result = { status: "success" };
51
+ if (callback)
52
+ callback(result);
53
+ return result;
54
+ }
55
+ switch (method) {
56
+ case "getDeviceStatus":
57
+ return this.respond(callback, this.handleGetDeviceStatus());
58
+ case "getInstance":
59
+ case "getDeviceInstance":
60
+ return this.respond(callback, this.handleGetDeviceInstance());
61
+ case "getTwinById":
62
+ return this.respond(callback, this.handleGetTwinById(payload));
63
+ case "ping":
64
+ return this.respond(callback, { status: "success", message: "pong" });
65
+ case "twinMessage":
66
+ this.deliverTwinMessageLocally(callerTwinId, payload, callback);
67
+ return undefined;
68
+ case "twinSubscribe":
69
+ if (payload.twinId) {
70
+ this.handleTwinSubscribe(socket, callerTwinId, payload.twinId);
71
+ logger_1.simulatorLog.info(`twinSubscribe: ${callerTwinId} now listening to ${payload.twinId}`);
72
+ }
73
+ if (callback)
74
+ callback({ status: "success" });
75
+ return undefined;
76
+ case "twinUnsubscribe":
77
+ if (payload.twinId) {
78
+ this.handleTwinUnsubscribe(callerTwinId, payload.twinId);
79
+ }
80
+ if (callback)
81
+ callback({ status: "success" });
82
+ return undefined;
83
+ case "createInstanceTwin":
84
+ return this.respond(callback, this.handleCreateInstanceTwin(payload));
85
+ case "createPeripheralTwin":
86
+ return this.respond(callback, this.handleCreatePeripheralTwin(payload));
87
+ case "deletePeripheralTwin":
88
+ return this.respond(callback, this.handleDeletePeripheralTwin(payload));
89
+ case "getPeripheralTwins":
90
+ return this.respond(callback, this.handleGetPeripheralTwins(payload));
91
+ case "reportScreenTwinProperties":
92
+ case "reportEdgeTwinProperties":
93
+ case "reportPeripheralTwinProperties":
94
+ return this.respond(callback, this.handleReportProperties(method, payload));
95
+ case "reportDeviceTwinProperties":
96
+ return this.respond(callback, this.handleReportDeviceProperties(payload));
97
+ case "reportDeviceJob":
98
+ logger_1.simulatorLog.dim("Device job reported (local mode, no-op)");
99
+ return this.respond(callback, { status: "success" });
100
+ default:
101
+ logger_1.simulatorLog.warn(`Unknown method: ${method}`);
102
+ return this.respond(callback, {
103
+ status: "error",
104
+ message: `Unknown method: ${method}`,
105
+ });
106
+ }
107
+ }
108
+ handleIncomingTwinMessage(payload) {
109
+ this.deliverTwinMessageLocally("", payload);
110
+ }
111
+ handleIncomingTwinUpdated(twin) {
112
+ this.twinCache.updateTwin(twin);
113
+ this.io.to(twin.id).emit("twinMessage", {
114
+ method: "twinUpdated",
115
+ twinId: twin.id,
116
+ data: twin,
117
+ });
118
+ }
119
+ respond(callback, result) {
120
+ if (callback)
121
+ callback(result);
122
+ return result;
123
+ }
124
+ handleGetDeviceStatus() {
125
+ const deviceTwin = this.twinCache.getDeviceTwin();
126
+ const desired = deviceTwin?.properties?.desired || {};
127
+ const reported = deviceTwin?.properties?.reported || {};
128
+ return {
129
+ status: "success",
130
+ socketConnected: true,
131
+ socketAuthenticated: true,
132
+ twins: this.twinCache.getGroupedByType(),
133
+ deviceId: deviceTwin?.deviceId,
134
+ tenantId: deviceTwin?.tenantId,
135
+ displayName: desired.displayName || "Simulator",
136
+ spaceId: desired.spaceId || "",
137
+ gridEnv: desired.env || "development",
138
+ dataResidency: "DEV",
139
+ accessKey: desired.accessKey || "simulator-local-key",
140
+ deviceSerial: desired.deviceSerial || "SIM-LOCAL",
141
+ osVersion: reported.os?.osVersion || "Simulator",
142
+ deviceEnv: desired.env || "development",
143
+ ip: reported.ip || [{ interface: "lo", ipv4: "127.0.0.1", ipv6: "::1" }],
144
+ isConnected: "true",
145
+ provisioningCode: "",
146
+ };
147
+ }
148
+ handleGetDeviceInstance() {
149
+ const deviceTwin = this.twinCache.getDeviceTwin();
150
+ if (deviceTwin) {
151
+ return { status: "success", twin: deviceTwin };
152
+ }
153
+ return { status: "error", message: "Device twin not found" };
154
+ }
155
+ handleGetTwinById(payload) {
156
+ const twinId = payload.data?.twinId;
157
+ if (!twinId) {
158
+ return { status: "error", message: "Twin ID is required" };
159
+ }
160
+ const twin = this.twinCache.getTwin(twinId);
161
+ if (twin) {
162
+ return { status: "success", twin };
163
+ }
164
+ return { status: "error", message: "Twin not found" };
165
+ }
166
+ handleCreateInstanceTwin(payload) {
167
+ const { type, desiredProperties, id } = payload.data || {};
168
+ const deviceTwin = this.twinCache.getDeviceTwin();
169
+ const twin = this.createLocalTwin(type || types_1.TwinTypeEnum.Screen, desiredProperties || {}, deviceTwin, id);
170
+ this.twinCache.addTwin(twin);
171
+ this.io.emit("twinCreated", { data: twin });
172
+ logger_1.simulatorLog.info(`Twin created: ${JSON.stringify(twin)}`);
173
+ return { status: "success", twin };
174
+ }
175
+ handleCreatePeripheralTwin(payload) {
176
+ const { instanceId, name, hardwareId, desiredProperties } = payload.data || {};
177
+ const deviceTwin = this.twinCache.getDeviceTwin();
178
+ const twin = {
179
+ id: (0, uuid_1.v4)(),
180
+ deviceId: deviceTwin?.deviceId || (0, uuid_1.v4)(),
181
+ tenantId: deviceTwin?.tenantId || (0, uuid_1.v4)(),
182
+ type: types_1.TwinTypeEnum.Peripheral,
183
+ properties: {
184
+ desired: { ...desiredProperties, instanceId, name, hardwareId },
185
+ reported: {},
186
+ },
187
+ descriptors: { instanceId, name, hardwareId },
188
+ };
189
+ this.twinCache.addTwin(twin);
190
+ this.io.emit("twinCreated", { data: twin });
191
+ return { status: "success", twin };
192
+ }
193
+ handleDeletePeripheralTwin(payload) {
194
+ const twinId = payload.data?.twinId || payload.twinId;
195
+ if (!twinId) {
196
+ return { status: "error", message: "Twin ID is required" };
197
+ }
198
+ const twin = this.twinCache.getTwin(twinId);
199
+ if (!twin) {
200
+ return { status: "error", message: "Twin not found" };
201
+ }
202
+ this.twinCache.removeTwin(twinId);
203
+ this.io.emit("twinDeleted", { data: twin });
204
+ return { status: "success" };
205
+ }
206
+ handleGetPeripheralTwins(payload) {
207
+ const instanceId = payload.data?.instanceId;
208
+ let peripherals = this.twinCache.getTwinsByType(types_1.TwinTypeEnum.Peripheral);
209
+ if (instanceId) {
210
+ peripherals = peripherals.filter((t) => t.descriptors?.instanceId === instanceId);
211
+ }
212
+ return { status: "success", twins: peripherals };
213
+ }
214
+ handleReportProperties(method, payload) {
215
+ const twinId = payload.twinId;
216
+ const properties = payload.data;
217
+ if (!twinId) {
218
+ return { status: "error", message: "Twin ID is required" };
219
+ }
220
+ const twin = this.twinCache.getTwin(twinId);
221
+ if (!twin) {
222
+ return { status: "error", message: "Twin not found" };
223
+ }
224
+ if (properties) {
225
+ twin.properties.reported = { ...twin.properties.reported, ...properties };
226
+ this.twinCache.updateTwin(twin);
227
+ this.handleIncomingTwinUpdated(twin);
228
+ }
229
+ return { status: "success", twin };
230
+ }
231
+ handleReportDeviceProperties(payload) {
232
+ const properties = payload.data?.properties || payload.data?.reported;
233
+ const deviceTwin = this.twinCache.getDeviceTwin();
234
+ if (deviceTwin && properties) {
235
+ deviceTwin.properties.reported = {
236
+ ...deviceTwin.properties.reported,
237
+ ...properties,
238
+ };
239
+ this.twinCache.updateTwin(deviceTwin);
240
+ logger_1.simulatorLog.dim("Device twin properties reported");
241
+ this.handleIncomingTwinUpdated(deviceTwin);
242
+ }
243
+ return { status: "success" };
244
+ }
245
+ handleTwinSubscribe(socket, subscriberTwinId, targetTwinId) {
246
+ if (!this.twinSubscriptions.has(subscriberTwinId)) {
247
+ this.twinSubscriptions.set(subscriberTwinId, new Set());
248
+ }
249
+ this.twinSubscriptions.get(subscriberTwinId).add(targetTwinId);
250
+ socket.join(targetTwinId);
251
+ logger_1.simulatorLog.dim(`Twin ${subscriberTwinId} subscribed to ${targetTwinId}`);
252
+ }
253
+ handleTwinUnsubscribe(subscriberTwinId, targetTwinId) {
254
+ const subscriptions = this.twinSubscriptions.get(subscriberTwinId);
255
+ if (subscriptions) {
256
+ subscriptions.delete(targetTwinId);
257
+ if (subscriptions.size === 0) {
258
+ this.twinSubscriptions.delete(subscriberTwinId);
259
+ }
260
+ }
261
+ logger_1.simulatorLog.dim(`Twin ${subscriberTwinId} unsubscribed from ${targetTwinId}`);
262
+ }
263
+ getSocketsFromARoom(roomName) {
264
+ const sockets = [];
265
+ const socketIds = this.io.sockets?.adapter?.rooms?.get(roomName);
266
+ socketIds?.forEach((socketId) => {
267
+ const socket = this.io.sockets?.sockets?.get(socketId);
268
+ if (socket)
269
+ sockets.push(socket);
270
+ });
271
+ return sockets;
272
+ }
273
+ generateMessageId(payload) {
274
+ const { twinId, sourceTwinId, method, data } = payload;
275
+ const timestamp = Math.floor(Date.now() / 3000) * 3;
276
+ const dataString = data
277
+ ? JSON.stringify(data, (_, value) => Buffer.isBuffer(value) ? value.toString("base64") : value)
278
+ : "";
279
+ const hash = (0, crypto_1.createHash)("sha256")
280
+ .update(`${twinId}-${sourceTwinId}-${method}-${dataString}-${timestamp}`)
281
+ .digest("hex");
282
+ return hash;
283
+ }
284
+ trackMessageDelivery(messageId, recipientId) {
285
+ if (!this.messageDeliveryTracker.has(messageId)) {
286
+ this.messageDeliveryTracker.set(messageId, new Set());
287
+ if (this.messageDeliveryTracker.size > this.MAX_TRACKED_MESSAGES) {
288
+ const oldestKey = this.messageDeliveryTracker.keys().next().value;
289
+ if (oldestKey) {
290
+ this.messageDeliveryTracker.delete(oldestKey);
291
+ }
292
+ }
293
+ }
294
+ this.messageDeliveryTracker.get(messageId).add(recipientId);
295
+ }
296
+ hasMessageBeenDelivered(messageId, recipientId) {
297
+ return (this.messageDeliveryTracker.get(messageId)?.has(recipientId) || false);
298
+ }
299
+ handleTwinMessageFromSubscription(subscriberTwinId, payload, callback) {
300
+ const { twinId } = payload;
301
+ const roomSockets = this.getSocketsFromARoom(subscriberTwinId);
302
+ roomSockets.forEach((roomSocket) => {
303
+ roomSocket.emit("twinMessage", payload, (response) => {
304
+ if (twinId && payload.data?.type) {
305
+ roomSocket.to(twinId).emit(payload.data.type, response);
306
+ }
307
+ if (callback)
308
+ callback(response);
309
+ });
310
+ });
311
+ }
312
+ deliverTwinMessageLocally(callerTwinId, payload, callback) {
313
+ const { twinId, sourceTwinId } = payload;
314
+ if (!twinId) {
315
+ logger_1.simulatorLog.warn("twinMessage: no target twinId, dropping");
316
+ return;
317
+ }
318
+ const dataType = payload.data?.type || "(no type)";
319
+ const webrtcMatch = dataType.match(/^(.+):(offer|answer|ice)$/);
320
+ if (webrtcMatch) {
321
+ const [, channelPrefix, signalType] = webrtcMatch;
322
+ const isData = channelPrefix.startsWith("dc-");
323
+ const kind = isData ? "DataChannel" : "MediaStream";
324
+ logger_1.simulatorLog.info(`⚡ WebRTC ${signalType} (${kind}): ${sourceTwinId || "?"} → ${twinId}`);
325
+ }
326
+ else {
327
+ logger_1.simulatorLog.info(`twinMessage: ${sourceTwinId || "?"} → ${twinId} [${dataType}]`);
328
+ }
329
+ const messageId = this.generateMessageId(payload);
330
+ this.twinSubscriptions.forEach((subscribedTwins, subscriberTwinId) => {
331
+ if (subscribedTwins.has(twinId) &&
332
+ !this.hasMessageBeenDelivered(messageId, subscriberTwinId)) {
333
+ this.handleTwinMessageFromSubscription(subscriberTwinId, payload, callback);
334
+ this.trackMessageDelivery(messageId, subscriberTwinId);
335
+ }
336
+ });
337
+ const deviceTwins = this.twinCache.getGroupedByType();
338
+ if (deviceTwins[types_1.TwinTypeEnum.Edge]) {
339
+ for (const edgeTwinId of deviceTwins[types_1.TwinTypeEnum.Edge]) {
340
+ const edgeTwin = this.twinCache.getTwin(edgeTwinId);
341
+ if (edgeTwin &&
342
+ edgeTwin.id === twinId &&
343
+ !this.hasMessageBeenDelivered(messageId, edgeTwin.id)) {
344
+ this.io.to(edgeTwin.id).emit("twinMessage", payload, callback);
345
+ this.trackMessageDelivery(messageId, edgeTwin.id);
346
+ }
347
+ }
348
+ }
349
+ if (deviceTwins[types_1.TwinTypeEnum.Screen]) {
350
+ for (const screenTwinId of deviceTwins[types_1.TwinTypeEnum.Screen]) {
351
+ const screenTwin = this.twinCache.getTwin(screenTwinId);
352
+ if (screenTwin &&
353
+ screenTwin.id === twinId &&
354
+ !this.hasMessageBeenDelivered(messageId, screenTwin.id)) {
355
+ this.io.to(screenTwin.id).emit("twinMessage", payload, callback);
356
+ this.trackMessageDelivery(messageId, screenTwin.id);
357
+ }
358
+ }
359
+ }
360
+ if (deviceTwins[types_1.TwinTypeEnum.Peripheral] &&
361
+ deviceTwins[types_1.TwinTypeEnum.Edge]) {
362
+ for (const peripheralTwinId of deviceTwins[types_1.TwinTypeEnum.Peripheral]) {
363
+ const peripheralTwin = this.twinCache.getTwin(peripheralTwinId);
364
+ const instanceId = peripheralTwin?.properties?.desired?.instanceId;
365
+ if (instanceId &&
366
+ deviceTwins[types_1.TwinTypeEnum.Edge].includes(instanceId) &&
367
+ !this.hasMessageBeenDelivered(messageId, instanceId)) {
368
+ this.io.to(instanceId).emit("twinMessage", payload);
369
+ this.trackMessageDelivery(messageId, instanceId);
370
+ }
371
+ }
372
+ }
373
+ }
374
+ createLocalTwin(type, desiredProperties, deviceTwin, reuseId) {
375
+ return {
376
+ id: reuseId || (0, uuid_1.v4)(),
377
+ deviceId: deviceTwin?.deviceId || (0, uuid_1.v4)(),
378
+ tenantId: deviceTwin?.tenantId || (0, uuid_1.v4)(),
379
+ type,
380
+ properties: {
381
+ desired: desiredProperties,
382
+ reported: {},
383
+ },
384
+ };
385
+ }
386
+ }
387
+ exports.MessageRouter = MessageRouter;
388
+ //# sourceMappingURL=message-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/simulator/message-router.ts"],"names":[],"mappings":"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"}