@forge/cli 10.13.6 → 11.0.0-next.18

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 (74) hide show
  1. package/CHANGELOG.md +203 -0
  2. package/LICENSE.txt +7 -0
  3. package/npm-shrinkwrap.json +142 -130
  4. package/out/autocomplete/autocomplete-config.json +26 -0
  5. package/out/command-line/command.d.ts +15 -2
  6. package/out/command-line/command.d.ts.map +1 -1
  7. package/out/command-line/command.js +29 -6
  8. package/out/command-line/controller/deploy-controller.d.ts.map +1 -1
  9. package/out/command-line/controller/deploy-controller.js +4 -7
  10. package/out/command-line/controller/install-controller.d.ts +3 -3
  11. package/out/command-line/controller/install-controller.d.ts.map +1 -1
  12. package/out/command-line/controller/install-controller.js +16 -13
  13. package/out/command-line/controller/version-controller.d.ts +36 -0
  14. package/out/command-line/controller/version-controller.d.ts.map +1 -0
  15. package/out/command-line/controller/version-controller.js +114 -0
  16. package/out/command-line/dependency-injection.d.ts +4 -1
  17. package/out/command-line/dependency-injection.d.ts.map +1 -1
  18. package/out/command-line/dependency-injection.js +14 -6
  19. package/out/command-line/index.d.ts +1 -1
  20. package/out/command-line/index.d.ts.map +1 -1
  21. package/out/command-line/index.js +6 -4
  22. package/out/command-line/register-app-commands.d.ts.map +1 -1
  23. package/out/command-line/register-app-commands.js +9 -1
  24. package/out/command-line/register-installation-commands.d.ts +2 -10
  25. package/out/command-line/register-installation-commands.d.ts.map +1 -1
  26. package/out/command-line/register-installation-commands.js +29 -32
  27. package/out/command-line/register-version-commands.d.ts +4 -0
  28. package/out/command-line/register-version-commands.d.ts.map +1 -0
  29. package/out/command-line/register-version-commands.js +76 -0
  30. package/out/command-line/register-webtrigger-commands.d.ts +1 -1
  31. package/out/command-line/register-webtrigger-commands.d.ts.map +1 -1
  32. package/out/command-line/register-webtrigger-commands.js +13 -5
  33. package/out/command-line/view/deploy-view.d.ts +1 -1
  34. package/out/command-line/view/deploy-view.d.ts.map +1 -1
  35. package/out/command-line/view/deploy-view.js +2 -2
  36. package/out/command-line/view/version-view.d.ts +26 -0
  37. package/out/command-line/view/version-view.d.ts.map +1 -0
  38. package/out/command-line/view/version-view.js +198 -0
  39. package/out/environment/graphql-client.d.ts +1 -0
  40. package/out/environment/graphql-client.d.ts.map +1 -1
  41. package/out/environment/graphql-client.js +3 -1
  42. package/out/environment/list-environment.d.ts +1 -0
  43. package/out/environment/list-environment.d.ts.map +1 -1
  44. package/out/installations/graphql-client.d.ts +6 -5
  45. package/out/installations/graphql-client.d.ts.map +1 -1
  46. package/out/installations/graphql-client.js +44 -7
  47. package/out/installations/installation-helper.d.ts.map +1 -1
  48. package/out/installations/installation-helper.js +1 -1
  49. package/out/installations/site-translation/bitbucket.d.ts +3 -4
  50. package/out/installations/site-translation/bitbucket.d.ts.map +1 -1
  51. package/out/installations/site-translation/bitbucket.js +1 -1
  52. package/out/installations/site-translation/index.d.ts +1 -1
  53. package/out/installations/site-translation/index.d.ts.map +1 -1
  54. package/out/installations/site-translation/index.js +1 -1
  55. package/out/installations/site-translation/site-translation.d.ts +3 -4
  56. package/out/installations/site-translation/site-translation.d.ts.map +1 -1
  57. package/out/installations/site-translation/sited-products.d.ts +29 -0
  58. package/out/installations/site-translation/sited-products.d.ts.map +1 -0
  59. package/out/installations/site-translation/sited-products.js +133 -0
  60. package/out/service/installation-service.d.ts +18 -4
  61. package/out/service/installation-service.d.ts.map +1 -1
  62. package/out/service/installation-service.js +44 -10
  63. package/out/service/tunnel-service.d.ts.map +1 -1
  64. package/out/service/tunnel-service.js +1 -1
  65. package/out/service/version-service.d.ts +77 -0
  66. package/out/service/version-service.d.ts.map +1 -0
  67. package/out/service/version-service.js +163 -0
  68. package/out/version/graphql-client.d.ts +25 -0
  69. package/out/version/graphql-client.d.ts.map +1 -0
  70. package/out/version/graphql-client.js +144 -0
  71. package/package.json +13 -11
  72. package/out/installations/site-translation/cloudid-products.d.ts +0 -25
  73. package/out/installations/site-translation/cloudid-products.d.ts.map +0 -1
  74. package/out/installations/site-translation/cloudid-products.js +0 -103
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionView = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const cli_shared_1 = require("@forge/cli-shared");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ class VersionView {
8
+ ui;
9
+ constructor(ui) {
10
+ this.ui = ui;
11
+ }
12
+ async displayDetailsProgress(progress) {
13
+ return this.ui.displayProgress(progress, cli_shared_1.Text.version.check.start, cli_shared_1.Text.version.check.end);
14
+ }
15
+ async displayDiffProgress(progress) {
16
+ return this.ui.displayProgress(progress, cli_shared_1.Text.version.diff.start, cli_shared_1.Text.version.diff.end);
17
+ }
18
+ async displayListProgress(progress) {
19
+ return this.ui.displayProgress(progress, cli_shared_1.Text.version.list.start, cli_shared_1.Text.version.list.end);
20
+ }
21
+ async promptVersionDetailsProperties() {
22
+ const { options, properties: { descriptions, banner, info, headers } } = cli_shared_1.Text.version.check.details.prompt;
23
+ const propsOptions = [
24
+ {
25
+ names: ['License', descriptions.license],
26
+ property: 'requiresLicense'
27
+ },
28
+ {
29
+ names: ['Scopes', descriptions.scopes],
30
+ property: 'scopes'
31
+ },
32
+ {
33
+ names: ['Egress', descriptions.egress],
34
+ property: 'egresses'
35
+ },
36
+ {
37
+ names: ['Policies', descriptions.policies],
38
+ property: 'policies'
39
+ },
40
+ {
41
+ names: ['Connect Key', descriptions.connectKeys],
42
+ property: 'connectKeys'
43
+ },
44
+ {
45
+ names: ['Functions', descriptions.functions],
46
+ property: 'functions'
47
+ },
48
+ {
49
+ names: ['Modules', descriptions.modules],
50
+ property: 'modules'
51
+ },
52
+ {
53
+ names: ['Remotes', descriptions.remotes],
54
+ property: 'remotes'
55
+ }
56
+ ];
57
+ const allOrNot = await this.ui.promptForList(options.banner, [options.choices.all, options.choices.manual]);
58
+ if (allOrNot === options.choices.manual) {
59
+ const choices = await this.ui.promptForTable(banner, info, headers, propsOptions);
60
+ return choices.map((index) => propsOptions[index].property);
61
+ }
62
+ return [];
63
+ }
64
+ displayVersionDetailsBanner(appVersion, envKey, envType) {
65
+ this.ui.emptyLine();
66
+ this.ui.info(cli_shared_1.Text.version.check.details.banner(envKey, envType, appVersion));
67
+ this.ui.emptyLine();
68
+ }
69
+ displayDetailsAsTable(details) {
70
+ const tableData = [
71
+ {
72
+ entry: 'deployment date',
73
+ detailsFn: cli_shared_1.Text.version.check.details.deploymentDate,
74
+ property: 'deploymentDateTime'
75
+ },
76
+ {
77
+ entry: 'functions',
78
+ detailsFn: cli_shared_1.Text.version.check.details.functions,
79
+ property: 'functions'
80
+ },
81
+ {
82
+ entry: 'modules',
83
+ detailsFn: cli_shared_1.Text.version.check.details.modules,
84
+ property: 'modules'
85
+ },
86
+ {
87
+ entry: 'license',
88
+ detailsFn: cli_shared_1.Text.version.check.details.license,
89
+ property: 'requiresLicense'
90
+ },
91
+ {
92
+ entry: 'scopes',
93
+ detailsFn: cli_shared_1.Text.version.check.details.scopes,
94
+ property: 'scopes'
95
+ },
96
+ {
97
+ entry: 'egress',
98
+ detailsFn: cli_shared_1.Text.version.check.details.egress,
99
+ property: 'egresses'
100
+ },
101
+ {
102
+ entry: 'policies',
103
+ detailsFn: cli_shared_1.Text.version.check.details.securityPolicies,
104
+ property: 'policies'
105
+ },
106
+ {
107
+ entry: 'connect keys',
108
+ detailsFn: cli_shared_1.Text.version.check.details.connectKeys,
109
+ property: 'connectKeys'
110
+ },
111
+ {
112
+ entry: 'remotes',
113
+ detailsFn: cli_shared_1.Text.version.check.details.remotes,
114
+ property: 'remotes'
115
+ }
116
+ ];
117
+ const filteredData = [...tableData]
118
+ .sort((a, b) => a.entry.localeCompare(b.entry))
119
+ .filter(({ property }) => details[property] !== undefined)
120
+ .map(({ entry, detailsFn, property }) => ({
121
+ entry,
122
+ details: detailsFn(details[property]),
123
+ property
124
+ }));
125
+ this.ui.table([
126
+ ['entry', 'Property'],
127
+ ['details', 'Details']
128
+ ], filteredData);
129
+ }
130
+ displayDataInJson(data) {
131
+ this.ui.info(JSON.stringify(data, null, 2));
132
+ }
133
+ displayDiffBanner(version1, version2, envKey, envType) {
134
+ this.ui.emptyLine();
135
+ this.ui.info(cli_shared_1.Text.version.diff.details.banner(envKey, envType, version1, version2));
136
+ this.ui.emptyLine();
137
+ }
138
+ displayDiffAsTable(versions, input) {
139
+ this.ui.table([
140
+ ['entry', 'Property'],
141
+ ['v1', `Version 1 [${versions.v1}]`],
142
+ ['v2', `Version 2 [${versions.v2}]`]
143
+ ], input
144
+ .filter(({ diff }) => diff.filter((change) => change.added || change.removed).length > 0)
145
+ .map(({ key, diff }) => ({
146
+ entry: key,
147
+ v1: diff
148
+ .filter((change) => !change.added)
149
+ .map((change) => {
150
+ if (!change.removed) {
151
+ return chalk_1.default.gray(change.value);
152
+ }
153
+ return change.value;
154
+ })
155
+ .join(''),
156
+ v2: diff
157
+ .filter((change) => !change.removed)
158
+ .map((change) => {
159
+ if (!change.added) {
160
+ return chalk_1.default.gray(change.value);
161
+ }
162
+ return change.value;
163
+ })
164
+ .join('')
165
+ }))
166
+ .sort((a, b) => a.entry.localeCompare(b.entry)));
167
+ }
168
+ displayListBanner(versions, envKey, envType) {
169
+ this.ui.emptyLine();
170
+ this.ui.info(cli_shared_1.Text.version.list.details.banner(envKey, envType, versions));
171
+ this.ui.emptyLine();
172
+ }
173
+ displayWriteToFile(outFile) {
174
+ this.ui.info(cli_shared_1.Text.version.check.details.writeToFile(outFile));
175
+ }
176
+ displayVersionList(data) {
177
+ this.ui.table([
178
+ ['version', 'Major Versions'],
179
+ ['deploymentDate', 'Deployment Date'],
180
+ ['egresses', 'Egress'],
181
+ ['policies', 'Policies'],
182
+ ['scopes', 'Scopes'],
183
+ ['connectKeys', 'Connect keys'],
184
+ ['functions', 'Functions'],
185
+ ['remotes', 'Remotes'],
186
+ ['modules', 'Modules'],
187
+ ['requiresLicense', 'License']
188
+ ], data.map(({ version, egresses, modules, policies, deploymentDateTime, ...rest }) => ({
189
+ ...rest,
190
+ version: version.toString(),
191
+ deploymentDate: cli_shared_1.Text.version.list.details.deploymentDate(deploymentDateTime),
192
+ egresses: cli_shared_1.Text.version.list.details.egresses(egresses),
193
+ policies: cli_shared_1.Text.version.list.details.policies(policies),
194
+ modules: cli_shared_1.Text.version.list.details.modules(modules)
195
+ })));
196
+ }
197
+ }
198
+ exports.VersionView = VersionView;
@@ -13,6 +13,7 @@ export declare class GraphqlClient implements CreateEnvironmentClient, ListEnvir
13
13
  type: AppEnvironmentType;
