@substrat-run/adapter-cloudflare 0.39.0 → 0.41.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/dist/control-plane-do.d.ts +52 -15
- package/dist/control-plane-do.d.ts.map +1 -1
- package/dist/control-plane-do.js +182 -35
- package/dist/control-plane-do.js.map +1 -1
- package/dist/host.d.ts +30 -3
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +214 -31
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/r2.d.ts +49 -0
- package/dist/r2.d.ts.map +1 -0
- package/dist/r2.js +121 -0
- package/dist/r2.js.map +1 -0
- package/dist/scope-do.d.ts.map +1 -1
- package/dist/scope-do.js +188 -5
- package/dist/scope-do.js.map +1 -1
- package/dist/scope-sweeper-do.d.ts +139 -0
- package/dist/scope-sweeper-do.d.ts.map +1 -0
- package/dist/scope-sweeper-do.js +193 -0
- package/dist/scope-sweeper-do.js.map +1 -0
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DurableObject } from 'cloudflare:workers';
|
|
2
|
-
import type { AdminLogEntry, RoleDefinition, ScopeStatus, Tenant, TenantStatus } from '@substrat-run/contracts';
|
|
2
|
+
import type { AdminLogEntry, ListPage, RoleDefinition, ScopeStatus, Tenant, TenantStatus } from '@substrat-run/contracts';
|
|
3
3
|
/**
|
|
4
4
|
* The durable directory (control-plane.md §4). One singleton DO, backed by its
|
|
5
5
|
* own SQLite, is the WHOLE directory: the tenant registry, scope lifecycle,
|
|
@@ -255,7 +255,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
255
255
|
/** Rename the DISPLAY name (never the slug); throw if absent; return the previous name. */
|
|
256
256
|
setTenantName(tenantId: string, name: string): string;
|
|
257
257
|
getTenant(tenantId: string): Tenant | undefined;
|
|
258
|
-
listTenants(): Tenant[];
|
|
258
|
+
listTenants(page?: ListPage): Tenant[];
|
|
259
259
|
getTenantStore(tenantId: string, vertical: string, binding: string): {
|
|
260
260
|
kind: string;
|
|
261
261
|
ref: string;
|
|
@@ -288,6 +288,34 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
288
288
|
ref: string;
|
|
289
289
|
created_at: string;
|
|
290
290
|
}[];
|
|
291
|
+
getBlobStore(tenantId: string, vertical: string, binding: string): {
|
|
292
|
+
kind: string;
|
|
293
|
+
ref: string;
|
|
294
|
+
} | undefined;
|
|
295
|
+
/** Record a minted blob store — FIRST WRITER WINS, same race protocol as
|
|
296
|
+
* putTenantStore: INSERT OR IGNORE then read back; the loser tears its orphan down. */
|
|
297
|
+
putBlobStore(row: {
|
|
298
|
+
tenantId: string;
|
|
299
|
+
vertical: string;
|
|
300
|
+
binding: string;
|
|
301
|
+
kind: string;
|
|
302
|
+
ref: string;
|
|
303
|
+
createdAt: string;
|
|
304
|
+
}): {
|
|
305
|
+
kind: string;
|
|
306
|
+
ref: string;
|
|
307
|
+
};
|
|
308
|
+
listBlobStores(filter: {
|
|
309
|
+
tenantId?: string;
|
|
310
|
+
vertical?: string;
|
|
311
|
+
}): {
|
|
312
|
+
tenant_id: string;
|
|
313
|
+
vertical: string;
|
|
314
|
+
binding: string;
|
|
315
|
+
kind: string;
|
|
316
|
+
ref: string;
|
|
317
|
+
created_at: string;
|
|
318
|
+
}[];
|
|
291
319
|
/**
|
|
292
320
|
* Mandatory active tenant: a scope with no tenant record is the "tenant is an
|
|
293
321
|
* FK string" hole the registry closes — fail closed. INSERT OR IGNORE the
|
|
@@ -323,7 +351,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
323
351
|
tenantId?: string;
|
|
324
352
|
status?: string[];
|
|
325
353
|
vertical?: string;
|
|
326
|
-
}): ScopeRow[];
|
|
354
|
+
} & ListPage): ScopeRow[];
|
|
327
355
|
/** Cross-checks the pair (K-3): a scope under a DIFFERENT tenant reads as absent. */
|
|
328
356
|
getScopeRecord(tenantId: string, scopeId: string): ScopeRow | undefined;
|
|
329
357
|
/**
|
|
@@ -347,7 +375,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
347
375
|
listRoles(filter: {
|
|
348
376
|
tenantId?: string;
|
|
349
377
|
source?: string;
|
|
350
|
-
}): RoleRow[];
|
|
378
|
+
} & ListPage): RoleRow[];
|
|
351
379
|
getRole(tenantId: string, key: string): RoleDefinition | undefined;
|
|
352
380
|
writeTenantTuple(tenantId: string, subject: string, relation: string, object: string, expiresAt: string | null): void;
|
|
353
381
|
readHostname(hostname: string): (HostnameRow & {
|
|
@@ -385,7 +413,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
385
413
|
tenantId?: string;
|
|
386
414
|
scopeId?: string;
|
|
387
415
|
status?: string;
|
|
388
|
-
}): HostnameRow[];
|
|
416
|
+
} & ListPage): HostnameRow[];
|
|
389
417
|
readVertical(slug: string): VerticalRow | undefined;
|
|
390
418
|
insertVertical(slug: string, name: string, source: string, ownerTenant: string | null, envSpec: string | null, installSpec: string | null, listed: number, createdAt: string): void;
|
|
391
419
|
/** Refresh a vertical's declared env-spec + install-spec (both evolve with the manifest).
|
|
@@ -400,14 +428,23 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
400
428
|
updateVerticalInstallsBlocked(slug: string, blocked: number): void;
|
|
401
429
|
/** Grant/revoke the tenant-provisioner capability (#412, staff grant). */
|
|
402
430
|
updateVerticalTenantProvisioner(slug: string, granted: number): void;
|
|
403
|
-
/**
|
|
404
|
-
|
|
431
|
+
/**
|
|
432
|
+
* How many scopes a vertical still backs, split by liveness — deleteVertical's refusal
|
|
433
|
+
* reads this. `reaped` rows are excluded outright: a reaped scope is terminal history
|
|
434
|
+
* and must never pin a registry row forever. `archived` counts separately: it can still
|
|
435
|
+
* be restored (unarchiveScope), so it blocks, but the refusal names reap/restore as the
|
|
436
|
+
* remaining step — the app was already deleted.
|
|
437
|
+
*/
|
|
438
|
+
countScopesForVertical(slug: string): {
|
|
439
|
+
live: number;
|
|
440
|
+
archived: number;
|
|
441
|
+
};
|
|
405
442
|
/**
|
|
406
443
|
* Remove a vertical's registry presence: channels, versions, the row. The bound-scope
|
|
407
444
|
* refusal lives host-side (the audited seam), not here — this is the storage verb.
|
|
408
445
|
*/
|
|
409
446
|
deleteVertical(slug: string): void;
|
|
410
|
-
listVerticals(): VerticalRow[];
|
|
447
|
+
listVerticals(page?: ListPage): VerticalRow[];
|
|
411
448
|
readVersion(id: string): VersionRow | undefined;
|
|
412
449
|
insertVersion(v: {
|
|
413
450
|
id: string;
|
|
@@ -432,7 +469,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
432
469
|
}): void;
|
|
433
470
|
/** Point a scope's routing at the serving script its data now lives in (#286). */
|
|
434
471
|
setScopeServingRef(scopeId: string, servingRef: string | null): void;
|
|
435
|
-
listVersions(verticalSlug: string): VersionRow[];
|
|
472
|
+
listVersions(verticalSlug: string, page?: ListPage): VersionRow[];
|
|
436
473
|
setAdmission(id: string, admission: string, note: string | null): void;
|
|
437
474
|
bindScopeVersion(scopeId: string, versionId: string, verticalSlug: string): void;
|
|
438
475
|
/**
|
|
@@ -443,9 +480,9 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
443
480
|
deleteScopeDirectory(scopeId: string): void;
|
|
444
481
|
readChannel(verticalSlug: string, channel: string): ChannelRow | undefined;
|
|
445
482
|
setChannel(verticalSlug: string, channel: string, versionId: string, updatedAt: string): void;
|
|
446
|
-
listChannels(verticalSlug: string): ChannelRow[];
|
|
483
|
+
listChannels(verticalSlug: string, page?: ListPage): ChannelRow[];
|
|
447
484
|
insertChannelHistory(h: ChannelHistoryRow): void;
|
|
448
|
-
listChannelHistory(verticalSlug: string, channel?: string): ChannelHistoryRow[];
|
|
485
|
+
listChannelHistory(verticalSlug: string, channel?: string, page?: ListPage): ChannelHistoryRow[];
|
|
449
486
|
readOrg(tenantId: string, orgId: string): OrgRow | undefined;
|
|
450
487
|
/** Returns false when the org already exists (idempotent); throws on slug collision. */
|
|
451
488
|
createOrg(orgId: string, tenantId: string, slug: string, name: string, createdAt: string): boolean;
|
|
@@ -524,11 +561,12 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
524
561
|
tenantId?: string;
|
|
525
562
|
vertical?: string;
|
|
526
563
|
provider?: string;
|
|
564
|
+
externalAccountRef?: string;
|
|
527
565
|
includeRevoked?: boolean;
|
|
528
566
|
}): ConnectionDoRow[];
|
|
529
567
|
readConnection(id: string): ConnectionDoRow | undefined;
|
|
530
|
-
/** The live connection for a triple, plus its sealed blob — the connector read. */
|
|
531
|
-
readLiveConnection(tenantId: string, vertical: string, provider: string): (ConnectionDoRow & {
|
|
568
|
+
/** The live connection for a triple (narrowed to one account when given), plus its sealed blob — the connector read. */
|
|
569
|
+
readLiveConnection(tenantId: string, vertical: string, provider: string, externalAccountRef?: string): (ConnectionDoRow & {
|
|
532
570
|
key_id: string;
|
|
533
571
|
ciphertext: string;
|
|
534
572
|
}) | undefined;
|
|
@@ -586,8 +624,7 @@ export declare class ControlPlaneDO extends DurableObject {
|
|
|
586
624
|
actor?: string;
|
|
587
625
|
tenantId?: string;
|
|
588
626
|
method?: string;
|
|
589
|
-
|
|
590
|
-
}): AccessLogRow[];
|
|
627
|
+
} & ListPage): AccessLogRow[];
|
|
591
628
|
/** ONLY drained rows. Age alone is not a licence to delete evidence (K-24). */
|
|
592
629
|
pruneAccessLog(limit: number): number;
|
|
593
630
|
recordAdmin(entry: AdminEntryInput): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane-do.d.ts","sourceRoot":"","sources":["../src/control-plane-do.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-plane-do.d.ts","sourceRoot":"","sources":["../src/control-plane-do.ts"],"names":[],"mappings":"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"}
|
package/dist/control-plane-do.js
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import { DurableObject } from 'cloudflare:workers';
|
|
2
2
|
import { splitSqlStatements } from './scope-do.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fold keyset page params (contracts pagination.ts) into an in-progress WHERE
|
|
5
|
+
* build and return the `ORDER BY … [LIMIT ?]` tail. The cursor is EXCLUSIVE —
|
|
6
|
+
* strictly after it ascending, strictly before it descending — and an unset
|
|
7
|
+
* limit stays unbounded: internal callers mean "everything", and a silent cap
|
|
8
|
+
* would let them mistake a page for the whole set.
|
|
9
|
+
*/
|
|
10
|
+
function keysetTail(where, params, key, page, defaultOrder = 'asc') {
|
|
11
|
+
const order = (page?.order ?? defaultOrder) === 'desc' ? 'DESC' : 'ASC';
|
|
12
|
+
if (page?.cursor) {
|
|
13
|
+
where.push(order === 'DESC' ? `${key} < ?` : `${key} > ?`);
|
|
14
|
+
params.push(page.cursor);
|
|
15
|
+
}
|
|
16
|
+
let tail = ` ORDER BY ${key} ${order}`;
|
|
17
|
+
if (page?.limit !== undefined) {
|
|
18
|
+
tail += ' LIMIT ?';
|
|
19
|
+
params.push(page.limit);
|
|
20
|
+
}
|
|
21
|
+
return tail;
|
|
22
|
+
}
|
|
3
23
|
const DIRECTORY_DDL = `
|
|
4
24
|
-- The ';' in this comment is a deliberate tripwire; the DDL must go through
|
|
5
25
|
-- splitSqlStatements, and a naive split(';') fails the directory at construction.
|
|
@@ -88,6 +108,18 @@ const DIRECTORY_DDL = `
|
|
|
88
108
|
created_at TEXT NOT NULL,
|
|
89
109
|
PRIMARY KEY (tenant_id, vertical, binding)
|
|
90
110
|
);
|
|
111
|
+
-- Per-tenant blob stores (#473) -- the tenant_stores twin for attachment bytes. ref is
|
|
112
|
+
-- an R2 bucket name (buckets are addressed by name; there is no separate id). Same
|
|
113
|
+
-- idempotency + deploy-rederive + reap ledger roles.
|
|
114
|
+
CREATE TABLE IF NOT EXISTS blob_stores (
|
|
115
|
+
tenant_id TEXT NOT NULL,
|
|
116
|
+
vertical TEXT NOT NULL,
|
|
117
|
+
binding TEXT NOT NULL,
|
|
118
|
+
kind TEXT NOT NULL,
|
|
119
|
+
ref TEXT NOT NULL,
|
|
120
|
+
created_at TEXT NOT NULL,
|
|
121
|
+
PRIMARY KEY (tenant_id, vertical, binding)
|
|
122
|
+
);
|
|
91
123
|
CREATE TABLE IF NOT EXISTS verticals (
|
|
92
124
|
slug TEXT PRIMARY KEY,
|
|
93
125
|
name TEXT NOT NULL,
|
|
@@ -225,8 +257,12 @@ const DIRECTORY_DDL = `
|
|
|
225
257
|
created_at TEXT NOT NULL,
|
|
226
258
|
revoked_at TEXT
|
|
227
259
|
);
|
|
228
|
-
|
|
229
|
-
|
|
260
|
+
-- One LIVE connection per (tenant, vertical, provider, account). COALESCEd so
|
|
261
|
+
-- providers that never set an external_account_ref keep singleton semantics,
|
|
262
|
+
-- while a multi-namespace provider (GitHub) holds one live connection PER
|
|
263
|
+
-- account — the Vercel git-namespace shape.
|
|
264
|
+
CREATE UNIQUE INDEX IF NOT EXISTS _substrat_connections_live_account
|
|
265
|
+
ON _substrat_connections (tenant_id, vertical, provider, COALESCE(external_account_ref, ''))
|
|
230
266
|
WHERE revoked_at IS NULL;
|
|
231
267
|
CREATE TABLE IF NOT EXISTS _substrat_connection_secrets (
|
|
232
268
|
connection_id TEXT PRIMARY KEY,
|
|
@@ -410,6 +446,11 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
410
446
|
ensureDirectoryColumns() {
|
|
411
447
|
this.ensureIdentityKey();
|
|
412
448
|
this.ensureAdminLogTenantNullable();
|
|
449
|
+
// The pre-account-aware live-uniqueness index: superseded by
|
|
450
|
+
// _substrat_connections_live_account (in the DDL above), which adds the
|
|
451
|
+
// external-account leg so one tenant can hold the same provider under
|
|
452
|
+
// several accounts. Existing rows always satisfy the wider key.
|
|
453
|
+
this.sql.exec('DROP INDEX IF EXISTS _substrat_connections_live');
|
|
413
454
|
for (const ddl of SCOPE_COLUMNS_ADDED) {
|
|
414
455
|
this.addColumn('scopes', ddl);
|
|
415
456
|
}
|
|
@@ -560,8 +601,12 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
560
601
|
getTenant(tenantId) {
|
|
561
602
|
return this.readTenant(tenantId);
|
|
562
603
|
}
|
|
563
|
-
listTenants() {
|
|
564
|
-
|
|
604
|
+
listTenants(page) {
|
|
605
|
+
const where = [];
|
|
606
|
+
const params = [];
|
|
607
|
+
const tail = keysetTail(where, params, 'tenant_id', page);
|
|
608
|
+
const sql = 'SELECT * FROM tenants' + (where.length ? ` WHERE ${where.join(' AND ')}` : '') + tail;
|
|
609
|
+
return this.sql.exec(sql, ...params).toArray().map((r) => this.mapTenant(r));
|
|
565
610
|
}
|
|
566
611
|
// -- per-tenant relational stores (#301) ------------------------------------
|
|
567
612
|
// The ledger only: minting the actual database (a live D1 create) is the
|
|
@@ -612,6 +657,50 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
612
657
|
' ORDER BY tenant_id, vertical, binding', ...params)
|
|
613
658
|
.toArray();
|
|
614
659
|
}
|
|
660
|
+
// -- per-tenant blob stores (#473) ------------------------------------------
|
|
661
|
+
// Ledger only, exactly like tenant_stores above: minting the actual bucket (a live
|
|
662
|
+
// R2 create) is the coordinator's job — it holds the platform's credential.
|
|
663
|
+
getBlobStore(tenantId, vertical, binding) {
|
|
664
|
+
return this.sql
|
|
665
|
+
.exec('SELECT kind, ref FROM blob_stores WHERE tenant_id = ? AND vertical = ? AND binding = ?', tenantId, vertical, binding)
|
|
666
|
+
.toArray()[0];
|
|
667
|
+
}
|
|
668
|
+
/** Record a minted blob store — FIRST WRITER WINS, same race protocol as
|
|
669
|
+
* putTenantStore: INSERT OR IGNORE then read back; the loser tears its orphan down. */
|
|
670
|
+
putBlobStore(row) {
|
|
671
|
+
const tenantRow = this.sql
|
|
672
|
+
.exec('SELECT status FROM tenants WHERE tenant_id = ?', row.tenantId)
|
|
673
|
+
.toArray()[0];
|
|
674
|
+
if (!tenantRow) {
|
|
675
|
+
throw new Error(`cannot provision blob store under unknown tenant: ${row.tenantId}`);
|
|
676
|
+
}
|
|
677
|
+
if (tenantRow.status !== 'active') {
|
|
678
|
+
throw new Error(`cannot provision blob store under non-active tenant (status: ${tenantRow.status}): ${row.tenantId}`);
|
|
679
|
+
}
|
|
680
|
+
this.sql.exec(`INSERT OR IGNORE INTO blob_stores (tenant_id, vertical, binding, kind, ref, created_at)
|
|
681
|
+
VALUES (?, ?, ?, ?, ?, ?)`, row.tenantId, row.vertical, row.binding, row.kind, row.ref, row.createdAt);
|
|
682
|
+
const stored = this.getBlobStore(row.tenantId, row.vertical, row.binding);
|
|
683
|
+
if (!stored)
|
|
684
|
+
throw new Error(`blob store write did not land for tenant ${row.tenantId}`);
|
|
685
|
+
return stored;
|
|
686
|
+
}
|
|
687
|
+
listBlobStores(filter) {
|
|
688
|
+
const where = [];
|
|
689
|
+
const params = [];
|
|
690
|
+
if (filter.tenantId) {
|
|
691
|
+
where.push('tenant_id = ?');
|
|
692
|
+
params.push(filter.tenantId);
|
|
693
|
+
}
|
|
694
|
+
if (filter.vertical) {
|
|
695
|
+
where.push('vertical = ?');
|
|
696
|
+
params.push(filter.vertical);
|
|
697
|
+
}
|
|
698
|
+
return this.sql
|
|
699
|
+
.exec('SELECT * FROM blob_stores' +
|
|
700
|
+
(where.length ? ` WHERE ${where.join(' AND ')}` : '') +
|
|
701
|
+
' ORDER BY tenant_id, vertical, binding', ...params)
|
|
702
|
+
.toArray();
|
|
703
|
+
}
|
|
615
704
|
// -- scope lifecycle (control-plane.md §4.1/§4.2) ---------------------------
|
|
616
705
|
/**
|
|
617
706
|
* Mandatory active tenant: a scope with no tenant record is the "tenant is an
|
|
@@ -696,9 +785,8 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
696
785
|
where.push('vertical = ?');
|
|
697
786
|
params.push(filter.vertical);
|
|
698
787
|
}
|
|
699
|
-
const
|
|
700
|
-
|
|
701
|
-
' ORDER BY scope_id';
|
|
788
|
+
const tail = keysetTail(where, params, 'scope_id', filter);
|
|
789
|
+
const sql = 'SELECT * FROM scopes' + (where.length ? ` WHERE ${where.join(' AND ')}` : '') + tail;
|
|
702
790
|
return this.sql.exec(sql, ...params).toArray();
|
|
703
791
|
}
|
|
704
792
|
/** Cross-checks the pair (K-3): a scope under a DIFFERENT tenant reads as absent. */
|
|
@@ -796,9 +884,24 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
796
884
|
where.push('source = ?');
|
|
797
885
|
params.push(filter.source);
|
|
798
886
|
}
|
|
799
|
-
const
|
|
887
|
+
const order = (filter.order ?? 'asc') === 'desc' ? 'DESC' : 'ASC';
|
|
888
|
+
if (filter.cursor) {
|
|
889
|
+
// Composite sort key `${tenantId}|${roleKey}` (pagination.ts) — the
|
|
890
|
+
// tenant id is a ULID and never contains '|', so split on the FIRST.
|
|
891
|
+
const split = filter.cursor.indexOf('|');
|
|
892
|
+
const afterTenant = split === -1 ? filter.cursor : filter.cursor.slice(0, split);
|
|
893
|
+
const afterKey = split === -1 ? '' : filter.cursor.slice(split + 1);
|
|
894
|
+
const cmp = order === 'DESC' ? '<' : '>';
|
|
895
|
+
where.push(`(tenant_id ${cmp} ? OR (tenant_id = ? AND role_key ${cmp} ?))`);
|
|
896
|
+
params.push(afterTenant, afterTenant, afterKey);
|
|
897
|
+
}
|
|
898
|
+
let sql = 'SELECT tenant_id, role_key, permissions, source FROM _substrat_roles' +
|
|
800
899
|
(where.length ? ` WHERE ${where.join(' AND ')}` : '') +
|
|
801
|
-
|
|
900
|
+
` ORDER BY tenant_id ${order}, role_key ${order}`;
|
|
901
|
+
if (filter.limit !== undefined) {
|
|
902
|
+
sql += ' LIMIT ?';
|
|
903
|
+
params.push(filter.limit);
|
|
904
|
+
}
|
|
802
905
|
return this.sql.exec(sql, ...params).toArray();
|
|
803
906
|
}
|
|
804
907
|
getRole(tenantId, key) {
|
|
@@ -888,10 +991,11 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
888
991
|
where.push('status = ?');
|
|
889
992
|
params.push(filter.status);
|
|
890
993
|
}
|
|
994
|
+
const tail = keysetTail(where, params, 'hostname', filter);
|
|
891
995
|
let sql = 'SELECT * FROM hostnames';
|
|
892
996
|
if (where.length)
|
|
893
997
|
sql += ` WHERE ${where.join(' AND ')}`;
|
|
894
|
-
sql +=
|
|
998
|
+
sql += tail;
|
|
895
999
|
return this.sql.exec(sql, ...params).toArray();
|
|
896
1000
|
}
|
|
897
1001
|
// -- vertical + version registry (#31) --------------------------------------
|
|
@@ -928,12 +1032,21 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
928
1032
|
updateVerticalTenantProvisioner(slug, granted) {
|
|
929
1033
|
this.sql.exec('UPDATE verticals SET tenant_provisioner = ? WHERE slug = ?', granted, slug);
|
|
930
1034
|
}
|
|
931
|
-
/**
|
|
1035
|
+
/**
|
|
1036
|
+
* How many scopes a vertical still backs, split by liveness — deleteVertical's refusal
|
|
1037
|
+
* reads this. `reaped` rows are excluded outright: a reaped scope is terminal history
|
|
1038
|
+
* and must never pin a registry row forever. `archived` counts separately: it can still
|
|
1039
|
+
* be restored (unarchiveScope), so it blocks, but the refusal names reap/restore as the
|
|
1040
|
+
* remaining step — the app was already deleted.
|
|
1041
|
+
*/
|
|
932
1042
|
countScopesForVertical(slug) {
|
|
933
1043
|
const r = this.sql
|
|
934
|
-
.exec('SELECT
|
|
1044
|
+
.exec('SELECT ' +
|
|
1045
|
+
"COUNT(*) FILTER (WHERE status NOT IN ('archived', 'reaped')) AS live, " +
|
|
1046
|
+
"COUNT(*) FILTER (WHERE status = 'archived') AS archived " +
|
|
1047
|
+
'FROM scopes WHERE vertical = ?', slug)
|
|
935
1048
|
.toArray()[0];
|
|
936
|
-
return r?.
|
|
1049
|
+
return { live: r?.live ?? 0, archived: r?.archived ?? 0 };
|
|
937
1050
|
}
|
|
938
1051
|
/**
|
|
939
1052
|
* Remove a vertical's registry presence: channels, versions, the row. The bound-scope
|
|
@@ -945,8 +1058,12 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
945
1058
|
this.sql.exec('DELETE FROM vertical_versions WHERE vertical_slug = ?', slug);
|
|
946
1059
|
this.sql.exec('DELETE FROM verticals WHERE slug = ?', slug);
|
|
947
1060
|
}
|
|
948
|
-
listVerticals() {
|
|
949
|
-
|
|
1061
|
+
listVerticals(page) {
|
|
1062
|
+
const where = [];
|
|
1063
|
+
const params = [];
|
|
1064
|
+
const tail = keysetTail(where, params, 'slug', page);
|
|
1065
|
+
const sql = 'SELECT * FROM verticals' + (where.length ? ` WHERE ${where.join(' AND ')}` : '') + tail;
|
|
1066
|
+
return this.sql.exec(sql, ...params).toArray();
|
|
950
1067
|
}
|
|
951
1068
|
readVersion(id) {
|
|
952
1069
|
return this.sql
|
|
@@ -969,9 +1086,12 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
969
1086
|
setScopeServingRef(scopeId, servingRef) {
|
|
970
1087
|
this.sql.exec('UPDATE scopes SET serving_ref = ? WHERE scope_id = ?', servingRef, scopeId);
|
|
971
1088
|
}
|
|
972
|
-
listVersions(verticalSlug) {
|
|
1089
|
+
listVersions(verticalSlug, page) {
|
|
1090
|
+
const where = ['vertical_slug = ?'];
|
|
1091
|
+
const params = [verticalSlug];
|
|
1092
|
+
const tail = keysetTail(where, params, 'id', page);
|
|
973
1093
|
return this.sql
|
|
974
|
-
.exec(
|
|
1094
|
+
.exec(`SELECT * FROM vertical_versions WHERE ${where.join(' AND ')}${tail}`, ...params)
|
|
975
1095
|
.toArray();
|
|
976
1096
|
}
|
|
977
1097
|
setAdmission(id, admission, note) {
|
|
@@ -999,9 +1119,12 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
999
1119
|
VALUES (?, ?, ?, ?)
|
|
1000
1120
|
ON CONFLICT (vertical_slug, channel) DO UPDATE SET version_id = ?, updated_at = ?`, verticalSlug, channel, versionId, updatedAt, versionId, updatedAt);
|
|
1001
1121
|
}
|
|
1002
|
-
listChannels(verticalSlug) {
|
|
1122
|
+
listChannels(verticalSlug, page) {
|
|
1123
|
+
const where = ['vertical_slug = ?'];
|
|
1124
|
+
const params = [verticalSlug];
|
|
1125
|
+
const tail = keysetTail(where, params, 'channel', page);
|
|
1003
1126
|
return this.sql
|
|
1004
|
-
.exec(
|
|
1127
|
+
.exec(`SELECT * FROM vertical_channels WHERE ${where.join(' AND ')}${tail}`, ...params)
|
|
1005
1128
|
.toArray();
|
|
1006
1129
|
}
|
|
1007
1130
|
insertChannelHistory(h) {
|
|
@@ -1009,10 +1132,18 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
1009
1132
|
(id, vertical_slug, channel, version_id, from_version_id, actor, at)
|
|
1010
1133
|
VALUES (?, ?, ?, ?, ?, ?, ?)`, h.id, h.vertical_slug, h.channel, h.version_id, h.from_version_id, h.actor, h.at);
|
|
1011
1134
|
}
|
|
1012
|
-
listChannelHistory(verticalSlug, channel) {
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1135
|
+
listChannelHistory(verticalSlug, channel, page) {
|
|
1136
|
+
const where = ['vertical_slug = ?'];
|
|
1137
|
+
const params = [verticalSlug];
|
|
1138
|
+
if (channel) {
|
|
1139
|
+
where.push('channel = ?');
|
|
1140
|
+
params.push(channel);
|
|
1141
|
+
}
|
|
1142
|
+
// Newest first is the shipped order, so 'desc' is the DEFAULT here.
|
|
1143
|
+
const tail = keysetTail(where, params, 'id', page, 'desc');
|
|
1144
|
+
return this.sql
|
|
1145
|
+
.exec(`SELECT * FROM vertical_channel_history WHERE ${where.join(' AND ')}${tail}`, ...params)
|
|
1146
|
+
.toArray();
|
|
1016
1147
|
}
|
|
1017
1148
|
// -- organizations (K-22) ---------------------------------------------------
|
|
1018
1149
|
readOrg(tenantId, orgId) {
|
|
@@ -1201,13 +1332,18 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
1201
1332
|
// arrives already sealed and leaves still sealed. This DO has never seen a
|
|
1202
1333
|
// plaintext credential and cannot.
|
|
1203
1334
|
insertConnection(row) {
|
|
1335
|
+
// Live-uniqueness is per ACCOUNT (COALESCEd like the index): a provider
|
|
1336
|
+
// without account refs stays a singleton; a multi-namespace provider may
|
|
1337
|
+
// hold one live connection per external account.
|
|
1204
1338
|
const live = this.sql
|
|
1205
1339
|
.exec(`SELECT id FROM _substrat_connections
|
|
1206
|
-
WHERE tenant_id = ? AND vertical = ? AND provider = ?
|
|
1340
|
+
WHERE tenant_id = ? AND vertical = ? AND provider = ?
|
|
1341
|
+
AND COALESCE(external_account_ref, '') = COALESCE(?, '') AND revoked_at IS NULL`, row.tenantId, row.vertical, row.provider, row.externalAccountRef)
|
|
1207
1342
|
.toArray()[0];
|
|
1208
1343
|
if (live) {
|
|
1344
|
+
const account = row.externalAccountRef ? ` under account '${row.externalAccountRef}'` : '';
|
|
1209
1345
|
throw new Error(`tenant ${row.tenantId} already has a live '${row.provider}' connection ` +
|
|
1210
|
-
`for vertical '${row.vertical}' — revoke it before connecting another`);
|
|
1346
|
+
`for vertical '${row.vertical}'${account} — revoke it before connecting another`);
|
|
1211
1347
|
}
|
|
1212
1348
|
this.sql.exec(`INSERT INTO _substrat_connections
|
|
1213
1349
|
(id, tenant_id, vertical, provider, label, status, external_account_ref,
|
|
@@ -1226,6 +1362,8 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
1226
1362
|
(where.push('vertical = ?'), params.push(filter.vertical));
|
|
1227
1363
|
if (filter.provider)
|
|
1228
1364
|
(where.push('provider = ?'), params.push(filter.provider));
|
|
1365
|
+
if (filter.externalAccountRef)
|
|
1366
|
+
(where.push('external_account_ref = ?'), params.push(filter.externalAccountRef));
|
|
1229
1367
|
if (!filter.includeRevoked)
|
|
1230
1368
|
where.push('revoked_at IS NULL');
|
|
1231
1369
|
return this.sql
|
|
@@ -1237,14 +1375,25 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
1237
1375
|
readConnection(id) {
|
|
1238
1376
|
return this.sql.exec('SELECT * FROM _substrat_connections WHERE id = ?', id).toArray()[0];
|
|
1239
1377
|
}
|
|
1240
|
-
/** The live connection for a triple, plus its sealed blob — the connector read. */
|
|
1241
|
-
readLiveConnection(tenantId, vertical, provider) {
|
|
1242
|
-
|
|
1378
|
+
/** The live connection for a triple (narrowed to one account when given), plus its sealed blob — the connector read. */
|
|
1379
|
+
readLiveConnection(tenantId, vertical, provider, externalAccountRef) {
|
|
1380
|
+
const rows = this.sql
|
|
1243
1381
|
.exec(`SELECT c.*, s.key_id, s.ciphertext
|
|
1244
1382
|
FROM _substrat_connections c
|
|
1245
1383
|
JOIN _substrat_connection_secrets s ON s.connection_id = c.id
|
|
1246
|
-
WHERE c.tenant_id = ? AND c.vertical = ? AND c.provider = ? AND c.revoked_at IS NULL
|
|
1247
|
-
|
|
1384
|
+
WHERE c.tenant_id = ? AND c.vertical = ? AND c.provider = ? AND c.revoked_at IS NULL
|
|
1385
|
+
${externalAccountRef === undefined ? '' : 'AND c.external_account_ref = ?'}
|
|
1386
|
+
LIMIT 2`, ...(externalAccountRef === undefined
|
|
1387
|
+
? [tenantId, vertical, provider]
|
|
1388
|
+
: [tenantId, vertical, provider, externalAccountRef]))
|
|
1389
|
+
.toArray();
|
|
1390
|
+
// Several live accounts and no selector: failing beats acting against an
|
|
1391
|
+
// arbitrary one of the tenant's provider accounts (scope-host.ts).
|
|
1392
|
+
if (rows.length > 1) {
|
|
1393
|
+
throw new Error(`tenant ${tenantId} has multiple live '${provider}' connections for vertical ` +
|
|
1394
|
+
`'${vertical}' — pass externalAccountRef to select one`);
|
|
1395
|
+
}
|
|
1396
|
+
return rows[0];
|
|
1248
1397
|
}
|
|
1249
1398
|
updateConnectionSecret(id, keyId, ciphertext, expiresAt, at) {
|
|
1250
1399
|
this.sql.exec(`UPDATE _substrat_connection_secrets
|
|
@@ -1379,14 +1528,12 @@ export class ControlPlaneDO extends DurableObject {
|
|
|
1379
1528
|
where.push('method = ?');
|
|
1380
1529
|
params.push(query.method);
|
|
1381
1530
|
}
|
|
1531
|
+
// Cursor + order mirror auditLog: the id is a ULID, so it IS the cursor.
|
|
1532
|
+
const tail = keysetTail(where, params, 'id', query);
|
|
1382
1533
|
let sql = 'SELECT * FROM _substrat_access_log';
|
|
1383
1534
|
if (where.length)
|
|
1384
1535
|
sql += ` WHERE ${where.join(' AND ')}`;
|
|
1385
|
-
sql +=
|
|
1386
|
-
if (query.limit !== undefined) {
|
|
1387
|
-
sql += ' LIMIT ?';
|
|
1388
|
-
params.push(query.limit);
|
|
1389
|
-
}
|
|
1536
|
+
sql += tail;
|
|
1390
1537
|
return this.sql.exec(sql, ...params).toArray();
|
|
1391
1538
|
}
|
|
1392
1539
|
/** ONLY drained rows. Age alone is not a licence to delete evidence (K-24). */
|