@forge/tunnel 7.1.4-next.0 → 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 +20 -0
- package/out/command/start-tunnel-command.d.ts +1 -1
- package/out/command/start-tunnel-command.d.ts.map +1 -1
- package/out/command/start-tunnel-command.js +9 -6
- package/out/sandbox/node-sandbox.d.ts.map +1 -1
- package/out/sandbox/node-sandbox.js +11 -1
- package/out/sandbox/sandbox-runner.js +13 -0
- package/out/servers/dev-server.d.ts +2 -1
- package/out/servers/dev-server.d.ts.map +1 -1
- package/out/servers/dev-server.js +18 -2
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
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
|
+
|
|
16
|
+
## 7.1.4-next.1
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- @forge/bundler@7.2.3-next.1
|
|
21
|
+
- @forge/cli-shared@9.7.0-next.1
|
|
22
|
+
|
|
3
23
|
## 7.1.4-next.0
|
|
4
24
|
|
|
5
25
|
### 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,
|
|
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;
|
|
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}`] :
|
|
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":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAKL,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,UAAU,EAEV,gBAAgB,EAChB,2BAA2B,EAC3B,MAAM,EACN,cAAc,EAEd,aAAa,EAEb,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAe,MAAM,gBAAgB,CAAC;
|
|
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
|
|
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.
|
|
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.
|
|
15
|
-
"@forge/cli-shared": "9.7.0-next.
|
|
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.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",
|