@forge/tunnel 5.7.3-next.1 → 5.7.3-next.3

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,18 @@
1
1
  # @forge/tunnel
2
2
 
3
+ ## 5.7.3-next.3
4
+
5
+ ### Patch Changes
6
+
7
+ - @forge/bundler@4.20.4-next.2
8
+ - @forge/cli-shared@6.5.1-next.1
9
+
10
+ ## 5.7.3-next.2
11
+
12
+ ### Patch Changes
13
+
14
+ - 7515152: Tunnel error handling
15
+
3
16
  ## 5.7.3-next.1
4
17
 
5
18
  ### Patch Changes
@@ -1,6 +1,17 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import { URL } from 'url';
3
- import { GraphQLClient } from '@forge/cli-shared';
3
+ import { GraphQLClient, GraphQlMutationError, ErrorWithAnalytics, ErrorAnalytics } from '@forge/cli-shared';
4
+ export declare class RegisterAppTunnelError extends GraphQlMutationError implements ErrorWithAnalytics {
5
+ private static userErrorCodes;
6
+ private errorCode?;
7
+ constructor(message: string, { requestId, code, statusCode }: {
8
+ requestId: string | undefined;
9
+ code?: string;
10
+ statusCode?: number;
11
+ });
12
+ getAttributes(): ErrorAnalytics;
13
+ isUserError(): boolean;
14
+ }
4
15
  export interface TunnelDefinitions {
5
16
  faasTunnelUrl?: URL;
6
17
  customUI?: {
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-graphql-client.d.ts","sourceRoot":"","sources":["../../src/graphql/tunnel-graphql-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EACL,aAAa,EAMd,MAAM,mBAAmB,CAAC;AA8B3B,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,GAAG,CAAC;KAChB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACtC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,qBAAa,mBAAoB,YAAW,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8CxE,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IA0C/B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsC1E"}
1
+ {"version":3,"file":"tunnel-graphql-client.d.ts","sourceRoot":"","sources":["../../src/graphql/tunnel-graphql-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EACL,aAAa,EAGb,oBAAoB,EAGpB,kBAAkB,EAClB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAY3B,qBAAa,sBAAuB,SAAQ,oBAAqB,YAAW,kBAAkB;IAC5F,OAAO,CAAC,MAAM,CAAC,cAAc,CAAqD;IAClF,OAAO,CAAC,SAAS,CAAC,CAAS;gBAGzB,OAAO,EAAE,MAAM,EACf,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAMjG,aAAa,IAAI,cAAc;IAK/B,WAAW,IAAI,OAAO;CAG9B;AAWD,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,GAAG,CAAC;KAChB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzE,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACtC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,qBAAa,mBAAoB,YAAW,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAEnD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8CxE,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IA0C/B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsC1E"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TunnelGraphqlClient = void 0;
3
+ exports.TunnelGraphqlClient = exports.RegisterAppTunnelError = void 0;
4
4
  const cli_shared_1 = require("@forge/cli-shared");
5
5
  const cli_shared_2 = require("@forge/cli-shared");
6
6
  class CreateAppTunnelError extends cli_shared_1.GraphQlMutationError {
@@ -9,10 +9,22 @@ class CreateAppTunnelError extends cli_shared_1.GraphQlMutationError {
9
9
  }
10
10
  }
11
11
  class RegisterAppTunnelError extends cli_shared_1.GraphQlMutationError {
12
+ static userErrorCodes = ['ENVIRONMENT_MISMATCH', 'ENVIRONMENT_NOT_FOUND'];
13
+ errorCode;
12
14
  constructor(message, { requestId, code, statusCode }) {
13
15
  super(cli_shared_2.Text.tunnel.error.create(message), { requestId, code, statusCode });
16
+ this.errorCode = code;
17
+ }
18
+ getAttributes() {
19
+ return {
20
+ isUserError: this.isUserError()
21
+ };
22
+ }
23
+ isUserError() {
24
+ return typeof this.errorCode === 'string' && RegisterAppTunnelError.userErrorCodes.includes(this.errorCode);
14
25
  }
15
26
  }
27
+ exports.RegisterAppTunnelError = RegisterAppTunnelError;
16
28
  class DeleteAppTunnelError extends cli_shared_1.GraphQlMutationError {
17
29
  constructor(message, { requestId, code, statusCode }) {
18
30
  super(cli_shared_2.Text.tunnel.error.delete(message), { requestId, code, statusCode });
@@ -19,6 +19,7 @@ export declare class CloudflareCreateTunnelService implements CreateTunnelServic
19
19
  private readonly logger;
20
20
  private stopFunction;
21
21
  constructor(logger: Logger);
22
+ private handleTunnleEstablishError;
22
23
  establishTunnel({ port, id, token, tunnelUrl }: TunnelConfig): Promise<URL>;
23
24
  closeTunnel(): Promise<void>;
24
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-tunnel-service.d.ts","sourceRoot":"","sources":["../../src/services/create-tunnel-service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAE5D,oBAAY,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,sBAAsB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,6BAA8B,YAAW,mBAAmB;IAG3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,YAAY,CAA0E;gBAEjE,MAAM,EAAE,MAAM;IAE9B,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IA0C3E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ1C"}
1
+ {"version":3,"file":"create-tunnel-service.d.ts","sourceRoot":"","sources":["../../src/services/create-tunnel-service.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAEvE,oBAAY,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,sBAAsB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,6BAA8B,YAAW,mBAAmB;IAG3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,YAAY,CAA0E;gBAEjE,MAAM,EAAE,MAAM;IAE3C,OAAO,CAAC,0BAA0B;IAgBrB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IA8C3E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ1C"}
@@ -13,6 +13,18 @@ class CloudflareCreateTunnelService {
13
13
  constructor(logger) {
14
14
  this.logger = logger;
15
15
  }
16
+ handleTunnleEstablishError(e) {
17
+ const UNKNOWN_SYS_ERROR = 'Unknown system error -86';
18
+ const userSysErrors = [UNKNOWN_SYS_ERROR, 'EPERM'];
19
+ if (userSysErrors.some((error) => e.message.includes(error))) {
20
+ let errorMessage = e.message;
21
+ if (e.message.includes(UNKNOWN_SYS_ERROR)) {
22
+ errorMessage += ': Running `softwareupdate --install-rosetta` may help fix the problem';
23
+ }
24
+ throw new cli_shared_1.UserError(undefined, errorMessage);
25
+ }
26
+ throw e;
27
+ }
16
28
  async establishTunnel({ port, id, token, tunnelUrl }) {
17
29
  if (!id || !token || !tunnelUrl) {
18
30
  throw new CloudflareError(undefined, 'Missing configuration to create tunnel');
@@ -25,22 +37,27 @@ class CloudflareCreateTunnelService {
25
37
  };
26
38
  options[id] = null;
27
39
  process.env['TUNNEL_LOGLEVEL'] = 'debug';
28
- const { connections, stop, child } = (0, cloudflared_1.tunnel)(options);
29
- child.stdout?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
30
- child.stderr?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
31
- child.on('error', (err) => {
32
- this.logger.error(err);
33
- throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredError);
34
- });
35
- child.on('exit', (code) => {
36
- if (code !== 0 && code !== null) {
37
- throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredExit(code));
38
- }
39
- });
40
- await Promise.all(connections);
41
- this.stopFunction = stop;
42
- this.logger.debug(cli_shared_1.Text.tunnel.startedTunnel(tunnelUrl));
43
- return new url_1.URL(tunnelUrl);
40
+ try {
41
+ const { connections, stop, child } = (0, cloudflared_1.tunnel)(options);
42
+ child.stdout?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
43
+ child.stderr?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
44
+ child.on('error', (err) => {
45
+ this.logger.error(err);
46
+ throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredError);
47
+ });
48
+ child.on('exit', (code) => {
49
+ if (code !== 0 && code !== null) {
50
+ throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredExit(code));
51
+ }
52
+ });
53
+ await Promise.all(connections);
54
+ this.stopFunction = stop;
55
+ this.logger.debug(cli_shared_1.Text.tunnel.startedTunnel(tunnelUrl));
56
+ return new url_1.URL(tunnelUrl);
57
+ }
58
+ catch (e) {
59
+ throw this.handleTunnleEstablishError(e);
60
+ }
44
61
  }
45
62
  async closeTunnel() {
46
63
  if (this.stopFunction) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/tunnel",
3
- "version": "5.7.3-next.1",
3
+ "version": "5.7.3-next.3",
4
4
  "description": "Tunnel functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -11,8 +11,8 @@
11
11
  "compile": "tsc -b -v"
12
12
  },
13
13
  "dependencies": {
14
- "@forge/bundler": "4.20.4-next.1",
15
- "@forge/cli-shared": "6.5.1-next.0",
14
+ "@forge/bundler": "4.20.4-next.2",
15
+ "@forge/cli-shared": "6.5.1-next.1",
16
16
  "@forge/csp": "3.5.0",
17
17
  "@forge/runtime": "5.10.3",
18
18
  "chokidar": "^3.6.0",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@atlassian/xen-test-util": "^4.2.0",
32
- "@forge/manifest": "8.3.1-next.0",
32
+ "@forge/manifest": "8.3.1-next.1",
33
33
  "@types/express": "^4.17.21",
34
34
  "@types/jest": "^29.5.12",
35
35
  "@types/node": "14.18.63",