@contrail/cli 3.4.1 → 3.4.2-alpha.1
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/README.md +5 -4
- package/bin/dev +0 -0
- package/bin/run +0 -0
- package/dist/__mocks__/@contrail/sdk.d.ts +123 -123
- package/dist/__mocks__/@contrail/sdk.js +716 -716
- package/dist/api/app-extension-deployments.d.ts +2 -2
- package/dist/api/app-extension-deployments.js +11 -11
- package/dist/api/app-extension-packages.d.ts +2 -2
- package/dist/api/app-extension-packages.js +11 -11
- package/dist/api/apps.d.ts +10 -10
- package/dist/api/apps.js +63 -63
- package/dist/api/event-workflow-action-definition.d.ts +3 -3
- package/dist/api/event-workflow-action-definition.js +18 -18
- package/dist/api/event-workflow-template-definition.d.ts +7 -7
- package/dist/api/event-workflow-template-definition.js +26 -26
- package/dist/api/event-workflow-templates.d.ts +8 -8
- package/dist/api/event-workflow-templates.js +32 -32
- package/dist/api/schedules.d.ts +7 -7
- package/dist/api/schedules.js +32 -32
- package/dist/api/types.d.ts +11 -11
- package/dist/api/types.js +79 -79
- package/dist/api/users.d.ts +2 -2
- package/dist/api/users.js +18 -18
- package/dist/api/webhooks.d.ts +4 -4
- package/dist/api/webhooks.js +16 -16
- package/dist/auth/login.d.ts +3 -3
- package/dist/auth/login.js +221 -221
- package/dist/auth/login.spec.d.ts +1 -1
- package/dist/auth/login.spec.js +10 -10
- package/dist/baseFlags.d.ts +10 -10
- package/dist/baseFlags.js +25 -25
- package/dist/basecommand.d.ts +15 -15
- package/dist/basecommand.js +83 -83
- package/dist/commands/app/create.d.ts +10 -10
- package/dist/commands/app/create.js +96 -96
- package/dist/commands/app/delete.d.ts +11 -11
- package/dist/commands/app/delete.js +40 -40
- package/dist/commands/app/extension/deploy.d.ts +18 -18
- package/dist/commands/app/extension/deploy.js +127 -127
- package/dist/commands/app/extension/deployment/list.d.ts +14 -14
- package/dist/commands/app/extension/deployment/list.js +82 -82
- package/dist/commands/app/getApiKey.d.ts +11 -11
- package/dist/commands/app/getApiKey.js +49 -49
- package/dist/commands/app/init.d.ts +10 -10
- package/dist/commands/app/init.js +67 -67
- package/dist/commands/app/install.d.ts +13 -13
- package/dist/commands/app/install.js +135 -135
- package/dist/commands/app/publish.d.ts +14 -14
- package/dist/commands/app/publish.js +69 -69
- package/dist/commands/app/uninstall.d.ts +12 -12
- package/dist/commands/app/uninstall.js +68 -68
- package/dist/commands/app/upgrade.d.ts +14 -14
- package/dist/commands/app/upgrade.js +108 -108
- package/dist/commands/app/version/major.d.ts +11 -11
- package/dist/commands/app/version/major.js +39 -39
- package/dist/commands/app/version/minor.d.ts +11 -11
- package/dist/commands/app/version/minor.js +39 -39
- package/dist/commands/app/version/patch.d.ts +11 -11
- package/dist/commands/app/version/patch.js +39 -39
- package/dist/commands/config/create.d.ts +12 -12
- package/dist/commands/config/create.js +27 -27
- package/dist/commands/config/describe.d.ts +14 -14
- package/dist/commands/config/describe.js +46 -46
- package/dist/commands/config/list.d.ts +11 -11
- package/dist/commands/config/list.js +38 -38
- package/dist/commands/config/set.d.ts +16 -16
- package/dist/commands/config/set.js +46 -46
- package/dist/commands/config/use.d.ts +14 -14
- package/dist/commands/config/use.js +47 -47
- package/dist/commands/file/upload.d.ts +15 -15
- package/dist/commands/file/upload.js +69 -69
- package/dist/commands/groups/export.d.ts +14 -14
- package/dist/commands/groups/export.js +103 -103
- package/dist/commands/groups/import.d.ts +14 -14
- package/dist/commands/groups/import.js +190 -190
- package/dist/commands/instance/export.d.ts +12 -12
- package/dist/commands/instance/export.js +36 -36
- package/dist/commands/instance/import.d.ts +11 -11
- package/dist/commands/instance/import.js +34 -34
- package/dist/commands/load/colors.d.ts +14 -14
- package/dist/commands/load/colors.js +53 -53
- package/dist/commands/load/custom-entity.d.ts +14 -14
- package/dist/commands/load/custom-entity.js +55 -55
- package/dist/commands/load/line-sheet.d.ts +14 -14
- package/dist/commands/load/line-sheet.js +55 -55
- package/dist/commands/load/upload-and-load.d.ts +14 -14
- package/dist/commands/load/upload-and-load.js +46 -46
- package/dist/commands/projects/export.d.ts +13 -13
- package/dist/commands/projects/export.js +35 -35
- package/dist/commands/projects/list.d.ts +10 -10
- package/dist/commands/projects/list.js +36 -36
- package/dist/commands/projects/load.d.ts +25 -25
- package/dist/commands/projects/load.js +198 -198
- package/dist/commands/types/exportOptionSetHierarchies.d.ts +11 -11
- package/dist/commands/types/exportOptionSetHierarchies.js +133 -133
- package/dist/commands/types/getAll.d.ts +21 -21
- package/dist/commands/types/getAll.js +180 -180
- package/dist/commands/types/getOptionSets.d.ts +16 -16
- package/dist/commands/types/getOptionSets.js +170 -170
- package/dist/commands/types/loadAll.d.ts +12 -12
- package/dist/commands/types/loadAll.js +55 -55
- package/dist/commands/types/mergeOptionSets.d.ts +13 -13
- package/dist/commands/types/mergeOptionSets.js +116 -119
- package/dist/commands/types/mergeTypeProperties.d.ts +15 -15
- package/dist/commands/types/mergeTypeProperties.js +95 -95
- package/dist/commands/types/parseOptionSetsHierarchyLocalFile.d.ts +14 -14
- package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +133 -133
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.d.ts +14 -14
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +102 -102
- package/dist/commands/types/parseOptionSetsLocalFiles.d.ts +39 -39
- package/dist/commands/types/parseOptionSetsLocalFiles.js +229 -229
- package/dist/commands/types/parseOptionSetsToFolderStructure.d.ts +13 -13
- package/dist/commands/types/parseOptionSetsToFolderStructure.js +68 -68
- package/dist/commands/types/parseTypesFromFiles.d.ts +14 -14
- package/dist/commands/types/parseTypesFromFiles.js +40 -40
- package/dist/commands/types/parseTypesFromLocalFiles.d.ts +14 -14
- package/dist/commands/types/parseTypesFromLocalFiles.js +37 -37
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.d.ts +15 -15
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +39 -39
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.d.ts +14 -14
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +38 -38
- package/dist/commands/types/uploadOptionSetHierarchies.d.ts +12 -12
- package/dist/commands/types/uploadOptionSetHierarchies.js +257 -257
- package/dist/commands/types/uploadOptionSets.d.ts +13 -13
- package/dist/commands/types/uploadOptionSets.js +155 -155
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.d.ts +15 -15
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +135 -135
- package/dist/commands/types/uploadRuleSets.d.ts +12 -12
- package/dist/commands/types/uploadRuleSets.js +197 -197
- package/dist/commands/types/uploadTypePolicies.d.ts +12 -12
- package/dist/commands/types/uploadTypePolicies.js +233 -233
- package/dist/commands/types/uploadTypePropertyPolicies.d.ts +13 -13
- package/dist/commands/types/uploadTypePropertyPolicies.js +286 -286
- package/dist/commands/types/uploadTypes.d.ts +13 -13
- package/dist/commands/types/uploadTypes.js +35 -35
- package/dist/commands/types/uploadUsageInfo.d.ts +12 -12
- package/dist/commands/types/uploadUsageInfo.js +172 -172
- package/dist/commands/users/export.d.ts +14 -14
- package/dist/commands/users/export.js +76 -76
- package/dist/commands/users/import.d.ts +14 -14
- package/dist/commands/users/import.js +68 -68
- package/dist/commands/webhooks/create.d.ts +11 -11
- package/dist/commands/webhooks/create.js +25 -25
- package/dist/commands/webhooks/delete.d.ts +14 -14
- package/dist/commands/webhooks/delete.js +53 -53
- package/dist/commands/webhooks/getWebhookTrigger.d.ts +13 -13
- package/dist/commands/webhooks/getWebhookTrigger.js +40 -40
- package/dist/commands/webhooks/list.d.ts +12 -12
- package/dist/commands/webhooks/list.js +31 -31
- package/dist/commands/workflow-template-definitions/install.d.ts +10 -10
- package/dist/commands/workflow-template-definitions/install.js +19 -19
- package/dist/commands/workflow-template-definitions/list.d.ts +10 -10
- package/dist/commands/workflow-template-definitions/list.js +19 -19
- package/dist/commands/workflow-templates/delete.d.ts +10 -10
- package/dist/commands/workflow-templates/delete.js +19 -19
- package/dist/commands/workflow-templates/export.d.ts +14 -14
- package/dist/commands/workflow-templates/export.js +78 -78
- package/dist/commands/workflow-templates/list.d.ts +10 -10
- package/dist/commands/workflow-templates/list.js +19 -19
- package/dist/commands/workflow-templates/load.d.ts +13 -13
- package/dist/commands/workflow-templates/load.js +26 -26
- package/dist/common.d.ts +4 -4
- package/dist/common.js +18 -18
- package/dist/helpers/app/actions-deployer.d.ts +11 -11
- package/dist/helpers/app/actions-deployer.js +123 -123
- package/dist/helpers/app/app-config-validators.d.ts +22 -22
- package/dist/helpers/app/app-config-validators.js +100 -100
- package/dist/helpers/app/app-config-validators.spec.d.ts +1 -1
- package/dist/helpers/app/app-config-validators.spec.js +310 -310
- package/dist/helpers/app/app-deployer.d.ts +12 -12
- package/dist/helpers/app/app-deployer.js +278 -278
- package/dist/helpers/app/app-template-parsers.d.ts +14 -14
- package/dist/helpers/app/app-template-parsers.js +106 -106
- package/dist/helpers/app/extension-package-deployer.d.ts +7 -7
- package/dist/helpers/app/extension-package-deployer.js +175 -175
- package/dist/helpers/app/extensions-deployer.d.ts +9 -9
- package/dist/helpers/app/extensions-deployer.js +95 -93
- package/dist/helpers/app/load-app-config.d.ts +4 -4
- package/dist/helpers/app/load-app-config.js +22 -22
- package/dist/helpers/app/metadata-extractor.d.ts +1 -1
- package/dist/helpers/app/metadata-extractor.js +100 -100
- package/dist/helpers/app/setup-template.d.ts +8 -8
- package/dist/helpers/app/setup-template.js +48 -48
- package/dist/helpers/app/update-app-config.d.ts +2 -2
- package/dist/helpers/app/update-app-config.js +20 -20
- package/dist/helpers/app/upgrade-version.d.ts +16 -16
- package/dist/helpers/app/upgrade-version.js +37 -37
- package/dist/helpers/app/upgrade-version.spec.d.ts +1 -1
- package/dist/helpers/app/upgrade-version.spec.js +33 -33
- package/dist/helpers/colors/helpers.d.ts +12 -12
- package/dist/helpers/colors/helpers.js +84 -84
- package/dist/helpers/config/config.d.ts +16 -16
- package/dist/helpers/config/config.js +223 -223
- package/dist/helpers/file-helpers.d.ts +2 -2
- package/dist/helpers/file-helpers.js +36 -36
- package/dist/helpers/load/helpers.d.ts +20 -20
- package/dist/helpers/load/helpers.js +141 -141
- package/dist/helpers/load/helpers.spec.d.ts +1 -1
- package/dist/helpers/load/helpers.spec.js +62 -62
- package/dist/helpers/load/validators.d.ts +14 -14
- package/dist/helpers/load/validators.js +182 -182
- package/dist/helpers/load/validators.spec.d.ts +1 -1
- package/dist/helpers/load/validators.spec.js +450 -450
- package/dist/helpers/projects/helpers.d.ts +3 -3
- package/dist/helpers/projects/helpers.js +167 -167
- package/dist/helpers/types/csv-parser.d.ts +1 -1
- package/dist/helpers/types/csv-parser.js +59 -59
- package/dist/helpers/types/option-set-helper.d.ts +9 -0
- package/dist/helpers/types/option-set-helper.js +48 -0
- package/dist/helpers/types/option-set-helper.spec.d.ts +1 -0
- package/dist/helpers/types/option-set-helper.spec.js +69 -0
- package/dist/helpers/types/parseOptionSetsLocalFiles.spec.d.ts +1 -1
- package/dist/helpers/types/parseOptionSetsLocalFiles.spec.js +285 -285
- package/dist/helpers/types/type-extractor.d.ts +1 -1
- package/dist/helpers/types/type-extractor.js +36 -36
- package/dist/helpers/types/type-parser.d.ts +4 -4
- package/dist/helpers/types/type-parser.js +119 -119
- package/dist/helpers/types/type-uploader.d.ts +20 -20
- package/dist/helpers/types/type-uploader.js +336 -336
- package/dist/helpers/types/type-uploader.spec.d.ts +1 -1
- package/dist/helpers/types/type-uploader.spec.js +266 -266
- package/dist/helpers/types/uploadOptionSets.spec.d.ts +1 -1
- package/dist/helpers/types/uploadOptionSets.spec.js +19 -19
- package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
- package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +158 -158
- package/dist/helpers/workflow-templates/helper.d.ts +20 -20
- package/dist/helpers/workflow-templates/helper.js +285 -285
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/interfaces.d.ts +445 -444
- package/dist/interfaces.js +163 -163
- package/dist/logger.d.ts +3 -3
- package/dist/logger.js +33 -33
- package/oclif.manifest.json +3 -3
- package/package.json +1 -1
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const core_1 = require("@oclif/core");
|
|
5
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
-
const path = tslib_1.__importStar(require("path"));
|
|
8
|
-
const app_extension_deployments_1 = require("../../../api/app-extension-deployments");
|
|
9
|
-
const app_extension_packages_1 = require("../../../api/app-extension-packages");
|
|
10
|
-
const apps_1 = require("../../../api/apps");
|
|
11
|
-
const login_1 = require("../../../auth/login");
|
|
12
|
-
const basecommand_1 = require("../../../basecommand");
|
|
13
|
-
const extension_package_deployer_1 = require("../../../helpers/app/extension-package-deployer");
|
|
14
|
-
const load_app_config_1 = require("../../../helpers/app/load-app-config");
|
|
15
|
-
const interfaces_1 = require("../../../interfaces");
|
|
16
|
-
const logger_1 = tslib_1.__importDefault(require("../../../logger"));
|
|
17
|
-
class DeployExtension extends basecommand_1.BaseCommand {
|
|
18
|
-
static description = 'Deploy an extension from the extensions directory to a VibeIQ managed URL.';
|
|
19
|
-
static examples = [`$ contrail extension deploy --identifier <extensionIdentifier>`];
|
|
20
|
-
static flags = {
|
|
21
|
-
...basecommand_1.BaseCommand.baseFlags,
|
|
22
|
-
identifier: core_1.Flags.string({
|
|
23
|
-
char: 'i',
|
|
24
|
-
description: 'The extension identifier to deploy. The identifier of the extension is the "identifier" property in the extension defined in the app.yml',
|
|
25
|
-
required: true,
|
|
26
|
-
}),
|
|
27
|
-
debug: core_1.Flags.boolean({
|
|
28
|
-
char: 'd',
|
|
29
|
-
description: 'Enable debug mode',
|
|
30
|
-
default: false,
|
|
31
|
-
}),
|
|
32
|
-
};
|
|
33
|
-
async run() {
|
|
34
|
-
await (0, login_1.authUser)();
|
|
35
|
-
try {
|
|
36
|
-
const extensionIdentifier = this.flags.identifier;
|
|
37
|
-
// 1. Validate manifest and extension existence
|
|
38
|
-
const appDeclaration = this.getAppDeclaration();
|
|
39
|
-
const app = await this.getExistingApp(appDeclaration);
|
|
40
|
-
await this.validateExtensionDeclaration(appDeclaration, extensionIdentifier);
|
|
41
|
-
const extensionDir = this.getExtensionDirectory(extensionIdentifier);
|
|
42
|
-
// 2. Package and upload extension
|
|
43
|
-
const createdPackage = await (0, extension_package_deployer_1.createExtensionPackage)(app.id, extensionDir, {
|
|
44
|
-
debug: this.flags.debug,
|
|
45
|
-
});
|
|
46
|
-
// 3. Poll until package is ready (timeout after 1 minute)
|
|
47
|
-
const readyPackage = await this.pollUntilPackageIsReady(createdPackage);
|
|
48
|
-
logger_1.default.info('Extension package is ready...Checking for extension deployment');
|
|
49
|
-
logger_1.default.debug(JSON.stringify(readyPackage, null, 2));
|
|
50
|
-
const deployment = await this.pollUntilDeploymentIsReady(readyPackage.deploymentId);
|
|
51
|
-
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Extension package is ready.`);
|
|
52
|
-
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Please note that it may take a few minutes for the extension to be available if it is the first time you are deploying it.`);
|
|
53
|
-
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Extension deployment URL: ${deployment.cloudFrontUrl}/packages/${readyPackage.id}/index.html`);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Extension Deployment Failed. ${error}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async pollUntilPackageIsReady(createdPackage) {
|
|
60
|
-
let currentPackage = createdPackage;
|
|
61
|
-
const startTime = Date.now();
|
|
62
|
-
const timeoutMs = 120000; // 2 minutes
|
|
63
|
-
while (currentPackage.status !== interfaces_1.AppExtensionPackageStatus.READY) {
|
|
64
|
-
if (Date.now() - startTime > timeoutMs) {
|
|
65
|
-
throw new Error('Timed out waiting for package to be ready');
|
|
66
|
-
}
|
|
67
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
68
|
-
currentPackage = await (0, app_extension_packages_1.getAppExtensionPackage)(currentPackage.id);
|
|
69
|
-
logger_1.default.info(`Package status: ${currentPackage.status}`);
|
|
70
|
-
if (currentPackage.status === interfaces_1.AppExtensionPackageStatus.FAILED) {
|
|
71
|
-
throw new Error('Package failed to build');
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return currentPackage;
|
|
75
|
-
}
|
|
76
|
-
async pollUntilDeploymentIsReady(deploymentId) {
|
|
77
|
-
let currentDeployment = await (0, app_extension_deployments_1.getAppExtensionDeployment)(deploymentId);
|
|
78
|
-
const startTime = Date.now();
|
|
79
|
-
const timeoutMs = 60000; // 1 minute
|
|
80
|
-
while (currentDeployment.status !== interfaces_1.AppExtensionDeploymentStatus.DEPLOYED) {
|
|
81
|
-
if (Date.now() - startTime > timeoutMs) {
|
|
82
|
-
throw new Error('Timed out waiting for deployment to be ready');
|
|
83
|
-
}
|
|
84
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
85
|
-
currentDeployment = await (0, app_extension_deployments_1.getAppExtensionDeployment)(currentDeployment.id);
|
|
86
|
-
logger_1.default.info(`Deployment status: ${currentDeployment.status}`);
|
|
87
|
-
if (currentDeployment.status === interfaces_1.AppExtensionDeploymentStatus.FAILED) {
|
|
88
|
-
throw new Error('Deployment failed');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return currentDeployment;
|
|
92
|
-
}
|
|
93
|
-
getAppDeclaration() {
|
|
94
|
-
return (0, load_app_config_1.loadAppConfig)();
|
|
95
|
-
}
|
|
96
|
-
async getExistingApp(appDeclaration) {
|
|
97
|
-
const apps = await (0, apps_1.getAvailableApps)();
|
|
98
|
-
const foundApp = apps.find((app) => app.identifier === appDeclaration.appIdentifier);
|
|
99
|
-
if (!foundApp) {
|
|
100
|
-
throw new Error(`App ${appDeclaration.appIdentifier} not found. Extensions can only be deployed for existing apps.`);
|
|
101
|
-
}
|
|
102
|
-
return foundApp;
|
|
103
|
-
}
|
|
104
|
-
async validateExtensionDeclaration(appDeclaration, extensionIdentifier) {
|
|
105
|
-
const extensions = appDeclaration.extensions;
|
|
106
|
-
if (!Array.isArray(extensions) || extensions.length === 0) {
|
|
107
|
-
throw new Error('No extensions defined in app.yml.');
|
|
108
|
-
}
|
|
109
|
-
const extensionDecl = extensions.find((ext) => ext.identifier === extensionIdentifier);
|
|
110
|
-
if (!extensionDecl) {
|
|
111
|
-
const message = `Extension '${extensionIdentifier}' not found in app.yml.`;
|
|
112
|
-
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
113
|
-
throw new Error(message);
|
|
114
|
-
}
|
|
115
|
-
return extensionDecl;
|
|
116
|
-
}
|
|
117
|
-
getExtensionDirectory(extensionIdentifier) {
|
|
118
|
-
const extensionDir = path.resolve(process.cwd(), 'extensions', extensionIdentifier);
|
|
119
|
-
if (!fs.existsSync(extensionDir)) {
|
|
120
|
-
const message = `Extension directory '${extensionDir}' does not exist.`;
|
|
121
|
-
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
122
|
-
throw new Error(message);
|
|
123
|
-
}
|
|
124
|
-
return extensionDir;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
exports.default = DeployExtension;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
+
const path = tslib_1.__importStar(require("path"));
|
|
8
|
+
const app_extension_deployments_1 = require("../../../api/app-extension-deployments");
|
|
9
|
+
const app_extension_packages_1 = require("../../../api/app-extension-packages");
|
|
10
|
+
const apps_1 = require("../../../api/apps");
|
|
11
|
+
const login_1 = require("../../../auth/login");
|
|
12
|
+
const basecommand_1 = require("../../../basecommand");
|
|
13
|
+
const extension_package_deployer_1 = require("../../../helpers/app/extension-package-deployer");
|
|
14
|
+
const load_app_config_1 = require("../../../helpers/app/load-app-config");
|
|
15
|
+
const interfaces_1 = require("../../../interfaces");
|
|
16
|
+
const logger_1 = tslib_1.__importDefault(require("../../../logger"));
|
|
17
|
+
class DeployExtension extends basecommand_1.BaseCommand {
|
|
18
|
+
static description = 'Deploy an extension from the extensions directory to a VibeIQ managed URL.';
|
|
19
|
+
static examples = [`$ contrail extension deploy --identifier <extensionIdentifier>`];
|
|
20
|
+
static flags = {
|
|
21
|
+
...basecommand_1.BaseCommand.baseFlags,
|
|
22
|
+
identifier: core_1.Flags.string({
|
|
23
|
+
char: 'i',
|
|
24
|
+
description: 'The extension identifier to deploy. The identifier of the extension is the "identifier" property in the extension defined in the app.yml',
|
|
25
|
+
required: true,
|
|
26
|
+
}),
|
|
27
|
+
debug: core_1.Flags.boolean({
|
|
28
|
+
char: 'd',
|
|
29
|
+
description: 'Enable debug mode',
|
|
30
|
+
default: false,
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
async run() {
|
|
34
|
+
await (0, login_1.authUser)();
|
|
35
|
+
try {
|
|
36
|
+
const extensionIdentifier = this.flags.identifier;
|
|
37
|
+
// 1. Validate manifest and extension existence
|
|
38
|
+
const appDeclaration = this.getAppDeclaration();
|
|
39
|
+
const app = await this.getExistingApp(appDeclaration);
|
|
40
|
+
await this.validateExtensionDeclaration(appDeclaration, extensionIdentifier);
|
|
41
|
+
const extensionDir = this.getExtensionDirectory(extensionIdentifier);
|
|
42
|
+
// 2. Package and upload extension
|
|
43
|
+
const createdPackage = await (0, extension_package_deployer_1.createExtensionPackage)(app.id, extensionDir, {
|
|
44
|
+
debug: this.flags.debug,
|
|
45
|
+
});
|
|
46
|
+
// 3. Poll until package is ready (timeout after 1 minute)
|
|
47
|
+
const readyPackage = await this.pollUntilPackageIsReady(createdPackage);
|
|
48
|
+
logger_1.default.info('Extension package is ready...Checking for extension deployment');
|
|
49
|
+
logger_1.default.debug(JSON.stringify(readyPackage, null, 2));
|
|
50
|
+
const deployment = await this.pollUntilDeploymentIsReady(readyPackage.deploymentId);
|
|
51
|
+
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Extension package is ready.`);
|
|
52
|
+
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Please note that it may take a few minutes for the extension to be available if it is the first time you are deploying it.`);
|
|
53
|
+
logger_1.default.info(`${chalk_1.default.green.bold('SUCCESS')} Extension deployment URL: ${deployment.cloudFrontUrl}/packages/${readyPackage.id}/index.html`);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Extension Deployment Failed. ${error}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async pollUntilPackageIsReady(createdPackage) {
|
|
60
|
+
let currentPackage = createdPackage;
|
|
61
|
+
const startTime = Date.now();
|
|
62
|
+
const timeoutMs = 120000; // 2 minutes
|
|
63
|
+
while (currentPackage.status !== interfaces_1.AppExtensionPackageStatus.READY) {
|
|
64
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
65
|
+
throw new Error('Timed out waiting for package to be ready');
|
|
66
|
+
}
|
|
67
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
68
|
+
currentPackage = await (0, app_extension_packages_1.getAppExtensionPackage)(currentPackage.id);
|
|
69
|
+
logger_1.default.info(`Package status: ${currentPackage.status}`);
|
|
70
|
+
if (currentPackage.status === interfaces_1.AppExtensionPackageStatus.FAILED) {
|
|
71
|
+
throw new Error('Package failed to build');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return currentPackage;
|
|
75
|
+
}
|
|
76
|
+
async pollUntilDeploymentIsReady(deploymentId) {
|
|
77
|
+
let currentDeployment = await (0, app_extension_deployments_1.getAppExtensionDeployment)(deploymentId);
|
|
78
|
+
const startTime = Date.now();
|
|
79
|
+
const timeoutMs = 60000; // 1 minute
|
|
80
|
+
while (currentDeployment.status !== interfaces_1.AppExtensionDeploymentStatus.DEPLOYED) {
|
|
81
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
82
|
+
throw new Error('Timed out waiting for deployment to be ready');
|
|
83
|
+
}
|
|
84
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
85
|
+
currentDeployment = await (0, app_extension_deployments_1.getAppExtensionDeployment)(currentDeployment.id);
|
|
86
|
+
logger_1.default.info(`Deployment status: ${currentDeployment.status}`);
|
|
87
|
+
if (currentDeployment.status === interfaces_1.AppExtensionDeploymentStatus.FAILED) {
|
|
88
|
+
throw new Error('Deployment failed');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return currentDeployment;
|
|
92
|
+
}
|
|
93
|
+
getAppDeclaration() {
|
|
94
|
+
return (0, load_app_config_1.loadAppConfig)();
|
|
95
|
+
}
|
|
96
|
+
async getExistingApp(appDeclaration) {
|
|
97
|
+
const apps = await (0, apps_1.getAvailableApps)();
|
|
98
|
+
const foundApp = apps.find((app) => app.identifier === appDeclaration.appIdentifier);
|
|
99
|
+
if (!foundApp) {
|
|
100
|
+
throw new Error(`App ${appDeclaration.appIdentifier} not found. Extensions can only be deployed for existing apps.`);
|
|
101
|
+
}
|
|
102
|
+
return foundApp;
|
|
103
|
+
}
|
|
104
|
+
async validateExtensionDeclaration(appDeclaration, extensionIdentifier) {
|
|
105
|
+
const extensions = appDeclaration.extensions;
|
|
106
|
+
if (!Array.isArray(extensions) || extensions.length === 0) {
|
|
107
|
+
throw new Error('No extensions defined in app.yml.');
|
|
108
|
+
}
|
|
109
|
+
const extensionDecl = extensions.find((ext) => ext.identifier === extensionIdentifier);
|
|
110
|
+
if (!extensionDecl) {
|
|
111
|
+
const message = `Extension '${extensionIdentifier}' not found in app.yml.`;
|
|
112
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
113
|
+
throw new Error(message);
|
|
114
|
+
}
|
|
115
|
+
return extensionDecl;
|
|
116
|
+
}
|
|
117
|
+
getExtensionDirectory(extensionIdentifier) {
|
|
118
|
+
const extensionDir = path.resolve(process.cwd(), 'extensions', extensionIdentifier);
|
|
119
|
+
if (!fs.existsSync(extensionDir)) {
|
|
120
|
+
const message = `Extension directory '${extensionDir}' does not exist.`;
|
|
121
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} ${message}`);
|
|
122
|
+
throw new Error(message);
|
|
123
|
+
}
|
|
124
|
+
return extensionDir;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.default = DeployExtension;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { BaseCommand } from '../../../../basecommand';
|
|
2
|
-
import { AppExtensionPackage } from '../../../../interfaces';
|
|
3
|
-
export default class ListExtensionDeployments extends BaseCommand {
|
|
4
|
-
static description: string;
|
|
5
|
-
static examples: string[];
|
|
6
|
-
static flags: {
|
|
7
|
-
all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
-
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
-
};
|
|
11
|
-
run(): Promise<void>;
|
|
12
|
-
getLatest20ExtensionPackages(appId: string): Promise<AppExtensionPackage[]>;
|
|
13
|
-
getAllExtensionPackages(appId: string): Promise<AppExtensionPackage[]>;
|
|
14
|
-
}
|
|
1
|
+
import { BaseCommand } from '../../../../basecommand';
|
|
2
|
+
import { AppExtensionPackage } from '../../../../interfaces';
|
|
3
|
+
export default class ListExtensionDeployments extends BaseCommand {
|
|
4
|
+
static description: string;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
getLatest20ExtensionPackages(appId: string): Promise<AppExtensionPackage[]>;
|
|
13
|
+
getAllExtensionPackages(appId: string): Promise<AppExtensionPackage[]>;
|
|
14
|
+
}
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const sdk_1 = require("@contrail/sdk");
|
|
5
|
-
const core_1 = require("@oclif/core");
|
|
6
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
-
const login_1 = require("../../../../auth/login");
|
|
8
|
-
const basecommand_1 = require("../../../../basecommand");
|
|
9
|
-
const extension_package_deployer_1 = require("../../../../helpers/app/extension-package-deployer");
|
|
10
|
-
const load_app_config_1 = require("../../../../helpers/app/load-app-config");
|
|
11
|
-
const logger_1 = tslib_1.__importDefault(require("../../../../logger"));
|
|
12
|
-
const lodash_1 = require("lodash");
|
|
13
|
-
class ListExtensionDeployments extends basecommand_1.BaseCommand {
|
|
14
|
-
static description = 'List extension deployments';
|
|
15
|
-
static examples = [`$ contrail extension deployment list`];
|
|
16
|
-
static flags = {
|
|
17
|
-
...basecommand_1.BaseCommand.baseFlags,
|
|
18
|
-
all: core_1.Flags.boolean({
|
|
19
|
-
char: 'a',
|
|
20
|
-
description: 'List all extension deployments. By default, only the latest 20 are shown',
|
|
21
|
-
required: false,
|
|
22
|
-
default: false,
|
|
23
|
-
}),
|
|
24
|
-
};
|
|
25
|
-
async run() {
|
|
26
|
-
await (0, login_1.authUser)();
|
|
27
|
-
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Listing extension deployments.`);
|
|
28
|
-
const appDeclaration = (0, load_app_config_1.loadAppConfig)();
|
|
29
|
-
const app = await (0, extension_package_deployer_1.getExistingApp)(appDeclaration);
|
|
30
|
-
const packages = this.flags.all
|
|
31
|
-
? await this.getAllExtensionPackages(app.id)
|
|
32
|
-
: await this.getLatest20ExtensionPackages(app.id);
|
|
33
|
-
logger_1.default.debug('packages:', packages);
|
|
34
|
-
const deploymentIds = Array.from(new Set(packages.map((p) => p.deploymentId))).filter((id) => !!id);
|
|
35
|
-
logger_1.default.debug('deploymentIds:', deploymentIds);
|
|
36
|
-
const deployments = await Promise.all(deploymentIds.map((id) => new sdk_1.Entities().get({ entityName: 'app-extension-deployment', id })));
|
|
37
|
-
const deploymentsById = (0, lodash_1.keyBy)(deployments, 'id');
|
|
38
|
-
const uniqueDeploymentUrls = new Set(deployments.map((d) => d.cloudFrontUrl).filter((url) => !!url));
|
|
39
|
-
if (uniqueDeploymentUrls.size > 1) {
|
|
40
|
-
logger_1.default.info(`${chalk_1.default.red.yellow('WARNING')} Multiple extension deployment URLS found for app ${appDeclaration.appIdentifier}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
else if (uniqueDeploymentUrls.size === 0) {
|
|
44
|
-
logger_1.default.info(`${chalk_1.default.red.yellow('WARNING')} No extension deployment URL found for app ${appDeclaration.appIdentifier}`);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const tableData = packages.map((extensionPackage) => ({
|
|
48
|
-
'Created At': extensionPackage.createdOn,
|
|
49
|
-
'Package ID': extensionPackage.id,
|
|
50
|
-
Status: deploymentsById[extensionPackage.deploymentId]?.status || '-',
|
|
51
|
-
URL: deploymentsById[extensionPackage.deploymentId]
|
|
52
|
-
? `${deploymentsById[extensionPackage.deploymentId]?.cloudFrontUrl}/packages/${extensionPackage.id}/index.html`
|
|
53
|
-
: '-',
|
|
54
|
-
}));
|
|
55
|
-
console.table(tableData);
|
|
56
|
-
}
|
|
57
|
-
async getLatest20ExtensionPackages(appId) {
|
|
58
|
-
return await new sdk_1.Entities().get({
|
|
59
|
-
entityName: 'app-extension-package',
|
|
60
|
-
criteria: { appId },
|
|
61
|
-
order: [{ orderField: 'createdOn', order: sdk_1.SortOrderOptions.DESC }],
|
|
62
|
-
take: 20,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
async getAllExtensionPackages(appId) {
|
|
66
|
-
const packages = [];
|
|
67
|
-
let nextPageKey = null;
|
|
68
|
-
do {
|
|
69
|
-
const response = await new sdk_1.Entities().get({
|
|
70
|
-
entityName: 'app-extension-package',
|
|
71
|
-
criteria: { appId },
|
|
72
|
-
order: [{ orderField: 'createdOn', order: sdk_1.SortOrderOptions.DESC }],
|
|
73
|
-
nextPageKey,
|
|
74
|
-
apiVersion: sdk_1.API_VERSION.V2,
|
|
75
|
-
});
|
|
76
|
-
packages.push(...response.results);
|
|
77
|
-
nextPageKey = response.nextPageKey;
|
|
78
|
-
} while (nextPageKey);
|
|
79
|
-
return packages;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
exports.default = ListExtensionDeployments;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const sdk_1 = require("@contrail/sdk");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
+
const login_1 = require("../../../../auth/login");
|
|
8
|
+
const basecommand_1 = require("../../../../basecommand");
|
|
9
|
+
const extension_package_deployer_1 = require("../../../../helpers/app/extension-package-deployer");
|
|
10
|
+
const load_app_config_1 = require("../../../../helpers/app/load-app-config");
|
|
11
|
+
const logger_1 = tslib_1.__importDefault(require("../../../../logger"));
|
|
12
|
+
const lodash_1 = require("lodash");
|
|
13
|
+
class ListExtensionDeployments extends basecommand_1.BaseCommand {
|
|
14
|
+
static description = 'List extension deployments';
|
|
15
|
+
static examples = [`$ contrail extension deployment list`];
|
|
16
|
+
static flags = {
|
|
17
|
+
...basecommand_1.BaseCommand.baseFlags,
|
|
18
|
+
all: core_1.Flags.boolean({
|
|
19
|
+
char: 'a',
|
|
20
|
+
description: 'List all extension deployments. By default, only the latest 20 are shown',
|
|
21
|
+
required: false,
|
|
22
|
+
default: false,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
await (0, login_1.authUser)();
|
|
27
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Listing extension deployments.`);
|
|
28
|
+
const appDeclaration = (0, load_app_config_1.loadAppConfig)();
|
|
29
|
+
const app = await (0, extension_package_deployer_1.getExistingApp)(appDeclaration);
|
|
30
|
+
const packages = this.flags.all
|
|
31
|
+
? await this.getAllExtensionPackages(app.id)
|
|
32
|
+
: await this.getLatest20ExtensionPackages(app.id);
|
|
33
|
+
logger_1.default.debug('packages:', packages);
|
|
34
|
+
const deploymentIds = Array.from(new Set(packages.map((p) => p.deploymentId))).filter((id) => !!id);
|
|
35
|
+
logger_1.default.debug('deploymentIds:', deploymentIds);
|
|
36
|
+
const deployments = await Promise.all(deploymentIds.map((id) => new sdk_1.Entities().get({ entityName: 'app-extension-deployment', id })));
|
|
37
|
+
const deploymentsById = (0, lodash_1.keyBy)(deployments, 'id');
|
|
38
|
+
const uniqueDeploymentUrls = new Set(deployments.map((d) => d.cloudFrontUrl).filter((url) => !!url));
|
|
39
|
+
if (uniqueDeploymentUrls.size > 1) {
|
|
40
|
+
logger_1.default.info(`${chalk_1.default.red.yellow('WARNING')} Multiple extension deployment URLS found for app ${appDeclaration.appIdentifier}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
else if (uniqueDeploymentUrls.size === 0) {
|
|
44
|
+
logger_1.default.info(`${chalk_1.default.red.yellow('WARNING')} No extension deployment URL found for app ${appDeclaration.appIdentifier}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const tableData = packages.map((extensionPackage) => ({
|
|
48
|
+
'Created At': extensionPackage.createdOn,
|
|
49
|
+
'Package ID': extensionPackage.id,
|
|
50
|
+
Status: deploymentsById[extensionPackage.deploymentId]?.status || '-',
|
|
51
|
+
URL: deploymentsById[extensionPackage.deploymentId]
|
|
52
|
+
? `${deploymentsById[extensionPackage.deploymentId]?.cloudFrontUrl}/packages/${extensionPackage.id}/index.html`
|
|
53
|
+
: '-',
|
|
54
|
+
}));
|
|
55
|
+
console.table(tableData);
|
|
56
|
+
}
|
|
57
|
+
async getLatest20ExtensionPackages(appId) {
|
|
58
|
+
return await new sdk_1.Entities().get({
|
|
59
|
+
entityName: 'app-extension-package',
|
|
60
|
+
criteria: { appId },
|
|
61
|
+
order: [{ orderField: 'createdOn', order: sdk_1.SortOrderOptions.DESC }],
|
|
62
|
+
take: 20,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async getAllExtensionPackages(appId) {
|
|
66
|
+
const packages = [];
|
|
67
|
+
let nextPageKey = null;
|
|
68
|
+
do {
|
|
69
|
+
const response = await new sdk_1.Entities().get({
|
|
70
|
+
entityName: 'app-extension-package',
|
|
71
|
+
criteria: { appId },
|
|
72
|
+
order: [{ orderField: 'createdOn', order: sdk_1.SortOrderOptions.DESC }],
|
|
73
|
+
nextPageKey,
|
|
74
|
+
apiVersion: sdk_1.API_VERSION.V2,
|
|
75
|
+
});
|
|
76
|
+
packages.push(...response.results);
|
|
77
|
+
nextPageKey = response.nextPageKey;
|
|
78
|
+
} while (nextPageKey);
|
|
79
|
+
return packages;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.default = ListExtensionDeployments;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { BaseCommand } from '../../basecommand';
|
|
2
|
-
export default class GetAPIKeyApp extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
appIdentifier: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
-
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
-
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
-
};
|
|
10
|
-
run(): Promise<void>;
|
|
11
|
-
}
|
|
1
|
+
import { BaseCommand } from '../../basecommand';
|
|
2
|
+
export default class GetAPIKeyApp extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
appIdentifier: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const core_1 = require("@oclif/core");
|
|
5
|
-
const apps_1 = require("../../api/apps");
|
|
6
|
-
const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
|
|
7
|
-
const login_1 = require("../../auth/login");
|
|
8
|
-
const basecommand_1 = require("../../basecommand");
|
|
9
|
-
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
10
|
-
class GetAPIKeyApp extends basecommand_1.BaseCommand {
|
|
11
|
-
static description = 'Get an api key for an installed app';
|
|
12
|
-
static examples = [
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const apps_1 = require("../../api/apps");
|
|
6
|
+
const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
|
|
7
|
+
const login_1 = require("../../auth/login");
|
|
8
|
+
const basecommand_1 = require("../../basecommand");
|
|
9
|
+
const logger_1 = tslib_1.__importDefault(require("../../logger"));
|
|
10
|
+
class GetAPIKeyApp extends basecommand_1.BaseCommand {
|
|
11
|
+
static description = 'Get an api key for an installed app';
|
|
12
|
+
static examples = [
|
|
13
13
|
`$ contrail app getApiKey
|
|
14
|
-
`,
|
|
15
|
-
];
|
|
16
|
-
static flags = {
|
|
17
|
-
...basecommand_1.BaseCommand.baseFlags,
|
|
18
|
-
appIdentifier: core_1.Flags.string({ char: 'a', description: 'The app identifier', required: false }),
|
|
19
|
-
};
|
|
20
|
-
async run() {
|
|
21
|
-
await (0, login_1.authUser)();
|
|
22
|
-
const installedApps = await (0, apps_1.getInstalledApps)();
|
|
23
|
-
if (!this.flags.appIdentifier) {
|
|
24
|
-
const questions = [
|
|
25
|
-
{
|
|
26
|
-
type: 'list',
|
|
27
|
-
name: 'appApiKey',
|
|
28
|
-
message: 'For which app would you like to retrieve the API key?',
|
|
29
|
-
choices: installedApps.map((x) => {
|
|
30
|
-
return {
|
|
31
|
-
name: x.app.name,
|
|
32
|
-
value: x.apiKey.apiKey,
|
|
33
|
-
};
|
|
34
|
-
}),
|
|
35
|
-
},
|
|
36
|
-
];
|
|
37
|
-
const answers = await inquirer_1.default.prompt(questions);
|
|
38
|
-
logger_1.default.info(`App API key: (app:${answers.appApiKey})`);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
const appFound = installedApps.find((x) => x.app.identifier === this.flags.appIdentifier);
|
|
42
|
-
if (!appFound) {
|
|
43
|
-
logger_1.default.info('You do not have such an app installed');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
logger_1.default.info(`App API key: (app:${appFound.apiKey.apiKey})`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
exports.default = GetAPIKeyApp;
|
|
14
|
+
`,
|
|
15
|
+
];
|
|
16
|
+
static flags = {
|
|
17
|
+
...basecommand_1.BaseCommand.baseFlags,
|
|
18
|
+
appIdentifier: core_1.Flags.string({ char: 'a', description: 'The app identifier', required: false }),
|
|
19
|
+
};
|
|
20
|
+
async run() {
|
|
21
|
+
await (0, login_1.authUser)();
|
|
22
|
+
const installedApps = await (0, apps_1.getInstalledApps)();
|
|
23
|
+
if (!this.flags.appIdentifier) {
|
|
24
|
+
const questions = [
|
|
25
|
+
{
|
|
26
|
+
type: 'list',
|
|
27
|
+
name: 'appApiKey',
|
|
28
|
+
message: 'For which app would you like to retrieve the API key?',
|
|
29
|
+
choices: installedApps.map((x) => {
|
|
30
|
+
return {
|
|
31
|
+
name: x.app.name,
|
|
32
|
+
value: x.apiKey.apiKey,
|
|
33
|
+
};
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
const answers = await inquirer_1.default.prompt(questions);
|
|
38
|
+
logger_1.default.info(`App API key: (app:${answers.appApiKey})`);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const appFound = installedApps.find((x) => x.app.identifier === this.flags.appIdentifier);
|
|
42
|
+
if (!appFound) {
|
|
43
|
+
logger_1.default.info('You do not have such an app installed');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
logger_1.default.info(`App API key: (app:${appFound.apiKey.apiKey})`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = GetAPIKeyApp;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { BaseCommand } from '../../basecommand';
|
|
2
|
-
export default class InitApp extends BaseCommand {
|
|
3
|
-
static description: string;
|
|
4
|
-
static examples: string[];
|
|
5
|
-
static flags: {
|
|
6
|
-
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
-
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
-
};
|
|
9
|
-
run(): Promise<void>;
|
|
10
|
-
}
|
|
1
|
+
import { BaseCommand } from '../../basecommand';
|
|
2
|
+
export default class InitApp extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
alwaysConfirmEnv: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
7
|
+
logLevel: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|