@forge/cli-shared 8.23.1-next.6-experimental-5c60439 → 8.24.0-next.7-experimental-04898b4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @forge/cli-shared
2
2
 
3
- ## 8.23.1-next.6-experimental-5c60439
3
+ ## 8.24.0-next.7-experimental-04898b4
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -9,6 +9,8 @@
9
9
  ### Patch Changes
10
10
 
11
11
  - 22145f6: Surfacing error messages in the Forge CLI for apps that are missing billing information
12
+ - 8f4ff0a: Remove forge-cli-enable-developer-space-flow feature flag and GA developer space selection. The feature is now always enabled except in FedRAMP environments.
13
+ - 421fa50: Including remote baseUrl hostnames in fetch_backend egress permissions to ensure egress checking is consistent with backend (cs-apps)
12
14
  - Updated dependencies [ccdcfc3]
13
15
  - Updated dependencies [8197e66]
14
16
  - Updated dependencies [723fab8]
@@ -17,7 +19,17 @@
17
19
  - Updated dependencies [f1f11f0]
18
20
  - Updated dependencies [b7b1f36]
19
21
  - Updated dependencies [9f3add6]
20
- - @forge/manifest@12.9.0-next.5-experimental-5c60439
22
+ - @forge/manifest@12.9.0-next.5-experimental-04898b4
23
+
24
+ ## 8.24.0-next.7
25
+
26
+ ### Minor Changes
27
+
28
+ - 2415638: Prerelease of forge module add command
29
+
30
+ ### Patch Changes
31
+
32
+ - 8f4ff0a: Remove forge-cli-enable-developer-space-flow feature flag and GA developer space selection. The feature is now always enabled except in FedRAMP environments.
21
33
 
22
34
  ## 8.23.1-next.6
23
35
 
@@ -37,6 +37,7 @@ export declare class ConfigFile implements ConfigReader, ConfigWriter, ConfigInt
37
37
  private assertNoMissingResources;
38
38
  private getRemoteFromEgressPermission;
39
39
  private instanceOfRemote;
40
+ private getRemoteBaseUrlHostnames;
40
41
  getEgressPermissions(): Promise<{
41
42
  type: string;
42
43
  domains: string[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../src/config/config-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,IAAI,CAAC;AAGlE,OAAO,EACL,OAAO,EACP,cAAc,EACd,SAAS,EAOV,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAQ,MAAM,WAAW,CAAC;AAE7D,qBAAa,oBAAqB,SAAQ,eAAe;;CAIxD;AAED,qBAAa,8BAA+B,SAAQ,SAAS;gBAC/C,SAAS,EAAE,MAAM,EAAE;CAGhC;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C;AAED,oBAAY,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAY,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACjE,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,YAAY,EAAE,cAAc,CAAC;CAC9B;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CA6D5D;AAED,qBAAa,UAAW,YAAW,YAAY,EAAE,YAAY,EAAE,gBAAgB;IAG3E,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAH7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAE7B,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,gBAAgB;IAKlC,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAiBzC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAYrC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKvD,OAAO,CAAC,kBAAkB;IAoBb,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,OAAO,CAAC,aAAa;IAIR,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1G,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,gBAAgB;IAIX,oBAAoB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAqClF,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAe1E,YAAY,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAsB1E,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKzD,OAAO,CAAC,eAAe;CAkCxB"}
1
+ {"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../../src/config/config-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,IAAI,CAAC;AAGlE,OAAO,EACL,OAAO,EACP,cAAc,EACd,SAAS,EAOV,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAQ,MAAM,WAAW,CAAC;AAE7D,qBAAa,oBAAqB,SAAQ,eAAe;;CAIxD;AAED,qBAAa,8BAA+B,SAAQ,SAAS;gBAC/C,SAAS,EAAE,MAAM,EAAE;CAGhC;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C;AAED,oBAAY,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAY,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACjE,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,YAAY,EAAE,cAAc,CAAC;CAC9B;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CA6D5D;AAED,qBAAa,UAAW,YAAW,YAAY,EAAE,YAAY,EAAE,gBAAgB;IAG3E,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAH7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAE7B,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,gBAAgB;IAKlC,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAiBzC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAYrC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKvD,OAAO,CAAC,kBAAkB;IAoBb,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,OAAO,CAAC,aAAa;IAIR,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1G,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,yBAAyB;IAuBpB,oBAAoB,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,EAAE,CAAC;IAmDlF,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAe1E,YAAY,CAAC,aAAa,CAAC,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAsB1E,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKzD,OAAO,CAAC,eAAe;CAkCxB"}
@@ -211,13 +211,31 @@ class ConfigFile {
211
211
  instanceOfRemote(remote) {
212
212
  return typeof remote !== 'string' && 'remote' in remote;
213
213
  }
214
+ getRemoteBaseUrlHostnames(remotes) {
215
+ if (!remotes) {
216
+ return [];
217
+ }
218
+ return remotes.flatMap((remote) => {
219
+ const baseUrlField = remote.baseUrl;
220
+ if (!baseUrlField) {
221
+ return [];
222
+ }
223
+ const urls = typeof baseUrlField === 'string' ? [baseUrlField] : Object.values(baseUrlField);
224
+ return urls.flatMap((url) => {
225
+ try {
226
+ return [new url_1.URL(url).hostname];
227
+ }
228
+ catch (e) {
229
+ return [];
230
+ }
231
+ });
232
+ });
233
+ }
214
234
  async getEgressPermissions() {
215
235
  const { permissions, remotes } = await this.readConfig();
216
236
  const egressPermissions = permissions?.external;
217
- if (!egressPermissions) {
218
- return [];
219
- }
220
- const { fetch: fetchEgress, ...otherEgress } = egressPermissions;
237
+ const remoteBaseUrlHostnames = this.getRemoteBaseUrlHostnames(remotes);
238
+ const { fetch: fetchEgress, ...otherEgress } = egressPermissions ?? {};
221
239
  const getDomainsFromPermissions = (input, typePrefix = undefined) => Object.entries(input)
222
240
  .filter((entry) => Array.isArray(entry[1]))
223
241
  .map((entry) => ({
@@ -237,6 +255,17 @@ class ConfigFile {
237
255
  }));
238
256
  const egressUrls = getDomainsFromPermissions(otherEgress);
239
257
  const fetchUrls = fetchEgress ? getDomainsFromPermissions(fetchEgress, 'fetch') : [];
258
+ const existingHostnames = new Set([...egressUrls, ...fetchUrls].flatMap(({ domains }) => domains ?? []));
259
+ const additionalRemoteHostnames = remoteBaseUrlHostnames.filter((hostname) => !existingHostnames.has(hostname));
260
+ if (additionalRemoteHostnames.length > 0) {
261
+ const existingFetchBackend = fetchUrls.find(({ type }) => type === 'fetch_backend');
262
+ if (existingFetchBackend) {
263
+ existingFetchBackend.domains = [...(existingFetchBackend.domains ?? []), ...additionalRemoteHostnames];
264
+ }
265
+ else {
266
+ fetchUrls.push({ type: 'fetch_backend', domains: additionalRemoteHostnames });
267
+ }
268
+ }
240
269
  return [...egressUrls, ...fetchUrls];
241
270
  }
242
271
  async getAuthProviders() {