@forge/cli-shared 9.3.0-next.11-experimental-4b981ef → 9.3.0-next.13

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.
@@ -2,9 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpFileUploader = exports.UploadFileEmptyError = exports.UploadFileNotFoundError = exports.CannotUploadFileError = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const http_1 = tslib_1.__importDefault(require("http"));
6
- const https_1 = tslib_1.__importDefault(require("https"));
7
- const url_1 = require("url");
5
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
8
6
  const ui_1 = require("../ui");
9
7
  class CannotUploadFileError extends Error {
10
8
  }
@@ -15,7 +13,6 @@ exports.UploadFileNotFoundError = UploadFileNotFoundError;
15
13
  class UploadFileEmptyError extends Error {
16
14
  }
17
15
  exports.UploadFileEmptyError = UploadFileEmptyError;
18
- const NODE_REQUEST_TIMEOUT_MS = 30_000;
19
16
  const validateFileContents = (filePath, fileContents) => {
20
17
  if (!fileContents) {
21
18
  throw new UploadFileNotFoundError(ui_1.Text.upload.error.notFound(filePath));
@@ -30,33 +27,6 @@ const checkResponse = async (response) => {
30
27
  throw new CannotUploadFileError(ui_1.Text.upload.error.status(response.status, await response.text()));
31
28
  }
32
29
  };
33
- const uploadWithNodeRequest = (url, headers, fileContents) => {
34
- return new Promise((resolve, reject) => {
35
- const parsedUrl = new url_1.URL(url);
36
- const transport = parsedUrl.protocol === 'https:' ? https_1.default : http_1.default;
37
- const request = transport.request(parsedUrl, {
38
- method: 'PUT',
39
- headers
40
- }, (response) => {
41
- const chunks = [];
42
- response.on('data', (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
43
- response.on('end', () => {
44
- const body = Buffer.concat(chunks).toString('utf-8');
45
- resolve(new Response(body, {
46
- status: response.statusCode ?? 500,
47
- statusText: response.statusMessage,
48
- headers: response.headers
49
- }));
50
- });
51
- });
52
- request.setTimeout(NODE_REQUEST_TIMEOUT_MS, () => {
53
- request.destroy(new Error(`Request timed out after ${NODE_REQUEST_TIMEOUT_MS}ms`));
54
- });
55
- request.on('error', reject);
56
- request.write(fileContents);
57
- request.end();
58
- });
59
- };
60
30
  class HttpFileUploader {
61
31
  fileSystem;
62
32
  constructor(fileSystem) {
@@ -65,11 +35,14 @@ class HttpFileUploader {
65
35
  async uploadFromPath(url, filePath) {
66
36
  const fileContents = this.fileSystem.readBinaryFile(filePath);
67
37
  const validFileContents = validateFileContents(filePath, fileContents);
68
- const headers = {
69
- 'Content-Type': 'application/zip',
70
- 'Content-Length': validFileContents.length.toString()
71
- };
72
- const response = await uploadWithNodeRequest(url, headers, validFileContents);
38
+ const response = await (0, node_fetch_1.default)(url, {
39
+ method: 'PUT',
40
+ headers: {
41
+ 'Content-Type': 'application/zip',
42
+ 'Content-Length': validFileContents.length.toString()
43
+ },
44
+ body: validFileContents
45
+ });
73
46
  await checkResponse(response);
74
47
  }
75
48
  }
@@ -1,3 +1,4 @@
1
+ import { Response } from 'node-fetch';
1
2
  import { URL } from 'url';
2
3
  export declare class InvalidSiteError extends Error {
3
4
  constructor(url: URL);
@@ -1 +1 @@
1
- {"version":3,"file":"global-edge-http-client.d.ts","sourceRoot":"","sources":["../../src/http-client/global-edge-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI1B,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,GAAG,EAAE,GAAG;CAGrB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,GAAG;CAGrB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC/C,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,KAAK;IAEzB,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBnD,OAAO,CAAC,QAAQ;CAIjB"}
1
+ {"version":3,"file":"global-edge-http-client.d.ts","sourceRoot":"","sources":["../../src/http-client/global-edge-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI1B,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,GAAG,EAAE,GAAG;CAGrB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,GAAG,EAAE,GAAG;CAGrB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC/C,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,KAAK;IAEzB,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBnD,OAAO,CAAC,QAAQ;CAIjB"}
@@ -1,4 +1,3 @@
1
- type HeadersWithGet = Pick<Headers, 'get'>;
2
- export declare function getAtlassianTraceId(headers: HeadersWithGet): string | undefined;
3
- export {};
1
+ import { Headers } from 'node-fetch';
2
+ export declare function getAtlassianTraceId(headers: Headers): string | undefined;
4
3
  //# sourceMappingURL=trace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/http-client/trace.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAE/E"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/http-client/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAExE"}
@@ -1 +1 @@
1
- {"version":3,"file":"statsig-service.d.ts","sourceRoot":"","sources":["../../src/service/statsig-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statsig-service.d.ts","sourceRoot":"","sources":["../../src/service/statsig-service.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StatsigService = exports.StatsigReader = void 0;
4
4
  exports.cacheStatsigResult = cacheStatsigResult;
5
+ const tslib_1 = require("tslib");
6
+ const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
5
7
  const index_1 = require("../index");
6
8
  class StatsigReader {
7
9
  async testForgeCliTestGate() {
@@ -129,7 +131,7 @@ class StatsigService extends StatsigReader {
129
131
  const baseURL = this.getEnvironmentFn(BASE_FEATURE_FLAG_SERVICE_URL);
130
132
  const apiKey = this.getEnvironmentFn(STATSIG_API_KEYS);
131
133
  const context = await this.context();
132
- const response = await fetch(`${baseURL}/frontend/gates`, {
134
+ const response = await (0, node_fetch_1.default)(`${baseURL}/frontend/gates`, {
133
135
  headers: {
134
136
  'x-api-key': apiKey,
135
137
  'Content-Type': 'application/json'
@@ -161,7 +163,7 @@ class StatsigService extends StatsigReader {
161
163
  const baseURL = this.getEnvironmentFn(BASE_FEATURE_FLAG_SERVICE_URL);
162
164
  const apiKey = this.getEnvironmentFn(STATSIG_API_KEYS);
163
165
  const context = await this.context();
164
- const response = await fetch(`${baseURL}/configurations`, {
166
+ const response = await (0, node_fetch_1.default)(`${baseURL}/configurations`, {
165
167
  headers: {
166
168
  'x-api-key': apiKey,
167
169
  'Content-Type': 'application/json'
@@ -1 +1 @@
1
- {"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/shared/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG;IACrF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,MAAM,WAAW,kBAAkB;IACjC,aAAa,IAAI,cAAc,CAAC;CACjC;AA8CD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAW3C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,GAAG,cAAc,CAOzD;AAED,qBAAa,SAAU,SAAQ,KAAM,YAAW,kBAAkB;IAE9D,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;gBAA9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE,MAAM;IAKX,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,SAAU,SAAQ,SAAS;gBAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;CAG7D;AAUD,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,OAAO,KAAK,EACZ,OAAO,MAAM,GAAG,IAAI,EACpB,wBAAwB,qBAAqB,KAC5C,OAAO,CAAC,KAAK,CAmCf,CAAC;AAOF,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAK1C,CAAC;AASF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,CAIrG;AAMD,eAAO,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,KAIhE,CAAC;AAEF,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,cAAe,SAAQ,SAAS;CAAG;AAEhD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,qBAAa,uBAAwB,SAAQ,SAAS;CAAG;AAEzD,qBAAa,aAAc,SAAQ,SAAS;IAGxC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAD3B,OAAO,CAAC,EAAE,MAAM,EACC,UAAU,GAAE,OAAe;IAKvC,WAAW;CAGnB;AAUD,qBAAa,wBAAyB,SAAQ,SAAS;gBAMzC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAUD,qBAAa,mBAAoB,SAAQ,SAAS;gBAMpC,OAAO,CAAC,EAAE,MAAM;CAG7B"}
1
+ {"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/shared/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG;IACrF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAKF,MAAM,WAAW,kBAAkB;IACjC,aAAa,IAAI,cAAc,CAAC;CACjC;AAMD,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAe3C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,GAAG,cAAc,CAOzD;AAED,qBAAa,SAAU,SAAQ,KAAM,YAAW,kBAAkB;IAE9D,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;gBAA9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE,MAAM;IAKX,aAAa,IAAI,cAAc;IAM/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,SAAU,SAAQ,SAAS;gBAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;CAG7D;AAUD,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,OAAO,KAAK,EACZ,OAAO,MAAM,GAAG,IAAI,EACpB,wBAAwB,qBAAqB,KAC5C,OAAO,CAAC,KAAK,CAmCf,CAAC;AAOF,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAK1C,CAAC;AASF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,CAIrG;AAMD,eAAO,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,KAIhE,CAAC;AAEF,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,cAAe,SAAQ,SAAS;CAAG;AAEhD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,qBAAa,uBAAwB,SAAQ,SAAS;CAAG;AAEzD,qBAAa,aAAc,SAAQ,SAAS;IAGxC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAD3B,OAAO,CAAC,EAAE,MAAM,EACC,UAAU,GAAE,OAAe;IAKvC,WAAW;CAGnB;AAUD,qBAAa,wBAAyB,SAAQ,SAAS;gBAMzC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAUD,qBAAa,mBAAoB,SAAQ,SAAS;gBAMpC,OAAO,CAAC,EAAE,MAAM;CAG7B"}
@@ -11,40 +11,14 @@ const assistant_cli_1 = require("./assistant-cli");
11
11
  function isErrorWithAnalytics(e) {
12
12
  return e.getAttributes !== undefined;
13
13
  }
14
- const NETWORK_CONNECTIVITY_ERROR_CODES = new Set([
15
- 'ENOTFOUND',
16
- 'ECONNRESET',
17
- 'ECONNREFUSED',
18
- 'ECONNABORTED',
19
- 'ENETUNREACH',
20
- 'EHOSTUNREACH',
21
- 'EAI_AGAIN',
22
- 'ETIMEDOUT',
23
- 'UND_ERR_CONNECT_TIMEOUT',
24
- 'UND_ERR_HEADERS_TIMEOUT',
25
- 'UND_ERR_SOCKET'
26
- ]);
27
- function isLikelyNetworkError(e) {
28
- if (!(e instanceof Error)) {
29
- return false;
30
- }
31
- if (e instanceof TypeError && e.message === 'fetch failed') {
32
- const causeCode = e.cause && typeof e.cause === 'object' && typeof e.cause.code === 'string'
33
- ? e.cause.code
34
- : undefined;
35
- return causeCode ? NETWORK_CONNECTIVITY_ERROR_CODES.has(causeCode) : false;
36
- }
37
- if (e.constructor?.name === 'FetchError' && e.type === 'system') {
38
- return true;
39
- }
40
- return false;
41
- }
42
14
  function isUserError(e) {
43
15
  if (isErrorWithAnalytics(e)) {
44
16
  return e.getAttributes().isUserError ?? false;
45
17
  }
46
- if (isLikelyNetworkError(e)) {
47
- return true;
18
+ if (e.constructor?.name === 'FetchError') {
19
+ if (e.type === 'system') {
20
+ return true;
21
+ }
48
22
  }
49
23
  return false;
50
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAYvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,GAAU,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,oCAgFzG,CAAC;AAuFF,eAAO,MAAM,uBAAuB,GAAU,aAAa,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,GAAU,uBAAuB,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,kBAc9G,CAAC;AAOF,eAAO,MAAM,qBAAqB,GAChC,uBAAuB,MAAM,EAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AA8LF,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,QAAQ,MAAM,EACd,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,GAAU,cAAc,YAAY,kBAW3E,CAAC"}
1
+ {"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAgCvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,GAAU,UAAU,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,oCAgFzG,CAAC;AAsFF,eAAO,MAAM,uBAAuB,GAAU,aAAa,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,GAAU,uBAAuB,MAAM,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM,kBA8B9G,CAAC;AA6BF,eAAO,MAAM,qBAAqB,GAChC,uBAAuB,MAAM,EAC7B,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AA2LF,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,QAAQ,MAAM,EACd,eAAe,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,GAAU,cAAc,YAAY,kBAW3E,CAAC"}
@@ -15,6 +15,19 @@ exports.PROXY_SIDECAR_VOLUME_DIR = '/forge/container';
15
15
  exports.CONTAINER_SERVICE_ASSETS = '.container-service-assets';
16
16
  exports.K8S_AUTH_TOKEN_FILENAME = 'local-account';
17
17
  const PROXY_SIDECAR_SERVICE_NAME = 'proxy-sidecar';
18
+ const PROXY_SIDECAR_IMAGE_PATH = 'forge-platform/proxy-sidecar:latest';
19
+ const PROXY_SIDECAR_REGISTRIES = {
20
+ portable: {
21
+ production: 'forge-registry.services.atlassian.com',
22
+ staging: 'forge-registry.stg.services.atlassian.com'
23
+ },
24
+ ecr: {
25
+ production: 'forge-ecr.services.atlassian.com',
26
+ staging: 'forge-ecr.stg.services.atlassian.com'
27
+ }
28
+ };
29
+ const isStagingEnvironment = () => process.env.FORGE_GRAPHQL_GATEWAY?.startsWith('https://api-private.stg.atlassian.com/graphql') ?? false;
30
+ const getProxySidecarRegistry = (registryType) => PROXY_SIDECAR_REGISTRIES[registryType][isStagingEnvironment() ? 'staging' : 'production'];
18
31
  const LIFECYCLE_PATTERNS = [
19
32
  /Container .* (Starting|Started|Stopping|Stopped|Creating|Created|Recreated)/,
20
33
  /Network .* (Creating|Created|Removing|Removed)/,
@@ -134,11 +147,10 @@ const adjustFilePath = (filePath) => {
134
147
  const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId, serviceIndex, healthEndpointPath) => {
135
148
  let fopBaseUrl = 'https://forge-outbound-proxy.services.atlassian.com';
136
149
  let jwksUrl = 'https://forge.cdn.prod.atlassian-dev.net/.well-known/jwks.json';
137
- let proxySidecarImage = 'forge-ecr.services.atlassian.com/forge-platform/proxy-sidecar:latest';
138
- if (process.env.FORGE_GRAPHQL_GATEWAY?.startsWith('https://api-private.stg.atlassian.com/graphql')) {
150
+ const proxySidecarRegistry = getProxySidecarRegistry('portable');
151
+ if (isStagingEnvironment()) {
139
152
  fopBaseUrl = 'https://forge-outbound-proxy.stg.services.atlassian.com';
140
153
  jwksUrl = 'https://forge.cdn.stg.atlassian-dev.net/.well-known/jwks.json';
141
- proxySidecarImage = 'forge-ecr.stg.services.atlassian.com/forge-platform/proxy-sidecar:latest';
142
154
  }
143
155
  let appIdShort = appId;
144
156
  if (appId.startsWith('ari:cloud:ecosystem::app/')) {
@@ -146,7 +158,7 @@ const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, env
146
158
  }
147
159
  return {
148
160
  [PROXY_SIDECAR_SERVICE_NAME]: {
149
- image: proxySidecarImage,
161
+ image: `${proxySidecarRegistry}/${PROXY_SIDECAR_IMAGE_PATH}`,
150
162
  container_name: getProxySidecarContainerName(serviceKey),
151
163
  environment: [
152
164
  `SERVICE_URL=http://${containerKeys[0]}:8080`,
@@ -190,19 +202,44 @@ const deleteDockerComposeFile = async (composeFile) => {
190
202
  };
191
203
  exports.deleteDockerComposeFile = deleteDockerComposeFile;
192
204
  const startDockerComposeStack = async (dockerComposeFilePath, serviceKey, logger) => {
205
+ const pullOptions = {
206
+ cwd: path.dirname(dockerComposeFilePath),
207
+ log: true,
208
+ config: dockerComposeFilePath
209
+ };
193
210
  try {
194
- await (0, docker_compose_1.pullOne)('proxy-sidecar', {
195
- cwd: path.dirname(dockerComposeFilePath),
196
- log: true,
197
- config: dockerComposeFilePath
198
- });
211
+ await (0, docker_compose_1.pullOne)(PROXY_SIDECAR_SERVICE_NAME, pullOptions);
199
212
  }
200
- catch (err) {
201
- throw new DockerUnableToPullProxySidecarImage(err);
213
+ catch (portableRegistryError) {
214
+ logger.warn('Unable to pull the proxy sidecar image. Retrying from an alternate source...');
215
+ useEcrProxySidecarImage(dockerComposeFilePath);
216
+ try {
217
+ await (0, docker_compose_1.pullOne)(PROXY_SIDECAR_SERVICE_NAME, pullOptions);
218
+ }
219
+ catch (ecrRegistryError) {
220
+ throw new DockerUnableToPullProxySidecarImage(new Error(`Initial pull error: ${getDockerComposeErrorMessage(portableRegistryError)}. Retry error: ${getDockerComposeErrorMessage(ecrRegistryError)}`));
221
+ }
202
222
  }
203
223
  await waitForContainersToStart(dockerComposeFilePath, serviceKey, logger);
204
224
  };
205
225
  exports.startDockerComposeStack = startDockerComposeStack;
226
+ const getDockerComposeErrorMessage = (error) => {
227
+ if (error && typeof error === 'object') {
228
+ const dockerComposeError = error;
229
+ return dockerComposeError.err || dockerComposeError.out || dockerComposeError.message || 'Unknown Error Occurred.';
230
+ }
231
+ return error != null ? String(error) : 'Unknown Error Occurred.';
232
+ };
233
+ const useEcrProxySidecarImage = (dockerComposeFilePath) => {
234
+ const composeConfig = yaml.parse(fs.readFileSync(dockerComposeFilePath, 'utf8'));
235
+ const proxySidecar = composeConfig?.services?.[PROXY_SIDECAR_SERVICE_NAME];
236
+ if (!proxySidecar) {
237
+ throw new Error(`The Docker Compose file does not contain the ${PROXY_SIDECAR_SERVICE_NAME} service.`);
238
+ }
239
+ const ecrRegistry = getProxySidecarRegistry('ecr');
240
+ proxySidecar.image = `${ecrRegistry}/${PROXY_SIDECAR_IMAGE_PATH}`;
241
+ fs.writeFileSync(dockerComposeFilePath, yaml.stringify(composeConfig));
242
+ };
206
243
  const determineComposeFlags = async (dockerComposeFilePath, serviceKey, logger) => {
207
244
  const flags = ['--build', '--quiet-pull'];
208
245
  try {
@@ -318,8 +355,7 @@ const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logge
318
355
  callback: logFilter
319
356
  }).catch((error) => {
320
357
  clearTimeout(startupTimer);
321
- const errorMessage = error?.err || error?.out || error?.message || 'Unknown Error Occurred.';
322
- reject(new DockerUnableToStartError(new Error(errorMessage)));
358
+ reject(new DockerUnableToStartError(new Error(getDockerComposeErrorMessage(error))));
323
359
  });
324
360
  setTimeout(async () => {
325
361
  if (containersStarted)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/cli-shared",
3
- "version": "9.3.0-next.11-experimental-4b981ef",
3
+ "version": "9.3.0-next.13",
4
4
  "description": "Common functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -12,7 +12,7 @@
12
12
  "generate-graphql-types": "graphql-codegen --config src/graphql/codegen.yml"
13
13
  },
14
14
  "dependencies": {
15
- "@forge/manifest": "13.3.0-next.7-experimental-4b981ef",
15
+ "@forge/manifest": "13.3.0-next.8",
16
16
  "@forge/util": "3.0.0",
17
17
  "@forge/i18n": "1.0.0",
18
18
  "@sentry/node": "7.106.0",
@@ -39,6 +39,7 @@
39
39
  "inquirer-autocomplete-prompt": "^2.0.1",
40
40
  "io-ts": "^2.2.22",
41
41
  "keytar": "^7.9.0",
42
+ "node-fetch": "2.7.0",
42
43
  "ora": "^5.4.1",
43
44
  "recursive-readdir": "^2.2.3",
44
45
  "semver": "^7.6.0",
@@ -65,6 +66,7 @@
65
66
  "@types/inquirer-autocomplete-prompt": "^1.3.5",
66
67
  "@types/jest": "^29.5.14",
67
68
  "@types/node": "20.19.1",
69
+ "@types/node-fetch": "^2.6.12",
68
70
  "@types/recursive-readdir": "^2.2.4",
69
71
  "@types/tmp": "^0.2.6",
70
72
  "jest-matcher-specific-error": "^1.0.0",