@phystack/device-simulator 6.3.4 → 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 (101) 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 +1 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/services/dev-token.d.ts +2 -0
  26. package/dist/services/dev-token.d.ts.map +1 -0
  27. package/dist/services/dev-token.js +36 -0
  28. package/dist/services/dev-token.js.map +1 -0
  29. package/dist/services/env.d.ts +2 -0
  30. package/dist/services/env.d.ts.map +1 -0
  31. package/dist/services/env.js +14 -0
  32. package/dist/services/env.js.map +1 -0
  33. package/dist/simulator/index.d.ts +19 -0
  34. package/dist/simulator/index.d.ts.map +1 -0
  35. package/dist/simulator/index.js +153 -0
  36. package/dist/simulator/index.js.map +1 -0
  37. package/dist/simulator/local-server.d.ts +24 -0
  38. package/dist/simulator/local-server.d.ts.map +1 -0
  39. package/dist/simulator/local-server.js +125 -0
  40. package/dist/simulator/local-server.js.map +1 -0
  41. package/dist/simulator/logger.d.ts +11 -0
  42. package/dist/simulator/logger.d.ts.map +1 -0
  43. package/dist/simulator/logger.js +42 -0
  44. package/dist/simulator/logger.js.map +1 -0
  45. package/dist/simulator/message-router.d.ts +34 -0
  46. package/dist/simulator/message-router.d.ts.map +1 -0
  47. package/dist/simulator/message-router.js +388 -0
  48. package/dist/simulator/message-router.js.map +1 -0
  49. package/dist/simulator/twin-cache.d.ts +16 -0
  50. package/dist/simulator/twin-cache.d.ts.map +1 -0
  51. package/dist/simulator/twin-cache.js +54 -0
  52. package/dist/simulator/twin-cache.js.map +1 -0
  53. package/dist/simulator/types.d.ts +48 -0
  54. package/dist/simulator/types.d.ts.map +1 -0
  55. package/dist/simulator/types.js +16 -0
  56. package/dist/simulator/types.js.map +1 -0
  57. package/dist/utils/config-paths.d.ts +12 -0
  58. package/dist/utils/config-paths.d.ts.map +1 -0
  59. package/dist/utils/config-paths.js +33 -0
  60. package/dist/utils/config-paths.js.map +1 -0
  61. package/dist/utils/index.d.ts +3 -0
  62. package/dist/utils/index.d.ts.map +1 -0
  63. package/dist/utils/index.js +37 -0
  64. package/dist/utils/index.js.map +1 -0
  65. package/dist/utils/simulator-config.d.ts +25 -0
  66. package/dist/utils/simulator-config.d.ts.map +1 -0
  67. package/dist/utils/simulator-config.js +140 -0
  68. package/dist/utils/simulator-config.js.map +1 -0
  69. package/dist/utils/tenant-storage.d.ts +14 -0
  70. package/dist/utils/tenant-storage.d.ts.map +1 -0
  71. package/dist/utils/tenant-storage.js +65 -0
  72. package/dist/utils/tenant-storage.js.map +1 -0
  73. package/package.json +5 -2
  74. package/CHANGELOG.md +0 -42
  75. package/build-binary.sh +0 -37
  76. package/src/__tests__/e2e/binary.e2e.test.ts +0 -394
  77. package/src/__tests__/preload.ts +0 -44
  78. package/src/command.ts +0 -66
  79. package/src/commands/__tests__/run-helpers.test.ts +0 -181
  80. package/src/commands/list.ts +0 -25
  81. package/src/commands/remove.ts +0 -16
  82. package/src/commands/run.ts +0 -518
  83. package/src/commands/start.ts +0 -309
  84. package/src/index.ts +0 -45
  85. package/src/services/__tests__/dev-token.test.ts +0 -156
  86. package/src/services/dev-token.ts +0 -52
  87. package/src/services/env.ts +0 -10
  88. package/src/simulator/__tests__/message-router.test.ts +0 -782
  89. package/src/simulator/__tests__/twin-cache.test.ts +0 -129
  90. package/src/simulator/index.ts +0 -200
  91. package/src/simulator/local-server.ts +0 -184
  92. package/src/simulator/logger.ts +0 -44
  93. package/src/simulator/message-router.ts +0 -525
  94. package/src/simulator/twin-cache.ts +0 -61
  95. package/src/simulator/types.ts +0 -53
  96. package/src/utils/__tests__/simulator-config.test.ts +0 -230
  97. package/src/utils/config-paths.ts +0 -38
  98. package/src/utils/index.ts +0 -41
  99. package/src/utils/simulator-config.ts +0 -185
  100. package/src/utils/tenant-storage.ts +0 -106
  101. package/tsconfig.json +0 -12
