@forge/tunnel 7.1.4-next.1 → 7.1.4-next.1-experimental-13c2f8d

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
+ ## 7.1.4-next.1-experimental-13c2f8d
4
+
5
+ ### Patch Changes
6
+
7
+ - 067c20a: Add manifest-driven Docker local storage, seeding, reset, status, persistent lifecycle, and local
8
+ SDK routing for Forge tunnels. Pull the current KVS and SQL emulator images from Atlassian's public
9
+ package registry.
10
+ - Updated dependencies [9f27f8a]
11
+ - Updated dependencies [067c20a]
12
+ - @forge/cli-shared@9.7.0-next.1-experimental-13c2f8d
13
+ - @forge/bundler@7.2.3-next.1-experimental-13c2f8d
14
+ - @forge/csp@6.3.1-experimental-13c2f8d
15
+
3
16
  ## 7.1.4-next.1
4
17
 
5
18
  ### Patch Changes
@@ -35,6 +35,6 @@ export declare class StartTunnelCommand {
35
35
  private stopServices;
36
36
  private startFaaSTunnelServer;
37
37
  private startResourceBasedTunnelsServers;
38
- execute(options: StartTunnelOptions, containersDockerComposeFiles?: Record<string, string>): Promise<StartTunnelResult>;
38
+ execute(options: StartTunnelOptions, containersDockerComposeFiles?: Record<string, string>, additionalCleanup?: () => Promise<void>): Promise<StartTunnelResult>;
39
39
  }
40
40
  //# sourceMappingURL=start-tunnel-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-tunnel-command.d.ts","sourceRoot":"","sources":["../../src/command/start-tunnel-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,MAAM,EAEN,aAAa,EAMd,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,eAAe,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAQD,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAV7B,OAAO,CAAC,aAAa,CAAmE;IACxF,OAAO,CAAC,iBAAiB,CAAgC;gBAGtC,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,mBAAmB,EAClC,YAAY,EAAE,qBAAqB,EACnC,YAAY,EAAE,qBAAqB,EACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU;IAGzC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY,CAclB;IAEF,OAAO,CAAC,qBAAqB,CA+B3B;IAEF,OAAO,CAAC,gCAAgC,CAiCtC;IAEW,OAAO,CAClB,OAAO,EAAE,kBAAkB,EAC3B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpD,OAAO,CAAC,iBAAiB,CAAC;CA0D9B"}
1
+ {"version":3,"file":"start-tunnel-command.d.ts","sourceRoot":"","sources":["../../src/command/start-tunnel-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,MAAM,EAEN,aAAa,EAMd,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,eAAe,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAQD,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAV7B,OAAO,CAAC,aAAa,CAAmE;IACxF,OAAO,CAAC,iBAAiB,CAAgC;gBAGtC,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,mBAAmB,EAClC,YAAY,EAAE,qBAAqB,EACnC,YAAY,EAAE,qBAAqB,EACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU;IAGzC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY,CAgBlB;IAEF,OAAO,CAAC,qBAAqB,CA+B3B;IAEF,OAAO,CAAC,gCAAgC,CAiCtC;IAEW,OAAO,CAClB,OAAO,EAAE,kBAAkB,EAC3B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACrD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC;CA4D9B"}
@@ -53,7 +53,7 @@ class StartTunnelCommand {
53
53
  throw new InvalidTunnelConfigError(cli_shared_1.Text.tunnel.error.invalidSelfManagedTunnelPort(port.toString()));
54
54
  }
55
55
  }
