npm package diff

Package: @forge/tunnel

Versions: 5.7.3-next.1 - 5.7.3-next.2

Modified: package/out/services/create-tunnel-service.js

Index: package/out/services/create-tunnel-service.js
===================================================================
--- package/out/services/create-tunnel-service.js
+++ package/out/services/create-tunnel-service.js
@@ -12,8 +12,20 @@
     stopFunction;
     constructor(logger) {
         this.logger = logger;
     }
+    handleTunnleEstablishError(e) {
+        const UNKNOWN_SYS_ERROR = 'Unknown system error -86';
+        const userSysErrors = [UNKNOWN_SYS_ERROR, 'EPERM'];
+        if (userSysErrors.some((error) => e.message.includes(error))) {
+            let errorMessage = e.message;
+            if (e.message.includes(UNKNOWN_SYS_ERROR)) {
+                errorMessage += ': Running `softwareupdate --install-rosetta` may help fix the problem';
+            }
+            throw new cli_shared_1.UserError(undefined, errorMessage);
+        }
+        throw e;
+    }
     async establishTunnel({ port, id, token, tunnelUrl }) {
         if (!id || !token || !tunnelUrl) {
             throw new CloudflareError(undefined, 'Missing configuration to create tunnel');
         }
@@ -24,24 +36,29 @@
             '--protocol': 'http2'
         };
         options[id] = null;
         process.env['TUNNEL_LOGLEVEL'] = 'debug';
-        const { connections, stop, child } = (0, cloudflared_1.tunnel)(options);
-        child.stdout?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
-        child.stderr?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
-        child.on('error', (err) => {
-            this.logger.error(err);
-            throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredError);
-        });
-        child.on('exit', (code) => {
-            if (code !== 0 && code !== null) {
-                throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredExit(code));
-            }
-        });
-        await Promise.all(connections);
-        this.stopFunction = stop;
-        this.logger.debug(cli_shared_1.Text.tunnel.startedTunnel(tunnelUrl));
-        return new url_1.URL(tunnelUrl);
+        try {
+            const { connections, stop, child } = (0, cloudflared_1.tunnel)(options);
+            child.stdout?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
+            child.stderr?.on('data', (chunk) => this.logger.debug(cli_shared_1.Text.tunnel.cloudflaredLog(chunk)));
+            child.on('error', (err) => {
+                this.logger.error(err);
+                throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredError);
+            });
+            child.on('exit', (code) => {
+                if (code !== 0 && code !== null) {
+                    throw new cli_shared_1.BaseError(undefined, cli_shared_1.Text.tunnel.error.cloudflaredExit(code));
+                }
+            });
+            await Promise.all(connections);
+            this.stopFunction = stop;
+            this.logger.debug(cli_shared_1.Text.tunnel.startedTunnel(tunnelUrl));
+            return new url_1.URL(tunnelUrl);
+        }
+        catch (e) {
+            throw this.handleTunnleEstablishError(e);
+        }
     }
     async closeTunnel() {
         if (this.stopFunction) {
             try {

Modified: package/out/graphql/tunnel-graphql-client.js

Index: package/out/graphql/tunnel-graphql-client.js
===================================================================
--- package/out/graphql/tunnel-graphql-client.js
+++ package/out/graphql/tunnel-graphql-client.js
@@ -1,19 +1,31 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.TunnelGraphqlClient = void 0;
+exports.TunnelGraphqlClient = exports.RegisterAppTunnelError = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
 const cli_shared_2 = require("@forge/cli-shared");
 class CreateAppTunnelError extends cli_shared_1.GraphQlMutationError {
     constructor(message, { requestId, code, statusCode }) {
         super(cli_shared_2.Text.tunnel.error.create(message), { requestId, code, statusCode });
     }
 }
 class RegisterAppTunnelError extends cli_shared_1.GraphQlMutationError {
+    static userErrorCodes = ['ENVIRONMENT_MISMATCH', 'ENVIRONMENT_NOT_FOUND'];
+    errorCode;
     constructor(message, { requestId, code, statusCode }) {
         super(cli_shared_2.Text.tunnel.error.create(message), { requestId, code, statusCode });
+        this.errorCode = code;
     }
+    getAttributes() {
+        return {
+            isUserError: this.isUserError()
+        };
+    }
+    isUserError() {
+        return typeof this.errorCode === 'string' && RegisterAppTunnelError.userErrorCodes.includes(this.errorCode);
+    }
 }
+exports.RegisterAppTunnelError = RegisterAppTunnelError;
 class DeleteAppTunnelError extends cli_shared_1.GraphQlMutationError {
     constructor(message, { requestId, code, statusCode }) {
         super(cli_shared_2.Text.tunnel.error.delete(message), { requestId, code, statusCode });
     }

Modified: package/package.json

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/tunnel",
-  "version": "5.7.3-next.1",
+  "version": "5.7.3-next.2",
   "description": "Tunnel functionality for Forge CLI",
   "author": "Atlassian",
   "license": "UNLICENSED",
   "main": "out/index.js",

Modified: package/out/services/create-tunnel-service.d.ts.map

Index: package/out/services/create-tunnel-service.d.ts.map
===================================================================
--- package/out/services/create-tunnel-service.d.ts.map
+++ package/out/services/create-tunnel-service.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file

Modified: package/out/graphql/tunnel-graphql-client.d.ts.map

Index: package/out/graphql/tunnel-graphql-client.d.ts.map
===================================================================
--- package/out/graphql/tunnel-graphql-client.d.ts.map
+++ package/out/graphql/tunnel-graphql-client.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file

Modified: package/CHANGELOG.md

Large diffs are not rendered by default.

Modified: package/out/services/create-tunnel-service.d.ts

Index: package/out/services/create-tunnel-service.d.ts
===================================================================
--- package/out/services/create-tunnel-service.d.ts
+++ package/out/services/create-tunnel-service.d.ts
@@ -18,8 +18,9 @@
 export declare class CloudflareCreateTunnelService implements CreateTunnelService {
     private readonly logger;
     private stopFunction;
     constructor(logger: Logger);
+    private handleTunnleEstablishError;
     establishTunnel({ port, id, token, tunnelUrl }: TunnelConfig): Promise<URL>;
     closeTunnel(): Promise<void>;
 }
 //# sourceMappingURL=create-tunnel-service.d.ts.map
\ No newline at end of file

Modified: package/out/graphql/tunnel-graphql-client.d.ts

Index: package/out/graphql/tunnel-graphql-client.d.ts
===================================================================
--- package/out/graphql/tunnel-graphql-client.d.ts
+++ package/out/graphql/tunnel-graphql-client.d.ts
@@ -1,7 +1,18 @@
 /// <reference types="node" resolution-mode="require"/>
 import { URL } from 'url';
-import { GraphQLClient } from '@forge/cli-shared';
+import { GraphQLClient, GraphQlMutationError, ErrorWithAnalytics, ErrorAnalytics } from '@forge/cli-shared';
+export declare class RegisterAppTunnelError extends GraphQlMutationError implements ErrorWithAnalytics {
+    private static userErrorCodes;
+    private errorCode?;
+    constructor(message: string, { requestId, code, statusCode }: {
+        requestId: string | undefined;
+        code?: string;
+        statusCode?: number;
+    });
+    getAttributes(): ErrorAnalytics;
+    isUserError(): boolean;
+}
 export interface TunnelDefinitions {
     faasTunnelUrl?: URL;
     customUI?: {
         resourceKey: string;