@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.
- package/LICENSE.md +19 -0
- package/README.md +24 -0
- package/bin/index.js +2 -0
- package/dist/commands/app/build-apps.js +66 -0
- package/dist/commands/app/build-apps.js.map +1 -0
- package/dist/commands/app/build-container-remote.js +171 -0
- package/dist/commands/app/build-container-remote.js.map +1 -0
- package/dist/commands/app/build-container.js +330 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +393 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +451 -0
- package/dist/commands/app/create.js.map +1 -0
- package/dist/commands/app/deploy.js +176 -0
- package/dist/commands/app/deploy.js.map +1 -0
- package/dist/commands/app/device-picker.js +150 -0
- package/dist/commands/app/device-picker.js.map +1 -0
- package/dist/commands/app/import.js +303 -0
- package/dist/commands/app/import.js.map +1 -0
- package/dist/commands/app/list.js +26 -0
- package/dist/commands/app/list.js.map +1 -0
- package/dist/commands/app/publish.js +327 -0
- package/dist/commands/app/publish.js.map +1 -0
- package/dist/commands/app/settings.js +129 -0
- package/dist/commands/app/settings.js.map +1 -0
- package/dist/commands/app/types.js +13 -0
- package/dist/commands/app/types.js.map +1 -0
- package/dist/commands/app/upload-description.js +139 -0
- package/dist/commands/app/upload-description.js.map +1 -0
- package/dist/commands/app/upload-settings.js +29 -0
- package/dist/commands/app/upload-settings.js.map +1 -0
- package/dist/commands/app/utils.js +86 -0
- package/dist/commands/app/utils.js.map +1 -0
- package/dist/commands/auth/login.js +111 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +19 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/descriptor/create.js +143 -0
- package/dist/commands/descriptor/create.js.map +1 -0
- package/dist/commands/descriptor/index.js +36 -0
- package/dist/commands/descriptor/index.js.map +1 -0
- package/dist/commands/descriptor/publish.js +163 -0
- package/dist/commands/descriptor/publish.js.map +1 -0
- package/dist/commands/descriptor/show.js +68 -0
- package/dist/commands/descriptor/show.js.map +1 -0
- package/dist/commands/dev/develop.js +175 -0
- package/dist/commands/dev/develop.js.map +1 -0
- package/dist/commands/dev/forward.js +118 -0
- package/dist/commands/dev/forward.js.map +1 -0
- package/dist/commands/dev/index.js +66 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/list.js +96 -0
- package/dist/commands/dev/list.js.map +1 -0
- package/dist/commands/dev/screen-devtools.js +156 -0
- package/dist/commands/dev/screen-devtools.js.map +1 -0
- package/dist/commands/dev/select.js +118 -0
- package/dist/commands/dev/select.js.map +1 -0
- package/dist/commands/dev/shell.js +171 -0
- package/dist/commands/dev/shell.js.map +1 -0
- package/dist/commands/dev/vnc.js +75 -0
- package/dist/commands/dev/vnc.js.map +1 -0
- package/dist/commands/device/select.js +118 -0
- package/dist/commands/device/select.js.map +1 -0
- package/dist/commands/flash.js +1120 -0
- package/dist/commands/flash.js.map +1 -0
- package/dist/commands/inst/create.js +55 -0
- package/dist/commands/inst/create.js.map +1 -0
- package/dist/commands/inst/index.js +15 -0
- package/dist/commands/inst/index.js.map +1 -0
- package/dist/commands/inst/list.js +26 -0
- package/dist/commands/inst/list.js.map +1 -0
- package/dist/commands/legacydev/debug.js +11 -0
- package/dist/commands/legacydev/debug.js.map +1 -0
- package/dist/commands/legacydev/deploy.js +15 -0
- package/dist/commands/legacydev/deploy.js.map +1 -0
- package/dist/commands/legacydev/dumpTwin.js +27 -0
- package/dist/commands/legacydev/dumpTwin.js.map +1 -0
- package/dist/commands/legacydev/forward.js +104 -0
- package/dist/commands/legacydev/forward.js.map +1 -0
- package/dist/commands/legacydev/index.js +188 -0
- package/dist/commands/legacydev/index.js.map +1 -0
- package/dist/commands/legacydev/invoke.js +29 -0
- package/dist/commands/legacydev/invoke.js.map +1 -0
- package/dist/commands/legacydev/js.js +69 -0
- package/dist/commands/legacydev/js.js.map +1 -0
- package/dist/commands/legacydev/list.js +196 -0
- package/dist/commands/legacydev/list.js.map +1 -0
- package/dist/commands/legacydev/logs.js +60 -0
- package/dist/commands/legacydev/logs.js.map +1 -0
- package/dist/commands/legacydev/modules.js +50 -0
- package/dist/commands/legacydev/modules.js.map +1 -0
- package/dist/commands/legacydev/move.js +23 -0
- package/dist/commands/legacydev/move.js.map +1 -0
- package/dist/commands/legacydev/ota.js +88 -0
- package/dist/commands/legacydev/ota.js.map +1 -0
- package/dist/commands/legacydev/patchTwin.js +21 -0
- package/dist/commands/legacydev/patchTwin.js.map +1 -0
- package/dist/commands/legacydev/pin.js +23 -0
- package/dist/commands/legacydev/pin.js.map +1 -0
- package/dist/commands/legacydev/pub.js +25 -0
- package/dist/commands/legacydev/pub.js.map +1 -0
- package/dist/commands/legacydev/rdp.js +64 -0
- package/dist/commands/legacydev/rdp.js.map +1 -0
- package/dist/commands/legacydev/screen-devtools.js +142 -0
- package/dist/commands/legacydev/screen-devtools.js.map +1 -0
- package/dist/commands/legacydev/settingsShow.js +89 -0
- package/dist/commands/legacydev/settingsShow.js.map +1 -0
- package/dist/commands/legacydev/settingsUpdate.js +114 -0
- package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
- package/dist/commands/legacydev/shell.js +167 -0
- package/dist/commands/legacydev/shell.js.map +1 -0
- package/dist/commands/legacydev/showTwin.js +9 -0
- package/dist/commands/legacydev/showTwin.js.map +1 -0
- package/dist/commands/legacydev/statusLog.js +56 -0
- package/dist/commands/legacydev/statusLog.js.map +1 -0
- package/dist/commands/legacydev/sub.js +39 -0
- package/dist/commands/legacydev/sub.js.map +1 -0
- package/dist/commands/legacydev/vnc.js +61 -0
- package/dist/commands/legacydev/vnc.js.map +1 -0
- package/dist/commands/tenant/index.js +21 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/tenant/list.js +14 -0
- package/dist/commands/tenant/list.js.map +1 -0
- package/dist/commands/tenant/select.js +87 -0
- package/dist/commands/tenant/select.js.map +1 -0
- package/dist/commands/vm/create.js +718 -0
- package/dist/commands/vm/create.js.map +1 -0
- package/dist/commands/vm/index.js +130 -0
- package/dist/commands/vm/index.js.map +1 -0
- package/dist/commands/vm/list.js +124 -0
- package/dist/commands/vm/list.js.map +1 -0
- package/dist/commands/vm/logs.js +66 -0
- package/dist/commands/vm/logs.js.map +1 -0
- package/dist/commands/vm/remove.js +180 -0
- package/dist/commands/vm/remove.js.map +1 -0
- package/dist/commands/vm/shell.js +400 -0
- package/dist/commands/vm/shell.js.map +1 -0
- package/dist/commands/vm/start.js +861 -0
- package/dist/commands/vm/start.js.map +1 -0
- package/dist/commands/vm/stop.js +232 -0
- package/dist/commands/vm/stop.js.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-api/admin-api.types.js +3 -0
- package/dist/services/admin-api/admin-api.types.js.map +1 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
- package/dist/services/admin-api/devices-admin-api.service.js +213 -0
- package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/index.js +157 -0
- package/dist/services/admin-api/index.js.map +1 -0
- package/dist/services/admin-api/installations-admin-api.service.js +29 -0
- package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
- package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
- package/dist/services/auth/device-grant-auth.service.js +224 -0
- package/dist/services/auth/device-grant-auth.service.js.map +1 -0
- package/dist/services/phyhub/index.js +200 -0
- package/dist/services/phyhub/index.js.map +1 -0
- package/dist/services/phyhub/phyhub.types.js +3 -0
- package/dist/services/phyhub/phyhub.types.js.map +1 -0
- package/dist/utils/device-fetcher.js +92 -0
- package/dist/utils/device-fetcher.js.map +1 -0
- package/dist/utils/devices.js +41 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/docker-credentials.js +720 -0
- package/dist/utils/docker-credentials.js.map +1 -0
- package/dist/utils/emulated-device.js +91 -0
- package/dist/utils/emulated-device.js.map +1 -0
- package/dist/utils/index.js +180 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/modules.js +36 -0
- package/dist/utils/modules.js.map +1 -0
- package/dist/utils/org-selector.js +108 -0
- package/dist/utils/org-selector.js.map +1 -0
- package/dist/utils/proxy.js +31 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/registry-credentials.js +113 -0
- package/dist/utils/registry-credentials.js.map +1 -0
- package/dist/utils/statuses.js +124 -0
- package/dist/utils/statuses.js.map +1 -0
- package/dist/utils/templates.js +197 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tenant-storage.js +88 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/dist/utils/vm.js +434 -0
- package/dist/utils/vm.js.map +1 -0
- package/dist/utils/with-spinner.js +20 -0
- package/dist/utils/with-spinner.js.map +1 -0
- 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"}
|