ugly-app 0.1.519 → 0.1.521

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.
Files changed (110) hide show
  1. package/.pgdata/base/16384/pg_internal.init +0 -0
  2. package/.pgdata/global/pg_control +0 -0
  3. package/.pgdata/global/pg_internal.init +0 -0
  4. package/.pgdata/pg_wal/000000010000000000000004 +0 -0
  5. package/.pgdata/postmaster.pid +2 -2
  6. package/dist/cli/dev.d.ts.map +1 -1
  7. package/dist/cli/dev.js +0 -3
  8. package/dist/cli/dev.js.map +1 -1
  9. package/dist/cli/doctor.d.ts.map +1 -1
  10. package/dist/cli/doctor.js +31 -66
  11. package/dist/cli/doctor.js.map +1 -1
  12. package/dist/cli/index.js +8 -66
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/cli/migrate.d.ts.map +1 -1
  15. package/dist/cli/migrate.js +0 -4
  16. package/dist/cli/migrate.js.map +1 -1
  17. package/dist/cli/schemaGen.d.ts.map +1 -1
  18. package/dist/cli/schemaGen.js +0 -4
  19. package/dist/cli/schemaGen.js.map +1 -1
  20. package/dist/cli/schemaStatus.d.ts.map +1 -1
  21. package/dist/cli/schemaStatus.js +0 -4
  22. package/dist/cli/schemaStatus.js.map +1 -1
  23. package/dist/cli/serverLogQueryApi.d.ts +5 -4
  24. package/dist/cli/serverLogQueryApi.d.ts.map +1 -1
  25. package/dist/cli/serverLogQueryApi.js +55 -115
  26. package/dist/cli/serverLogQueryApi.js.map +1 -1
  27. package/dist/cli/version.d.ts +1 -1
  28. package/dist/cli/version.js +1 -1
  29. package/dist/client/auth/MagicLinkCallback.d.ts.map +1 -1
  30. package/dist/client/auth/MagicLinkCallback.js +8 -2
  31. package/dist/client/auth/MagicLinkCallback.js.map +1 -1
  32. package/dist/client/auth/MagicLinkForm.d.ts.map +1 -1
  33. package/dist/client/auth/MagicLinkForm.js +6 -1
  34. package/dist/client/auth/MagicLinkForm.js.map +1 -1
  35. package/dist/server/App.d.ts.map +1 -1
  36. package/dist/server/App.js +1 -2
  37. package/dist/server/App.js.map +1 -1
  38. package/dist/server/Logging.d.ts +5 -8
  39. package/dist/server/Logging.d.ts.map +1 -1
  40. package/dist/server/Logging.js +21 -97
  41. package/dist/server/Logging.js.map +1 -1
  42. package/dist/server/auth/magicLinkProvider.d.ts.map +1 -1
  43. package/dist/server/auth/magicLinkProvider.js +55 -6
  44. package/dist/server/auth/magicLinkProvider.js.map +1 -1
  45. package/dist/server/auth/workersMagicLink.d.ts.map +1 -1
  46. package/dist/server/auth/workersMagicLink.js +78 -6
  47. package/dist/server/auth/workersMagicLink.js.map +1 -1
  48. package/dist/server/bootstrap.d.ts +5 -21
  49. package/dist/server/bootstrap.d.ts.map +1 -1
  50. package/dist/server/bootstrap.js +5 -27
  51. package/dist/server/bootstrap.js.map +1 -1
  52. package/dist/shared/DB.d.ts +0 -9
  53. package/dist/shared/DB.d.ts.map +1 -1
  54. package/dist/shared/DB.js +46 -10
  55. package/dist/shared/DB.js.map +1 -1
  56. package/dist/vite/index.d.ts +0 -1
  57. package/dist/vite/index.d.ts.map +1 -1
  58. package/dist/vite/index.js +0 -1
  59. package/dist/vite/index.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/cli/dev.ts +0 -4
  62. package/src/cli/doctor.ts +31 -63
  63. package/src/cli/index.ts +9 -81
  64. package/src/cli/migrate.ts +0 -4
  65. package/src/cli/schemaGen.ts +0 -4
  66. package/src/cli/schemaStatus.ts +0 -4
  67. package/src/cli/serverLogQueryApi.ts +53 -136
  68. package/src/cli/version.ts +1 -1
  69. package/src/client/auth/MagicLinkCallback.tsx +10 -2
  70. package/src/client/auth/MagicLinkForm.tsx +7 -1
  71. package/src/server/App.ts +1 -2
  72. package/src/server/Logging.ts +21 -97
  73. package/src/server/auth/magicLinkProvider.ts +61 -6
  74. package/src/server/auth/workersMagicLink.ts +75 -6
  75. package/src/server/bootstrap.ts +5 -29
  76. package/src/shared/DB.ts +46 -17
  77. package/src/vite/index.ts +0 -1
  78. package/.pgdata/base/1/pg_internal.init +0 -0
  79. package/.pgdata/base/17702/pg_internal.init +0 -0
  80. package/.pgdata/base/5/pg_internal.init +0 -0
  81. package/dist/cli/devTunnel.d.ts +0 -37
  82. package/dist/cli/devTunnel.d.ts.map +0 -1
  83. package/dist/cli/devTunnel.js +0 -470
  84. package/dist/cli/devTunnel.js.map +0 -1
  85. package/dist/cli/ensureInfra.d.ts +0 -9
  86. package/dist/cli/ensureInfra.d.ts.map +0 -1
  87. package/dist/cli/ensureInfra.js +0 -86
  88. package/dist/cli/ensureInfra.js.map +0 -1
  89. package/dist/cli/sidecar.d.ts +0 -21
  90. package/dist/cli/sidecar.d.ts.map +0 -1
  91. package/dist/cli/sidecar.js +0 -294
  92. package/dist/cli/sidecar.js.map +0 -1
  93. package/dist/cli/sidecarHealth.d.ts +0 -13
  94. package/dist/cli/sidecarHealth.d.ts.map +0 -1
  95. package/dist/cli/sidecarHealth.js +0 -42
  96. package/dist/cli/sidecarHealth.js.map +0 -1
  97. package/dist/cli/sidecarProtocol.d.ts +0 -41
  98. package/dist/cli/sidecarProtocol.d.ts.map +0 -1
  99. package/dist/cli/sidecarProtocol.js +0 -61
  100. package/dist/cli/sidecarProtocol.js.map +0 -1
  101. package/dist/vite/tunnelPlugin.d.ts +0 -10
  102. package/dist/vite/tunnelPlugin.d.ts.map +0 -1
  103. package/dist/vite/tunnelPlugin.js +0 -30
  104. package/dist/vite/tunnelPlugin.js.map +0 -1
  105. package/src/cli/devTunnel.ts +0 -589
  106. package/src/cli/ensureInfra.ts +0 -90
  107. package/src/cli/sidecar.ts +0 -350
  108. package/src/cli/sidecarHealth.ts +0 -58
  109. package/src/cli/sidecarProtocol.ts +0 -68
  110. package/src/vite/tunnelPlugin.ts +0 -32
