@urateam/cli 0.1.42 → 0.1.43

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tunnel.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tunnel.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,256 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { EventEmitter } from "node:events";
3
+ import { Readable } from "node:stream";
4
+ import { TunnelManager, CloudflaredMissingError, } from "../lib/tunnel.js";
5
+ /**
6
+ * Build a mock child-process for cloudflared. We use a real EventEmitter +
7
+ * Readable streams so the `data` / `exit` listeners the TunnelManager
8
+ * attaches behave like the real surface.
9
+ */
10
+ function makeFakeChild() {
11
+ const stdout = new Readable({ read() { } });
12
+ const stderr = new Readable({ read() { } });
13
+ const child = new EventEmitter();
14
+ child.stdout = stdout;
15
+ child.stderr = stderr;
16
+ child.exitCode = null;
17
+ child.killed = false;
18
+ child.kill = vi.fn((_sig) => {
19
+ child.killed = true;
20
+ return true;
21
+ });
22
+ return {
23
+ child,
24
+ emitStderr: (line) => stderr.push(`${line}\n`),
25
+ emitExit: (code, signal) => {
26
+ child.exitCode = code;
27
+ child.emit("exit", code, signal);
28
+ },
29
+ };
30
+ }
31
+ function makeOpts(overrides = {}) {
32
+ return {
33
+ mode: "cloudflare-quick",
34
+ localPort: 3000,
35
+ initialRestartDelayMs: 10,
36
+ maxRestartDelayMs: 100,
37
+ maxRestartAttempts: 3,
38
+ urlDetectTimeoutMs: 500,
39
+ log: () => { },
40
+ ...overrides,
41
+ };
42
+ }
43
+ describe("TunnelManager — cloudflare-quick", () => {
44
+ it("parses the public URL from cloudflared's stderr", async () => {
45
+ const { child, emitStderr } = makeFakeChild();
46
+ const spawnMock = vi.fn(() => child);
47
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock }));
48
+ const startPromise = mgr.start();
49
+ // Give the child time to be wired up before pushing the URL.
50
+ setTimeout(() => {
51
+ emitStderr("2025-01-01 INF Starting tunnel");
52
+ emitStderr("2025-01-01 INF +-----------+ Your quick tunnel is up at https://abc123.trycloudflare.com");
53
+ }, 5);
54
+ const result = await startPromise;
55
+ expect(result.publicUrl).toBe("https://abc123.trycloudflare.com");
56
+ expect(result.restartCount).toBe(0);
57
+ expect(spawnMock).toHaveBeenCalledWith("cloudflared", expect.arrayContaining(["tunnel", "--url", "http://localhost:3000"]), expect.any(Object));
58
+ });
59
+ it("times out when no URL appears in stderr", async () => {
60
+ const { child } = makeFakeChild();
61
+ const spawnMock = vi.fn(() => child);
62
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock, urlDetectTimeoutMs: 50 }));
63
+ await expect(mgr.start()).rejects.toThrow(/did not see/);
64
+ });
65
+ it("throws CloudflaredMissingError when spawn throws ENOENT", async () => {
66
+ const spawnMock = vi.fn(() => {
67
+ const err = new Error("ENOENT");
68
+ err.code = "ENOENT";
69
+ throw err;
70
+ });
71
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock }));
72
+ await expect(mgr.start()).rejects.toBeInstanceOf(CloudflaredMissingError);
73
+ });
74
+ it("throws CloudflaredMissingError when child emits ENOENT", async () => {
75
+ const { child, emitExit } = makeFakeChild();
76
+ const spawnMock = vi.fn(() => child);
77
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock, urlDetectTimeoutMs: 500 }));
78
+ const startPromise = mgr.start();
79
+ setTimeout(() => {
80
+ const err = new Error("ENOENT");
81
+ err.code = "ENOENT";
82
+ child.emit("error", err);
83
+ emitExit(127, null);
84
+ }, 5);
85
+ await expect(startPromise).rejects.toBeInstanceOf(CloudflaredMissingError);
86
+ });
87
+ });
88
+ describe("TunnelManager — cloudflare-token", () => {
89
+ it("requires both token and publicUrl", async () => {
90
+ const mgr1 = new TunnelManager(makeOpts({ mode: "cloudflare-token" }));
91
+ await expect(mgr1.start()).rejects.toThrow(/token/);
92
+ const mgr2 = new TunnelManager(makeOpts({ mode: "cloudflare-token", token: "tok" }));
93
+ await expect(mgr2.start()).rejects.toThrow(/publicUrl/);
94
+ });
95
+ it("returns the static publicUrl without waiting for stderr parsing", async () => {
96
+ const { child } = makeFakeChild();
97
+ const spawnMock = vi.fn(() => child);
98
+ const mgr = new TunnelManager(makeOpts({
99
+ mode: "cloudflare-token",
100
+ token: "tok-abc",
101
+ publicUrl: "https://urateam.example.com",
102
+ spawn: spawnMock,
103
+ }));
104
+ const result = await mgr.start();
105
+ expect(result.publicUrl).toBe("https://urateam.example.com");
106
+ expect(spawnMock).toHaveBeenCalledWith("cloudflared", expect.arrayContaining(["tunnel", "run", "--token", "tok-abc"]), expect.any(Object));
107
+ });
108
+ });
109
+ describe("TunnelManager — restart-on-exit + graceful shutdown", () => {
110
+ it("emits 'stopped' on child exit", async () => {
111
+ const { child, emitStderr, emitExit } = makeFakeChild();
112
+ const spawnMock = vi.fn(() => child);
113
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock }));
114
+ const startPromise = mgr.start();
115
+ setTimeout(() => emitStderr("Your quick tunnel is up at https://abc.trycloudflare.com"), 5);
116
+ await startPromise;
117
+ const stopped = new Promise((resolve) => mgr.once("stopped", resolve));
118
+ emitExit(1, null);
119
+ const evt = await stopped;
120
+ expect(evt.exitCode).toBe(1);
121
+ });
122
+ it("restarts after a non-zero exit with exponential backoff", async () => {
123
+ vi.useFakeTimers();
124
+ try {
125
+ const spawnedChildren = [];
126
+ const spawnMock = vi.fn(() => {
127
+ const c = makeFakeChild();
128
+ spawnedChildren.push(c);
129
+ return c.child;
130
+ });
131
+ const mgr = new TunnelManager(makeOpts({
132
+ spawn: spawnMock,
133
+ initialRestartDelayMs: 100,
134
+ maxRestartAttempts: 3,
135
+ urlDetectTimeoutMs: 9999,
136
+ }));
137
+ const startPromise = mgr.start();
138
+ // First child emits URL
139
+ spawnedChildren[0].emitStderr("Your quick tunnel is up at https://a.trycloudflare.com");
140
+ await startPromise;
141
+ // Crash the first child.
142
+ spawnedChildren[0].emitExit(1, null);
143
+ // Allow the backoff timer (100ms) to fire and the second child to spawn.
144
+ await vi.advanceTimersByTimeAsync(100);
145
+ expect(spawnMock).toHaveBeenCalledTimes(2);
146
+ // Crash second child; next backoff is 200ms.
147
+ spawnedChildren[1].emitStderr("Your quick tunnel is up at https://b.trycloudflare.com");
148
+ spawnedChildren[1].emitExit(1, null);
149
+ await vi.advanceTimersByTimeAsync(99);
150
+ expect(spawnMock).toHaveBeenCalledTimes(2); // not yet
151
+ await vi.advanceTimersByTimeAsync(1);
152
+ expect(spawnMock).toHaveBeenCalledTimes(3);
153
+ }
154
+ finally {
155
+ vi.useRealTimers();
156
+ }
157
+ });
158
+ it("getRestartCount() reflects supervisor restart attempts", async () => {
159
+ vi.useFakeTimers();
160
+ try {
161
+ const spawnedChildren = [];
162
+ const spawnMock = vi.fn(() => {
163
+ const c = makeFakeChild();
164
+ spawnedChildren.push(c);
165
+ return c.child;
166
+ });
167
+ const mgr = new TunnelManager(makeOpts({
168
+ spawn: spawnMock,
169
+ initialRestartDelayMs: 10,
170
+ maxRestartAttempts: 5,
171
+ urlDetectTimeoutMs: 9999,
172
+ }));
173
+ const startPromise = mgr.start();
174
+ spawnedChildren[0].emitStderr("Your quick tunnel is up at https://a.trycloudflare.com");
175
+ await startPromise;
176
+ expect(mgr.getRestartCount()).toBe(0);
177
+ spawnedChildren[0].emitExit(1, null);
178
+ await vi.advanceTimersByTimeAsync(10);
179
+ // Restart-attempt 1 has fired and spawned a new child.
180
+ expect(spawnMock).toHaveBeenCalledTimes(2);
181
+ expect(mgr.getRestartCount()).toBe(1);
182
+ }
183
+ finally {
184
+ vi.useRealTimers();
185
+ }
186
+ });
187
+ it("gives up after maxRestartAttempts and emits 'error'", async () => {
188
+ vi.useFakeTimers();
189
+ try {
190
+ const spawnedChildren = [];
191
+ const spawnMock = vi.fn(() => {
192
+ const c = makeFakeChild();
193
+ spawnedChildren.push(c);
194
+ return c.child;
195
+ });
196
+ const mgr = new TunnelManager(makeOpts({
197
+ spawn: spawnMock,
198
+ initialRestartDelayMs: 10,
199
+ maxRestartAttempts: 2,
200
+ urlDetectTimeoutMs: 9999,
201
+ }));
202
+ const errored = new Promise((resolve) => mgr.once("error", resolve));
203
+ const startPromise = mgr.start();
204
+ spawnedChildren[0].emitStderr("Your quick tunnel is up at https://a.trycloudflare.com");
205
+ await startPromise;
206
+ // Crash repeatedly past the cap.
207
+ for (let i = 0; i < 5; i++) {
208
+ if (!spawnedChildren[i])
209
+ break;
210
+ spawnedChildren[i].emitExit(1, null);
211
+ await vi.advanceTimersByTimeAsync(1000);
212
+ if (spawnedChildren[i + 1]) {
213
+ spawnedChildren[i + 1].emitStderr(`Your quick tunnel is up at https://x${i}.trycloudflare.com`);
214
+ }
215
+ }
216
+ const err = await errored;
217
+ expect(err.message).toMatch(/giving up/);
218
+ }
219
+ finally {
220
+ vi.useRealTimers();
221
+ }
222
+ });
223
+ it("stop() SIGTERMs the child and cancels a pending restart", async () => {
224
+ const { child, emitStderr, emitExit } = makeFakeChild();
225
+ const spawnMock = vi.fn(() => child);
226
+ const mgr = new TunnelManager(makeOpts({
227
+ spawn: spawnMock,
228
+ initialRestartDelayMs: 60_000,
229
+ }));
230
+ const startPromise = mgr.start();
231
+ setTimeout(() => emitStderr("Your quick tunnel is up at https://abc.trycloudflare.com"), 5);
232
+ await startPromise;
233
+ // Trigger an exit so a restart-timer is pending.
234
+ emitExit(1, null);
235
+ // Now stop — pending restart must be cancelled.
236
+ const stopPromise = mgr.stop();
237
+ // Stop awaits the child's exit promise; that exit has already fired.
238
+ await stopPromise;
239
+ // After stop, no further spawn calls should happen.
240
+ expect(spawnMock).toHaveBeenCalledTimes(1);
241
+ });
242
+ it("stop() while child is running sends SIGTERM", async () => {
243
+ const { child, emitStderr, emitExit } = makeFakeChild();
244
+ const spawnMock = vi.fn(() => child);
245
+ const mgr = new TunnelManager(makeOpts({ spawn: spawnMock }));
246
+ const startPromise = mgr.start();
247
+ setTimeout(() => emitStderr("Your quick tunnel is up at https://abc.trycloudflare.com"), 5);
248
+ await startPromise;
249
+ const stopPromise = mgr.stop();
250
+ // Mock the child's exit response to SIGTERM.
251
+ setTimeout(() => emitExit(null, "SIGTERM"), 5);
252
+ await stopPromise;
253
+ expect(child.kill).toHaveBeenCalledWith("SIGTERM");
254
+ });
255
+ });
256
+ //# sourceMappingURL=tunnel.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.test.js","sourceRoot":"","sources":["../../src/__tests__/tunnel.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,eAAO,MAAM,YAAY,SAwcrB,CAAC"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,eAAO,MAAM,YAAY,SA+iBrB,CAAC"}
@@ -33,6 +33,7 @@ export const startCommand = new Command("start")
33
33
  .description("Start production server (webhook + dashboard)")
