tinbase 0.9.0 → 0.10.1
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/README.md +10 -9
- package/dist/admin/api.d.ts +62 -1
- package/dist/admin/api.js +209 -10
- package/dist/admin/api.js.map +1 -1
- package/dist/admin/ui.d.ts +1 -1
- package/dist/admin/ui.js +1548 -16
- package/dist/admin/ui.js.map +1 -1
- package/dist/auth/handler.d.ts +52 -5
- package/dist/auth/handler.js +147 -36
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/inbox.d.ts +4 -2
- package/dist/auth/inbox.js +1 -0
- package/dist/auth/inbox.js.map +1 -1
- package/dist/auth/oauth.d.ts +30 -4
- package/dist/auth/oauth.js +22 -6
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/password.d.ts +5 -0
- package/dist/auth/password.js +7 -0
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/qr.d.ts +1 -1
- package/dist/auth/qr.js +1 -1
- package/dist/auth/rate-limit.d.ts +33 -0
- package/dist/auth/rate-limit.js +63 -0
- package/dist/auth/rate-limit.js.map +1 -0
- package/dist/auth/redirect.d.ts +20 -0
- package/dist/auth/redirect.js +79 -0
- package/dist/auth/redirect.js.map +1 -0
- package/dist/auth/settings.d.ts +55 -0
- package/dist/auth/settings.js +116 -0
- package/dist/auth/settings.js.map +1 -0
- package/dist/auth/totp.js +1 -1
- package/dist/cli.js +66 -30
- package/dist/cli.js.map +1 -1
- package/dist/cron/service.d.ts +15 -2
- package/dist/cron/service.js +19 -2
- package/dist/cron/service.js.map +1 -1
- package/dist/db/bootstrap.d.ts +13 -6
- package/dist/db/bootstrap.js +26 -5
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/db/database.d.ts +61 -3
- package/dist/db/database.js +72 -9
- package/dist/db/database.js.map +1 -1
- package/dist/db/emulated.d.ts +39 -2
- package/dist/db/emulated.js +39 -23
- package/dist/db/emulated.js.map +1 -1
- package/dist/db/engine.d.ts +19 -5
- package/dist/db/engine.js +4 -2
- package/dist/db/engine.js.map +1 -1
- package/dist/db/inspect.d.ts +6 -1
- package/dist/db/inspect.js +2 -1
- package/dist/db/inspect.js.map +1 -1
- package/dist/db/pglite-engine.d.ts +7 -1
- package/dist/db/pglite-engine.js +7 -1
- package/dist/db/pglite-engine.js.map +1 -1
- package/dist/db/pgmem-engine.d.ts +9 -3
- package/dist/db/pgmem-engine.js +13 -7
- package/dist/db/pgmem-engine.js.map +1 -1
- package/dist/db/schema-diff.d.ts +9 -1
- package/dist/db/schema-diff.js +19 -5
- package/dist/db/schema-diff.js.map +1 -1
- package/dist/db/sql-compat.d.ts +2 -2
- package/dist/db/sql-compat.js +2 -2
- package/dist/functions/deno-shim.d.ts +6 -17
- package/dist/functions/deno-shim.js +42 -10
- package/dist/functions/deno-shim.js.map +1 -1
- package/dist/functions/handler.d.ts +9 -4
- package/dist/functions/handler.js +9 -1
- package/dist/functions/handler.js.map +1 -1
- package/dist/gen-types.d.ts +6 -1
- package/dist/gen-types.js +53 -41
- package/dist/gen-types.js.map +1 -1
- package/dist/index.d.ts +33 -3
- package/dist/index.js +170 -30
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +4 -1
- package/dist/jwt.js +4 -2
- package/dist/jwt.js.map +1 -1
- package/dist/log-buffer.d.ts +7 -1
- package/dist/log-buffer.js +3 -0
- package/dist/log-buffer.js.map +1 -1
- package/dist/net/service.d.ts +35 -6
- package/dist/net/service.js +72 -17
- package/dist/net/service.js.map +1 -1
- package/dist/node/bun-server.d.ts +2 -1
- package/dist/node/bun-server.js +11 -1
- package/dist/node/bun-server.js.map +1 -1
- package/dist/node/bundle-function.d.ts +1 -1
- package/dist/node/bundle-function.js +1 -1
- package/dist/node/config-toml.d.ts +31 -0
- package/dist/node/config-toml.js +186 -0
- package/dist/node/config-toml.js.map +1 -0
- package/dist/node/db-diff.d.ts +13 -1
- package/dist/node/db-diff.js +3 -1
- package/dist/node/db-diff.js.map +1 -1
- package/dist/node/fs-driver.d.ts +16 -1
- package/dist/node/fs-driver.js +20 -1
- package/dist/node/fs-driver.js.map +1 -1
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/load-config.d.ts +80 -0
- package/dist/node/load-config.js +230 -0
- package/dist/node/load-config.js.map +1 -0
- package/dist/node/load-functions.d.ts +17 -2
- package/dist/node/load-functions.js +17 -4
- package/dist/node/load-functions.js.map +1 -1
- package/dist/node/native/database-url.d.ts +25 -0
- package/dist/node/native/database-url.js +38 -0
- package/dist/node/native/database-url.js.map +1 -0
- package/dist/node/native/engine.d.ts +7 -0
- package/dist/node/native/engine.js +63 -85
- package/dist/node/native/engine.js.map +1 -1
- package/dist/node/native/wire-engine.d.ts +16 -0
- package/dist/node/native/wire-engine.js +83 -0
- package/dist/node/native/wire-engine.js.map +1 -0
- package/dist/node/native/wire.d.ts +25 -8
- package/dist/node/native/wire.js +130 -15
- package/dist/node/native/wire.js.map +1 -1
- package/dist/node/project.d.ts +15 -1
- package/dist/node/project.js +19 -7
- package/dist/node/project.js.map +1 -1
- package/dist/node/server-shared.d.ts +4 -1
- package/dist/node/server.d.ts +11 -0
- package/dist/node/server.js +11 -0
- package/dist/node/server.js.map +1 -1
- package/dist/node/ws.d.ts +26 -1
- package/dist/node/ws.js +26 -3
- package/dist/node/ws.js.map +1 -1
- package/dist/realtime/engine.d.ts +6 -0
- package/dist/realtime/engine.js +45 -34
- package/dist/realtime/engine.js.map +1 -1
- package/dist/rest/build.d.ts +44 -1
- package/dist/rest/build.js +96 -10
- package/dist/rest/build.js.map +1 -1
- package/dist/rest/errors.d.ts +8 -0
- package/dist/rest/errors.js +12 -1
- package/dist/rest/errors.js.map +1 -1
- package/dist/rest/handler.d.ts +17 -1
- package/dist/rest/handler.js +125 -10
- package/dist/rest/handler.js.map +1 -1
- package/dist/rest/parse.d.ts +26 -1
- package/dist/rest/parse.js +29 -2
- package/dist/rest/parse.js.map +1 -1
- package/dist/retention/service.d.ts +3 -0
- package/dist/retention/service.js +3 -1
- package/dist/retention/service.js.map +1 -1
- package/dist/security.d.ts +22 -0
- package/dist/security.js +47 -0
- package/dist/security.js.map +1 -0
- package/dist/storage/driver.d.ts +8 -1
- package/dist/storage/driver.js +4 -1
- package/dist/storage/driver.js.map +1 -1
- package/dist/storage/handler.d.ts +20 -1
- package/dist/storage/handler.js +272 -16
- package/dist/storage/handler.js.map +1 -1
- package/dist/types.d.ts +84 -1
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -1
- package/dist/webhooks/service.d.ts +25 -2
- package/dist/webhooks/service.js +21 -3
- package/dist/webhooks/service.js.map +1 -1
- package/package.json +5 -3
package/dist/node/native/wire.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Minimal Postgres wire-protocol (v3) client
|
|
3
|
-
* trust
|
|
4
|
-
* LISTEN/NOTIFY. Pure Node, no
|
|
2
|
+
* Minimal Postgres wire-protocol (v3) client - enough for tinbase's needs:
|
|
3
|
+
* trust (unix socket), cleartext/md5/SCRAM-SHA-256 auth (external TCP),
|
|
4
|
+
* simple + extended queries, typed decoding, LISTEN/NOTIFY. Pure Node, no deps.
|
|
5
5
|
*/
|
|
6
6
|
import { createConnection } from 'node:net';
|
|
7
|
+
import { createHash, createHmac, pbkdf2Sync, randomBytes } from 'node:crypto';
|
|
8
|
+
/** Error raised from a Postgres ErrorResponse, carrying its structured fields. */
|
|
7
9
|
export class PgWireError extends Error {
|
|
10
|
+
/** SQLSTATE code (ErrorResponse field 'C') */
|
|
8
11
|
code;
|
|
12
|
+
/** human-readable detail line (field 'D') */
|
|
9
13
|
detail;
|
|
14
|
+
/** suggested fix, if the server sent one (field 'H') */
|
|
10
15
|
hint;
|
|
16
|
+
/** severity level, e.g. ERROR / FATAL (field 'S') */
|
|
11
17
|
severity;
|
|
12
18
|
constructor(fields) {
|
|
13
19
|
super(fields.get('M') ?? 'postgres error');
|
|
@@ -17,13 +23,16 @@ export class PgWireError extends Error {
|
|
|
17
23
|
this.severity = fields.get('S');
|
|
18
24
|
}
|
|
19
25
|
}
|
|
26
|
+
/** A single Postgres connection speaking the v3 wire protocol; one op at a time, queued. */
|
|
20
27
|
export class PgWireClient {
|
|
21
28
|
socket;
|
|
22
29
|
buffer = Buffer.alloc(0);
|
|
23
30
|
pending = null;
|
|
24
31
|
queue = Promise.resolve();
|
|
25
32
|
closed = false;
|
|
33
|
+
/** invoked for each NOTIFY on a LISTENed channel; set by the caller before listening */
|
|
26
34
|
onNotification = null;
|
|
35
|
+
/** Open a connection and complete the auth + startup handshake before resolving. */
|
|
27
36
|
static async connect(opts) {
|
|
28
37
|
const client = new PgWireClient();
|
|
29
38
|
await client.open(opts);
|
|
@@ -53,6 +62,17 @@ export class PgWireClient {
|
|
|
53
62
|
body.copy(msg, 8);
|
|
54
63
|
this.socket.write(msg);
|
|
55
64
|
});
|
|
65
|
+
// SCRAM handshake state, carried across the SASL message exchange
|
|
66
|
+
let clientNonce = '';
|
|
67
|
+
let clientFirstBare = '';
|
|
68
|
+
let serverSignature = '';
|
|
69
|
+
const needPassword = () => {
|
|
70
|
+
if (opts.password == null) {
|
|
71
|
+
reject(new Error('the server requested a password but none was provided'));
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
};
|
|
56
76
|
// Startup phase: consume until first ReadyForQuery
|
|
57
77
|
const startupHandler = (chunk) => {
|
|
58
78
|
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
@@ -60,10 +80,71 @@ export class PgWireClient {
|
|
|
60
80
|
while ((msg = this.nextMessage()) !== null) {
|
|
61
81
|
const [type, payload] = msg;
|
|
62
82
|
if (type === 0x52) {
|
|
63
|
-
// Authentication
|
|
83
|
+
// Authentication request
|
|
64
84
|
const code = payload.readInt32BE(0);
|
|
65
|
-
if (code
|
|
66
|
-
|
|
85
|
+
if (code === 0) {
|
|
86
|
+
// AuthenticationOk — proceed to ReadyForQuery
|
|
87
|
+
}
|
|
88
|
+
else if (code === 3) {
|
|
89
|
+
// cleartext password
|
|
90
|
+
if (!needPassword())
|
|
91
|
+
return;
|
|
92
|
+
this.socket.write(message(0x70, cstring(opts.password)));
|
|
93
|
+
}
|
|
94
|
+
else if (code === 5) {
|
|
95
|
+
// md5 password: 'md5' + md5(md5(password + user) + salt)
|
|
96
|
+
if (!needPassword())
|
|
97
|
+
return;
|
|
98
|
+
const salt = payload.subarray(4, 8);
|
|
99
|
+
const inner = md5Hex(Buffer.from(opts.password + opts.user, 'utf8'));
|
|
100
|
+
const token = 'md5' + md5Hex(Buffer.concat([Buffer.from(inner, 'utf8'), salt]));
|
|
101
|
+
this.socket.write(message(0x70, cstring(token)));
|
|
102
|
+
}
|
|
103
|
+
else if (code === 10) {
|
|
104
|
+
// SASL: choose SCRAM-SHA-256
|
|
105
|
+
if (!needPassword())
|
|
106
|
+
return;
|
|
107
|
+
const mechs = payload.subarray(4).toString('utf8').split('\0').filter(Boolean);
|
|
108
|
+
if (!mechs.includes('SCRAM-SHA-256')) {
|
|
109
|
+
reject(new Error(`no supported SASL mechanism (server offered: ${mechs.join(', ')})`));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
clientNonce = randomBytes(18).toString('base64');
|
|
113
|
+
clientFirstBare = `n=,r=${clientNonce}`;
|
|
114
|
+
const initial = Buffer.from(`n,,${clientFirstBare}`, 'utf8');
|
|
115
|
+
this.socket.write(message(0x70, Buffer.concat([cstring('SCRAM-SHA-256'), int32(initial.length), initial])));
|
|
116
|
+
}
|
|
117
|
+
else if (code === 11) {
|
|
118
|
+
// SASLContinue: server-first-message (r=nonce,s=salt,i=iterations)
|
|
119
|
+
const serverFirst = payload.subarray(4).toString('utf8');
|
|
120
|
+
const attrs = scramAttrs(serverFirst);
|
|
121
|
+
if (!attrs.r?.startsWith(clientNonce)) {
|
|
122
|
+
reject(new Error('SCRAM: server nonce does not extend client nonce'));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const salt = Buffer.from(attrs.s, 'base64');
|
|
126
|
+
const iterations = parseInt(attrs.i, 10);
|
|
127
|
+
const saltedPassword = pbkdf2Sync(opts.password, salt, iterations, 32, 'sha256');
|
|
128
|
+
const clientKey = hmac(saltedPassword, 'Client Key');
|
|
129
|
+
const storedKey = sha256(clientKey);
|
|
130
|
+
const finalNoProof = `c=biws,r=${attrs.r}`;
|
|
131
|
+
const authMessage = `${clientFirstBare},${serverFirst},${finalNoProof}`;
|
|
132
|
+
const clientSignature = hmac(storedKey, authMessage);
|
|
133
|
+
const proof = xorBuffers(clientKey, clientSignature);
|
|
134
|
+
serverSignature = hmac(hmac(saltedPassword, 'Server Key'), authMessage).toString('base64');
|
|
135
|
+
const clientFinal = `${finalNoProof},p=${proof.toString('base64')}`;
|
|
136
|
+
this.socket.write(message(0x70, Buffer.from(clientFinal, 'utf8')));
|
|
137
|
+
}
|
|
138
|
+
else if (code === 12) {
|
|
139
|
+
// SASLFinal: verify the server signature (v=...)
|
|
140
|
+
const v = scramAttrs(payload.subarray(4).toString('utf8')).v;
|
|
141
|
+
if (v && serverSignature && v !== serverSignature) {
|
|
142
|
+
reject(new Error('SCRAM: server signature verification failed'));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
reject(new Error(`unsupported auth method ${code}`));
|
|
67
148
|
return;
|
|
68
149
|
}
|
|
69
150
|
}
|
|
@@ -81,7 +162,7 @@ export class PgWireClient {
|
|
|
81
162
|
resolve();
|
|
82
163
|
return;
|
|
83
164
|
}
|
|
84
|
-
// ParameterStatus (S), BackendKeyData (K), NoticeResponse (N)
|
|
165
|
+
// ParameterStatus (S), BackendKeyData (K), NoticeResponse (N) - ignore
|
|
85
166
|
}
|
|
86
167
|
};
|
|
87
168
|
this.socket.on('data', startupHandler);
|
|
@@ -98,7 +179,7 @@ export class PgWireClient {
|
|
|
98
179
|
this.queue = op.catch(() => { });
|
|
99
180
|
return op;
|
|
100
181
|
}
|
|
101
|
-
/** Simple query protocol
|
|
182
|
+
/** Simple query protocol - supports multiple statements. */
|
|
102
183
|
async exec(sql) {
|
|
103
184
|
return this.run(() => this.socket.write(message(0x51, cstring(sql))));
|
|
104
185
|
}
|
|
@@ -125,6 +206,7 @@ export class PgWireClient {
|
|
|
125
206
|
});
|
|
126
207
|
return (results[0] ?? { rows: [] });
|
|
127
208
|
}
|
|
209
|
+
/** Send Terminate and end the socket; a no-op once already closed. */
|
|
128
210
|
close() {
|
|
129
211
|
return new Promise((resolve) => {
|
|
130
212
|
if (this.closed)
|
|
@@ -192,7 +274,7 @@ export class PgWireClient {
|
|
|
192
274
|
break;
|
|
193
275
|
}
|
|
194
276
|
case 0x43: {
|
|
195
|
-
// CommandComplete
|
|
277
|
+
// CommandComplete - tag like "INSERT 0 5" / "UPDATE 3" / "SELECT 2"
|
|
196
278
|
if (!p)
|
|
197
279
|
break;
|
|
198
280
|
const tag = payload.toString('utf8', 0, payload.length - 1);
|
|
@@ -209,7 +291,7 @@ export class PgWireClient {
|
|
|
209
291
|
break;
|
|
210
292
|
}
|
|
211
293
|
case 0x45: {
|
|
212
|
-
// ErrorResponse
|
|
294
|
+
// ErrorResponse - final resolution happens at ReadyForQuery
|
|
213
295
|
if (p)
|
|
214
296
|
p.error = new PgWireError(parseErrorFields(payload));
|
|
215
297
|
break;
|
|
@@ -225,7 +307,7 @@ export class PgWireClient {
|
|
|
225
307
|
break;
|
|
226
308
|
}
|
|
227
309
|
case 0x5a: {
|
|
228
|
-
// ReadyForQuery
|
|
310
|
+
// ReadyForQuery - op finished
|
|
229
311
|
if (!p)
|
|
230
312
|
break;
|
|
231
313
|
this.pending = null;
|
|
@@ -239,12 +321,32 @@ export class PgWireClient {
|
|
|
239
321
|
break;
|
|
240
322
|
}
|
|
241
323
|
// ParseComplete (1), BindComplete (2), NoData (n), EmptyQueryResponse (I),
|
|
242
|
-
// NoticeResponse (N), ParameterStatus (S)
|
|
324
|
+
// NoticeResponse (N), ParameterStatus (S) - ignored
|
|
243
325
|
}
|
|
244
326
|
}
|
|
245
327
|
}
|
|
246
328
|
}
|
|
247
329
|
// ── helpers ───────────────────────────────────────────────────────────────
|
|
330
|
+
// ── auth helpers ──
|
|
331
|
+
const hmac = (key, data) => createHmac('sha256', key).update(data, 'utf8').digest();
|
|
332
|
+
const sha256 = (b) => createHash('sha256').update(b).digest();
|
|
333
|
+
const md5Hex = (b) => createHash('md5').update(b).digest('hex');
|
|
334
|
+
function xorBuffers(a, b) {
|
|
335
|
+
const out = Buffer.alloc(a.length);
|
|
336
|
+
for (let i = 0; i < a.length; i++)
|
|
337
|
+
out[i] = a[i] ^ b[i];
|
|
338
|
+
return out;
|
|
339
|
+
}
|
|
340
|
+
/** Parse SCRAM attribute strings like `r=…,s=…,i=…` into a map. */
|
|
341
|
+
function scramAttrs(s) {
|
|
342
|
+
const out = {};
|
|
343
|
+
for (const part of s.split(',')) {
|
|
344
|
+
const eq = part.indexOf('=');
|
|
345
|
+
if (eq > 0)
|
|
346
|
+
out[part.slice(0, eq)] = part.slice(eq + 1);
|
|
347
|
+
}
|
|
348
|
+
return out;
|
|
349
|
+
}
|
|
248
350
|
function message(type, body) {
|
|
249
351
|
const out = Buffer.alloc(5 + body.length);
|
|
250
352
|
out[0] = type;
|
|
@@ -275,11 +377,17 @@ function parseErrorFields(payload) {
|
|
|
275
377
|
return fields;
|
|
276
378
|
}
|
|
277
379
|
/** Decode a text-format value by type OID to match PGlite's JS types. */
|
|
278
|
-
function decodeValue(text, oid) {
|
|
380
|
+
export function decodeValue(text, oid) {
|
|
279
381
|
switch (oid) {
|
|
280
382
|
case 16: // bool
|
|
281
383
|
return text === 't';
|
|
282
|
-
case 20:
|
|
384
|
+
case 20: {
|
|
385
|
+
// int8: values beyond 2^53 lose precision as a JS number - return the
|
|
386
|
+
// string in that range (matching node-postgres' default) so large ids
|
|
387
|
+
// (snowflake, long-lived pgmq msg_ids) survive intact.
|
|
388
|
+
const n = Number(text);
|
|
389
|
+
return Number.isSafeInteger(n) ? n : text;
|
|
390
|
+
}
|
|
283
391
|
case 21: // int2
|
|
284
392
|
case 23: // int4
|
|
285
393
|
case 26: // oid
|
|
@@ -302,8 +410,15 @@ function decodeValue(text, oid) {
|
|
|
302
410
|
case 1000: // _bool
|
|
303
411
|
return parsePgArray(text).map((v) => v === 't');
|
|
304
412
|
case 1007: // _int4
|
|
305
|
-
case 1016: // _int8
|
|
306
413
|
return parsePgArray(text).map((v) => (v === null ? null : Number(v)));
|
|
414
|
+
case 1016: // _int8: preserve values beyond 2^53 as strings, matching the scalar int8 case
|
|
415
|
+
return parsePgArray(text).map((v) => {
|
|
416
|
+
if (v === null)
|
|
417
|
+
return null;
|
|
418
|
+
const n = Number(v);
|
|
419
|
+
return Number.isSafeInteger(n) ? n : v;
|
|
420
|
+
});
|
|
421
|
+
case 1003: // _name (e.g. array_agg over pg_enum.enumlabel / catalog name columns)
|
|
307
422
|
case 1009: // _text
|
|
308
423
|
case 1015: // _varchar
|
|
309
424
|
return parsePgArray(text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/node/native/wire.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/node/native/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/node/project.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import type { MigrationFile } from '../types.js';
|
|
2
|
+
/** Migrations and optional seed SQL discovered under a project's supabase/ dir. */
|
|
2
3
|
export interface SupabaseProject {
|
|
4
|
+
/** Migrations in filename order (timestamp-prefixed, so lexical == chronological). */
|
|
3
5
|
migrations: MigrationFile[];
|
|
6
|
+
/** Concatenated seed files, if any were found and seeding is enabled. */
|
|
4
7
|
seedSql?: string;
|
|
5
8
|
}
|
|
6
|
-
|
|
9
|
+
/** Seed config from config.toml [db.seed] (enabled + explicit file paths). */
|
|
10
|
+
export interface SeedOptions {
|
|
11
|
+
/** whether seeding runs; only `false` disables it (undefined means enabled) */
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
/** Files relative to supabase/, applied in order. Defaults to ['seed.sql']. Globs are not expanded. */
|
|
14
|
+
paths?: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read supabase/migrations/*.sql (sorted) and, unless disabled, the configured
|
|
18
|
+
* seed files. A missing migrations dir or seed file is not an error.
|
|
19
|
+
*/
|
|
20
|
+
export declare function loadSupabaseProject(projectDir: string, seed?: SeedOptions): Promise<SupabaseProject>;
|
package/dist/node/project.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/** Loads migrations + seed following Supabase CLI conventions (supabase/ dir). */
|
|
2
2
|
import { readdir, readFile } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Read supabase/migrations/*.sql (sorted) and, unless disabled, the configured
|
|
6
|
+
* seed files. A missing migrations dir or seed file is not an error.
|
|
7
|
+
*/
|
|
8
|
+
export async function loadSupabaseProject(projectDir, seed = {}) {
|
|
5
9
|
const migrationsDir = join(projectDir, 'supabase', 'migrations');
|
|
6
10
|
const migrations = [];
|
|
7
11
|
let entries = [];
|
|
@@ -9,7 +13,7 @@ export async function loadSupabaseProject(projectDir) {
|
|
|
9
13
|
entries = await readdir(migrationsDir);
|
|
10
14
|
}
|
|
11
15
|
catch {
|
|
12
|
-
// no migrations directory
|
|
16
|
+
// no migrations directory - that's fine
|
|
13
17
|
}
|
|
14
18
|
for (const entry of entries.sort()) {
|
|
15
19
|
if (!entry.endsWith('.sql'))
|
|
@@ -18,11 +22,19 @@ export async function loadSupabaseProject(projectDir) {
|
|
|
18
22
|
migrations.push({ name: entry.replace(/\.sql$/, ''), sql });
|
|
19
23
|
}
|
|
20
24
|
let seedSql;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
if (seed.enabled !== false) {
|
|
26
|
+
const paths = (seed.paths ?? ['seed.sql']).filter((p) => !/[*?[\]]/.test(p)); // globs unsupported; skip them
|
|
27
|
+
const parts = [];
|
|
28
|
+
for (const rel of paths) {
|
|
29
|
+
try {
|
|
30
|
+
parts.push(await readFile(join(projectDir, 'supabase', rel), 'utf8'));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// missing seed file - skip
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (parts.length)
|
|
37
|
+
seedSql = parts.join('\n');
|
|
26
38
|
}
|
|
27
39
|
return { migrations, seedSql };
|
|
28
40
|
}
|
package/dist/node/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/node/project.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/node/project.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAmBhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,OAAoB,EAAE;IAClF,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IAChE,MAAM,UAAU,GAAoB,EAAE,CAAA;IAEtC,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAQ;QACrC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;QAC9D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,OAA2B,CAAA;IAC/B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,+BAA+B;QAC5G,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;AAChC,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
/** Backend shape shared by the node:http and Bun servers, keeping each decoupled from the full backend. */
|
|
1
2
|
import type { RealtimeEngine } from '../realtime/engine.js';
|
|
2
|
-
/** The slice of a backend that servers need
|
|
3
|
+
/** The slice of a backend that servers need - keeps bun/node servers decoupled. */
|
|
3
4
|
export interface SupaliteBackendShape {
|
|
5
|
+
/** HTTP request handler; the server forwards every non-upgrade request here */
|
|
4
6
|
fetch: (req: Request) => Promise<Response>;
|
|
7
|
+
/** realtime engine the server hands accepted websocket connections to */
|
|
5
8
|
realtime: RealtimeEngine;
|
|
6
9
|
}
|
package/dist/node/server.d.ts
CHANGED
|
@@ -7,14 +7,25 @@ import type { TinbaseBackend } from '../index.js';
|
|
|
7
7
|
* tinbase instance already running) instead of crashing with EADDRINUSE.
|
|
8
8
|
*/
|
|
9
9
|
export declare function findAvailablePort(startPort: number, host?: string, maxTries?: number): Promise<number | null>;
|
|
10
|
+
/** Options for {@link serve}. */
|
|
10
11
|
export interface ServeOptions {
|
|
12
|
+
/** Port to bind. Defaults to 54321. */
|
|
11
13
|
port?: number;
|
|
14
|
+
/** Host to bind. Defaults to 127.0.0.1 (loopback only). */
|
|
12
15
|
host?: string;
|
|
13
16
|
}
|
|
17
|
+
/** A bound HTTP server plus its resolved address and a graceful shutdown hook. */
|
|
14
18
|
export interface RunningServer {
|
|
15
19
|
server: Server;
|
|
20
|
+
/** The actually-bound port (may differ from the requested one when 0 is passed). */
|
|
16
21
|
port: number;
|
|
17
22
|
url: string;
|
|
18
23
|
close: () => Promise<void>;
|
|
19
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Bind an HTTP server that dispatches requests to `backend.fetch` and upgrades
|
|
27
|
+
* `/realtime/v1` WebSocket handshakes into realtime sessions.
|
|
28
|
+
*
|
|
29
|
+
* @throws if the port is already in use (EADDRINUSE) or binding otherwise fails.
|
|
30
|
+
*/
|
|
20
31
|
export declare function serve(backend: TinbaseBackend, opts?: ServeOptions): Promise<RunningServer>;
|
package/dist/node/server.js
CHANGED
|
@@ -23,6 +23,12 @@ export async function findAvailablePort(startPort, host = '127.0.0.1', maxTries
|
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Bind an HTTP server that dispatches requests to `backend.fetch` and upgrades
|
|
28
|
+
* `/realtime/v1` WebSocket handshakes into realtime sessions.
|
|
29
|
+
*
|
|
30
|
+
* @throws if the port is already in use (EADDRINUSE) or binding otherwise fails.
|
|
31
|
+
*/
|
|
26
32
|
export async function serve(backend, opts = {}) {
|
|
27
33
|
const host = opts.host ?? '127.0.0.1';
|
|
28
34
|
const server = createServer(async (req, res) => {
|
|
@@ -83,6 +89,11 @@ async function toRequest(req, fallbackHost) {
|
|
|
83
89
|
else
|
|
84
90
|
headers.set(key, value);
|
|
85
91
|
}
|
|
92
|
+
// Expose the connecting client's address to the fetch handler (rate limiting)
|
|
93
|
+
// without trusting a client-supplied x-forwarded-for header.
|
|
94
|
+
const remote = req.socket.remoteAddress;
|
|
95
|
+
if (remote)
|
|
96
|
+
headers.set('x-tinbase-remote-addr', remote);
|
|
86
97
|
let body;
|
|
87
98
|
if (method !== 'GET' && method !== 'HEAD') {
|
|
88
99
|
const chunks = [];
|
package/dist/node/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/node/server.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAA;AAChG,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzC,wDAAwD;AACxD,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB,EAAE,IAAI,GAAG,WAAW,EAAE,QAAQ,GAAG,EAAE;IAC1F,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,IAAI,MAAM,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/node/server.ts"],"names":[],"mappings":"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"}
|
package/dist/node/ws.d.ts
CHANGED
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
import type { IncomingMessage } from 'node:http';
|
|
2
2
|
import type { Duplex } from 'node:stream';
|
|
3
3
|
import type { RealtimeSocketLike } from '../realtime/engine.js';
|
|
4
|
+
/** Returned by {@link decodeFrame} when a frame declares a payload larger than {@link MAX_FRAME_BYTES}. */
|
|
5
|
+
export declare const FRAME_TOO_LARGE: unique symbol;
|
|
6
|
+
/** A live socket. Callbacks are assigned by the realtime session after accept. */
|
|
4
7
|
export interface WsConnection extends RealtimeSocketLike {
|
|
8
|
+
/** invoked per decoded inbound message frame; null until the session wires it up */
|
|
5
9
|
onMessage: ((data: string | Uint8Array) => void) | null;
|
|
10
|
+
/** invoked once when the socket closes; null until the session wires it up */
|
|
6
11
|
onClose: (() => void) | null;
|
|
7
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Complete the RFC 6455 handshake on an http upgrade and return a connection
|
|
15
|
+
* that decodes inbound frames and encodes outbound ones. Returns null (and
|
|
16
|
+
* writes a 400) if the request isn't a valid websocket upgrade.
|
|
17
|
+
*
|
|
18
|
+
* `head` is any bytes node already read past the upgrade request; they're
|
|
19
|
+
* prepended to the frame buffer so a client that pipelines its first frame
|
|
20
|
+
* isn't dropped.
|
|
21
|
+
*/
|
|
8
22
|
export declare function acceptWebSocket(req: IncomingMessage, socket: Duplex, head: Buffer): WsConnection | null;
|
|
9
23
|
interface Frame {
|
|
24
|
+
/** FIN bit: true when this frame completes a message (not a fragment continuation) */
|
|
10
25
|
fin: boolean;
|
|
26
|
+
/** RFC 6455 opcode (0x0 continuation, 0x1 text, 0x2 binary, 0x8 close, 0x9 ping, 0xa pong) */
|
|
11
27
|
opcode: number;
|
|
28
|
+
/** whether the payload is masked; every client-to-server frame must be */
|
|
12
29
|
masked: boolean;
|
|
30
|
+
/** the (already unmasked) frame payload bytes */
|
|
13
31
|
payload: Buffer;
|
|
32
|
+
/** total bytes this frame occupies in the buffer (header + payload) */
|
|
14
33
|
frameLength: number;
|
|
15
34
|
}
|
|
16
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Decode one frame from the front of `buf`. Returns null when more bytes are
|
|
37
|
+
* needed (partial frame), {@link FRAME_TOO_LARGE} when the declared 64-bit
|
|
38
|
+
* length exceeds {@link MAX_FRAME_BYTES}, else the frame with its `frameLength`
|
|
39
|
+
* so the caller can advance the buffer. Unmasks payloads in place.
|
|
40
|
+
*/
|
|
41
|
+
export declare function decodeFrame(buf: Buffer): Frame | null | typeof FRAME_TOO_LARGE;
|
|
17
42
|
export {};
|
package/dist/node/ws.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Minimal RFC 6455 WebSocket server on top of node:http upgrade events
|
|
2
|
+
* Minimal RFC 6455 WebSocket server on top of node:http upgrade events -
|
|
3
3
|
* enough for Phoenix-protocol JSON text frames, so no `ws` dependency.
|
|
4
4
|
*/
|
|
5
5
|
import { createHash } from 'node:crypto';
|
|
6
6
|
const WS_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
|
|
7
|
+
/** Largest inbound frame payload accepted before the connection is failed (RFC 6455 §7.4.1, 1009). */
|
|
8
|
+
const MAX_FRAME_BYTES = 64 * 1024 * 1024;
|
|
9
|
+
/** Returned by {@link decodeFrame} when a frame declares a payload larger than {@link MAX_FRAME_BYTES}. */
|
|
10
|
+
export const FRAME_TOO_LARGE = Symbol('frame-too-large');
|
|
11
|
+
/**
|
|
12
|
+
* Complete the RFC 6455 handshake on an http upgrade and return a connection
|
|
13
|
+
* that decodes inbound frames and encodes outbound ones. Returns null (and
|
|
14
|
+
* writes a 400) if the request isn't a valid websocket upgrade.
|
|
15
|
+
*
|
|
16
|
+
* `head` is any bytes node already read past the upgrade request; they're
|
|
17
|
+
* prepended to the frame buffer so a client that pipelines its first frame
|
|
18
|
+
* isn't dropped.
|
|
19
|
+
*/
|
|
7
20
|
export function acceptWebSocket(req, socket, head) {
|
|
8
21
|
const key = req.headers['sec-websocket-key'];
|
|
9
22
|
if (!key || (req.headers.upgrade ?? '').toLowerCase() !== 'websocket') {
|
|
@@ -66,6 +79,10 @@ export function acceptWebSocket(req, socket, head) {
|
|
|
66
79
|
function processFrames() {
|
|
67
80
|
while (true) {
|
|
68
81
|
const frame = decodeFrame(buffer);
|
|
82
|
+
if (frame === FRAME_TOO_LARGE) {
|
|
83
|
+
conn.close(1009, 'frame too large');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
69
86
|
if (!frame)
|
|
70
87
|
return;
|
|
71
88
|
buffer = buffer.subarray(frame.frameLength);
|
|
@@ -110,6 +127,12 @@ export function acceptWebSocket(req, socket, head) {
|
|
|
110
127
|
}
|
|
111
128
|
return conn;
|
|
112
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Decode one frame from the front of `buf`. Returns null when more bytes are
|
|
132
|
+
* needed (partial frame), {@link FRAME_TOO_LARGE} when the declared 64-bit
|
|
133
|
+
* length exceeds {@link MAX_FRAME_BYTES}, else the frame with its `frameLength`
|
|
134
|
+
* so the caller can advance the buffer. Unmasks payloads in place.
|
|
135
|
+
*/
|
|
113
136
|
export function decodeFrame(buf) {
|
|
114
137
|
if (buf.length < 2)
|
|
115
138
|
return null;
|
|
@@ -128,8 +151,8 @@ export function decodeFrame(buf) {
|
|
|
128
151
|
if (buf.length < offset + 8)
|
|
129
152
|
return null;
|
|
130
153
|
const big = buf.readBigUInt64BE(offset);
|
|
131
|
-
if (big > BigInt(
|
|
132
|
-
|
|
154
|
+
if (big > BigInt(MAX_FRAME_BYTES))
|
|
155
|
+
return FRAME_TOO_LARGE;
|
|
133
156
|
payloadLength = Number(big);
|
|
134
157
|
offset += 8;
|
|
135
158
|
}
|
package/dist/node/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,MAAM,OAAO,GAAG,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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"}
|