@@ -0,0 +1,16 @@
1
+ import { TwinResponse } from "./types";
2
+ export declare class TwinCache {
3
+ private twins;
4
+ populate(twins: TwinResponse[]): void;
5
+ getTwin(id: string): TwinResponse | undefined;
6
+ getDeviceTwin(): TwinResponse | undefined;
7
+ getAllTwins(): TwinResponse[];
8
+ getAllTwinIds(): string[];
9
+ hasTwin(id: string): boolean;
10
+ updateTwin(twin: TwinResponse): void;
11
+ addTwin(twin: TwinResponse): void;
12
+ removeTwin(id: string): void;
13
+ getTwinsByType(type: string): TwinResponse[];
14
+ getGroupedByType(): Record<string, string[]>;
15
+ }
16
+ //# sourceMappingURL=twin-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twin-cache.d.ts","sourceRoot":"","sources":["../../src/simulator/twin-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAErD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAwC;IAErD,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAMrC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI7C,aAAa,IAAI,YAAY,GAAG,SAAS;IAOzC,WAAW,IAAI,YAAY,EAAE;IAI7B,aAAa,IAAI,MAAM,EAAE;IAIzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIpC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIjC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE;IAK5C,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAQ7C"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TwinCache = void 0;
4
+ const types_1 = require("./types");
5
+ class TwinCache {
6
+ twins = new Map();
7
+ populate(twins) {
8
+ for (const twin of twins) {
9
+ this.twins.set(twin.id, twin);
10
+ }
11
+ }
12
+ getTwin(id) {
13
+ return this.twins.get(id);
14
+ }
15
+ getDeviceTwin() {
16
+ for (const twin of this.twins.values()) {
17
+ if (twin.type === types_1.TwinTypeEnum.Device)
18
+ return twin;
19
+ }
20
+ return undefined;
21
+ }
22
+ getAllTwins() {
23
+ return Array.from(this.twins.values());
24
+ }
25
+ getAllTwinIds() {
26
+ return Array.from(this.twins.keys());
27
+ }
28
+ hasTwin(id) {
29
+ return this.twins.has(id);
30
+ }
31
+ updateTwin(twin) {
32
+ this.twins.set(twin.id, twin);
33
+ }
34
+ addTwin(twin) {
35
+ this.twins.set(twin.id, twin);
36
+ }
37
+ removeTwin(id) {
38
+ this.twins.delete(id);
39
+ }
40
+ getTwinsByType(type) {
41
+ return Array.from(this.twins.values()).filter((t) => t.type === type);
42
+ }
43
+ getGroupedByType() {
44
+ const grouped = {};
45
+ for (const twin of this.twins.values()) {
46
+ if (!grouped[twin.type])
47
+ grouped[twin.type] = [];
48
+ grouped[twin.type].push(twin.id);
49
+ }
50
+ return grouped;
51
+ }
52
+ }
53
+ exports.TwinCache = TwinCache;
54
+ //# sourceMappingURL=twin-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"twin-cache.js","sourceRoot":"","sources":["../../src/simulator/twin-cache.ts"],"names":[],"mappings":";;;AACA,mCAAqD;AAErD,MAAa,SAAS;IACZ,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAC;IAErD,QAAQ,CAAC,KAAqB;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,aAAa;QACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAY,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;QACrD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,UAAU,CAAC,IAAkB;QAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAkB;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxE,CAAC;IAGD,gBAAgB;QACd,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAzDD,8BAyDC"}
@@ -0,0 +1,48 @@
1
+ export interface SimulatorConfig {
2
+ port: number;
3
+ deviceDisplayName?: string;
4
+ }
5
+ export interface DeviceConfig {
6
+ deviceId: string;
7
+ tenantId: string;
8
+ deviceTwinId: string;
9
+ }
10
+ export declare enum AppTypeEnum {
11
+ Screen = "screen",
12
+ Edge = "edge"
13
+ }
14
+ export interface AppConfig {
15
+ name: string;
16
+ type: AppTypeEnum;
17
+ path: string;
18
+ twinId?: string;
19
+ devCommand: string;
20
+ }
21
+ export declare enum TwinTypeEnum {
22
+ Device = "Device",
23
+ Screen = "Screen",
24
+ Edge = "Edge",
25
+ Peripheral = "Peripheral"
26
+ }
27
+ export interface TwinResponse {
28
+ id: string;
29
+ deviceId: string;
30
+ tenantId: string;
31
+ type: TwinTypeEnum;
32
+ properties: {
33
+ desired: Record<string, any>;
34
+ reported: Record<string, any>;
35
+ };
36
+ descriptors?: Record<string, any>;
37
+ status?: string;
38
+ }
39
+ export interface EventPayload<T = any> {
40
+ twinId?: string;
41
+ deviceId?: string;
42
+ sourceTwinId?: string;
43
+ sourceDeviceId?: string;
44
+ method?: string;
45
+ data?: T;
46
+ [key: string]: any;
47
+ }
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/simulator/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TwinTypeEnum = exports.AppTypeEnum = void 0;
4
+ var AppTypeEnum;
5
+ (function (AppTypeEnum) {
6
+ AppTypeEnum["Screen"] = "screen";
7
+ AppTypeEnum["Edge"] = "edge";
8
+ })(AppTypeEnum || (exports.AppTypeEnum = AppTypeEnum = {}));
9
+ var TwinTypeEnum;
10
+ (function (TwinTypeEnum) {
11
+ TwinTypeEnum["Device"] = "Device";
12
+ TwinTypeEnum["Screen"] = "Screen";
13
+ TwinTypeEnum["Edge"] = "Edge";
14
+ TwinTypeEnum["Peripheral"] = "Peripheral";
15
+ })(TwinTypeEnum || (exports.TwinTypeEnum = TwinTypeEnum = {}));
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/simulator/types.ts"],"names":[],"mappings":";;;AAWA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,4BAAa,CAAA;AACf,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAUD,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,6BAAa,CAAA;IACb,yCAAyB,CAAA;AAC3B,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB"}
@@ -0,0 +1,12 @@
1
+ export declare const CONFIG_DIR: string;
2
+ export declare const TENANT_FILE: string;
3
+ export declare const CREDENTIALS_FILE: string;
4
+ export declare const VALIDATION_CACHE_FILE: string;
5
+ export declare const EMULATED_DEVICE_FILE: string;
6
+ export declare const DEVELOPER_TOKEN_FILE: string;
7
+ export declare const SIMULATORS_DIR: string;
8
+ export declare const SIMULATOR_DIR: string;
9
+ export declare const VMS_DIR: string;
10
+ export declare const CACHE_DIR: string;
11
+ export declare function getAuthFilePath(gridEnv?: string): string;
12
+ //# sourceMappingURL=config-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-paths.d.ts","sourceRoot":"","sources":["../../src/utils/config-paths.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,QAAqD,CAAC;AAE7E,eAAO,MAAM,WAAW,QAAuC,CAAC;AAChE,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,qBAAqB,QAGjC,CAAC;AACF,eAAO,MAAM,oBAAoB,QAAuC,CAAC;AACzE,eAAO,MAAM,oBAAoB,QAGhC,CAAC;AAEF,eAAO,MAAM,cAAc,QAAsC,CAAC;AAClE,eAAO,MAAM,aAAa,QAAqC,CAAC;AAChE,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAiC,CAAC;AAExD,wBAAgB,eAAe,CAAC,OAAO,SAAK,GAAG,MAAM,CAYpD"}
@@ -0,0 +1,33 @@
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.CACHE_DIR = exports.VMS_DIR = exports.SIMULATOR_DIR = exports.SIMULATORS_DIR = exports.DEVELOPER_TOKEN_FILE = exports.EMULATED_DEVICE_FILE = exports.VALIDATION_CACHE_FILE = exports.CREDENTIALS_FILE = exports.TENANT_FILE = exports.CONFIG_DIR = void 0;
7
+ exports.getAuthFilePath = getAuthFilePath;
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ exports.CONFIG_DIR = path_1.default.join(os_1.default.homedir(), ".config", "phystack-cli");
11
+ exports.TENANT_FILE = path_1.default.join(exports.CONFIG_DIR, "tenant.json");
12
+ exports.CREDENTIALS_FILE = path_1.default.join(exports.CONFIG_DIR, "registry-credentials.json");
13
+ exports.VALIDATION_CACHE_FILE = path_1.default.join(exports.CONFIG_DIR, "credential-validation-cache.json");
14
+ exports.EMULATED_DEVICE_FILE = path_1.default.join(exports.CONFIG_DIR, "device.json");
15
+ exports.DEVELOPER_TOKEN_FILE = path_1.default.join(exports.CONFIG_DIR, "developer-token.json");
16
+ exports.SIMULATORS_DIR = path_1.default.join(exports.CONFIG_DIR, "simulators");
17
+ exports.SIMULATOR_DIR = path_1.default.join(exports.CONFIG_DIR, "simulator");
18
+ exports.VMS_DIR = path_1.default.join(exports.CONFIG_DIR, "vms");
19
+ exports.CACHE_DIR = path_1.default.join(exports.CONFIG_DIR, "cache");
20
+ function getAuthFilePath(gridEnv = "") {
21
+ const formatted = gridEnv.toUpperCase();
22
+ switch (formatted) {
23
+ case "LOCAL":
24
+ return path_1.default.join(exports.CONFIG_DIR, "auth-local");
25
+ case "DEV":
26
+ return path_1.default.join(exports.CONFIG_DIR, "auth-dev");
27
+ case "QA":
28
+ return path_1.default.join(exports.CONFIG_DIR, "auth-qa");
29
+ default:
30
+ return path_1.default.join(exports.CONFIG_DIR, "auth");
31
+ }
32
+ }
33
+ //# sourceMappingURL=config-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-paths.js","sourceRoot":"","sources":["../../src/utils/config-paths.ts"],"names":[],"mappings":";;;;;;AAyBA,0CAYC;AArCD,gDAAwB;AACxB,4CAAoB;AAEP,QAAA,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAEhE,QAAA,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AACnD,QAAA,gBAAgB,GAAG,cAAI,CAAC,IAAI,CACvC,kBAAU,EACV,2BAA2B,CAC5B,CAAC;AACW,QAAA,qBAAqB,GAAG,cAAI,CAAC,IAAI,CAC5C,kBAAU,EACV,kCAAkC,CACnC,CAAC;AACW,QAAA,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,aAAa,CAAC,CAAC;AAC5D,QAAA,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAC3C,kBAAU,EACV,sBAAsB,CACvB,CAAC;AAEW,QAAA,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,YAAY,CAAC,CAAC;AACrD,QAAA,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,WAAW,CAAC,CAAC;AACnD,QAAA,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,OAAO,CAAC,CAAC;AAExD,SAAgB,eAAe,CAAC,OAAO,GAAG,EAAE;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACxC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,YAAY,CAAC,CAAC;QAC7C,KAAK,KAAK;YACR,OAAO,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,UAAU,CAAC,CAAC;QAC3C,KAAK,IAAI;YACP,OAAO,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,SAAS,CAAC,CAAC;QAC1C;YACE,OAAO,cAAI,CAAC,IAAI,CAAC,kBAAU,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const getPackageVersion: () => string;
2
+ export declare const handleError: <T = any>(cb: any) => (...args: any[]) => Promise<T>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,iBAAiB,cAAuB,CAAC;AAEtD,eAAO,MAAM,WAAW,GACrB,CAAC,GAAG,GAAG,EAAE,OAAE,MACL,GAAG,WAAI,eAQb,CAAC"}
@@ -0,0 +1,37 @@
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.handleError = exports.getPackageVersion = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ function resolvePackageVersion() {
11
+ if (typeof __PKG_VERSION__ !== "undefined") {
12
+ return __PKG_VERSION__;
13
+ }
14
+ try {
15
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, "../../package.json"), "utf8"));
16
+ return pkg.version || "0.0.0";
17
+ }
18
+ catch (e) {
19
+ console.error(chalk_1.default.dim("Cannot read package version"));
20
+ return "0.0.0";
21
+ }
22
+ }
23
+ const packageVersion = resolvePackageVersion();
24
+ const getPackageVersion = () => packageVersion;
25
+ exports.getPackageVersion = getPackageVersion;
26
+ const handleError = (cb) => async (...args) => {
27
+ try {
28
+ const result = (await cb(...args));
29
+ return result;
30
+ }
31
+ catch (e) {
32
+ console.error(chalk_1.default.red(e.toString()));
33
+ return process.exit(1);
34
+ }
35
+ };
36
+ exports.handleError = handleError;
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,gDAAwB;AACxB,4CAAoB;AAQpB,SAAS,qBAAqB;IAC5B,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CACpE,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;AAExC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC;AAAzC,QAAA,iBAAiB,qBAAwB;AAE/C,MAAM,WAAW,GACtB,CAAU,EAAE,EAAE,EAAE,CAChB,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;IAChB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAa,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AAVS,QAAA,WAAW,eAUpB"}
@@ -0,0 +1,25 @@
1
+ import { AppConfig, DeviceConfig } from "../simulator/types";
2
+ export interface SimulatorConnectConfig {
3
+ name: string;
4
+ deviceId: string;
5
+ accessKey: string;
6
+ serialNumber: string;
7
+ phyhubUrl?: string;
8
+ environment: string;
9
+ dataResidency?: string;
10
+ provisionedAt: string;
11
+ tenantId?: string;
12
+ spaceId?: string;
13
+ }
14
+ export declare function listSimulators(): SimulatorConnectConfig[];
15
+ export declare function getSimulator(name: string): SimulatorConnectConfig | null;
16
+ export declare function saveSimulator(config: SimulatorConnectConfig): void;
17
+ export declare function removeSimulator(name: string): boolean;
18
+ export declare function getDeviceConfig(tenantId: string): Promise<DeviceConfig | undefined>;
19
+ export declare function saveDeviceConfig(tenantId: string, config: DeviceConfig): Promise<void>;
20
+ export declare function getAppConfig(tenantId: string, appName: string): Promise<AppConfig | undefined>;
21
+ export declare function saveAppConfig(tenantId: string, config: AppConfig): Promise<void>;
22
+ export declare function listApps(tenantId: string): Promise<AppConfig[]>;
23
+ export declare function getAppConfigByPath(tenantId: string, appPath: string): Promise<AppConfig | undefined>;
24
+ export declare function updateAppTwinId(tenantId: string, appName: string, newTwinId: string): Promise<void>;
25
+ //# sourceMappingURL=simulator-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator-config.d.ts","sourceRoot":"","sources":["../../src/utils/simulator-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG7D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAMrB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IAMpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,cAAc,IAAI,sBAAsB,EAAE,CAezD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAQxE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAMlE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKrD;AAMD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAYnC;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAOf;AAcD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAchC;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAmBrE;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAGhC;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,140 @@
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.listSimulators = listSimulators;
7
+ exports.getSimulator = getSimulator;
8
+ exports.saveSimulator = saveSimulator;
9
+ exports.removeSimulator = removeSimulator;
10
+ exports.getDeviceConfig = getDeviceConfig;
11
+ exports.saveDeviceConfig = saveDeviceConfig;
12
+ exports.getAppConfig = getAppConfig;
13
+ exports.saveAppConfig = saveAppConfig;
14
+ exports.listApps = listApps;
15
+ exports.getAppConfigByPath = getAppConfigByPath;
16
+ exports.updateAppTwinId = updateAppTwinId;
17
+ const fs_extra_1 = __importDefault(require("fs-extra"));
18
+ const path_1 = __importDefault(require("path"));
19
+ const config_paths_1 = require("./config-paths");
20
+ function listSimulators() {
21
+ if (!fs_extra_1.default.pathExistsSync(config_paths_1.SIMULATORS_DIR))
22
+ return [];
23
+ return fs_extra_1.default
24
+ .readdirSync(config_paths_1.SIMULATORS_DIR)
25
+ .filter((f) => f.endsWith(".json"))
26
+ .map((f) => {
27
+ try {
28
+ return JSON.parse(fs_extra_1.default.readFileSync(path_1.default.join(config_paths_1.SIMULATORS_DIR, f), "utf8"));
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ })
34
+ .filter(Boolean);
35
+ }
36
+ function getSimulator(name) {
37
+ const filePath = path_1.default.join(config_paths_1.SIMULATORS_DIR, `${name}.json`);
38
+ if (!fs_extra_1.default.pathExistsSync(filePath))
39
+ return null;
40
+ try {
41
+ return JSON.parse(fs_extra_1.default.readFileSync(filePath, "utf8"));
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ function saveSimulator(config) {
48
+ fs_extra_1.default.ensureDirSync(config_paths_1.SIMULATORS_DIR);
49
+ fs_extra_1.default.writeFileSync(path_1.default.join(config_paths_1.SIMULATORS_DIR, `${config.name}.json`), JSON.stringify(config, null, 2));
50
+ }
51
+ function removeSimulator(name) {
52
+ const filePath = path_1.default.join(config_paths_1.SIMULATORS_DIR, `${name}.json`);
53
+ if (!fs_extra_1.default.pathExistsSync(filePath))
54
+ return false;
55
+ fs_extra_1.default.removeSync(filePath);
56
+ return true;
57
+ }
58
+ function deviceConfigPath(tenantId) {
59
+ return path_1.default.join(tenantDir(tenantId), "device.json");
60
+ }
61
+ async function getDeviceConfig(tenantId) {
62
+ const filePath = deviceConfigPath(tenantId);
63
+ try {
64
+ if (await fs_extra_1.default.pathExists(filePath)) {
65
+ const data = await fs_extra_1.default.readFile(filePath, "utf8");
66
+ return JSON.parse(data);
67
+ }
68
+ return undefined;
69
+ }
70
+ catch (err) {
71
+ console.log(`[simulator] Failed to read device config: ${err.message}`);
72
+ return undefined;
73
+ }
74
+ }
75
+ async function saveDeviceConfig(tenantId, config) {
76
+ const dir = tenantDir(tenantId);
77
+ await fs_extra_1.default.ensureDir(dir);
78
+ await fs_extra_1.default.writeFile(deviceConfigPath(tenantId), JSON.stringify(config, null, 2));
79
+ }
80
+ function tenantsDir() {
81
+ return path_1.default.join(config_paths_1.SIMULATOR_DIR, "tenants");
82
+ }
83
+ function tenantDir(tenantId) {
84
+ return path_1.default.join(tenantsDir(), tenantId);
85
+ }
86
+ function appConfigPath(tenantId, appName) {
87
+ return path_1.default.join(tenantDir(tenantId), `${appName}.json`);
88
+ }
89
+ async function getAppConfig(tenantId, appName) {
90
+ const filePath = appConfigPath(tenantId, appName);
91
+ try {
92
+ if (await fs_extra_1.default.pathExists(filePath)) {
93
+ const data = await fs_extra_1.default.readFile(filePath, "utf8");
94
+ return JSON.parse(data);
95
+ }
96
+ return undefined;
97
+ }
98
+ catch (err) {
99
+ console.log(`[simulator] Failed to read app config for ${appName}: ${err.message}`);
100
+ return undefined;
101
+ }
102
+ }
103
+ async function saveAppConfig(tenantId, config) {
104
+ const dir = tenantDir(tenantId);
105
+ await fs_extra_1.default.ensureDir(dir);
106
+ const filePath = appConfigPath(tenantId, config.name);
107
+ await fs_extra_1.default.writeFile(filePath, JSON.stringify(config, null, 2));
108
+ }
109
+ async function listApps(tenantId) {
110
+ const dir = tenantDir(tenantId);
111
+ try {
112
+ if (!(await fs_extra_1.default.pathExists(dir)))
113
+ return [];
114
+ const files = await fs_extra_1.default.readdir(dir);
115
+ const apps = [];
116
+ for (const file of files) {
117
+ if (file.endsWith(".json")) {
118
+ const data = await fs_extra_1.default.readFile(path_1.default.join(dir, file), "utf8");
119
+ apps.push(JSON.parse(data));
120
+ }
121
+ }
122
+ return apps;
123
+ }
124
+ catch (err) {
125
+ console.log(`[simulator] Failed to list apps for tenant ${tenantId}: ${err.message}`);
126
+ return [];
127
+ }
128
+ }
129
+ async function getAppConfigByPath(tenantId, appPath) {
130
+ const apps = await listApps(tenantId);
131
+ return apps.find((a) => a.path === appPath);
132
+ }
133
+ async function updateAppTwinId(tenantId, appName, newTwinId) {
134
+ const config = await getAppConfig(tenantId, appName);
135
+ if (config) {
136
+ config.twinId = newTwinId;
137
+ await saveAppConfig(tenantId, config);
138
+ }
139
+ }
140
+ //# sourceMappingURL=simulator-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator-config.js","sourceRoot":"","sources":["../../src/utils/simulator-config.ts"],"names":[],"mappings":";;;;;AA8BA,wCAeC;AAED,oCAQC;AAED,sCAMC;AAED,0CAKC;AAMD,0CAcC;AAED,4CAUC;AAcD,oCAiBC;AAED,sCAQC;AAED,4BAmBC;AAED,gDAMC;AAED,0CAUC;AAxLD,wDAA0B;AAC1B,gDAAwB;AAExB,iDAA+D;AA2B/D,SAAgB,cAAc;IAC5B,IAAI,CAAC,kBAAE,CAAC,cAAc,CAAC,6BAAc,CAAC;QAAE,OAAO,EAAE,CAAC;IAClD,OAAO,kBAAE;SACN,WAAW,CAAC,6BAAc,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CACf,kBAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,6BAAc,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAA6B,CAAC;AACjD,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,6BAAc,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,MAA8B;IAC1D,kBAAE,CAAC,aAAa,CAAC,6BAAc,CAAC,CAAC;IACjC,kBAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,6BAAc,EAAE,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,EAChD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,6BAAc,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,QAAgB;IAEhB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,6CAA6C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,MAAoB;IAEpB,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,kBAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,kBAAE,CAAC,SAAS,CAChB,gBAAgB,CAAC,QAAQ,CAAC,EAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,cAAI,CAAC,IAAI,CAAC,4BAAa,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,OAAe;IACtD,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,OAAe;IAEf,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,6CAA6C,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CACvE,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,MAAiB;IAEjB,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,kBAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,IAAI,GAAgB,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CACT,8CAA8C,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CACzE,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAAe;IAEf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAAe,EACf,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface StoredTenant {
2
+ id: string;
3
+ slug: string;
4
+ displayName: string;
5
+ phyhubUrl: string;
6
+ dataResidency?: string;
7
+ }
8
+ export declare const saveTenant: (tenant: StoredTenant) => Promise<void>;
9
+ export declare const getTenant: (options?: {
10
+ silent?: boolean;
11
+ }) => Promise<StoredTenant | null>;
12
+ export declare const hasTenant: () => Promise<boolean>;
13
+ export declare const clearTenant: () => Promise<boolean>;
14
+ //# sourceMappingURL=tenant-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-storage.d.ts","sourceRoot":"","sources":["../../src/utils/tenant-storage.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAIlB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAQD,eAAO,MAAM,UAAU,GAAU,QAAQ,YAAY,KAAG,OAAO,CAAC,IAAI,CAcnE,CAAC;AAWF,eAAO,MAAM,SAAS,GACpB,UAAS;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,KACjC,OAAO,CAAC,YAAY,GAAG,IAAI,CAqB7B,CAAC;AAOF,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,OAAO,CASjD,CAAC;AAQF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,OAAO,CAYnD,CAAC"}
@@ -0,0 +1,65 @@
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.clearTenant = exports.hasTenant = exports.getTenant = exports.saveTenant = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const config_paths_1 = require("./config-paths");
10
+ const saveTenant = async (tenant) => {
11
+ try {
12
+ await fs_extra_1.default.ensureDir(config_paths_1.CONFIG_DIR);
13
+ await fs_extra_1.default.writeFile(config_paths_1.TENANT_FILE, JSON.stringify(tenant, null, 2));
14
+ console.log(chalk_1.default.dim(`Saved tenant information to ${config_paths_1.TENANT_FILE}`));
15
+ }
16
+ catch (error) {
17
+ console.error(chalk_1.default.red(`Failed to save tenant information: ${error.message}`));
18
+ throw error;
19
+ }
20
+ };
21
+ exports.saveTenant = saveTenant;
22
+ const getTenant = async (options = {}) => {
23
+ try {
24
+ if (await fs_extra_1.default.pathExists(config_paths_1.TENANT_FILE)) {
25
+ const data = await fs_extra_1.default.readFile(config_paths_1.TENANT_FILE, "utf8");
26
+ const tenant = JSON.parse(data);
27
+ if (!options.silent) {
28
+ console.log(chalk_1.default.dim(`Using tenant: ${tenant.displayName} (${tenant.slug})`));
29
+ }
30
+ return tenant;
31
+ }
32
+ return null;
33
+ }
34
+ catch (error) {
35
+ console.error(chalk_1.default.red(`Failed to read tenant information: ${error.message}`));
36
+ return null;
37
+ }
38
+ };
39
+ exports.getTenant = getTenant;
40
+ const hasTenant = async () => {
41
+ try {
42
+ return await fs_extra_1.default.pathExists(config_paths_1.TENANT_FILE);
43
+ }
44
+ catch (error) {
45
+ console.error(chalk_1.default.red(`Failed to check for saved tenant: ${error.message}`));
46
+ return false;
47
+ }
48
+ };
49
+ exports.hasTenant = hasTenant;
50
+ const clearTenant = async () => {
51
+ try {
52
+ if (await fs_extra_1.default.pathExists(config_paths_1.TENANT_FILE)) {
53
+ await fs_extra_1.default.remove(config_paths_1.TENANT_FILE);
54
+ console.log(chalk_1.default.dim(`Removed tenant information`));
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ catch (error) {
60
+ console.error(chalk_1.default.red(`Failed to clear tenant: ${error.message}`));
61
+ throw error;
62
+ }
63
+ };
64
+ exports.clearTenant = clearTenant;
65
+ //# sourceMappingURL=tenant-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-storage.js","sourceRoot":"","sources":["../../src/utils/tenant-storage.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,kDAA0B;AAC1B,iDAAyD;AAmBlD,MAAM,UAAU,GAAG,KAAK,EAAE,MAAoB,EAAiB,EAAE;IACtE,IAAI,CAAC;QAEH,MAAM,kBAAE,CAAC,SAAS,CAAC,yBAAU,CAAC,CAAC;QAG/B,MAAM,kBAAE,CAAC,SAAS,CAAC,0BAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,0BAAW,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CACjE,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,UAAU,cAcrB;AAWK,MAAM,SAAS,GAAG,KAAK,EAC5B,UAAgC,EAAE,EACJ,EAAE;IAChC,IAAI,CAAC;QACH,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,0BAAW,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,0BAAW,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;YAEhD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAClE,CAAC;YACJ,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CACjE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAvBW,QAAA,SAAS,aAuBpB;AAOK,MAAM,SAAS,GAAG,KAAK,IAAsB,EAAE;IACpD,IAAI,CAAC;QACH,OAAO,MAAM,kBAAE,CAAC,UAAU,CAAC,0BAAW,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAChE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AATW,QAAA,SAAS,aASpB;AAQK,MAAM,WAAW,GAAG,KAAK,IAAsB,EAAE;IACtD,IAAI,CAAC;QACH,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,0BAAW,CAAC,EAAE,CAAC;YACrC,MAAM,kBAAE,CAAC,MAAM,CAAC,0BAAW,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAZW,QAAA,WAAW,eAYtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phystack/device-simulator",
3
- "version": "6.3.4",
3
+ "version": "6.3.6",
4
4
  "description": "Standalone PhyStack device simulator for local app development.",
5
5
  "main": "dist/command.js",
6
6
  "license": "UNLICENSED",
@@ -11,6 +11,9 @@
11
11
  "bin": {
12
12
  "phy-simulator": "./dist/index.js"
13
13
  },
14
+ "files": [
15
+ "dist"
16
+ ],
14
17
  "scripts": {
15
18
  "build": "rimraf dist && tsc",
16
19
  "build:binary": "bash build-binary.sh",
@@ -20,7 +23,7 @@
20
23
  "test:ci": "bun test src"
21
24
  },
22
25
  "dependencies": {
23
- "@phystack/hub-device": "6.3.4",
26
+ "@phystack/hub-device": "6.3.6",
24
27
  "chalk": "^3.0.0",
25
28
  "commander": "^5.0.0",
26
29
  "fs-extra": "^8.1.0",
package/CHANGELOG.md DELETED
@@ -1,42 +0,0 @@
1
- # @phystack/device-simulator
2
-
3
- ## 6.3.4
4
-
5
- ### Patch Changes
6
-
7
- - Updated dependencies []:
8
- - @phystack/hub-device@6.3.4
9
-
10
- ## 6.3.3
11
-
12
- ### Patch Changes
13
-
14
- - Updated dependencies []:
15
- - @phystack/hub-device@6.3.3
16
-
17
- ## 6.3.2
18
-
19
- ### Patch Changes
20
-
21
- - Updated dependencies []:
22
- - @phystack/hub-device@6.3.2
23
-
24
- ## 6.3.1
25
-
26
- ### Patch Changes
27
-
28
- - Updated dependencies []:
29
- - @phystack/hub-device@6.3.1
30
-
31
- ## 6.3.0
32
-
33
- ### Patch Changes
34
-
35
- - [#556](https://github.com/phystack/ps-platform/pull/556) [`4433273`](https://github.com/phystack/ps-platform/commit/4433273be94e88b8843aec6261cdb1e79936dc26) Thanks [@hassellof](https://github.com/hassellof)! - Ship `@phystack/device-simulator` as a published npm package and build a per-target standalone `phy-simulator` Bun binary for each developer platform.
36
-
37
- The package was extracted from `tools/cli` but never wired into the publish pipeline, so a published `@phystack/cli` (which imports it via `workspace:*`) could not resolve it. It is now registered in the Changesets fixed group and the root `ci:build-packages`/`ci:publish-packages` scripts so the library is versioned and published like the other shared packages.
38
-
39
- In addition, `scripts/build-device-binaries.sh` and `scripts/publish-device-binaries.js` now cross-compile `phy-simulator` and publish per-platform binary subpackages (`@phystack/phy-simulator-<platform>`) for the same darwin/linux/windows/musl matrix as the `phy` CLI, mirroring the existing device-binary publish flow in `deploy-device-apps.yml`.
40
-
41
- - Updated dependencies []:
42
- - @phystack/hub-device@6.3.0
package/build-binary.sh DELETED
@@ -1,37 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- VERSION=$(node -p "require('./package.json').version")
4
-
5
- # Args: [target] [outfile]
6
- # target — full Bun cross-compile target (e.g. bun-linux-x64,
7
- # bun-linux-arm64, bun-darwin-x64, bun-darwin-arm64,
8
- # bun-windows-x64). Defaults to the host target (no --target).
9
- # outfile — output binary path. Defaults to "phy-simulator"
10
- # ("phy-simulator.exe" when target is a Windows one).
11
- TARGET="${1:-}"
12
-
13
- DEFAULT_OUTFILE="phy-simulator"
14
- if [[ "$TARGET" == bun-windows-* ]]; then
15
- DEFAULT_OUTFILE="phy-simulator.exe"
16
- fi
17
- OUTFILE="${2:-$DEFAULT_OUTFILE}"
18
-
19
- TARGET_ARGS=()
20
- if [[ -n "$TARGET" ]]; then
21
- TARGET_ARGS+=("--target=${TARGET}")
22
- fi
23
-
24
- bun build --compile --minify \
25
- --no-compile-autoload-dotenv \
26
- --define '__PKG_VERSION__="'"$VERSION"'"' \
27
- ${TARGET_ARGS[@]+"${TARGET_ARGS[@]}"} \
28
- ./src/index.ts --outfile "$OUTFILE"
29
-
30
- # macOS AMFI SIGKILLs arm64 Mach-Os that lack a valid signature. Bun's
31
- # cross-compile on Linux already emits ad-hoc-signed darwin binaries, but
32
- # a local macOS host build may not — force a fresh ad-hoc signature so the
33
- # resulting binary is runnable on the same machine that built it.
34
- if [[ "$(uname -s)" == "Darwin" && "$(file "$OUTFILE")" == *Mach-O* ]]; then
35
- codesign --remove-signature "$OUTFILE" 2>/dev/null || true
36
- codesign --force --sign - "$OUTFILE"
37
- fi