tinbase 0.2.2 → 0.6.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 +64 -31
- package/dist/admin/api.d.ts +8 -1
- package/dist/admin/api.js +94 -1
- package/dist/admin/api.js.map +1 -1
- package/dist/admin/ui.d.ts +1 -1
- package/dist/admin/ui.js +16 -16
- package/dist/auth/handler.d.ts +13 -1
- package/dist/auth/handler.js +173 -6
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/inbox.d.ts +31 -0
- package/dist/auth/inbox.js +112 -0
- package/dist/auth/inbox.js.map +1 -0
- package/dist/auth/oauth.d.ts +59 -0
- package/dist/auth/oauth.js +209 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/qr.d.ts +8 -0
- package/dist/auth/qr.js +376 -0
- package/dist/auth/qr.js.map +1 -0
- package/dist/auth/totp.d.ts +19 -0
- package/dist/auth/totp.js +101 -0
- package/dist/auth/totp.js.map +1 -0
- package/dist/cli.js +168 -10
- package/dist/cli.js.map +1 -1
- package/dist/cron/service.d.ts +29 -0
- package/dist/cron/service.js +134 -0
- package/dist/cron/service.js.map +1 -0
- package/dist/db/bootstrap.d.ts +8 -1
- package/dist/db/bootstrap.js +240 -1
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/db/database.d.ts +24 -0
- package/dist/db/database.js +61 -2
- package/dist/db/database.js.map +1 -1
- package/dist/db/emulated.d.ts +12 -0
- package/dist/db/emulated.js +156 -0
- package/dist/db/emulated.js.map +1 -0
- package/dist/db/engine.d.ts +2 -0
- package/dist/db/engine.js.map +1 -1
- package/dist/db/inspect.d.ts +13 -0
- package/dist/db/inspect.js +22 -0
- package/dist/db/inspect.js.map +1 -0
- package/dist/db/pgmem-engine.d.ts +22 -0
- package/dist/db/pgmem-engine.js +135 -0
- package/dist/db/pgmem-engine.js.map +1 -0
- package/dist/db/schema-diff.d.ts +23 -0
- package/dist/db/schema-diff.js +182 -0
- package/dist/db/schema-diff.js.map +1 -0
- package/dist/functions/deno-shim.d.ts +24 -0
- package/dist/functions/deno-shim.js +47 -0
- package/dist/functions/deno-shim.js.map +1 -0
- package/dist/functions/handler.d.ts +3 -1
- package/dist/functions/handler.js.map +1 -1
- package/dist/gen-types.d.ts +17 -0
- package/dist/gen-types.js +222 -0
- package/dist/gen-types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +83 -15
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +7 -0
- package/dist/jwt.js.map +1 -1
- package/dist/log-buffer.d.ts +21 -0
- package/dist/log-buffer.js +20 -0
- package/dist/log-buffer.js.map +1 -0
- package/dist/node/bundle-function.d.ts +7 -0
- package/dist/node/bundle-function.js +90 -0
- package/dist/node/bundle-function.js.map +1 -0
- package/dist/node/db-diff.d.ts +34 -0
- package/dist/node/db-diff.js +82 -0
- package/dist/node/db-diff.js.map +1 -0
- package/dist/node/index.d.ts +4 -1
- package/dist/node/index.js +4 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/load-functions.d.ts +6 -0
- package/dist/node/load-functions.js +60 -8
- package/dist/node/load-functions.js.map +1 -1
- package/dist/node/load-oauth.d.ts +4 -0
- package/dist/node/load-oauth.js +126 -0
- package/dist/node/load-oauth.js.map +1 -0
- package/dist/node/native/engine.d.ts +1 -1
- package/dist/node/native/engine.js +45 -14
- package/dist/node/native/engine.js.map +1 -1
- package/dist/realtime/engine.d.ts +24 -1
- package/dist/realtime/engine.js +154 -2
- package/dist/realtime/engine.js.map +1 -1
- package/dist/rest/build.d.ts +5 -1
- package/dist/rest/build.js +17 -8
- package/dist/rest/build.js.map +1 -1
- package/dist/rest/handler.js +22 -9
- package/dist/rest/handler.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.js.map +1 -1
- package/dist/webhooks/service.d.ts +47 -0
- package/dist/webhooks/service.js +86 -0
- package/dist/webhooks/service.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Encode bytes as unpadded RFC 4648 base32 (the format authenticator apps expect). */
|
|
2
|
+
export declare function base32Encode(bytes: Uint8Array): string;
|
|
3
|
+
/** Decode an unpadded/padded base32 string to bytes (case-insensitive). */
|
|
4
|
+
export declare function base32Decode(input: string): Uint8Array;
|
|
5
|
+
/** A fresh 20-byte (160-bit) base32 secret, the GoTrue/authenticator default. */
|
|
6
|
+
export declare function generateTotpSecret(): string;
|
|
7
|
+
/** Build the otpauth:// URI an authenticator app scans. */
|
|
8
|
+
export declare function otpauthUri(opts: {
|
|
9
|
+
secret: string;
|
|
10
|
+
account: string;
|
|
11
|
+
issuer: string;
|
|
12
|
+
}): string;
|
|
13
|
+
/** Current 6-digit code for a base32 secret (used in tests and self-checks). */
|
|
14
|
+
export declare function totpNow(secretBase32: string, atMs?: number): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Verify a submitted code against the secret, allowing ±`window` steps of
|
|
17
|
+
* clock skew (default ±1 = a 90-second acceptance window, like GoTrue).
|
|
18
|
+
*/
|
|
19
|
+
export declare function verifyTotp(secretBase32: string, code: string, window?: number, atMs?: number): Promise<boolean>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOTP (RFC 6238) for MFA — pure WebCrypto, no dependencies. GoTrue uses
|
|
3
|
+
* SHA-1, 6 digits, a 30-second period; we mirror that so any standard
|
|
4
|
+
* authenticator app (Google Authenticator, 1Password, …) works against the
|
|
5
|
+
* secret we hand out at enroll time.
|
|
6
|
+
*/
|
|
7
|
+
const B32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
8
|
+
/** Encode bytes as unpadded RFC 4648 base32 (the format authenticator apps expect). */
|
|
9
|
+
export function base32Encode(bytes) {
|
|
10
|
+
let bits = 0;
|
|
11
|
+
let value = 0;
|
|
12
|
+
let out = '';
|
|
13
|
+
for (const b of bytes) {
|
|
14
|
+
value = (value << 8) | b;
|
|
15
|
+
bits += 8;
|
|
16
|
+
while (bits >= 5) {
|
|
17
|
+
out += B32_ALPHABET[(value >>> (bits - 5)) & 31];
|
|
18
|
+
bits -= 5;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (bits > 0)
|
|
22
|
+
out += B32_ALPHABET[(value << (5 - bits)) & 31];
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
/** Decode an unpadded/padded base32 string to bytes (case-insensitive). */
|
|
26
|
+
export function base32Decode(input) {
|
|
27
|
+
const clean = input.toUpperCase().replace(/=+$/, '').replace(/\s/g, '');
|
|
28
|
+
let bits = 0;
|
|
29
|
+
let value = 0;
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const ch of clean) {
|
|
32
|
+
const idx = B32_ALPHABET.indexOf(ch);
|
|
33
|
+
if (idx === -1)
|
|
34
|
+
continue;
|
|
35
|
+
value = (value << 5) | idx;
|
|
36
|
+
bits += 5;
|
|
37
|
+
if (bits >= 8) {
|
|
38
|
+
out.push((value >>> (bits - 8)) & 0xff);
|
|
39
|
+
bits -= 8;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return new Uint8Array(out);
|
|
43
|
+
}
|
|
44
|
+
/** A fresh 20-byte (160-bit) base32 secret, the GoTrue/authenticator default. */
|
|
45
|
+
export function generateTotpSecret() {
|
|
46
|
+
const bytes = new Uint8Array(20);
|
|
47
|
+
crypto.getRandomValues(bytes);
|
|
48
|
+
return base32Encode(bytes);
|
|
49
|
+
}
|
|
50
|
+
/** Build the otpauth:// URI an authenticator app scans. */
|
|
51
|
+
export function otpauthUri(opts) {
|
|
52
|
+
const label = `${opts.issuer}:${opts.account}`;
|
|
53
|
+
const params = new URLSearchParams({
|
|
54
|
+
secret: opts.secret,
|
|
55
|
+
issuer: opts.issuer,
|
|
56
|
+
algorithm: 'SHA1',
|
|
57
|
+
digits: '6',
|
|
58
|
+
period: '30',
|
|
59
|
+
});
|
|
60
|
+
return `otpauth://totp/${encodeURIComponent(label)}?${params.toString()}`;
|
|
61
|
+
}
|
|
62
|
+
/** Compute the 6-digit TOTP for a given counter (RFC 6238 dynamic truncation). */
|
|
63
|
+
async function hotp(secret, counter) {
|
|
64
|
+
const msg = new Uint8Array(8);
|
|
65
|
+
// 64-bit big-endian counter (safe integer range covers TOTP for millennia)
|
|
66
|
+
let c = counter;
|
|
67
|
+
for (let i = 7; i >= 0; i--) {
|
|
68
|
+
msg[i] = c & 0xff;
|
|
69
|
+
c = Math.floor(c / 256);
|
|
70
|
+
}
|
|
71
|
+
const key = await crypto.subtle.importKey('raw', secret, { name: 'HMAC', hash: 'SHA-1' }, false, ['sign']);
|
|
72
|
+
const hmac = new Uint8Array(await crypto.subtle.sign('HMAC', key, msg));
|
|
73
|
+
const offset = hmac[hmac.length - 1] & 0x0f;
|
|
74
|
+
const bin = ((hmac[offset] & 0x7f) << 24) |
|
|
75
|
+
((hmac[offset + 1] & 0xff) << 16) |
|
|
76
|
+
((hmac[offset + 2] & 0xff) << 8) |
|
|
77
|
+
(hmac[offset + 3] & 0xff);
|
|
78
|
+
return (bin % 1_000_000).toString().padStart(6, '0');
|
|
79
|
+
}
|
|
80
|
+
/** Current 6-digit code for a base32 secret (used in tests and self-checks). */
|
|
81
|
+
export async function totpNow(secretBase32, atMs = Date.now()) {
|
|
82
|
+
const counter = Math.floor(atMs / 1000 / 30);
|
|
83
|
+
return hotp(base32Decode(secretBase32), counter);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Verify a submitted code against the secret, allowing ±`window` steps of
|
|
87
|
+
* clock skew (default ±1 = a 90-second acceptance window, like GoTrue).
|
|
88
|
+
*/
|
|
89
|
+
export async function verifyTotp(secretBase32, code, window = 1, atMs = Date.now()) {
|
|
90
|
+
const trimmed = (code ?? '').trim();
|
|
91
|
+
if (!/^\d{6}$/.test(trimmed))
|
|
92
|
+
return false;
|
|
93
|
+
const secret = base32Decode(secretBase32);
|
|
94
|
+
const base = Math.floor(atMs / 1000 / 30);
|
|
95
|
+
for (let i = -window; i <= window; i++) {
|
|
96
|
+
if ((await hotp(secret, base + i)) === trimmed)
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=totp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.js","sourceRoot":"","sources":["../../src/auth/totp.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
* tinbase status show applied migrations
|
|
8
8
|
* tinbase keys print anon/service_role keys for the JWT secret
|
|
9
9
|
*/
|
|
10
|
-
import { mkdir } from 'node:fs/promises';
|
|
10
|
+
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
11
12
|
import { join, resolve } from 'node:path';
|
|
12
|
-
import { createBackend } from './index.js';
|
|
13
|
+
import { createBackend, generateTypes, createPgmemEngine, inspectDb } from './index.js';
|
|
14
|
+
import { computeDbDiff, pullSchema, shadowNativeDataDir } from './node/db-diff.js';
|
|
13
15
|
import { createNativeEngine } from './node/native/engine.js';
|
|
14
16
|
import { FsStorageDriver } from './node/fs-driver.js';
|
|
15
|
-
import { loadFunctions } from './node/load-functions.js';
|
|
17
|
+
import { loadFunctions, loadFunctionEnv } from './node/load-functions.js';
|
|
18
|
+
import { loadOAuthProviders } from './node/load-oauth.js';
|
|
16
19
|
import { loadSupabaseProject } from './node/project.js';
|
|
17
20
|
import { serve } from './node/server.js';
|
|
18
21
|
import { serveBun } from './node/bun-server.js';
|
|
@@ -26,6 +29,7 @@ function parseArgs(argv) {
|
|
|
26
29
|
const command = args[0] && !args[0].startsWith('-') ? args.shift() : 'start';
|
|
27
30
|
const opts = {
|
|
28
31
|
command,
|
|
32
|
+
positionals: [],
|
|
29
33
|
// deploy platforms inject PORT; TINBASE_PORT wins if both are set
|
|
30
34
|
port: parseInt(process.env.TINBASE_PORT ?? process.env.PORT ?? '54321', 10),
|
|
31
35
|
host: '127.0.0.1',
|
|
@@ -53,10 +57,12 @@ function parseArgs(argv) {
|
|
|
53
57
|
opts.jwtSecret = next();
|
|
54
58
|
else if (a === '--memory')
|
|
55
59
|
opts.memory = true;
|
|
60
|
+
else if (a === '-f' || a === '--file')
|
|
61
|
+
opts.diffFile = next();
|
|
56
62
|
else if (a === '--engine') {
|
|
57
63
|
const v = next();
|
|
58
|
-
if (v !== 'wasm' && v !== 'native') {
|
|
59
|
-
console.error(`--engine must be wasm or
|
|
64
|
+
if (v !== 'wasm' && v !== 'native' && v !== 'pgmem') {
|
|
65
|
+
console.error(`--engine must be wasm, native, or pgmem, got: ${v}`);
|
|
60
66
|
process.exit(1);
|
|
61
67
|
}
|
|
62
68
|
opts.engine = v;
|
|
@@ -65,6 +71,9 @@ function parseArgs(argv) {
|
|
|
65
71
|
printHelp();
|
|
66
72
|
process.exit(0);
|
|
67
73
|
}
|
|
74
|
+
else if (!a.startsWith('-')) {
|
|
75
|
+
opts.positionals.push(a);
|
|
76
|
+
}
|
|
68
77
|
else {
|
|
69
78
|
console.error(`unknown option: ${a}`);
|
|
70
79
|
process.exit(1);
|
|
@@ -76,6 +85,17 @@ function parseArgs(argv) {
|
|
|
76
85
|
opts.storageDir = join(opts.dir, '.tinbase', 'storage');
|
|
77
86
|
return opts;
|
|
78
87
|
}
|
|
88
|
+
/** Optional webhooks config at supabase/webhooks.json: [{ table, events?, url, headers? }]. */
|
|
89
|
+
function loadWebhooks(dir) {
|
|
90
|
+
try {
|
|
91
|
+
const raw = readFileSync(join(dir, 'supabase', 'webhooks.json'), 'utf8');
|
|
92
|
+
const parsed = JSON.parse(raw);
|
|
93
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
79
99
|
function printHelp() {
|
|
80
100
|
console.log(`tinbase — Supabase-compatible backend on PGlite (no Docker)
|
|
81
101
|
|
|
@@ -86,6 +106,11 @@ Commands:
|
|
|
86
106
|
migrate apply pending supabase/migrations/*.sql and exit
|
|
87
107
|
status list applied migrations
|
|
88
108
|
keys print anon and service_role keys
|
|
109
|
+
gen types print a TypeScript Database type for the current schema
|
|
110
|
+
db reset wipe the database + storage and re-run migrations and seed
|
|
111
|
+
db diff print DDL for schema changes not yet in migrations (-f <name> to write a migration)
|
|
112
|
+
db pull write the current schema delta as a migration and mark it applied ([name] optional)
|
|
113
|
+
inspect per-table row counts and on-disk size
|
|
89
114
|
|
|
90
115
|
Options:
|
|
91
116
|
-p, --port <n> port to listen on (default 54321; also TINBASE_PORT/PORT env)
|
|
@@ -95,12 +120,132 @@ Options:
|
|
|
95
120
|
--storage-dir <p> storage files directory (default <dir>/.tinbase/storage)
|
|
96
121
|
--jwt-secret <s> JWT secret (or TINBASE_JWT_SECRET env var)
|
|
97
122
|
--memory in-memory database (no persistence, wasm engine only)
|
|
98
|
-
--engine <e> wasm (PGlite, default)
|
|
99
|
-
|
|
123
|
+
--engine <e> wasm (PGlite, default), native (embedded Postgres),
|
|
124
|
+
or pgmem (ultralight in-memory subset — no RLS, cron,
|
|
125
|
+
or pgmq; local dev / preview only)
|
|
100
126
|
`);
|
|
101
127
|
}
|
|
102
128
|
async function main() {
|
|
103
129
|
const opts = parseArgs(process.argv.slice(2));
|
|
130
|
+
if (opts.command === 'db' && opts.positionals[0] === 'diff') {
|
|
131
|
+
// `tinbase db diff [-f name]` — DDL for schema changes not yet in migrations
|
|
132
|
+
const project = await loadSupabaseProject(opts.dir);
|
|
133
|
+
const nativeLive = opts.engine === 'native'
|
|
134
|
+
? await createNativeEngine({ dataDir: join(opts.dir, '.tinbase', 'pgdata') })
|
|
135
|
+
: undefined;
|
|
136
|
+
const ddl = await computeDbDiff({
|
|
137
|
+
liveEngine: nativeLive,
|
|
138
|
+
liveDataDir: opts.engine === 'native' ? undefined : join(opts.dir, '.tinbase', 'db'),
|
|
139
|
+
migrations: project.migrations,
|
|
140
|
+
makeShadowEngine: opts.engine === 'native' ? () => createNativeEngine({ dataDir: shadowNativeDataDir() }) : undefined,
|
|
141
|
+
});
|
|
142
|
+
if (ddl.length === 0) {
|
|
143
|
+
console.error('No schema changes found.');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const body = ddl.join('\n\n') + '\n';
|
|
147
|
+
if (opts.diffFile) {
|
|
148
|
+
const stamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
|
|
149
|
+
const path = join(opts.dir, 'supabase', 'migrations', `${stamp}_${opts.diffFile}.sql`);
|
|
150
|
+
await mkdir(join(opts.dir, 'supabase', 'migrations'), { recursive: true });
|
|
151
|
+
await writeFile(path, body);
|
|
152
|
+
console.error(`Wrote ${path}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
process.stdout.write(body);
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (opts.command === 'db' && opts.positionals[0] === 'pull') {
|
|
160
|
+
// `tinbase db pull [name]` — write the current schema delta as a migration
|
|
161
|
+
// and record it as already applied (so `start` won't re-run it)
|
|
162
|
+
const project = await loadSupabaseProject(opts.dir);
|
|
163
|
+
const nativeLive = opts.engine === 'native'
|
|
164
|
+
? await createNativeEngine({ dataDir: join(opts.dir, '.tinbase', 'pgdata') })
|
|
165
|
+
: undefined;
|
|
166
|
+
const res = await pullSchema({
|
|
167
|
+
liveEngine: nativeLive,
|
|
168
|
+
liveDataDir: opts.engine === 'native' ? undefined : join(opts.dir, '.tinbase', 'db'),
|
|
169
|
+
migrations: project.migrations,
|
|
170
|
+
makeShadowEngine: opts.engine === 'native' ? () => createNativeEngine({ dataDir: shadowNativeDataDir() }) : undefined,
|
|
171
|
+
migrationsDir: join(opts.dir, 'supabase', 'migrations'),
|
|
172
|
+
name: opts.positionals[1] || 'remote_schema',
|
|
173
|
+
});
|
|
174
|
+
if (!res.path) {
|
|
175
|
+
console.error('No schema changes to pull.');
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
console.error(`Wrote ${res.path} and recorded it as applied (version ${res.version}).`);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (opts.command === 'inspect') {
|
|
182
|
+
// `tinbase inspect` — per-table row counts and on-disk size
|
|
183
|
+
const project = await loadSupabaseProject(opts.dir);
|
|
184
|
+
const engine = opts.engine === 'native' ? await createNativeEngine({ dataDir: join(opts.dir, '.tinbase', 'pgdata') }) : undefined;
|
|
185
|
+
const backend = await createBackend({
|
|
186
|
+
engine,
|
|
187
|
+
dataDir: opts.engine === 'native' ? undefined : join(opts.dir, '.tinbase', 'db'),
|
|
188
|
+
migrations: project.migrations,
|
|
189
|
+
});
|
|
190
|
+
const rows = await inspectDb(backend.db, 'public');
|
|
191
|
+
if (rows.length === 0) {
|
|
192
|
+
console.log('No tables in schema "public".');
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const pad = Math.max(5, ...rows.map((r) => r.table.length));
|
|
196
|
+
console.log(`${'table'.padEnd(pad)} ${'rows'.padStart(10)} size`);
|
|
197
|
+
for (const r of rows) {
|
|
198
|
+
console.log(`${r.table.padEnd(pad)} ${String(r.rows).padStart(10)} ${r.size}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
await backend.close();
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (opts.command === 'db') {
|
|
205
|
+
const sub = opts.positionals[0];
|
|
206
|
+
if (sub !== 'reset') {
|
|
207
|
+
console.error(`unknown db subcommand: ${sub ?? '(none)'} (supported: reset, diff, pull)`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
// `tinbase db reset` — wipe data + storage and re-run migrations + seed fresh
|
|
211
|
+
const dataDir = opts.dataDir ?? join(opts.dir, '.tinbase', opts.engine === 'native' ? 'pgdata' : 'db');
|
|
212
|
+
const storageDir = opts.storageDir || join(opts.dir, '.tinbase', 'storage');
|
|
213
|
+
await rm(dataDir, { recursive: true, force: true });
|
|
214
|
+
await rm(storageDir, { recursive: true, force: true });
|
|
215
|
+
console.log(' wiped database and storage');
|
|
216
|
+
const project = await loadSupabaseProject(opts.dir);
|
|
217
|
+
const engine = opts.engine === 'native'
|
|
218
|
+
? await createNativeEngine({ dataDir, log: (m) => console.log(` ${m}`) })
|
|
219
|
+
: undefined;
|
|
220
|
+
if (opts.engine !== 'native')
|
|
221
|
+
await mkdir(dataDir, { recursive: true });
|
|
222
|
+
await mkdir(storageDir, { recursive: true });
|
|
223
|
+
const backend = await createBackend({
|
|
224
|
+
engine,
|
|
225
|
+
dataDir: opts.engine === 'native' ? undefined : dataDir,
|
|
226
|
+
jwtSecret: opts.jwtSecret,
|
|
227
|
+
migrations: project.migrations,
|
|
228
|
+
seedSql: project.seedSql,
|
|
229
|
+
storageDriver: new FsStorageDriver(storageDir),
|
|
230
|
+
log: (m) => console.log(` ${m}`),
|
|
231
|
+
});
|
|
232
|
+
const applied = await backend.db.listAppliedMigrations();
|
|
233
|
+
console.log(` reset complete — ${applied.length} migration(s) applied${project.seedSql ? ' + seed' : ''}`);
|
|
234
|
+
await backend.close();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (opts.command === 'gen') {
|
|
238
|
+
// `tinbase gen types [typescript]` — emit a Supabase-shaped Database type to stdout
|
|
239
|
+
const project = await loadSupabaseProject(opts.dir);
|
|
240
|
+
const backend = await createBackend({
|
|
241
|
+
migrations: project.migrations,
|
|
242
|
+
seedSql: project.seedSql,
|
|
243
|
+
jwtSecret: opts.jwtSecret,
|
|
244
|
+
});
|
|
245
|
+
process.stdout.write(await generateTypes(backend.db, 'public'));
|
|
246
|
+
await backend.close();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
104
249
|
if (opts.command === 'keys') {
|
|
105
250
|
const now = Math.floor(Date.now() / 1000);
|
|
106
251
|
const exp = now + 10 * 365 * 24 * 3600;
|
|
@@ -112,6 +257,9 @@ async function main() {
|
|
|
112
257
|
}
|
|
113
258
|
const project = await loadSupabaseProject(opts.dir);
|
|
114
259
|
const functions = await loadFunctions(opts.dir);
|
|
260
|
+
const functionEnv = await loadFunctionEnv(opts.dir);
|
|
261
|
+
const oauthProviders = loadOAuthProviders(opts.dir);
|
|
262
|
+
const webhooks = loadWebhooks(opts.dir);
|
|
115
263
|
if (opts.dataDir)
|
|
116
264
|
await mkdir(opts.dataDir, { recursive: true });
|
|
117
265
|
await mkdir(opts.storageDir, { recursive: true });
|
|
@@ -120,7 +268,12 @@ async function main() {
|
|
|
120
268
|
dataDir: join(opts.dir, '.tinbase', 'pgdata'),
|
|
121
269
|
log: (msg) => console.log(` ${msg}`),
|
|
122
270
|
})
|
|
123
|
-
:
|
|
271
|
+
: opts.engine === 'pgmem'
|
|
272
|
+
? await createPgmemEngine()
|
|
273
|
+
: undefined;
|
|
274
|
+
if (opts.engine === 'pgmem') {
|
|
275
|
+
console.log(' ⚠ pg-mem engine: in-memory subset — no RLS, cron, or pgmq (realtime is unfiltered) — local dev / preview only');
|
|
276
|
+
}
|
|
124
277
|
const backend = await createBackend({
|
|
125
278
|
engine,
|
|
126
279
|
dataDir: opts.memory ? undefined : opts.dataDir,
|
|
@@ -129,6 +282,9 @@ async function main() {
|
|
|
129
282
|
migrations: project.migrations,
|
|
130
283
|
seedSql: project.seedSql,
|
|
131
284
|
functions,
|
|
285
|
+
functionEnv,
|
|
286
|
+
oauthProviders,
|
|
287
|
+
webhooks,
|
|
132
288
|
storageDriver: new FsStorageDriver(opts.storageDir),
|
|
133
289
|
log: (msg) => console.log(` ${msg}`),
|
|
134
290
|
});
|
|
@@ -159,11 +315,13 @@ async function main() {
|
|
|
159
315
|
tinbase running
|
|
160
316
|
|
|
161
317
|
API URL: ${server.url}
|
|
162
|
-
Admin UI: ${server.url}/_/
|
|
163
|
-
Engine: ${opts.engine === 'native' ? 'native postgres' : `PGlite (${opts.memory ? 'in-memory' : opts.dataDir})`}
|
|
318
|
+
Admin UI: ${server.url}/_/${backend.inbox ? `\n Email inbox: ${server.url}/inbox` : ''}
|
|
319
|
+
Engine: ${opts.engine === 'native' ? 'native postgres' : opts.engine === 'pgmem' ? 'pg-mem (in-memory, lite)' : `PGlite (${opts.memory ? 'in-memory' : opts.dataDir})`}
|
|
164
320
|
Storage: ${opts.storageDir}
|
|
165
321
|
Migrations: ${project.migrations.length} file(s)
|
|
166
322
|
Functions: ${functions.size > 0 ? [...functions.keys()].join(', ') : 'none'}
|
|
323
|
+
OAuth providers: ${Object.keys(oauthProviders).length ? Object.keys(oauthProviders).join(', ') : 'none'}
|
|
324
|
+
Webhooks: ${webhooks.length ? webhooks.map((w) => w.table).join(', ') : 'none'}
|
|
167
325
|
|
|
168
326
|
anon key: ${backend.anonKey}
|
|
169
327
|
service_role key: ${backend.serviceRoleKey}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process scheduler that runs the jobs recorded in cron.job — the execution
|
|
3
|
+
* half of our pg_cron emulation (the cron.schedule()/unschedule() SQL functions
|
|
4
|
+
* live in db/emulated.ts). Supports standard 5-field cron expressions and
|
|
5
|
+
* pg_cron's "N seconds" form. Runs due job commands as superuser and logs each
|
|
6
|
+
* run to cron.job_run_details.
|
|
7
|
+
*/
|
|
8
|
+
import type { Database } from '../db/database.js';
|
|
9
|
+
export declare class CronService {
|
|
10
|
+
private db;
|
|
11
|
+
/** how often to check for due jobs (ms). Small so "N seconds" jobs are timely. */
|
|
12
|
+
private tickMs;
|
|
13
|
+
private now;
|
|
14
|
+
private timer;
|
|
15
|
+
private lastRun;
|
|
16
|
+
private lastMinute;
|
|
17
|
+
constructor(db: Database,
|
|
18
|
+
/** how often to check for due jobs (ms). Small so "N seconds" jobs are timely. */
|
|
19
|
+
tickMs?: number, now?: () => Date);
|
|
20
|
+
start(): void;
|
|
21
|
+
stop(): void;
|
|
22
|
+
/** Run any due jobs once (also callable directly in tests). */
|
|
23
|
+
tick(): Promise<void>;
|
|
24
|
+
private isDue;
|
|
25
|
+
private run;
|
|
26
|
+
private log;
|
|
27
|
+
}
|
|
28
|
+
/** Match a Date against a standard 5-field cron expression (min hour dom month dow). */
|
|
29
|
+
export declare function cronMatches(expr: string, date: Date): boolean;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
export class CronService {
|
|
2
|
+
db;
|
|
3
|
+
tickMs;
|
|
4
|
+
now;
|
|
5
|
+
timer = null;
|
|
6
|
+
lastRun = new Map(); // jobid → epoch ms of last run
|
|
7
|
+
lastMinute = new Map(); // jobid → minute bucket last run
|
|
8
|
+
constructor(db,
|
|
9
|
+
/** how often to check for due jobs (ms). Small so "N seconds" jobs are timely. */
|
|
10
|
+
tickMs = 1000, now = () => new Date()) {
|
|
11
|
+
this.db = db;
|
|
12
|
+
this.tickMs = tickMs;
|
|
13
|
+
this.now = now;
|
|
14
|
+
}
|
|
15
|
+
start() {
|
|
16
|
+
if (this.timer)
|
|
17
|
+
return;
|
|
18
|
+
this.timer = setInterval(() => void this.tick(), this.tickMs);
|
|
19
|
+
if (typeof this.timer === 'object' && 'unref' in this.timer)
|
|
20
|
+
this.timer.unref();
|
|
21
|
+
}
|
|
22
|
+
stop() {
|
|
23
|
+
if (this.timer)
|
|
24
|
+
clearInterval(this.timer);
|
|
25
|
+
this.timer = null;
|
|
26
|
+
}
|
|
27
|
+
/** Run any due jobs once (also callable directly in tests). */
|
|
28
|
+
async tick() {
|
|
29
|
+
let jobs;
|
|
30
|
+
try {
|
|
31
|
+
jobs = (await this.db.query(`select jobid, schedule, command, jobname, active from cron.job where active`)).rows;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return; // cron.job not present yet
|
|
35
|
+
}
|
|
36
|
+
const now = this.now();
|
|
37
|
+
for (const job of jobs) {
|
|
38
|
+
if (this.isDue(job, now))
|
|
39
|
+
await this.run(job, now);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
isDue(job, now) {
|
|
43
|
+
const secs = job.schedule.match(/^(\d+)\s*seconds?$/i);
|
|
44
|
+
if (secs) {
|
|
45
|
+
const interval = parseInt(secs[1], 10) * 1000;
|
|
46
|
+
const last = this.lastRun.get(job.jobid) ?? 0;
|
|
47
|
+
return now.getTime() - last >= interval;
|
|
48
|
+
}
|
|
49
|
+
if (!cronMatches(job.schedule, now))
|
|
50
|
+
return false;
|
|
51
|
+
// minute-granularity: run at most once per matching minute
|
|
52
|
+
const bucket = Math.floor(now.getTime() / 60000);
|
|
53
|
+
return this.lastMinute.get(job.jobid) !== bucket;
|
|
54
|
+
}
|
|
55
|
+
async run(job, now) {
|
|
56
|
+
this.lastRun.set(job.jobid, now.getTime());
|
|
57
|
+
this.lastMinute.set(job.jobid, Math.floor(now.getTime() / 60000));
|
|
58
|
+
const start = new Date();
|
|
59
|
+
try {
|
|
60
|
+
await this.db.query(job.command);
|
|
61
|
+
await this.log(job, 'succeeded', null, start);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
await this.log(job, 'failed', e instanceof Error ? e.message : String(e), start);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async log(job, status, message, start) {
|
|
68
|
+
try {
|
|
69
|
+
await this.db.query(`insert into cron.job_run_details (jobid, command, status, return_message, start_time, end_time)
|
|
70
|
+
values ($1, $2, $3, $4, $5, now())`, [job.jobid, job.command, status, message, start.toISOString()]);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// logging is best-effort
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Match a Date against a standard 5-field cron expression (min hour dom month dow). */
|
|
78
|
+
export function cronMatches(expr, date) {
|
|
79
|
+
const fields = expr.trim().split(/\s+/);
|
|
80
|
+
if (fields.length !== 5)
|
|
81
|
+
return false;
|
|
82
|
+
const parts = [date.getMinutes(), date.getHours(), date.getDate(), date.getMonth() + 1, date.getDay()];
|
|
83
|
+
const ranges = [
|
|
84
|
+
[0, 59],
|
|
85
|
+
[0, 23],
|
|
86
|
+
[1, 31],
|
|
87
|
+
[1, 12],
|
|
88
|
+
[0, 6],
|
|
89
|
+
];
|
|
90
|
+
for (let i = 0; i < 5; i++) {
|
|
91
|
+
if (!fieldMatches(fields[i], parts[i], ranges[i][0], ranges[i][1]))
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
function fieldMatches(field, value, min, max) {
|
|
97
|
+
for (const part of field.split(',')) {
|
|
98
|
+
if (matchPart(part, value, min, max))
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
function matchPart(part, value, min, max) {
|
|
104
|
+
// step: */K or range/K
|
|
105
|
+
let step = 1;
|
|
106
|
+
let rangeStr = part;
|
|
107
|
+
const slash = part.indexOf('/');
|
|
108
|
+
if (slash !== -1) {
|
|
109
|
+
step = parseInt(part.slice(slash + 1), 10) || 1;
|
|
110
|
+
rangeStr = part.slice(0, slash);
|
|
111
|
+
}
|
|
112
|
+
let lo = min;
|
|
113
|
+
let hi = max;
|
|
114
|
+
if (rangeStr !== '*') {
|
|
115
|
+
if (rangeStr.includes('-')) {
|
|
116
|
+
const [a, b] = rangeStr.split('-').map(Number);
|
|
117
|
+
lo = a;
|
|
118
|
+
hi = b;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const n = Number(rangeStr);
|
|
122
|
+
if (Number.isNaN(n))
|
|
123
|
+
return false;
|
|
124
|
+
if (slash === -1)
|
|
125
|
+
return n === value;
|
|
126
|
+
lo = n;
|
|
127
|
+
hi = max;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (value < lo || value > hi)
|
|
131
|
+
return false;
|
|
132
|
+
return (value - lo) % step === 0;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/cron/service.ts"],"names":[],"mappings":"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"}
|