14
14
  key: string;
15
15
  lastDeployedAt: string;
16
+ primaryProduct: import("@forge/cli-shared").EcosystemPrimaryProduct | undefined;
16
17
  }[]>;
17
18
  deleteEnvironments(details: BatchDeleteEnvironmentDetails): Promise<DeleteEnvironmentOutput[]>;
18
19
  deleteEnvironment(details: DeleteEnvironmentDetails): Promise<true>;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAIb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;IAmC/C,kBAAkB,CAAC,OAAO,EAAE,6BAA6B;IAkBzD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;CAuDjE"}
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/environment/graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAIb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,aAAc,YAAW,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB;IAC/F,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAE5C,iBAAiB,CAAC,OAAO,EAAE,qBAAqB;IAgDhD,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;;IAqC/C,kBAAkB,CAAC,OAAO,EAAE,6BAA6B;IAkBzD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB;CAuDjE"}
@@ -59,6 +59,7 @@ class GraphqlClient {
59
59
  versions(first: 1) {
60
60
  nodes {
61
61
  updatedAt
62
+ primaryProduct
62
63
  }
63
64
  }
64
65
  }
@@ -75,7 +76,8 @@ class GraphqlClient {
75
76
  return {
76
77
  type: environment.type,
77
78
  key: environment.key,
78
- lastDeployedAt: environment.versions?.nodes?.[0]?.updatedAt || environment.createdAt
79
+ lastDeployedAt: environment.versions?.nodes?.[0]?.updatedAt || environment.createdAt,
80
+ primaryProduct: environment.versions?.nodes?.[0]?.primaryProduct || undefined
79
81
  };
80
82
  });
