@forge/cli 11.3.0-next.5-experimental-c9be087 → 11.3.0
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/CHANGELOG.md +382 -7
- package/npm-shrinkwrap.json +49 -46
- package/out/autocomplete/autocomplete-config.json +3 -0
- package/out/bin/cli.d.ts.map +1 -1
- package/out/command-line/command.js +1 -1
- package/out/command-line/controller/install-controller.d.ts +5 -3
- package/out/command-line/controller/install-controller.d.ts.map +1 -1
- package/out/command-line/controller/install-controller.js +45 -28
- package/out/command-line/controller/version-controller.d.ts.map +1 -1
- package/out/command-line/controller/version-controller.js +4 -0
- package/out/command-line/dependency-injection.d.ts +2 -0
- package/out/command-line/dependency-injection.d.ts.map +1 -1
- package/out/command-line/dependency-injection.js +5 -2
- package/out/command-line/index.d.ts.map +1 -1
- package/out/command-line/index.js +2 -0
- package/out/command-line/register-app-commands.d.ts.map +1 -1
- package/out/command-line/register-app-commands.js +1 -1
- package/out/command-line/register-containers-commands.d.ts +3 -0
- package/out/command-line/register-containers-commands.d.ts.map +1 -0
- package/out/command-line/register-containers-commands.js +165 -0
- package/out/command-line/register-installation-commands.d.ts.map +1 -1
- package/out/command-line/register-installation-commands.js +9 -3
- package/out/command-line/register-tunnel-commands.d.ts.map +1 -1
- package/out/command-line/register-tunnel-commands.js +1 -0
- package/out/command-line/uninstall-command-helpers.d.ts +2 -1
- package/out/command-line/uninstall-command-helpers.d.ts.map +1 -1
- package/out/command-line/uninstall-command-helpers.js +17 -1
- package/out/command-line/view/version-view.d.ts.map +1 -1
- package/out/command-line/view/version-view.js +22 -1
- package/out/containers/container-command.d.ts +19 -0
- package/out/containers/container-command.d.ts.map +1 -0
- package/out/containers/container-command.js +159 -0
- package/out/containers/index.d.ts +2 -0
- package/out/containers/index.d.ts.map +1 -0
- package/out/containers/index.js +4 -0
- package/out/deploy/deployer/deployer.d.ts.map +1 -1
- package/out/deploy/deployer/deployer.js +1 -0
- package/out/deploy/packager/runtime-bundler.d.ts +3 -3
- package/out/deploy/packager/runtime-bundler.d.ts.map +1 -1
- package/out/deploy/packager/runtime-bundler.js +11 -10
- package/out/installations/graphql-client.d.ts +1 -0
- package/out/installations/graphql-client.d.ts.map +1 -1
- package/out/installations/graphql-client.js +24 -10
- package/out/installations/installation-helper.js +1 -1
- package/out/service/installation-service.d.ts +1 -0
- package/out/service/installation-service.d.ts.map +1 -1
- package/out/service/version-service.d.ts +10 -0
- package/out/service/version-service.d.ts.map +1 -1
- package/out/service/version-service.js +12 -0
- package/out/version/graphql-client.d.ts.map +1 -1
- package/out/version/graphql-client.js +2 -0
- package/package.json +7 -7
|
@@ -83,7 +83,7 @@ class InstallController {
|
|
|
83
83
|
];
|
|
84
84
|
}
|
|
85
85
|
async promptForSite(products) {
|
|
86
|
-
const isWorkspaceBased = products.length > 0 && this.supportedProductsService.isWorkspaceProduct(products[0]);
|
|
86
|
+
const isWorkspaceBased = products.length > 0 && this.supportedProductsService.isWorkspaceProduct((0, cli_shared_1.productDisplayName)(products[0]));
|
|
87
87
|
const overviewText = isWorkspaceBased
|
|
88
88
|
? cli_shared_1.Text.installationContext.overviewWorkspace
|
|
89
89
|
: cli_shared_1.Text.installationContext.overviewSite;
|
|
@@ -96,21 +96,36 @@ class InstallController {
|
|
|
96
96
|
if (!trySite) {
|
|
97
97
|
throw new cli_shared_1.ValidationError(invalidText);
|
|
98
98
|
}
|
|
99
|
-
return this.supportedProductsService.validateSite(trySite, products[0]);
|
|
99
|
+
return this.supportedProductsService.validateSite(trySite, products[0] && (0, cli_shared_1.productDisplayName)(products[0]));
|
|
100
100
|
}
|
|
101
|
-
async
|
|
101
|
+
async getAppInstallations(siteOption, productOption, environmentOption) {
|
|
102
102
|
const { installations } = await this.installationService.listNonTechnicalAppInstallations({
|
|
103
103
|
site: siteOption,
|
|
104
104
|
product: productOption,
|
|
105
105
|
environment: environmentOption
|
|
106
106
|
});
|
|
107
|
-
|
|
107
|
+
return installations;
|
|
108
|
+
}
|
|
109
|
+
async getInstallationToUpgrade(siteOption, productOption, environmentOption) {
|
|
110
|
+
const matchingInstallations = await this.getAppInstallations(siteOption, productOption, environmentOption);
|
|
111
|
+
let selectedInstallationToUpgrade;
|
|
112
|
+
if (siteOption && productOption?.length) {
|
|
113
|
+
if (!matchingInstallations.length) {
|
|
114
|
+
throw new cli_shared_1.ValidationError(cli_shared_1.Text.error.invalidInstallationContext);
|
|
115
|
+
}
|
|
116
|
+
selectedInstallationToUpgrade = matchingInstallations[0];
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
selectedInstallationToUpgrade = await this.installView.promptForUpgrade(matchingInstallations);
|
|
120
|
+
}
|
|
121
|
+
const { site, product, environmentKey, environmentType, version } = selectedInstallationToUpgrade;
|
|
108
122
|
const productName = (0, cli_shared_1.productDisplayName)(product);
|
|
109
123
|
return {
|
|
110
124
|
site: this.supportedProductsService.validateSite(site, productName),
|
|
111
|
-
product: productName,
|
|
125
|
+
product: this.supportedProductsService.validateSupportedProduct(productName),
|
|
112
126
|
environment: environmentKey,
|
|
113
|
-
environmentType
|
|
127
|
+
environmentType,
|
|
128
|
+
scopes: version.scopes
|
|
114
129
|
};
|
|
115
130
|
}
|
|
116
131
|
getUniqueInstallationProductsFromScopes(scopes) {
|
|
@@ -146,6 +161,8 @@ class InstallController {
|
|
|
146
161
|
return upperCaseLicense;
|
|
147
162
|
}
|
|
148
163
|
checkForUIKit1Modules = (modules) => {
|
|
164
|
+
if (!modules)
|
|
165
|
+
return;
|
|
149
166
|
const uiKit1Modules = (0, cli_shared_1.findUIKit1Modules)(modules);
|
|
150
167
|
if (uiKit1Modules.length > 0) {
|
|
151
168
|
this.installView.displayUIKit1DeprecationMessage(uiKit1Modules);
|
|
@@ -158,19 +175,19 @@ class InstallController {
|
|
|
158
175
|
const overrides = await this.validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment);
|
|
159
176
|
const environmentPermissions = await this.installationService.getAppEnvironmentPermissions(id, environment);
|
|
160
177
|
const requiredProducts = environmentPermissions?.requiredProducts;
|
|
161
|
-
|
|
162
|
-
|
|
178
|
+
let scopesFromLastInstallation = new Set();
|
|
179
|
+
if (upgrade) {
|
|
180
|
+
const upgradeResult = await this.getInstallationToUpgrade(site, products?.[0], environment);
|
|
163
181
|
environment = upgradeResult.environment;
|
|
164
182
|
site = upgradeResult.site;
|
|
165
183
|
products = [upgradeResult.product];
|
|
184
|
+
scopesFromLastInstallation = new Set(upgradeResult.scopes);
|
|
185
|
+
this.ui.info(this.supportedProductsService.isWorkspaceProduct(products[0]) ? text.bannerWorkspace : text.bannerSite);
|
|
166
186
|
}
|
|
167
|
-
if (!requiredProducts?.length) {
|
|
187
|
+
else if (!requiredProducts?.length) {
|
|
168
188
|
products = products?.length ? products : await this.promptForProducts();
|
|
169
189
|
site = site ? site : await this.promptForSite(products);
|
|
170
|
-
|
|
171
|
-
? text.bannerWorkspace
|
|
172
|
-
: text.bannerSite;
|
|
173
|
-
this.ui.info(bannerText);
|
|
190
|
+
this.ui.info(this.supportedProductsService.isWorkspaceProduct(products[0]) ? text.bannerWorkspace : text.bannerSite);
|
|
174
191
|
}
|
|
175
192
|
else {
|
|
176
193
|
const result = await this.getXPAProductsAndSite(requiredProducts.map(cli_shared_1.productDisplayName), products, site);
|
|
@@ -185,21 +202,16 @@ class InstallController {
|
|
|
185
202
|
this.ui.error(new NoDeploymentError(environment), { pad: false });
|
|
186
203
|
return;
|
|
187
204
|
}
|
|
188
|
-
|
|
189
|
-
environmentPermissions.scopes = [];
|
|
190
|
-
}
|
|
205
|
+
environmentPermissions.scopes = environmentPermissions.scopes ?? [];
|
|
191
206
|
const { scopes: environmentScopes, environmentType } = environmentPermissions;
|
|
192
207
|
const [{ permissions, modules }, manifestEgressEntries] = await Promise.all([
|
|
193
208
|
this.configFile.readConfig(),
|
|
194
209
|
this.configFile.getEgressPermissions()
|
|
195
210
|
]);
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const
|
|
200
|
-
const manifestScopes = new Set(permissions?.scopes ?? []);
|
|
201
|
-
const listScopesString = upgrade ? environmentPermissions.addedScopes : environmentPermissions.scopes;
|
|
202
|
-
const listScopes = await this.convertListScope(listScopesString);
|
|
211
|
+
this.checkForUIKit1Modules(modules);
|
|
212
|
+
const { manifestEgressAddresses, manifestScopes } = this.extractManifestData(manifestEgressEntries, permissions);
|
|
213
|
+
const differenceInScopes = environmentScopes.filter((x) => !scopesFromLastInstallation.has(x));
|
|
214
|
+
const listScopes = await this.convertListScope(differenceInScopes);
|
|
203
215
|
const scopesConfirmationResult = await this.installView.promptForPermissionsConfirmation(environmentPermissions, listScopes, [...manifestScopes], manifestEgressAddresses, environment, confirmScopes, !!nonInteractive, text);
|
|
204
216
|
if (!scopesConfirmationResult)
|
|
205
217
|
return;
|
|
@@ -227,13 +239,18 @@ class InstallController {
|
|
|
227
239
|
if (successfulProducts.length) {
|
|
228
240
|
this.ui.info(text.success.banner(environment, environmentType, (0, cli_shared_1.productDisplayName)(successfulProducts.join(', ')), site.host));
|
|
229
241
|
}
|
|
230
|
-
else {
|
|
242
|
+
else if (!upgrade) {
|
|
231
243
|
this.ui.info(cli_shared_1.Text.install.failedAll(site, environment));
|
|
232
244
|
}
|
|
233
245
|
if (failedProducts.length) {
|
|
234
246
|
throw new cli_shared_1.PartialInstallationError(cli_shared_1.Text.error.partialInstallation(failedProducts));
|
|
235
247
|
}
|
|
236
248
|
}
|
|
249
|
+
extractManifestData = (manifestEgressEntries, permissions) => {
|
|
250
|
+
const manifestEgressAddresses = (0, cli_shared_1.flatMap)(manifestEgressEntries, ({ domains }) => domains ?? []);
|
|
251
|
+
const manifestScopes = new Set(permissions?.scopes ?? []);
|
|
252
|
+
return { manifestEgressAddresses, manifestScopes };
|
|
253
|
+
};
|
|
237
254
|
getXPAProductsAndSite = async (requiredProducts, products, site) => {
|
|
238
255
|
const { installations } = (await this.installationService.listAppInstallations()) ?? [];
|
|
239
256
|
site = site ? site : await this.promptForSite([]);
|
|
@@ -245,7 +262,7 @@ class InstallController {
|
|
|
245
262
|
}
|
|
246
263
|
else {
|
|
247
264
|
this.ui.info(cli_shared_1.Text.install.installingToRequiredProduct(requiredProducts[0]));
|
|
248
|
-
products = requiredProducts;
|
|
265
|
+
products = requiredProducts.map((product) => (0, cli_shared_1.productDisplayName)(product));
|
|
249
266
|
}
|
|
250
267
|
}
|
|
251
268
|
else {
|
|
@@ -309,11 +326,11 @@ class InstallController {
|
|
|
309
326
|
}
|
|
310
327
|
const ecosystemLicenseModes = new Set();
|
|
311
328
|
for (const licenseMode of licenseModes) {
|
|
312
|
-
const
|
|
313
|
-
if (!this.isValidLicenseMode(
|
|
329
|
+
const formattedLicenseMode = licenseMode.toUpperCase().replace('-', '_');
|
|
330
|
+
if (!this.isValidLicenseMode(formattedLicenseMode)) {
|
|
314
331
|
throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseModesOverrideErrors.invalid);
|
|
315
332
|
}
|
|
316
|
-
ecosystemLicenseModes.add(
|
|
333
|
+
ecosystemLicenseModes.add(formattedLicenseMode);
|
|
317
334
|
}
|
|
318
335
|
return Array.from(ecosystemLicenseModes);
|
|
319
336
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/version-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAkB,MAAM,+BAA+B,CAAC;AAI/E,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAsBD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,WAAW;IAGvB,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAerG,oBAAoB,CAAC,EAChC,WAAW,EACX,YAAY,EACZ,IAAY,EACZ,OAAO,EACP,cAAc,EACf,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"version-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/version-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAkB,MAAM,+BAA+B,CAAC;AAI/E,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAsBD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,WAAW;IAGvB,iBAAiB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAerG,oBAAoB,CAAC,EAChC,WAAW,EACX,YAAY,EACZ,IAAY,EACZ,OAAO,EACP,cAAc,EACf,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBpC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,eAAe;IAWV,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBlH"}
|
|
@@ -78,6 +78,10 @@ class VersionController {
|
|
|
78
78
|
key: 'egress',
|
|
79
79
|
diff: diff.diffJson(version1.egresses, version2.egresses)
|
|
80
80
|
},
|
|
81
|
+
{
|
|
82
|
+
key: 'analytics',
|
|
83
|
+
diff: diff.diffJson(version1.analytics, version2.analytics)
|
|
84
|
+
},
|
|
81
85
|
{ key: 'policies', diff: diff.diffJson(version1.policies, version2.policies) },
|
|
82
86
|
{ key: 'connect keys', diff: diff.diffJson(version1.connectKeys, version2.connectKeys) },
|
|
83
87
|
{
|
|
@@ -30,6 +30,7 @@ import { PrerequisitesController } from './controller/prerequisites-controller';
|
|
|
30
30
|
import { DefaultEnvironmentController } from './controller/default-environment-controller';
|
|
31
31
|
import { EligibilityController } from './controller/eligibility-controller';
|
|
32
32
|
import { VersionController } from './controller/version-controller';
|
|
33
|
+
import { ContainerCommand } from '../containers';
|
|
33
34
|
export declare const getDependencies: (cliDetails: CLIDetails | undefined) => Promise<{
|
|
34
35
|
ui: CommandLineUI;
|
|
35
36
|
cmd: Command<[], import("./command").DefaultOpts>;
|
|
@@ -58,6 +59,7 @@ export declare const getDependencies: (cliDetails: CLIDetails | undefined) => Pr
|
|
|
58
59
|
viewAppLogsCommand: ViewAppLogsCommand;
|
|
59
60
|
getWebTriggerURLCommand: GetWebTriggerURLCommand;
|
|
60
61
|
listEntitiesIndexesCommand: ListEntitiesIndexesCommand;
|
|
62
|
+
containerCommand: ContainerCommand;
|
|
61
63
|
};
|
|
62
64
|
services: {
|
|
63
65
|
installationsService: InstallationService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAKhB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,EAElB,kBAAkB,EAKlB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAML,0BAA0B,EAG3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAIlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAUlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAKhB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,EAElB,kBAAkB,EAKlB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAML,0BAA0B,EAG3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAIlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAUlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAO,MAAM,eAAe,eAAsB,UAAU,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiZvE,CAAC;AAGF,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7D,oBAAY,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC"}
|
|
@@ -73,6 +73,7 @@ const version_controller_1 = require("./controller/version-controller");
|
|
|
73
73
|
const version_service_1 = require("../service/version-service");
|
|
74
74
|
const version_view_1 = require("./view/version-view");
|
|
75
75
|
const graphql_client_9 = require("../version/graphql-client");
|
|
76
|
+
const containers_1 = require("../containers");
|
|
76
77
|
const getDependencies = async (cliDetails) => {
|
|
77
78
|
let cmd;
|
|
78
79
|
const ui = new cli_shared_1.CommandLineUI(() => cmd.verbose);
|
|
@@ -184,7 +185,7 @@ const getDependencies = async (cliDetails) => {
|
|
|
184
185
|
const createSandbox = async (cfg) => new tunnel_2.NodeSandbox(cfg, statsigService);
|
|
185
186
|
const functionHost = new tunnel_1.LocalFunctionHost(configFile, ui, null, createSandbox);
|
|
186
187
|
const localInvocationService = new tunnel_1.LocalInvocationService(configFile, ui, runtime_1.notImplementedInspector);
|
|
187
|
-
const startTunnelCommand = new tunnel_1.StartTunnelCommand(assertiveAppConfigReader, new tunnel_1.LocalDevelopmentServer(localInvocationService, ui, configFile, fileReader, statsigService), new tunnel_1.CloudflareCreateTunnelService(ui), new tunnel_1.RegisterTunnelServiceImpl(new tunnel_1.TunnelGraphqlClient(graphQLClient)), functionHost, runtime_1.notImplementedInspector, ui, configFile);
|
|
188
|
+
const startTunnelCommand = new tunnel_1.StartTunnelCommand(assertiveAppConfigReader, new tunnel_1.LocalDevelopmentServer(localInvocationService, ui, configFile, fileReader, statsigService, i18nResourceBundlingService), new tunnel_1.CloudflareCreateTunnelService(ui), new tunnel_1.RegisterTunnelServiceImpl(new tunnel_1.TunnelGraphqlClient(graphQLClient)), functionHost, runtime_1.notImplementedInspector, ui, configFile);
|
|
188
189
|
const tunnelInteractor = new tunnel_1.TunnelInteractor(ui);
|
|
189
190
|
const configFilePortFindingService = new port_finding_service_1.ConfigFilePortFindingService(configFile);
|
|
190
191
|
const tunnelAnalyticsService = new tunnel_analytics_service_1.TunnelAnalyticsService(analyticsClientReporter, cliDetails);
|
|
@@ -198,6 +199,7 @@ const getDependencies = async (cliDetails) => {
|
|
|
198
199
|
const prerequisitesController = new prerequisites_controller_1.PrerequisitesController(ui, cliDetails);
|
|
199
200
|
const defaultEnvironmentController = new default_environment_controller_1.DefaultEnvironmentController(ui, credentialStore, cachedConfigService, assertiveAppConfigReader, userRepository, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery);
|
|
200
201
|
cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, supportedProductsService);
|
|
202
|
+
const containerCommand = new containers_1.ContainerCommand(graphQLClient, assertiveAppConfigReader);
|
|
201
203
|
await supportedProductsService.initializeWithSupportedProducts(statsigService);
|
|
202
204
|
return {
|
|
203
205
|
ui,
|
|
@@ -226,7 +228,8 @@ const getDependencies = async (cliDetails) => {
|
|
|
226
228
|
deleteEnvironmentCommand,
|
|
227
229
|
viewAppLogsCommand,
|
|
228
230
|
getWebTriggerURLCommand,
|
|
229
|
-
listEntitiesIndexesCommand
|
|
231
|
+
listEntitiesIndexesCommand,
|
|
232
|
+
containerCommand
|
|
230
233
|
},
|
|
231
234
|
services: {
|
|
232
235
|
installationsService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command-line/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAsBvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAmBlD;AAQD,eAAO,MAAM,IAAI,QAAa,QAAQ,IAAI,CAUzC,CAAC"}
|
|
@@ -21,6 +21,7 @@ const register_environments_commands_1 = require("./register-environments-comman
|
|
|
21
21
|
const register_storage_commands_1 = require("./register-storage-commands");
|
|
22
22
|
const register_eligibility_commands_1 = require("./register-eligibility-commands");
|
|
23
23
|
const register_version_commands_1 = require("./register-version-commands");
|
|
24
|
+
const register_containers_commands_1 = require("./register-containers-commands");
|
|
24
25
|
function registerCommands(deps) {
|
|
25
26
|
(0, register_autocomplete_commands_1.registerCommands)(deps);
|
|
26
27
|
(0, register_authentication_command_1.registerCommands)(deps);
|
|
@@ -39,6 +40,7 @@ function registerCommands(deps) {
|
|
|
39
40
|
(0, register_storage_commands_1.registerCommands)(deps);
|
|
40
41
|
(0, register_eligibility_commands_1.registerCommands)(deps);
|
|
41
42
|
(0, register_version_commands_1.registerCommands)(deps);
|
|
43
|
+
(0, register_containers_commands_1.registerCommands)(deps);
|
|
42
44
|
}
|
|
43
45
|
exports.registerCommands = registerCommands;
|
|
44
46
|
const registerEvents = ({ ui }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EAEtB,aAAa,EACb,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,oBAAY,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,IAAI,0BAA0B;IAC9B,QAAQ,WAAW;IACnB,SAAS,cAAc;IACvB,OAAO,4BAA4B;CACpC;AAED,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,IAAI,SAAS;IACb,uBAAuB,4BAA4B;IACnD,cAAc,mBAAmB;IACjC,IAAI,SAAS;IACb,aAAa,kBAAkB;CAChC;AAOD,aAAK,0BAA0B,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;AAoBlF,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAG5E,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,0BAUjC,CAAC;AAKF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrD;AAmDD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAC5C,OAAO,CAQT;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,aAAa,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,GACnD,OAAO,CAAC,sBAAsB,CAAC,CA+BjC;
|
|
1
|
+
{"version":3,"file":"register-app-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-app-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EAEtB,aAAa,EACb,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,oBAAY,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,IAAI,0BAA0B;IAC9B,QAAQ,WAAW;IACnB,SAAS,cAAc;IACvB,OAAO,4BAA4B;CACpC;AAED,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,IAAI,SAAS;IACb,uBAAuB,4BAA4B;IACnD,cAAc,mBAAmB;IACjC,IAAI,SAAS;IACb,aAAa,kBAAkB;CAChC;AAOD,aAAK,0BAA0B,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;AAoBlF,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAG5E,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,0BAUjC,CAAC;AAKF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQrD;AAmDD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,eAAe,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAC5C,OAAO,CAQT;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,aAAa,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,2BAA2B,GACnD,OAAO,CAAC,sBAAsB,CAAC,CA+BjC;AA0KD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAGlD"}
|
|
@@ -169,7 +169,7 @@ async function promptAndSelectTemplate(ui, createAppCommand, template, directory
|
|
|
169
169
|
const productOptions = await createAppCommand.filterAvailableProducts(Object.values(TemplateContext), TemplateContext.TEAMWORK_GRAPH, TemplateContext.CROSS_CONTEXT);
|
|
170
170
|
const productName = await ui.promptForList(cli_shared_1.Text.create.promptProduct, productOptions, {
|
|
171
171
|
format: formatProduct
|
|
172
|
-
});
|
|
172
|
+
}, productOptions.length);
|
|
173
173
|
const filteredTemplates = (PRODUCT_OPTIONS[productName] ?? [productName])
|
|
174
174
|
.map((p) => filterTemplatesByProduct(templatesWithoutCsuik, p, productOptions))
|
|
175
175
|
.flat();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-containers-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-containers-commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAwMtD,eAAO,MAAM,gBAAgB,SAAU,YAAY,KAAG,IAQrD,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCommands = void 0;
|
|
4
|
+
const cli_shared_1 = require("@forge/cli-shared");
|
|
5
|
+
function parseContainersWithLatestTags(containers) {
|
|
6
|
+
return containers.map(({ key, repositoryURI, images }) => ({
|
|
7
|
+
key,
|
|
8
|
+
repositoryURI,
|
|
9
|
+
latestTags: images?.edges[0]?.node.tags.join(', ') || '-'
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
const registerCreateContainerCommand = (parent, { ui, commands: { containerCommand } }) => {
|
|
13
|
+
parent
|
|
14
|
+
.command('create')
|
|
15
|
+
.description(cli_shared_1.Text.containers.create.cmd.desc)
|
|
16
|
+
.option('-k, --key [key]', cli_shared_1.Text.containers.create.cmd.keyOption)
|
|
17
|
+
.requireAppId()
|
|
18
|
+
.action(async ({ key }) => {
|
|
19
|
+
if (!key) {
|
|
20
|
+
ui.info(cli_shared_1.Text.containers.create.prompt.overview);
|
|
21
|
+
ui.emptyLine();
|
|
22
|
+
key = await ui.promptForText(cli_shared_1.Text.containers.create.prompt.entry);
|
|
23
|
+
ui.emptyLine();
|
|
24
|
+
}
|
|
25
|
+
ui.info(cli_shared_1.Text.containers.create.creatingNewContainer(key));
|
|
26
|
+
ui.info(cli_shared_1.Text.ctrlC);
|
|
27
|
+
ui.emptyLine();
|
|
28
|
+
const container = await ui.displayProgress(() => containerCommand.createContainer(key), cli_shared_1.Text.containers.create.start, cli_shared_1.Text.containers.create.success);
|
|
29
|
+
ui.emptyLine();
|
|
30
|
+
ui.info(cli_shared_1.Text.containers.create.createdRepositoryURI(container.repositoryURI));
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
const registerListContainersCommand = (parent, { ui, commands: { containerCommand } }) => {
|
|
34
|
+
parent
|
|
35
|
+
.command('list')
|
|
36
|
+
.description(cli_shared_1.Text.containers.list.cmd.desc)
|
|
37
|
+
.requireAppId()
|
|
38
|
+
.action(async () => {
|
|
39
|
+
ui.info(cli_shared_1.Text.containers.list.listingContainers);
|
|
40
|
+
ui.info(cli_shared_1.Text.ctrlC);
|
|
41
|
+
ui.emptyLine();
|
|
42
|
+
const containers = await containerCommand.fetchContainers();
|
|
43
|
+
ui.table([
|
|
44
|
+
['key', 'Container Key'],
|
|
45
|
+
['repositoryURI', 'Repository URI'],
|
|
46
|
+
['latestTags', 'Latest Image Tag(s)']
|
|
47
|
+
], parseContainersWithLatestTags(containers), { json: false, emptyMessage: cli_shared_1.Text.containers.list.noContainersFound });
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const registerListImagesCommand = (parent, { ui, commands: { containerCommand } }) => {
|
|
51
|
+
parent
|
|
52
|
+
.command('images')
|
|
53
|
+
.requireAppId()
|
|
54
|
+
.description(cli_shared_1.Text.containers.images.cmd.desc)
|
|
55
|
+
.command('list')
|
|
56
|
+
.option('-k, --key [key]', cli_shared_1.Text.containers.images.list.cmd.keyOption)
|
|
57
|
+
.description(cli_shared_1.Text.containers.images.list.cmd.desc)
|
|
58
|
+
.action(async ({ key }) => {
|
|
59
|
+
if (!key) {
|
|
60
|
+
ui.info(cli_shared_1.Text.containers.images.list.prompt.overview);
|
|
61
|
+
ui.emptyLine();
|
|
62
|
+
key = await ui.promptForText(cli_shared_1.Text.containers.images.list.prompt.entry);
|
|
63
|
+
ui.emptyLine();
|
|
64
|
+
}
|
|
65
|
+
ui.info(cli_shared_1.Text.containers.images.list.listingImages(key));
|
|
66
|
+
ui.info(cli_shared_1.Text.ctrlC);
|
|
67
|
+
ui.emptyLine();
|
|
68
|
+
let startCursor;
|
|
69
|
+
do {
|
|
70
|
+
const { images, endCursor, hasNextPage } = await containerCommand.fetchImages(key, startCursor);
|
|
71
|
+
ui.table([
|
|
72
|
+
['tags', 'Image Tags'],
|
|
73
|
+
['pushedAt', 'Pushed At'],
|
|
74
|
+
['lastPulledAt', 'Last Pulled At'],
|
|
75
|
+
['sizeInBytes', 'Size (bytes)'],
|
|
76
|
+
['digest', 'Digest']
|
|
77
|
+
], images.map(({ digest, tags, pushedAt, lastPulledAt, sizeInBytes }) => ({
|
|
78
|
+
tags: tags.join(', '),
|
|
79
|
+
pushedAt,
|
|
80
|
+
digest,
|
|
81
|
+
lastPulledAt: lastPulledAt || '-',
|
|
82
|
+
sizeInBytes: sizeInBytes.toString()
|
|
83
|
+
})), { json: false, emptyMessage: cli_shared_1.Text.containers.images.list.noImagesFound });
|
|
84
|
+
startCursor = hasNextPage ? endCursor : undefined;
|
|
85
|
+
if (!startCursor) {
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
ui.emptyLine();
|
|
89
|
+
const result = await ui.promptForText(cli_shared_1.Text.containers.images.list.promptNextPage);
|
|
90
|
+
if (result.toLowerCase() !== cli_shared_1.Text.containers.images.list.confirmationForNextPage) {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
} while (true);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
const registerGetRepositoryLoginCommand = (parent, { ui, commands: { containerCommand } }) => {
|
|
97
|
+
parent
|
|
98
|
+
.command('get-login')
|
|
99
|
+
.description(cli_shared_1.Text.containers.login.cmd.desc)
|
|
100
|
+
.requireAppId()
|
|
101
|
+
.option('-pw, --password-only', cli_shared_1.Text.containers.login.cmd.onlyPassword)
|
|
102
|
+
.action(async (opts) => {
|
|
103
|
+
const login = await containerCommand.fetchLoginDetails();
|
|
104
|
+
if (opts.passwordOnly) {
|
|
105
|
+
ui.info(login.password);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
ui.table([
|
|
109
|
+
['username', 'Username'],
|
|
110
|
+
['password', 'Password'],
|
|
111
|
+
['endpoint', 'Endpoint']
|
|
112
|
+
], [
|
|
113
|
+
{
|
|
114
|
+
...login,
|
|
115
|
+
password: cli_shared_1.Text.containers.login.truncatedPassword(login.password)
|
|
116
|
+
}
|
|
117
|
+
]);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
const registerDeleteContainerCommand = (parent, { ui, commands: { containerCommand } }) => {
|
|
122
|
+
parent
|
|
123
|
+
.command('delete')
|
|
124
|
+
.description(cli_shared_1.Text.containers.delete.cmd.desc)
|
|
125
|
+
.option('-k, --key [key]', cli_shared_1.Text.containers.delete.cmd.keyOption)
|
|
126
|
+
.requireAppId()
|
|
127
|
+
.action(async ({ key }) => {
|
|
128
|
+
if (!key) {
|
|
129
|
+
const containers = await containerCommand.fetchContainers();
|
|
130
|
+
if (!containers.length) {
|
|
131
|
+
ui.info(cli_shared_1.Text.containers.delete.interactive.noContainersFound);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
ui.info(cli_shared_1.Text.containers.delete.interactive.overview);
|
|
135
|
+
ui.emptyLine();
|
|
136
|
+
const selectedContainerIndex = await ui.promptForSingleChoiceTable(cli_shared_1.Text.containers.delete.interactive.desc, cli_shared_1.Text.containers.delete.interactive.progressInfo, ['Container Key', 'Repository URI', 'Latest Image Tag(s)'], parseContainersWithLatestTags(containers).map(({ key, repositoryURI, latestTags }) => ({
|
|
137
|
+
names: [key, repositoryURI, latestTags],
|
|
138
|
+
value: key,
|
|
139
|
+
primary: key
|
|
140
|
+
})));
|
|
141
|
+
key = containers[selectedContainerIndex].key;
|
|
142
|
+
ui.emptyLine();
|
|
143
|
+
}
|
|
144
|
+
ui.info(cli_shared_1.Text.containers.delete.deletingContainer(key));
|
|
145
|
+
ui.emptyLine();
|
|
146
|
+
ui.warn(cli_shared_1.Text.containers.delete.warning);
|
|
147
|
+
const confirmation = await ui.promptForText(cli_shared_1.Text.containers.delete.confirmation(key));
|
|
148
|
+
if (confirmation !== key) {
|
|
149
|
+
ui.info(cli_shared_1.Text.containers.delete.abortedDeletion);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
ui.info(cli_shared_1.Text.ctrlC);
|
|
153
|
+
ui.emptyLine();
|
|
154
|
+
await ui.displayProgress(() => containerCommand.deleteContainer(key), cli_shared_1.Text.containers.delete.start, cli_shared_1.Text.containers.delete.success);
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
const registerCommands = (deps) => {
|
|
158
|
+
const containersCmd = deps.cmd.command('containers', { hidden: true }).description(cli_shared_1.Text.containers.cmd.desc);
|
|
159
|
+
registerCreateContainerCommand(containersCmd, deps);
|
|
160
|
+
registerListContainersCommand(containersCmd, deps);
|
|
161
|
+
registerListImagesCommand(containersCmd, deps);
|
|
162
|
+
registerGetRepositoryLoginCommand(containersCmd, deps);
|
|
163
|
+
registerDeleteContainerCommand(containersCmd, deps);
|
|
164
|
+
};
|
|
165
|
+
exports.registerCommands = registerCommands;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAqDtD,eAAO,MAAM,gCAAgC,oDAAqD,YAAY,SAiC7G,CAAC;
|
|
1
|
+
{"version":3,"file":"register-installation-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-installation-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAqDtD,eAAO,MAAM,gCAAgC,oDAAqD,YAAY,SAiC7G,CAAC;AAkFF,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAejE,CAAC"}
|
|
@@ -46,7 +46,7 @@ const registerListInstallationsCommand = ({ cmd, ui, services: { installationsSe
|
|
|
46
46
|
['id', 'Installation ID'],
|
|
47
47
|
['environment', 'Environment'],
|
|
48
48
|
['site', 'Site'],
|
|
49
|
-
['product', hasSecondaryInstallations ? '
|
|
49
|
+
['product', hasSecondaryInstallations ? 'Context(s)' : 'Context'],
|
|
50
50
|
['majorVersion', 'Major Version']
|
|
51
51
|
], installations.map(({ id, environmentKey, product, secondaryProducts, site, version: { isLatest, version } }) => ({
|
|
52
52
|
id,
|
|
@@ -90,8 +90,14 @@ const registerUninstallCommand = (deps) => {
|
|
|
90
90
|
else {
|
|
91
91
|
const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
|
|
92
92
|
const options = (0, uninstall_command_helpers_1.getMultiChoiceOptionsForUninstall)(filteredInstallations);
|
|
93
|
-
const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', '
|
|
94
|
-
const [firstUninstall, secondUninstall] = (0, uninstall_command_helpers_1.getInstallationsFromSelection)(options, selectedSitesIndexes, filteredInstallations);
|
|
93
|
+
const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Context'], options);
|
|
94
|
+
const [firstUninstall, secondUninstall, hadAutoSelected] = (0, uninstall_command_helpers_1.getInstallationsFromSelection)(options, selectedSitesIndexes, filteredInstallations);
|
|
95
|
+
if (hadAutoSelected) {
|
|
96
|
+
const confirmation = await ui.confirm(cli_shared_1.Text.uninstall.interactive.confirmOptionalContexts);
|
|
97
|
+
if (!confirmation) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
95
101
|
const selectedSites = new Set(firstUninstall.map(({ site }) => site).concat(secondUninstall.map(({ site }) => site)));
|
|
96
102
|
const remainingApps = options
|
|
97
103
|
.filter((_, index) => !selectedSitesIndexes.includes(index))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tunnel-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-tunnel-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,eAAO,MAAM,gBAAgB,mDAAoD,YAAY,KAAG,
|
|
1
|
+
{"version":3,"file":"register-tunnel-commands.d.ts","sourceRoot":"","sources":["../../src/command-line/register-tunnel-commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,eAAO,MAAM,gBAAgB,mDAAoD,YAAY,KAAG,IAa/F,CAAC"}
|
|
@@ -11,6 +11,7 @@ const registerCommands = ({ cmd, ui, controllers: { tunnelController } }) => {
|
|
|
11
11
|
.option('-d, --debug', cli_shared_1.Text.tunnel.optionDebugger)
|
|
12
12
|
.option('-f,--debugFunctionHandlers <debugFunctionHandlers...>', cli_shared_1.Text.tunnel.functionHandlers)
|
|
13
13
|
.option('-p,--debugStartingPort [debugStartingPort]', cli_shared_1.Text.tunnel.debuggerPort, cli_shared_1.defaultDebugStartingPort.toString())
|
|
14
|
+
.option('-n, --no-verify', 'disable pre-tunnel checks')
|
|
14
15
|
.action(async (options) => {
|
|
15
16
|
await tunnelController.run(options, ui);
|
|
16
17
|
});
|
|
@@ -9,10 +9,11 @@ export interface Option {
|
|
|
9
9
|
contextAri?: string;
|
|
10
10
|
installationIdx: number;
|
|
11
11
|
product: string;
|
|
12
|
+
autoSelectId?: string;
|
|
12
13
|
};
|
|
13
14
|
}
|
|
14
15
|
export declare const getMultiChoiceOptionsForUninstall: (filteredInstallations: Installation[]) => Option[];
|
|
15
|
-
export declare const getInstallationsFromSelection: (options: Option[], selectedSitesIndexes: number[], filteredInstallations: Installation[]) => [Installation[], Installation[]];
|
|
16
|
+
export declare const getInstallationsFromSelection: (options: Option[], selectedSitesIndexes: number[], filteredInstallations: Installation[]) => [Installation[], Installation[], boolean];
|
|
16
17
|
export declare const performSingleUninstall: (installId: string, installationContext: string, { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
|
|
17
18
|
export declare const performMultipleUninstalls: (appsToUninstallFirst: Installation[], appsToUninstallSecond: Installation[], { ui, commands: { uninstallAppCommand } }: Dependencies) => Promise<void>;
|
|
18
19
|
//# sourceMappingURL=uninstall-command-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-command-helpers.d.ts","sourceRoot":"","sources":["../../src/command-line/uninstall-command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"uninstall-command-helpers.d.ts","sourceRoot":"","sources":["../../src/command-line/uninstall-command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAMD,eAAO,MAAM,iCAAiC,0BAA2B,YAAY,EAAE,KAAG,MAAM,EA+B/F,CAAC;AAWF,eAAO,MAAM,6BAA6B,YAC/B,MAAM,EAAE,wBACK,MAAM,EAAE,yBACP,YAAY,EAAE,KACpC,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,EAAE,OAAO,CAmC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB,cACtB,MAAM,uBACI,MAAM,6CACgB,YAAY,kBAuBxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,yBACd,YAAY,EAAE,yBACb,YAAY,EAAE,6CACM,YAAY,kBAsDxD,CAAC"}
|
|
@@ -19,6 +19,7 @@ const getMultiChoiceOptionsForUninstall = (filteredInstallations) => {
|
|
|
19
19
|
extra: {
|
|
20
20
|
installationIdx: idx,
|
|
21
21
|
product: product,
|
|
22
|
+
autoSelectId: !!secondaryProducts?.length ? id : undefined,
|
|
22
23
|
required: !!secondaryProducts?.length
|
|
23
24
|
}
|
|
24
25
|
});
|
|
@@ -48,7 +49,22 @@ const getInstallationsFromSelection = (options, selectedSitesIndexes, filteredIn
|
|
|
48
49
|
.filter((_, idx) => selectedSitesIndexes.includes(idx))
|
|
49
50
|
.filter(({ extra }) => extra?.required)
|
|
50
51
|
.map(({ extra }) => filteredInstallations[extra.installationIdx]);
|
|
51
|
-
|
|
52
|
+
const installationIds = new Set([...firstUninstall, ...secondUninstall].map(({ id }) => id));
|
|
53
|
+
const groups = options.reduce((acc, option, idx) => {
|
|
54
|
+
if (!installationIds.has(option.value)) {
|
|
55
|
+
return acc;
|
|
56
|
+
}
|
|
57
|
+
const group = acc.get(option.value) || new Set();
|
|
58
|
+
group.add(idx);
|
|
59
|
+
acc.set(option.value, group);
|
|
60
|
+
return acc;
|
|
61
|
+
}, new Map());
|
|
62
|
+
const selectedSitesIndexSet = new Set(selectedSitesIndexes);
|
|
63
|
+
const wholeGroupSelected = Array.from(installationIds).some((id) => {
|
|
64
|
+
const group = groups.get(id);
|
|
65
|
+
return group && group.size > 1 && Array.from(group).every((idx) => selectedSitesIndexSet.has(idx));
|
|
66
|
+
});
|
|
67
|
+
return [firstUninstall, secondUninstall, wholeGroupSelected];
|
|
52
68
|
};
|
|
53
69
|
exports.getInstallationsFromSelection = getInstallationsFromSelection;
|
|
54
70
|
const performSingleUninstall = async (installId, installationContext, { ui, commands: { uninstallAppCommand } }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/version-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAQ,EAAE,EAAY,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,eAAO,MAAM,eAAe,iDAAkD,EAAE,WAAW,QAAQ,cAAc,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"version-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/version-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAQ,EAAE,EAAY,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,eAAO,MAAM,eAAe,iDAAkD,EAAE,WAAW,QAAQ,cAAc,CAAC;;;;GA+HjH,CAAC;AAMF,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAEtB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAIxF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAIzF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAI3F,8BAA8B,IAAI,OAAO,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,CAAC;IAuDzE,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMlG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAY7D,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMxG,kBAAkB,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,GAAG,IAAI;IAkCxG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMtF,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIzC,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI;CA0BzD"}
|
|
@@ -14,6 +14,16 @@ const getDetailsTable = ({ formatKeyValueList, formatYamlProperties }, details)
|
|
|
14
14
|
}));
|
|
15
15
|
return formatKeyValueList(egressItems, '', true);
|
|
16
16
|
};
|
|
17
|
+
const analytics = (analytics) => {
|
|
18
|
+
const functionItems = analytics.map((analytic) => {
|
|
19
|
+
const properties = {
|
|
20
|
+
addresses: analytic.addresses,
|
|
21
|
+
inScopeEUD: analytic.inScopeEUD
|
|
22
|
+
};
|
|
23
|
+
return formatYamlProperties(properties, analytic.type, false);
|
|
24
|
+
});
|
|
25
|
+
return (0, cli_shared_1.itemList)(functionItems, '');
|
|
26
|
+
};
|
|
17
27
|
const securityPolicies = (policies) => {
|
|
18
28
|
const policyItems = policies.map((policy) => ({
|
|
19
29
|
key: policy.type,
|
|
@@ -87,6 +97,11 @@ const getDetailsTable = ({ formatKeyValueList, formatYamlProperties }, details)
|
|
|
87
97
|
detailsFn: egress,
|
|
88
98
|
property: 'egresses'
|
|
89
99
|
},
|
|
100
|
+
{
|
|
101
|
+
entry: 'analytics',
|
|
102
|
+
detailsFn: analytics,
|
|
103
|
+
property: 'analytics'
|
|
104
|
+
},
|
|
90
105
|
{
|
|
91
106
|
entry: 'policies',
|
|
92
107
|
detailsFn: securityPolicies,
|
|
@@ -144,6 +159,10 @@ class VersionView {
|
|
|
144
159
|
names: ['Egress', descriptions.egress],
|
|
145
160
|
property: 'egresses'
|
|
146
161
|
},
|
|
162
|
+
{
|
|
163
|
+
names: ['Analytics', descriptions.analytics],
|
|
164
|
+
property: 'analytics'
|
|
165
|
+
},
|
|
147
166
|
{
|
|
148
167
|
names: ['Policies', descriptions.policies],
|
|
149
168
|
property: 'policies'
|
|
@@ -235,6 +254,7 @@ class VersionView {
|
|
|
235
254
|
['version', 'Major Versions'],
|
|
236
255
|
['deploymentDate', 'Deployment Date'],
|
|
237
256
|
['egresses', 'Egress'],
|
|
257
|
+
['analytics', 'Analytics'],
|
|
238
258
|
['policies', 'Policies'],
|
|
239
259
|
['scopes', 'Scopes'],
|
|
240
260
|
['connectKeys', 'Connect keys'],
|
|
@@ -242,11 +262,12 @@ class VersionView {
|
|
|
242
262
|
['remotes', 'Remotes'],
|
|
243
263
|
['modules', 'Modules'],
|
|
244
264
|
['requiresLicense', 'License']
|
|
245
|
-
], data.map(({ version, egresses, modules, policies, deploymentDateTime, ...rest }) => ({
|
|
265
|
+
], data.map(({ version, egresses, analytics, modules, policies, deploymentDateTime, ...rest }) => ({
|
|
246
266
|
...rest,
|
|
247
267
|
version: version.toString(),
|
|
248
268
|
deploymentDate: deploymentDateTime.toISOString(),
|
|
249
269
|
egresses: getPropertySummary(egresses),
|
|
270
|
+
analytics: getPropertySummary(analytics),
|
|
250
271
|
policies: getPropertySummary(policies),
|
|
251
272
|
modules: getPropertySummary(modules)
|
|
252
273
|
})));
|