@phystack/cli 4.3.40-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 (192) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +24 -0
  3. package/bin/index.js +2 -0
  4. package/dist/commands/app/build-apps.js +66 -0
  5. package/dist/commands/app/build-apps.js.map +1 -0
  6. package/dist/commands/app/build-container-remote.js +171 -0
  7. package/dist/commands/app/build-container-remote.js.map +1 -0
  8. package/dist/commands/app/build-container.js +330 -0
  9. package/dist/commands/app/build-container.js.map +1 -0
  10. package/dist/commands/app/build.js +393 -0
  11. package/dist/commands/app/build.js.map +1 -0
  12. package/dist/commands/app/create.js +451 -0
  13. package/dist/commands/app/create.js.map +1 -0
  14. package/dist/commands/app/deploy.js +176 -0
  15. package/dist/commands/app/deploy.js.map +1 -0
  16. package/dist/commands/app/device-picker.js +150 -0
  17. package/dist/commands/app/device-picker.js.map +1 -0
  18. package/dist/commands/app/import.js +303 -0
  19. package/dist/commands/app/import.js.map +1 -0
  20. package/dist/commands/app/list.js +26 -0
  21. package/dist/commands/app/list.js.map +1 -0
  22. package/dist/commands/app/publish.js +327 -0
  23. package/dist/commands/app/publish.js.map +1 -0
  24. package/dist/commands/app/settings.js +129 -0
  25. package/dist/commands/app/settings.js.map +1 -0
  26. package/dist/commands/app/types.js +13 -0
  27. package/dist/commands/app/types.js.map +1 -0
  28. package/dist/commands/app/upload-description.js +139 -0
  29. package/dist/commands/app/upload-description.js.map +1 -0
  30. package/dist/commands/app/upload-settings.js +29 -0
  31. package/dist/commands/app/upload-settings.js.map +1 -0
  32. package/dist/commands/app/utils.js +86 -0
  33. package/dist/commands/app/utils.js.map +1 -0
  34. package/dist/commands/auth/login.js +111 -0
  35. package/dist/commands/auth/login.js.map +1 -0
  36. package/dist/commands/auth/logout.js +19 -0
  37. package/dist/commands/auth/logout.js.map +1 -0
  38. package/dist/commands/descriptor/create.js +143 -0
  39. package/dist/commands/descriptor/create.js.map +1 -0
  40. package/dist/commands/descriptor/index.js +36 -0
  41. package/dist/commands/descriptor/index.js.map +1 -0
  42. package/dist/commands/descriptor/publish.js +163 -0
  43. package/dist/commands/descriptor/publish.js.map +1 -0
  44. package/dist/commands/descriptor/show.js +68 -0
  45. package/dist/commands/descriptor/show.js.map +1 -0
  46. package/dist/commands/dev/develop.js +175 -0
  47. package/dist/commands/dev/develop.js.map +1 -0
  48. package/dist/commands/dev/forward.js +118 -0
  49. package/dist/commands/dev/forward.js.map +1 -0
  50. package/dist/commands/dev/index.js +66 -0
  51. package/dist/commands/dev/index.js.map +1 -0
  52. package/dist/commands/dev/list.js +96 -0
  53. package/dist/commands/dev/list.js.map +1 -0
  54. package/dist/commands/dev/screen-devtools.js +156 -0
  55. package/dist/commands/dev/screen-devtools.js.map +1 -0
  56. package/dist/commands/dev/select.js +118 -0
  57. package/dist/commands/dev/select.js.map +1 -0
  58. package/dist/commands/dev/shell.js +171 -0
  59. package/dist/commands/dev/shell.js.map +1 -0
  60. package/dist/commands/dev/vnc.js +75 -0
  61. package/dist/commands/dev/vnc.js.map +1 -0
  62. package/dist/commands/device/select.js +118 -0
  63. package/dist/commands/device/select.js.map +1 -0
  64. package/dist/commands/flash.js +1120 -0
  65. package/dist/commands/flash.js.map +1 -0
  66. package/dist/commands/inst/create.js +55 -0
  67. package/dist/commands/inst/create.js.map +1 -0
  68. package/dist/commands/inst/index.js +15 -0
  69. package/dist/commands/inst/index.js.map +1 -0
  70. package/dist/commands/inst/list.js +26 -0
  71. package/dist/commands/inst/list.js.map +1 -0
  72. package/dist/commands/legacydev/debug.js +11 -0
  73. package/dist/commands/legacydev/debug.js.map +1 -0
  74. package/dist/commands/legacydev/deploy.js +15 -0
  75. package/dist/commands/legacydev/deploy.js.map +1 -0
  76. package/dist/commands/legacydev/dumpTwin.js +27 -0
  77. package/dist/commands/legacydev/dumpTwin.js.map +1 -0
  78. package/dist/commands/legacydev/forward.js +104 -0
  79. package/dist/commands/legacydev/forward.js.map +1 -0
  80. package/dist/commands/legacydev/index.js +188 -0
  81. package/dist/commands/legacydev/index.js.map +1 -0
  82. package/dist/commands/legacydev/invoke.js +29 -0
  83. package/dist/commands/legacydev/invoke.js.map +1 -0
  84. package/dist/commands/legacydev/js.js +69 -0
  85. package/dist/commands/legacydev/js.js.map +1 -0
  86. package/dist/commands/legacydev/list.js +196 -0
  87. package/dist/commands/legacydev/list.js.map +1 -0
  88. package/dist/commands/legacydev/logs.js +60 -0
  89. package/dist/commands/legacydev/logs.js.map +1 -0
  90. package/dist/commands/legacydev/modules.js +50 -0
  91. package/dist/commands/legacydev/modules.js.map +1 -0
  92. package/dist/commands/legacydev/move.js +23 -0
  93. package/dist/commands/legacydev/move.js.map +1 -0
  94. package/dist/commands/legacydev/ota.js +88 -0
  95. package/dist/commands/legacydev/ota.js.map +1 -0
  96. package/dist/commands/legacydev/patchTwin.js +21 -0
  97. package/dist/commands/legacydev/patchTwin.js.map +1 -0
  98. package/dist/commands/legacydev/pin.js +23 -0
  99. package/dist/commands/legacydev/pin.js.map +1 -0
  100. package/dist/commands/legacydev/pub.js +25 -0
  101. package/dist/commands/legacydev/pub.js.map +1 -0
  102. package/dist/commands/legacydev/rdp.js +64 -0
  103. package/dist/commands/legacydev/rdp.js.map +1 -0
  104. package/dist/commands/legacydev/screen-devtools.js +142 -0
  105. package/dist/commands/legacydev/screen-devtools.js.map +1 -0
  106. package/dist/commands/legacydev/settingsShow.js +89 -0
  107. package/dist/commands/legacydev/settingsShow.js.map +1 -0
  108. package/dist/commands/legacydev/settingsUpdate.js +114 -0
  109. package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
  110. package/dist/commands/legacydev/shell.js +167 -0
  111. package/dist/commands/legacydev/shell.js.map +1 -0
  112. package/dist/commands/legacydev/showTwin.js +9 -0
  113. package/dist/commands/legacydev/showTwin.js.map +1 -0
  114. package/dist/commands/legacydev/statusLog.js +56 -0
  115. package/dist/commands/legacydev/statusLog.js.map +1 -0
  116. package/dist/commands/legacydev/sub.js +39 -0
  117. package/dist/commands/legacydev/sub.js.map +1 -0
  118. package/dist/commands/legacydev/vnc.js +61 -0
  119. package/dist/commands/legacydev/vnc.js.map +1 -0
  120. package/dist/commands/tenant/index.js +21 -0
  121. package/dist/commands/tenant/index.js.map +1 -0
  122. package/dist/commands/tenant/list.js +14 -0
  123. package/dist/commands/tenant/list.js.map +1 -0
  124. package/dist/commands/tenant/select.js +87 -0
  125. package/dist/commands/tenant/select.js.map +1 -0
  126. package/dist/commands/vm/create.js +718 -0
  127. package/dist/commands/vm/create.js.map +1 -0
  128. package/dist/commands/vm/index.js +130 -0
  129. package/dist/commands/vm/index.js.map +1 -0
  130. package/dist/commands/vm/list.js +124 -0
  131. package/dist/commands/vm/list.js.map +1 -0
  132. package/dist/commands/vm/logs.js +66 -0
  133. package/dist/commands/vm/logs.js.map +1 -0
  134. package/dist/commands/vm/remove.js +180 -0
  135. package/dist/commands/vm/remove.js.map +1 -0
  136. package/dist/commands/vm/shell.js +400 -0
  137. package/dist/commands/vm/shell.js.map +1 -0
  138. package/dist/commands/vm/start.js +861 -0
  139. package/dist/commands/vm/start.js.map +1 -0
  140. package/dist/commands/vm/stop.js +232 -0
  141. package/dist/commands/vm/stop.js.map +1 -0
  142. package/dist/index.js +158 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/services/admin-api/admin-api.types.js +3 -0
  145. package/dist/services/admin-api/admin-api.types.js.map +1 -0
  146. package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
  147. package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
  148. package/dist/services/admin-api/devices-admin-api.service.js +213 -0
  149. package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
  150. package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
  151. package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
  152. package/dist/services/admin-api/index.js +157 -0
  153. package/dist/services/admin-api/index.js.map +1 -0
  154. package/dist/services/admin-api/installations-admin-api.service.js +29 -0
  155. package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
  156. package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
  157. package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
  158. package/dist/services/auth/device-grant-auth.service.js +224 -0
  159. package/dist/services/auth/device-grant-auth.service.js.map +1 -0
  160. package/dist/services/phyhub/index.js +200 -0
  161. package/dist/services/phyhub/index.js.map +1 -0
  162. package/dist/services/phyhub/phyhub.types.js +3 -0
  163. package/dist/services/phyhub/phyhub.types.js.map +1 -0
  164. package/dist/utils/device-fetcher.js +92 -0
  165. package/dist/utils/device-fetcher.js.map +1 -0
  166. package/dist/utils/devices.js +41 -0
  167. package/dist/utils/devices.js.map +1 -0
  168. package/dist/utils/docker-credentials.js +720 -0
  169. package/dist/utils/docker-credentials.js.map +1 -0
  170. package/dist/utils/emulated-device.js +91 -0
  171. package/dist/utils/emulated-device.js.map +1 -0
  172. package/dist/utils/index.js +180 -0
  173. package/dist/utils/index.js.map +1 -0
  174. package/dist/utils/modules.js +36 -0
  175. package/dist/utils/modules.js.map +1 -0
  176. package/dist/utils/org-selector.js +108 -0
  177. package/dist/utils/org-selector.js.map +1 -0
  178. package/dist/utils/proxy.js +31 -0
  179. package/dist/utils/proxy.js.map +1 -0
  180. package/dist/utils/registry-credentials.js +113 -0
  181. package/dist/utils/registry-credentials.js.map +1 -0
  182. package/dist/utils/statuses.js +124 -0
  183. package/dist/utils/statuses.js.map +1 -0
  184. package/dist/utils/templates.js +197 -0
  185. package/dist/utils/templates.js.map +1 -0
  186. package/dist/utils/tenant-storage.js +88 -0
  187. package/dist/utils/tenant-storage.js.map +1 -0
  188. package/dist/utils/vm.js +434 -0
  189. package/dist/utils/vm.js.map +1 -0
  190. package/dist/utils/with-spinner.js +20 -0
  191. package/dist/utils/with-spinner.js.map +1 -0
  192. package/package.json +103 -0