81
83
  }
@@ -4,6 +4,7 @@ export interface ListEnvironmentDetails {
4
4
  }
5
5
  export interface ListEnvironmentOutput extends Pick<AppEnvironment, 'key' | 'type'> {
6
6
  lastDeployedAt: string;
7
+ primaryProduct?: string;
7
8
  }
8
9
  export interface ListEnvironmentClient {
9
10
  listEnvironment(details: ListEnvironmentDetails): Promise<ListEnvironmentOutput[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"list-environment.d.ts","sourceRoot":"","sources":["../../src/environment/list-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;IACjF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CACpF;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,MAAM,EAAE,qBAAqB,EAC7B,YAAY,EAAE,iBAAiB;IAGrC,OAAO;CAMrB"}
1
+ {"version":3,"file":"list-environment.d.ts","sourceRoot":"","sources":["../../src/environment/list-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;IACjF,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CACpF;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,MAAM,EAAE,qBAAqB,EAC7B,YAAY,EAAE,iBAAiB;IAGrC,OAAO;CAMrB"}
@@ -1,6 +1,6 @@
1
- import { AppUninstallationInput, GraphQLClient, GraphQlMutationError, Pause, BaseError, UserError } from '@forge/cli-shared';
1
+ import { AppEnvironmentType, AppUninstallationInput, GraphQLClient, GraphQlMutationError, Pause, BaseError, UserError } from '@forge/cli-shared';
2
2
  import { AppInstallSiteDetails, InstallAppClient } from './install-app-site';
3
- import { AppEnvironmentVersionData, Installation, ListAppInstallationsClient, UpgradeAppInstallationsClient } from '../service/installation-service';
3
+ import { AppEnvironmentVersionData, HasNoAppInstallationsForEnvClient, Installation, ListAppInstallationsClient, UpgradeAppInstallationsClient } from '../service/installation-service';
4
4
  import { UninstallAppClient, UninstallAppOutput } from './uninstall-app';
5
5
  import { SiteTranslator } from './site-translation';
6
6
  export declare const UNINSTALLATION_EVENT_POLL_INTERVAL = 500;
@@ -44,15 +44,15 @@ export declare class MissingAppUninstallTask extends Error {
44
44
  }
45
45
  export declare class InstallationNotFoundError extends UserError {
46
46
  }
47
- export declare class InstallationsGraphqlClient implements InstallAppClient, ListAppInstallationsClient, UninstallAppClient, UpgradeAppInstallationsClient {
47
+ export declare class InstallationsGraphqlClient implements InstallAppClient, ListAppInstallationsClient, UninstallAppClient, UpgradeAppInstallationsClient, HasNoAppInstallationsForEnvClient {
48
48
  private readonly graphqlClient;
49
- private readonly cloudIdTranslator;
49
+ private readonly sitedProductTranslator;
50
50
  private readonly bitbucketTranslator;
51
51
  private readonly pause;
52
52
  SITE_RESOURCE_TYPE: string;
53
53
  WORKSPACE_RESOURCE_TYPE: string;
54
54
  static buildInstallationContext(product: string, resourceId: string, resourceType: string): string;
55
- constructor(graphqlClient: GraphQLClient, cloudIdTranslator: SiteTranslator, bitbucketTranslator: SiteTranslator, pause: Pause);
55
+ constructor(graphqlClient: GraphQLClient, sitedProductTranslator: SiteTranslator, bitbucketTranslator: SiteTranslator, pause: Pause);
56
56
  private buildInstallationContext;
57
57
  private getProductTranslation;
58
58
  installAppIntoSite({ environmentKey, site, product, appId, licenseOverride, overrides }: AppInstallSiteDetails): Promise<void>;
@@ -62,6 +62,7 @@ export declare class InstallationsGraphqlClient implements InstallAppClient, Lis
62
62
  uninstallMultipleApps(apps: AppUninstallationInput[]): Promise<Partial<UninstallAppOutput>[]>;
63
63
  listInstallations(appId: string): Promise<Installation[]>;
64
64
  getInstallation(appId: string, installationId: string): Promise<Installation>;
65
+ hasNoAppInstallationsForEnv(appId: string, appEnv: AppEnvironmentType): Promise<boolean>;
65
66
  private getAppInstallationTask;
66
67
  private getAppInstallationTaskRetry;
67
68
  private monitorUninstallApp;
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/installations/graphql-client.ts"],"names":[],"mappings":"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"}
@@ -73,7 +73,7 @@ class InstallationNotFoundError extends cli_shared_1.UserError {
73
73
  exports.InstallationNotFoundError = InstallationNotFoundError;
74
74
  class InstallationsGraphqlClient {
75
75
  graphqlClient;
76
- cloudIdTranslator;
76
+ sitedProductTranslator;
77
77
  bitbucketTranslator;
78
78
  pause;
79
79
  SITE_RESOURCE_TYPE = 'site';
@@ -86,9 +86,9 @@ class InstallationsGraphqlClient {
86
86
  });
87
87
  return ari.toString();
88
88
  }
89
- constructor(graphqlClient, cloudIdTranslator, bitbucketTranslator, pause) {
89
+ constructor(graphqlClient, sitedProductTranslator, bitbucketTranslator, pause) {
90
90
  this.graphqlClient = graphqlClient;
91
- this.cloudIdTranslator = cloudIdTranslator;
91
+ this.sitedProductTranslator = sitedProductTranslator;
92
92
  this.bitbucketTranslator = bitbucketTranslator;
93
93
  this.pause = pause;
94
94
  }
@@ -100,7 +100,7 @@ class InstallationsGraphqlClient {
100
100
  if (product && (0, cli_shared_1.isBitbucketProduct)(product)) {
101
101
  return this.bitbucketTranslator;
102
102
  }
103
- return this.cloudIdTranslator;
103
+ return this.sitedProductTranslator;
104
104
  }
105
105
  async installAppIntoSite({ environmentKey, site, product, appId, licenseOverride, overrides }) {
106
106
  const workspaceAri = await this.buildInstallationContext(product, site);
@@ -260,6 +260,32 @@ class InstallationsGraphqlClient {
260
260
  }
261
261
  throw new InstallationNotFoundError(cli_shared_1.Text.installationId.errors.notFound(installationId));
262
262
  }
263
+ async hasNoAppInstallationsForEnv(appId, appEnv) {
264
+ const query = `
265
+ query forge_cli_hasNoAppInstallationsForEnv($filter: AppInstallationsByAppFilter!) {
266
+ ecosystem {
267
+ appInstallationsByApp(filter: $filter, first: 1) {
268
+ totalCount
269
+ }
270
+ }
271
+ }
272
+ `;
273
+ const result = (await this.graphqlClient.query(query, {
274
+ filter: {
275
+ apps: {
276
+ ids: [appId]
277
+ },
278
+ appEnvironments: {
279
+ types: [appEnv]
280
+ }
281
+ }
282
+ }));
283
+ const totalCount = result?.ecosystem?.appInstallationsByApp?.totalCount ?? -1;
284
+ if (totalCount < 0) {
285
+ throw new MissingAppError();
286
+ }
287
+ return totalCount === 0;
288
+ }
263
289
  async getAppInstallationTask(taskId) {
264
290
  const query = `
265
291
  query forge_cli_getInstallationTask($id: ID!) {
@@ -315,9 +341,11 @@ class InstallationsGraphqlClient {
315
341
  }
316
342
  async getCombinedHostnameMap(installationContexts) {
317
343
  const bitbucketAris = this.getResourceArisForProduct(installationContexts, this.bitbucketTranslator.ariBelongsToProduct);
318
- const bbWorkspaceAriToHostname = await this.bitbucketTranslator.getSitesForResourceAris(bitbucketAris);
319
- const cloudIdAris = this.getResourceArisForProduct(installationContexts, this.cloudIdTranslator.ariBelongsToProduct);
320
- const siteAriToHostname = await this.cloudIdTranslator.getSitesForResourceAris(cloudIdAris);
344
+ const cloudIdAris = this.getResourceArisForProduct(installationContexts, this.sitedProductTranslator.ariBelongsToProduct);
345
+ const [siteAriToHostname, bbWorkspaceAriToHostname] = await Promise.all([
346
+ this.sitedProductTranslator.getSitesForResourceAris(cloudIdAris),
347
+ this.bitbucketTranslator.getSitesForResourceAris(bitbucketAris)
348
+ ]);
321
349
  const combinedAriToHostname = {
322
350
  ...siteAriToHostname,
323
351
  ...bbWorkspaceAriToHostname
@@ -333,12 +361,19 @@ class InstallationsGraphqlClient {
333
361
  return installationContexts.map((context, i) => {
334
362
  const { environment, environmentType, installation } = installations[i];
335
363
  const site = combinedAriToHostname[context.toString()];
364
+ const secondaryProducts = (installation.secondaryInstallationContexts ?? [])
365
+ .map((context) => (0, cli_shared_1.parseInstallationContext)(context))
366
+ .map((context) => context.resourceOwner);
336
367
  return {
337
368
  id: installation.id,
369
+ ...(secondaryProducts.length > 0 ? { secondaryProducts } : {}),
338
370
  product: context.resourceOwner,
339
371
  environmentKey: environment,
340
372
  environmentType,
341
373
  context: installation.installationContext,
374
+ ...(installation.secondaryInstallationContexts?.length
375
+ ? { secondaryContexts: installation.secondaryInstallationContexts }
376
+ : {}),
342
377
  site,
343
378
  version: installation.appEnvironmentVersion || {
344
379
  isLatest: false,
@@ -355,6 +390,7 @@ class InstallationsGraphqlClient {
355
390
  nodes {
356
391
  id
357
392
  installationContext
393
+ secondaryInstallationContexts
358
394
  appEnvironment {
359
395
  key
360
396
  type
@@ -414,6 +450,7 @@ class InstallationsGraphqlClient {
414
450
  type
415
451
  versions(first: $firstN) {
416
452
  nodes {
453
+ primaryProduct
417
454
  permissions {
418
455
  egress {
419
456
  addresses
@@ -1 +1 @@
1
- {"version":3,"file":"installation-helper.d.ts","sourceRoot":"","sources":["../../src/installations/installation-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAyC,EAAE,EAAmB,MAAM,mBAAmB,CAAC;AAE/F,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAWtE;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,YAAY,EAAE,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,yBAAyB,EAAE,MAAM,GAChC,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
1
+ {"version":3,"file":"installation-helper.d.ts","sourceRoot":"","sources":["../../src/installations/installation-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAiD,EAAE,EAAmB,MAAM,mBAAmB,CAAC;AAEvG,wBAAgB,sBAAsB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAWtE;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,YAAY,EAAE,EAC7B,uBAAuB,EAAE,MAAM,EAC/B,yBAAyB,EAAE,MAAM,GAChC,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
@@ -19,7 +19,7 @@ async function selectSingleInstallation(ui, installations, installationTableProm
19
19
  names: [
20
20
  (0, cli_shared_1.environmentToOption)(environmentKey),
21
21
  site,
22
- (0, cli_shared_1.capitalise)(product),
22
+ (0, cli_shared_1.productDisplayName)(product),
23
23
  cli_shared_1.Text.install.booleanToScope(version.isLatest),
24
24
  (0, semver_1.major)(version.version).toString()
25
25
  ],
@@ -1,16 +1,15 @@
1
1
  /// <reference types="node" />
2
2
  import { SiteTranslator } from './site-translation';
3
3
  import { URL } from 'url';
4
- import { Ari } from '@forge/util/packages/ari';
5
- import { EnrichedAri } from '@forge/cli-shared';
4
+ import { Ari, AnyAri } from '@forge/util/packages/ari';
6
5
  export declare class InvalidWorkspaceError extends Error {
7
6
  constructor(url: URL);
8
7
  }
9
8
  export declare const getBitbucketEndpoint: () => string;
10
9
  export declare class BitbucketTranslator implements SiteTranslator {
11
- ariBelongsToProduct(ari: EnrichedAri): boolean;
10
+ ariBelongsToProduct(ari: AnyAri): boolean;
12
11
  buildInstallationContext(product: string, site: URL): Promise<Ari>;
13
- getSitesForResourceAris(aris: EnrichedAri[]): Promise<Record<string, string>>;
12
+ getSitesForResourceAris(aris: AnyAri[]): Promise<Record<string, string>>;
14
13
  private getWorkspaceId;
15
14
  getWorkspaceUrl(workspaceId: string): Promise<URL | null>;
16
15
  private decorateWorkspaceId;
@@ -1 +1 @@
1
- {"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/bitbucket.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAU,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAC;AAExE,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,EAAE,GAAG;CAGrB;AAOD,eAAO,MAAM,oBAAoB,QAAO,MAEvC,CAAC;AAEF,qBAAa,mBAAoB,YAAW,cAAc;IACjD,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO;IAIxC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlE,uBAAuB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAc5E,cAAc;IAwBf,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsBtE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;CAG1B"}
1
+ {"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/bitbucket.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,EAAE,GAAG;CAGrB;AAOD,eAAO,MAAM,oBAAoB,QAAO,MAEvC,CAAC;AAEF,qBAAa,mBAAoB,YAAW,cAAc;IACjD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlE,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAcvE,cAAc;IAwBf,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsBtE,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;CAG1B"}
@@ -94,7 +94,7 @@ class BitbucketTranslator {
94
94
  if (workspaceURL.hostname !== BITBUCKET_URL.hostname) {
95
95
  throw new InvalidWorkspaceError(workspaceURL);
96
96
  }
97
- const pathnames = workspaceURL.pathname.substr(1).split('/');
97
+ const pathnames = workspaceURL.pathname.substring(1).split('/');
98
98
  if (!pathnames.length) {
99
99
  throw new InvalidWorkspaceError(workspaceURL);
100
100
  }
@@ -1,4 +1,4 @@
1
1
  export * from './bitbucket';
2
- export * from './cloudid-products';
2
+ export * from './sited-products';
3
3
  export * from './site-translation';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./bitbucket"), exports);
5
- tslib_1.__exportStar(require("./cloudid-products"), exports);
5
+ tslib_1.__exportStar(require("./sited-products"), exports);
6
6
  tslib_1.__exportStar(require("./site-translation"), exports);
@@ -1,10 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { URL } from 'url';
3
- import { Ari } from '@forge/util/packages/ari';
4
- import { EnrichedAri } from '@forge/cli-shared';
3
+ import { AnyAri, Ari } from '@forge/util/packages/ari';
5
4
  export interface SiteTranslator {
6
5
  buildInstallationContext: (product: string, site: URL) => Promise<Ari>;
7
- getSitesForResourceAris: (ari: EnrichedAri[]) => Promise<Record<string, string>>;
8
- ariBelongsToProduct: (ari: EnrichedAri) => boolean;
6
+ getSitesForResourceAris: (ari: AnyAri[]) => Promise<Record<string, string>>;
7
+ ariBelongsToProduct: (ari: AnyAri) => boolean;
9
8
  }
10
9
  //# sourceMappingURL=site-translation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site-translation.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/site-translation.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvE,uBAAuB,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,mBAAmB,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC;CACpD"}
1
+ {"version":3,"file":"site-translation.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/site-translation.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvE,uBAAuB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C"}
@@ -0,0 +1,29 @@
1
+ /// <reference types="node" />
2
+ import { SiteTranslator } from './site-translation';
3
+ import { URL } from 'url';
4
+ import { AnyAri, Ari } from '@forge/util/packages/ari';
5
+ import { GraphQLClient, UserError } from '@forge/cli-shared';
6
+ export declare const GRAPH_PRODUCT_ID_IN_TCS = "devops";
7
+ export declare class InvalidAtlassianSiteError extends UserError {
8
+ constructor(url: URL);
9
+ }
10
+ declare type CloudIdAndActivationId = {
11
+ cloudId: string;
12
+ activationId: string;
13
+ };
14
+ export declare class ActivationIdMissingError extends Error {
15
+ constructor(url: string, product: string);
16
+ }
17
+ export declare class SitedProductTranslator implements SiteTranslator {
18
+ private graphqlClient;
19
+ constructor(graphqlClient: GraphQLClient);
20
+ ariBelongsToProduct(ari: AnyAri): boolean;
21
+ buildInstallationContext(product: string, site: URL): Promise<Ari>;
22
+ getSitesForResourceAris(aris: AnyAri[]): Promise<Record<string, string>>;
23
+ private queryHostnamesByCloudIds;
24
+ private queryHostnamesByActivationIds;
25
+ private bulkQuerySiteHostnames;
26
+ getCloudIdAndActivationId(site: URL, productResourceOwner: string): Promise<CloudIdAndActivationId>;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=sited-products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sited-products.d.ts","sourceRoot":"","sources":["../../../src/installations/site-translation/sited-products.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAIL,aAAa,EAOb,SAAS,EAEV,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAShD,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,GAAG,EAAE,GAAG;CAGrB;AAED,aAAK,sBAAsB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AACxE,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGzC;AAmCD,qBAAa,sBAAuB,YAAW,cAAc;IAC/C,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEzC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQnC,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlE,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAkCrF,OAAO,CAAC,wBAAwB,CAqB9B;IAEF,OAAO,CAAC,6BAA6B,CAiBnC;YAEY,sBAAsB;IAmBvB,yBAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAqBjH"}