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/gen-types.js
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a Supabase-shaped `Database` TypeScript type from the live schema,
|
|
3
|
+
* matching `supabase gen types typescript` closely enough that a typed
|
|
4
|
+
* supabase-js client works unchanged:
|
|
5
|
+
*
|
|
6
|
+
* export type Database = {
|
|
7
|
+
* public: {
|
|
8
|
+
* Tables: { <t>: { Row, Insert, Update, Relationships } }
|
|
9
|
+
* Views: { <v>: { Row } }
|
|
10
|
+
* Functions: { <f>: { Args, Returns } }
|
|
11
|
+
* Enums: { <e>: "a" | "b" }
|
|
12
|
+
* CompositeTypes: {}
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
import { parseIdentityArgs } from './db/database.js';
|
|
1
17
|
const JSON_TYPE = 'Json';
|
|
18
|
+
/**
|
|
19
|
+
* Emit the `Database` type source (see module header) for one schema of the
|
|
20
|
+
* live database. Reads columns, enums, functions, and foreign keys, then formats
|
|
21
|
+
* them into the Supabase-shaped type text ready to write to a .d.ts.
|
|
22
|
+
*/
|
|
2
23
|
export async function generateTypes(db, schema = 'public') {
|
|
3
24
|
const enums = await loadEnums(db, schema);
|
|
4
25
|
const enumNames = new Set(enums.map((e) => e.name));
|
|
@@ -56,16 +77,32 @@ export async function generateTypes(db, schema = 'public') {
|
|
|
56
77
|
const row = columns.map((c) => ` ${ident(c.column_name)}: ${tsType(c.udt_name, c.is_nullable === 'YES')}`).join('\n');
|
|
57
78
|
return ` ${ident(name)}: {\n Row: {\n${row}\n }\n Relationships: []\n }`;
|
|
58
79
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
80
|
+
// Args/Returns for one function row (an overload). Multiple rows sharing a
|
|
81
|
+
// name are merged into a union below so the emitted type never has duplicate
|
|
82
|
+
// keys - matching the official generator.
|
|
83
|
+
const fnArgs = (f) => !f.args_json || f.args_json.length === 0
|
|
84
|
+
? 'Record<PropertyKey, never>'
|
|
85
|
+
: `{ ${f.args_json.map((a) => `${ident(a.name || '')}: ${mapArgType(a.type, enumNames, schema)}`).join('; ')} }`;
|
|
86
|
+
const fnReturns = (f) => (f.return_typtype === 'c' || f.returns_set ? 'Json' : mapType(f.return_type, enumNames, schema));
|
|
87
|
+
const fnShape = (f) => `{ Args: ${fnArgs(f)}; Returns: ${fnReturns(f)} }`;
|
|
88
|
+
const fnBlock = (name, overloads) => {
|
|
89
|
+
if (overloads.length === 1) {
|
|
90
|
+
const f = overloads[0];
|
|
91
|
+
return ` ${ident(name)}: {\n Args: ${fnArgs(f)}\n Returns: ${fnReturns(f)}\n }`;
|
|
92
|
+
}
|
|
93
|
+
return ` ${ident(name)}:\n | ${overloads.map(fnShape).join('\n | ')}`;
|
|
65
94
|
};
|
|
95
|
+
const fnsByName = new Map();
|
|
96
|
+
for (const f of fns) {
|
|
97
|
+
const group = fnsByName.get(f.name);
|
|
98
|
+
if (group)
|
|
99
|
+
group.push(f);
|
|
100
|
+
else
|
|
101
|
+
fnsByName.set(f.name, [f]);
|
|
102
|
+
}
|
|
66
103
|
const tablesBlock = [...tables].map(([n, c]) => tableBlock(n, c)).join('\n');
|
|
67
104
|
const viewsBlock = [...views].map(([n, c]) => viewBlock(n, c)).join('\n');
|
|
68
|
-
const fnsBlock =
|
|
105
|
+
const fnsBlock = [...fnsByName].map(([n, o]) => fnBlock(n, o)).join('\n');
|
|
69
106
|
const enumsBlock = enums.map((e) => ` ${ident(e.name)}: ${e.labels.map((l) => JSON.stringify(l)).join(' | ')}`).join('\n');
|
|
70
107
|
return `export type Json =
|
|
71
108
|
| string
|
|
@@ -136,15 +173,19 @@ function mapType(udt, enums, schema) {
|
|
|
136
173
|
}
|
|
137
174
|
}
|
|
138
175
|
function mapArgType(type, enums, schema) {
|
|
139
|
-
// pg_get_function_identity_arguments gives sql type names, not udt; normalize
|
|
176
|
+
// pg_get_function_identity_arguments gives sql type names, not udt; normalize.
|
|
177
|
+
// Anchor the numeric match so types like `interval` and `point` (which merely
|
|
178
|
+
// contain "int") are not mistyped as number.
|
|
140
179
|
const t = type.toLowerCase().trim();
|
|
141
180
|
if (t.endsWith('[]'))
|
|
142
181
|
return `${mapArgType(t.slice(0, -2), enums, schema)}[]`;
|
|
143
|
-
|
|
182
|
+
// Match the integer types exactly so `interval` (which merely starts with
|
|
183
|
+
// "int") is not mistyped as number; `point` likewise falls through to string.
|
|
184
|
+
if (/^(bigint|smallint|integer|int[248]?)$/.test(t) || /^(serial|bigserial|smallserial|numeric|decimal|real|double|float)/.test(t))
|
|
144
185
|
return 'number';
|
|
145
|
-
if (
|
|
186
|
+
if (/^bool/.test(t))
|
|
146
187
|
return 'boolean';
|
|
147
|
-
if (
|
|
188
|
+
if (/^json/.test(t))
|
|
148
189
|
return JSON_TYPE;
|
|
149
190
|
return 'string';
|
|
150
191
|
}
|
|
@@ -187,36 +228,7 @@ async function loadFunctions(db, schema) {
|
|
|
187
228
|
return_type: r.return_type,
|
|
188
229
|
returns_set: r.returns_set,
|
|
189
230
|
return_typtype: r.return_typtype,
|
|
190
|
-
args_json:
|
|
231
|
+
args_json: parseIdentityArgs(r.identity_args),
|
|
191
232
|
}));
|
|
192
233
|
}
|
|
193
|
-
function parseArgs(identity) {
|
|
194
|
-
if (!identity?.trim())
|
|
195
|
-
return [];
|
|
196
|
-
const parts = [];
|
|
197
|
-
let depth = 0;
|
|
198
|
-
let cur = '';
|
|
199
|
-
for (const ch of identity) {
|
|
200
|
-
if (ch === '(')
|
|
201
|
-
depth++;
|
|
202
|
-
if (ch === ')')
|
|
203
|
-
depth--;
|
|
204
|
-
if (ch === ',' && depth === 0) {
|
|
205
|
-
parts.push(cur);
|
|
206
|
-
cur = '';
|
|
207
|
-
}
|
|
208
|
-
else
|
|
209
|
-
cur += ch;
|
|
210
|
-
}
|
|
211
|
-
if (cur.trim())
|
|
212
|
-
parts.push(cur);
|
|
213
|
-
return parts.map((p) => {
|
|
214
|
-
const toks = p.trim().split(/\s+/);
|
|
215
|
-
while (toks.length > 1 && ['IN', 'OUT', 'INOUT', 'VARIADIC'].includes(toks[0]))
|
|
216
|
-
toks.shift();
|
|
217
|
-
if (toks.length === 1)
|
|
218
|
-
return { name: '', type: toks[0] };
|
|
219
|
-
return { name: toks[0].replace(/^"|"$/g, ''), type: toks.slice(1).join(' ') };
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
234
|
//# sourceMappingURL=gen-types.js.map
|
package/dist/gen-types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen-types.js","sourceRoot":"","sources":["../src/gen-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gen-types.js","sourceRoot":"","sources":["../src/gen-types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,27 +19,41 @@ export { RealtimeEngine, type RealtimeSocketLike } from './realtime/engine.js';
|
|
|
19
19
|
export { signJwt, verifyJwt, decodeJwt } from './jwt.js';
|
|
20
20
|
export { FunctionsHandler, type EdgeFunction, type FunctionContext } from './functions/handler.js';
|
|
21
21
|
export { generateTypes } from './gen-types.js';
|
|
22
|
-
export { installDenoShim
|
|
22
|
+
export { installDenoShim } from './functions/deno-shim.js';
|
|
23
23
|
export { WebhooksService, type WebhookConfig, type WebhookDelivery } from './webhooks/service.js';
|
|
24
24
|
export { CronService, cronMatches } from './cron/service.js';
|
|
25
25
|
export { NetService, type NetDelivery } from './net/service.js';
|
|
26
26
|
export { RetentionService, type RetentionConfig } from './retention/service.js';
|
|
27
27
|
export { snapshotSchema, diffSchemas, type SchemaSnapshot } from './db/schema-diff.js';
|
|
28
28
|
export { inspectDb, type TableInfo } from './db/inspect.js';
|
|
29
|
+
/**
|
|
30
|
+
* A running tinbase backend. The one field a consumer always needs is
|
|
31
|
+
* {@link TinbaseBackend.fetch}; the rest expose the underlying services for
|
|
32
|
+
* advanced/embedded use (in-process realtime, manual migrations, log access).
|
|
33
|
+
* Returned by {@link createBackend}.
|
|
34
|
+
*/
|
|
29
35
|
export interface TinbaseBackend {
|
|
30
36
|
/** The whole backend as a fetch handler. Pass to supabase-js as global.fetch for in-process use. */
|
|
31
37
|
fetch: (req: Request) => Promise<Response>;
|
|
38
|
+
/** The database engine wrapper - run raw SQL, inspect schema, apply migrations. */
|
|
32
39
|
db: Database;
|
|
40
|
+
/** Realtime (Postgres CDC → WebSocket) engine backing supabase.channel(). */
|
|
33
41
|
realtime: RealtimeEngine;
|
|
42
|
+
/** Edge-function registry/dispatcher backing supabase.functions.invoke(). */
|
|
34
43
|
functions: FunctionsHandler;
|
|
44
|
+
/** Database-webhook service (HTTP requests fired on row changes). */
|
|
35
45
|
webhooks: WebhooksService;
|
|
46
|
+
/** pg_cron emulation scheduler. */
|
|
36
47
|
cron: CronService;
|
|
48
|
+
/** pg_net emulation sender (net.http_* queue drain). */
|
|
37
49
|
net: NetService;
|
|
50
|
+
/** Background sweeper that purges expired tokens and aged-out audit rows. */
|
|
38
51
|
retention: RetentionService;
|
|
39
|
-
/** JWT for the anon role
|
|
52
|
+
/** JWT for the anon role - use as supabase-js's supabaseKey. */
|
|
40
53
|
anonKey: string;
|
|
41
|
-
/** JWT for the service_role
|
|
54
|
+
/** JWT for the service_role - bypasses RLS. */
|
|
42
55
|
serviceRoleKey: string;
|
|
56
|
+
/** Secret used to sign/verify every JWT (the resolved value, incl. the default). */
|
|
43
57
|
jwtSecret: string;
|
|
44
58
|
/** Recent server logs (also surfaced in the Studio Logs pane). */
|
|
45
59
|
logs: LogBuffer;
|
|
@@ -47,6 +61,22 @@ export interface TinbaseBackend {
|
|
|
47
61
|
inbox: InboxMailer | null;
|
|
48
62
|
/** Apply additional migrations at runtime. */
|
|
49
63
|
migrate: (migrations: MigrationFile[], seedSql?: string) => Promise<string[]>;
|
|
64
|
+
/** Tear down every background service and close the database. Idempotent-safe to await once. */
|
|
50
65
|
close: () => Promise<void>;
|
|
51
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Build a running tinbase backend from {@link BackendConfig}. Wires the
|
|
69
|
+
* database, auth, storage, realtime, edge functions, and the background
|
|
70
|
+
* services (webhooks/cron/net/retention), mints the anon/service_role keys, and
|
|
71
|
+
* returns a {@link TinbaseBackend} whose `fetch` handles every Supabase wire
|
|
72
|
+
* route.
|
|
73
|
+
*
|
|
74
|
+
* All config is optional: with an empty config it boots an in-memory PGlite
|
|
75
|
+
* backend on the Supabase local-dev defaults. If any startup step throws (e.g. a
|
|
76
|
+
* failing migration), every handle opened so far is torn down before the error
|
|
77
|
+
* propagates, so a failed construction never leaks the engine or a timer.
|
|
78
|
+
*
|
|
79
|
+
* @throws Error from {@link assertSecretsSafe} when bound to a network-exposed
|
|
80
|
+
* host with a weak/default JWT secret or a derived vault key.
|
|
81
|
+
*/
|
|
52
82
|
export declare function createBackend(config?: BackendConfig): Promise<TinbaseBackend>;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tinbase
|
|
2
|
+
* tinbase - a pure-JS, Docker-free Supabase backend on PGlite that speaks
|
|
3
3
|
* the same wire protocols as hosted Supabase, so the official supabase-js
|
|
4
4
|
* SDK works unchanged.
|
|
5
5
|
*
|
|
@@ -10,10 +10,12 @@
|
|
|
10
10
|
import { AdminApi } from './admin/api.js';
|
|
11
11
|
import { ADMIN_HTML } from './admin/ui.js';
|
|
12
12
|
import { AuthHandler } from './auth/handler.js';
|
|
13
|
+
import { RateLimiter } from './auth/rate-limit.js';
|
|
13
14
|
import { InboxMailer } from './auth/inbox.js';
|
|
15
|
+
import { loadAuthSettings } from './auth/settings.js';
|
|
14
16
|
import { LogBuffer } from './log-buffer.js';
|
|
15
17
|
import { FunctionsHandler } from './functions/handler.js';
|
|
16
|
-
import { installDenoShim
|
|
18
|
+
import { installDenoShim } from './functions/deno-shim.js';
|
|
17
19
|
import { Database } from './db/database.js';
|
|
18
20
|
import { signJwt, verifyJwt } from './jwt.js';
|
|
19
21
|
import { RealtimeEngine } from './realtime/engine.js';
|
|
@@ -25,6 +27,7 @@ import { CronService } from './cron/service.js';
|
|
|
25
27
|
import { NetService } from './net/service.js';
|
|
26
28
|
import { RetentionService } from './retention/service.js';
|
|
27
29
|
import { DEFAULT_JWT_SECRET } from './types.js';
|
|
30
|
+
import { assertSecretsSafe, isNetworkExposed } from './security.js';
|
|
28
31
|
export * from './types.js';
|
|
29
32
|
export { Database } from './db/database.js';
|
|
30
33
|
export { createPgmemEngine } from './db/pgmem-engine.js';
|
|
@@ -36,13 +39,33 @@ export { RealtimeEngine } from './realtime/engine.js';
|
|
|
36
39
|
export { signJwt, verifyJwt, decodeJwt } from './jwt.js';
|
|
37
40
|
export { FunctionsHandler } from './functions/handler.js';
|
|
38
41
|
export { generateTypes } from './gen-types.js';
|
|
39
|
-
export { installDenoShim
|
|
42
|
+
export { installDenoShim } from './functions/deno-shim.js';
|
|
40
43
|
export { WebhooksService } from './webhooks/service.js';
|
|
41
44
|
export { CronService, cronMatches } from './cron/service.js';
|
|
42
45
|
export { NetService } from './net/service.js';
|
|
43
46
|
export { RetentionService } from './retention/service.js';
|
|
44
47
|
export { snapshotSchema, diffSchemas } from './db/schema-diff.js';
|
|
45
48
|
export { inspectDb } from './db/inspect.js';
|
|
49
|
+
/**
|
|
50
|
+
* Content-Security-Policy for the studio shell. The build inlines all JS/CSS
|
|
51
|
+
* into one document, so `'unsafe-inline'` is unavoidable for scripts/styles;
|
|
52
|
+
* everything else is locked to same-origin, `frame-ancestors 'none'` blocks
|
|
53
|
+
* clickjacking, and `object-src 'none'` blocks plugin content.
|
|
54
|
+
*/
|
|
55
|
+
const ADMIN_CSP = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; " +
|
|
56
|
+
"img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self'; object-src 'none'; " +
|
|
57
|
+
"base-uri 'self'; frame-ancestors 'none'";
|
|
58
|
+
/** Stable weak ETag for the (constant) studio HTML, so reloads revalidate to 304. */
|
|
59
|
+
const ADMIN_ETAG = `W/"${fnv1a(ADMIN_HTML)}"`;
|
|
60
|
+
/** FNV-1a 32-bit hash as an 8-char hex string. Non-cryptographic, ETag-only. */
|
|
61
|
+
function fnv1a(s) {
|
|
62
|
+
let h = 0x811c9dc5;
|
|
63
|
+
for (let i = 0; i < s.length; i++) {
|
|
64
|
+
h ^= s.charCodeAt(i);
|
|
65
|
+
h = Math.imul(h, 0x01000193);
|
|
66
|
+
}
|
|
67
|
+
return (h >>> 0).toString(16).padStart(8, '0');
|
|
68
|
+
}
|
|
46
69
|
const CORS_HEADERS = {
|
|
47
70
|
'access-control-allow-origin': '*',
|
|
48
71
|
'access-control-allow-methods': 'GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD',
|
|
@@ -50,6 +73,21 @@ const CORS_HEADERS = {
|
|
|
50
73
|
'access-control-expose-headers': 'content-range, range-unit, content-profile',
|
|
51
74
|
'access-control-max-age': '86400',
|
|
52
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Build a running tinbase backend from {@link BackendConfig}. Wires the
|
|
78
|
+
* database, auth, storage, realtime, edge functions, and the background
|
|
79
|
+
* services (webhooks/cron/net/retention), mints the anon/service_role keys, and
|
|
80
|
+
* returns a {@link TinbaseBackend} whose `fetch` handles every Supabase wire
|
|
81
|
+
* route.
|
|
82
|
+
*
|
|
83
|
+
* All config is optional: with an empty config it boots an in-memory PGlite
|
|
84
|
+
* backend on the Supabase local-dev defaults. If any startup step throws (e.g. a
|
|
85
|
+
* failing migration), every handle opened so far is torn down before the error
|
|
86
|
+
* propagates, so a failed construction never leaks the engine or a timer.
|
|
87
|
+
*
|
|
88
|
+
* @throws Error from {@link assertSecretsSafe} when bound to a network-exposed
|
|
89
|
+
* host with a weak/default JWT secret or a derived vault key.
|
|
90
|
+
*/
|
|
53
91
|
export async function createBackend(config = {}) {
|
|
54
92
|
const jwtSecret = config.jwtSecret ?? DEFAULT_JWT_SECRET;
|
|
55
93
|
const siteUrl = config.siteUrl ?? 'http://localhost:54321';
|
|
@@ -65,23 +103,49 @@ export async function createBackend(config = {}) {
|
|
|
65
103
|
// Vault encryption key: use the configured value, else derive one from the
|
|
66
104
|
// JWT secret so vault secrets are encrypted at rest out of the box (better
|
|
67
105
|
// than the old plaintext store). Set a dedicated vaultKey in production.
|
|
106
|
+
const vaultKeyDerived = config.vaultKey === undefined;
|
|
68
107
|
const vaultKey = config.vaultKey ?? `tinbase-vault:${jwtSecret}`;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
108
|
+
// Weak/default secrets are fine on loopback; refuse to start with them when
|
|
109
|
+
// the server is bound to a network-exposed host.
|
|
110
|
+
assertSecretsSafe({ host: config.host, jwtSecret, vaultKeyDerived, warn: log });
|
|
111
|
+
// Resolve an external-Postgres engine on demand (Node only) so the browser
|
|
112
|
+
// core never imports the wire client.
|
|
113
|
+
let engine = config.engine;
|
|
114
|
+
if (!engine && config.databaseUrl) {
|
|
115
|
+
const { createDatabaseUrlEngine } = await import('./node/native/database-url.js');
|
|
116
|
+
engine = await createDatabaseUrlEngine({ databaseUrl: config.databaseUrl, log });
|
|
117
|
+
}
|
|
118
|
+
const db = await Database.create(engine ?? config.dataDir, { vaultKey });
|
|
119
|
+
// Anything created after the engine (a running native Postgres child, the
|
|
120
|
+
// realtime LISTEN, background timers) must be torn down if a later step throws
|
|
121
|
+
// - e.g. a failing migration - so a construction error never leaks a handle.
|
|
122
|
+
const cleanup = [];
|
|
123
|
+
const failStartup = async (e) => {
|
|
124
|
+
for (const fn of cleanup.reverse())
|
|
125
|
+
await Promise.resolve(fn()).catch(() => { });
|
|
126
|
+
await db.close().catch(() => { });
|
|
127
|
+
throw e;
|
|
128
|
+
};
|
|
129
|
+
try {
|
|
130
|
+
if (config.migrations?.length || config.seedSql) {
|
|
131
|
+
const applied = await db.runMigrations(config.migrations ?? [], config.seedSql);
|
|
132
|
+
if (applied.length > 0)
|
|
133
|
+
log(`applied migrations: ${applied.join(', ')}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
await failStartup(e);
|
|
74
138
|
}
|
|
75
139
|
const now = Math.floor(Date.now() / 1000);
|
|
76
140
|
const tenYears = 10 * 365 * 24 * 3600;
|
|
77
141
|
const anonKey = await signJwt({ iss: 'supabase', ref: 'tinbase', role: 'anon', iat: now, exp: now + tenYears }, jwtSecret);
|
|
78
142
|
const serviceRoleKey = await signJwt({ iss: 'supabase', ref: 'tinbase', role: 'service_role', iat: now, exp: now + tenYears }, jwtSecret);
|
|
79
|
-
const rest = new RestHandler(db);
|
|
143
|
+
const rest = new RestHandler(db, { exposedSchemas: config.dbSchemas, maxRows: config.maxRows });
|
|
80
144
|
// With no custom mailer, capture auth emails in an in-memory inbox (viewable
|
|
81
145
|
// at /inbox) and log a metadata-only line. A provided mailer takes over and no
|
|
82
146
|
// inbox is mounted.
|
|
83
147
|
//
|
|
84
|
-
// The server log records only the recipient and subject
|
|
148
|
+
// The server log records only the recipient and subject - never the body,
|
|
85
149
|
// which carries OTP codes and magic links. Set logMailBody: true to also log
|
|
86
150
|
// the full body for local debugging (the /inbox UI always shows it in full).
|
|
87
151
|
const inbox = config.mailer
|
|
@@ -90,27 +154,52 @@ export async function createBackend(config = {}) {
|
|
|
90
154
|
? `[mail] to=${msg.to} subject="${msg.subject}"\n${msg.text}`
|
|
91
155
|
: `[mail] to=${msg.to} subject="${msg.subject}"`));
|
|
92
156
|
const mailer = config.mailer ?? inbox;
|
|
157
|
+
// one shared runtime-settings object: config.toml [auth] provides the
|
|
158
|
+
// committed defaults, the persisted auth.config row layers live studio edits
|
|
159
|
+
// on top, and the auth handler reads the merged object per request
|
|
160
|
+
const authSettings = await loadAuthSettings(db, config.authSettings);
|
|
161
|
+
const storage = new StorageHandler(db, config.storageDriver ?? new MemoryStorageDriver(), {
|
|
162
|
+
jwtSecret,
|
|
163
|
+
defaultFileSizeLimit: config.storageFileSizeLimit,
|
|
164
|
+
log,
|
|
165
|
+
});
|
|
166
|
+
if (config.buckets?.length)
|
|
167
|
+
await storage.ensureBuckets(config.buckets);
|
|
93
168
|
const auth = new AuthHandler(db, {
|
|
94
169
|
jwtSecret,
|
|
95
170
|
siteUrl,
|
|
96
171
|
jwtExpiry,
|
|
172
|
+
sessionTimeboxSeconds: config.sessionTimeboxSeconds,
|
|
97
173
|
mailer,
|
|
98
174
|
oauthProviders: config.oauthProviders,
|
|
99
175
|
oauthFetch: config.oauthFetch,
|
|
176
|
+
uriAllowList: config.uriAllowList,
|
|
177
|
+
enforceRedirectAllowList: isNetworkExposed(config.host),
|
|
178
|
+
settings: authSettings,
|
|
179
|
+
rateLimiter: new RateLimiter(config.authRateLimits),
|
|
100
180
|
});
|
|
101
|
-
|
|
181
|
+
cleanup.push(() => auth.stop());
|
|
102
182
|
const realtime = new RealtimeEngine(db, jwtSecret);
|
|
103
|
-
|
|
104
|
-
const webhooks = new WebhooksService(db, config.webhookFetch, (d) => log(`[webhook] ${d.event.type} ${d.event.schema}.${d.event.table} -> ${d.webhook.url} ${d.ok ? d.status : 'FAILED ' + (d.error ?? '')}`));
|
|
105
|
-
if (config.webhooks?.length)
|
|
106
|
-
await webhooks.start(config.webhooks);
|
|
183
|
+
const webhooks = new WebhooksService(db, config.webhookFetch, (d) => log(`[webhook] ${d.event.type} ${d.event.schema}.${d.event.table} -> ${d.webhook.url} ${d.ok ? d.status : 'FAILED ' + (d.error ?? '')}`), isNetworkExposed(config.host));
|
|
107
184
|
const cron = new CronService(db);
|
|
108
|
-
cron.start();
|
|
109
185
|
const retention = new RetentionService(db, config.retention);
|
|
110
|
-
retention.start();
|
|
111
186
|
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}`));
|
|
112
|
-
|
|
113
|
-
|
|
187
|
+
try {
|
|
188
|
+
await realtime.start();
|
|
189
|
+
cleanup.push(() => realtime.stop());
|
|
190
|
+
if (config.webhooks?.length)
|
|
191
|
+
await webhooks.start(config.webhooks);
|
|
192
|
+
cleanup.push(() => webhooks.stopService());
|
|
193
|
+
cron.start();
|
|
194
|
+
cleanup.push(() => cron.stop());
|
|
195
|
+
retention.start();
|
|
196
|
+
cleanup.push(() => retention.stop());
|
|
197
|
+
net.start();
|
|
198
|
+
cleanup.push(() => net.stop());
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
await failStartup(e);
|
|
202
|
+
}
|
|
114
203
|
const fnMap = config.functions instanceof Map
|
|
115
204
|
? config.functions
|
|
116
205
|
: new Map(Object.entries(config.functions ?? {}));
|
|
@@ -120,9 +209,18 @@ export async function createBackend(config = {}) {
|
|
|
120
209
|
SUPABASE_SERVICE_ROLE_KEY: serviceRoleKey,
|
|
121
210
|
...(config.functionEnv ?? {}),
|
|
122
211
|
};
|
|
123
|
-
|
|
212
|
+
const admin = new AdminApi(db, logs, { anonKey, jwtSecret }, {
|
|
213
|
+
edgeFunctions: [...fnMap.keys()],
|
|
214
|
+
oauthProviders: Object.keys(config.oauthProviders ?? {}),
|
|
215
|
+
inbox: inbox !== null,
|
|
216
|
+
webhooks: config.webhooks ?? [],
|
|
217
|
+
authSettings,
|
|
218
|
+
functionEnv: fnEnv,
|
|
219
|
+
});
|
|
220
|
+
// install the Deno global once per process; the shim's Deno.env is bound to
|
|
221
|
+
// this backend's fnEnv per-invocation by FunctionsHandler (so backends don't
|
|
222
|
+
// share env through the global).
|
|
124
223
|
installDenoShim();
|
|
125
|
-
setDenoEnv(fnEnv);
|
|
126
224
|
const functions = new FunctionsHandler(fnMap, fnEnv);
|
|
127
225
|
async function resolveContext(req, url) {
|
|
128
226
|
const authz = req.headers.get('authorization');
|
|
@@ -162,19 +260,43 @@ export async function createBackend(config = {}) {
|
|
|
162
260
|
headers: { 'content-type': 'application/json' },
|
|
163
261
|
}));
|
|
164
262
|
}
|
|
165
|
-
|
|
166
|
-
|
|
263
|
+
// studio SPA - serve the shell for every /_/* route so deep links work.
|
|
264
|
+
// no-cache forces revalidation (the whole app is inlined in this one
|
|
265
|
+
// document); the ETag then lets an unchanged studio return 304 instead of
|
|
266
|
+
// re-sending the full ~0.6 MB body. A strict CSP hardens the shell.
|
|
267
|
+
if (path === '/_' || path.startsWith('/_/')) {
|
|
268
|
+
const headers = {
|
|
269
|
+
'content-type': 'text/html; charset=utf-8',
|
|
270
|
+
'cache-control': 'no-cache',
|
|
271
|
+
'content-security-policy': ADMIN_CSP,
|
|
272
|
+
'x-content-type-options': 'nosniff',
|
|
273
|
+
'x-frame-options': 'DENY',
|
|
274
|
+
etag: ADMIN_ETAG,
|
|
275
|
+
};
|
|
276
|
+
if (req.headers.get('if-none-match') === ADMIN_ETAG) {
|
|
277
|
+
return new Response(null, { status: 304, headers });
|
|
278
|
+
}
|
|
279
|
+
return new Response(ADMIN_HTML, { status: 200, headers });
|
|
167
280
|
}
|
|
168
281
|
// local email inbox (dev-only; mounted only when using the default mailer)
|
|
169
282
|
if (inbox && (path === '/inbox' || path.startsWith('/inbox/'))) {
|
|
170
283
|
return withCors(inbox.serve(req, url));
|
|
171
284
|
}
|
|
172
285
|
// public endpoints that skip apikey checks
|
|
173
|
-
if (path.startsWith('/storage/v1/object/public/') ||
|
|
286
|
+
if (path.startsWith('/storage/v1/object/public/') ||
|
|
287
|
+
path.startsWith('/storage/v1/object/sign/') ||
|
|
288
|
+
path.startsWith('/storage/v1/render/image/public/') ||
|
|
289
|
+
path.startsWith('/storage/v1/render/image/sign/')) {
|
|
174
290
|
if (req.method === 'GET' || req.method === 'HEAD') {
|
|
175
291
|
return withCors(await storage.handle(req, { role: 'anon', claims: null }, url));
|
|
176
292
|
}
|
|
177
293
|
}
|
|
294
|
+
if (config.authEnabled === false && path.startsWith('/auth/v1')) {
|
|
295
|
+
return withCors(new Response(JSON.stringify({ message: 'Auth service is disabled' }), {
|
|
296
|
+
status: 404,
|
|
297
|
+
headers: { 'content-type': 'application/json' },
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
178
300
|
if ((path === '/auth/v1/verify' || path === '/auth/v1/authorize' || path === '/auth/v1/callback') &&
|
|
179
301
|
(req.method === 'GET' || req.method === 'POST')) {
|
|
180
302
|
// email-link clicks and OAuth provider redirects arrive without an apikey
|
|
@@ -183,14 +305,14 @@ export async function createBackend(config = {}) {
|
|
|
183
305
|
if (path.startsWith('/auth/v1/')) {
|
|
184
306
|
// GoTrue validates the apikey header, but user JWTs ride Authorization
|
|
185
307
|
const apikey = req.headers.get('apikey') ?? url.searchParams.get('apikey');
|
|
186
|
-
|
|
308
|
+
const keyClaims = apikey ? await verifyJwt(apikey, jwtSecret) : null;
|
|
309
|
+
if (!keyClaims) {
|
|
187
310
|
return withCors(new Response(JSON.stringify({ message: 'No API key found in request' }), {
|
|
188
311
|
status: 401,
|
|
189
312
|
headers: { 'content-type': 'application/json' },
|
|
190
313
|
}));
|
|
191
314
|
}
|
|
192
|
-
const
|
|
193
|
-
const ctx = { role: String(keyClaims?.role ?? 'anon'), claims: keyClaims };
|
|
315
|
+
const ctx = { role: String(keyClaims.role ?? 'anon'), claims: keyClaims };
|
|
194
316
|
return withCors(await auth.handle(req, ctx, url));
|
|
195
317
|
}
|
|
196
318
|
const ctx = await resolveContext(req, url);
|
|
@@ -215,10 +337,26 @@ export async function createBackend(config = {}) {
|
|
|
215
337
|
headers: { 'content-type': 'application/json' },
|
|
216
338
|
}));
|
|
217
339
|
}
|
|
340
|
+
// Last-resort guard: the fetch contract is Request → Response, so an
|
|
341
|
+
// unexpected throw from any handler must become a 500, never a rejected fetch
|
|
342
|
+
// (in-process/browser callers have no HTTP layer to convert a rejection).
|
|
343
|
+
const safeHandle = async (req) => {
|
|
344
|
+
try {
|
|
345
|
+
return await handle(req);
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
349
|
+
log(`[error] unhandled: ${msg}`);
|
|
350
|
+
return withCors(new Response(JSON.stringify({ message: 'Internal Server Error' }), {
|
|
351
|
+
status: 500,
|
|
352
|
+
headers: { 'content-type': 'application/json' },
|
|
353
|
+
}));
|
|
354
|
+
}
|
|
355
|
+
};
|
|
218
356
|
// request logging for the Logs pane (skip health checks and the log-polling
|
|
219
357
|
// endpoint itself to avoid noise / self-reference)
|
|
220
358
|
const loggedFetch = async (req) => {
|
|
221
|
-
const res = await
|
|
359
|
+
const res = await safeHandle(req);
|
|
222
360
|
try {
|
|
223
361
|
const p = new URL(req.url).pathname;
|
|
224
362
|
if (p !== '/health' && p !== '/' && p !== '/admin/v1/logs') {
|
|
@@ -247,8 +385,9 @@ export async function createBackend(config = {}) {
|
|
|
247
385
|
inbox,
|
|
248
386
|
migrate: (migrations, seedSql) => db.runMigrations(migrations, seedSql),
|
|
249
387
|
close: async () => {
|
|
250
|
-
|
|
251
|
-
|
|
388
|
+
auth.stop();
|
|
389
|
+
await cron.stop();
|
|
390
|
+
await net.stop();
|
|
252
391
|
await retention.stop();
|
|
253
392
|
webhooks.stopService();
|
|
254
393
|
realtime.stop();
|
|
@@ -256,6 +395,7 @@ export async function createBackend(config = {}) {
|
|
|
256
395
|
},
|
|
257
396
|
};
|
|
258
397
|
}
|
|
398
|
+
/** Add the permissive CORS headers to a response, leaving any already-set header untouched. */
|
|
259
399
|
function withCors(res) {
|
|
260
400
|
for (const [k, v] of Object.entries(CORS_HEADERS)) {
|
|
261
401
|
if (!res.headers.has(k))
|
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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"}
|