@forge/tunnel 3.0.1-next.2 → 3.1.0-next.10

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,72 @@
1
1
  # @forge/tunnel
2
2
 
3
+ ## 3.1.0-next.10
4
+
5
+ ### Patch Changes
6
+
7
+ - @forge/bundler@4.4.0-next.9
8
+
9
+ ## 3.1.0-next.9
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [d71279f]
14
+ - @forge/cli-shared@3.6.0-next.1
15
+ - @forge/bundler@4.4.0-next.8
16
+
17
+ ## 3.1.0-next.8
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [8c60d162]
22
+ - @forge/cli-shared@3.6.0-next.0
23
+ - @forge/bundler@4.4.0-next.7
24
+
25
+ ## 3.1.0-next.7
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies [ceb1141]
30
+ - @forge/bundler@4.4.0-next.6
31
+ - @forge/runtime@4.1.0-next.2
32
+
33
+ ## 3.1.0-next.6
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [addbda1]
38
+ - @forge/bundler@4.4.0-next.5
39
+
40
+ ## 3.1.0-next.5
41
+
42
+ ### Minor Changes
43
+
44
+ - e25c75e8: Update Node runtime response payload
45
+
46
+ ### Patch Changes
47
+
48
+ - Updated dependencies [e25c75e8]
49
+ - @forge/bundler@4.4.0-next.4
50
+ - @forge/runtime@4.1.0-next.1
51
+
52
+ ## 3.1.0-next.4
53
+
54
+ ### Patch Changes
55
+
56
+ - c0ecd442: Fix Custom UI tunnelling on Node runtime
57
+
58
+ ## 3.1.0-next.3
59
+
60
+ ### Minor Changes
61
+
62
+ - d98339a: Non-Docker tunnel for Node runtime
63
+
64
+ ### Patch Changes
65
+
66
+ - Updated dependencies [d98339a]
67
+ - @forge/bundler@4.4.0-next.3
68
+ - @forge/runtime@4.0.1-next.0
69
+
3
70
  ## 3.0.1-next.2
4
71
 
5
72
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { MakeDirectoryOptions } from 'fs';
3
- import { ConfigFile, Logger } from '@forge/cli-shared';
3
+ import { ConfigFile, FeatureFlagReader, Logger } from '@forge/cli-shared';
4
4
  import { BundlerOutput } from '@forge/bundler';
5
5
  import { Sandbox, SandboxConfig, SnapshotCreator } from '@forge/runtime';
