@substrat-run/adapter-cloudflare 0.5.0 → 0.7.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 +1 -1
- package/dist/checker.d.ts +1 -0
- package/dist/checker.d.ts.map +1 -1
- package/dist/checker.js +12 -4
- package/dist/checker.js.map +1 -1
- package/dist/control-plane-do.d.ts +177 -5
- package/dist/control-plane-do.d.ts.map +1 -1
- package/dist/control-plane-do.js +414 -25
- package/dist/control-plane-do.js.map +1 -1
- package/dist/host.d.ts +41 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +444 -18
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/route-resolver.d.ts +31 -0
- package/dist/route-resolver.d.ts.map +1 -0
- package/dist/route-resolver.js +47 -0
- package/dist/route-resolver.js.map +1 -0
- package/dist/scope-do.d.ts.map +1 -1
- package/dist/scope-do.js +58 -0
- package/dist/scope-do.js.map +1 -1
- package/package.json +8 -4
package/dist/control-plane-do.js
CHANGED
|
@@ -23,6 +23,61 @@ const DIRECTORY_DDL = `
|
|
|
23
23
|
jurisdiction TEXT,
|
|
24
24
|
status TEXT NOT NULL DEFAULT 'active',
|
|
25
25
|
schema_version TEXT NOT NULL DEFAULT '0',
|
|
26
|
+
vertical_version_id TEXT,
|
|
27
|
+
-- Last FAILED migration attempt (§5.3). All null / 0 = healthy. Written on the
|
|
28
|
+
-- failure path so a scope that fails closed stops rendering as active, and
|
|
29
|
+
-- cleared on the next success. See ScopeDO.applyPendingMigrations.
|
|
30
|
+
-- (No semicolons in this comment — see the NOTE below.)
|
|
31
|
+
migration_failed_version TEXT,
|
|
32
|
+
migration_error TEXT,
|
|
33
|
+
migration_attempts INTEGER NOT NULL DEFAULT 0,
|
|
34
|
+
migration_last_attempt_at TEXT,
|
|
35
|
+
created_at TEXT NOT NULL
|
|
36
|
+
);
|
|
37
|
+
CREATE TABLE IF NOT EXISTS hostnames (
|
|
38
|
+
hostname TEXT PRIMARY KEY,
|
|
39
|
+
tenant_id TEXT NOT NULL,
|
|
40
|
+
scope_id TEXT NOT NULL,
|
|
41
|
+
vertical_slug TEXT,
|
|
42
|
+
surface TEXT NOT NULL,
|
|
43
|
+
region TEXT,
|
|
44
|
+
status TEXT NOT NULL,
|
|
45
|
+
status_note TEXT,
|
|
46
|
+
canonical INTEGER NOT NULL DEFAULT 0,
|
|
47
|
+
created_at TEXT NOT NULL
|
|
48
|
+
);
|
|
49
|
+
CREATE INDEX IF NOT EXISTS hostnames_scope ON hostnames (scope_id, surface);
|
|
50
|
+
CREATE TABLE IF NOT EXISTS verticals (
|
|
51
|
+
slug TEXT PRIMARY KEY,
|
|
52
|
+
name TEXT NOT NULL,
|
|
53
|
+
source TEXT NOT NULL,
|
|
54
|
+
created_at TEXT NOT NULL
|
|
55
|
+
);
|
|
56
|
+
CREATE TABLE IF NOT EXISTS vertical_versions (
|
|
57
|
+
id TEXT PRIMARY KEY,
|
|
58
|
+
vertical_slug TEXT NOT NULL,
|
|
59
|
+
version TEXT NOT NULL,
|
|
60
|
+
manifest_digest TEXT NOT NULL,
|
|
61
|
+
permission_digest TEXT NOT NULL,
|
|
62
|
+
migration_digest TEXT NOT NULL,
|
|
63
|
+
deployment_ref TEXT,
|
|
64
|
+
admission TEXT NOT NULL,
|
|
65
|
+
admission_note TEXT,
|
|
66
|
+
created_at TEXT NOT NULL,
|
|
67
|
+
UNIQUE (vertical_slug, version)
|
|
68
|
+
);
|
|
69
|
+
CREATE TABLE IF NOT EXISTS vertical_channels (
|
|
70
|
+
vertical_slug TEXT NOT NULL,
|
|
71
|
+
channel TEXT NOT NULL,
|
|
72
|
+
version_id TEXT NOT NULL,
|
|
73
|
+
updated_at TEXT NOT NULL,
|
|
74
|
+
PRIMARY KEY (vertical_slug, channel)
|
|
75
|
+
);
|
|
76
|
+
CREATE TABLE IF NOT EXISTS orgs (
|
|
77
|
+
org_id TEXT PRIMARY KEY,
|
|
78
|
+
tenant_id TEXT NOT NULL,
|
|
79
|
+
slug TEXT NOT NULL,
|
|
80
|
+
name TEXT NOT NULL,
|
|
26
81
|
created_at TEXT NOT NULL
|
|
27
82
|
);
|
|
28
83
|
CREATE TABLE IF NOT EXISTS _substrat_tenant_tuples (
|
|
@@ -31,6 +86,11 @@ const DIRECTORY_DDL = `
|
|
|
31
86
|
relation TEXT NOT NULL,
|
|
32
87
|
object TEXT NOT NULL,
|
|
33
88
|
expires_at TEXT,
|
|
89
|
+
-- K-21: revocation TOMBSTONES. The row stays and the walk skips it, because a
|
|
90
|
+
-- tuple that once granted access is evidence of why an access was allowed
|
|
91
|
+
-- (K-4) and D-32's compliance product must produce that evidence.
|
|
92
|
+
-- (No semicolons in this comment — see the NOTE below.)
|
|
93
|
+
revoked_at TEXT,
|
|
34
94
|
PRIMARY KEY (tenant_id, subject, relation, object)
|
|
35
95
|
);
|
|
36
96
|
CREATE TABLE IF NOT EXISTS _substrat_roles (
|
|
@@ -45,6 +105,12 @@ const DIRECTORY_DDL = `
|
|
|
45
105
|
entitlement_key TEXT NOT NULL,
|
|
46
106
|
PRIMARY KEY (tenant_id, entitlement_key)
|
|
47
107
|
);
|
|
108
|
+
CREATE TABLE IF NOT EXISTS _substrat_identity_pools (
|
|
109
|
+
provider TEXT PRIMARY KEY,
|
|
110
|
+
topology TEXT NOT NULL,
|
|
111
|
+
tenant_id TEXT,
|
|
112
|
+
created_at TEXT NOT NULL
|
|
113
|
+
);
|
|
48
114
|
CREATE TABLE IF NOT EXISTS _substrat_identities (
|
|
49
115
|
provider TEXT NOT NULL,
|
|
50
116
|
external_id TEXT NOT NULL,
|
|
@@ -52,17 +118,34 @@ const DIRECTORY_DDL = `
|
|
|
52
118
|
tenant_id TEXT NOT NULL,
|
|
53
119
|
scope_id TEXT,
|
|
54
120
|
created_at TEXT NOT NULL,
|
|
55
|
-
PRIMARY KEY (provider, external_id)
|
|
121
|
+
PRIMARY KEY (tenant_id, provider, external_id)
|
|
122
|
+
);
|
|
123
|
+
CREATE TABLE IF NOT EXISTS _substrat_access_log (
|
|
124
|
+
id TEXT PRIMARY KEY,
|
|
125
|
+
actor TEXT NOT NULL,
|
|
126
|
+
method TEXT NOT NULL,
|
|
127
|
+
tenant_id TEXT,
|
|
128
|
+
scope_id TEXT,
|
|
129
|
+
params TEXT,
|
|
130
|
+
result_count INTEGER NOT NULL,
|
|
131
|
+
drained_at TEXT,
|
|
132
|
+
at TEXT NOT NULL
|
|
56
133
|
);
|
|
134
|
+
CREATE INDEX IF NOT EXISTS _substrat_access_log_actor ON _substrat_access_log (actor, id);
|
|
135
|
+
CREATE INDEX IF NOT EXISTS _substrat_access_log_tenant ON _substrat_access_log (tenant_id, id);
|
|
57
136
|
CREATE TABLE IF NOT EXISTS _substrat_admin_log (
|
|
58
137
|
id TEXT PRIMARY KEY,
|
|
59
138
|
actor TEXT NOT NULL,
|
|
60
139
|
action TEXT NOT NULL,
|
|
61
|
-
|
|
140
|
+
-- Nullable for platform-level actions that target no tenant (K-23).
|
|
141
|
+
tenant_id TEXT,
|
|
62
142
|
scope_id TEXT,
|
|
63
143
|
vertical TEXT,
|
|
64
144
|
before TEXT,
|
|
65
145
|
after TEXT,
|
|
146
|
+
-- The event that caused this action, when one did (K-22 §4.2) — the join
|
|
147
|
+
-- between the connector seam's emit half and its effect half.
|
|
148
|
+
caused_by TEXT,
|
|
66
149
|
at TEXT NOT NULL
|
|
67
150
|
);
|
|
68
151
|
-- Read-path indexes for the console (control-plane.md §4.5). The admin log is
|
|
@@ -84,6 +167,11 @@ const SCOPE_COLUMNS_ADDED = [
|
|
|
84
167
|
'kind TEXT',
|
|
85
168
|
'name TEXT',
|
|
86
169
|
'vertical TEXT',
|
|
170
|
+
'vertical_version_id TEXT',
|
|
171
|
+
'migration_failed_version TEXT',
|
|
172
|
+
'migration_error TEXT',
|
|
173
|
+
'migration_attempts INTEGER NOT NULL DEFAULT 0',
|
|
174
|
+
'migration_last_attempt_at TEXT',
|
|
87
175
|
];
|
|
88
176
|
export class ControlPlaneDO extends DurableObject {
|
|
89
177
|
sql;
|
|
@@ -110,16 +198,91 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
110
198
|
* expected steady state on every cold start after the first — anything else
|
|
111
199
|
* rethrows.
|
|
112
200
|
*/
|
|
201
|
+
/** Attempt-and-tolerate ALTER — DO SQLite restricts PRAGMA, so no column probe. */
|
|
202
|
+
addColumn(table, ddl) {
|
|
203
|
+
try {
|
|
204
|
+
this.sql.exec(`ALTER TABLE ${table} ADD COLUMN ${ddl}`);
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
if (!/duplicate column name/i.test(err.message))
|
|
208
|
+
throw err;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Rebuild `_substrat_identities` when it still carries the pre-K-22 global key
|
|
213
|
+
* (§4.3: a globally-keyed identity mapping is a cross-tenant identity bleed). A
|
|
214
|
+
* PRIMARY KEY cannot be ALTERed, so this is create-copy-drop-rename.
|
|
215
|
+
*
|
|
216
|
+
* Detected from `sqlite_master.sql`, which works here as well as in the pure
|
|
217
|
+
* adapter — DO SQLite restricts PRAGMA, so this is the one detection strategy both
|
|
218
|
+
* adapters can share. Rows already carry `tenant_id`, so the copy is lossless.
|
|
219
|
+
*/
|
|
220
|
+
ensureIdentityKey() {
|
|
221
|
+
const row = this.sql
|
|
222
|
+
.exec("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?", '_substrat_identities')
|
|
223
|
+
.toArray()[0];
|
|
224
|
+
if (!row || row.sql.includes('PRIMARY KEY (tenant_id, provider, external_id)'))
|
|
225
|
+
return;
|
|
226
|
+
for (const stmt of [
|
|
227
|
+
`CREATE TABLE _substrat_identities_new (
|
|
228
|
+
provider TEXT NOT NULL,
|
|
229
|
+
external_id TEXT NOT NULL,
|
|
230
|
+
principal_id TEXT NOT NULL,
|
|
231
|
+
tenant_id TEXT NOT NULL,
|
|
232
|
+
scope_id TEXT,
|
|
233
|
+
created_at TEXT NOT NULL,
|
|
234
|
+
PRIMARY KEY (tenant_id, provider, external_id)
|
|
235
|
+
)`,
|
|
236
|
+
`INSERT OR IGNORE INTO _substrat_identities_new
|
|
237
|
+
(provider, external_id, principal_id, tenant_id, scope_id, created_at)
|
|
238
|
+
SELECT provider, external_id, principal_id, tenant_id, scope_id, created_at
|
|
239
|
+
FROM _substrat_identities`,
|
|
240
|
+
'DROP TABLE _substrat_identities',
|
|
241
|
+
'ALTER TABLE _substrat_identities_new RENAME TO _substrat_identities',
|
|
242
|
+
]) {
|
|
243
|
+
this.sql.exec(stmt);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Drop the admin log's `tenant_id NOT NULL` (K-23) — same create-copy-drop-rename
|
|
248
|
+
* as the identity key, detected the same way. Rows copy verbatim.
|
|
249
|
+
*/
|
|
250
|
+
ensureAdminLogTenantNullable() {
|
|
251
|
+
const row = this.sql
|
|
252
|
+
.exec("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?", '_substrat_admin_log')
|
|
253
|
+
.toArray()[0];
|
|
254
|
+
if (!row || !/tenant_id TEXT NOT NULL/.test(row.sql))
|
|
255
|
+
return;
|
|
256
|
+
for (const stmt of [
|
|
257
|
+
`CREATE TABLE _substrat_admin_log_new (
|
|
258
|
+
id TEXT PRIMARY KEY,
|
|
259
|
+
actor TEXT NOT NULL,
|
|
260
|
+
action TEXT NOT NULL,
|
|
261
|
+
tenant_id TEXT,
|
|
262
|
+
scope_id TEXT,
|
|
263
|
+
vertical TEXT,
|
|
264
|
+
before TEXT,
|
|
265
|
+
after TEXT,
|
|
266
|
+
at TEXT NOT NULL
|
|
267
|
+
)`,
|
|
268
|
+
`INSERT INTO _substrat_admin_log_new
|
|
269
|
+
SELECT id, actor, action, tenant_id, scope_id, vertical, before, after, at
|
|
270
|
+
FROM _substrat_admin_log`,
|
|
271
|
+
'DROP TABLE _substrat_admin_log',
|
|
272
|
+
'ALTER TABLE _substrat_admin_log_new RENAME TO _substrat_admin_log',
|
|
273
|
+
]) {
|
|
274
|
+
this.sql.exec(stmt);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
113
277
|
ensureDirectoryColumns() {
|
|
278
|
+
this.ensureIdentityKey();
|
|
279
|
+
this.ensureAdminLogTenantNullable();
|
|
114
280
|
for (const ddl of SCOPE_COLUMNS_ADDED) {
|
|
115
|
-
|
|
116
|
-
this.sql.exec(`ALTER TABLE scopes ADD COLUMN ${ddl}`);
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
if (!/duplicate column name/i.test(err.message))
|
|
120
|
-
throw err;
|
|
121
|
-
}
|
|
281
|
+
this.addColumn('scopes', ddl);
|
|
122
282
|
}
|
|
283
|
+
// K-21's tombstone on tenant-level tuples (membership lives here).
|
|
284
|
+
this.addColumn('_substrat_tenant_tuples', 'revoked_at TEXT');
|
|
285
|
+
this.addColumn('_substrat_admin_log', 'caused_by TEXT');
|
|
123
286
|
this.sql.exec("UPDATE scopes SET slug = lower(scope_id) WHERE slug IS NULL");
|
|
124
287
|
this.sql.exec("UPDATE scopes SET kind = 'scope' WHERE kind IS NULL");
|
|
125
288
|
this.sql.exec('UPDATE scopes SET name = slug WHERE name IS NULL');
|
|
@@ -127,6 +290,7 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
127
290
|
// duplicates it exists to forbid (SQLite treats NULLs as distinct).
|
|
128
291
|
this.sql.exec('CREATE UNIQUE INDEX IF NOT EXISTS scopes_tenant_slug ON scopes (tenant_id, slug)');
|
|
129
292
|
this.sql.exec('CREATE UNIQUE INDEX IF NOT EXISTS tenants_slug ON tenants (slug)');
|
|
293
|
+
this.sql.exec('CREATE UNIQUE INDEX IF NOT EXISTS orgs_tenant_slug ON orgs (tenant_id, slug)');
|
|
130
294
|
}
|
|
131
295
|
// -- tenant registry (control-plane.md §4.1) --------------------------------
|
|
132
296
|
mapTenant(r) {
|
|
@@ -216,9 +380,23 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
216
380
|
* question ("which scopes are behind?") is answerable from the index alone —
|
|
217
381
|
* §5.4's "fleet questions never fan out". Written by the coordinator after the
|
|
218
382
|
* ScopeDO reports what it applied.
|
|
383
|
+
*
|
|
384
|
+
* Written on the FAILURE path too (#32): projecting only on success is what let
|
|
385
|
+
* a half-migrated scope keep a stale `schema_version` and render as healthy.
|
|
386
|
+
* `failure` null clears the columns, so `migration_attempts` counts *consecutive*
|
|
387
|
+
* failures — what the reconciliation sweep's backoff (#49) needs.
|
|
219
388
|
*/
|
|
220
|
-
|
|
221
|
-
|
|
389
|
+
setMigrationState(scopeId, schemaVersion, failure) {
|
|
390
|
+
if (!failure) {
|
|
391
|
+
this.sql.exec(`UPDATE scopes SET schema_version = ?, migration_failed_version = NULL,
|
|
392
|
+
migration_error = NULL, migration_attempts = 0, migration_last_attempt_at = NULL
|
|
393
|
+
WHERE scope_id = ?`, schemaVersion, scopeId);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
this.sql.exec(`UPDATE scopes SET schema_version = ?, migration_failed_version = ?,
|
|
397
|
+
migration_error = ?, migration_attempts = migration_attempts + 1,
|
|
398
|
+
migration_last_attempt_at = ?
|
|
399
|
+
WHERE scope_id = ?`, schemaVersion, failure.version, failure.error, new Date().toISOString(), scopeId);
|
|
222
400
|
}
|
|
223
401
|
listScopes(filter) {
|
|
224
402
|
const where = [];
|
|
@@ -340,9 +518,145 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
340
518
|
(tenant_id, subject, relation, object, expires_at)
|
|
341
519
|
VALUES (?, ?, ?, ?, ?)`, tenantId, subject, relation, object, expiresAt);
|
|
342
520
|
}
|
|
521
|
+
// -- the hostname map (K-26) ------------------------------------------------
|
|
522
|
+
readHostname(hostname) {
|
|
523
|
+
return this.sql
|
|
524
|
+
.exec('SELECT * FROM hostnames WHERE hostname = ?', hostname)
|
|
525
|
+
.toArray()[0];
|
|
526
|
+
}
|
|
527
|
+
/** Demote any current canonical for this surface — exactly one may hold it. */
|
|
528
|
+
demoteCanonical(scopeId, surface) {
|
|
529
|
+
this.sql.exec('UPDATE hostnames SET canonical = 0 WHERE scope_id = ? AND surface = ?', scopeId, surface);
|
|
530
|
+
}
|
|
531
|
+
upsertHostname(h) {
|
|
532
|
+
this.sql.exec(`INSERT OR REPLACE INTO hostnames
|
|
533
|
+
(hostname, tenant_id, scope_id, vertical_slug, surface, region,
|
|
534
|
+
status, status_note, canonical, created_at)
|
|
535
|
+
VALUES (?, ?, ?, ?, ?, ?, 'pending', NULL, ?, ?)`, h.hostname, h.tenantId, h.scopeId, h.verticalSlug, h.surface, h.region, h.canonical ? 1 : 0, h.createdAt);
|
|
536
|
+
}
|
|
537
|
+
setHostnameStatus(hostname, status, note) {
|
|
538
|
+
this.sql.exec('UPDATE hostnames SET status = ?, status_note = ? WHERE hostname = ?', status, note, hostname);
|
|
539
|
+
}
|
|
540
|
+
listHostnames(filter) {
|
|
541
|
+
const where = [];
|
|
542
|
+
const params = [];
|
|
543
|
+
if (filter.tenantId) {
|
|
544
|
+
where.push('tenant_id = ?');
|
|
545
|
+
params.push(filter.tenantId);
|
|
546
|
+
}
|
|
547
|
+
if (filter.scopeId) {
|
|
548
|
+
where.push('scope_id = ?');
|
|
549
|
+
params.push(filter.scopeId);
|
|
550
|
+
}
|
|
551
|
+
let sql = 'SELECT * FROM hostnames';
|
|
552
|
+
if (where.length)
|
|
553
|
+
sql += ` WHERE ${where.join(' AND ')}`;
|
|
554
|
+
sql += ' ORDER BY hostname';
|
|
555
|
+
return this.sql.exec(sql, ...params).toArray();
|
|
556
|
+
}
|
|
557
|
+
// -- vertical + version registry (#31) --------------------------------------
|
|
558
|
+
readVertical(slug) {
|
|
559
|
+
return this.sql
|
|
560
|
+
.exec('SELECT * FROM verticals WHERE slug = ?', slug)
|
|
561
|
+
.toArray()[0];
|
|
562
|
+
}
|
|
563
|
+
insertVertical(slug, name, source, createdAt) {
|
|
564
|
+
this.sql.exec('INSERT INTO verticals (slug, name, source, created_at) VALUES (?, ?, ?, ?)', slug, name, source, createdAt);
|
|
565
|
+
}
|
|
566
|
+
listVerticals() {
|
|
567
|
+
return this.sql.exec('SELECT * FROM verticals ORDER BY slug').toArray();
|
|
568
|
+
}
|
|
569
|
+
readVersion(id) {
|
|
570
|
+
return this.sql
|
|
571
|
+
.exec('SELECT * FROM vertical_versions WHERE id = ?', id)
|
|
572
|
+
.toArray()[0];
|
|
573
|
+
}
|
|
574
|
+
insertVersion(v) {
|
|
575
|
+
this.sql.exec(`INSERT INTO vertical_versions
|
|
576
|
+
(id, vertical_slug, version, manifest_digest, permission_digest,
|
|
577
|
+
migration_digest, deployment_ref, admission, admission_note, created_at)
|
|
578
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 'pending', NULL, ?)`, v.id, v.verticalSlug, v.version, v.manifestDigest, v.permissionDigest, v.migrationDigest, v.deploymentRef, v.createdAt);
|
|
579
|
+
}
|
|
580
|
+
listVersions(verticalSlug) {
|
|
581
|
+
return this.sql
|
|
582
|
+
.exec('SELECT * FROM vertical_versions WHERE vertical_slug = ? ORDER BY id', verticalSlug)
|
|
583
|
+
.toArray();
|
|
584
|
+
}
|
|
585
|
+
setAdmission(id, admission, note) {
|
|
586
|
+
this.sql.exec('UPDATE vertical_versions SET admission = ?, admission_note = ? WHERE id = ?', admission, note, id);
|
|
587
|
+
}
|
|
588
|
+
bindScopeVersion(scopeId, versionId, verticalSlug) {
|
|
589
|
+
this.sql.exec('UPDATE scopes SET vertical_version_id = ?, vertical = ? WHERE scope_id = ?', versionId, verticalSlug, scopeId);
|
|
590
|
+
}
|
|
591
|
+
readChannel(verticalSlug, channel) {
|
|
592
|
+
return this.sql
|
|
593
|
+
.exec('SELECT * FROM vertical_channels WHERE vertical_slug = ? AND channel = ?', verticalSlug, channel)
|
|
594
|
+
.toArray()[0];
|
|
595
|
+
}
|
|
596
|
+
setChannel(verticalSlug, channel, versionId, updatedAt) {
|
|
597
|
+
this.sql.exec(`INSERT INTO vertical_channels (vertical_slug, channel, version_id, updated_at)
|
|
598
|
+
VALUES (?, ?, ?, ?)
|
|
599
|
+
ON CONFLICT (vertical_slug, channel) DO UPDATE SET version_id = ?, updated_at = ?`, verticalSlug, channel, versionId, updatedAt, versionId, updatedAt);
|
|
600
|
+
}
|
|
601
|
+
listChannels(verticalSlug) {
|
|
602
|
+
return this.sql
|
|
603
|
+
.exec('SELECT * FROM vertical_channels WHERE vertical_slug = ? ORDER BY channel', verticalSlug)
|
|
604
|
+
.toArray();
|
|
605
|
+
}
|
|
606
|
+
// -- organizations (K-22) ---------------------------------------------------
|
|
607
|
+
readOrg(tenantId, orgId) {
|
|
608
|
+
return this.sql
|
|
609
|
+
.exec('SELECT * FROM orgs WHERE tenant_id = ? AND org_id = ?', tenantId, orgId)
|
|
610
|
+
.toArray()[0];
|
|
611
|
+
}
|
|
612
|
+
/** Returns false when the org already exists (idempotent); throws on slug collision. */
|
|
613
|
+
createOrg(orgId, tenantId, slug, name, createdAt) {
|
|
614
|
+
if (this.readOrg(tenantId, orgId))
|
|
615
|
+
return false;
|
|
616
|
+
const slugOwner = this.sql
|
|
617
|
+
.exec('SELECT org_id FROM orgs WHERE tenant_id = ? AND slug = ?', tenantId, slug)
|
|
618
|
+
.toArray()[0];
|
|
619
|
+
if (slugOwner) {
|
|
620
|
+
throw new Error(`org slug '${slug}' already taken by ${slugOwner.org_id} (slugs are unique per tenant)`);
|
|
621
|
+
}
|
|
622
|
+
this.sql.exec('INSERT INTO orgs (org_id, tenant_id, slug, name, created_at) VALUES (?, ?, ?, ?, ?)', orgId, tenantId, slug, name, createdAt);
|
|
623
|
+
return true;
|
|
624
|
+
}
|
|
625
|
+
listOrgs(tenantId) {
|
|
626
|
+
return this.sql
|
|
627
|
+
.exec('SELECT * FROM orgs WHERE tenant_id = ? ORDER BY slug', tenantId)
|
|
628
|
+
.toArray();
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* Tombstone a membership (K-21), never DELETE. Guarded on `revoked_at IS NULL`
|
|
632
|
+
* so a repeat revoke neither moves the timestamp nor produces a second audit
|
|
633
|
+
* row. Returns whether it changed, so the coordinator can skip the audit write.
|
|
634
|
+
*/
|
|
635
|
+
revokeMember(tenantId, subject, object, at) {
|
|
636
|
+
const before = this.sql
|
|
637
|
+
.exec(`SELECT 1 FROM _substrat_tenant_tuples
|
|
638
|
+
WHERE tenant_id = ? AND subject = ? AND relation = 'member' AND object = ?
|
|
639
|
+
AND revoked_at IS NULL`, tenantId, subject, object)
|
|
640
|
+
.toArray();
|
|
641
|
+
if (before.length === 0)
|
|
642
|
+
return false;
|
|
643
|
+
this.sql.exec(`UPDATE _substrat_tenant_tuples SET revoked_at = ?
|
|
644
|
+
WHERE tenant_id = ? AND subject = ? AND relation = 'member' AND object = ?
|
|
645
|
+
AND revoked_at IS NULL`, at, tenantId, subject, object);
|
|
646
|
+
return true;
|
|
647
|
+
}
|
|
648
|
+
/** Members of an org. Live only unless `includeRevoked` — revoked rows are evidence. */
|
|
649
|
+
listMembers(tenantId, object, includeRevoked) {
|
|
650
|
+
return this.sql
|
|
651
|
+
.exec(`SELECT subject, revoked_at FROM _substrat_tenant_tuples
|
|
652
|
+
WHERE tenant_id = ? AND relation = 'member' AND object = ?
|
|
653
|
+
${includeRevoked ? '' : 'AND revoked_at IS NULL'}
|
|
654
|
+
ORDER BY subject`, tenantId, object)
|
|
655
|
+
.toArray();
|
|
656
|
+
}
|
|
343
657
|
tenantTuples(tenantId, subject, relationPrefix) {
|
|
344
658
|
return this.sql
|
|
345
|
-
.exec(`SELECT subject, relation, object, expires_at FROM _substrat_tenant_tuples
|
|
659
|
+
.exec(`SELECT subject, relation, object, expires_at, revoked_at FROM _substrat_tenant_tuples
|
|
346
660
|
WHERE tenant_id = ? AND subject = ? AND relation LIKE ?`, tenantId, subject, `${relationPrefix}%`)
|
|
347
661
|
.toArray();
|
|
348
662
|
}
|
|
@@ -372,34 +686,108 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
372
686
|
.exec('SELECT entitlement_key FROM _substrat_entitlements WHERE tenant_id = ? ORDER BY entitlement_key', tenantId)
|
|
373
687
|
.toArray().map((r) => r.entitlement_key);
|
|
374
688
|
}
|
|
689
|
+
// -- identity pools (K-23) --------------------------------------------------
|
|
690
|
+
readPool(provider) {
|
|
691
|
+
return this.sql
|
|
692
|
+
.exec('SELECT provider, topology, tenant_id FROM _substrat_identity_pools WHERE provider = ?', provider)
|
|
693
|
+
.toArray()[0];
|
|
694
|
+
}
|
|
695
|
+
/** Returns false when an identical registration already exists; throws on a conflicting one. */
|
|
696
|
+
registerIdentityPool(provider, topology, tenantId, createdAt) {
|
|
697
|
+
const existing = this.readPool(provider);
|
|
698
|
+
if (existing) {
|
|
699
|
+
if (existing.topology === topology && existing.tenant_id === tenantId)
|
|
700
|
+
return false;
|
|
701
|
+
throw new Error(`identity pool '${provider}' is already registered as ${existing.topology}` +
|
|
702
|
+
`${existing.tenant_id ? ` for tenant ${existing.tenant_id}` : ''}`);
|
|
703
|
+
}
|
|
704
|
+
this.sql.exec('INSERT INTO _substrat_identity_pools (provider, topology, tenant_id, created_at) VALUES (?, ?, ?, ?)', provider, topology, tenantId, createdAt);
|
|
705
|
+
return true;
|
|
706
|
+
}
|
|
707
|
+
identityTenants(provider, externalId) {
|
|
708
|
+
return this.sql
|
|
709
|
+
.exec('SELECT tenant_id FROM _substrat_identities WHERE provider = ? AND external_id = ? ORDER BY tenant_id', provider, externalId)
|
|
710
|
+
.toArray().map((r) => r.tenant_id);
|
|
711
|
+
}
|
|
375
712
|
// -- identities (D-16; control-plane.md §6) ---------------------------------
|
|
376
|
-
/**
|
|
713
|
+
/**
|
|
714
|
+
* Bind an identity within a tenant. Returns false when the key already maps to the
|
|
715
|
+
* SAME principal (idempotent, unaudited); throws when it maps to a DIFFERENT one.
|
|
716
|
+
*
|
|
717
|
+
* Read before write: `INSERT OR IGNORE` alone cannot tell those two apart, and
|
|
718
|
+
* silently ignoring a genuine collision resolves one person as another.
|
|
719
|
+
*/
|
|
377
720
|
linkIdentity(provider, externalId, principal, tenantId, scopeId, createdAt) {
|
|
378
|
-
const
|
|
379
|
-
.exec(
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
721
|
+
const existing = this.sql
|
|
722
|
+
.exec(`SELECT principal_id FROM _substrat_identities
|
|
723
|
+
WHERE tenant_id = ? AND provider = ? AND external_id = ?`, tenantId, provider, externalId)
|
|
724
|
+
.toArray()[0];
|
|
725
|
+
if (existing) {
|
|
726
|
+
if (existing.principal_id === principal)
|
|
727
|
+
return false;
|
|
728
|
+
throw new Error(`identity ${provider}:${externalId} in tenant ${tenantId} is already bound to ${existing.principal_id}`);
|
|
729
|
+
}
|
|
730
|
+
this.sql.exec(`INSERT INTO _substrat_identities
|
|
384
731
|
(provider, external_id, principal_id, tenant_id, scope_id, created_at)
|
|
385
732
|
VALUES (?, ?, ?, ?, ?, ?)`, provider, externalId, principal, tenantId, scopeId, createdAt);
|
|
386
733
|
return true;
|
|
387
734
|
}
|
|
388
|
-
resolveIdentity(provider, externalId) {
|
|
735
|
+
resolveIdentity(tenantId, provider, externalId) {
|
|
389
736
|
const row = this.sql
|
|
390
|
-
.exec(`SELECT principal_id,
|
|
391
|
-
WHERE provider = ? AND external_id = ?`, provider, externalId)
|
|
737
|
+
.exec(`SELECT principal_id, scope_id FROM _substrat_identities
|
|
738
|
+
WHERE tenant_id = ? AND provider = ? AND external_id = ?`, tenantId, provider, externalId)
|
|
392
739
|
.toArray()[0];
|
|
393
740
|
if (!row)
|
|
394
741
|
return undefined;
|
|
395
|
-
return { principal: row.principal_id,
|
|
742
|
+
return { principal: row.principal_id, scopeId: row.scope_id };
|
|
396
743
|
}
|
|
397
744
|
// -- admin audit log (control-plane.md §4.4) --------------------------------
|
|
398
745
|
/** Append one audit row. before/after are arbitrary JSON, stringified here. */
|
|
746
|
+
/** Staff READS (K-24). Separate table, separate lifetime — see control-plane.md §4.6. */
|
|
747
|
+
recordAccess(entry) {
|
|
748
|
+
this.sql.exec(`INSERT INTO _substrat_access_log
|
|
749
|
+
(id, actor, method, tenant_id, scope_id, params, result_count, drained_at, at)
|
|
750
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, NULL, ?)`, entry.id, entry.actor, entry.method, entry.tenantId, entry.scopeId, entry.params, entry.resultCount, entry.at);
|
|
751
|
+
}
|
|
752
|
+
accessLog(query) {
|
|
753
|
+
const where = [];
|
|
754
|
+
const params = [];
|
|
755
|
+
if (query.actor) {
|
|
756
|
+
where.push('actor = ?');
|
|
757
|
+
params.push(query.actor);
|
|
758
|
+
}
|
|
759
|
+
if (query.tenantId) {
|
|
760
|
+
where.push('tenant_id = ?');
|
|
761
|
+
params.push(query.tenantId);
|
|
762
|
+
}
|
|
763
|
+
if (query.method) {
|
|
764
|
+
where.push('method = ?');
|
|
765
|
+
params.push(query.method);
|
|
766
|
+
}
|
|
767
|
+
let sql = 'SELECT * FROM _substrat_access_log';
|
|
768
|
+
if (where.length)
|
|
769
|
+
sql += ` WHERE ${where.join(' AND ')}`;
|
|
770
|
+
sql += ' ORDER BY id';
|
|
771
|
+
if (query.limit !== undefined) {
|
|
772
|
+
sql += ' LIMIT ?';
|
|
773
|
+
params.push(query.limit);
|
|
774
|
+
}
|
|
775
|
+
return this.sql.exec(sql, ...params).toArray();
|
|
776
|
+
}
|
|
777
|
+
/** ONLY drained rows. Age alone is not a licence to delete evidence (K-24). */
|
|
778
|
+
pruneAccessLog(limit) {
|
|
779
|
+
const doomed = this.sql
|
|
780
|
+
.exec('SELECT id FROM _substrat_access_log WHERE drained_at IS NOT NULL ORDER BY id LIMIT ?', limit)
|
|
781
|
+
.toArray().map((r) => r.id);
|
|
782
|
+
for (const id of doomed) {
|
|
783
|
+
this.sql.exec('DELETE FROM _substrat_access_log WHERE id = ?', id);
|
|
784
|
+
}
|
|
785
|
+
return doomed.length;
|
|
786
|
+
}
|
|
399
787
|
recordAdmin(entry) {
|
|
400
788
|
this.sql.exec(`INSERT INTO _substrat_admin_log
|
|
401
|
-
(id, actor, action, tenant_id, scope_id, vertical, before, after, at)
|
|
402
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, entry.id, entry.actor, entry.action, entry.tenantId, entry.scopeId, entry.vertical, entry.before == null ? null : JSON.stringify(entry.before), entry.after == null ? null : JSON.stringify(entry.after), entry.at);
|
|
789
|
+
(id, actor, action, tenant_id, scope_id, vertical, before, after, caused_by, at)
|
|
790
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, entry.id, entry.actor, entry.action, entry.tenantId, entry.scopeId, entry.vertical, entry.before == null ? null : JSON.stringify(entry.before), entry.after == null ? null : JSON.stringify(entry.after), entry.causedBy ?? null, entry.at);
|
|
403
791
|
}
|
|
404
792
|
auditLog(query) {
|
|
405
793
|
const where = [];
|
|
@@ -453,6 +841,7 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
453
841
|
vertical: r.vertical,
|
|
454
842
|
before: r.before === null ? null : JSON.parse(r.before),
|
|
455
843
|
after: r.after === null ? null : JSON.parse(r.after),
|
|
844
|
+
causedBy: r.caused_by,
|
|
456
845
|
at: r.at,
|
|
457
846
|
}));
|
|
458
847
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane-do.js","sourceRoot":"","sources":["../src/control-plane-do.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-plane-do.js","sourceRoot":"","sources":["../src/control-plane-do.ts"],"names":[],"mappings":"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"}
|