34
34
  .option("--port <port>", "Webhook server port", "3000")
35
35
  .option("--dashboard-port <port>", "Dashboard port", "3001")
36
+ .option("--tunnel <mode>", "Auto-launch a Cloudflare tunnel: 'none' (default), 'cloudflare-quick' (free, ephemeral URL), or 'cloudflare-token' (requires CLOUDFLARE_TUNNEL_TOKEN + URATEAM_PUBLIC_URL)", "none")
36
37
  .action(async (options) => {
37
38
  try {
38
39
  loadUserLevelEnv();
@@ -273,6 +274,61 @@ export const startCommand = new Command("start")
273
274
  console.log(`Repos: ${Object.keys(config.repoConfigs).length}`);
274
275
  const webhookServer = serve({ fetch: app.fetch, port });
275
276
  const dashServer = serve({ fetch: dashboardApp.fetch, port: dashboardPort });
277
+ // --- Optional tunnel (cloudflared) ---
278
+ // Brings a public URL up via cloudflared when `--tunnel <mode>` is set.
279
+ // "none" (default) is a no-op. The TunnelManager supervises the child
280
+ // with exponential-backoff restart; failures are logged but don't crash
281
+ // the daemon — the daemon stays up on the local ports so operators can
282
+ // still SSH in and debug.
283
+ let tunnelManager;
284
+ if (options.tunnel && options.tunnel !== "none") {
285
+ const mode = options.tunnel;
286
+ if (mode !== "cloudflare-quick" && mode !== "cloudflare-token") {
287
+ console.error(`--tunnel: unknown mode '${options.tunnel}'. Allowed: none, cloudflare-quick, cloudflare-token`);
288
+ process.exit(1);
289
+ }
290
+ const { TunnelManager, CloudflaredMissingError } = await import("../lib/tunnel.js");
291
+ const token = process.env.CLOUDFLARE_TUNNEL_TOKEN;
292
+ const publicUrl = process.env.URATEAM_PUBLIC_URL;
293
+ tunnelManager = new TunnelManager({
294
+ mode,
295
+ localPort: port,
296
+ token,
297
+ publicUrl,
298
+ });
299
+ try {
300
+ const result = await tunnelManager.start();
301
+ process.env.URATEAM_PUBLIC_URL = result.publicUrl;
302
+ console.log(`Tunnel: ${result.publicUrl} (${mode})`);
303
+ // Attach a runtime error handler BEFORE any subsequent restart can
304
+ // exhaust the cap. EventEmitter throws if "error" emits without a
305
+ // listener; without this, a flapping cloudflared would crash the
306
+ // daemon when the restart cap is hit.
307
+ tunnelManager.on("error", (err) => {
308
+ console.error(`Tunnel: supervisor gave up (${err.message}); daemon continues on local ports`);
309
+ });
310
+ try {
311
+ const { logAuditEvent, tunnelStartedEvent } = await import("@urateam/core");
312
+ void logAuditEvent(db, tunnelStartedEvent({
313
+ provider: mode,
314
+ publicUrl: result.publicUrl,
315
+ restartCount: result.restartCount,
316
+ }));
317
+ }
318
+ catch {
319
+ // audit must never crash startup
320
+ }
321
+ }
322
+ catch (err) {
323
+ if (err instanceof CloudflaredMissingError) {
324
+ console.error(err.message);
325
+ }
326
+ else {
327
+ console.error(`Tunnel: failed to start (${err.message}); daemon will run on local ports only`);
328
+ }
329
+ tunnelManager = undefined;
330
+ }
331
+ }
276
332
  // --- Worktree cleanup cron ---
277
333
  // agentRunDir is already resolved above (before preflightClaudeAuth).
278
334
  const _parsedTtl = parseInt(process.env.WORKTREE_TTL_HOURS ?? "24", 10);
@@ -387,13 +443,40 @@ export const startCommand = new Command("start")
387
443
  console.log(`Release Manager: enabled (schedule "${rmConfig.schedule}", repo ${rmRepoUrl}, branch ${rmConfig.branch})`);
388
444
  }
389
445
  // --- Graceful shutdown ---
390
- function shutdown() {
446
+ async function shutdown() {
391
447
  console.log("Shutting down...");
392
448
  clearInterval(cleanupInterval);
393
449
  clearInterval(branchSweepInterval);
394
450
  if (pmInterval)
395
451
  clearInterval(pmInterval);
396
452
  rmScheduler?.stop();
453
+ // Stop tunnel before closing HTTP servers so cloudflared sees clean
454
+ // disconnects instead of a half-open socket dance. Emit `tunnel.stopped`
455
+ // for observability of intentional shutdowns.
456
+ if (tunnelManager) {
457
+ // Capture restartCount BEFORE stop() — the count reflects how many
458
+ // times cloudflared crashed during the daemon's life, which is the
459
+ // metric operators want to see for "did this tunnel flap?".
460
+ const restartCount = tunnelManager.getRestartCount();
461
+ try {
462
+ await tunnelManager.stop();
463
+ try {
464
+ const { logAuditEvent, tunnelStoppedEvent } = await import("@urateam/core");
465
+ void logAuditEvent(db, tunnelStoppedEvent({
466
+ provider: options.tunnel,
467
+ restartCount,
468
+ exitCode: null,
469
+ signal: "SIGTERM",
470
+ }));
471
+ }
472
+ catch {
473
+ // audit must never crash shutdown
474
+ }
475
+ }
476
+ catch (err) {
477
+ console.error(`Tunnel shutdown error: ${err.message}`);
478
+ }
479
+ }
397
480
  let closed = 0;
398
481
  const onClose = () => { if (++closed === 2)
399
482
  process.exit(0); };
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * `ura start --tunnel <mode>` runtime: wraps `cloudflared` as a child process.
3
+ *
4
+ * Two modes:
5
+ * - "cloudflare-quick": `cloudflared tunnel --url http://localhost:<port>`.
6
+ * Cloudflare assigns a random `*.trycloudflare.com` URL, which is parsed
7
+ * out of cloudflared's stderr.
8
+ * - "cloudflare-token": `cloudflared tunnel --token <token> run`. Operator
9
+ * has already configured a named tunnel in Cloudflare; the public URL
10
+ * is known ahead of time and must be passed via `opts.publicUrl` /
11
+ * `URATEAM_PUBLIC_URL`.
12
+ *
13
+ * Restart-on-exit: the child is supervised with exponential-backoff retries
14
+ * (default 1s → 2s → 4s ... capped at 30s, max 10 attempts). On `stop()`
15
+ * the supervisor cancels any pending retry timer and SIGTERMs the child.
16
+ *
17
+ * All I/O is injectable for tests; the real `spawn` is only invoked when the
18
+ * caller doesn't override `opts.spawn`.
19
+ */
20
+ import { spawn as realSpawn } from "node:child_process";
21
+ import { EventEmitter } from "node:events";
22
+ export type TunnelMode = "cloudflare-quick" | "cloudflare-token";
23
+ export interface TunnelManagerOpts {
24
+ mode: TunnelMode;
25
+ /** Required for "cloudflare-token" — typically from `CLOUDFLARE_TUNNEL_TOKEN`. */
26
+ token?: string;
27
+ /** Static public URL — required for "cloudflare-token", ignored for quick. */
28
+ publicUrl?: string;
29
+ /** Local port the daemon listens on. For "cloudflare-quick". */
30
+ localPort: number;
31
+ /**
32
+ * Override for real `spawn` — tests pass a stub returning a controllable
33
+ * EventEmitter with `stdout`, `stderr`, `kill`, and an `on("exit", ...)`
34
+ * surface.
35
+ */
36
+ spawn?: typeof realSpawn;
37
+ /** Initial restart delay (ms). Default 1000. */
38
+ initialRestartDelayMs?: number;
39
+ /** Max restart delay (ms). Default 30000. */
40
+ maxRestartDelayMs?: number;
41
+ /** Max restart attempts before giving up. Default 10. */
42
+ maxRestartAttempts?: number;
43
+ /** Time to wait for the public URL to appear in stderr (quick mode). Default 30s. */
44
+ urlDetectTimeoutMs?: number;
45
+ /** Logger (defaults to console.log). */
46
+ log?: (msg: string) => void;
47
+ }
48
+ export interface TunnelStartResult {
49
+ publicUrl: string;
50
+ restartCount: number;
51
+ }
52
+ /**
53
+ * Thrown when the `cloudflared` binary isn't installed (ENOENT on spawn).
54
+ * Carries an install hint so the start command can render an actionable
55
+ * error.
56
+ */
57
+ export declare class CloudflaredMissingError extends Error {
58
+ constructor();
59
+ }
60
+ export declare class TunnelManager extends EventEmitter {
61
+ private readonly opts;
62
+ private child;
63
+ private restartCount;
64
+ private shuttingDown;
65
+ private restartTimer;
66
+ private publicUrl;
67
+ private readonly spawnFn;
68
+ private readonly initialRestartDelayMs;
69
+ private readonly maxRestartDelayMs;
70
+ private readonly maxRestartAttempts;
71
+ private readonly urlDetectTimeoutMs;
72
+ private readonly log;
73
+ constructor(opts: TunnelManagerOpts);
74
+ /**
75
+ * Start the tunnel. Resolves with the detected (quick) or pre-configured
76
+ * (token) public URL. Throws `CloudflaredMissingError` on ENOENT.
77
+ */
78
+ start(): Promise<TunnelStartResult>;
79
+ /**
80
+ * Stop the tunnel. Cancels any pending restart, SIGTERMs the child, and
81
+ * awaits the exit. Subsequent restarts (e.g. an exit fired during
82
+ * shutdown) are skipped.
83
+ */
84
+ stop(): Promise<void>;
85
+ private buildArgs;
86
+ private spawnChild;
87
+ private spawnAndDetectUrl;
88
+ /**
89
+ * Wire the supervisor: on unexpected exit, schedule a restart with
90
+ * exponential backoff. Caps at `maxRestartAttempts` then emits "error".
91
+ */
92
+ private wireSupervisor;
93
+ private restart;
94
+ /** Currently-known public URL, or null before `start()`. */
95
+ getPublicUrl(): string | null;
96
+ /**
97
+ * Total restart attempts made since `start()`. Never resets within the
98
+ * lifetime of a single TunnelManager — so even a long stable period
99
+ * followed by a single new failure still incurs the cap-tier delay.
100
+ * Operators who care can construct a fresh manager. Used by the
101
+ * `tunnel.stopped` audit event to attribute flap loops correctly.
102
+ */
103
+ getRestartCount(): number;
104
+ }
105
+ //# sourceMappingURL=tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/lib/tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,KAAK,IAAI,SAAS,EAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,UAAU,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC;IACzB,gDAAgD;IAChD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;;CAUjD;AAED,qBAAa,aAAc,SAAQ,YAAY;IAajC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;gBAEf,IAAI,EAAE,iBAAiB;IAUpD;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoBzC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,UAAU;YAYJ,iBAAiB;IAoD/B;;;OAGG;IACH,OAAO,CAAC,cAAc;YAiCR,OAAO;IA6BrB,4DAA4D;IAC5D,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;;;;OAMG;IACH,eAAe,IAAI,MAAM;CAG1B"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * `ura start --tunnel <mode>` runtime: wraps `cloudflared` as a child process.
3
+ *
4
+ * Two modes:
5
+ * - "cloudflare-quick": `cloudflared tunnel --url http://localhost:<port>`.
6
+ * Cloudflare assigns a random `*.trycloudflare.com` URL, which is parsed
7
+ * out of cloudflared's stderr.
8
+ * - "cloudflare-token": `cloudflared tunnel --token <token> run`. Operator
9
+ * has already configured a named tunnel in Cloudflare; the public URL
10
+ * is known ahead of time and must be passed via `opts.publicUrl` /
11
+ * `URATEAM_PUBLIC_URL`.
12
+ *
13
+ * Restart-on-exit: the child is supervised with exponential-backoff retries
14
+ * (default 1s → 2s → 4s ... capped at 30s, max 10 attempts). On `stop()`
15
+ * the supervisor cancels any pending retry timer and SIGTERMs the child.
16
+ *
17
+ * All I/O is injectable for tests; the real `spawn` is only invoked when the
18
+ * caller doesn't override `opts.spawn`.
19
+ */
20
+ import { spawn as realSpawn, } from "node:child_process";
21
+ import { EventEmitter } from "node:events";
22
+ /** Cloudflare quick-tunnel stderr line we parse the URL out of. */
23
+ const QUICK_URL_REGEX = /https:\/\/[a-z0-9-]+\.trycloudflare\.com/;
24
+ /**
25
+ * Thrown when the `cloudflared` binary isn't installed (ENOENT on spawn).
26
+ * Carries an install hint so the start command can render an actionable
27
+ * error.
28
+ */
29
+ export class CloudflaredMissingError extends Error {
30
+ constructor() {
31
+ super("cloudflared binary not found. Install it:\n" +
32
+ " macOS: brew install cloudflared\n" +
33
+ " Linux: https://pkg.cloudflare.com/index.html (apt/yum)\n" +
34
+ " Other: https://github.com/cloudflare/cloudflared/releases");
35
+ this.name = "CloudflaredMissingError";
36
+ }
37
+ }
38
+ export class TunnelManager extends EventEmitter {
39
+ opts;
40
+ child = null;
41
+ restartCount = 0;
42
+ shuttingDown = false;
43
+ restartTimer = null;
44
+ publicUrl = null;
45
+ spawnFn;
46
+ initialRestartDelayMs;
47
+ maxRestartDelayMs;
48
+ maxRestartAttempts;
49
+ urlDetectTimeoutMs;
50
+ log;
51
+ constructor(opts) {
52
+ super();
53
+ this.opts = opts;
54
+ this.spawnFn = opts.spawn ?? realSpawn;
55
+ this.initialRestartDelayMs = opts.initialRestartDelayMs ?? 1000;
56
+ this.maxRestartDelayMs = opts.maxRestartDelayMs ?? 30000;
57
+ this.maxRestartAttempts = opts.maxRestartAttempts ?? 10;
58
+ this.urlDetectTimeoutMs = opts.urlDetectTimeoutMs ?? 30000;
59
+ this.log = opts.log ?? ((m) => console.log(m));
60
+ }
61
+ /**
62
+ * Start the tunnel. Resolves with the detected (quick) or pre-configured
63
+ * (token) public URL. Throws `CloudflaredMissingError` on ENOENT.
64
+ */
65
+ async start() {
66
+ if (this.opts.mode === "cloudflare-token") {
67
+ if (!this.opts.token) {
68
+ throw new Error("TunnelManager: cloudflare-token mode requires `token` (or CLOUDFLARE_TUNNEL_TOKEN env var)");
69
+ }
70
+ if (!this.opts.publicUrl) {
71
+ throw new Error("TunnelManager: cloudflare-token mode requires `publicUrl` (or URATEAM_PUBLIC_URL env var)");
72
+ }
73
+ this.publicUrl = this.opts.publicUrl;
74
+ }
75
+ const url = await this.spawnAndDetectUrl();
76
+ this.publicUrl = url;
77
+ return { publicUrl: url, restartCount: this.restartCount };
78
+ }
79
+ /**
80
+ * Stop the tunnel. Cancels any pending restart, SIGTERMs the child, and
81
+ * awaits the exit. Subsequent restarts (e.g. an exit fired during
82
+ * shutdown) are skipped.
83
+ */
84
+ async stop() {
85
+ this.shuttingDown = true;
86
+ if (this.restartTimer) {
87
+ clearTimeout(this.restartTimer);
88
+ this.restartTimer = null;
89
+ }
90
+ if (this.child && this.child.exitCode === null && !this.child.killed) {
91
+ const exited = new Promise((resolve) => {
92
+ this.child.once("exit", () => resolve());
93
+ });
94
+ this.child.kill("SIGTERM");
95
+ await exited;
96
+ }
97
+ }
98
+ buildArgs() {
99
+ if (this.opts.mode === "cloudflare-quick") {
100
+ return [
101
+ "tunnel",
102
+ "--no-autoupdate",
103
+ "--url",
104
+ `http://localhost:${this.opts.localPort}`,
105
+ ];
106
+ }
107
+ return [
108
+ "tunnel",
109
+ "--no-autoupdate",
110
+ "run",
111
+ "--token",
112
+ this.opts.token,
113
+ ];
114
+ }
115
+ spawnChild() {
116
+ const spawnOpts = { stdio: ["ignore", "pipe", "pipe"] };
117
+ try {
118
+ return this.spawnFn("cloudflared", this.buildArgs(), spawnOpts);
119
+ }
120
+ catch (err) {
121
+ if (err.code === "ENOENT") {
122
+ throw new CloudflaredMissingError();
123
+ }
124
+ throw err;
125
+ }
126
+ }
127
+ async spawnAndDetectUrl() {
128
+ return new Promise((resolve, reject) => {
129
+ let child;
130
+ try {
131
+ child = this.spawnChild();
132
+ }
133
+ catch (err) {
134
+ reject(err);
135
+ return;
136
+ }
137
+ // Synchronous ENOENT surfaces as an "error" event on the child, not as
138
+ // a throw — cover both paths.
139
+ const onError = (err) => {
140
+ if (err.code === "ENOENT") {
141
+ reject(new CloudflaredMissingError());
142
+ }
143
+ else {
144
+ reject(err);
145
+ }
146
+ };
147
+ child.once("error", onError);
148
+ this.child = child;
149
+ this.wireSupervisor(child);
150
+ if (this.opts.mode === "cloudflare-token") {
151
+ // We already have a static publicUrl; the spawn either succeeds or
152
+ // exits — the supervisor handles both. Resolve immediately.
153
+ resolve(this.opts.publicUrl);
154
+ return;
155
+ }
156
+ const urlTimer = setTimeout(() => {
157
+ reject(new Error(`TunnelManager: did not see a *.trycloudflare.com URL within ${this.urlDetectTimeoutMs}ms`));
158
+ }, this.urlDetectTimeoutMs);
159
+ const onStderr = (chunk) => {
160
+ const text = chunk.toString();
161
+ const match = text.match(QUICK_URL_REGEX);
162
+ if (match) {
163
+ clearTimeout(urlTimer);
164
+ child.stderr?.removeListener("data", onStderr);
165
+ this.log(`🌐 Public URL: ${match[0]}`);
166
+ resolve(match[0]);
167
+ }
168
+ };
169
+ child.stderr?.on("data", onStderr);
170
+ });
171
+ }
172
+ /**
173
+ * Wire the supervisor: on unexpected exit, schedule a restart with
174
+ * exponential backoff. Caps at `maxRestartAttempts` then emits "error".
175
+ */
176
+ wireSupervisor(child) {
177
+ child.once("exit", (code, signal) => {
178
+ this.child = null;
179
+ this.emit("stopped", {
180
+ exitCode: code,
181
+ signal,
182
+ restartCount: this.restartCount,
183
+ });
184
+ if (this.shuttingDown)
185
+ return;
186
+ if (this.restartCount >= this.maxRestartAttempts) {
187
+ this.emit("error", new Error(`TunnelManager: cloudflared exited ${this.restartCount} times in a row; giving up`));
188
+ return;
189
+ }
190
+ const delay = Math.min(this.initialRestartDelayMs * 2 ** this.restartCount, this.maxRestartDelayMs);
191
+ this.log(`tunnel: cloudflared exited (code=${code}, signal=${signal}); restart #${this.restartCount + 1} in ${delay}ms`);
192
+ this.restartTimer = setTimeout(() => {
193
+ this.restartTimer = null;
194
+ this.restartCount += 1;
195
+ this.restart().catch((err) => this.emit("error", err));
196
+ }, delay);
197
+ });
198
+ }
199
+ async restart() {
200
+ if (this.shuttingDown)
201
+ return;
202
+ if (this.opts.mode === "cloudflare-quick") {
203
+ try {
204
+ const url = await this.spawnAndDetectUrl();
205
+ this.publicUrl = url;
206
+ this.emit("started", {
207
+ publicUrl: url,
208
+ restartCount: this.restartCount,
209
+ });
210
+ }
211
+ catch (err) {
212
+ this.emit("error", err);
213
+ }
214
+ return;
215
+ }
216
+ // token mode: spawn child; publicUrl is already known.
217
+ try {
218
+ const child = this.spawnChild();
219
+ this.child = child;
220
+ this.wireSupervisor(child);
221
+ this.emit("started", {
222
+ publicUrl: this.publicUrl,
223
+ restartCount: this.restartCount,
224
+ });
225
+ }
226
+ catch (err) {
227
+ this.emit("error", err);
228
+ }
229
+ }
230
+ /** Currently-known public URL, or null before `start()`. */
231
+ getPublicUrl() {
232
+ return this.publicUrl;
233
+ }
234
+ /**
235
+ * Total restart attempts made since `start()`. Never resets within the
236
+ * lifetime of a single TunnelManager — so even a long stable period
237
+ * followed by a single new failure still incurs the cap-tier delay.
238
+ * Operators who care can construct a fresh manager. Used by the
239
+ * `tunnel.stopped` audit event to attribute flap loops correctly.
240
+ */
241
+ getRestartCount() {
242
+ return this.restartCount;
243
+ }
244
+ }
245
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/lib/tunnel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urateam/cli",
3
- "version": "0.1.42",
3
+ "version": "0.1.43",
4
4
  "license": "BUSL-1.1",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -23,8 +23,8 @@
23
23
  "commander": "^13.1.0",
24
24
  "postgres": "^3.4.0",
25
25
  "zod": "^4.3.6",
26
- "@urateam/core": "0.1.40",
27
- "@urateam/dashboard": "0.1.40"
26
+ "@urateam/core": "0.1.41",
27
+ "@urateam/dashboard": "0.1.41"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/better-sqlite3": "^7.6.0",