6
6
  export interface FunctionChangeWatcher {
@@ -25,8 +25,9 @@ export declare class LocalFunctionHost implements FunctionChangeWatcher {
25
25
  private readonly snapshot;
26
26
  private readonly createSandbox;
27
27
  private readonly fsInteractor;
28
+ private readonly featureFlags;
28
29
  private snapshotLogs;
29
- constructor(configFile: ConfigFile, logger: Logger, snapshot: SnapshotCreator, createSandbox: (cfg: SandboxConfig) => Promise<Sandbox>, fsInteractor: FsInteractor);
30
+ constructor(configFile: ConfigFile, logger: Logger, snapshot: SnapshotCreator | null, createSandbox: (cfg: SandboxConfig) => Promise<Sandbox>, fsInteractor: FsInteractor, featureFlags: FeatureFlagReader);
30
31
  private generateBundleFiles;
31
32
  startWatching(bundledCode: BundlerOutput): Promise<void>;
32
33
  stopWatching(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"function-change-watcher.d.ts","sourceRoot":"","sources":["../../../src/command/interactors/function-change-watcher.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAG1C,OAAO,EAAE,UAAU,EAA8B,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAIL,OAAO,EACP,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,qBAAa,iBAAkB,YAAW,qBAAqB;IAI3D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAP/B,OAAO,CAAC,YAAY,CAA8C;gBAG/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,EACvD,YAAY,EAAE,YAAY;YAG/B,mBAAmB;IAuBpB,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CxD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C,OAAO,CAAC,YAAY,CAElB;YAEY,mBAAmB;CAsBlC"}
1
+ {"version":3,"file":"function-change-watcher.d.ts","sourceRoot":"","sources":["../../../src/command/interactors/function-change-watcher.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAA8B,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAIL,OAAO,EACP,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,MAAM;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,qBAAa,iBAAkB,YAAW,qBAAqB;IAI3D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,YAAY,CAA8C;gBAG/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,aAAa,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,EACvD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,iBAAiB;YAGpC,mBAAmB;IA2BpB,aAAa,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CxD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C,OAAO,CAAC,YAAY,CAElB;YAEY,mBAAmB;CAsBlC"}
@@ -10,12 +10,13 @@ const util_1 = require("../../util");
10
10
  exports.INVOCATION_TIMEOUT = 10;
11
11
  exports.MEMORY_LIMIT = 256;
12
12
  class LocalFunctionHost {
13
- constructor(configFile, logger, snapshot, createSandbox, fsInteractor) {
13
+ constructor(configFile, logger, snapshot, createSandbox, fsInteractor, featureFlags) {
14
14
  this.configFile = configFile;
15
15
  this.logger = logger;
16
16
  this.snapshot = snapshot;
17
17
  this.createSandbox = createSandbox;
18
18
  this.fsInteractor = fsInteractor;
19
+ this.featureFlags = featureFlags;
19
20
  this.snapshotLogs = [];
20
21
  this.onRuntimeLog = (event) => {
21
22
  this.logger.info((0, util_1.formatRuntimeLog)(event));
@@ -24,6 +25,9 @@ class LocalFunctionHost {
24
25
  async generateBundleFiles(bundle, withSnapshot) {
25
26
  await this.fsInteractor.mkdir((0, path_1.dirname)(bundle.bundleFilePath), { recursive: true });
26
27
  if (withSnapshot) {
28
+ if (!this.snapshot) {
29
+ throw new Error('Snapshot requested but snapshot creator not provided.');
30
+ }
27
31
  const snapshotOutput = await this.snapshot({ isolateMemory: exports.MEMORY_LIMIT }, Buffer.from(bundle.bundleFileContent), bundle.bundleFilePath, bundle.bundleFileSourceMap ? Buffer.from(bundle.bundleFileSourceMap) : undefined);
28
32
  await this.fsInteractor.writeFile(bundle.bundleFilePath + '.snapshot', Buffer.from(snapshotOutput.buffer));
29
33
  if (snapshotOutput.logs.length > 0) {
@@ -39,7 +43,7 @@ class LocalFunctionHost {
39
43
  }
40
44
  async startWatching(bundledCode) {
41
45
  const directory = tmp_1.default.dirSync({ prefix: 'tunnel' }).name;
42
- const isSnapshotEnabled = await this.configFile.snapshotsEnabled();
46
+ const isSnapshotEnabled = (await this.configFile.snapshotsEnabled()) && !(await this.featureFlags.isNodeRuntime());
43
47
  if (isSnapshotEnabled) {
44
48
  this.logger.info('');
45
49
  this.logger.info(cli_shared_1.Text.tunnel.preBundleTask(cli_shared_1.Text.tunnel.snapshotting));
@@ -7,7 +7,9 @@ import { TunnelDefinitions } from '../index';
7
7
  import { RegisterTunnelService, CreateTunnelService } from '../services';
8
8
  export interface StartTunnelOptions {
9
9
  port?: number;
10
+ host: string;
10
11
  environmentKey: string;
12
+ resourcePortMap?: Record<string, number>;
11
13
  }
12
14
  export interface StartTunnelResult {
13
15
  localPort: number;
@@ -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,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAyB,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EACL,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAsC,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,eAAe,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAX7B,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,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU;IAGzC,OAAO,CAAC,YAAY,CAUlB;IAEF,OAAO,CAAC,qBAAqB,CAS3B;IAEF,OAAO,CAAC,gCAAgC,CAgCtC;IAEW,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAoD9E"}
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,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAyB,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EACL,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAsC,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,eAAe,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAX7B,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,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU;IAGzC,OAAO,CAAC,YAAY,CAUlB;IAEF,OAAO,CAAC,qBAAqB,CAS3B;IAEF,OAAO,CAAC,gCAAgC,CAmCtC;IAEW,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAoD9E"}
@@ -36,20 +36,20 @@ class StartTunnelCommand {
36
36
  const faasTunnelUrl = await this.tunnelFactory.establishTunnel(serverInfo.port);
37
37
  return Object.assign(Object.assign({}, serverInfo), { tunnelUrl: faasTunnelUrl });
38
38
  };
39
- this.startResourceBasedTunnelsServers = async (resourceDetails) => {
40
- var _a, _b;
41
- const resourcePortMap = JSON.parse((_a = process.env.RESOURCE_PORT_MAP) !== null && _a !== void 0 ? _a : '{}');
39
+ this.startResourceBasedTunnelsServers = async (resourceDetails, options) => {
40
+ var _a, _b, _c;
41
+ const portMap = (_a = options.resourcePortMap) !== null && _a !== void 0 ? _a : JSON.parse((_b = process.env.RESOURCE_PORT_MAP) !== null && _b !== void 0 ? _b : '{}');
42
42
  const { permissions = {}, remotes = [] } = await this.configFile.readConfig();
43
- const cspReporterPort = parseInt((_b = process.env.CSP_REPORTER_PORT) !== null && _b !== void 0 ? _b : '4000', 10);
43
+ const cspReporterPort = parseInt((_c = process.env.CSP_REPORTER_PORT) !== null && _c !== void 0 ? _c : '4000', 10);
44
44
  if (resourceDetails.length === 0)
45
45
  return [];
46
46
  this.cspReporterServer = new servers_1.CspReporterServer(cspReporterPort, this.logger, new node_cache_1.default());
47
47
  await this.cspReporterServer.start();
48
48
  return await Promise.all(resourceDetails.map(async (rd) => {
49
49
  const { key, resourceType } = rd;
50
- const port = resourcePortMap[key];
50
+ const port = portMap[key];
51
51
  const tunnelServer = resourceType === 'nativeUI' ? servers_1.NativeUITunnelServer : servers_1.CustomUITunnelServer;
52
- this.tunnelServers[key] = new tunnelServer(Object.assign(Object.assign({}, rd), { port, logger: this.logger, cspReporterServerPort: cspReporterPort, permissions,
52
+ this.tunnelServers[key] = new tunnelServer(Object.assign(Object.assign({}, rd), { port, host: options.host, logger: this.logger, cspReporterServerPort: cspReporterPort, permissions,
53
53
  remotes }));
54
54
  return this.tunnelServers[key].start();
55
55
  }));
@@ -61,7 +61,7 @@ class StartTunnelCommand {
61
61
  const allResources = await this.configFile.getResources();
62
62
  try {
63
63
  const faasTunnelServer = await this.startFaaSTunnelServer(port);
64
- const customUITunnelsServers = await this.startResourceBasedTunnelsServers(allResources);
64
+ const customUITunnelsServers = await this.startResourceBasedTunnelsServers(allResources, options);
65
65
  const tunnelDefinitions = {
66
66
  faasTunnelUrl: faasTunnelServer.tunnelUrl,
67
67
  customUI: customUITunnelsServers.map(({ tunnelUrl, resourceKey }) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"custom-ui-tunnel-server.d.ts","sourceRoot":"","sources":["../../src/servers/custom-ui-tunnel-server.ts"],"names":[],"mappings":"AAEA,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAoB,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AASvE,qBAAa,oBAAqB,SAAQ,oBAAqB,YAAW,iBAAiB;IAM7E,OAAO,CAAC,QAAQ,CAAC,UAAU;IALvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,MAAM,CAAqB;gBAEN,UAAU,EAAE,wBAAwB;IAwC3D,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAkBhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAcd,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAK5C,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,gCAAgC;IAoBxC,OAAO,CAAC,sBAAsB;CAO/B"}
1
+ {"version":3,"file":"custom-ui-tunnel-server.d.ts","sourceRoot":"","sources":["../../src/servers/custom-ui-tunnel-server.ts"],"names":[],"mappings":"AAEA,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAE1F,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAc,MAAM,cAAc,CAAC;AASnF,qBAAa,oBAAqB,SAAQ,oBAAqB,YAAW,iBAAiB;IAM7E,OAAO,CAAC,QAAQ,CAAC,UAAU;IALvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,MAAM,CAAqB;gBAEN,UAAU,EAAE,wBAAwB;IAwC3D,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAkBhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASd,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAK5C,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,gCAAgC;IAoBxC,OAAO,CAAC,sBAAsB;CAO/B"}
@@ -7,6 +7,7 @@ const express_1 = tslib_1.__importDefault(require("express"));
7
7
  const http_proxy_middleware_1 = require("http-proxy-middleware");
8
8
  const resource_tunnel_server_1 = require("./resource-tunnel-server");
9
9
  const cli_shared_1 = require("@forge/cli-shared");
10
+ const dev_server_1 = require("./dev-server");
10
11
  var ConnectionErrorCode;
11
12
  (function (ConnectionErrorCode) {
12
13
  ConnectionErrorCode["REFUSED"] = "ECONNREFUSED";
@@ -21,7 +22,7 @@ class CustomUITunnelServer extends resource_tunnel_server_1.ResourceTunnelServer
21
22
  if (tunnel) {
22
23
  const { port: tunnelPort } = tunnel;
23
24
  this.proxy = (0, http_proxy_middleware_1.createProxyMiddleware)({
24
- target: `http://${resource_tunnel_server_1.TUNNEL_LOCALHOST}:${tunnelPort}`,
25
+ target: `http://${this.tunnelArgs.host}:${tunnelPort}`,
25
26
  ws: true,
26
27
  logLevel: 'info',
27
28
  logProvider: () => {
@@ -67,12 +68,7 @@ class CustomUITunnelServer extends resource_tunnel_server_1.ResourceTunnelServer
67
68
  if (this.socket) {
68
69
  this.socket.end();
69
70
  }
70
- return new Promise((resolve, reject) => {
71
- if (!this.server) {
72
- return resolve();
73
- }
74
- this.server.close((err) => (err ? reject(err) : resolve()));
75
- });
71
+ await (0, dev_server_1.stopServer)(this.server);
76
72
  }
77
73
  async compileAndWatch() {
78
74
  return {};
@@ -1,7 +1,9 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import express from 'express';
4
+ import * as http from 'http';
3
5
  import { URL } from 'url';
4
- import { ConfigFile, Logger } from '@forge/cli-shared';
6
+ import { ConfigFile, FeatureFlagReader, Logger } from '@forge/cli-shared';
5
7
  import { ExternalRequestBody } from '@forge/runtime';
6
8
  import { Permissions, Remotes } from '@forge/manifest';
7
9
  import { BundlerOutput } from '@forge/bundler';
@@ -23,15 +25,17 @@ export interface StartDevServerResult {
23
25
  export interface InvocationService {
24
26
  invoke(handler: string, request: ExternalRequestBody): Promise<any>;
25
27
  }
28
+ export declare function stopServer(server: http.Server | undefined): Promise<void>;
26
29
  export declare class LocalDevelopmentServer implements DevelopmentServer {
27
30
  private readonly invocationService;
28
31
  private readonly logger;
29
32
  private readonly configFile;
33
+ private readonly featureFlags;
30
34
  private app;
31
35
  private httpServer;
32
36
  private permissions;
33
37
  private remotes;
34
- constructor(invocationService: InvocationService, logger: Logger, configFile: ConfigFile);
38
+ constructor(invocationService: InvocationService, logger: Logger, configFile: ConfigFile, featureFlags: FeatureFlagReader);
35
39
  start(port?: number, permissions?: Permissions, remotes?: Remotes): Promise<StartDevServerResult>;
36
40
  stop(): Promise<void>;
37
41
  compileAndWatch({ onBuildWillStart, onBuildFinished }: WatchHooks<BundlerOutput>): Promise<BundlerOutput | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/servers/dev-server.ts"],"names":[],"mappings":";AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAY,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,aAAa,EAKd,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE;AACD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrE;AAED,qBAAa,sBAAuB,YAAW,iBAAiB;IAO5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAR7B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,OAAO,CAAsB;gBAGlB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU;IAQ5B,KAAK,CAAC,IAAI,SAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAe5F,IAAI;IAUJ,eAAe,CAAC,EAC3B,gBAAgB,EAChB,eAAe,EAChB,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAiD1D,MAAM,IAAI,OAAO,CAAC,WAAW;IAI7B,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAsCtC;CACH"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/servers/dev-server.ts"],"names":[],"mappings":";;AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAY,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAe,MAAM,gBAAgB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,aAAa,EAMd,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,eAAe,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE;AACD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E;AAED,qBAAa,sBAAuB,YAAW,iBAAiB;IAO5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,OAAO,CAAsB;gBAGlB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,iBAAiB;IAQrC,KAAK,CAAC,IAAI,SAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAe5F,IAAI;IAIJ,eAAe,CAAC,EAC3B,gBAAgB,EAChB,eAAe,EAChB,EAAE,UAAU,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAqD1D,MAAM,IAAI,OAAO,CAAC,WAAW;IAI7B,gBAAgB,EAAE,OAAO,CAAC,OAAO,CA2CtC;CACH"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LocalDevelopmentServer = void 0;
3
+ exports.LocalDevelopmentServer = exports.stopServer = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const express_1 = tslib_1.__importDefault(require("express"));
6
6
  const bundler_1 = require("@forge/bundler");
@@ -9,11 +9,21 @@ const runtime_1 = require("@forge/runtime");
9
9
  const __1 = require("../");
10
10
  const util_1 = require("../util");
11
11
  const bundler_2 = require("@forge/bundler");
12
+ async function stopServer(server) {
13
+ if (!server) {
14
+ return;
15
+ }
16
+ return new Promise((resolve) => {
17
+ server.close(() => resolve());
18
+ });
19
+ }
20
+ exports.stopServer = stopServer;
12
21
  class LocalDevelopmentServer {
13
- constructor(invocationService, logger, configFile) {
22
+ constructor(invocationService, logger, configFile, featureFlags) {
14
23
  this.invocationService = invocationService;
15
24
  this.logger = logger;
16
25
  this.configFile = configFile;
26
+ this.featureFlags = featureFlags;
17
27
  this.handleInvocation = async (req, res) => {
18
28
  var _a, _b, _c, _d, _e, _f;
19
29
  const request = req.body;
@@ -33,6 +43,9 @@ class LocalDevelopmentServer {
33
43
  request._meta = Object.assign(Object.assign({}, request._meta), { fetchAllowList: allowList });
34
44
  try {
35
45
  const invokeResults = await this.invocationService.invoke(request.handler, request);
46
+ if ((await this.featureFlags.isNodeRuntime()) && !invokeResults.success) {
47
+ return res.status(500).send(invokeResults.error);
48
+ }
36
49
  res.json(invokeResults);
37
50
  }
38
51
  catch (error) {
@@ -61,12 +74,7 @@ class LocalDevelopmentServer {
61
74
  };
62
75
  }
63
76
  async stop() {
64
- if (!this.httpServer) {
65
- return;
66
- }
67
- const server = this.httpServer;
68
- this.httpServer = undefined;
69
- await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())));
77
+ await stopServer(this.httpServer);
70
78
  }
71
79
  async compileAndWatch({ onBuildWillStart, onBuildFinished }) {
72
80
  const handlers = await this.configFile.getAppHandlers();
@@ -74,7 +82,10 @@ class LocalDevelopmentServer {
74
82
  if (!entryPoints.length) {
75
83
  return;
76
84
  }
77
- const config = (0, bundler_2.getSandboxedRuntimeBuildConfig)(entryPoints, {
85
+ const getConfig = (await this.featureFlags.isNodeRuntime())
86
+ ? bundler_2.getNodeRuntimeBuildConfig
87
+ : bundler_2.getSandboxedRuntimeBuildConfig;
88
+ const config = getConfig(entryPoints, {
78
89
  isWatchMode: true,
79
90
  isDebugMode: (0, __1.isInspectorEnabled)(),
80
91
  appDirectory: process.cwd()
@@ -5,12 +5,12 @@ import { CSPDetails } from '@forge/csp';
5
5
  import type { Permissions, Remotes } from '@forge/manifest';
6
6
  export interface ResourceTunnelServerArgs extends Resource {
7
7
  port: number;
8
+ host: string;
8
9
  logger: Logger;
9
10
  permissions: Permissions;
10
11
  cspReporterServerPort: number;
11
12
  remotes: Remotes;
12
13
  }
13
- export declare const TUNNEL_LOCALHOST: string;
14
14
  export declare abstract class ResourceTunnelServer {
15
15
  protected readonly port: number;
16
16
  protected readonly key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resource-tunnel-server.d.ts","sourceRoot":"","sources":["../../src/servers/resource-tunnel-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,QAAQ,EAMR,MAAM,EAEP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAA6C,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG5D,MAAM,WAAW,wBAAyB,SAAQ,QAAQ;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,QAAsE,CAAC;AAEpG,8BAAsB,oBAAoB;IACxC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;gBAE5B,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,wBAAwB;IAQxF,MAAM,CAAC,+BAA+B,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;IAajF,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAMvF,SAAS,CAAC,YAAY,gBAAiB,UAAU,KAAG,MAAM,CAO1C;IAEhB,SAAS,CAAC,wBAAwB,gBAAiB,MAAM,YAGpD;IAEL,SAAS,CAAC,yBAAyB,gBAAiB,MAAM,YAGrD;IAEL,SAAS,CAAC,kCAAkC,gBAAiB,WAAW,uBAAqB,cAAc,CAqBpG;CACR"}
1
+ {"version":3,"file":"resource-tunnel-server.d.ts","sourceRoot":"","sources":["../../src/servers/resource-tunnel-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,QAAQ,EAMR,MAAM,EAEP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAA6C,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG5D,MAAM,WAAW,wBAAyB,SAAQ,QAAQ;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,8BAAsB,oBAAoB;IACxC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;gBAE5B,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,wBAAwB;IAQxF,MAAM,CAAC,+BAA+B,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;;;IAajF,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAMvF,SAAS,CAAC,YAAY,gBAAiB,UAAU,KAAG,MAAM,CAO1C;IAEhB,SAAS,CAAC,wBAAwB,gBAAiB,MAAM,YAGpD;IAEL,SAAS,CAAC,yBAAyB,gBAAiB,MAAM,YAGrD;IAEL,SAAS,CAAC,kCAAkC,gBAAiB,WAAW,uBAAqB,cAAc,CAqBpG;CACR"}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceTunnelServer = exports.TUNNEL_LOCALHOST = void 0;
3
+ exports.ResourceTunnelServer = void 0;
4
4
  const cli_shared_1 = require("@forge/cli-shared");
5
5
  const csp_1 = require("@forge/csp");
6
6
  const express_intercept_1 = require("express-intercept");
7
- exports.TUNNEL_LOCALHOST = process.env.FORGE_DEV_TUNNEL ? 'localhost' : 'host.docker.internal';
8
7
  class ResourceTunnelServer {
9
8
  constructor({ port, key, path, cspReporterServerPort, logger }) {
10
9
  this.getCspHeader = (existingCsp) => new csp_1.CSPInjectionService()
@@ -43,7 +43,7 @@ class LocalInvocationService {
43
43
  ctx: { requestId, traceId: requestId, timeout: interactors_1.INVOCATION_TIMEOUT }
44
44
  });
45
45
  const invocationLimits = (0, runtime_1.perInvocationLimitsTrackerFactory)(xenInvocationRequest);
46
- const { body, metrics } = await (0, runtime_1.invoke)({
46
+ const { body, metrics, success, error } = await (0, runtime_1.invoke)({
47
47
  sandbox,
48
48
  xenInvocationRequest,
49
49
  invocationLimits,
@@ -51,7 +51,7 @@ class LocalInvocationService {
51
51
  });
52
52
  const reportMetrics = xenInvocationRequest.isFeatureFlagEnabled(runtime_1.XEN_RUNTIME_SHOULD_REPORT_METRICS);
53
53
  LocalInvocationService.printMetrics(reportMetrics, metrics, this.logger);
54
- return reportMetrics ? { body, metrics } : body;
54
+ return reportMetrics ? { body, metrics, success, error } : body;
55
55
  }
56
56
  }
57
57
  exports.LocalInvocationService = LocalInvocationService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/tunnel",
3
- "version": "3.0.1-next.2",
3
+ "version": "3.1.0-next.10",
4
4
  "description": "Tunnel functionality for Forge CLI",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -11,10 +11,10 @@
11
11
  "compile": "tsc -b -v"
12
12
  },
13
13
  "dependencies": {
14
- "@forge/bundler": "4.4.0-next.2",
15
- "@forge/cli-shared": "3.5.1",
14
+ "@forge/bundler": "4.4.0-next.9",
15
+ "@forge/cli-shared": "3.6.0-next.1",
16
16
  "@forge/csp": "^2.1.0",
17
- "@forge/runtime": "4.0.0",
17
+ "@forge/runtime": "4.1.0-next.2",
18
18
  "express": "^4.17.1",
19
19
  "express-intercept": "^0.8.10",
20
20
  "http-proxy-middleware": "^1.0.6",