@phystack/cli 4.4.29
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 +322 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +375 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +409 -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 +546 -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 +189 -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 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/descriptor/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 phyhub_1 = require("../../services/phyhub");
|
|
8
|
+
const tenant_storage_1 = require("../../utils/tenant-storage");
|
|
9
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
10
|
+
const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
|
|
11
|
+
/**
|
|
12
|
+
* Format and display descriptor details in a user-friendly way
|
|
13
|
+
* @param descriptor The descriptor to display
|
|
14
|
+
*/
|
|
15
|
+
const displayDescriptor = (descriptor) => {
|
|
16
|
+
console.log(chalk_1.default.bold('\nDESCRIPTOR DETAILS'));
|
|
17
|
+
console.log('-'.repeat(50));
|
|
18
|
+
console.log(`${chalk_1.default.bold('Name:')} ${descriptor.name}`);
|
|
19
|
+
console.log(`${chalk_1.default.bold('Display Name:')} ${descriptor.displayName}`);
|
|
20
|
+
console.log(`${chalk_1.default.bold('Unique Name:')} ${descriptor.uniqueName}`);
|
|
21
|
+
console.log(`${chalk_1.default.bold('ID:')} ${descriptor.id}`);
|
|
22
|
+
console.log(`${chalk_1.default.bold('Latest Version:')} ${descriptor.latestVersion}`);
|
|
23
|
+
console.log(`${chalk_1.default.bold('Tenant ID:')} ${descriptor.tenantId}`);
|
|
24
|
+
console.log(`${chalk_1.default.bold('Created:')} ${new Date(descriptor.createdAt).toLocaleString()}`);
|
|
25
|
+
console.log(`${chalk_1.default.bold('Updated:')} ${new Date(descriptor.updatedAt).toLocaleString()}`);
|
|
26
|
+
console.log(`\n${chalk_1.default.bold('Description:')}`);
|
|
27
|
+
console.log(descriptor.description || '(No description provided)');
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Command to show details of a specific descriptor
|
|
31
|
+
* @param descriptorName Name of the descriptor to show
|
|
32
|
+
* @param options Command options
|
|
33
|
+
*/
|
|
34
|
+
exports.default = async (descriptorName, options = {}) => {
|
|
35
|
+
try {
|
|
36
|
+
// First check if we have a saved tenant
|
|
37
|
+
let organization;
|
|
38
|
+
if (await (0, tenant_storage_1.hasTenant)()) {
|
|
39
|
+
organization = await (0, tenant_storage_1.getTenant)();
|
|
40
|
+
console.log(chalk_1.default.dim(`Using saved tenant: ${organization.displayName}`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Prompt user to select an organization if no saved tenant
|
|
44
|
+
organization = await (0, org_selector_1.selectOrganization)('Select a tenant to fetch descriptor from:');
|
|
45
|
+
}
|
|
46
|
+
if (!organization) {
|
|
47
|
+
console.log(chalk_1.default.yellow('No tenant selected. Exiting.'));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Use the phyhub service to fetch descriptor details
|
|
51
|
+
console.log(chalk_1.default.dim(`Fetching descriptor: ${descriptorName}`));
|
|
52
|
+
const descriptor = await (0, with_spinner_1.default)(async () => {
|
|
53
|
+
const result = await (0, phyhub_1.phyhubApi)().getTwinDescriptorByName(organization.phyhubUrl, organization.id, descriptorName);
|
|
54
|
+
return result;
|
|
55
|
+
}, `Fetching descriptor "${descriptorName}" from ${organization.displayName}...`);
|
|
56
|
+
if (!descriptor) {
|
|
57
|
+
console.log(chalk_1.default.yellow(`Descriptor "${descriptorName}" not found.`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Display the descriptor details
|
|
61
|
+
displayDescriptor(descriptor);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error(chalk_1.default.red(`Error showing descriptor: ${error.message}`));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/descriptor/show.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,kDAAkD;AAClD,+DAAkE;AAClE,2DAA8D;AAC9D,4EAAmD;AAGnD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,UAAkC,EAAE,EAAE;IAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CACT,GAAG,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CACtF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,GAAG,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CACtF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,2BAA2B,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF;;;;GAIG;AACH,kBAAe,KAAK,EAAE,cAAsB,EAAE,UAAe,EAAE,EAAE,EAAE;IACjE,IAAI,CAAC;QACH,wCAAwC;QACxC,IAAI,YAAY,CAAC;QACjB,IAAI,MAAM,IAAA,0BAAS,GAAE,EAAE,CAAC;YACtB,YAAY,GAAG,MAAM,IAAA,0BAAS,GAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,2DAA2D;YAC3D,YAAY,GAAG,MAAM,IAAA,iCAAkB,EACrC,2CAA2C,CAC5C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,qDAAqD;QACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,MAAM,IAAA,sBAAW,EAAC,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC,uBAAuB,CACtD,YAAY,CAAC,SAAS,EACtB,YAAY,CAAC,EAAE,EACf,cAAc,CACf,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,wBAAwB,cAAc,UAAU,YAAY,CAAC,WAAW,KAAK,CAAC,CAAC;QAElF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,eAAe,cAAc,cAAc,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
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 child_process_1 = require("child_process");
|
|
8
|
+
const device_picker_1 = require("../app/device-picker");
|
|
9
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
10
|
+
const tenant_storage_1 = require("../../utils/tenant-storage");
|
|
11
|
+
const emulated_device_1 = require("../../utils/emulated-device");
|
|
12
|
+
/**
|
|
13
|
+
* Setup a development environment with device credentials as environment variables
|
|
14
|
+
*
|
|
15
|
+
* @param command Optional command to run in the development environment
|
|
16
|
+
* @param options Command options
|
|
17
|
+
* @returns Promise that resolves when the command completes
|
|
18
|
+
*/
|
|
19
|
+
exports.default = async (command, options = {}) => {
|
|
20
|
+
try {
|
|
21
|
+
// In export modes, we need to redirect console.log to suppress all output
|
|
22
|
+
// This prevents any debug messages from breaking eval
|
|
23
|
+
if (options.export || options.exportPowershell) {
|
|
24
|
+
// Save original console methods
|
|
25
|
+
const originalConsoleLog = console.log;
|
|
26
|
+
const originalConsoleError = console.error;
|
|
27
|
+
// Temporarily disable all console output
|
|
28
|
+
console.log = () => { };
|
|
29
|
+
console.error = () => { };
|
|
30
|
+
try {
|
|
31
|
+
// Check if we already have a saved device
|
|
32
|
+
const hasDevice = await (0, emulated_device_1.hasEmulatedDevice)();
|
|
33
|
+
if (!hasDevice) {
|
|
34
|
+
// Restore console for error message
|
|
35
|
+
console.log = originalConsoleLog;
|
|
36
|
+
console.error = originalConsoleError;
|
|
37
|
+
console.error('No saved device found. Run "phy dev select" first.');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const device = await (0, emulated_device_1.getEmulatedDevice)();
|
|
41
|
+
// Validate that we have the necessary information
|
|
42
|
+
if (!device?.id) {
|
|
43
|
+
// Restore console for error message
|
|
44
|
+
console.log = originalConsoleLog;
|
|
45
|
+
console.error = originalConsoleError;
|
|
46
|
+
console.error('Error: Missing device ID. Run "phy dev select" to select a valid device.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Prepare environment variables
|
|
50
|
+
const envVars = {
|
|
51
|
+
PHYGRID_DEVICE_ID: device.id,
|
|
52
|
+
PHYGRID_DEVICE_KEY: device.accessKey || '',
|
|
53
|
+
};
|
|
54
|
+
// Output only the export commands with no other text
|
|
55
|
+
if (options.export) {
|
|
56
|
+
// Unix shell export format (bash, zsh, etc.)
|
|
57
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
58
|
+
process.stdout.write(`export ${key}="${value}";\n`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (options.exportPowershell) {
|
|
62
|
+
// PowerShell export format
|
|
63
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
64
|
+
process.stdout.write(`$env:${key}="${value}";\n`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Restore console methods before returning
|
|
68
|
+
console.log = originalConsoleLog;
|
|
69
|
+
console.error = originalConsoleError;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// Restore console methods
|
|
74
|
+
console.log = originalConsoleLog;
|
|
75
|
+
console.error = originalConsoleError;
|
|
76
|
+
console.error(`Error: ${error.message}`);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Normal mode (not export) - continue with regular flow
|
|
81
|
+
let device;
|
|
82
|
+
const hasDevice = await (0, emulated_device_1.hasEmulatedDevice)();
|
|
83
|
+
if (hasDevice) {
|
|
84
|
+
device = await (0, emulated_device_1.getEmulatedDevice)();
|
|
85
|
+
console.log(chalk_1.default.green(`Using saved device: ${chalk_1.default.cyan(device.name)} (${device.id})`));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(chalk_1.default.yellow('No saved device found. You need to select a device first.'));
|
|
89
|
+
// First check if we have a saved tenant
|
|
90
|
+
let organization;
|
|
91
|
+
if (await (0, tenant_storage_1.hasTenant)()) {
|
|
92
|
+
organization = await (0, tenant_storage_1.getTenant)();
|
|
93
|
+
console.log(chalk_1.default.dim(`Using saved tenant: ${organization.displayName}`));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// Select a tenant if not already saved
|
|
97
|
+
organization = await (0, org_selector_1.selectOrganization)('Select an organization to find devices:');
|
|
98
|
+
}
|
|
99
|
+
if (!organization) {
|
|
100
|
+
console.log(chalk_1.default.yellow('No organization selected. Exiting.'));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Select a device from the chosen organization
|
|
104
|
+
console.log(chalk_1.default.dim('Please select a device for development:'));
|
|
105
|
+
device = await (0, device_picker_1.selectDevice)(organization.slug);
|
|
106
|
+
if (!device) {
|
|
107
|
+
console.log(chalk_1.default.yellow('No device selected. Operation cancelled.'));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Validate that we have the necessary information
|
|
112
|
+
if (!device?.id) {
|
|
113
|
+
console.error(chalk_1.default.red('Error: Missing device ID'));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (!device?.accessKey) {
|
|
117
|
+
console.error(chalk_1.default.yellow('Warning: Missing device access key'));
|
|
118
|
+
}
|
|
119
|
+
// Prepare environment variables
|
|
120
|
+
const envVars = {
|
|
121
|
+
PHYGRID_DEVICE_ID: device.id,
|
|
122
|
+
PHYGRID_DEVICE_KEY: device.accessKey || '',
|
|
123
|
+
};
|
|
124
|
+
// Skip the variables display in export mode
|
|
125
|
+
console.log(chalk_1.default.green('Setting environment variables:'));
|
|
126
|
+
console.log(chalk_1.default.dim(` PHYGRID_DEVICE_ID=${device.id}`));
|
|
127
|
+
if (device.accessKey) {
|
|
128
|
+
console.log(chalk_1.default.dim(` PHYGRID_DEVICE_KEY=************`));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(chalk_1.default.yellow(' PHYGRID_DEVICE_KEY not set (no access key available)'));
|
|
132
|
+
}
|
|
133
|
+
// If no command provided, show how to use variables in the shell
|
|
134
|
+
if (!command) {
|
|
135
|
+
console.log(chalk_1.default.green('\nPhygrid applications require device credentials for local development.'));
|
|
136
|
+
console.log(chalk_1.default.dim('These credentials are used to authenticate with the PhyHub API and access device resources.'));
|
|
137
|
+
console.log(chalk_1.default.green('\nTo set device environment variables in your current shell session:'));
|
|
138
|
+
console.log(chalk_1.default.cyan(' eval "$(phy dev develop --export)" # For bash/zsh'));
|
|
139
|
+
console.log(chalk_1.default.cyan(' phy dev develop --export-powershell | Invoke-Expression # For PowerShell'));
|
|
140
|
+
console.log(chalk_1.default.dim('\nThis will set the following variables:'));
|
|
141
|
+
console.log(chalk_1.default.dim(' PHYGRID_DEVICE_ID'));
|
|
142
|
+
console.log(chalk_1.default.dim(' PHYGRID_DEVICE_KEY'));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Run the command with the environment variables set
|
|
146
|
+
console.log(chalk_1.default.green(`\nRunning command: ${chalk_1.default.cyan(command)}`));
|
|
147
|
+
const childProcess = (0, child_process_1.spawn)(command, {
|
|
148
|
+
stdio: 'inherit',
|
|
149
|
+
env: { ...process.env, ...envVars },
|
|
150
|
+
shell: options.shell !== false,
|
|
151
|
+
});
|
|
152
|
+
// Handle process exit
|
|
153
|
+
await new Promise((resolve, reject) => {
|
|
154
|
+
childProcess.on('close', (code) => {
|
|
155
|
+
if (code === 0) {
|
|
156
|
+
console.log(chalk_1.default.green('\nCommand completed successfully.'));
|
|
157
|
+
resolve();
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.error(chalk_1.default.red(`\nCommand exited with code ${code}`));
|
|
161
|
+
reject(new Error(`Command exited with code ${code}`));
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
childProcess.on('error', (err) => {
|
|
165
|
+
console.error(chalk_1.default.red(`\nError running command: ${err.message}`));
|
|
166
|
+
reject(err);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=develop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"develop.js","sourceRoot":"","sources":["../../../src/commands/dev/develop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 websocket_stream_1 = __importDefault(require("websocket-stream"));
|
|
7
|
+
const child_process_1 = __importDefault(require("child_process"));
|
|
8
|
+
const net_1 = __importDefault(require("net"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const os_1 = __importDefault(require("os"));
|
|
13
|
+
const url_1 = __importDefault(require("url"));
|
|
14
|
+
const admin_api_1 = require("../../services/admin-api");
|
|
15
|
+
async function forward(deviceName, fwdUrl, options) {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = url_1.default.parse(fwdUrl);
|
|
18
|
+
const isHttp = parsed.protocol === 'http:';
|
|
19
|
+
const isHttps = parsed.protocol === 'https:';
|
|
20
|
+
if (!isHttp && !isHttps)
|
|
21
|
+
throw new Error('Can only forward http and https urls');
|
|
22
|
+
let remotePort = parsed.port;
|
|
23
|
+
if (remotePort === null) {
|
|
24
|
+
if (isHttp)
|
|
25
|
+
remotePort = '80';
|
|
26
|
+
if (isHttps)
|
|
27
|
+
remotePort = '443';
|
|
28
|
+
}
|
|
29
|
+
const remoteHost = parsed.hostname;
|
|
30
|
+
const forwardedUrl = { ...parsed, host: null, href: null, hostname: 'localhost' };
|
|
31
|
+
console.log(chalk_1.default.dim('> creating keypair'));
|
|
32
|
+
const keyfile = path_1.default.join(os_1.default.tmpdir(), `gridapp${Math.floor(Math.random() * 1000)}.key`);
|
|
33
|
+
if (fs_1.default.existsSync(keyfile)) {
|
|
34
|
+
fs_1.default.unlinkSync(keyfile);
|
|
35
|
+
}
|
|
36
|
+
if (fs_1.default.existsSync(`${keyfile}.pub`)) {
|
|
37
|
+
fs_1.default.unlinkSync(`${keyfile}.pub`);
|
|
38
|
+
}
|
|
39
|
+
child_process_1.default.execSync(`ssh-keygen -t ed25519 -f ${keyfile} -N ""`);
|
|
40
|
+
const key = fs_1.default.readFileSync(`${keyfile}.pub`).toString();
|
|
41
|
+
console.log(chalk_1.default.dim('> starting session'));
|
|
42
|
+
try {
|
|
43
|
+
const { url, auth, isPhyos, } = await (0, admin_api_1.adminApi)().devices.startPhyHubDeviceShellSession(deviceName, { key });
|
|
44
|
+
console.log(chalk_1.default.dim('> opening local service'));
|
|
45
|
+
const port = Math.floor(10000 + ((Math.random() * 100000) % 10000));
|
|
46
|
+
const fwdPort = Math.floor(10000 + ((Math.random() * 100000) % 10000));
|
|
47
|
+
forwardedUrl.port = `${fwdPort}`;
|
|
48
|
+
// wait for a single connection
|
|
49
|
+
const connPromise = new Promise((resolve) => {
|
|
50
|
+
const server = net_1.default.createServer((c) => {
|
|
51
|
+
server.close();
|
|
52
|
+
resolve(c);
|
|
53
|
+
});
|
|
54
|
+
server.listen(port, () => console.log(chalk_1.default.dim(`> ssh listening on port ${chalk_1.default.blue(port)}`)));
|
|
55
|
+
});
|
|
56
|
+
child_process_1.default.spawn('ssh', [
|
|
57
|
+
`${isPhyos ? 'phygrid' : 'ombori'}@localhost`,
|
|
58
|
+
'-L',
|
|
59
|
+
`0.0.0.0:${fwdPort}:${remoteHost}:${remotePort}`,
|
|
60
|
+
'-p',
|
|
61
|
+
`${port}`,
|
|
62
|
+
'-o',
|
|
63
|
+
'UserKnownHostsFile=/dev/null',
|
|
64
|
+
'-o',
|
|
65
|
+
'StrictHostKeyChecking=no',
|
|
66
|
+
'-o',
|
|
67
|
+
'ServerAliveInterval=60',
|
|
68
|
+
'-N',
|
|
69
|
+
'-i',
|
|
70
|
+
keyfile,
|
|
71
|
+
], { stdio: 'inherit' });
|
|
72
|
+
const conn = await connPromise;
|
|
73
|
+
const tgt = url_1.default.format(forwardedUrl);
|
|
74
|
+
console.log(chalk_1.default.dim(`Url ${chalk_1.default.blue(fwdUrl)} forwarded to ${chalk_1.default.bold(chalk_1.default.green(tgt))}`));
|
|
75
|
+
console.log(chalk_1.default.dim('> client connected'));
|
|
76
|
+
conn.on('end', () => {
|
|
77
|
+
console.log(chalk_1.default.dim('> client disconnected'));
|
|
78
|
+
});
|
|
79
|
+
// removing key file
|
|
80
|
+
setTimeout(() => {
|
|
81
|
+
fs_1.default.unlinkSync(keyfile);
|
|
82
|
+
}, 10000);
|
|
83
|
+
const exited = new Promise((resolve, reject) => {
|
|
84
|
+
const ws = (0, websocket_stream_1.default)(url, { headers: { Authorization: `Bearer ${auth}` } });
|
|
85
|
+
console.log(chalk_1.default.dim(`> connection opened`));
|
|
86
|
+
console.log(chalk_1.default.dim('Opening browser'));
|
|
87
|
+
if (process.platform === 'darwin')
|
|
88
|
+
child_process_1.default.spawn('open', [tgt]);
|
|
89
|
+
if (process.platform === 'win32')
|
|
90
|
+
child_process_1.default.exec(`start ${tgt}`);
|
|
91
|
+
conn.pipe(ws);
|
|
92
|
+
ws.pipe(conn);
|
|
93
|
+
ws.on('error', () => {
|
|
94
|
+
console.log(chalk_1.default.red('> socket error'));
|
|
95
|
+
reject();
|
|
96
|
+
});
|
|
97
|
+
ws.on('close', () => {
|
|
98
|
+
console.log(chalk_1.default.dim('> socket closed'));
|
|
99
|
+
resolve();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
103
|
+
return exited;
|
|
104
|
+
}
|
|
105
|
+
catch (apiError) {
|
|
106
|
+
if (apiError.message && apiError.message.includes('Unauthorized')) {
|
|
107
|
+
throw new Error(`Unauthorized. Please run "phy login" to use this command.`);
|
|
108
|
+
}
|
|
109
|
+
throw apiError;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error(chalk_1.default.red(error.toString()));
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.default = forward;
|
|
118
|
+
//# sourceMappingURL=forward.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../src/commands/dev/forward.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 commander_1 = __importDefault(require("commander"));
|
|
7
|
+
const utils_1 = require("../../utils");
|
|
8
|
+
const shell_1 = __importDefault(require("./shell"));
|
|
9
|
+
const vnc_1 = __importDefault(require("./vnc"));
|
|
10
|
+
const forward_1 = __importDefault(require("./forward"));
|
|
11
|
+
const screen_devtools_1 = __importDefault(require("./screen-devtools"));
|
|
12
|
+
const list_1 = __importDefault(require("./list"));
|
|
13
|
+
const select_1 = __importDefault(require("./select"));
|
|
14
|
+
const develop_1 = __importDefault(require("./develop"));
|
|
15
|
+
const dev = commander_1.default.command('dev').description('Compute devices management');
|
|
16
|
+
// Shell command
|
|
17
|
+
dev
|
|
18
|
+
.command('shell <device>')
|
|
19
|
+
.option('-L <ip>:<port>', 'Forward remote port to a local machine')
|
|
20
|
+
.description('Open a shell session to a device via PhyHub')
|
|
21
|
+
.usage('<device> - open shell via PhyHub')
|
|
22
|
+
.usage('-L <host>:<port> <device> - open shell and forward a remote port')
|
|
23
|
+
.action((0, utils_1.handleError)(shell_1.default));
|
|
24
|
+
// VNC command
|
|
25
|
+
dev
|
|
26
|
+
.command('vnc <device>')
|
|
27
|
+
.description('Open a VNC session to a device via PhyHub')
|
|
28
|
+
.action((0, utils_1.handleError)(vnc_1.default));
|
|
29
|
+
// Forward command
|
|
30
|
+
dev
|
|
31
|
+
.command('forward <device> <url>')
|
|
32
|
+
.description("Access a url from device's local network via PhyHub")
|
|
33
|
+
.action((0, utils_1.handleError)(forward_1.default));
|
|
34
|
+
// Screen DevTools command
|
|
35
|
+
dev
|
|
36
|
+
.command('screen-devtools <device>')
|
|
37
|
+
.description('Open Chrome / Chromium DevTools debugging session to a device')
|
|
38
|
+
.option('-u, --url <url>', 'URL to navigate to after connecting')
|
|
39
|
+
.option('-p, --port <port>', 'Port to forward to')
|
|
40
|
+
.action((0, utils_1.handleError)(screen_devtools_1.default));
|
|
41
|
+
// List devices command
|
|
42
|
+
dev
|
|
43
|
+
.command('list [searchQuery]')
|
|
44
|
+
.description('List devices from PhyHub')
|
|
45
|
+
.option('-j, --json', 'Output in JSON format')
|
|
46
|
+
.option('--limit <number>', 'Maximum number of devices to fetch', parseInt)
|
|
47
|
+
.option('--page <number>', 'Page number for pagination', parseInt)
|
|
48
|
+
.option('--search <term>', 'Search term to filter devices (deprecated, use positional argument)')
|
|
49
|
+
.action((0, utils_1.handleError)(list_1.default));
|
|
50
|
+
// Select device command
|
|
51
|
+
dev
|
|
52
|
+
.command('select')
|
|
53
|
+
.description('Select a device for screen app emulation')
|
|
54
|
+
.option('--clear', 'Clear the saved device')
|
|
55
|
+
.action((0, utils_1.handleError)(select_1.default));
|
|
56
|
+
// Develop command
|
|
57
|
+
dev
|
|
58
|
+
.command('develop [command]')
|
|
59
|
+
.description('Set PHYGRID_DEVICE_ID and PHYGRID_DEVICE_KEY environment variables for local development')
|
|
60
|
+
.option('--no-shell', 'Disable shell mode when running the command')
|
|
61
|
+
.option('--export', 'Output export commands for bash/zsh shells')
|
|
62
|
+
.option('--export-powershell', 'Output export commands for PowerShell')
|
|
63
|
+
.action((0, utils_1.handleError)(develop_1.default));
|
|
64
|
+
// Other commands for new devices will be added here
|
|
65
|
+
exports.default = dev;
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAgC;AAChC,uCAA0C;AAC1C,oDAA4B;AAC5B,gDAAwB;AACxB,wDAAgC;AAChC,wEAA+C;AAC/C,kDAA0B;AAC1B,sDAA8B;AAC9B,wDAAgC;AAEhC,MAAM,GAAG,GAAG,mBAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAE7E,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,gBAAgB,CAAC;KACzB,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;KAClE,WAAW,CAAC,6CAA6C,CAAC;KAC1D,KAAK,CAAC,kCAAkC,CAAC;KACzC,KAAK,CAAC,kEAAkE,CAAC;KACzE,MAAM,CAAC,IAAA,mBAAW,EAAC,eAAK,CAAC,CAAC,CAAC;AAE9B,cAAc;AACd,GAAG;KACA,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,IAAA,mBAAW,EAAC,aAAG,CAAC,CAAC,CAAC;AAE5B,kBAAkB;AAClB,GAAG;KACA,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,0BAA0B;AAC1B,GAAG;KACA,OAAO,CAAC,0BAA0B,CAAC;KACnC,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;KAChE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,IAAA,mBAAW,EAAC,yBAAc,CAAC,CAAC,CAAC;AAEvC,uBAAuB;AACvB,GAAG;KACA,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,oCAAoC,EAAE,QAAQ,CAAC;KAC1E,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,QAAQ,CAAC;KACjE,MAAM,CAAC,iBAAiB,EAAE,qEAAqE,CAAC;KAChG,MAAM,CAAC,IAAA,mBAAW,EAAC,cAAI,CAAC,CAAC,CAAC;AAE7B,wBAAwB;AACxB,GAAG;KACA,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC3C,MAAM,CAAC,IAAA,mBAAW,EAAC,gBAAM,CAAC,CAAC,CAAC;AAE/B,kBAAkB;AAClB,GAAG;KACA,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CACV,0FAA0F,CAC3F;KACA,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;KACnE,MAAM,CAAC,UAAU,EAAE,4CAA4C,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;KACtE,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,oDAAoD;AAEpD,kBAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 utils_1 = require("../../utils");
|
|
8
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
9
|
+
const tenant_storage_1 = require("../../utils/tenant-storage");
|
|
10
|
+
const device_fetcher_1 = require("../../utils/device-fetcher");
|
|
11
|
+
/**
|
|
12
|
+
* Apply color formatting to device status with dot indicator
|
|
13
|
+
* @param status Device status string
|
|
14
|
+
* @returns Colored status string with dot indicator
|
|
15
|
+
*/
|
|
16
|
+
function formatStatus(status) {
|
|
17
|
+
const normalizedStatus = status.toLowerCase();
|
|
18
|
+
if (normalizedStatus === 'online') {
|
|
19
|
+
return chalk_1.default.green('● ') + chalk_1.default.green(status);
|
|
20
|
+
}
|
|
21
|
+
if (normalizedStatus === 'offline') {
|
|
22
|
+
return chalk_1.default.red('● ') + chalk_1.default.red(status);
|
|
23
|
+
}
|
|
24
|
+
if (normalizedStatus === 'failing' || normalizedStatus === 'error') {
|
|
25
|
+
return chalk_1.default.yellow('● ') + chalk_1.default.yellow(status);
|
|
26
|
+
}
|
|
27
|
+
return chalk_1.default.gray('○ ') + chalk_1.default.gray(status);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Command to list devices from PhyHub for a specified organization
|
|
31
|
+
*
|
|
32
|
+
* @param searchQuery Optional search query passed as positional argument
|
|
33
|
+
* @param options Command options
|
|
34
|
+
* @returns Promise that resolves when listing is complete
|
|
35
|
+
*/
|
|
36
|
+
exports.default = async (searchQuery, options = {}) => {
|
|
37
|
+
try {
|
|
38
|
+
// Default values
|
|
39
|
+
const { limit = 20, page = 1, search: searchOption } = options;
|
|
40
|
+
// Use positional argument if provided, otherwise use --search option
|
|
41
|
+
const search = searchQuery || searchOption;
|
|
42
|
+
// First check if we have a saved tenant
|
|
43
|
+
let organization;
|
|
44
|
+
if (await (0, tenant_storage_1.hasTenant)()) {
|
|
45
|
+
organization = await (0, tenant_storage_1.getTenant)();
|
|
46
|
+
console.log(chalk_1.default.dim(`Using saved tenant: ${organization.displayName}`));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Prompt user to select an organization if no saved tenant
|
|
50
|
+
organization = await (0, org_selector_1.selectOrganization)('Select an organization to list devices from:');
|
|
51
|
+
}
|
|
52
|
+
if (!organization) {
|
|
53
|
+
console.log(chalk_1.default.yellow('No organization selected. Exiting.'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
console.log(chalk_1.default.dim(`Fetching devices for organization: ${organization.displayName}`));
|
|
57
|
+
// Fetch devices from PhyHub
|
|
58
|
+
const devices = await (0, device_fetcher_1.fetchDevicesFromPhyHub)(organization, limit, page, search);
|
|
59
|
+
if (!devices || devices.length === 0) {
|
|
60
|
+
console.log(chalk_1.default.yellow(`No devices found for organization ${organization.displayName}`));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
console.log(chalk_1.default.green(`Found ${devices.length} devices:`));
|
|
64
|
+
// Format output based on requested format
|
|
65
|
+
if (options.json) {
|
|
66
|
+
// For JSON output, remove access keys before displaying
|
|
67
|
+
const sanitizedDevices = devices.map((device) => {
|
|
68
|
+
const { accessKey, ...rest } = device;
|
|
69
|
+
return rest;
|
|
70
|
+
});
|
|
71
|
+
console.log(JSON.stringify(sanitizedDevices, null, 2));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Format devices for display
|
|
75
|
+
const formattedDevices = devices.map((device) => ({
|
|
76
|
+
id: device.id || device._id || '',
|
|
77
|
+
displayName: device.displayName || device.deviceName || device.name || 'Unnamed Device',
|
|
78
|
+
serial: device.deviceSerial || device.serial || '',
|
|
79
|
+
status: formatStatus(device.status || 'Unknown'),
|
|
80
|
+
}));
|
|
81
|
+
// Print header row
|
|
82
|
+
console.log(chalk_1.default.bold('\nDEVICE NAME'.padEnd(30)), chalk_1.default.bold('ID'.padEnd(30)), chalk_1.default.bold('SERIAL'.padEnd(20)), chalk_1.default.bold('STATUS'));
|
|
83
|
+
console.log('-'.repeat(90)); // Divider line
|
|
84
|
+
// Print as table
|
|
85
|
+
(0, utils_1.printTable)({
|
|
86
|
+
data: formattedDevices,
|
|
87
|
+
fields: ['displayName', 'id', 'serial', 'status'],
|
|
88
|
+
sort: 'displayName',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error(chalk_1.default.red(`Error listing devices: ${error.message}`));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/dev/list.ts"],"names":[],"mappings":"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"}
|