@@ -1,470 +0,0 @@
1
- /**
2
- * devTunnel.ts
3
- *
4
- * Combined dev tunnel client: multiplexes infrastructure TCP ports (Postgres,
5
- * NATS, S3, Qdrant) over binary frames AND handles proxy tunnel HTTP/WS relay
6
- * for public dev URLs — all on a single WebSocket to /dev-tunnel.
7
- *
8
- * Binary frames = infra tunnel (5-byte header + TCP payload)
9
- * Text frames = proxy tunnel (JSON messages for HTTP/WS relay)
10
- */
11
- import net from 'net';
12
- import WebSocket from 'ws';
13
- import { getUglyBotWsUrl } from '../shared/uglyBotUrl.js';
14
- import { SERVICE, SERVICE_NAME, FLAGS, encodeFrame, decodeFrame, } from './sidecarProtocol.js';
15
- const BACKPRESSURE_THRESHOLD = 1024 * 1024; // 1 MB
16
- // Only NATS needs a tunnel proxy — PG/R2/Qdrant go through the centralized data proxy
17
- const SERVICE_LIST = [
18
- SERVICE.NATS,
19
- ];
20
- // Headers to strip from localhost responses (avoid double-decompression)
21
- const STRIP_RESPONSE_HEADERS = new Set([
22
- 'content-encoding',
23
- 'content-length',
24
- 'transfer-encoding',
25
- ]);
26
- let state = null;
27
- /**
28
- * Start the dev tunnel: opens WSS connection and binds ephemeral TCP ports.
29
- * If vitePort is provided, also registers a proxy tunnel for public URL access.
30
- */
31
- export async function startDevTunnel(opts) {
32
- if (state && !state.stopped) {
33
- throw new Error('Dev tunnel already running');
34
- }
35
- state = {
36
- ws: null,
37
- servers: new Map(),
38
- streams: new Map(),
39
- nextStreamId: 1,
40
- reconnectTimer: null,
41
- reconnectDelay: 1000,
42
- connected: false,
43
- stopped: false,
44
- subdomain: null,
45
- localWsSockets: new Map(),
46
- };
47
- // Create TCP servers for each service on port 0 (ephemeral)
48
- const portResults = new Map();
49
- for (const serviceId of SERVICE_LIST) {
50
- const server = net.createServer((socket) => {
51
- handleTcpConnection(serviceId, socket);
52
- });
53
- await new Promise((resolve, reject) => {
54
- server.listen(0, '127.0.0.1', () => resolve());
55
- server.on('error', reject);
56
- });
57
- const addr = server.address();
58
- portResults.set(serviceId, addr.port);
59
- state.servers.set(serviceId, server);
60
- }
61
- // Connect WebSocket
62
- await connectWs(opts);
63
- const ports = {
64
- postgres: 0, // No longer proxied — uses data proxy
65
- nats: portResults.get(SERVICE.NATS),
66
- s3: 0, // No longer proxied — uses data proxy
67
- qdrantHttp: 0, // No longer proxied — uses data proxy
68
- qdrantGrpc: 0, // No longer proxied — uses data proxy
69
- subdomain: state.subdomain ?? undefined,
70
- };
71
- console.log('[ugly-app] Dev tunnel listening:');
72
- for (const [serviceId, port] of portResults) {
73
- console.log(` ${SERVICE_NAME[serviceId]}: localhost:${port}`);
74
- }
75
- if (ports.subdomain) {
76
- console.log(`\x1b[36m ➜ Tunnel: https://${ports.subdomain}.ugly.bot\x1b[0m`);
77
- }
78
- return ports;
79
- }
80
- function connectWs(opts) {
81
- if (!state || state.stopped)
82
- return Promise.resolve();
83
- const serverUrl = opts.serverUrl ?? getUglyBotWsUrl();
84
- return new Promise((resolve, reject) => {
85
- let resolved = false;
86
- try {
87
- const ws = new WebSocket(`${serverUrl}/dev-tunnel`, {
88
- headers: {
89
- 'Authorization': `Bearer ${opts.token}`,
90
- 'X-Project-Id': opts.projectId,
91
- },
92
- });
93
- ws.binaryType = 'nodebuffer';
94
- ws.on('open', () => {
95
- if (!state)
96
- return;
97
- state.ws = ws;
98
- // Don't reset reconnectDelay here — reset on 'ready' only,
99
- // so rapid disconnect/reconnect cycles see growing delays.
100
- });
101
- ws.on('message', (data, isBinary) => {
102
- if (!state)
103
- return;
104
- if (!isBinary) {
105
- // Text frame — JSON control/proxy messages
106
- try {
107
- const msg = JSON.parse(typeof data === 'string' ? data : data.toString('utf8'));
108
- handleTextMessage(msg, opts, ws, () => {
109
- if (!resolved) {
110
- resolved = true;
111
- resolve();
112
- }
113
- });
114
- }
115
- catch {
116
- // Not valid JSON — ignore
117
- }
118
- return;
119
- }
120
- // Binary frame — infra tunnel
121
- try {
122
- const { streamId, flags, payload } = decodeFrame(Buffer.from(data));
123
- if (flags & FLAGS.RST) {
124
- const socket = state.streams.get(streamId);
125
- if (socket) {
126
- state.streams.delete(streamId);
127
- socket.destroy();
128
- }
129
- return;
130
- }
131
- if (payload.length > 0) {
132
- const socket = state.streams.get(streamId);
133
- if (socket && !socket.destroyed) {
134
- socket.write(payload);
135
- }
136
- }
137
- if (flags & FLAGS.FIN) {
138
- const socket = state.streams.get(streamId);
139
- if (socket) {
140
- state.streams.delete(streamId);
141
- socket.end();
142
- }
143
- return;
144
- }
145
- }
146
- catch {
147
- // Ignore malformed frames
148
- }
149
- });
150
- ws.on('close', (code, reason) => {
151
- if (!state || state.stopped)
152
- return;
153
- state.connected = false;
154
- state.ws = null;
155
- // RST all active streams
156
- for (const [id, socket] of state.streams) {
157
- socket.destroy();
158
- state.streams.delete(id);
159
- }
160
- // Close all local WS relays
161
- for (const localWs of state.localWsSockets.values()) {
162
- localWs.close(1001);
163
- }
164
- state.localWsSockets.clear();
165
- if (!resolved) {
166
- resolved = true;
167
- cleanupServers();
168
- const reasonStr = reason?.toString() || '';
169
- if (code === 4001) {
170
- reject(new Error(`[ugly-app] Authentication failed (4001). Run: npx ugly-app login${process.env['UGLY_BOT_LOCAL'] === '1' ? ' --local' : ''}`));
171
- }
172
- else if (code === 4500) {
173
- reject(new Error(`[ugly-app] Failed to provision resources (4500): ${reasonStr}`));
174
- }
175
- else {
176
- reject(new Error(`[ugly-app] Cannot reach ugly.bot (close code ${code}): ${reasonStr}`));
177
- }
178
- return;
179
- }
180
- // 4004 = "Replaced by new tunnel" — our own reconnect created a new connection,
181
- // so the server killed this old one. Don't reconnect again (the new one IS our reconnect).
182
- if (code === 4004) {
183
- console.log('[ugly-app] Old tunnel closed (replaced by new connection)');
184
- return;
185
- }
186
- console.warn('[ugly-app] Tunnel disconnected, reconnecting...');
187
- scheduleReconnect(opts);
188
- });
189
- ws.on('error', () => {
190
- // error is always followed by close — handled there
191
- });
192
- }
193
- catch (err) {
194
- if (!resolved) {
195
- resolved = true;
196
- cleanupServers();
197
- reject(err instanceof Error ? err : new Error(String(err)));
198
- }
199
- }
200
- });
201
- }
202
- function handleTextMessage(msg, opts, ws, onReady) {
203
- if (!state)
204
- return;
205
- switch (msg.type) {
206
- case 'ready':
207
- state.connected = true;
208
- state.reconnectDelay = 1000; // Reset backoff only after successful ready handshake
209
- // Register proxy tunnel if vitePort is set
210
- if (opts.vitePort) {
211
- ws.send(JSON.stringify({
212
- type: 'register',
213
- projectId: opts.projectId,
214
- sessionId: opts.sessionId,
215
- }));
216
- }
217
- onReady();
218
- break;
219
- case 'provisioning':
220
- console.log('[ugly-app] Cloud DB being provisioned — first-time setup...');
221
- break;
222
- case 'registered':
223
- state.subdomain = msg.subdomain;
224
- console.log(`\x1b[36m ➜ Tunnel: https://${state.subdomain}.ugly.bot\x1b[0m`);
225
- break;
226
- case 'http-request':
227
- handleHttpRequest(msg, opts, ws);
228
- break;
229
- case 'ws-open':
230
- handleWsOpen(msg, opts, ws);
231
- break;
232
- case 'ws-frame':
233
- handleWsFrame(msg);
234
- break;
235
- case 'ws-close':
236
- handleWsClose(msg);
237
- break;
238
- case 'tunnel:ping':
239
- // Respond to server heartbeat
240
- ws.send(JSON.stringify({ type: 'tunnel:pong' }));
241
- break;
242
- }
243
- }
244
- // ── Proxy tunnel: HTTP relay ────────────────────────────────────────────────
245
- function handleHttpRequest(msg, opts, ws) {
246
- const port = opts.vitePort ?? 5173;
247
- const url = `http://localhost:${port}${msg.url}`;
248
- const headers = { ...msg.headers };
249
- delete headers['host'];
250
- delete headers['accept-encoding'];
251
- const fetchOptions = {
252
- method: msg.method,
253
- headers,
254
- body: msg.body ? Buffer.from(msg.body, 'base64') : undefined,
255
- };
256
- fetch(url, fetchOptions)
257
- .then(async (res) => {
258
- const responseHeaders = {};
259
- res.headers.forEach((value, key) => {
260
- if (!STRIP_RESPONSE_HEADERS.has(key)) {
261
- responseHeaders[key] = value;
262
- }
263
- });
264
- const bodyBuffer = await res.arrayBuffer();
265
- const body = bodyBuffer.byteLength > 0
266
- ? Buffer.from(bodyBuffer).toString('base64')
267
- : undefined;
268
- ws.send(JSON.stringify({
269
- type: 'http-response',
270
- id: msg.id,
271
- status: res.status,
272
- headers: responseHeaders,
273
- body,
274
- }));
275
- })
276
- .catch(() => {
277
- ws.send(JSON.stringify({
278
- type: 'http-response',
279
- id: msg.id,
280
- status: 502,
281
- headers: {},
282
- body: Buffer.from('Local server error').toString('base64'),
283
- }));
284
- });
285
- }
286
- // ── Proxy tunnel: WebSocket relay ───────────────────────────────────────────
287
- function handleWsOpen(msg, opts, ws) {
288
- if (!state)
289
- return;
290
- const port = opts.vitePort ?? 5173;
291
- const url = `ws://localhost:${port}${msg.url}`;
292
- const wsHeaders = { ...msg.headers };
293
- delete wsHeaders['host'];
294
- delete wsHeaders['upgrade'];
295
- delete wsHeaders['connection'];
296
- delete wsHeaders['sec-websocket-key'];
297
- delete wsHeaders['sec-websocket-version'];
298
- delete wsHeaders['sec-websocket-extensions'];
299
- const protocols = msg.headers['sec-websocket-protocol']
300
- ?.split(',')
301
- .map((p) => p.trim())
302
- .filter(Boolean);
303
- const localWs = new WebSocket(url, protocols, { headers: wsHeaders });
304
- localWs.on('open', () => {
305
- if (!state)
306
- return;
307
- state.localWsSockets.set(msg.id, localWs);
308
- ws.send(JSON.stringify({ type: 'ws-open-ok', id: msg.id }));
309
- });
310
- localWs.on('error', () => {
311
- ws.send(JSON.stringify({ type: 'ws-open-error', id: msg.id, status: 502 }));
312
- });
313
- localWs.on('message', (data, isBinary) => {
314
- const encoded = isBinary
315
- ? data.toString('base64')
316
- : data.toString();
317
- ws.send(JSON.stringify({
318
- type: 'ws-frame',
319
- id: msg.id,
320
- data: encoded,
321
- binary: isBinary,
322
- }));
323
- });
324
- localWs.on('close', (code) => {
325
- state?.localWsSockets.delete(msg.id);
326
- ws.send(JSON.stringify({ type: 'ws-close', id: msg.id, code }));
327
- });
328
- }
329
- function handleWsFrame(msg) {
330
- if (!state)
331
- return;
332
- const localWs = state.localWsSockets.get(msg.id);
333
- if (localWs?.readyState !== WebSocket.OPEN)
334
- return;
335
- if (msg.binary) {
336
- localWs.send(Buffer.from(msg.data, 'base64'));
337
- }
338
- else {
339
- localWs.send(msg.data);
340
- }
341
- }
342
- function handleWsClose(msg) {
343
- if (!state)
344
- return;
345
- const localWs = state.localWsSockets.get(msg.id);
346
- if (localWs) {
347
- state.localWsSockets.delete(msg.id);
348
- localWs.close(msg.code ?? 1000);
349
- }
350
- }
351
- // ── Infra tunnel: TCP multiplexing ──────────────────────────────────────────
352
- function cleanupServers() {
353
- if (!state)
354
- return;
355
- for (const server of state.servers.values()) {
356
- server.close();
357
- }
358
- state.servers.clear();
359
- for (const socket of state.streams.values()) {
360
- socket.destroy();
361
- }
362
- state.streams.clear();
363
- for (const localWs of state.localWsSockets.values()) {
364
- localWs.close(1001);
365
- }
366
- state.localWsSockets.clear();
367
- state = null;
368
- }
369
- function scheduleReconnect(opts) {
370
- if (!state || state.stopped || state.reconnectTimer)
371
- return;
372
- state.reconnectTimer = setTimeout(() => {
373
- if (!state || state.stopped)
374
- return;
375
- state.reconnectTimer = null;
376
- state.reconnectDelay = Math.min(state.reconnectDelay * 2, 30_000);
377
- connectWs(opts).then(() => {
378
- console.log('[ugly-app] Tunnel reconnected');
379
- }).catch(() => {
380
- scheduleReconnect(opts);
381
- });
382
- }, state.reconnectDelay);
383
- }
384
- function handleTcpConnection(serviceId, socket) {
385
- if (!state) {
386
- socket.destroy();
387
- return;
388
- }
389
- if (!state.connected || !state.ws) {
390
- console.warn(`[ugly-app] Tunnel reconnecting — rejecting ${SERVICE_NAME[serviceId]} connection`);
391
- socket.destroy();
392
- return;
393
- }
394
- const streamId = state.nextStreamId++;
395
- if (state.nextStreamId > 0xFFFFFFFF) {
396
- state.nextStreamId = 1;
397
- }
398
- state.streams.set(streamId, socket);
399
- const serviceFlags = serviceId << 2;
400
- // Send empty data frame to signal "stream opened"
401
- if (state.ws?.readyState === WebSocket.OPEN) {
402
- state.ws.send(encodeFrame(streamId, serviceFlags, Buffer.alloc(0)));
403
- }
404
- socket.on('data', (chunk) => {
405
- if (state?.ws?.readyState !== WebSocket.OPEN)
406
- return;
407
- const frame = encodeFrame(streamId, serviceFlags, chunk);
408
- state.ws.send(frame);
409
- if (state.ws.bufferedAmount > BACKPRESSURE_THRESHOLD) {
410
- socket.pause();
411
- const checkDrain = () => {
412
- if (!state?.ws)
413
- return;
414
- if (state.ws.bufferedAmount <= BACKPRESSURE_THRESHOLD) {
415
- socket.resume();
416
- }
417
- else {
418
- setTimeout(checkDrain, 50);
419
- }
420
- };
421
- setTimeout(checkDrain, 50);
422
- }
423
- });
424
- socket.on('end', () => {
425
- if (!state)
426
- return;
427
- state.streams.delete(streamId);
428
- if (state.ws?.readyState === WebSocket.OPEN) {
429
- state.ws.send(encodeFrame(streamId, serviceFlags | FLAGS.FIN, Buffer.alloc(0)));
430
- }
431
- });
432
- socket.on('error', () => {
433
- if (!state)
434
- return;
435
- state.streams.delete(streamId);
436
- if (state.ws?.readyState === WebSocket.OPEN) {
437
- state.ws.send(encodeFrame(streamId, serviceFlags | FLAGS.RST, Buffer.alloc(0)));
438
- }
439
- });
440
- socket.on('close', () => {
441
- state?.streams.delete(streamId);
442
- });
443
- }
444
- /** Stop the dev tunnel: close WS, all TCP servers and sockets. */
445
- export function stopDevTunnel() {
446
- if (!state)
447
- return;
448
- state.stopped = true;
449
- if (state.reconnectTimer) {
450
- clearTimeout(state.reconnectTimer);
451
- state.reconnectTimer = null;
452
- }
453
- if (state.ws && state.ws.readyState <= WebSocket.OPEN) {
454
- state.ws.close(1000, 'Dev tunnel stopped');
455
- }
456
- for (const socket of state.streams.values()) {
457
- socket.destroy();
458
- }
459
- state.streams.clear();
460
- for (const server of state.servers.values()) {
461
- server.close();
462
- }
463
- state.servers.clear();
464
- for (const localWs of state.localWsSockets.values()) {
465
- localWs.close(1000);
466
- }
467
- state.localWsSockets.clear();
468
- state = null;
469
- }
470
- //# sourceMappingURL=devTunnel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devTunnel.js","sourceRoot":"","sources":["../../src/cli/devTunnel.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Ensure infrastructure env vars (DATABASE_URL, NATS_URL, etc.) are set.
3
- *
4
- * Starts the sidecar tunnel if env vars are not already present.
5
- * The tunnel connects to ugly.bot (cloud or local depending on UGLY_BOT_LOCAL).
6
- * If not logged in or token expired, auto-triggers the login flow.
7
- */
8
- export declare function ensureInfra(): Promise<void>;
9
- //# sourceMappingURL=ensureInfra.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensureInfra.d.ts","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyEjD"}
@@ -1,86 +0,0 @@
1
- import { getLocalPort } from '../shared/Defaults.js';
2
- import { getUglyBotUrl } from '../shared/uglyBotUrl.js';
3
- import { readAuthToken, readLocalToken } from './authStore.js';
4
- import { readUglyAppConfig } from './uglyappConfig.js';
5
- function isLocal() {
6
- return process.env['UGLY_BOT_LOCAL'] === '1';
7
- }
8
- /**
9
- * Ensure infrastructure env vars (DATABASE_URL, NATS_URL, etc.) are set.
10
- *
11
- * Starts the sidecar tunnel if env vars are not already present.
12
- * The tunnel connects to ugly.bot (cloud or local depending on UGLY_BOT_LOCAL).
13
- * If not logged in or token expired, auto-triggers the login flow.
14
- */
15
- export async function ensureInfra() {
16
- const config = readUglyAppConfig(process.cwd());
17
- // Inject basic config-derived env vars
18
- if (config) {
19
- if (!process.env['NATS_PREFIX'])
20
- process.env['NATS_PREFIX'] = config.projectId;
21
- if (!process.env['STORAGE_KEY_PREFIX'])
22
- process.env['STORAGE_KEY_PREFIX'] = config.projectId;
23
- // Use the right project token for the current mode
24
- // Prefer ~/.ugly-bot/ auth store, fall back to .uglyapp for legacy
25
- const projectToken = isLocal()
26
- ? (readLocalToken(config.projectId) ?? config.localToken)
27
- : (readAuthToken(config.projectId) ?? config.uglyBotToken);
28
- if (projectToken && !process.env['UGLY_BOT_TOKEN']) {
29
- process.env['UGLY_BOT_TOKEN'] = projectToken;
30
- }
31
- }
32
- // If a Postgres URL is already set (e.g. by a parent process, a deploy
33
- // script, or an E2E test), skip the tunnel-bootstrap path. `DATABASE_URL`
34
- // is the canonical name `Pg.ts:getPool()` reads; `POSTGRES_URL` is the
35
- // legacy name kept for older deploys until they migrate.
36
- if (process.env['DATABASE_URL'] || process.env['POSTGRES_URL'])
37
- return;
38
- if (!config) {
39
- throw new Error('[ugly-app] No .uglyapp config found. Run: npx ugly-app init');
40
- }
41
- // Ensure we have valid user auth — auto-trigger login if needed
42
- const { ensureUglyBotAuth } = await import('./uglyBotLogin.js');
43
- const auth = await ensureUglyBotAuth(getUglyBotUrl());
44
- // Ensure we have a valid project token for this mode
45
- const storedToken = isLocal()
46
- ? (readLocalToken(config.projectId) ?? config.localToken)
47
- : (readAuthToken(config.projectId) ?? config.uglyBotToken);
48
- if (!storedToken) {
49
- console.log(`[ugly-app] No project token for ${isLocal() ? 'local' : 'cloud'} — registering...`);
50
- const path = await import('path');
51
- const { runUglyBotSetup } = await import('./uglyBotSetup.js');
52
- await runUglyBotSetup(config.projectId, path.join(process.cwd(), '.uglyapp'));
53
- // Re-read token from auth store (runUglyBotSetup now writes there)
54
- const newToken = isLocal()
55
- ? readLocalToken(config.projectId)
56
- : readAuthToken(config.projectId);
57
- if (newToken) {
58
- process.env['UGLY_BOT_TOKEN'] = newToken;
59
- }
60
- }
61
- const { startDevTunnel } = await import('./devTunnel.js');
62
- // Studio sessions set this so each session's proxy subdomain is unique;
63
- // unset (regular `npm run dev`) keeps the legacy `proxy-{username}-{projectId}` URL.
64
- const sessionId = process.env['UGLY_STUDIO_SESSION_ID'];
65
- const vitePort = getLocalPort();
66
- try {
67
- const ports = await startDevTunnel({ projectId: config.projectId, token: auth.token, vitePort, sessionId });
68
- process.env['NATS_URL'] = `nats://localhost:${ports.nats}`;
69
- }
70
- catch (err) {
71
- const msg = err.message;
72
- if (msg.includes('4001')) {
73
- // Auth failed — force re-login and retry
74
- console.log('[ugly-app] Auth expired, re-authenticating...');
75
- const { runUglyBotLogin } = await import('./uglyBotLogin.js');
76
- const freshAuth = await runUglyBotLogin(getUglyBotUrl());
77
- const ports = await startDevTunnel({ projectId: config.projectId, token: freshAuth.token, vitePort, sessionId });
78
- process.env['NATS_URL'] = `nats://localhost:${ports.nats}`;
79
- process.env['MINIO_ENDPOINT'] = `http://localhost:${ports.s3}`;
80
- }
81
- else {
82
- throw err;
83
- }
84
- }
85
- }
86
- //# sourceMappingURL=ensureInfra.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensureInfra.js","sourceRoot":"","sources":["../../src/cli/ensureInfra.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * sidecar.ts
3
- *
4
- * Local TCP multiplexer that tunnels 5 service ports over a single WSS connection
5
- * to the ugly.bot dev-tunnel endpoint.
6
- */
7
- import type { SidecarPorts } from './sidecarHealth.js';
8
- export interface StartSidecarOpts {
9
- projectId: string;
10
- token: string;
11
- /** Defaults to 'wss://ugly.bot' */
12
- serverUrl?: string;
13
- }
14
- /**
15
- * Start the sidecar: opens WSS tunnel and binds ephemeral TCP ports.
16
- * Returns the actual ports bound.
17
- */
18
- export declare function startSidecar(opts: StartSidecarOpts): Promise<SidecarPorts>;
19
- /** Stop the sidecar: close WS, all TCP servers and sockets. */
20
- export declare function stopSidecar(): void;
21
- //# sourceMappingURL=sidecar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/cli/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUvD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmDhF;AA4ND,+DAA+D;AAC/D,wBAAgB,WAAW,IAAI,IAAI,CAwBlC"}