@forge/cli-shared 8.24.0-next.7 → 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,5 +1,26 @@
1
1
  # @forge/cli-shared
2
2
 
3
+ ## 8.24.0-next.7-experimental-04898b4
4
+
5
+ ### Minor Changes
6
+
7
+ - 2415638: Prerelease of forge module add command
8
+
9
+ ### Patch Changes
10
+
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)
14
+ - Updated dependencies [ccdcfc3]
15
+ - Updated dependencies [8197e66]
16
+ - Updated dependencies [723fab8]
17
+ - Updated dependencies [4493006]
18
+ - Updated dependencies [5beb8ad]
19
+ - Updated dependencies [f1f11f0]
20
+ - Updated dependencies [b7b1f36]
21
+ - Updated dependencies [9f3add6]
22
+ - @forge/manifest@12.9.0-next.5-experimental-04898b4
23
+
3
24
  ## 8.24.0-next.7
4
25
 
5
26
  ### Minor Changes
@@ -15,11 +15,12 @@ export interface ModuleTemplateMeta {
15
15
  category?: string;
16
16
  uiFramework?: UIFramework;
17
17
  moduleKey: string;
18
- dependencies?: Record<string, string> | string[];
19
- devDependencies?: Record<string, string> | string[];
18
+ manifestPath?: string;
19
+ dependencies?: Record<string, string>;
20
+ devDependencies?: Record<string, string>;
20
21
  frontend?: {
21
- dependencies?: string[];
22
- devDependencies?: string[];
22
+ dependencies?: Record<string, string>;
23
+ devDependencies?: Record<string, string>;
23
24
  };
24
25
  customUiDependencies?: string[];
25
26
  customUiDevDependencies?: string[];
@@ -33,11 +34,11 @@ export interface ModuleTemplateMeta {
33
34
  }>;
34
35
  variants?: Record<UIFramework, {
35
36
  manifestPath?: string;
36
- dependencies?: Record<string, string> | string[];
37
- devDependencies?: Record<string, string> | string[];
37
+ dependencies?: Record<string, string>;
38
+ devDependencies?: Record<string, string>;
38
39
  frontend?: {
39
- dependencies?: string[];
40
- devDependencies?: string[];
40
+ dependencies?: Record<string, string>;
41
+ devDependencies?: Record<string, string>;
41
42
  };
42
43
  variables?: TemplateVariableDef[];
43
44
  fileOperations?: Array<{
@@ -56,7 +57,9 @@ export declare class TemplateModuleServices {
56
57
  getAvailableModules(product: string): Promise<ModuleTemplateMeta[]>;
57
58
  private fetchModuleTemplates;
58
59
  fetchManifestFragment(manifestPath: string): Promise<string>;
59
- downloadModuleAssets(template: ModuleTemplateMeta, uiFramework?: UIFramework): Promise<ModuleTemplateMeta>;
60
+ applyVariant(template: ModuleTemplateMeta, uiFramework?: UIFramework): ModuleTemplateMeta;
61
+ prepareModuleMetadata(template: ModuleTemplateMeta, uiFramework?: UIFramework): Promise<ModuleTemplateMeta>;
62
+ downloadModuleBundle(template: ModuleTemplateMeta, uiFramework?: UIFramework): Promise<void>;
60
63
  cleanupCache(cacheDir: string): void;
61
64
  }
62
65
  //# sourceMappingURL=template-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-module.d.ts","sourceRoot":"","sources":["../../src/apps/template-module.ts"],"names":[],"mappings":"AAUA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,oBAAY,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IACpD,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IAEF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IAEH,QAAQ,CAAC,EAAE,MAAM,CACf,WAAW,EACX;QACE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;QACjD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;QACpD,QAAQ,CAAC,EAAE;YACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5B,CAAC;QACF,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAClC,cAAc,CAAC,EAAE,KAAK,CAAC;YACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;YAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CACF,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,cAAc,CAAqC;gBAE/C,OAAO,CAAC,EAAE,MAAM;IAIf,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAOlE,oBAAoB;IAsBrB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa5D,oBAAoB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,kBAAkB,CAAC;IAkCvB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAO5C"}
1
+ {"version":3,"file":"template-module.d.ts","sourceRoot":"","sources":["../../src/apps/template-module.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ const path_1 = tslib_1.__importDefault(require("path"));
7
7
  const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
8
8
  const os_1 = tslib_1.__importDefault(require("os"));
9
9
  const url_1 = require("url");
10
+ const adm_zip_1 = tslib_1.__importDefault(require("adm-zip"));
10
11
  const text_1 = require("../ui/text");
11
12
  const BIFROST_BASE_URL = 'https://forge-templates-bifrost.ddev.frontend.public.atl-paas.net/assets/';
12
13
  const MODULE_INDEX_FILE = 'template-modules.json';
@@ -52,41 +53,77 @@ class TemplateModuleServices {
52
53
  }
53
54
  return await res.text();
54
55
  }
55
- async downloadModuleAssets(template, uiFramework) {
56
- let manifestFragment;
57
- let variantData;
58
- if (uiFramework) {
59
- variantData = template.variants?.[uiFramework];
60
- if (!variantData)
61
- throw new Error(text_1.Text.module.add.errorInvalidUIFramework(uiFramework, template.moduleKey));
62
- }
63
- if (variantData?.manifestPath) {
64
- manifestFragment = await this.fetchManifestFragment(variantData.manifestPath);
65
- }
66
- const cacheDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'forge-module-'));
67
- if (manifestFragment) {
68
- fs_1.default.writeFileSync(path_1.default.join(cacheDir, 'manifest-fragment.yml'), manifestFragment);
56
+ applyVariant(template, uiFramework) {
57
+ if (!uiFramework)
58
+ return { ...template };
59
+ const variantData = template.variants?.[uiFramework];
60
+ if (!variantData) {
61
+ throw new Error(text_1.Text.module.add.errorInvalidUIFramework(uiFramework, template.moduleKey));
69
62
  }
70
63
  return {
71
64
  ...template,
72
- ...(variantData
73
- ? {
74
- uiFramework,
75
- dependencies: variantData.dependencies ?? template.dependencies,
76
- devDependencies: variantData.devDependencies ?? template.devDependencies,
77
- frontend: variantData.frontend ?? template.frontend,
78
- variables: variantData.variables ?? template.variables,
79
- fileOperations: variantData.fileOperations ?? template.fileOperations
80
- }
81
- : {}),
82
- cacheDir
65
+ uiFramework,
66
+ manifestPath: variantData.manifestPath ?? template.manifestPath,
67
+ dependencies: variantData.dependencies ?? template.dependencies,
68
+ devDependencies: variantData.devDependencies ?? template.devDependencies,
69
+ frontend: variantData.frontend ?? template.frontend,
70
+ variables: variantData.variables ?? template.variables,
71
+ fileOperations: variantData.fileOperations ?? template.fileOperations
83
72
  };
84
73
  }
74
+ async prepareModuleMetadata(template, uiFramework) {
75
+ const resolved = this.applyVariant(template, uiFramework);
76
+ const cacheDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'forge-module-'));
77
+ if (resolved.manifestPath) {
78
+ const manifestFragment = await this.fetchManifestFragment(resolved.manifestPath);
79
+ fs_1.default.writeFileSync(path_1.default.join(cacheDir, 'manifest-fragment.yml'), manifestFragment);
80
+ }
81
+ return { ...resolved, cacheDir };
82
+ }
83
+ async downloadModuleBundle(template, uiFramework) {
84
+ if (!template.fileOperations?.length) {
85
+ return;
86
+ }
87
+ if (!template.cacheDir) {
88
+ throw new Error(text_1.Text.module.add.errorCacheDirMissing(template.moduleKey));
89
+ }
90
+ const rel = uiFramework ? `${template.moduleKey}/${uiFramework}/bundle.zip` : `${template.moduleKey}/bundle.zip`;
91
+ const url = `${this.baseUrl}${rel}`;
92
+ let res;
93
+ try {
94
+ res = await (0, node_fetch_1.default)(url);
95
+ }
96
+ catch (err) {
97
+ const message = err instanceof Error ? err.message : String(err);
98
+ throw new Error(text_1.Text.module.add.errorFailedToDownloadBundle(template.moduleKey, message), { cause: err });
99
+ }
100
+ if (!res.ok) {
101
+ throw new BifrostFetchError(`${text_1.Text.module.errors.bifrostZipFetchFailed(template.moduleKey, res.status, res.statusText)} (last URL: ${url})`);
102
+ }
103
+ const arrayBuffer = await res.arrayBuffer();
104
+ const zipPath = path_1.default.join(template.cacheDir, 'bundle.zip');
105
+ fs_1.default.writeFileSync(zipPath, Buffer.from(arrayBuffer));
106
+ try {
107
+ new adm_zip_1.default(zipPath).extractAllTo(template.cacheDir, true);
108
+ }
109
+ catch (err) {
110
+ throw new BifrostFetchError(text_1.Text.module.add.errorZipExtractionFailed(template.moduleKey, err.message));
111
+ }
112
+ finally {
113
+ try {
114
+ fs_1.default.rmSync(zipPath, { force: true });
115
+ }
116
+ catch (cleanupErr) {
117
+ console.warn(`${text_1.Text.module.add.errorZipCleanupFailed(template.moduleKey)}`);
118
+ }
119
+ }
120
+ }
85
121
  cleanupCache(cacheDir) {
86
122
  try {
87
123
  fs_1.default.rmSync(cacheDir, { recursive: true, force: true });
88
124
  }
89
125
  catch {
126
+ throw new Error(text_1.Text.module.add.errorCacheCleanupFailed(cacheDir));
90
127
  }
91
128
  }
92
129
  }
@@ -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() {
@@ -50941,6 +50941,7 @@ export declare type GraphIntegrationMcpServerNode = Node & {
50941
50941
  displayName: Scalars['String']['output'];
50942
50942
  iconUrl?: Maybe<Scalars['String']['output']>;
50943
50943
  id: Scalars['ID']['output'];
50944
+ productAri?: Maybe<Scalars['String']['output']>;
50944
50945
  tools?: Maybe<GraphIntegrationMcpToolNodeConnection>;
50945
50946
  };
50946
50947
  export declare type GraphIntegrationMcpServerNodeToolsArgs = {
@@ -51272,6 +51273,7 @@ export declare type GraphIntegrationUpdateSkillInput = {
51272
51273
  description?: InputMaybe<Scalars['String']['input']>;
51273
51274
  displayName?: InputMaybe<Scalars['String']['input']>;
51274
51275
  instructions?: InputMaybe<Scalars['String']['input']>;
51276
+ name?: InputMaybe<Scalars['String']['input']>;
51275
51277
  skillAri: Scalars['ID']['input'];
51276
51278
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
51277
51279
  tools?: InputMaybe<Array<GraphIntegrationSkillToolInput>>;
@@ -114271,6 +114273,7 @@ export declare type JiraAgentSessionCreateEvent = {
114271
114273
  __typename?: 'JiraAgentSessionCreateEvent';
114272
114274
  agent?: Maybe<JiraAgent>;
114273
114275
  conversationId: Scalars['String']['output'];
114276
+ triggeredBy?: Maybe<User>;
114274
114277
  };
114275
114278
  export declare type JiraAgenticUser = JiraActor & {
114276
114279
  __typename?: 'JiraAgenticUser';