56
- stopServices = async (appId, environmentKey, containersDockerComposeFiles) => {
56
+ stopServices = async (appId, environmentKey, containersDockerComposeFiles, additionalCleanup) => {
57
57
  await Promise.all([
58
58
  this.functionHost.stopWatching(),
59
59
  this.tunnelClient.unregisterTunnels(appId, environmentKey),
@@ -61,7 +61,8 @@ class StartTunnelCommand {
61
61
  this.devServer.stop(),
62
62
  ...Object.values(this.tunnelServers).map((server) => server.stop()),
63
63
  this.cspReporterServer?.stop(),
64
- (0, cli_shared_1.stopDockerComposeStack)(this.configFile, this.logger, containersDockerComposeFiles)
64
+ (0, cli_shared_1.stopDockerComposeStack)(this.configFile, this.logger, containersDockerComposeFiles),
65
+ additionalCleanup?.()
65
66
  ]);
66
67
  };
67
68
  startFaaSTunnelServer = async ({ port, appId, environmentKey, tunnelUrl }) => {
@@ -109,12 +110,14 @@ class StartTunnelCommand {
109
110
  return this.tunnelServers[key].start();
110
111
  }));
111
112
  };
112
- async execute(options, containersDockerComposeFiles) {
113
+ async execute(options, containersDockerComposeFiles, additionalCleanup) {
113
114
  const { id: appId } = await this.getAppConfig();
114
115
  const { port, environmentKey, url } = options;
115
116
  this.validateTunnelUrl(url);
116
117
  this.validateTunnelPort(port);
117
118
  const allResources = await this.configFile.getResources();
119
+ let cleanupPromise;
120
+ const additionalCleanupOnce = additionalCleanup ? () => (cleanupPromise ??= additionalCleanup()) : undefined;
118
121
  try {
119
122
  const faasTunnelServer = await this.startFaaSTunnelServer({
120
123
  port,
@@ -131,9 +134,9 @@ class StartTunnelCommand {
131
134
  }))
132
135
  };
133
136
  await this.tunnelClient.registerTunnels(appId, environmentKey, tunnelDefinitions);
134
- const stopFunction = async () => this.stopServices(appId, environmentKey, containersDockerComposeFiles);
137
+ const stopFunction = async () => this.stopServices(appId, environmentKey, containersDockerComposeFiles, additionalCleanupOnce);
135
138
  this.devServer.setErrorHandler?.(async (error) => {
136
- await this.stopServices(appId, environmentKey, containersDockerComposeFiles);
139
+ await this.stopServices(appId, environmentKey, containersDockerComposeFiles, additionalCleanupOnce);
137
140
  await (0, cli_shared_1.exitOnError)(this.logger, error);
138
141
  });
139
142
  const reloadSandboxes = async (bundledCode, tunnelOptions) => {
@@ -151,7 +154,7 @@ class StartTunnelCommand {
151
154
  }
152
155
  catch (e) {
153
156
  try {
154
- await this.stopServices(appId, environmentKey, containersDockerComposeFiles);
157
+ await this.stopServices(appId, environmentKey, containersDockerComposeFiles, additionalCleanupOnce);
155
158
  }
156
159
  catch { }
157
160
  throw e;
@@ -1 +1 @@
1
- {"version":3,"file":"node-sandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox/node-sandbox.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,aAAa,EAId,MAAM,gBAAgB,CAAC;AAMxB,qBAAa,WAAY,YAAW,OAAO;IACzC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;gBAEhE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa;IAgC9E,OAAO,CAAC,YAAY;IAOd,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyBtE,IAAI,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"node-sandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox/node-sandbox.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,aAAa,EAId,MAAM,gBAAgB,CAAC;AAmBxB,qBAAa,WAAY,YAAW,OAAO;IACzC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;gBAEhE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa;IAqC9E,OAAO,CAAC,YAAY;IAOd,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyBtE,IAAI,IAAI,IAAI;CAGb"}
@@ -9,6 +9,15 @@ const crypto_1 = require("crypto");
9
9
  const bundler_1 = require("@forge/bundler");
10
10
  const runtime_1 = require("@forge/runtime");
11
11
  const RUNNER = path_1.default.join(__dirname, '..', '..', 'out', 'sandbox', 'sandbox-runner.js');
12
+ const LOCAL_STORAGE_ENVIRONMENT_KEYS = [
13
+ 'FORGE_LOCAL_STORAGE',
14
+ 'FORGE_LOCAL_KVS_URL',
15
+ 'FORGE_LOCAL_SQL_URL',
16
+ 'FORGE_LOCAL_STORAGE_APP_ID',
17
+ 'FORGE_LOCAL_STORAGE_ENVIRONMENT_ID',
18
+ 'FORGE_LOCAL_STORAGE_INSTALLATION_ID'
19
+ ];
20
+ const localStorageEnvironment = () => Object.fromEntries(LOCAL_STORAGE_ENVIRONMENT_KEYS.flatMap((key) => (process.env[key] === undefined ? [] : [[key, process.env[key]]])));
12
21
  class NodeSandbox {
13
22
  name;
14
23
  process;
@@ -23,11 +32,12 @@ class NodeSandbox {
23
32
  this.process = (0, child_process_1.fork)(RUNNER, [fileName, handlerName], {
24
33
  stdio: ['ignore', 'pipe', 2, 'ipc'],
25
34
  env: {
35
+ ...localStorageEnvironment(),
26
36
  _HANDLER: handlerEnv,
27
37
  FORGE_EFS_RUNTIME_PATH: appPath,
28
38
  FORGE_CUSTOM_WRAPPER_FILE_NAME: '__forge_wrapper__.cjs'
29
39
  },
30
- execArgv: debugPort ? [`--inspect=${debugHost}:${debugPort}`] : undefined
40
+ execArgv: debugPort ? [`--inspect=${debugHost}:${debugPort}`] : []
31
41
  });
32
42
  readline_1.default.createInterface(this.process.stdout).on('line', (line) => {
33
43
  const message = JSON.parse(line);
@@ -2,6 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const [_nodeBinary, _thisScript, fileName, handlerName] = process.argv;
4
4
  global.__forge_tunnel__ = true;
5
+ if (process.env.FORGE_LOCAL_STORAGE === '1') {
6
+ const nativeFetch = globalThis.fetch.bind(globalThis);
7
+ const allowedOrigins = new Set([process.env.FORGE_LOCAL_KVS_URL, process.env.FORGE_LOCAL_SQL_URL]
8
+ .filter((url) => Boolean(url))
9
+ .map((url) => new URL(url).origin));
10
+ global.__forge_local_fetch__ = async (input, init) => {
11
+ const target = new URL(input instanceof Request ? input.url : input);
12
+ if (!allowedOrigins.has(target.origin)) {
13
+ throw new Error(`Local Forge storage fetch blocked for unconfigured origin: ${target.origin}`);
14
+ }
15
+ return nativeFetch(input, init);
16
+ };
17
+ }
5
18
  const handler = require(fileName)[handlerName];
6
19
  process.on('message', async ({ lambdaEvent, tunnelContext: { requestId, deadline } }) => {
7
20
  const lambdaContext = {
@@ -3,7 +3,7 @@ import { URL } from 'url';
3
3
  import express from 'express';
4
4
  import { BundlerWatch, BundlerOutput } from '@forge/bundler';
5
5
  import { AppEnvironmentsGraphqlClient, ConfigFile, FileSystemReader, I18nResourceBundlingService, Logger, StatsigService, TunnelOptions, UserError } from '@forge/cli-shared';
6
- import { ExternalRequestBody } from '@forge/runtime';
6
+ import { ExternalRequestBody, ExternalRequestVariable } from '@forge/runtime';
7
7
  import { Permissions, Remotes } from '@forge/manifest';
8
8
  export interface ProxyServerError extends Error {
9
9
  code?: string;
@@ -25,6 +25,7 @@ export interface StartDevServerResult {
25
25
  export interface InvocationService {
26
26
  invoke(handler: string, request: ExternalRequestBody): Promise<any>;
27
27
  }
28
+ export declare const getLocalStorageVariables: () => ExternalRequestVariable[];
28
29
  export declare function stopServer(server: http.Server | undefined): Promise<void>;
29
30
  export declare class LocalDevelopmentServer implements DevelopmentServer {
30
31
  private readonly invocationService;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/servers/dev-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/servers/dev-server.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LocalDevelopmentServer = exports.TunnelInvocationValidationError = void 0;
3
+ exports.LocalDevelopmentServer = exports.getLocalStorageVariables = exports.TunnelInvocationValidationError = void 0;
4
4
  exports.stopServer = stopServer;
5
5
  const tslib_1 = require("tslib");
6
6
  const express_1 = tslib_1.__importDefault(require("express"));
@@ -13,6 +13,19 @@ const ari_1 = require("@forge/util/packages/ari");
13
13
  class TunnelInvocationValidationError extends cli_shared_1.UserError {
14
14
  }
15
15
  exports.TunnelInvocationValidationError = TunnelInvocationValidationError;
16
+ const LOCAL_STORAGE_ENVIRONMENT_KEYS = [
17
+ 'FORGE_LOCAL_STORAGE',
18
+ 'FORGE_LOCAL_KVS_URL',
19
+ 'FORGE_LOCAL_SQL_URL',
20
+ 'FORGE_LOCAL_STORAGE_APP_ID',
21
+ 'FORGE_LOCAL_STORAGE_ENVIRONMENT_ID',
22
+ 'FORGE_LOCAL_STORAGE_INSTALLATION_ID'
23
+ ];
24
+ const getLocalStorageVariables = () => LOCAL_STORAGE_ENVIRONMENT_KEYS.flatMap((key) => {
25
+ const value = process.env[key];
26
+ return value === undefined ? [] : [{ key, value, secure: false }];
27
+ });
28
+ exports.getLocalStorageVariables = getLocalStorageVariables;
16
29
  async function stopServer(server) {
17
30
  if (!server) {
18
31
  return;
@@ -90,7 +103,10 @@ class LocalDevelopmentServer {
90
103
  }
91
104
  handleInvocation = async (req, res) => {
92
105
  const request = req.body;
93
- const envVars = (0, runtime_1.getUserVars)();
106
+ const envVarsByKey = new Map((0, runtime_1.getUserVars)().map((variable) => [variable.key, variable]));
107
+ for (const variable of (0, exports.getLocalStorageVariables)())
108
+ envVarsByKey.set(variable.key, variable);
109
+ const envVars = [...envVarsByKey.values()];
94
110
  request.variables?.forEach((item) => {
95
111
  if (!envVars.find((i) => i.key === item.key)) {
96
112
  envVars.push(item);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/tunnel",
3
- "version": "7.1.4-next.1",
3
+ "version": "7.1.4-next.1-experimental-13c2f8d",
4
4
  "description": "Tunnel functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -11,9 +11,9 @@
11
11
  "compile": "tsc -b -v"
12
12
  },
13
13
  "dependencies": {
14
- "@forge/bundler": "7.2.3-next.1",
15
- "@forge/cli-shared": "9.7.0-next.1",
16
- "@forge/csp": "6.3.1",
14
+ "@forge/bundler": "7.2.3-next.1-experimental-13c2f8d",
15
+ "@forge/cli-shared": "9.7.0-next.1-experimental-13c2f8d",
16
+ "@forge/csp": "6.3.1-experimental-13c2f8d",
17
17
  "@forge/runtime": "7.0.0",
18
18
  "@forge/util": "^3.0.0",
19
19
  "cheerio": "^1.2.0",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@atlassian/xen-test-util": "^4.2.0",
36
- "@forge/manifest": "13.5.1-next.0",
36
+ "@forge/manifest": "13.5.1-next.0-experimental-13c2f8d",
37
37
  "@types/express": "^4.17.21",
38
38
  "@types/jest": "^29.5.14",
39
39
  "@types/node": "20.19.1",