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,294 +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 net from 'net';
8
- import WebSocket from 'ws';
9
- import { getUglyBotWsUrl } from '../shared/uglyBotUrl.js';
10
- import { SERVICE, SERVICE_NAME, FLAGS, encodeFrame, decodeFrame, } from './sidecarProtocol.js';
11
- const BACKPRESSURE_THRESHOLD = 1024 * 1024; // 1 MB
12
- const SERVICE_LIST = [
13
- SERVICE.POSTGRES,
14
- SERVICE.NATS,
15
- SERVICE.S3,
16
- SERVICE.QDRANT_HTTP,
17
- SERVICE.QDRANT_GRPC,
18
- ];
19
- let state = null;
20
- /**
21
- * Start the sidecar: opens WSS tunnel and binds ephemeral TCP ports.
22
- * Returns the actual ports bound.
23
- */
24
- export async function startSidecar(opts) {
25
- if (state && !state.stopped) {
26
- throw new Error('Sidecar already running');
27
- }
28
- state = {
29
- ws: null,
30
- servers: new Map(),
31
- streams: new Map(),
32
- nextStreamId: 1,
33
- reconnectTimer: null,
34
- reconnectDelay: 1000,
35
- connected: false,
36
- stopped: false,
37
- };
38
- // Create TCP servers for each service on port 0 (ephemeral)
39
- const portResults = new Map();
40
- for (const serviceId of SERVICE_LIST) {
41
- const server = net.createServer((socket) => {
42
- handleTcpConnection(serviceId, socket);
43
- });
44
- await new Promise((resolve, reject) => {
45
- server.listen(0, '127.0.0.1', () => resolve());
46
- server.on('error', reject);
47
- });
48
- const addr = server.address();
49
- portResults.set(serviceId, addr.port);
50
- state.servers.set(serviceId, server);
51
- }
52
- // Connect WebSocket
53
- await connectWs(opts);
54
- const ports = {
55
- postgres: portResults.get(SERVICE.POSTGRES),
56
- nats: portResults.get(SERVICE.NATS),
57
- s3: portResults.get(SERVICE.S3),
58
- qdrantHttp: portResults.get(SERVICE.QDRANT_HTTP),
59
- qdrantGrpc: portResults.get(SERVICE.QDRANT_GRPC),
60
- };
61
- console.log('[ugly-app] Sidecar listening:');
62
- for (const [serviceId, port] of portResults) {
63
- console.log(` ${SERVICE_NAME[serviceId]}: localhost:${port}`);
64
- }
65
- return ports;
66
- }
67
- function connectWs(opts) {
68
- if (!state || state.stopped)
69
- return Promise.resolve();
70
- const serverUrl = opts.serverUrl ?? getUglyBotWsUrl();
71
- return new Promise((resolve, reject) => {
72
- let resolved = false;
73
- try {
74
- const ws = new WebSocket(`${serverUrl}/dev-tunnel`, {
75
- headers: {
76
- 'Authorization': `Bearer ${opts.token}`,
77
- 'X-Project-Id': opts.projectId,
78
- },
79
- });
80
- ws.binaryType = 'nodebuffer';
81
- ws.on('open', () => {
82
- if (!state)
83
- return;
84
- state.ws = ws;
85
- state.reconnectDelay = 1000;
86
- // Don't resolve yet — wait for 'ready' message from server.
87
- // The server needs time to spin up per-client proxy instances.
88
- });
89
- ws.on('message', (data) => {
90
- if (!state)
91
- return;
92
- // Handle JSON control messages (text frames from server)
93
- if (typeof data === 'string' || (Buffer.isBuffer(data) && data[0] === 0x7b /* '{' */)) {
94
- try {
95
- const msg = JSON.parse(typeof data === 'string' ? data : data.toString('utf8'));
96
- if (msg.type === 'ready') {
97
- state.connected = true;
98
- if (!resolved) {
99
- resolved = true;
100
- resolve();
101
- }
102
- }
103
- else if (msg.type === 'provisioning') {
104
- console.log('[ugly-app] Cloud DB being provisioned — first-time setup...');
105
- }
106
- }
107
- catch {
108
- // Not JSON — fall through to binary handling
109
- }
110
- return;
111
- }
112
- // Handle binary tunnel frames
113
- try {
114
- const { streamId, flags, payload } = decodeFrame(Buffer.from(data));
115
- if (flags & FLAGS.RST) {
116
- const socket = state.streams.get(streamId);
117
- if (socket) {
118
- state.streams.delete(streamId);
119
- socket.destroy();
120
- }
121
- return;
122
- }
123
- // Write payload before checking FIN (last data chunk)
124
- if (payload.length > 0) {
125
- const socket = state.streams.get(streamId);
126
- if (socket && !socket.destroyed) {
127
- socket.write(payload);
128
- }
129
- }
130
- if (flags & FLAGS.FIN) {
131
- const socket = state.streams.get(streamId);
132
- if (socket) {
133
- state.streams.delete(streamId);
134
- socket.end();
135
- }
136
- return;
137
- }
138
- }
139
- catch {
140
- // Ignore malformed frames
141
- }
142
- });
143
- ws.on('close', (code) => {
144
- if (!state || state.stopped)
145
- return;
146
- state.connected = false;
147
- state.ws = null;
148
- if (code === 4001) {
149
- console.error('[ugly-app] Auth expired — run `npx ugly-app login` then restart');
150
- }
151
- // RST all active streams
152
- for (const [id, socket] of state.streams) {
153
- socket.destroy();
154
- state.streams.delete(id);
155
- }
156
- if (!resolved) {
157
- // Initial connect failed — clean up and reject
158
- resolved = true;
159
- cleanupServers();
160
- reject(new Error('[ugly-app] Cannot reach ugly.bot — check your connection'));
161
- return;
162
- }
163
- console.warn('[ugly-app] Tunnel disconnected, reconnecting...');
164
- scheduleReconnect(opts);
165
- });
166
- ws.on('error', () => {
167
- // error is always followed by close — handled there
168
- });
169
- }
170
- catch (err) {
171
- if (!resolved) {
172
- resolved = true;
173
- cleanupServers();
174
- reject(err instanceof Error ? err : new Error(String(err)));
175
- }
176
- }
177
- });
178
- }
179
- function cleanupServers() {
180
- if (!state)
181
- return;
182
- for (const server of state.servers.values()) {
183
- server.close();
184
- }
185
- state.servers.clear();
186
- for (const socket of state.streams.values()) {
187
- socket.destroy();
188
- }
189
- state.streams.clear();
190
- state = null;
191
- }
192
- function scheduleReconnect(opts) {
193
- if (!state || state.stopped || state.reconnectTimer)
194
- return;
195
- state.reconnectTimer = setTimeout(() => {
196
- if (!state || state.stopped)
197
- return;
198
- state.reconnectTimer = null;
199
- state.reconnectDelay = Math.min(state.reconnectDelay * 2, 30_000);
200
- connectWs(opts).then(() => {
201
- console.log('[ugly-app] Tunnel reconnected');
202
- }).catch(() => {
203
- scheduleReconnect(opts);
204
- });
205
- }, state.reconnectDelay);
206
- }
207
- function handleTcpConnection(serviceId, socket) {
208
- if (!state) {
209
- socket.destroy();
210
- return;
211
- }
212
- if (!state.connected || !state.ws) {
213
- console.warn(`[ugly-app] Tunnel reconnecting — rejecting ${SERVICE_NAME[serviceId]} connection`);
214
- socket.destroy();
215
- return;
216
- }
217
- const streamId = state.nextStreamId++;
218
- // Wrap around at uint32 max
219
- if (state.nextStreamId > 0xFFFFFFFF) {
220
- state.nextStreamId = 1;
221
- }
222
- state.streams.set(streamId, socket);
223
- const serviceFlags = serviceId << 2;
224
- // Send an empty data frame to signal "stream opened" — the server needs this
225
- // to create the upstream connection. Without it, server-speaks-first protocols
226
- // (NATS INFO, Postgres auth challenge) would hang because the server never
227
- // knows to connect upstream.
228
- if (state.ws?.readyState === WebSocket.OPEN) {
229
- state.ws.send(encodeFrame(streamId, serviceFlags, Buffer.alloc(0)));
230
- }
231
- socket.on('data', (chunk) => {
232
- if (state?.ws?.readyState !== WebSocket.OPEN)
233
- return;
234
- const frame = encodeFrame(streamId, serviceFlags, chunk);
235
- state.ws.send(frame);
236
- // Backpressure: pause this socket if WS buffer is too full
237
- if (state.ws.bufferedAmount > BACKPRESSURE_THRESHOLD) {
238
- socket.pause();
239
- const checkDrain = () => {
240
- if (!state?.ws)
241
- return;
242
- if (state.ws.bufferedAmount <= BACKPRESSURE_THRESHOLD) {
243
- socket.resume();
244
- }
245
- else {
246
- setTimeout(checkDrain, 50);
247
- }
248
- };
249
- setTimeout(checkDrain, 50);
250
- }
251
- });
252
- socket.on('end', () => {
253
- if (!state)
254
- return;
255
- state.streams.delete(streamId);
256
- if (state.ws?.readyState === WebSocket.OPEN) {
257
- state.ws.send(encodeFrame(streamId, serviceFlags | FLAGS.FIN, Buffer.alloc(0)));
258
- }
259
- });
260
- socket.on('error', () => {
261
- if (!state)
262
- return;
263
- state.streams.delete(streamId);
264
- if (state.ws?.readyState === WebSocket.OPEN) {
265
- state.ws.send(encodeFrame(streamId, serviceFlags | FLAGS.RST, Buffer.alloc(0)));
266
- }
267
- });
268
- socket.on('close', () => {
269
- state?.streams.delete(streamId);
270
- });
271
- }
272
- /** Stop the sidecar: close WS, all TCP servers and sockets. */
273
- export function stopSidecar() {
274
- if (!state)
275
- return;
276
- state.stopped = true;
277
- if (state.reconnectTimer) {
278
- clearTimeout(state.reconnectTimer);
279
- state.reconnectTimer = null;
280
- }
281
- if (state.ws && state.ws.readyState <= WebSocket.OPEN) {
282
- state.ws.close(1000, 'Sidecar stopped');
283
- }
284
- for (const socket of state.streams.values()) {
285
- socket.destroy();
286
- }
287
- state.streams.clear();
288
- for (const server of state.servers.values()) {
289
- server.close();
290
- }
291
- state.servers.clear();
292
- state = null;
293
- }
294
- //# sourceMappingURL=sidecar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/cli/sidecar.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /** Ports returned by startSidecar — the actual ephemeral ports bound. */
2
- export interface SidecarPorts {
3
- postgres: number;
4
- nats: number;
5
- s3: number;
6
- qdrantHttp: number;
7
- qdrantGrpc: number;
8
- }
9
- /** Returns true if all sidecar ports accept TCP connections. */
10
- export declare function isSidecarHealthy(ports: SidecarPorts): Promise<boolean>;
11
- /** Poll isSidecarHealthy until all ports are reachable. Throws after retries exhausted. */
12
- export declare function waitForSidecar(ports: SidecarPorts, retries?: number, intervalMs?: number): Promise<void>;
13
- //# sourceMappingURL=sidecarHealth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecarHealth.d.ts","sourceRoot":"","sources":["../../src/cli/sidecarHealth.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD,gEAAgE;AAChE,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAS5E;AAED,2FAA2F;AAC3F,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,SAAK,EACZ,UAAU,SAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,42 +0,0 @@
1
- import net from 'net';
2
- /** Try a TCP connect to a single port. Resolves true if connection succeeds within timeoutMs. */
3
- function checkPort(port, timeoutMs = 2000) {
4
- return new Promise((resolve) => {
5
- const sock = net.createConnection({ port, host: '127.0.0.1' });
6
- const timer = setTimeout(() => {
7
- sock.destroy();
8
- resolve(false);
9
- }, timeoutMs);
10
- sock.once('connect', () => {
11
- clearTimeout(timer);
12
- sock.destroy();
13
- resolve(true);
14
- });
15
- sock.once('error', () => {
16
- clearTimeout(timer);
17
- sock.destroy();
18
- resolve(false);
19
- });
20
- });
21
- }
22
- /** Returns true if all sidecar ports accept TCP connections. */
23
- export async function isSidecarHealthy(ports) {
24
- const results = await Promise.all([
25
- checkPort(ports.postgres),
26
- checkPort(ports.nats),
27
- checkPort(ports.s3),
28
- checkPort(ports.qdrantHttp),
29
- checkPort(ports.qdrantGrpc),
30
- ]);
31
- return results.every(Boolean);
32
- }
33
- /** Poll isSidecarHealthy until all ports are reachable. Throws after retries exhausted. */
34
- export async function waitForSidecar(ports, retries = 15, intervalMs = 500) {
35
- for (let i = 0; i < retries; i++) {
36
- if (await isSidecarHealthy(ports))
37
- return;
38
- await new Promise((r) => setTimeout(r, intervalMs));
39
- }
40
- throw new Error(`[ugly-app] Sidecar not healthy after ${Math.round((retries * intervalMs) / 1000)}s`);
41
- }
42
- //# sourceMappingURL=sidecarHealth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecarHealth.js","sourceRoot":"","sources":["../../src/cli/sidecarHealth.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAWtB,iGAAiG;AACjG,SAAS,SAAS,CAAC,IAAY,EAAE,SAAS,GAAG,IAAI;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAmB;IACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3B,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;KAC5B,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAmB,EACnB,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,GAAG;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,MAAM,gBAAgB,CAAC,KAAK,CAAC;YAAE,OAAO;QAC1C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CACrF,CAAC;AACJ,CAAC"}
@@ -1,41 +0,0 @@
1
- /**
2
- * sidecarProtocol.ts
3
- *
4
- * Wire protocol for the TCP-over-WebSocket multiplexer (sidecar proxy).
5
- *
6
- * Frame layout (5-byte header + payload):
7
- * Bytes 0-3 : streamId (uint32 big-endian)
8
- * Byte 4 : flags
9
- * Bytes 5+ : payload
10
- *
11
- * Flags byte layout:
12
- * bit 0 : FIN
13
- * bit 1 : RST
14
- * bits 2-4 : serviceId (extracted with (flags >> 2) & 0x07)
15
- * bit 5 : WINDOW_UPDATE
16
- */
17
- export declare const SERVICE: {
18
- readonly POSTGRES: 0;
19
- readonly NATS: 1;
20
- readonly S3: 2;
21
- readonly QDRANT_HTTP: 3;
22
- readonly QDRANT_GRPC: 4;
23
- };
24
- export type ServiceId = (typeof SERVICE)[keyof typeof SERVICE];
25
- export declare const FLAGS: {
26
- readonly FIN: 1;
27
- readonly RST: 2;
28
- readonly WINDOW_UPDATE: 32;
29
- };
30
- export declare const SERVICE_NAME: Record<ServiceId, string>;
31
- /** Extract the service identifier from bits 2-4 of the flags byte. Throws on invalid service. */
32
- export declare function serviceFromFlags(flags: number): ServiceId;
33
- /** Encode a frame into a Buffer with a 5-byte header followed by payload. */
34
- export declare function encodeFrame(streamId: number, flags: number, payload: Buffer): Buffer;
35
- /** Decode a frame buffer. Throws if the buffer is shorter than 5 bytes. */
36
- export declare function decodeFrame(buf: Buffer): {
37
- streamId: number;
38
- flags: number;
39
- payload: Buffer;
40
- };
41
- //# sourceMappingURL=sidecarProtocol.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecarProtocol.d.ts","sourceRoot":"","sources":["../../src/cli/sidecarProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,OAAO;;;;;;CAMV,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE/D,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAEX,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMlD,CAAC;AAEF,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAMzD;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKpF;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAQ7F"}
@@ -1,61 +0,0 @@
1
- /**
2
- * sidecarProtocol.ts
3
- *
4
- * Wire protocol for the TCP-over-WebSocket multiplexer (sidecar proxy).
5
- *
6
- * Frame layout (5-byte header + payload):
7
- * Bytes 0-3 : streamId (uint32 big-endian)
8
- * Byte 4 : flags
9
- * Bytes 5+ : payload
10
- *
11
- * Flags byte layout:
12
- * bit 0 : FIN
13
- * bit 1 : RST
14
- * bits 2-4 : serviceId (extracted with (flags >> 2) & 0x07)
15
- * bit 5 : WINDOW_UPDATE
16
- */
17
- export const SERVICE = {
18
- POSTGRES: 0,
19
- NATS: 1,
20
- S3: 2,
21
- QDRANT_HTTP: 3,
22
- QDRANT_GRPC: 4,
23
- };
24
- export const FLAGS = {
25
- FIN: 0x01,
26
- RST: 0x02,
27
- WINDOW_UPDATE: 0x20,
28
- };
29
- export const SERVICE_NAME = {
30
- [SERVICE.POSTGRES]: 'postgres',
31
- [SERVICE.NATS]: 'nats',
32
- [SERVICE.S3]: 's3',
33
- [SERVICE.QDRANT_HTTP]: 'qdrant-http',
34
- [SERVICE.QDRANT_GRPC]: 'qdrant-grpc',
35
- };
36
- /** Extract the service identifier from bits 2-4 of the flags byte. Throws on invalid service. */
37
- export function serviceFromFlags(flags) {
38
- const id = (flags >> 2) & 0x07;
39
- if (id > SERVICE.QDRANT_GRPC) {
40
- throw new Error(`sidecarProtocol: invalid serviceId ${id} in flags byte 0x${flags.toString(16)}`);
41
- }
42
- return id;
43
- }
44
- /** Encode a frame into a Buffer with a 5-byte header followed by payload. */
45
- export function encodeFrame(streamId, flags, payload) {
46
- const header = Buffer.allocUnsafe(5);
47
- header.writeUInt32BE(streamId >>> 0, 0);
48
- header[4] = flags & 0xff;
49
- return Buffer.concat([header, payload]);
50
- }
51
- /** Decode a frame buffer. Throws if the buffer is shorter than 5 bytes. */
52
- export function decodeFrame(buf) {
53
- if (buf.length < 5) {
54
- throw new Error(`sidecarProtocol: buffer too short to decode frame (got ${buf.length} bytes, need at least 5)`);
55
- }
56
- const streamId = buf.readUInt32BE(0);
57
- const flags = buf[4];
58
- const payload = buf.subarray(5);
59
- return { streamId, flags, payload };
60
- }
61
- //# sourceMappingURL=sidecarProtocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidecarProtocol.js","sourceRoot":"","sources":["../../src/cli/sidecarProtocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,EAAE,EAAE,CAAC;IACL,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;CACN,CAAC;AAIX,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,aAAa,EAAE,IAAI;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAA8B;IACrD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC9B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI;IAClB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa;IACpC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa;CACrC,CAAC;AAEF,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,EAAE,oBAAoB,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,EAAe,CAAC;AACzB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAe;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACzB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0DAA0D,GAAG,CAAC,MAAM,0BAA0B,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
@@ -1,10 +0,0 @@
1
- import type { Plugin } from 'vite';
2
- /**
3
- * Vite plugin for ugly-app dev mode.
4
- *
5
- * The tunnel relay (HTTP/WS proxy for public dev URLs) has been moved to
6
- * devTunnel.ts in the CLI process. This plugin now only provides Vite
7
- * config optimizations for linked packages.
8
- */
9
- export declare function tunnelPlugin(): Plugin;
10
- //# sourceMappingURL=tunnelPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnelPlugin.d.ts","sourceRoot":"","sources":["../../src/vite/tunnelPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsBrC"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Vite plugin for ugly-app dev mode.
3
- *
4
- * The tunnel relay (HTTP/WS proxy for public dev URLs) has been moved to
5
- * devTunnel.ts in the CLI process. This plugin now only provides Vite
6
- * config optimizations for linked packages.
7
- */
8
- export function tunnelPlugin() {
9
- return {
10
- name: 'ugly-app-tunnel',
11
- apply: 'serve',
12
- config() {
13
- // Each module served through the tunnel is a separate HTTP request
14
- // relayed via WebSocket. Vite excludes linked (file:) packages from
15
- // dep optimization, serving every sub-module individually — this can
16
- // easily exceed 100 requests per page load. Force linked deps into
17
- // the optimization bundle so they become a single request each.
18
- return {
19
- optimizeDeps: {
20
- include: [
21
- 'ugly-app',
22
- 'ugly-app/client',
23
- 'ugly-app/shared',
24
- ],
25
- },
26
- };
27
- },
28
- };
29
- }
30
- //# sourceMappingURL=tunnelPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnelPlugin.js","sourceRoot":"","sources":["../../src/vite/tunnelPlugin.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,OAAO;QAEd,MAAM;YACJ,mEAAmE;YACnE,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,gEAAgE;YAChE,OAAO;gBACL,YAAY,EAAE;oBACZ,OAAO,EAAE;wBACP,UAAU;wBACV,iBAAiB;wBACjB,iBAAiB;qBAClB;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}