@@ -0,0 +1,64 @@
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
+ /* eslint-disable @typescript-eslint/no-unused-vars */
7
+ const net_1 = __importDefault(require("net"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const child_process_1 = __importDefault(require("child_process"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const utils_1 = require("../../utils");
12
+ const admin_api_1 = require("../../services/admin-api");
13
+ const EXE_PATH = {
14
+ darwin: '/Applications/Microsoft Remote Desktop.app',
15
+ win32: 'c:\\Program Files\\RealVNC\\VNC Viewer\\vncviewer.exe',
16
+ };
17
+ async function vnc(deviceName) {
18
+ const exeName = EXE_PATH[process.platform];
19
+ if (!exeName)
20
+ throw new Error(`RDP command is not supported on platform ${process.platform}`);
21
+ if (!fs_1.default.existsSync(exeName)) {
22
+ throw new Error(`RDP desktop client not found, please install from ${chalk_1.default.blueBright('https://www.microsoft.com/en-us/p/microsoft-remote-desktop/')}`);
23
+ }
24
+ console.log(chalk_1.default.dim('Starting local service'));
25
+ const port = Math.floor(10000 + ((Math.random() * 100000) % 10000));
26
+ // wait for a single connection
27
+ const connPromise = new Promise((resolve) => {
28
+ const server = net_1.default.createServer((c) => {
29
+ server.close();
30
+ resolve(c);
31
+ });
32
+ server.listen(port, () => console.log(chalk_1.default.dim(`Rdp listening on port ${chalk_1.default.blue(port)}`)));
33
+ });
34
+ // FIXME: use node-tmp library
35
+ console.log(chalk_1.default.dim('Starting RDP client'));
36
+ if (process.platform === 'darwin') {
37
+ fs_1.default.writeFileSync('/tmp/conn.rdp', `full address:s:127.0.0.1:${port}\nusername:s:test\n`);
38
+ child_process_1.default.spawn('open', [exeName, `/tmp/conn.rdp`]);
39
+ }
40
+ if (process.platform === 'win32') {
41
+ fs_1.default.writeFileSync('c:/Windows/Temp/conn.rdp', `full address:s:127.0.0.1:${port}\nusername:s:test\n`);
42
+ child_process_1.default.spawn('mstsc.exe', [`c:/Windows/Temp/conn.rdp`]);
43
+ }
44
+ console.log(chalk_1.default.dim('Waiting for an rdp connection'));
45
+ let conn = await connPromise;
46
+ const { stream } = (0, utils_1.openStream)(await (0, admin_api_1.adminApi)().devices.startRdpSession(deviceName));
47
+ console.log(chalk_1.default.dim('Opened'));
48
+ stream.pipe(conn);
49
+ conn.pipe(stream);
50
+ conn.on('error', (e) => console.log('Error', e.toString()));
51
+ conn.on('close', () => {
52
+ console.log(chalk_1.default.dim('Connection closed'));
53
+ stream.destroy();
54
+ });
55
+ stream.on('close', () => {
56
+ console.log(chalk_1.default.dim('Socket closed'));
57
+ if (conn) {
58
+ conn.destroy();
59
+ conn = null;
60
+ }
61
+ });
62
+ }
63
+ exports.default = vnc;
64
+ //# sourceMappingURL=rdp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdp.js","sourceRoot":"","sources":["../../../src/commands/legacydev/rdp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
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
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const ws_1 = __importDefault(require("ws"));
8
+ const shell_1 = require("./shell");
9
+ async function getWebSocketDebuggerUrl(port) {
10
+ const response = await fetch(`http://localhost:${port}/json`);
11
+ const targets = await response.json();
12
+ const pageTarget = targets.find((target) => {
13
+ const url = new URL(target.url);
14
+ return (target.type === 'page' &&
15
+ (url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'file:'));
16
+ });
17
+ if (!pageTarget) {
18
+ throw new Error('No suitable page target found');
19
+ }
20
+ return pageTarget.webSocketDebuggerUrl;
21
+ }
22
+ async function screenDevTools(deviceName, options) {
23
+ const { url, port } = options;
24
+ let originalUrl = null;
25
+ let debuggerWs = null;
26
+ // Use provided port or generate random port for DevTools forwarding
27
+ const remotePort = port || Math.floor(10000 + ((Math.random() * 100000) % 10000));
28
+ console.log(chalk_1.default.dim(`Starting Chrome DevTools session on port ${remotePort}...`));
29
+ // Start shell with port forwarding
30
+ const { shellPromise, process: shellProcess } = await (0, shell_1.shellImpl)(deviceName, {
31
+ L: `${remotePort}:localhost:3000`,
32
+ silent: true,
33
+ detached: true,
34
+ });
35
+ // Unref the child process to prevent it from keeping the event loop running
36
+ shellProcess?.unref();
37
+ // Handle cleanup on process exit
38
+ async function cleanup() {
39
+ if (originalUrl && debuggerWs) {
40
+ console.log(chalk_1.default.dim('Restoring original URL...'));
41
+ try {
42
+ const navigateCommand = {
43
+ id: 1,
44
+ method: 'Page.navigate',
45
+ params: { url: originalUrl },
46
+ };
47
+ debuggerWs.send(JSON.stringify(navigateCommand));
48
+ // Poll the /json endpoint until URL changes back
49
+ const maxAttempts = 20; // 10 seconds total (20 * 500ms)
50
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
51
+ await new Promise((resolve) => setTimeout(resolve, 500));
52
+ try {
53
+ const response = await fetch(`http://localhost:${remotePort}/json`);
54
+ const targets = await response.json();
55
+ const pageTarget = targets.find((target) => target.type === 'page');
56
+ if (pageTarget && pageTarget.url === originalUrl) {
57
+ debuggerWs.close();
58
+ console.log(chalk_1.default.green('Successfully restored original URL'));
59
+ return;
60
+ }
61
+ }
62
+ catch (error) {
63
+ console.log(chalk_1.default.yellow(`Failed to check navigation status: ${error.message}`));
64
+ }
65
+ }
66
+ throw new Error('Navigation timeout');
67
+ }
68
+ catch (error) {
69
+ console.log(chalk_1.default.yellow(`Failed to restore original URL: ${error.message}`));
70
+ throw error;
71
+ }
72
+ }
73
+ }
74
+ process.on('SIGINT', async () => {
75
+ await cleanup();
76
+ shellProcess?.kill();
77
+ await new Promise((resolve) => setTimeout(resolve, 500));
78
+ process.exit();
79
+ });
80
+ // Wait for the connection and port forwarding to establish
81
+ await new Promise((resolve) => setTimeout(resolve, 3000));
82
+ // Launch Chrome/Chromium with inspect page
83
+ console.log(chalk_1.default.dim('Opening Chrome DevTools inspector...'));
84
+ console.log(chalk_1.default.yellow('\nTo debug the remote target:'));
85
+ console.log(chalk_1.default.yellow('1. Click "Configure..." next to "Discover network targets" in Chrome DevTools'));
86
+ console.log(chalk_1.default.yellow(`2. Add "localhost:${remotePort}" to the target discovery settings`));
87
+ console.log(chalk_1.default.yellow('3. Wait for the target to appear under "Remote Target"\n'));
88
+ if (url) {
89
+ console.log(chalk_1.default.dim(`Waiting for debugger to be available...`));
90
+ await new Promise((resolve) => setTimeout(resolve, 5000));
91
+ try {
92
+ const debuggerUrl = await getWebSocketDebuggerUrl(remotePort);
93
+ debuggerWs = new ws_1.default(debuggerUrl);
94
+ // Save current URL and establish WebSocket connection
95
+ await new Promise((resolve, reject) => {
96
+ debuggerWs?.on('open', () => {
97
+ console.log(chalk_1.default.dim('WebSocket connection opened'));
98
+ const getUrlCommand = {
99
+ id: 1,
100
+ method: 'Page.getNavigationHistory',
101
+ };
102
+ debuggerWs?.send(JSON.stringify(getUrlCommand));
103
+ });
104
+ const onMessage = (data) => {
105
+ const response = JSON.parse(data.toString());
106
+ if (response.id === 1 && response.result?.entries?.length > 0) {
107
+ const currentEntry = response.result.entries[response.result.currentIndex];
108
+ originalUrl = currentEntry.url;
109
+ console.log(chalk_1.default.dim(`Saved original URL: ${originalUrl}`));
110
+ // Now navigate to the new URL
111
+ const navigateCommand = {
112
+ id: 2,
113
+ method: 'Page.navigate',
114
+ params: { url },
115
+ };
116
+ debuggerWs?.send(JSON.stringify(navigateCommand));
117
+ }
118
+ else if (response.id === 2) {
119
+ debuggerWs?.removeListener('message', onMessage);
120
+ console.log(chalk_1.default.green(`Successfully navigated to ${url}`));
121
+ resolve();
122
+ }
123
+ };
124
+ debuggerWs?.on('message', onMessage);
125
+ debuggerWs?.on('error', (error) => {
126
+ console.log(chalk_1.default.red(`WebSocket error: ${error.message}`));
127
+ reject(error);
128
+ });
129
+ });
130
+ }
131
+ catch (error) {
132
+ console.log(chalk_1.default.yellow(`Failed to navigate to URL: ${error.message}`));
133
+ console.log(chalk_1.default.yellow('You may need to navigate manually.'));
134
+ }
135
+ }
136
+ console.log(chalk_1.default.dim('\nPress Ctrl+C when done.'));
137
+ // Await the shell promise
138
+ await shellPromise;
139
+ return shellPromise;
140
+ }
141
+ exports.default = screenDevTools;
142
+ //# sourceMappingURL=screen-devtools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-devtools.js","sourceRoot":"","sources":["../../../src/commands/legacydev/screen-devtools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
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
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const admin_api_1 = require("../../services/admin-api");
9
+ const fmt = (a) => {
10
+ if (typeof a === 'string')
11
+ return chalk_1.default.green(a);
12
+ if (typeof a === 'number')
13
+ return chalk_1.default.blue(a);
14
+ if (typeof a === 'boolean')
15
+ return chalk_1.default.yellow(a);
16
+ return a;
17
+ };
18
+ const fmtStatus = (status) => {
19
+ if (status === 'running')
20
+ return chalk_1.default.green(status);
21
+ if (status === 'backoff')
22
+ return chalk_1.default.red(status);
23
+ return chalk_1.default.yellow(status);
24
+ };
25
+ const fmtVersion = (selected, desired, reported) => {
26
+ if (desired === reported && desired === selected)
27
+ return chalk_1.default.blue(reported);
28
+ if (selected === desired)
29
+ return `${chalk_1.default.yellow(reported)} => ${chalk_1.default.yellow(desired)}`;
30
+ return `${chalk_1.default.red(reported)} => ${chalk_1.default.blue(selected)}`;
31
+ };
32
+ exports.default = async (deviceName) => {
33
+ const orgs = await (0, admin_api_1.adminApi)().organizations.listOrganizations();
34
+ const device = await (0, admin_api_1.adminApi)().devices.getDeviceByName(deviceName);
35
+ if (!device) {
36
+ throw new Error('Device not found');
37
+ }
38
+ if (!device.parentDevice ||
39
+ !device.parentDevice.id ||
40
+ device.parentDevice.type !== 'iothub') {
41
+ throw new Error('Non Edge device cannot have edge modules');
42
+ }
43
+ const iothubDeviceId = device.parentDevice.id;
44
+ console.log(chalk_1.default.dim(`Using device ${chalk_1.default.blue(`${device.organizationSlug}.${device.deviceName}`)}`));
45
+ const orgsById = orgs.reduce((res, o) => {
46
+ res[o.id] = o;
47
+ return res;
48
+ }, {});
49
+ const modules = await (0, admin_api_1.adminApi)().deviceModules.listModules();
50
+ const res = await (0, admin_api_1.adminApi)().devices.getDeviceInstalledModulesEdge(iothubDeviceId);
51
+ const moduleStatus = await (0, admin_api_1.adminApi)().devices.getDeviceReportedModulesEdge(deviceName);
52
+ const result = [];
53
+ for (const mod of Object.values(res)) {
54
+ const module = modules.find((m) => m.id === mod.moduleId);
55
+ if (!module) {
56
+ console.error(chalk_1.default.red(`Module ${mod.moduleId} not found`));
57
+ continue; // eslint-disable-line no-continue
58
+ }
59
+ const versions = await (0, admin_api_1.adminApi)().deviceModules.listModuleVersions(module.id);
60
+ const version = versions.find((ver) => ver.id === mod.versionId);
61
+ if (!version) {
62
+ console.error(chalk_1.default.red(`Version ${mod.versionId} not found`));
63
+ continue; // eslint-disable-line no-continue
64
+ }
65
+ const { organizationName } = orgsById[module.organizationId];
66
+ const status = moduleStatus.find((st) => st.module === module.moduleName);
67
+ result.push({
68
+ name: `${organizationName}.${module.moduleName}`,
69
+ module,
70
+ version: version.version,
71
+ desiredVer: status ? status.desiredVersion : version.version,
72
+ reportedVer: status ? status.version : version.version,
73
+ status: status ? status.status : 'unknown',
74
+ settings: mod.settings,
75
+ });
76
+ }
77
+ let i = 0;
78
+ for (const item of result) {
79
+ if (i !== 0)
80
+ console.log('');
81
+ i += 1;
82
+ console.log(fmtStatus(item.status), chalk_1.default.magenta(item.name), fmtVersion(item.version, item.desiredVer, item.reportedVer), chalk_1.default.dim(item.module.displayName));
83
+ for (const name of Object.keys(item.settings)) {
84
+ console.log(' ', name, fmt(item.settings[name]));
85
+ }
86
+ }
87
+ // console.log(JSON.stringify(result, null, 1));
88
+ };
89
+ //# sourceMappingURL=settingsShow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsShow.js","sourceRoot":"","sources":["../../../src/commands/legacydev/settingsShow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
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
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ /* eslint-disable @typescript-eslint/no-unused-vars */
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const admin_api_1 = require("../../services/admin-api");
10
+ const findModule = (selectedModule, installedModules, modules, orgsById) => {
11
+ for (const installed of Object.values(installedModules)) {
12
+ const module = modules.find((m) => m._id === installed.moduleId);
13
+ if (!module)
14
+ console.error(chalk_1.default.red(`Module ${installed.moduleId} not found`));
15
+ const { organizationName } = orgsById[module.organizationId];
16
+ if (!organizationName)
17
+ console.error(chalk_1.default.red(`Org ${module.organizationId} not found`));
18
+ const fullName = `${organizationName}.${module.moduleName}`;
19
+ const shortName = module.moduleName;
20
+ if (selectedModule === fullName)
21
+ return { installed, module, name: fullName, path: '' };
22
+ if (selectedModule === shortName)
23
+ return { installed, module, name: fullName, path: '' };
24
+ if (selectedModule.startsWith(`${fullName}.`))
25
+ return {
26
+ installed,
27
+ module,
28
+ name: fullName,
29
+ path: selectedModule.split(`${fullName}.`)[1],
30
+ };
31
+ if (selectedModule.startsWith(`${shortName}.`))
32
+ return {
33
+ installed,
34
+ module,
35
+ name: fullName,
36
+ path: selectedModule.split(`${shortName}.`)[1],
37
+ };
38
+ }
39
+ return false;
40
+ };
41
+ const updateModuleVersion = async (selected, info, installedModules) => {
42
+ const versions = await (0, admin_api_1.adminApi)().deviceModules.listModuleVersions(info.module._id);
43
+ let version = selected;
44
+ if (selected === 'latest' || selected === 'last') {
45
+ // @ts-ignore
46
+ versions.sort((a, b) => a.createdAt - b.createdAt);
47
+ version = versions[versions.length - 1].version;
48
+ }
49
+ const found = versions.find((ver) => ver.version === version);
50
+ if (!found)
51
+ throw new Error(`Module version ${version} not found`);
52
+ console.log(chalk_1.default.dim('Version found'));
53
+ if (installedModules[info.module._id].versionId !== found.id) {
54
+ return [found, true];
55
+ }
56
+ return [found, false];
57
+ };
58
+ exports.default = async (deviceName, patches) => {
59
+ const device = await (0, admin_api_1.adminApi)().devices.getDeviceByName(deviceName);
60
+ if (!device) {
61
+ throw new Error('Device not found');
62
+ }
63
+ if (device.parentDevice.type !== 'iothub' || !device.parentDevice.id) {
64
+ throw new Error('Non Edge device cannot have edge modules');
65
+ }
66
+ const iothubDeviceId = device.parentDevice.id;
67
+ const orgs = await (0, admin_api_1.adminApi)().organizations.listOrganizations();
68
+ const orgsById = orgs.reduce((res, o) => {
69
+ res[o.id] = o;
70
+ return res;
71
+ }, {});
72
+ const modules = await (0, admin_api_1.adminApi)().deviceModules.listModules();
73
+ const installedModules = await (0, admin_api_1.adminApi)().devices.getDeviceInstalledModulesEdge(iothubDeviceId);
74
+ let changed = false;
75
+ for (const patch of patches) {
76
+ const [name, value] = patch.split('=');
77
+ const [selectedModule, selectedVersion] = name.split('@');
78
+ if (!selectedModule)
79
+ throw new Error('Please specify module name');
80
+ const info = findModule(selectedModule, installedModules, modules, orgsById);
81
+ if (!info)
82
+ throw new Error(`Module not found: ${selectedModule}`);
83
+ console.log(chalk_1.default.dim('Module found'));
84
+ if (selectedVersion) {
85
+ const [version, updated] = await updateModuleVersion(selectedVersion, info, installedModules);
86
+ if (updated) {
87
+ changed = true;
88
+ installedModules[info.module._id].versionId = version.id;
89
+ console.log(chalk_1.default.green(`Module ${chalk_1.default.magenta(info.name)} updated to version ${chalk_1.default.blue(version.version)}`));
90
+ }
91
+ else {
92
+ console.log(chalk_1.default.green(`Module ${chalk_1.default.magenta(info.name)} version ${chalk_1.default.blue(version.version)} not changed`));
93
+ }
94
+ }
95
+ if (value !== undefined && info.path !== '') {
96
+ const type = typeof installedModules[info.module._id].settings[info.path];
97
+ if (type === 'undefined')
98
+ throw new Error(`No such setting: ${info.path}`);
99
+ if (type === 'string') {
100
+ console.log(`Updating setting ${chalk_1.default.magenta(info.name)}.${chalk_1.default.green(info.path)} = ${chalk_1.default.blue(value)}`);
101
+ installedModules[info.module._id].settings[info.path] = value;
102
+ changed = true;
103
+ }
104
+ else {
105
+ throw new Error(`Invalid setting type: ${type}`);
106
+ }
107
+ }
108
+ }
109
+ if (changed) {
110
+ console.log(installedModules);
111
+ await (0, admin_api_1.adminApi)().devices.updateDeviceInstalledModulesEdge(iothubDeviceId, installedModules);
112
+ }
113
+ };
114
+ //# sourceMappingURL=settingsUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsUpdate.js","sourceRoot":"","sources":["../../../src/commands/legacydev/settingsUpdate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
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.shellImpl = shellImpl;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ /* eslint-disable @typescript-eslint/no-unused-vars */
9
+ const child_process_1 = __importDefault(require("child_process"));
10
+ const net_1 = __importDefault(require("net"));
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const os_1 = __importDefault(require("os"));
15
+ const utils_1 = require("../../utils");
16
+ const admin_api_1 = require("../../services/admin-api");
17
+ async function shellImpl(deviceName, options) {
18
+ let forward = options.L;
19
+ const { silent, detached } = options;
20
+ if (!silent)
21
+ console.log(chalk_1.default.dim('> creating keypair'));
22
+ const keyfile = path_1.default.join(os_1.default.tmpdir(), `gridapp${Math.floor(Math.random() * 1000)}.key`);
23
+ if (fs_1.default.existsSync(keyfile)) {
24
+ fs_1.default.unlinkSync(keyfile);
25
+ }
26
+ if (fs_1.default.existsSync(`${keyfile}.pub`)) {
27
+ fs_1.default.unlinkSync(`${keyfile}.pub`);
28
+ }
29
+ child_process_1.default.execSync(`ssh-keygen -t ed25519 -f ${keyfile} -N ""`);
30
+ const key = fs_1.default.readFileSync(`${keyfile}.pub`).toString();
31
+ let stream;
32
+ let isPhyos = true;
33
+ try {
34
+ if (!silent)
35
+ console.log(chalk_1.default.dim(`Connecting to IoTHub for device: ${deviceName}`));
36
+ const { stream: curStream, isPhyos: isPhyosDevice } = (0, utils_1.openStream)(await (0, admin_api_1.adminApi)().devices.startDeviceShellSession(deviceName, { key }));
37
+ stream = curStream;
38
+ isPhyos = isPhyosDevice;
39
+ }
40
+ catch (err) {
41
+ throw new Error(`Unable to establish connection to the device. Please try again. ${err}`);
42
+ }
43
+ let socketDataCounter = 0;
44
+ const keepAliveDurationSeconds = 25;
45
+ const timeoutDuration = 1000 * (keepAliveDurationSeconds + 5);
46
+ // Each interval lasts 30 seconds (timeoutDuration)
47
+ // 15 minutes = 15 × 60 = 900 seconds -> 900 seconds ÷ 30 seconds/interval = 30 intervals
48
+ const maxInactivityCount = 30; // 15 mins
49
+ let inactivityFlagCounter = 0;
50
+ let activityCheckInterval;
51
+ function startActivityCheckInterval() {
52
+ // Don't start activity check if detached mode is enabled
53
+ if (detached) {
54
+ return;
55
+ }
56
+ clearInterval(activityCheckInterval);
57
+ activityCheckInterval = setInterval(() => {
58
+ if (socketDataCounter > 3) {
59
+ inactivityFlagCounter = 0;
60
+ socketDataCounter = 0;
61
+ return;
62
+ }
63
+ inactivityFlagCounter += 1;
64
+ if (inactivityFlagCounter >= maxInactivityCount) {
65
+ console.log(chalk_1.default.dim('> No activity for ~15 min, terminating connection.'));
66
+ stream.destroy();
67
+ clearInterval(activityCheckInterval);
68
+ }
69
+ socketDataCounter = 0;
70
+ }, timeoutDuration);
71
+ }
72
+ stream.on('data', () => {
73
+ socketDataCounter += 1;
74
+ });
75
+ stream.on('connect', () => {
76
+ startActivityCheckInterval();
77
+ });
78
+ const port = Math.floor(10000 + ((Math.random() * 100000) % 10000));
79
+ let fwdPort = Math.floor(10000 + ((Math.random() * 100000) % 10000));
80
+ // support for -L fwdPort:host:dstPort option
81
+ if (forward) {
82
+ const split = forward.split(':');
83
+ if (split.length === 3) {
84
+ fwdPort = split.shift();
85
+ forward = split.join(':');
86
+ }
87
+ }
88
+ if (!silent)
89
+ console.log(chalk_1.default.dim('> waiting for client'));
90
+ // wait for a single connection
91
+ const connPromise = new Promise((resolve) => {
92
+ const server = net_1.default.createServer((c) => {
93
+ server.close();
94
+ resolve(c);
95
+ });
96
+ server.listen(port, () => {
97
+ if (!silent)
98
+ console.log(chalk_1.default.dim(`> ssh listening on port ${chalk_1.default.blue(port)}`));
99
+ });
100
+ });
101
+ const fwdOptions = forward ? ['-L', `0.0.0.0:${fwdPort}:${forward}`] : [];
102
+ const sshProcess = child_process_1.default.spawn('ssh', [
103
+ '-qtt',
104
+ `${isPhyos ? 'phygrid' : 'ombori'}@localhost`,
105
+ ...fwdOptions,
106
+ '-p',
107
+ `${port}`,
108
+ '-o',
109
+ 'UserKnownHostsFile=/dev/null',
110
+ '-o',
111
+ 'StrictHostKeyChecking=no',
112
+ '-o',
113
+ `ServerAliveInterval=${keepAliveDurationSeconds}`,
114
+ '-i',
115
+ keyfile,
116
+ ], {
117
+ stdio: silent ? 'ignore' : 'inherit',
118
+ detached,
119
+ });
120
+ // Prevent the child from receiving SIGINT
121
+ process.removeAllListeners('SIGINT');
122
+ const conn = await connPromise;
123
+ if (forward && !silent) {
124
+ const prefix = /:443$/.test(forward) ? 'https://' : 'http://';
125
+ console.log(chalk_1.default.dim(`> port ${chalk_1.default.blue(`${prefix}${forward}`)} fowarded to ${chalk_1.default.bold(chalk_1.default.green(`${prefix}localhost:${fwdPort}`))}`));
126
+ }
127
+ if (!silent)
128
+ console.log(chalk_1.default.dim('> client connected'));
129
+ conn.on('end', () => {
130
+ if (!silent)
131
+ console.log(chalk_1.default.dim('> client disconnected'));
132
+ });
133
+ // removing key file
134
+ setTimeout(() => {
135
+ fs_1.default.unlinkSync(keyfile);
136
+ }, 10000);
137
+ return {
138
+ shellPromise: new Promise((resolve, reject) => {
139
+ conn.pipe(stream);
140
+ stream.pipe(conn);
141
+ stream.on('error', () => {
142
+ if (!silent)
143
+ console.log(chalk_1.default.red('> socket error'));
144
+ clearInterval(activityCheckInterval);
145
+ reject();
146
+ });
147
+ stream.on('close', (e) => {
148
+ if (!silent)
149
+ console.log(chalk_1.default.dim('> socket closed'));
150
+ clearInterval(activityCheckInterval);
151
+ resolve();
152
+ });
153
+ }),
154
+ process: sshProcess,
155
+ };
156
+ }
157
+ async function shell(deviceName, options) {
158
+ try {
159
+ const { shellPromise, process } = await shellImpl(deviceName, options);
160
+ await shellPromise;
161
+ }
162
+ catch (error) {
163
+ process.exit(1);
164
+ }
165
+ }
166
+ exports.default = shell;
167
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/commands/legacydev/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const admin_api_1 = require("../../services/admin-api");
4
+ async function config(deviceName) {
5
+ const data = await (0, admin_api_1.adminApi)().devices.getDeviceTwinEdge(deviceName);
6
+ console.log(JSON.stringify(data, null, 2));
7
+ }
8
+ exports.default = config;
9
+ //# sourceMappingURL=showTwin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showTwin.js","sourceRoot":"","sources":["../../../src/commands/legacydev/showTwin.ts"],"names":[],"mappings":";;AAAA,wDAAoD;AAEpD,KAAK,UAAU,MAAM,CAAC,UAAU;IAC9B,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAQ,GAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,kBAAe,MAAM,CAAC"}