@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.
Files changed (52) hide show
  1. package/CHANGELOG.md +382 -7
  2. package/npm-shrinkwrap.json +49 -46
  3. package/out/autocomplete/autocomplete-config.json +3 -0
  4. package/out/bin/cli.d.ts.map +1 -1
  5. package/out/command-line/command.js +1 -1
  6. package/out/command-line/controller/install-controller.d.ts +5 -3
  7. package/out/command-line/controller/install-controller.d.ts.map +1 -1
  8. package/out/command-line/controller/install-controller.js +45 -28
  9. package/out/command-line/controller/version-controller.d.ts.map +1 -1
  10. package/out/command-line/controller/version-controller.js +4 -0
  11. package/out/command-line/dependency-injection.d.ts +2 -0
  12. package/out/command-line/dependency-injection.d.ts.map +1 -1
  13. package/out/command-line/dependency-injection.js +5 -2
  14. package/out/command-line/index.d.ts.map +1 -1
  15. package/out/command-line/index.js +2 -0
  16. package/out/command-line/register-app-commands.d.ts.map +1 -1
  17. package/out/command-line/register-app-commands.js +1 -1
  18. package/out/command-line/register-containers-commands.d.ts +3 -0
  19. package/out/command-line/register-containers-commands.d.ts.map +1 -0
  20. package/out/command-line/register-containers-commands.js +165 -0
  21. package/out/command-line/register-installation-commands.d.ts.map +1 -1
  22. package/out/command-line/register-installation-commands.js +9 -3
  23. package/out/command-line/register-tunnel-commands.d.ts.map +1 -1
  24. package/out/command-line/register-tunnel-commands.js +1 -0
  25. package/out/command-line/uninstall-command-helpers.d.ts +2 -1
  26. package/out/command-line/uninstall-command-helpers.d.ts.map +1 -1
  27. package/out/command-line/uninstall-command-helpers.js +17 -1
  28. package/out/command-line/view/version-view.d.ts.map +1 -1
  29. package/out/command-line/view/version-view.js +22 -1
  30. package/out/containers/container-command.d.ts +19 -0
  31. package/out/containers/container-command.d.ts.map +1 -0
  32. package/out/containers/container-command.js +159 -0
  33. package/out/containers/index.d.ts +2 -0
  34. package/out/containers/index.d.ts.map +1 -0
  35. package/out/containers/index.js +4 -0
  36. package/out/deploy/deployer/deployer.d.ts.map +1 -1
  37. package/out/deploy/deployer/deployer.js +1 -0
  38. package/out/deploy/packager/runtime-bundler.d.ts +3 -3
  39. package/out/deploy/packager/runtime-bundler.d.ts.map +1 -1
  40. package/out/deploy/packager/runtime-bundler.js +11 -10
  41. package/out/installations/graphql-client.d.ts +1 -0
  42. package/out/installations/graphql-client.d.ts.map +1 -1
  43. package/out/installations/graphql-client.js +24 -10
  44. package/out/installations/installation-helper.js +1 -1
  45. package/out/service/installation-service.d.ts +1 -0
  46. package/out/service/installation-service.d.ts.map +1 -1
  47. package/out/service/version-service.d.ts +10 -0
  48. package/out/service/version-service.d.ts.map +1 -1
  49. package/out/service/version-service.js +12 -0
  50. package/out/version/graphql-client.d.ts.map +1 -1
  51. package/out/version/graphql-client.js +2 -0
  52. 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 promptForUpgrade(siteOption, productOption, environmentOption) {
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
- const { site, product, environmentKey, environmentType } = await this.installView.promptForUpgrade(installations);
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
- if (upgrade && (!site || !products?.length)) {
162
- const upgradeResult = await this.promptForUpgrade(site, products?.[0], environment);
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
- const bannerText = (await this.supportedProductsService.isWorkspaceProduct(products[0]))
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
- if (environmentPermissions.scopes === undefined) {
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
- if (modules) {
197
- this.checkForUIKit1Modules(modules);
198
- }
199
- const manifestEgressAddresses = (0, cli_shared_1.flatMap)(manifestEgressEntries, ({ domains }) => domains ?? []);
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 upperCaseLicenseMode = licenseMode.toUpperCase();
313
- if (!this.isValidLicenseMode(upperCaseLicenseMode)) {
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(upperCaseLicenseMode);
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;IA4BzB,OAAO,CAAC,eAAe;IAWV,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBlH"}
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;AAKpE,eAAO,MAAM,eAAe,eAAsB,UAAU,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsYvE,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"}
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;AAqBvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAkBlD;AAQD,eAAO,MAAM,IAAI,QAAa,QAAQ,IAAI,CAUzC,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;AAqKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAGlD"}
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,3 @@
1
+ import { Dependencies } from './dependency-injection';
2
+ export declare const registerCommands: (deps: Dependencies) => void;
3
+ //# sourceMappingURL=register-containers-commands.d.ts.map
@@ -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;AA2EF,eAAO,MAAM,gBAAgB,qBAAsB,YAAY,KAAG,IAejE,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 ? 'Product(s)' : 'Product'],
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', 'Product'], options);
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,IAY/F,CAAC"}
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;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAClH;AAMD,eAAO,MAAM,iCAAiC,0BAA2B,YAAY,EAAE,KAAG,MAAM,EA8B/F,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAC/B,MAAM,EAAE,wBACK,MAAM,EAAE,yBACP,YAAY,EAAE,KACpC,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,CAiBjC,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"}
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
- return [firstUninstall, secondUninstall];
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;;;;GAgHjH,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;IAmDzE,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;CAwBzD"}
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
  })));