tinbase 0.8.0 → 0.9.0
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 +2 -2
- package/assets/logo.svg +9 -13
- package/dist/admin/ui.d.ts +1 -1
- package/dist/admin/ui.js +1 -1
- package/dist/auth/handler.d.ts +25 -0
- package/dist/auth/handler.js +127 -8
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/oauth.d.ts +1 -0
- package/dist/auth/oauth.js +28 -9
- package/dist/auth/oauth.js.map +1 -1
- package/dist/cron/service.js +2 -1
- package/dist/cron/service.js.map +1 -1
- package/dist/db/bootstrap.d.ts +2 -2
- package/dist/db/bootstrap.js +19 -0
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/db/database.d.ts +3 -1
- package/dist/db/database.js +6 -1
- package/dist/db/database.js.map +1 -1
- package/dist/db/emulated.d.ts +3 -3
- package/dist/db/emulated.js +46 -13
- package/dist/db/emulated.js.map +1 -1
- package/dist/functions/deno-shim.d.ts +3 -2
- package/dist/functions/deno-shim.js +12 -4
- package/dist/functions/deno-shim.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +20 -4
- package/dist/index.js.map +1 -1
- package/dist/jwt.js +5 -0
- package/dist/jwt.js.map +1 -1
- package/dist/net/service.d.ts +9 -0
- package/dist/net/service.js +97 -10
- package/dist/net/service.js.map +1 -1
- package/dist/node/ws.d.ts +9 -0
- package/dist/node/ws.js +8 -2
- package/dist/node/ws.js.map +1 -1
- package/dist/realtime/engine.js +19 -1
- package/dist/realtime/engine.js.map +1 -1
- package/dist/retention/service.d.ts +37 -0
- package/dist/retention/service.js +66 -0
- package/dist/retention/service.js.map +1 -0
- package/dist/storage/handler.js +48 -21
- package/dist/storage/handler.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/db/emulated.js
CHANGED
|
@@ -118,7 +118,10 @@ grant execute on all functions in schema pgmq to anon, authenticated, service_ro
|
|
|
118
118
|
// ── cron (scheduled jobs) ────────────────────────────────────────────────────
|
|
119
119
|
export const CRON_SQL = `
|
|
120
120
|
create schema if not exists cron;
|
|
121
|
-
|
|
121
|
+
-- cron.schedule executes arbitrary SQL as the (superuser) function owner, so it
|
|
122
|
+
-- must stay restricted to service_role — matching hosted Supabase, where
|
|
123
|
+
-- authenticated cannot schedule jobs.
|
|
124
|
+
grant usage on schema cron to service_role;
|
|
122
125
|
|
|
123
126
|
create table if not exists cron.job (
|
|
124
127
|
jobid bigint generated always as identity primary key,
|
|
@@ -173,7 +176,7 @@ begin
|
|
|
173
176
|
return n > 0;
|
|
174
177
|
end $cron$;
|
|
175
178
|
|
|
176
|
-
grant execute on function cron.schedule(text,text,text), cron.schedule(text,text), cron.unschedule(text), cron.unschedule(bigint) to service_role
|
|
179
|
+
grant execute on function cron.schedule(text,text,text), cron.schedule(text,text), cron.unschedule(text), cron.unschedule(bigint) to service_role;
|
|
177
180
|
`;
|
|
178
181
|
// pg_net emulation — the `net.http_get/post/delete` SQL surface. The functions
|
|
179
182
|
// only enqueue into net.http_request_queue; the in-process NetService
|
|
@@ -183,7 +186,9 @@ grant execute on function cron.schedule(text,text,text), cron.schedule(text,text
|
|
|
183
186
|
// Function — run unchanged, with no C extension on either engine.
|
|
184
187
|
export const NET_SQL = `
|
|
185
188
|
create schema if not exists net;
|
|
186
|
-
|
|
189
|
+
-- net.http_* can reach arbitrary URLs from the server (SSRF surface), so keep it
|
|
190
|
+
-- restricted to service_role like hosted Supabase — not authenticated.
|
|
191
|
+
grant usage on schema net to service_role;
|
|
187
192
|
|
|
188
193
|
create table if not exists net.http_request_queue (
|
|
189
194
|
id bigint generated always as identity primary key,
|
|
@@ -205,7 +210,7 @@ create table if not exists net._http_response (
|
|
|
205
210
|
error_msg text,
|
|
206
211
|
created timestamptz not null default now()
|
|
207
212
|
);
|
|
208
|
-
grant select on net._http_response to service_role
|
|
213
|
+
grant select on net._http_response to service_role;
|
|
209
214
|
|
|
210
215
|
-- fold a jsonb param object into the URL as a query string (pg_net semantics)
|
|
211
216
|
create or replace function net._merge_params(url text, params jsonb)
|
|
@@ -252,7 +257,7 @@ begin
|
|
|
252
257
|
return req_id;
|
|
253
258
|
end $net$;
|
|
254
259
|
|
|
255
|
-
grant execute on function net.http_get(text,jsonb,jsonb,int), net.http_post(text,jsonb,jsonb,jsonb,int), net.http_delete(text,jsonb,jsonb,int) to service_role
|
|
260
|
+
grant execute on function net.http_get(text,jsonb,jsonb,int), net.http_post(text,jsonb,jsonb,jsonb,int), net.http_delete(text,jsonb,jsonb,int) to service_role;
|
|
256
261
|
`;
|
|
257
262
|
// Small pure-SQL stand-ins for contrib extensions Supabase migrations lean on
|
|
258
263
|
// but which aren't in the PGlite / native builds. `moddatetime` (a BEFORE
|
|
@@ -282,11 +287,15 @@ end
|
|
|
282
287
|
$ensure_moddatetime$;
|
|
283
288
|
`;
|
|
284
289
|
// Supabase Vault emulation. Real Vault (supabase_vault + pgsodium) encrypts
|
|
285
|
-
// secrets at rest; we can't ship those C extensions
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
+
// secrets at rest; we can't ship those C extensions. This stand-in keeps the
|
|
291
|
+
// same surface (vault.secrets, vault.decrypted_secrets, vault.create_secret /
|
|
292
|
+
// update_secret) but stores the secret encrypted with pgcrypto's authenticated
|
|
293
|
+
// symmetric encryption (pgp_sym_encrypt) under a key held in the GUC
|
|
294
|
+
// app.settings.vault_key — set at boot, never stored in the database.
|
|
295
|
+
//
|
|
296
|
+
// The stored `secret` column holds ciphertext; decrypted_secrets decrypts on
|
|
297
|
+
// read. If pgcrypto or the key is unavailable the functions raise, rather than
|
|
298
|
+
// silently falling back to cleartext.
|
|
290
299
|
export const VAULT_SQL = `
|
|
291
300
|
create schema if not exists vault;
|
|
292
301
|
grant usage on schema vault to service_role;
|
|
@@ -303,8 +312,32 @@ create table if not exists vault.secrets (
|
|
|
303
312
|
);
|
|
304
313
|
grant select, insert, update, delete on vault.secrets to service_role;
|
|
305
314
|
|
|
315
|
+
-- the encryption key, from the GUC set at boot (empty string if unset)
|
|
316
|
+
create or replace function vault._key() returns text
|
|
317
|
+
language sql stable as $vault$
|
|
318
|
+
select coalesce(nullif(current_setting('app.settings.vault_key', true), ''), '')
|
|
319
|
+
$vault$;
|
|
320
|
+
|
|
321
|
+
create or replace function vault._encrypt(plain text) returns text
|
|
322
|
+
language plpgsql security definer set search_path = vault, extensions, pg_catalog, public as $vault$
|
|
323
|
+
declare k text := vault._key();
|
|
324
|
+
begin
|
|
325
|
+
if plain is null then return null; end if;
|
|
326
|
+
if k = '' then raise exception 'vault key is not configured'; end if;
|
|
327
|
+
return encode(pgp_sym_encrypt(plain, k), 'base64');
|
|
328
|
+
end $vault$;
|
|
329
|
+
|
|
330
|
+
create or replace function vault._decrypt(cipher text) returns text
|
|
331
|
+
language plpgsql security definer set search_path = vault, extensions, pg_catalog, public as $vault$
|
|
332
|
+
declare k text := vault._key();
|
|
333
|
+
begin
|
|
334
|
+
if cipher is null then return null; end if;
|
|
335
|
+
if k = '' then raise exception 'vault key is not configured'; end if;
|
|
336
|
+
return pgp_sym_decrypt(decode(cipher, 'base64'), k);
|
|
337
|
+
end $vault$;
|
|
338
|
+
|
|
306
339
|
create or replace view vault.decrypted_secrets as
|
|
307
|
-
select id, name, description, secret, secret as decrypted_secret, key_id, nonce, created_at, updated_at
|
|
340
|
+
select id, name, description, secret, vault._decrypt(secret) as decrypted_secret, key_id, nonce, created_at, updated_at
|
|
308
341
|
from vault.secrets;
|
|
309
342
|
grant select on vault.decrypted_secrets to service_role;
|
|
310
343
|
|
|
@@ -313,7 +346,7 @@ returns uuid language plpgsql security definer set search_path = vault, pg_catal
|
|
|
313
346
|
declare rec_id uuid;
|
|
314
347
|
begin
|
|
315
348
|
insert into vault.secrets (name, description, secret, key_id)
|
|
316
|
-
values (new_name, coalesce(new_description, ''), new_secret, new_key_id)
|
|
349
|
+
values (new_name, coalesce(new_description, ''), vault._encrypt(new_secret), new_key_id)
|
|
317
350
|
returning id into rec_id;
|
|
318
351
|
return rec_id;
|
|
319
352
|
end $vault$;
|
|
@@ -322,7 +355,7 @@ create or replace function vault.update_secret(secret_id uuid, new_secret text d
|
|
|
322
355
|
returns void language plpgsql security definer set search_path = vault, pg_catalog, public as $vault$
|
|
323
356
|
begin
|
|
324
357
|
update vault.secrets set
|
|
325
|
-
secret =
|
|
358
|
+
secret = case when new_secret is null then secret else vault._encrypt(new_secret) end,
|
|
326
359
|
name = coalesce(new_name, name),
|
|
327
360
|
description = coalesce(new_description, description),
|
|
328
361
|
key_id = coalesce(new_key_id, key_id),
|
package/dist/db/emulated.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emulated.js","sourceRoot":"","sources":["../../src/db/emulated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvB,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"emulated.js","sourceRoot":"","sources":["../../src/db/emulated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvB,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DvB,CAAA;AAED,+EAA+E;AAC/E,sEAAsE;AACtE,kEAAkE;AAClE,6EAA6E;AAC7E,+EAA+E;AAC/E,kEAAkE;AAClE,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EtB,CAAA;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB7B,CAAA;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,qEAAqE;AACrE,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoExB,CAAA"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* const url = Deno.env.get('SUPABASE_URL')
|
|
7
7
|
*
|
|
8
8
|
* Instead of starting a server, our `Deno.serve` captures the handler so the
|
|
9
|
-
* FunctionsHandler can invoke it per request; `Deno.env` reads the
|
|
10
|
-
* SUPABASE_* vars
|
|
9
|
+
* FunctionsHandler can invoke it per request; `Deno.env` reads only the
|
|
10
|
+
* injected SUPABASE_* vars and declared function secrets (never the host
|
|
11
|
+
* process.env).
|
|
11
12
|
*
|
|
12
13
|
* Not resolved: `npm:` / `jsr:` / URL import specifiers and the Deno std lib —
|
|
13
14
|
* a function using those needs a bundling step. Functions that stick to Web
|
|
@@ -19,20 +19,28 @@ export function installDenoShim() {
|
|
|
19
19
|
// Deno.serve returns a server; some functions `await server.finished`.
|
|
20
20
|
return { finished: Promise.resolve(), shutdown() { }, ref() { }, unref() { }, addr: { hostname: '0.0.0.0', port: 0, transport: 'tcp' } };
|
|
21
21
|
},
|
|
22
|
+
// Scope Deno.env to the injected SUPABASE_* vars + declared function
|
|
23
|
+
// secrets only. It deliberately does NOT fall through to the host
|
|
24
|
+
// process.env, so a function can't read arbitrary server-side env (cloud
|
|
25
|
+
// credentials, DB URLs, etc.).
|
|
22
26
|
env: {
|
|
23
|
-
get: (k) => denoEnv[k]
|
|
27
|
+
get: (k) => denoEnv[k],
|
|
24
28
|
set: (k, v) => {
|
|
25
29
|
denoEnv[k] = v;
|
|
26
30
|
},
|
|
27
|
-
has: (k) =>
|
|
31
|
+
has: (k) => denoEnv[k] !== undefined,
|
|
28
32
|
delete: (k) => {
|
|
29
33
|
delete denoEnv[k];
|
|
30
34
|
},
|
|
31
|
-
toObject: () => ({ ...
|
|
35
|
+
toObject: () => ({ ...denoEnv }),
|
|
32
36
|
},
|
|
33
37
|
// enough of the surface that idiomatic functions don't crash on reference
|
|
34
38
|
cwd: () => process.cwd(),
|
|
35
|
-
|
|
39
|
+
// a function must not be able to terminate the whole server; throw instead
|
|
40
|
+
// of calling process.exit.
|
|
41
|
+
exit: (code) => {
|
|
42
|
+
throw new Error(`Deno.exit(${code ?? 0}) called in an edge function (ignored)`);
|
|
43
|
+
},
|
|
36
44
|
};
|
|
37
45
|
}
|
|
38
46
|
/** Return and clear the handler captured by the most recent Deno.serve() call. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno-shim.js","sourceRoot":"","sources":["../../src/functions/deno-shim.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deno-shim.js","sourceRoot":"","sources":["../../src/functions/deno-shim.ts"],"names":[],"mappings":"AAkBA,MAAM,QAAQ,GAA8B,EAAE,CAAA;AAC9C,MAAM,OAAO,GAA2B,EAAE,CAAA;AAE1C,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,GAA2B;IACpD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAC7B,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,GAAG,UAAmF,CAAA;IAC7F,IAAI,CAAC,CAAC,aAAa;QAAE,OAAM;IAC3B,qEAAqE;IACrE,IAAI,CAAC,CAAC,IAAI,IAAI,OAAQ,CAAC,CAAC,IAA4B,CAAC,KAAK,KAAK,UAAU;QAAE,OAAM;IACjF,CAAC,CAAC,aAAa,GAAG,IAAI,CAAA;IACtB,CAAC,CAAC,IAAI,GAAG;QACP,KAAK,CAAC,IAAa,EAAE,IAAc;YACjC,QAAQ,CAAC,OAAO,GAAG,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAgB,CAAA;YAC5E,uEAAuE;YACvE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,KAAI,CAAC,EAAE,GAAG,KAAI,CAAC,EAAE,KAAK,KAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAA;QACvI,CAAC;QACD,qEAAqE;QACrE,kEAAkE;QAClE,yEAAyE;QACzE,+BAA+B;QAC/B,GAAG,EAAE;YACH,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9B,GAAG,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;gBAC5B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC;YACD,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;YAC5C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACpB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;YACnB,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;SACjC;QACD,0EAA0E;QAC1E,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACxB,2EAA2E;QAC3E,2BAA2B;QAC3B,IAAI,EAAE,CAAC,IAAa,EAAE,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,wCAAwC,CAAC,CAAA;QACjF,CAAC;KACF,CAAA;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAA;AAC9B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { RealtimeEngine } from './realtime/engine.js';
|
|
|
6
6
|
import { WebhooksService } from './webhooks/service.js';
|
|
7
7
|
import { CronService } from './cron/service.js';
|
|
8
8
|
import { NetService } from './net/service.js';
|
|
9
|
+
import { RetentionService } from './retention/service.js';
|
|
9
10
|
import { type BackendConfig, type MigrationFile } from './types.js';
|
|
10
11
|
export * from './types.js';
|
|
11
12
|
export { Database } from './db/database.js';
|
|
@@ -22,6 +23,7 @@ export { installDenoShim, setDenoEnv } from './functions/deno-shim.js';
|
|
|
22
23
|
export { WebhooksService, type WebhookConfig, type WebhookDelivery } from './webhooks/service.js';
|
|
23
24
|
export { CronService, cronMatches } from './cron/service.js';
|
|
24
25
|
export { NetService, type NetDelivery } from './net/service.js';
|
|
26
|
+
export { RetentionService, type RetentionConfig } from './retention/service.js';
|
|
25
27
|
export { snapshotSchema, diffSchemas, type SchemaSnapshot } from './db/schema-diff.js';
|
|
26
28
|
export { inspectDb, type TableInfo } from './db/inspect.js';
|
|
27
29
|
export interface TinbaseBackend {
|
|
@@ -33,6 +35,7 @@ export interface TinbaseBackend {
|
|
|
33
35
|
webhooks: WebhooksService;
|
|
34
36
|
cron: CronService;
|
|
35
37
|
net: NetService;
|
|
38
|
+
retention: RetentionService;
|
|
36
39
|
/** JWT for the anon role — use as supabase-js's supabaseKey. */
|
|
37
40
|
anonKey: string;
|
|
38
41
|
/** JWT for the service_role — bypasses RLS. */
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ import { StorageHandler } from './storage/handler.js';
|
|
|
23
23
|
import { WebhooksService } from './webhooks/service.js';
|
|
24
24
|
import { CronService } from './cron/service.js';
|
|
25
25
|
import { NetService } from './net/service.js';
|
|
26
|
+
import { RetentionService } from './retention/service.js';
|
|
26
27
|
import { DEFAULT_JWT_SECRET } from './types.js';
|
|
27
28
|
export * from './types.js';
|
|
28
29
|
export { Database } from './db/database.js';
|
|
@@ -39,6 +40,7 @@ export { installDenoShim, setDenoEnv } from './functions/deno-shim.js';
|
|
|
39
40
|
export { WebhooksService } from './webhooks/service.js';
|
|
40
41
|
export { CronService, cronMatches } from './cron/service.js';
|
|
41
42
|
export { NetService } from './net/service.js';
|
|
43
|
+
export { RetentionService } from './retention/service.js';
|
|
42
44
|
export { snapshotSchema, diffSchemas } from './db/schema-diff.js';
|
|
43
45
|
export { inspectDb } from './db/inspect.js';
|
|
44
46
|
const CORS_HEADERS = {
|
|
@@ -60,7 +62,11 @@ export async function createBackend(config = {}) {
|
|
|
60
62
|
logs.push(m);
|
|
61
63
|
baseLog(m);
|
|
62
64
|
};
|
|
63
|
-
|
|
65
|
+
// Vault encryption key: use the configured value, else derive one from the
|
|
66
|
+
// JWT secret so vault secrets are encrypted at rest out of the box (better
|
|
67
|
+
// than the old plaintext store). Set a dedicated vaultKey in production.
|
|
68
|
+
const vaultKey = config.vaultKey ?? `tinbase-vault:${jwtSecret}`;
|
|
69
|
+
const db = await Database.create(config.engine ?? config.dataDir, { vaultKey });
|
|
64
70
|
if (config.migrations?.length || config.seedSql) {
|
|
65
71
|
const applied = await db.runMigrations(config.migrations ?? [], config.seedSql);
|
|
66
72
|
if (applied.length > 0)
|
|
@@ -72,11 +78,17 @@ export async function createBackend(config = {}) {
|
|
|
72
78
|
const serviceRoleKey = await signJwt({ iss: 'supabase', ref: 'tinbase', role: 'service_role', iat: now, exp: now + tenYears }, jwtSecret);
|
|
73
79
|
const rest = new RestHandler(db);
|
|
74
80
|
// With no custom mailer, capture auth emails in an in-memory inbox (viewable
|
|
75
|
-
// at /inbox) and
|
|
76
|
-
// mounted.
|
|
81
|
+
// at /inbox) and log a metadata-only line. A provided mailer takes over and no
|
|
82
|
+
// inbox is mounted.
|
|
83
|
+
//
|
|
84
|
+
// The server log records only the recipient and subject — never the body,
|
|
85
|
+
// which carries OTP codes and magic links. Set logMailBody: true to also log
|
|
86
|
+
// the full body for local debugging (the /inbox UI always shows it in full).
|
|
77
87
|
const inbox = config.mailer
|
|
78
88
|
? null
|
|
79
|
-
: new InboxMailer((msg) => log(
|
|
89
|
+
: new InboxMailer((msg) => log(config.logMailBody
|
|
90
|
+
? `[mail] to=${msg.to} subject="${msg.subject}"\n${msg.text}`
|
|
91
|
+
: `[mail] to=${msg.to} subject="${msg.subject}"`));
|
|
80
92
|
const mailer = config.mailer ?? inbox;
|
|
81
93
|
const auth = new AuthHandler(db, {
|
|
82
94
|
jwtSecret,
|
|
@@ -94,6 +106,8 @@ export async function createBackend(config = {}) {
|
|
|
94
106
|
await webhooks.start(config.webhooks);
|
|
95
107
|
const cron = new CronService(db);
|
|
96
108
|
cron.start();
|
|
109
|
+
const retention = new RetentionService(db, config.retention);
|
|
110
|
+
retention.start();
|
|
97
111
|
const net = new NetService(db, config.netFetch, undefined, (d) => log(`[net] ${d.method} ${d.url} -> ${d.timedOut ? 'TIMEOUT' : d.error ? 'FAILED ' + d.error : d.status}`));
|
|
98
112
|
net.start();
|
|
99
113
|
const admin = new AdminApi(db, logs);
|
|
@@ -225,6 +239,7 @@ export async function createBackend(config = {}) {
|
|
|
225
239
|
webhooks,
|
|
226
240
|
cron,
|
|
227
241
|
net,
|
|
242
|
+
retention,
|
|
228
243
|
anonKey,
|
|
229
244
|
serviceRoleKey,
|
|
230
245
|
jwtSecret,
|
|
@@ -234,6 +249,7 @@ export async function createBackend(config = {}) {
|
|
|
234
249
|
close: async () => {
|
|
235
250
|
cron.stop();
|
|
236
251
|
net.stop();
|
|
252
|
+
await retention.stop();
|
|
237
253
|
webhooks.stopService();
|
|
238
254
|
realtime.stop();
|
|
239
255
|
await db.close();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/jwt.js
CHANGED
|
@@ -39,6 +39,11 @@ export async function verifyJwt(token, secret) {
|
|
|
39
39
|
return null;
|
|
40
40
|
const [header, payload, signature] = parts;
|
|
41
41
|
try {
|
|
42
|
+
// Pin the algorithm to HS256 — reject alg:"none" and any alg-swap attempt
|
|
43
|
+
// rather than relying on the HMAC verify to fail.
|
|
44
|
+
const head = JSON.parse(decoder.decode(base64UrlToBytes(header)));
|
|
45
|
+
if (head.alg !== 'HS256')
|
|
46
|
+
return null;
|
|
42
47
|
const key = await hmacKey(secret, 'verify');
|
|
43
48
|
const valid = await crypto.subtle.verify('HMAC', key, base64UrlToBytes(signature), encoder.encode(`${header}.${payload}`));
|
|
44
49
|
if (!valid)
|
package/dist/jwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
|
package/dist/net/service.d.ts
CHANGED
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
* background worker. No C extension, works on the wasm and native engines.
|
|
7
7
|
*/
|
|
8
8
|
import type { Database } from '../db/database.js';
|
|
9
|
+
/**
|
|
10
|
+
* Reject requests to non-public destinations. This is a literal-host guard
|
|
11
|
+
* (loopback / private / link-local / cloud-metadata), which blocks the common
|
|
12
|
+
* SSRF vectors without an async DNS lookup. Returns an error string, or null
|
|
13
|
+
* when the URL is allowed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function blockedNetTarget(rawUrl: string): string | null;
|
|
9
16
|
export interface NetDelivery {
|
|
10
17
|
id: number;
|
|
11
18
|
method: string;
|
|
@@ -30,4 +37,6 @@ export declare class NetService {
|
|
|
30
37
|
/** Drain any queued requests once (also callable directly in tests). */
|
|
31
38
|
tick(): Promise<void>;
|
|
32
39
|
private deliver;
|
|
40
|
+
/** Record the response and remove the request from the queue (best-effort). */
|
|
41
|
+
private record;
|
|
33
42
|
}
|
package/dist/net/service.js
CHANGED
|
@@ -1,3 +1,54 @@
|
|
|
1
|
+
/** Cap on the response body we buffer into net._http_response (bytes). */
|
|
2
|
+
const MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
|
|
3
|
+
/**
|
|
4
|
+
* Reject requests to non-public destinations. This is a literal-host guard
|
|
5
|
+
* (loopback / private / link-local / cloud-metadata), which blocks the common
|
|
6
|
+
* SSRF vectors without an async DNS lookup. Returns an error string, or null
|
|
7
|
+
* when the URL is allowed.
|
|
8
|
+
*/
|
|
9
|
+
export function blockedNetTarget(rawUrl) {
|
|
10
|
+
let u;
|
|
11
|
+
try {
|
|
12
|
+
u = new URL(rawUrl);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return 'invalid url';
|
|
16
|
+
}
|
|
17
|
+
if (u.protocol !== 'http:' && u.protocol !== 'https:')
|
|
18
|
+
return `unsupported scheme: ${u.protocol}`;
|
|
19
|
+
const host = u.hostname.toLowerCase().replace(/^\[|\]$/g, '');
|
|
20
|
+
if (host === 'localhost' || host.endsWith('.localhost'))
|
|
21
|
+
return 'blocked host: localhost';
|
|
22
|
+
if (isPrivateIp(host))
|
|
23
|
+
return `blocked host: ${host}`;
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
function isPrivateIp(host) {
|
|
27
|
+
// IPv4
|
|
28
|
+
const m = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
29
|
+
if (m) {
|
|
30
|
+
const [a, b] = [Number(m[1]), Number(m[2])];
|
|
31
|
+
if (a === 0 || a === 10 || a === 127)
|
|
32
|
+
return true; // this-host, private, loopback
|
|
33
|
+
if (a === 169 && b === 254)
|
|
34
|
+
return true; // link-local (incl. 169.254.169.254 metadata)
|
|
35
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
36
|
+
return true; // private
|
|
37
|
+
if (a === 192 && b === 168)
|
|
38
|
+
return true; // private
|
|
39
|
+
if (a === 100 && b >= 64 && b <= 127)
|
|
40
|
+
return true; // carrier-grade NAT
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
// IPv6
|
|
44
|
+
if (host === '::' || host === '::1')
|
|
45
|
+
return true; // unspecified / loopback
|
|
46
|
+
if (host.startsWith('fe80') || host.startsWith('fc') || host.startsWith('fd'))
|
|
47
|
+
return true; // link-local / ULA
|
|
48
|
+
if (host.startsWith('::ffff:'))
|
|
49
|
+
return isPrivateIp(host.slice(7)); // IPv4-mapped
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
1
52
|
export class NetService {
|
|
2
53
|
db;
|
|
3
54
|
fetchImpl;
|
|
@@ -55,6 +106,13 @@ export class NetService {
|
|
|
55
106
|
let respHeaders = null;
|
|
56
107
|
let timedOut = false;
|
|
57
108
|
let errorMsg = null;
|
|
109
|
+
const blocked = blockedNetTarget(row.url);
|
|
110
|
+
if (blocked) {
|
|
111
|
+
clearTimeout(timer);
|
|
112
|
+
await this.record(row.id, null, null, null, content, false, blocked);
|
|
113
|
+
this.onDeliver?.({ id: row.id, method: row.method, url: row.url, timedOut: false, error: blocked });
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
58
116
|
try {
|
|
59
117
|
const hasBody = row.method !== 'GET' && row.method !== 'HEAD';
|
|
60
118
|
const res = await this.fetchImpl(row.url, {
|
|
@@ -66,7 +124,7 @@ export class NetService {
|
|
|
66
124
|
status = res.status;
|
|
67
125
|
contentType = res.headers.get('content-type');
|
|
68
126
|
respHeaders = Object.fromEntries(res.headers.entries());
|
|
69
|
-
content = await res
|
|
127
|
+
content = await readCapped(res, MAX_RESPONSE_BYTES);
|
|
70
128
|
}
|
|
71
129
|
catch (e) {
|
|
72
130
|
if (controller.signal.aborted)
|
|
@@ -76,15 +134,7 @@ export class NetService {
|
|
|
76
134
|
finally {
|
|
77
135
|
clearTimeout(timer);
|
|
78
136
|
}
|
|
79
|
-
|
|
80
|
-
try {
|
|
81
|
-
await this.db.query(`insert into net._http_response (id, status_code, content_type, headers, content, timed_out, error_msg)
|
|
82
|
-
values ($1, $2, $3, $4::jsonb, $5, $6, $7) on conflict (id) do nothing`, [row.id, status, contentType, respHeaders ? JSON.stringify(respHeaders) : null, content, timedOut, errorMsg]);
|
|
83
|
-
await this.db.query(`delete from net.http_request_queue where id = $1`, [row.id]);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// if recording fails, leave the row so the next tick retries
|
|
87
|
-
}
|
|
137
|
+
await this.record(row.id, status, contentType, respHeaders, content, timedOut, errorMsg);
|
|
88
138
|
this.onDeliver?.({
|
|
89
139
|
id: row.id,
|
|
90
140
|
method: row.method,
|
|
@@ -94,5 +144,42 @@ export class NetService {
|
|
|
94
144
|
error: errorMsg ?? undefined,
|
|
95
145
|
});
|
|
96
146
|
}
|
|
147
|
+
/** Record the response and remove the request from the queue (best-effort). */
|
|
148
|
+
async record(id, status, contentType, respHeaders, content, timedOut, errorMsg) {
|
|
149
|
+
try {
|
|
150
|
+
await this.db.query(`insert into net._http_response (id, status_code, content_type, headers, content, timed_out, error_msg)
|
|
151
|
+
values ($1, $2, $3, $4::jsonb, $5, $6, $7) on conflict (id) do nothing`, [id, status, contentType, respHeaders ? JSON.stringify(respHeaders) : null, content, timedOut, errorMsg]);
|
|
152
|
+
await this.db.query(`delete from net.http_request_queue where id = $1`, [id]);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// if recording fails, leave the row so the next tick retries
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** Read a response body as text, truncating at `maxBytes` to bound memory. */
|
|
160
|
+
async function readCapped(res, maxBytes) {
|
|
161
|
+
if (!res.body)
|
|
162
|
+
return await res.text();
|
|
163
|
+
const reader = res.body.getReader();
|
|
164
|
+
const chunks = [];
|
|
165
|
+
let total = 0;
|
|
166
|
+
while (total < maxBytes) {
|
|
167
|
+
const { done, value } = await reader.read();
|
|
168
|
+
if (done)
|
|
169
|
+
break;
|
|
170
|
+
chunks.push(value);
|
|
171
|
+
total += value.length;
|
|
172
|
+
}
|
|
173
|
+
await reader.cancel().catch(() => { });
|
|
174
|
+
let merged = new Uint8Array(Math.min(total, maxBytes));
|
|
175
|
+
let offset = 0;
|
|
176
|
+
for (const c of chunks) {
|
|
177
|
+
const take = Math.min(c.length, merged.length - offset);
|
|
178
|
+
merged.set(c.subarray(0, take), offset);
|
|
179
|
+
offset += take;
|
|
180
|
+
if (offset >= merged.length)
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
return new TextDecoder().decode(merged);
|
|
97
184
|
}
|
|
98
185
|
//# sourceMappingURL=service.js.map
|
package/dist/net/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/net/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/net/service.ts"],"names":[],"mappings":"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"}
|
package/dist/node/ws.d.ts
CHANGED
|
@@ -6,3 +6,12 @@ export interface WsConnection extends RealtimeSocketLike {
|
|
|
6
6
|
onClose: (() => void) | null;
|
|
7
7
|
}
|
|
8
8
|
export declare function acceptWebSocket(req: IncomingMessage, socket: Duplex, head: Buffer): WsConnection | null;
|
|
9
|
+
interface Frame {
|
|
10
|
+
fin: boolean;
|
|
11
|
+
opcode: number;
|
|
12
|
+
masked: boolean;
|
|
13
|
+
payload: Buffer;
|
|
14
|
+
frameLength: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function decodeFrame(buf: Buffer): Frame | null;
|
|
17
|
+
export {};
|
package/dist/node/ws.js
CHANGED
|
@@ -69,6 +69,12 @@ export function acceptWebSocket(req, socket, head) {
|
|
|
69
69
|
if (!frame)
|
|
70
70
|
return;
|
|
71
71
|
buffer = buffer.subarray(frame.frameLength);
|
|
72
|
+
// RFC 6455 §5.1: every frame from the client MUST be masked; fail the
|
|
73
|
+
// connection with a protocol error (1002) otherwise.
|
|
74
|
+
if (!frame.masked) {
|
|
75
|
+
conn.close(1002, 'unmasked frame');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
72
78
|
switch (frame.opcode) {
|
|
73
79
|
case 0x0: // continuation
|
|
74
80
|
fragments.push(frame.payload);
|
|
@@ -104,7 +110,7 @@ export function acceptWebSocket(req, socket, head) {
|
|
|
104
110
|
}
|
|
105
111
|
return conn;
|
|
106
112
|
}
|
|
107
|
-
function decodeFrame(buf) {
|
|
113
|
+
export function decodeFrame(buf) {
|
|
108
114
|
if (buf.length < 2)
|
|
109
115
|
return null;
|
|
110
116
|
const fin = (buf[0] & 0x80) !== 0;
|
|
@@ -141,7 +147,7 @@ function decodeFrame(buf) {
|
|
|
141
147
|
for (let i = 0; i < payload.length; i++)
|
|
142
148
|
payload[i] ^= maskKey[i % 4];
|
|
143
149
|
}
|
|
144
|
-
return { fin, opcode, payload, frameLength: offset + payloadLength };
|
|
150
|
+
return { fin, opcode, masked, payload, frameLength: offset + payloadLength };
|
|
145
151
|
}
|
|
146
152
|
function encodeFrame(opcode, payload) {
|
|
147
153
|
let header;
|
package/dist/node/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/node/ws.ts"],"names":[],"mappings":"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"}
|