@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.
- package/dist/__tests__/tunnel.test.d.ts +2 -0
- package/dist/__tests__/tunnel.test.d.ts.map +1 -0
- package/dist/__tests__/tunnel.test.js +256 -0
- package/dist/__tests__/tunnel.test.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +84 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/lib/tunnel.d.ts +105 -0
- package/dist/lib/tunnel.d.ts.map +1 -0
- package/dist/lib/tunnel.js +245 -0
- package/dist/lib/tunnel.js.map +1 -0
- package/package.json +3 -3
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,aAAa,EACb,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,SAAS,aAAa;IAWpB,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,YAAY,EAAS,CAAC;IACxC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE;QAClC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK;QACL,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;QACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACzB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,YAAwC,EAAE;IAE1C,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,IAAI;QACf,qBAAqB,EAAE,EAAE;QACzB,iBAAiB,EAAE,GAAG;QACtB,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,GAAG;QACvB,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;QACb,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,6DAA6D;QAC7D,UAAU,CAAC,GAAG,EAAE;YACd,UAAU,CAAC,gCAAgC,CAAC,CAAC;YAC7C,UAAU,CACR,0FAA0F,CAC3F,CAAC;QACJ,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,aAAa,EACb,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,EACpE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAC9D,CAAC;QACF,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;YAC3B,MAAM,GAAG,GAA0B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAC/D,CAAC;QACF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,GAAG,GAA0B,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvD,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,aAAa,CAC5B,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CACvC,CAAC;QACF,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,aAAa,CAC5B,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACrD,CAAC;QACF,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC;YACP,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,6BAA6B;YACxC,KAAK,EAAE,SAAgB;SACxB,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,aAAa,EACb,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAC/D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qDAAqD,EAAE,GAAG,EAAE;IACnE,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,UAAU,CACR,GAAG,EAAE,CAAC,UAAU,CAAC,0DAA0D,CAAC,EAC5E,CAAC,CACF,CAAC;QACF,MAAM,YAAY,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,OAAO,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAC1C,CAAC;QACF,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,eAAe,GAAuC,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBAC3B,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,CAAC,KAAY,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC;gBACP,KAAK,EAAE,SAAgB;gBACvB,qBAAqB,EAAE,GAAG;gBAC1B,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CACH,CAAC;YACF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YACjC,wBAAwB;YACxB,eAAe,CAAC,CAAC,CAAE,CAAC,UAAU,CAC5B,wDAAwD,CACzD,CAAC;YACF,MAAM,YAAY,CAAC;YACnB,yBAAyB;YACzB,eAAe,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,yEAAyE;YACzE,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,6CAA6C;YAC7C,eAAe,CAAC,CAAC,CAAE,CAAC,UAAU,CAC5B,wDAAwD,CACzD,CAAC;YACF,eAAe,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;YACtD,MAAM,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,eAAe,GAAuC,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBAC3B,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,CAAC,KAAY,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC;gBACP,KAAK,EAAE,SAAgB;gBACvB,qBAAqB,EAAE,EAAE;gBACzB,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CACH,CAAC;YACF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YACjC,eAAe,CAAC,CAAC,CAAE,CAAC,UAAU,CAC5B,wDAAwD,CACzD,CAAC;YACF,MAAM,YAAY,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,eAAe,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;YACtC,uDAAuD;YACvD,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,eAAe,GAAuC,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBAC3B,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,CAAC,CAAC,KAAY,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC;gBACP,KAAK,EAAE,SAAgB;gBACvB,qBAAqB,EAAE,EAAE;gBACzB,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CACH,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,EAAE,CAC7C,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAC3B,CAAC;YACF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YACjC,eAAe,CAAC,CAAC,CAAE,CAAC,UAAU,CAC5B,wDAAwD,CACzD,CAAC;YACF,MAAM,YAAY,CAAC;YACnB,iCAAiC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;oBAAE,MAAM;gBAC/B,eAAe,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC3B,eAAe,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,CAChC,uCAAuC,CAAC,oBAAoB,CAC7D,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,aAAa,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAC3B,QAAQ,CAAC;YACP,KAAK,EAAE,SAAgB;YACvB,qBAAqB,EAAE,MAAM;SAC9B,CAAC,CACH,CAAC;QACF,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,UAAU,CACR,GAAG,EAAE,CAAC,UAAU,CAAC,0DAA0D,CAAC,EAC5E,CAAC,CACF,CAAC;QACF,MAAM,YAAY,CAAC;QACnB,iDAAiD;QACjD,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClB,gDAAgD;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/B,qEAAqE;QACrE,MAAM,WAAW,CAAC;QAClB,oDAAoD;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,SAAgB,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,UAAU,CACR,GAAG,EAAE,CAAC,UAAU,CAAC,0DAA0D,CAAC,EAC5E,CAAC,CACF,CAAC;QACF,MAAM,YAAY,CAAC;QACnB,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/B,6CAA6C;QAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,WAAW,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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,
|
|
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"}
|
package/dist/commands/start.js
CHANGED
|
@@ -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.
|
|
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.
|
|
27
|
-
"@urateam/dashboard": "0.1.
|
|
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",
|