@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 @@
|
|
|
1
|
+
{"version":3,"file":"upload-description.js","sourceRoot":"","sources":["../../../src/commands/app/upload-description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const admin_api_1 = require("../../services/admin-api");
|
|
9
|
+
exports.default = async (appName, destination) => {
|
|
10
|
+
try {
|
|
11
|
+
console.log(chalk_1.default.grey('Uploading settings for app'), chalk_1.default.bold(appName), chalk_1.default.gray('from'), chalk_1.default.green(destination));
|
|
12
|
+
if (!fs_1.default.statSync(destination).isDirectory()) {
|
|
13
|
+
throw new Error(`Not a directory: ${destination}`);
|
|
14
|
+
}
|
|
15
|
+
const payload = JSON.parse(fs_1.default.readFileSync(`${destination}/index.json`).toString());
|
|
16
|
+
const insts = await (0, admin_api_1.adminApi)().installations.listInstallations();
|
|
17
|
+
const inst = insts.find((a) => a.appName === appName);
|
|
18
|
+
if (!inst)
|
|
19
|
+
throw new Error('Installation not found');
|
|
20
|
+
inst.settings.provider.app = payload.app;
|
|
21
|
+
await (0, admin_api_1.adminApi)().installations.updateInstallation(inst);
|
|
22
|
+
console.log(chalk_1.default.green('Settings updated'));
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=upload-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-settings.js","sourceRoot":"","sources":["../../../src/commands/app/upload-settings.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,4CAAoB;AACpB,wDAAoD;AAEpD,kBAAe,KAAK,EAAE,OAAe,EAAE,WAAmB,EAAE,EAAE;IAC5D,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,EACxC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EACnB,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAClB,eAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,YAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,GAAG,WAAW,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAQ,GAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAEjE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAEzC,MAAM,IAAA,oBAAQ,GAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
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.checkIfImageExists = exports.upload = exports.DEFAULT_REGISTRY = void 0;
|
|
7
|
+
exports.checkImageExistsInRegistry = checkImageExistsInRegistry;
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
|
+
const azure_storage_1 = require("azure-storage");
|
|
10
|
+
const child_process_1 = __importDefault(require("child_process"));
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
exports.DEFAULT_REGISTRY = 'docker.io';
|
|
13
|
+
const upload = async ({ file, token, gridappId, onProgress = null, contentType, suffix = '', }) => {
|
|
14
|
+
const { uri, sas, container, uuid } = token;
|
|
15
|
+
// TODO: extract thi to a blob service
|
|
16
|
+
const blobService = (0, azure_storage_1.createBlobServiceWithSas)(uri, sas).withFilter(new azure_storage_1.ExponentialRetryPolicyFilter());
|
|
17
|
+
const checkMD5 = false;
|
|
18
|
+
const blockSize = file.size > 1024 * 1024 * 32 ? 1024 * 1024 * 4 : 1024 * 512;
|
|
19
|
+
const options = {
|
|
20
|
+
storeBlobContentMD5: checkMD5,
|
|
21
|
+
blockSize,
|
|
22
|
+
contentSettings: { contentType },
|
|
23
|
+
};
|
|
24
|
+
blobService.singleBlobPutThresholdInBytes = blockSize;
|
|
25
|
+
const filename = `${gridappId}/${uuid}${suffix}`;
|
|
26
|
+
await new Promise((resolve, reject) => {
|
|
27
|
+
const speedSummary = blobService.createBlockBlobFromLocalFile(container, filename, file, options, (error) => {
|
|
28
|
+
if (error) {
|
|
29
|
+
reject(error);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
resolve();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
speedSummary.on('progress', () => {
|
|
36
|
+
if (onProgress) {
|
|
37
|
+
const percent = speedSummary.getCompletePercent(0);
|
|
38
|
+
if (percent != null) {
|
|
39
|
+
onProgress(percent);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
return `${uri}/${container}/${filename}`;
|
|
45
|
+
};
|
|
46
|
+
exports.upload = upload;
|
|
47
|
+
const checkIfImageExists = (image) => {
|
|
48
|
+
try {
|
|
49
|
+
child_process_1.default.execSync(`docker inspect ${image}`);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.checkIfImageExists = checkIfImageExists;
|
|
57
|
+
async function checkImageExistsInRegistry(image, pullCredentials = null, registry = null) {
|
|
58
|
+
try {
|
|
59
|
+
// Login to registry with pull credentials if provided
|
|
60
|
+
if (pullCredentials &&
|
|
61
|
+
pullCredentials.username &&
|
|
62
|
+
pullCredentials.password &&
|
|
63
|
+
registry) {
|
|
64
|
+
try {
|
|
65
|
+
console.log(chalk_1.default.dim(`Logging in to registry ${registry} to check image existence...`));
|
|
66
|
+
child_process_1.default.execSync(`docker login ${registry} -u ${pullCredentials.username} -p ${pullCredentials.password}`, { stdio: 'pipe' });
|
|
67
|
+
}
|
|
68
|
+
catch (loginError) {
|
|
69
|
+
// Silently continue - Docker might use cached credentials
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Use docker manifest inspect to check if image exists
|
|
73
|
+
child_process_1.default.execSync(`docker manifest inspect ${image}`, { stdio: 'pipe' });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.default = {
|
|
81
|
+
DEFAULT_REGISTRY: exports.DEFAULT_REGISTRY,
|
|
82
|
+
upload: exports.upload,
|
|
83
|
+
checkIfImageExists: exports.checkIfImageExists,
|
|
84
|
+
checkImageExistsInRegistry,
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/app/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
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 open_1 = __importDefault(require("open"));
|
|
8
|
+
const readline_1 = __importDefault(require("readline"));
|
|
9
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
|
+
const device_grant_auth_service_1 = __importDefault(require("../../services/auth/device-grant-auth.service"));
|
|
11
|
+
const clearLastConsoleLines = (count) => {
|
|
12
|
+
for (let i = 0; i < count; i++) {
|
|
13
|
+
readline_1.default.moveCursor(process.stdout, 0, -1);
|
|
14
|
+
readline_1.default.clearLine(process.stdout, 0);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const login = async ({ useDeviceCode, useDeveloperToken, }) => {
|
|
18
|
+
let intervalInstance = null;
|
|
19
|
+
let didStartAuthFlow = false;
|
|
20
|
+
// Check for environment variable first for developer token
|
|
21
|
+
const envToken = process.env.PHYGRID_DEVELOPER_TOKEN;
|
|
22
|
+
if (envToken) {
|
|
23
|
+
const authService = new device_grant_auth_service_1.default();
|
|
24
|
+
await authService.storeDeveloperToken(envToken);
|
|
25
|
+
console.log(chalk_1.default.green('Developer token from environment variable stored successfully'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Handle developer token authentication
|
|
29
|
+
if (useDeveloperToken !== undefined) {
|
|
30
|
+
const authService = new device_grant_auth_service_1.default();
|
|
31
|
+
// If token was provided as argument, use it directly
|
|
32
|
+
if (useDeveloperToken) {
|
|
33
|
+
await authService.storeDeveloperToken(useDeveloperToken);
|
|
34
|
+
console.log(chalk_1.default.green('Developer token stored successfully'));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Otherwise prompt for token
|
|
38
|
+
const { token } = await inquirer_1.default.prompt([
|
|
39
|
+
{
|
|
40
|
+
type: 'password',
|
|
41
|
+
name: 'token',
|
|
42
|
+
message: 'Enter your developer token:',
|
|
43
|
+
validate: (input) => {
|
|
44
|
+
if (!input || input.length < 10) {
|
|
45
|
+
return 'Please enter a valid developer token';
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
]);
|
|
51
|
+
await authService.storeDeveloperToken(token);
|
|
52
|
+
console.log(chalk_1.default.green('Developer token stored successfully'));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const showCountdown = (ttl) => {
|
|
56
|
+
const expirationTime = Date.now() + ttl * 1000;
|
|
57
|
+
intervalInstance = setInterval(() => {
|
|
58
|
+
const remainingTime = expirationTime - Date.now();
|
|
59
|
+
if (remainingTime <= 0) {
|
|
60
|
+
clearInterval(intervalInstance);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const minutes = Math.floor(remainingTime / 1000 / 60);
|
|
64
|
+
const seconds = Math.floor((remainingTime / 1000) % 60);
|
|
65
|
+
readline_1.default.cursorTo(process.stdout, 0);
|
|
66
|
+
process.stdout.write(`Time remaining: ${minutes}m ${seconds}s`);
|
|
67
|
+
}, 1000);
|
|
68
|
+
};
|
|
69
|
+
const clearLoginSession = () => {
|
|
70
|
+
if (intervalInstance) {
|
|
71
|
+
clearInterval(intervalInstance);
|
|
72
|
+
}
|
|
73
|
+
if (!didStartAuthFlow) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const prevLinesToClear = useDeviceCode ? 3 : 6;
|
|
77
|
+
clearLastConsoleLines(prevLinesToClear);
|
|
78
|
+
};
|
|
79
|
+
const handleDeviceAuthorizationRequestStart = ({ verificationUri, verificationUriComplete, code, codeExpiresIn, }) => {
|
|
80
|
+
didStartAuthFlow = true;
|
|
81
|
+
if (useDeviceCode) {
|
|
82
|
+
console.log(chalk_1.default.yellow(`
|
|
83
|
+
To sign in, use a web browser to open the page ${verificationUri} and enter the code ${code} to authenticate.
|
|
84
|
+
`));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
(0, open_1.default)(verificationUriComplete);
|
|
88
|
+
console.log(chalk_1.default.yellow(`
|
|
89
|
+
A web browser has been opened at ${verificationUri}.
|
|
90
|
+
Please continue the login in the web browser.
|
|
91
|
+
If no web browser is available or if the web browser fails to open, use device code flow with "phy login --use-device-code".
|
|
92
|
+
`));
|
|
93
|
+
}
|
|
94
|
+
console.log('Code:', code);
|
|
95
|
+
showCountdown(codeExpiresIn);
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
const authService = new device_grant_auth_service_1.default();
|
|
99
|
+
await authService.authenticate({
|
|
100
|
+
onDeviceAuthorizationRequestStart: handleDeviceAuthorizationRequestStart,
|
|
101
|
+
});
|
|
102
|
+
clearLoginSession();
|
|
103
|
+
console.log(chalk_1.default.green('\nSuccessfully authenticated. You can now use the CLI.'));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
clearLoginSession();
|
|
107
|
+
console.log(chalk_1.default.red('\nLogin failed.', error.message));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
exports.default = login;
|
|
111
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 device_grant_auth_service_1 = __importDefault(require("../../services/auth/device-grant-auth.service"));
|
|
8
|
+
const logout = async () => {
|
|
9
|
+
try {
|
|
10
|
+
const authService = new device_grant_auth_service_1.default();
|
|
11
|
+
await authService.logout();
|
|
12
|
+
console.log(chalk_1.default.green('Successfully logged out.'));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.log(chalk_1.default.red('Error during logout.', error.message));
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.default = logout;
|
|
19
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,8GAAwE;AAExE,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,mCAAW,EAAE,CAAC;QACtC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
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.initializeDescriptorProject = void 0;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
|
+
const templates_1 = require("../../utils/templates");
|
|
12
|
+
const utils_1 = require("../../utils");
|
|
13
|
+
/**
|
|
14
|
+
* Validates if a name follows descriptor naming rules
|
|
15
|
+
* @param name Name to validate
|
|
16
|
+
* @returns An object with isValid flag and error message
|
|
17
|
+
*/
|
|
18
|
+
const validateDescriptorName = (name) => {
|
|
19
|
+
// Trim and convert to lowercase
|
|
20
|
+
const trimmedName = name.trim().toLowerCase();
|
|
21
|
+
// Check length
|
|
22
|
+
if (trimmedName.length < 3) {
|
|
23
|
+
return { isValid: false, message: 'Name must be at least 3 characters' };
|
|
24
|
+
}
|
|
25
|
+
if (trimmedName.length > 100) {
|
|
26
|
+
return { isValid: false, message: 'Name cannot exceed 100 characters' };
|
|
27
|
+
}
|
|
28
|
+
// Check format with regex (kebab-case: lowercase letters, numbers, dashes)
|
|
29
|
+
// Must start with a letter and cannot end with a dash
|
|
30
|
+
if (!/^[a-z][a-z0-9-]*[a-z0-9]$/.test(trimmedName)) {
|
|
31
|
+
return {
|
|
32
|
+
isValid: false,
|
|
33
|
+
message: 'Name must be in kebab-case format (lowercase letters, numbers, and dashes only). Must start with a letter and cannot end with a dash.',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return { isValid: true, message: '' };
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Initialize a new descriptor project by cloning the template repository
|
|
40
|
+
* @param projectName The kebab-case name of the project
|
|
41
|
+
* @param displayName The friendly display name for the descriptor
|
|
42
|
+
* @param projectDirectory The directory to create the project in
|
|
43
|
+
* @returns Details about the created project
|
|
44
|
+
*/
|
|
45
|
+
const initializeDescriptorProject = async (projectName, displayName, projectDirectory) => {
|
|
46
|
+
// Validate descriptor name
|
|
47
|
+
const validation = validateDescriptorName(projectName);
|
|
48
|
+
if (!validation.isValid) {
|
|
49
|
+
throw new Error(`Invalid descriptor name: ${validation.message}`);
|
|
50
|
+
}
|
|
51
|
+
console.log(chalk_1.default.gray(`Creating a new twin descriptor in ${projectDirectory}`));
|
|
52
|
+
// Clone the template repository
|
|
53
|
+
await (0, templates_1.cloneRepo)({
|
|
54
|
+
destinationPath: projectDirectory,
|
|
55
|
+
repo: 'https://github.com/phystack/template-twin-descriptor.git',
|
|
56
|
+
projectName, // Kebab case name
|
|
57
|
+
displayName, // Friendly display name
|
|
58
|
+
});
|
|
59
|
+
// Return the project details
|
|
60
|
+
return {
|
|
61
|
+
projectDirectory,
|
|
62
|
+
projectName,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
exports.initializeDescriptorProject = initializeDescriptorProject;
|
|
66
|
+
/**
|
|
67
|
+
* Command handler for creating a new descriptor
|
|
68
|
+
* @param projectName Optional project name provided via command line
|
|
69
|
+
* @param options Command options
|
|
70
|
+
*/
|
|
71
|
+
const create = async (projectName, options = {}) => {
|
|
72
|
+
let safeProjectName = projectName ? (0, utils_1.kebabCase)(projectName) : '';
|
|
73
|
+
let displayName = projectName || '';
|
|
74
|
+
try {
|
|
75
|
+
// If no project name provided, prompt for it
|
|
76
|
+
while (!safeProjectName || safeProjectName.trim() === '') {
|
|
77
|
+
const { name } = await inquirer_1.default.prompt([
|
|
78
|
+
{
|
|
79
|
+
name: 'name',
|
|
80
|
+
type: 'input',
|
|
81
|
+
message: 'Enter name for your descriptor:',
|
|
82
|
+
validate: (input) => {
|
|
83
|
+
if (!input.trim()) {
|
|
84
|
+
return 'Descriptor name cannot be empty';
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
safeProjectName = (0, utils_1.kebabCase)(name);
|
|
91
|
+
displayName = name;
|
|
92
|
+
}
|
|
93
|
+
console.log(chalk_1.default.gray(`Creating descriptor with name: ${chalk_1.default.blue(safeProjectName)}`));
|
|
94
|
+
// Check if directory already exists
|
|
95
|
+
const projectDirectory = path_1.default.join(process.cwd(), safeProjectName.toLowerCase());
|
|
96
|
+
if (fs_extra_1.default.existsSync(projectDirectory)) {
|
|
97
|
+
console.error(chalk_1.default.red(`Directory ${chalk_1.default.bold(projectDirectory)} already exists.`));
|
|
98
|
+
console.error(chalk_1.default.red(`Please choose a different name or delete the existing directory.`));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Initialize the project
|
|
102
|
+
await (0, exports.initializeDescriptorProject)(safeProjectName, displayName, projectDirectory);
|
|
103
|
+
// Install dependencies and build
|
|
104
|
+
console.log(chalk_1.default.gray('Installing dependencies and building project. This may take a while...'));
|
|
105
|
+
await (0, templates_1.installRepo)({
|
|
106
|
+
destinationPath: projectDirectory,
|
|
107
|
+
projectName: safeProjectName,
|
|
108
|
+
displayName,
|
|
109
|
+
});
|
|
110
|
+
// Success message with next steps
|
|
111
|
+
console.log(chalk_1.default.green(`\n✓ Twin descriptor project created successfully at ${projectDirectory}`));
|
|
112
|
+
console.log(chalk_1.default.dim('\nNext steps:'));
|
|
113
|
+
console.log(chalk_1.default.dim(`1. cd ${safeProjectName}`));
|
|
114
|
+
console.log(chalk_1.default.dim(`2. Edit the descriptor schema in schema.json`));
|
|
115
|
+
console.log(chalk_1.default.dim(`3. Run 'phy descriptor publish' to publish your descriptor`));
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.error(chalk_1.default.red(`❗️There was an error creating the descriptor:`));
|
|
119
|
+
if (err.response) {
|
|
120
|
+
// Handle API error responses
|
|
121
|
+
console.error(chalk_1.default.red(`Status: ${err.response.status}`));
|
|
122
|
+
console.error(chalk_1.default.red(`Message: ${err.response.data?.message || err.message}`));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Handle other types of errors
|
|
126
|
+
console.error(chalk_1.default.red(err.message));
|
|
127
|
+
}
|
|
128
|
+
// Clean up any partially created files/directories if needed
|
|
129
|
+
try {
|
|
130
|
+
if (safeProjectName &&
|
|
131
|
+
fs_extra_1.default.existsSync(path_1.default.join(process.cwd(), safeProjectName.toLowerCase()))) {
|
|
132
|
+
console.log(chalk_1.default.yellow(`Cleaning up directory: ${safeProjectName.toLowerCase()}`));
|
|
133
|
+
await fs_extra_1.default.remove(path_1.default.join(process.cwd(), safeProjectName.toLowerCase()));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (cleanupErr) {
|
|
137
|
+
console.error(chalk_1.default.red(`Failed to clean up: ${cleanupErr.message}`));
|
|
138
|
+
}
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
exports.default = create;
|
|
143
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/descriptor/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 create_1 = __importDefault(require("./create"));
|
|
9
|
+
const publish_1 = __importDefault(require("./publish"));
|
|
10
|
+
const show_1 = __importDefault(require("./show"));
|
|
11
|
+
// Stub function for the "list" command
|
|
12
|
+
async function list(searchString, options) {
|
|
13
|
+
console.log(`Listing descriptors${searchString ? ` matching '${searchString}'` : ''}`);
|
|
14
|
+
// Implementation to be added later
|
|
15
|
+
}
|
|
16
|
+
const descriptor = commander_1.default.command('descriptor').description('Descriptor management');
|
|
17
|
+
descriptor
|
|
18
|
+
.command('create [<projectName>]')
|
|
19
|
+
.description('Create a new descriptor project')
|
|
20
|
+
.action((0, utils_1.handleError)(create_1.default));
|
|
21
|
+
descriptor
|
|
22
|
+
.command('publish [<descriptorName>]')
|
|
23
|
+
.description('Publish a descriptor - creates new descriptor and publishes first version or publishes a new version of an existing descriptor based on provided name')
|
|
24
|
+
.option('--packageJsonPath <path>', 'Path to the package.json file to use (defaults to ./package.json)')
|
|
25
|
+
.option('--buildDir <path>', 'Path to the build directory containing schema.json and meta-schema.json (defaults to ./build/{version})')
|
|
26
|
+
.action((0, utils_1.handleError)(publish_1.default));
|
|
27
|
+
descriptor
|
|
28
|
+
.command('list [<search-string>]')
|
|
29
|
+
.description('List descriptors in currently selected tenant')
|
|
30
|
+
.action((0, utils_1.handleError)(list));
|
|
31
|
+
descriptor
|
|
32
|
+
.command('show <descriptorName>')
|
|
33
|
+
.description('Show details of a descriptor')
|
|
34
|
+
.action((0, utils_1.handleError)(show_1.default));
|
|
35
|
+
exports.default = descriptor;
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/descriptor/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAAgC;AAChC,uCAA0C;AAC1C,sDAA8B;AAC9B,wDAAgC;AAChC,kDAA0B;AAE1B,uCAAuC;AACvC,KAAK,UAAU,IAAI,CAAC,YAAoB,EAAE,OAAY;IACpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,YAAY,CAAC,CAAC,CAAC,cAAc,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,mCAAmC;AACrC,CAAC;AAED,MAAM,UAAU,GAAG,mBAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAEtF,UAAU;KACP,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,IAAA,mBAAW,EAAC,gBAAM,CAAC,CAAC,CAAC;AAE/B,UAAU;KACP,OAAO,CAAC,4BAA4B,CAAC;KACrC,WAAW,CACV,uJAAuJ,CACxJ;KACA,MAAM,CACL,0BAA0B,EAC1B,mEAAmE,CACpE;KACA,MAAM,CACL,mBAAmB,EACnB,yGAAyG,CAC1G;KACA,MAAM,CAAC,IAAA,mBAAW,EAAC,iBAAO,CAAC,CAAC,CAAC;AAEhC,UAAU;KACP,OAAO,CAAC,wBAAwB,CAAC;KACjC,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;AAE7B,UAAU;KACP,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,IAAA,mBAAW,EAAC,cAAI,CAAC,CAAC,CAAC;AAE7B,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
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 fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const axios_1 = __importDefault(require("axios"));
|
|
10
|
+
const tenant_storage_1 = require("../../utils/tenant-storage");
|
|
11
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
12
|
+
const phyhub_1 = require("../../services/phyhub");
|
|
13
|
+
/**
|
|
14
|
+
* Command handler for publishing a descriptor
|
|
15
|
+
* @param descriptorName Optional descriptor name (uses package.json name if not provided)
|
|
16
|
+
* @param options Command options
|
|
17
|
+
*/
|
|
18
|
+
const publish = async (descriptorName, options = {}) => {
|
|
19
|
+
// Determine package.json path
|
|
20
|
+
const packageJsonPath = options.packageJsonPath
|
|
21
|
+
? path_1.default.resolve(options.packageJsonPath)
|
|
22
|
+
: path_1.default.join(process.cwd(), 'package.json');
|
|
23
|
+
// Check if package.json exists
|
|
24
|
+
if (!fs_1.default.existsSync(packageJsonPath)) {
|
|
25
|
+
throw new Error(`${packageJsonPath} not found. Please provide a valid package.json path or run in a descriptor project directory`);
|
|
26
|
+
}
|
|
27
|
+
// Read package.json to get descriptor information
|
|
28
|
+
const pkgData = await fs_1.default.promises.readFile(packageJsonPath, 'utf8');
|
|
29
|
+
const pkg = JSON.parse(pkgData);
|
|
30
|
+
// Validate mandatory fields in package.json
|
|
31
|
+
const missingFields = [];
|
|
32
|
+
if (!pkg.version)
|
|
33
|
+
missingFields.push('version');
|
|
34
|
+
if (missingFields.length > 0) {
|
|
35
|
+
throw new Error(`Missing mandatory fields in package.json: ${missingFields.join(', ')}. Please add these fields before publishing.`);
|
|
36
|
+
}
|
|
37
|
+
// Validate version format (semver)
|
|
38
|
+
const versionRegex = /^\d+\.\d+\.\d+$/;
|
|
39
|
+
if (!versionRegex.test(pkg.version)) {
|
|
40
|
+
throw new Error(`Invalid version format in package.json: ${pkg.version}. Please use semantic versioning (e.g., 1.0.0).`);
|
|
41
|
+
}
|
|
42
|
+
// Create typed version string
|
|
43
|
+
const { version } = pkg;
|
|
44
|
+
// Use name from package.json if descriptorName wasn't provided
|
|
45
|
+
const finalDescriptorName = descriptorName || pkg.name;
|
|
46
|
+
// Determine build directory path
|
|
47
|
+
// If provided as option, use that path, otherwise use /build/{version} relative to package.json directory
|
|
48
|
+
const packageJsonDir = path_1.default.dirname(packageJsonPath);
|
|
49
|
+
const buildDirPath = options.buildDir
|
|
50
|
+
? path_1.default.resolve(options.buildDir)
|
|
51
|
+
: path_1.default.join(packageJsonDir, 'build', version);
|
|
52
|
+
// Check if build directory exists
|
|
53
|
+
if (!fs_1.default.existsSync(buildDirPath) || !fs_1.default.statSync(buildDirPath).isDirectory()) {
|
|
54
|
+
throw new Error(`Build directory not found at ${buildDirPath}. Please build the descriptor first or specify a valid build directory.`);
|
|
55
|
+
}
|
|
56
|
+
// Check for schema.json
|
|
57
|
+
const schemaPath = path_1.default.join(buildDirPath, 'schema.json');
|
|
58
|
+
if (!fs_1.default.existsSync(schemaPath) || !fs_1.default.statSync(schemaPath).isFile()) {
|
|
59
|
+
throw new Error(`schema.json not found in build directory. Please build the descriptor first.`);
|
|
60
|
+
}
|
|
61
|
+
// Check for meta-schema.json
|
|
62
|
+
const metaSchemaPath = path_1.default.join(buildDirPath, 'meta-schema.json');
|
|
63
|
+
if (!fs_1.default.existsSync(metaSchemaPath) || !fs_1.default.statSync(metaSchemaPath).isFile()) {
|
|
64
|
+
throw new Error(`meta-schema.json not found in build directory. Please build the descriptor first.`);
|
|
65
|
+
}
|
|
66
|
+
// Check that files are not empty
|
|
67
|
+
const schemaStats = fs_1.default.statSync(schemaPath);
|
|
68
|
+
if (schemaStats.size === 0) {
|
|
69
|
+
throw new Error(`schema.json is empty. Please ensure the descriptor build is valid.`);
|
|
70
|
+
}
|
|
71
|
+
const metaSchemaStats = fs_1.default.statSync(metaSchemaPath);
|
|
72
|
+
if (metaSchemaStats.size === 0) {
|
|
73
|
+
throw new Error(`meta-schema.json is empty. Please ensure the descriptor build is valid.`);
|
|
74
|
+
}
|
|
75
|
+
// Load schema and meta-schema contents
|
|
76
|
+
let schema;
|
|
77
|
+
let metaSchema;
|
|
78
|
+
try {
|
|
79
|
+
const schemaContent = await fs_1.default.promises.readFile(schemaPath, 'utf8');
|
|
80
|
+
schema = JSON.parse(schemaContent);
|
|
81
|
+
const metaSchemaContent = await fs_1.default.promises.readFile(metaSchemaPath, 'utf8');
|
|
82
|
+
metaSchema = JSON.parse(metaSchemaContent);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`Failed to parse schema files: ${error.message}`);
|
|
86
|
+
}
|
|
87
|
+
console.log(chalk_1.default.dim(`Publishing descriptor: ${chalk_1.default.blue(finalDescriptorName)}`));
|
|
88
|
+
console.log(chalk_1.default.dim(`Using schema and meta-schema from: ${chalk_1.default.blue(buildDirPath)}`));
|
|
89
|
+
console.log(chalk_1.default.dim(`Version: ${chalk_1.default.blue(version)}`));
|
|
90
|
+
// Make sure we have a tenant selected
|
|
91
|
+
let tenant;
|
|
92
|
+
if (await (0, tenant_storage_1.hasTenant)()) {
|
|
93
|
+
tenant = await (0, tenant_storage_1.getTenant)();
|
|
94
|
+
console.log(chalk_1.default.dim(`Using saved tenant: ${tenant.displayName}`));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Prompt user to select an organization if no saved tenant
|
|
98
|
+
tenant = await (0, org_selector_1.selectOrganization)('Select a tenant to publish the descriptor to:');
|
|
99
|
+
}
|
|
100
|
+
if (!tenant) {
|
|
101
|
+
throw new Error('No tenant selected. A tenant is required to publish a descriptor.');
|
|
102
|
+
}
|
|
103
|
+
// Check if the descriptor already exists
|
|
104
|
+
console.log(chalk_1.default.dim(`Checking if descriptor ${chalk_1.default.blue(finalDescriptorName)} exists...`));
|
|
105
|
+
try {
|
|
106
|
+
const existingDescriptor = await (0, phyhub_1.phyhubApi)().getTwinDescriptorByName(tenant.phyhubUrl, tenant.id, finalDescriptorName);
|
|
107
|
+
if (existingDescriptor) {
|
|
108
|
+
console.log(chalk_1.default.dim(`Descriptor ${chalk_1.default.blue(finalDescriptorName)} already exists. Publishing a new version...`));
|
|
109
|
+
try {
|
|
110
|
+
// Publish a new version of the existing descriptor
|
|
111
|
+
await (0, phyhub_1.phyhubApi)().createTwinDescriptorVersion(tenant.phyhubUrl, {
|
|
112
|
+
descriptorName: finalDescriptorName,
|
|
113
|
+
version,
|
|
114
|
+
schema,
|
|
115
|
+
metaSchema,
|
|
116
|
+
releaseNotes: '',
|
|
117
|
+
tenantId: tenant.id,
|
|
118
|
+
});
|
|
119
|
+
console.log(chalk_1.default.green(`Successfully published version ${chalk_1.default.blue(version)} of descriptor ${chalk_1.default.blue(finalDescriptorName)}`));
|
|
120
|
+
}
|
|
121
|
+
catch (versionError) {
|
|
122
|
+
console.error(chalk_1.default.red(`Failed to publish new version: ${versionError.message}`));
|
|
123
|
+
throw versionError;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// Only proceed with creation if it's a 404 Not Found error
|
|
129
|
+
if (axios_1.default.isAxiosError(error) && error.response?.status === 404) {
|
|
130
|
+
console.log(chalk_1.default.dim(`Descriptor ${chalk_1.default.blue(finalDescriptorName)} does not exist. Creating a new descriptor...`));
|
|
131
|
+
try {
|
|
132
|
+
// Create the new descriptor
|
|
133
|
+
const displayName = pkg.description || finalDescriptorName; // Use package.json description or fall back to name
|
|
134
|
+
await (0, phyhub_1.phyhubApi)().createTwinDescriptor(tenant.phyhubUrl, {
|
|
135
|
+
name: finalDescriptorName,
|
|
136
|
+
displayName,
|
|
137
|
+
description: '', // Empty description as requested
|
|
138
|
+
tenantId: tenant.id,
|
|
139
|
+
descriptorVersion: {
|
|
140
|
+
version,
|
|
141
|
+
schema,
|
|
142
|
+
metaSchema,
|
|
143
|
+
releaseNotes: '',
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
console.log(chalk_1.default.green(`Successfully created descriptor ${chalk_1.default.blue(finalDescriptorName)} with version ${chalk_1.default.blue(version)}`));
|
|
147
|
+
}
|
|
148
|
+
catch (createError) {
|
|
149
|
+
console.error(chalk_1.default.red(`Failed to create descriptor: ${createError.message}`));
|
|
150
|
+
throw createError;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// For any other error, throw it to halt the process
|
|
155
|
+
console.error(chalk_1.default.red(`Unexpected error checking descriptor existence: ${error.message}`));
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// The implementation will continue in next steps as requested
|
|
160
|
+
console.log(chalk_1.default.yellow('Note: Implementation will continue in next steps'));
|
|
161
|
+
};
|
|
162
|
+
exports.default = publish;
|
|
163
|
+
//# sourceMappingURL=publish.js.map
|