@arkstack/driver-express 0.14.2 → 0.14.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/dist/app.d.ts CHANGED
@@ -18,4 +18,8 @@ declare module '@arkstack/foundry' {
18
18
  error: (error: unknown, ctx: { req: Request, res: Response }) => Promise<void>
19
19
  }
20
20
  }
21
+ }
22
+
23
+ declare global {
24
+ var tunnelUrl: () => string
21
25
  }
package/dist/index.d.ts CHANGED
@@ -27,6 +27,7 @@ interface ExpressDriverOptions {
27
27
  */
28
28
  declare class ExpressDriver extends ArkstackKitDriver<Express, Handler> {
29
29
  readonly name = "express";
30
+ private tunnel_url?;
30
31
  private readonly options;
31
32
  /**
32
33
  * Creates an instance of ExpressDriver.
@@ -67,6 +68,12 @@ declare class ExpressDriver extends ArkstackKitDriver<Express, Handler> {
67
68
  * @param app
68
69
  */
69
70
  registerErrorHandler(app: Express): void;
71
+ /**
72
+ * If trafic has been proxied via ngrok, this will return the tunnel URL.
73
+ *
74
+ * @returns
75
+ */
76
+ geTunnelUrl(): string | undefined;
70
77
  /**
71
78
  * Starts the Express server on the specified port.
72
79
  *
@@ -78,7 +85,7 @@ declare class ExpressDriver extends ArkstackKitDriver<Express, Handler> {
78
85
  * @param app
79
86
  * @param port
80
87
  */
81
- start(app: Express, port: number): void;
88
+ start(app: Express, port: number): Promise<void>;
82
89
  }
83
90
  //#endregion
84
91
  export { ExpressDriver, ExpressDriverOptions, Router, defaultErrorHandler };
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import express from "express";
2
2
  import { Arkstack, ArkstackKitDriver } from "@arkstack/contract";
3
3
  import { ErrorHandler, Logger, RequestException, env, renderError } from "@arkstack/common";
4
4
  import { resolveMiddleware } from "@arkstack/http";
5
+ import ngrok from "@ngrok/ngrok";
5
6
  import { Router as Router$2 } from "clear-router/express";
6
7
  import { clearRouterExpressPlugin } from "@resora/plugin-clear-router";
7
8
  import { join } from "node:path";
@@ -93,6 +94,7 @@ var Router = class extends Router$2 {
93
94
  */
94
95
  var ExpressDriver = class extends ArkstackKitDriver {
95
96
  name = "express";
97
+ tunnel_url;
96
98
  options;
97
99
  /**
98
100
  * Creates an instance of ExpressDriver.
@@ -170,6 +172,14 @@ var ExpressDriver = class extends ArkstackKitDriver {
170
172
  app.use(this.options.errorHandler ?? defaultErrorHandler);
171
173
  }
172
174
  /**
175
+ * If trafic has been proxied via ngrok, this will return the tunnel URL.
176
+ *
177
+ * @returns
178
+ */
179
+ geTunnelUrl() {
180
+ return this.tunnel_url;
181
+ }
182
+ /**
173
183
  * Starts the Express server on the specified port.
174
184
  *
175
185
  * The bind host can be overridden with the `APP_HOST` (or `HOST`) env
@@ -180,10 +190,25 @@ var ExpressDriver = class extends ArkstackKitDriver {
180
190
  * @param app
181
191
  * @param port
182
192
  */
183
- start(app, port) {
193
+ async start(app, port) {
184
194
  const host = env("APP_HOST", env("HOST", "0.0.0.0"));
185
- app.listen(port, host, () => {
186
- Logger.log([["Server is running on", "white"], [`http://${host}:${port}`, "cyan"]], " ");
195
+ const tunneled = env("TUNNEL", false);
196
+ app.listen(port, host, async () => {
197
+ let log = [Logger.log([["Server is running on", "white"], [`http://${host}:${port}`, "cyan"]], " ", false)];
198
+ if (tunneled === true) {
199
+ const url = (await ngrok.forward({
200
+ addr: port,
201
+ authtoken: env("NGROK_AUTHTOKEN"),
202
+ domain: env("NGROK_DOMAIN")
203
+ })).url();
204
+ if (url) {
205
+ log = log.concat(Logger.log([["Trafic has been tunnelled to", "white"], [url, "green"]], " ", false));
206
+ process.env.TUNNEL_URL = url;
207
+ this.tunnel_url = url;
208
+ globalThis.tunnelUrl = () => url;
209
+ }
210
+ }
211
+ console.log(log.join("\n"));
187
212
  });
188
213
  }
189
214
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkstack/driver-express",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "type": "module",
5
5
  "description": "Express driver for Arkstack, providing Express-based runtime integration for the framework.",
6
6
  "homepage": "https://arkstack.toneflix.net",
@@ -37,18 +37,19 @@
37
37
  "./package.json": "./package.json"
38
38
  },
39
39
  "dependencies": {
40
- "multer": "^2.1.1",
40
+ "@ngrok/ngrok": "^1.7.0",
41
+ "@resora/plugin-clear-router": "^1.0.63",
41
42
  "clear-router": "^2.8.8",
42
43
  "express-rate-limit": "^8.4.1",
43
- "@resora/plugin-clear-router": "^1.0.63",
44
+ "multer": "^2.1.1",
44
45
  "resora": "^1.3.26",
45
- "@arkstack/contract": "^0.14.2"
46
+ "@arkstack/contract": "^0.14.3"
46
47
  },
47
48
  "peerDependencies": {
48
49
  "express": "^5.2.1",
49
- "@arkstack/auth": "^0.14.2",
50
- "@arkstack/common": "^0.14.2",
51
- "@arkstack/foundry": "^0.14.2"
50
+ "@arkstack/common": "^0.14.3",
51
+ "@arkstack/auth": "^0.14.3",
52
+ "@arkstack/foundry": "^0.14.3"
52
53
  },
53
54
  "peerDependenciesMeta": {
54
55
  "@arkstack/auth": {
@@ -56,8 +57,8 @@
56
57
  }
57
58
  },
58
59
  "devDependencies": {
59
- "@types/multer": "^2.1.0",
60
- "@types/express": "^5.0.6"
60
+ "@types/express": "^5.0.6",
61
+ "@types/multer": "^2.1.0"
61
62
  },
62
63
  "scripts": {
63
64
  "build": "tsdown --config-loader unrun",