@substrat-run/kernel 0.143.0 → 0.145.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.
Files changed (75) hide show
  1. package/dist/capability.d.ts +20 -2
  2. package/dist/capability.d.ts.map +1 -1
  3. package/dist/capability.js +73 -13
  4. package/dist/capability.js.map +1 -1
  5. package/dist/derived-handlers.d.ts +2 -0
  6. package/dist/derived-handlers.d.ts.map +1 -1
  7. package/dist/derived-handlers.js +116 -22
  8. package/dist/derived-handlers.js.map +1 -1
  9. package/dist/entity-binding.d.ts +121 -0
  10. package/dist/entity-binding.d.ts.map +1 -0
  11. package/dist/entity-binding.js +235 -0
  12. package/dist/entity-binding.js.map +1 -0
  13. package/dist/entity-grant-shape.d.ts +54 -8
  14. package/dist/entity-grant-shape.d.ts.map +1 -1
  15. package/dist/entity-grant-shape.js +266 -98
  16. package/dist/entity-grant-shape.js.map +1 -1
  17. package/dist/entity-grant.d.ts +19 -2
  18. package/dist/entity-grant.d.ts.map +1 -1
  19. package/dist/entity-grant.js +24 -3
  20. package/dist/entity-grant.js.map +1 -1
  21. package/dist/entity-stamps.d.ts +50 -0
  22. package/dist/entity-stamps.d.ts.map +1 -0
  23. package/dist/entity-stamps.js +93 -0
  24. package/dist/entity-stamps.js.map +1 -0
  25. package/dist/entity-state.d.ts +2 -0
  26. package/dist/entity-state.d.ts.map +1 -1
  27. package/dist/entity-state.js +4 -0
  28. package/dist/entity-state.js.map +1 -1
  29. package/dist/entity-trash.d.ts +14 -2
  30. package/dist/entity-trash.d.ts.map +1 -1
  31. package/dist/entity-trash.js +28 -5
  32. package/dist/entity-trash.js.map +1 -1
  33. package/dist/entity-version.d.ts +29 -15
  34. package/dist/entity-version.d.ts.map +1 -1
  35. package/dist/entity-version.js +13 -9
  36. package/dist/entity-version.js.map +1 -1
  37. package/dist/findings.d.ts +6 -3
  38. package/dist/findings.d.ts.map +1 -1
  39. package/dist/findings.js +25 -5
  40. package/dist/findings.js.map +1 -1
  41. package/dist/index.d.ts +9 -8
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +6 -5
  44. package/dist/index.js.map +1 -1
  45. package/dist/module-erasure.d.ts +2 -1
  46. package/dist/module-erasure.d.ts.map +1 -1
  47. package/dist/module-erasure.js +12 -1
  48. package/dist/module-erasure.js.map +1 -1
  49. package/dist/permission-eval.d.ts +16 -3
  50. package/dist/permission-eval.d.ts.map +1 -1
  51. package/dist/permission-eval.js +52 -9
  52. package/dist/permission-eval.js.map +1 -1
  53. package/dist/platform-sweep.d.ts +124 -2
  54. package/dist/platform-sweep.d.ts.map +1 -1
  55. package/dist/platform-sweep.js +199 -8
  56. package/dist/platform-sweep.js.map +1 -1
  57. package/dist/scope-host.d.ts +39 -6
  58. package/dist/scope-host.d.ts.map +1 -1
  59. package/dist/scope-host.js.map +1 -1
  60. package/dist/sql-identifier.d.ts +3 -0
  61. package/dist/sql-identifier.d.ts.map +1 -1
  62. package/dist/sql-identifier.js +2 -0
  63. package/dist/sql-identifier.js.map +1 -1
  64. package/dist/system-switch.d.ts +5 -0
  65. package/dist/system-switch.d.ts.map +1 -1
  66. package/dist/system-switch.js +7 -0
  67. package/dist/system-switch.js.map +1 -1
  68. package/dist/timeline.d.ts +2 -1
  69. package/dist/timeline.d.ts.map +1 -1
  70. package/dist/timeline.js.map +1 -1
  71. package/package.json +2 -2
  72. package/dist/connect-state.d.ts +0 -103
  73. package/dist/connect-state.d.ts.map +0 -1
  74. package/dist/connect-state.js +0 -128
  75. package/dist/connect-state.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"derived-handlers.js","sourceRoot":"","sources":["../src/derived-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derived-handlers.js","sourceRoot":"","sources":["../src/derived-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { type BoundedUnbind, type CapabilityId, type Coverage, type DomainEventInput, type EntityRef, type PermissionKey, type PrincipalId } from '@substrat-run/contracts';
2
+ import type { ScopedSql } from './scope-host.js';
3
+ /**
4
+ * A BINDING shape (#1686): a record names its own person in a declared column, and the person
5
+ * it names holds the record's declared shape there. What makes a customer invite a binding
6
+ * rather than a delegation: the link names WHICH record, the reviewed registry says WHAT the
7
+ * person bound to it holds, and the minter vouches for the record with an ordinary key.
8
+ *
9
+ * Three writes, each one statement set shared by both adapters:
10
+ * - {@link bindIn}: inside a `become` exchange's transaction, once {@link judgeBind} said yes and
11
+ * the use is taken — the column set to the claimant, the shape granted (marker and keys), and
12
+ * `entity.holder-bound` emitted.
13
+ * - {@link unbindEntityHolderBounded}: the column cleared, and every holder of the shape on the
14
+ * record released from the SPINE — their marker and everything they hold there tombstoned (K-21).
15
+ * - {@link captureBoundOf} / {@link releaseBound}: the erasure's half — on every type that binds or
16
+ * ever bound here, the holders on the erased record and the erased person's own markers, read
17
+ * before any module erasure runs and released after the hooks whether or not a row survived.
18
+ *
19
+ * People already bound keep the shape until they are released — an unbind (while the shape still
20
+ * binds), an erasure, or the retirement of its keys — whatever a later version declares.
21
+ *
22
+ * Read from the scope's record of its reconciled registry (`shape-bind-*` tuples), never from the
23
+ * vertical's code: a scope not yet reconciled with a binding declaration binds nothing.
24
+ */
25
+ interface EntityBinding {
26
+ entityType: string;
27
+ table: string;
28
+ idColumn: string;
29
+ principalColumn: string;
30
+ /**
31
+ * Who holds this on a record may bind its person with a link, and unbind them — null once a
32
+ * version dropped `bind` and kept the shape: nobody may, and an erasure still releases.
33
+ */
34
+ permission: PermissionKey | null;
35
+ /** The shape's current keys — what a claim gives. */
36
+ keys: PermissionKey[];
37
+ /** Every key of the shape, current and retired — what an unbind takes back. */
38
+ every: PermissionKey[];
39
+ }
40
+ /** The bind key's refusal, in the shape every bounded verb answers a missing key with. */
41
+ declare const lacking: (permission: PermissionKey) => {
42
+ ok: false;
43
+ coverage: Extract<Coverage, {
44
+ covered: false;
45
+ }>;
46
+ };
47
+ /**
48
+ * May `entity` be bound by a link its minter vouches for, now? The scope's recorded binding for
49
+ * the type, the record present, its column naming nobody, nobody holding its shape there on the
50
+ * spine (`bind-record-held`: unbind them first), and the minter holding the binding's
51
+ * permission on it (`allowed`, the checker's `check` for the minter). The same judgement at mint
52
+ * and at the exchange, so a link whose minter has since lost the key, or left, is refused.
53
+ */
54
+ export declare function judgeBind(sql: ScopedSql, allowed: (permission: PermissionKey, entity: EntityRef) => Promise<boolean>, entity: EntityRef): Promise<{
55
+ ok: true;
56
+ binding: EntityBinding;
57
+ } | {
58
+ ok: false;
59
+ refused: 'bind-not-declared' | 'bind-record-missing' | 'bind-record-ambiguous' | 'bind-record-bound' | 'bind-record-held';
60
+ } | ReturnType<typeof lacking>>;
61
+ /**
62
+ * The claim's write, inside the exchange's transaction once {@link judgeBind} has said yes there
63
+ * and the use is taken: the record's column set to `principal` — only while it still names nobody —
64
+ * the shape's current keys given with its marker, and `entity.holder-bound` emitted with the
65
+ * capability as actor. Nothing can have moved since the judgement inside one transaction, so a
66
+ * column that no longer reads empty is a fault: thrown, so the use rolls back with it.
67
+ */
68
+ export declare function bindIn(sql: ScopedSql, binding: EntityBinding, entity: EntityRef, principal: PrincipalId, link: {
69
+ capabilityId: CapabilityId;
70
+ mintedBy: PrincipalId;
71
+ }, emit: (event: DomainEventInput) => void): void;
72
+ /** The pseudo-operation an unbind's spine event names, on `capabilities.mint-become`'s pattern. */
73
+ export declare const ENTITY_UNBIND_OPERATION = "entities.unbind";
74
+ /**
75
+ * A principal's unbind of `entity` (#1686) — the lever beside a binding invite, run by a host in one
76
+ * scope task and transaction. Bounded here: the caller must hold the binding's key on the record
77
+ * (`allowed`, the checker's `check` for the caller). Clears the record's column (every row with
78
+ * its id) and releases every holder of the shape on it from the spine — whoever a link bound,
79
+ * whatever the column says now, and a holder given the shape before the column was written —
80
+ * with one `entity.holder-unbound` event each through `emit`, whose actor the host stamps as the
81
+ * caller. `unbound` names everyone released; a refusal writes nothing.
82
+ */
83
+ export declare function unbindEntityHolderBounded(deps: {
84
+ sql: ScopedSql;
85
+ now: string;
86
+ allowed: (permission: PermissionKey, entity: EntityRef) => Promise<boolean>;
87
+ emit: (event: DomainEventInput) => void;
88
+ }, entity: EntityRef): Promise<BoundedUnbind>;
89
+ /** What an erasure releases, read before any of it runs. */
90
+ export interface ErasureBindings {
91
+ /** Shape holders to release: on a record that IS the subject (any holder), or the subject's own markers. */
92
+ holders: {
93
+ object: string;
94
+ only?: string;
95
+ }[];
96
+ /** Rows whose column names someone the erasure reaches, to clear where they survive. */
97
+ columns: {
98
+ binding: EntityBinding;
99
+ entityId: string;
100
+ principal: string;
101
+ }[];
102
+ }
103
+ /**
104
+ * Every binding the erasure of `subjectId` reaches, by the spine and by the column: on each type the
105
+ * scope binds or has ever bound (`shape-bound`) — the id matched against every such type, as a
106
+ * module's declared erasure matches its subject columns whatever the type, so ids that are not
107
+ * ULIDs (an integer, say) can collide across types — the record that IS the subject (every holder on it) and every record the subject
108
+ * holds the shape on (their own marker), plus the rows whose column names the subject or that are
109
+ * the subject. Read BEFORE any declared blank, delete or hook runs, so a row a module's erasure
110
+ * deletes is still known. A scope that binds nothing pays the one read of its shape records.
111
+ */
112
+ export declare function captureBoundOf(sql: ScopedSql, subjectId: string): ErasureBindings;
113
+ /**
114
+ * The erasure's unbind, after the module hooks: each captured column cleared where the row survived
115
+ * and still names that person, and each captured holder released from the spine whether or not
116
+ * its row survived. No event: an event naming the erased subject would be a new copy of what is
117
+ * being erased.
118
+ */
119
+ export declare function releaseBound(sql: ScopedSql, captured: ErasureBindings, now: string): void;
120
+ export {};
121
+ //# sourceMappingURL=entity-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-binding.d.ts","sourceRoot":"","sources":["../src/entity-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ import { ENTITY_HOLDER_BOUND, ENTITY_HOLDER_UNBOUND, ENTITY_SHAPE_MARKER_RELATION, entityObjectRef, permissionKey, substratError, } from '@substrat-run/contracts';
2
+ import { BIND_HOLDER_RELATION, BIND_KEY_RELATION, BIND_PERMISSION_RELATION, BOUND_EVER_RELATION, grantEntityShapeIn } from './entity-grant-shape.js';
3
+ import { SHAPE_PROTECTED_KEY_RELATION } from './entity-grant.js';
4
+ import { assertSqlIdentifier, tableExists } from './sql-identifier.js';
5
+ import { switchSqlOf } from './system-switch.js';
6
+ const PRINCIPAL = 'principal:';
7
+ const GRANTED = 'granted:';
8
+ const BINDING_RELATIONS = [BIND_HOLDER_RELATION, BIND_PERMISSION_RELATION, BIND_KEY_RELATION, SHAPE_PROTECTED_KEY_RELATION];
9
+ /** One shape's recorded facts as a binding, or null when they do not make one. */
10
+ function bindingFrom(entityType, rows) {
11
+ const of = (relation) => rows.filter((r) => r.relation === relation).map((r) => r.object);
12
+ const holder = of(BIND_HOLDER_RELATION);
13
+ const permission = of(BIND_PERMISSION_RELATION);
14
+ if (holder.length !== 1 || permission.length > 1)
15
+ return null;
16
+ const parts = holder[0].split('.');
17
+ if (parts.length !== 3)
18
+ return null;
19
+ const [table, idColumn, principalColumn] = parts.map((n) => assertSqlIdentifier('entityBinding', 'an identifier', n, `the recorded binding of '${entityType}'`));
20
+ const keys = (relation) => of(relation).map((o) => permissionKey.parse(o.slice(GRANTED.length))).sort();
21
+ return {
22
+ entityType,
23
+ table,
24
+ idColumn,
25
+ principalColumn,
26
+ permission: permission[0] === undefined ? null : permissionKey.parse(permission[0]),
27
+ keys: keys(BIND_KEY_RELATION),
28
+ every: keys(SHAPE_PROTECTED_KEY_RELATION),
29
+ };
30
+ }
31
+ /**
32
+ * The scope's recorded binding for `entityType` that still declares its bind key — what a mint, a
33
+ * claim and an unbind need — or null when its reconciled registry binds nothing there.
34
+ */
35
+ function entityBindingOf(sql, entityType) {
36
+ const binding = bindingFrom(entityType, sql.query(`SELECT relation, object FROM _substrat_tuples WHERE subject = ? AND relation IN (?, ?, ?, ?)`, [`shape:${entityType}`, ...BINDING_RELATIONS]));
37
+ return binding?.permission ? { ...binding, permission: binding.permission } : null;
38
+ }
39
+ /** Every binding the scope's reconciled registry records, bind key or not — what an erasure releases — in one read. */
40
+ function entityBindingsOf(sql) {
41
+ const bySubject = new Map();
42
+ for (const row of sql.query(`SELECT subject, relation, object FROM _substrat_tuples
43
+ WHERE subject >= 'shape:' AND subject < 'shape;' AND relation IN (?, ?, ?, ?)`, [...BINDING_RELATIONS])) {
44
+ bySubject.set(row.subject, [...(bySubject.get(row.subject) ?? []), row]);
45
+ }
46
+ return [...bySubject].flatMap(([subject, rows]) => bindingFrom(subject.slice('shape:'.length), rows) ?? []);
47
+ }
48
+ /**
49
+ * The record as the binding sees it: how many rows carry its id, and whom the first row that names
50
+ * someone names. Every row is read: the id column should be unique, and a record any of whose rows
51
+ * names someone is bound.
52
+ */
53
+ function boundRecord(sql, b, entityId) {
54
+ if (!tableExists(switchSqlOf(sql), b.table))
55
+ return { rows: 0, principal: null };
56
+ const rows = sql.query(`SELECT "${b.principalColumn}" AS principal FROM "${b.table}" WHERE "${b.idColumn}" = ?`, [entityId]);
57
+ return { rows: rows.length, principal: rows.find((r) => r.principal !== null)?.principal ?? null };
58
+ }
59
+ /** Does anyone hold a live shape marker on `object`? */
60
+ const heldBySomeone = (sql, object) => sql.query(`SELECT 1 FROM _substrat_tuples WHERE object = ? AND relation = '${ENTITY_SHAPE_MARKER_RELATION}' AND revoked_at IS NULL
61
+ AND subject >= '${PRINCIPAL}' AND subject < 'principal;' LIMIT 1`, [object]).length > 0;
62
+ /** The bind key's refusal, in the shape every bounded verb answers a missing key with. */
63
+ const lacking = (permission) => ({
64
+ ok: false,
65
+ coverage: { covered: false, missing: [permission] },
66
+ });
67
+ /**
68
+ * May `entity` be bound by a link its minter vouches for, now? The scope's recorded binding for
69
+ * the type, the record present, its column naming nobody, nobody holding its shape there on the
70
+ * spine (`bind-record-held`: unbind them first), and the minter holding the binding's
71
+ * permission on it (`allowed`, the checker's `check` for the minter). The same judgement at mint
72
+ * and at the exchange, so a link whose minter has since lost the key, or left, is refused.
73
+ */
74
+ export async function judgeBind(sql, allowed, entity) {
75
+ entityObjectRef(entity, 'bind');
76
+ const binding = entityBindingOf(sql, entity.entityType);
77
+ if (!binding)
78
+ return { ok: false, refused: 'bind-not-declared' };
79
+ // The key before anything about the record: a minter without it on this record learns nothing
80
+ // of whether it exists, names someone, or is held — the same refusal for every record they lack.
81
+ if (!(await allowed(binding.permission, entity)))
82
+ return lacking(binding.permission);
83
+ const record = boundRecord(sql, binding, entity.entityId);
84
+ if (record.rows === 0)
85
+ return { ok: false, refused: 'bind-record-missing' };
86
+ if (record.principal !== null)
87
+ return { ok: false, refused: 'bind-record-bound' };
88
+ // Two rows carrying one id are no one record: there is nothing a claim could bind exactly once.
89
+ if (record.rows > 1)
90
+ return { ok: false, refused: 'bind-record-ambiguous' };
91
+ // The spine as well as the column: someone already holding the record's shape there — given it
92
+ // before the column was written, or left by a holder column a later version moved — is a holder
93
+ // a new link would bind a second person beside. Unbind them first.
94
+ if (heldBySomeone(sql, entityObjectRef(entity, 'bind')))
95
+ return { ok: false, refused: 'bind-record-held' };
96
+ return { ok: true, binding };
97
+ }
98
+ /**
99
+ * The claim's write, inside the exchange's transaction once {@link judgeBind} has said yes there
100
+ * and the use is taken: the record's column set to `principal` — only while it still names nobody —
101
+ * the shape's current keys given with its marker, and `entity.holder-bound` emitted with the
102
+ * capability as actor. Nothing can have moved since the judgement inside one transaction, so a
103
+ * column that no longer reads empty is a fault: thrown, so the use rolls back with it.
104
+ */
105
+ export function bindIn(sql, binding, entity, principal, link, emit) {
106
+ // Counted by RETURNING, never by `changes`: on a Durable Object that is `rowsWritten`, which
107
+ // counts index entries too, so an index on the principal column reads one row as two. Exactly one
108
+ // row: an id two rows carry is no one record, and the claim refuses it rather than bind both.
109
+ const set = sql.query(`UPDATE "${binding.table}" SET "${binding.principalColumn}" = ? WHERE "${binding.idColumn}" = ? AND "${binding.principalColumn}" IS NULL RETURNING 1 AS one`, [principal, entity.entityId]);
110
+ if (set.length !== 1) {
111
+ throw substratError('internal', `capability ${link.capabilityId}: its bind on ${entity.entityType} was refused after it was judged`);
112
+ }
113
+ grantEntityShapeIn(switchSqlOf(sql), principal, entity, binding.keys);
114
+ // Sticky (the reconcile that recorded the binding wrote it too): an erasure releases this type's
115
+ // holders whatever a later version declares.
116
+ sql.exec('INSERT OR IGNORE INTO _substrat_tuples (subject, relation, object) VALUES (?, ?, ?)', [
117
+ `shape:${entity.entityType}`,
118
+ BOUND_EVER_RELATION,
119
+ 'bound',
120
+ ]);
121
+ const payload = { entity, principal, ...link, granted: binding.keys };
122
+ emit({ type: ENTITY_HOLDER_BOUND, schemaVersion: 1, entity, piiClass: 'none', payload });
123
+ }
124
+ /**
125
+ * Release the record's shape holders from the SPINE: every principal holding a live marker on
126
+ * `object` (or only `only`), and with each marker everything that principal holds on the record —
127
+ * every `granted:` tuple there, whatever the shape's keys are now. A binding shape's marker and its
128
+ * keys come only from its own grant (its keys are refused to every direct grant on a record of the
129
+ * type), so the marker is the person's holding of the record, and what they hold on it goes with it:
130
+ * a key the shape has since dropped without retiring it included. That is broader than the shape:
131
+ * it ALSO revokes a direct grant of a key the shape does not declare, made to the same holder on the
132
+ * same record (a `bind:member` granted to a bound person goes with the unbind) — reported in
133
+ * `removed`, never silent. Judged by the spine, never the column, so a column module code rewrote
134
+ * cannot strand the person a link bound. One tombstone statement per holder (K-21).
135
+ */
136
+ function releaseHolders(sql, object, now, only) {
137
+ const holders = sql.query(`SELECT subject FROM _substrat_tuples
138
+ WHERE object = ? AND relation = '${ENTITY_SHAPE_MARKER_RELATION}' AND revoked_at IS NULL
139
+ AND subject >= '${PRINCIPAL}' AND subject < 'principal;'${only === undefined ? '' : ' AND subject = ?'}`, only === undefined ? [object] : [object, `${PRINCIPAL}${only}`]);
140
+ return holders.map(({ subject }) => ({
141
+ principal: subject.slice(PRINCIPAL.length),
142
+ removed: sql
143
+ .query(`UPDATE _substrat_tuples SET revoked_at = ?
144
+ WHERE subject = ? AND object = ? AND revoked_at IS NULL
145
+ AND (relation = '${ENTITY_SHAPE_MARKER_RELATION}' OR (relation >= '${GRANTED}' AND relation < 'granted;'))
146
+ RETURNING relation`, [now, subject, object])
147
+ .flatMap((r) => (r.relation === ENTITY_SHAPE_MARKER_RELATION ? [] : [permissionKey.parse(r.relation.slice(GRANTED.length))]))
148
+ .sort(),
149
+ }));
150
+ }
151
+ /** Clear the record's column — every row carrying its id, or only where it still names `principal`. */
152
+ function clearColumn(sql, binding, entityId, principal) {
153
+ if (!tableExists(switchSqlOf(sql), binding.table))
154
+ return;
155
+ sql.exec(`UPDATE "${binding.table}" SET "${binding.principalColumn}" = NULL WHERE "${binding.idColumn}" = ? AND ${principal === undefined ? `"${binding.principalColumn}" IS NOT NULL` : `"${binding.principalColumn}" = ?`}`, principal === undefined ? [entityId] : [entityId, principal]);
156
+ }
157
+ /** The pseudo-operation an unbind's spine event names, on `capabilities.mint-become`'s pattern. */
158
+ export const ENTITY_UNBIND_OPERATION = 'entities.unbind';
159
+ /**
160
+ * A principal's unbind of `entity` (#1686) — the lever beside a binding invite, run by a host in one
161
+ * scope task and transaction. Bounded here: the caller must hold the binding's key on the record
162
+ * (`allowed`, the checker's `check` for the caller). Clears the record's column (every row with
163
+ * its id) and releases every holder of the shape on it from the spine — whoever a link bound,
164
+ * whatever the column says now, and a holder given the shape before the column was written —
165
+ * with one `entity.holder-unbound` event each through `emit`, whose actor the host stamps as the
166
+ * caller. `unbound` names everyone released; a refusal writes nothing.
167
+ */
168
+ export async function unbindEntityHolderBounded(deps, entity) {
169
+ const object = entityObjectRef(entity, 'unbind');
170
+ const binding = entityBindingOf(deps.sql, entity.entityType);
171
+ if (!binding)
172
+ return { ok: false, refused: 'bind-not-declared' };
173
+ if (!(await deps.allowed(binding.permission, entity)))
174
+ return lacking(binding.permission);
175
+ clearColumn(deps.sql, binding, entity.entityId);
176
+ const released = releaseHolders(deps.sql, object, deps.now);
177
+ for (const { principal, removed } of released) {
178
+ const payload = { entity, principal, removed };
179
+ deps.emit({ type: ENTITY_HOLDER_UNBOUND, schemaVersion: 1, entity, piiClass: 'none', payload });
180
+ }
181
+ return { ok: true, unbound: released.map((r) => r.principal) };
182
+ }
183
+ /**
184
+ * Every binding the erasure of `subjectId` reaches, by the spine and by the column: on each type the
185
+ * scope binds or has ever bound (`shape-bound`) — the id matched against every such type, as a
186
+ * module's declared erasure matches its subject columns whatever the type, so ids that are not
187
+ * ULIDs (an integer, say) can collide across types — the record that IS the subject (every holder on it) and every record the subject
188
+ * holds the shape on (their own marker), plus the rows whose column names the subject or that are
189
+ * the subject. Read BEFORE any declared blank, delete or hook runs, so a row a module's erasure
190
+ * deletes is still known. A scope that binds nothing pays the one read of its shape records.
191
+ */
192
+ export function captureBoundOf(sql, subjectId) {
193
+ const out = { holders: [], columns: [] };
194
+ const bindings = new Map(entityBindingsOf(sql).map((b) => [b.entityType, b]));
195
+ // Every type that binds now, and every type that ever bound here (`shape-bound`, sticky).
196
+ const types = new Set([
197
+ ...bindings.keys(),
198
+ ...sql
199
+ .query(`SELECT subject FROM _substrat_tuples WHERE subject >= 'shape:' AND subject < 'shape;' AND relation = ?`, [
200
+ BOUND_EVER_RELATION,
201
+ ])
202
+ .map((r) => r.subject.slice('shape:'.length)),
203
+ ]);
204
+ for (const entityType of types) {
205
+ const prefix = `${entityType}:`;
206
+ out.holders.push({ object: `${prefix}${subjectId}` });
207
+ for (const { object } of sql.query(`SELECT object FROM _substrat_tuples
208
+ WHERE subject = ? AND relation = '${ENTITY_SHAPE_MARKER_RELATION}' AND revoked_at IS NULL AND object >= ? AND object < ?`, [`${PRINCIPAL}${subjectId}`, prefix, `${entityType};`])) {
209
+ out.holders.push({ object, only: subjectId });
210
+ }
211
+ // The column only where the holder is still recorded: a type a later version stopped binding
212
+ // has no column the kernel still knows, and its holders are released from the spine alone.
213
+ const binding = bindings.get(entityType);
214
+ if (!binding || !tableExists(switchSqlOf(sql), binding.table))
215
+ continue;
216
+ for (const r of sql.query(`SELECT "${binding.idColumn}" AS id, "${binding.principalColumn}" AS principal FROM "${binding.table}"
217
+ WHERE ("${binding.idColumn}" = ? OR "${binding.principalColumn}" = ?) AND "${binding.principalColumn}" IS NOT NULL`, [subjectId, subjectId])) {
218
+ out.columns.push({ binding, entityId: String(r.id), principal: r.principal });
219
+ }
220
+ }
221
+ return out;
222
+ }
223
+ /**
224
+ * The erasure's unbind, after the module hooks: each captured column cleared where the row survived
225
+ * and still names that person, and each captured holder released from the spine whether or not
226
+ * its row survived. No event: an event naming the erased subject would be a new copy of what is
227
+ * being erased.
228
+ */
229
+ export function releaseBound(sql, captured, now) {
230
+ for (const { binding, entityId, principal } of captured.columns)
231
+ clearColumn(sql, binding, entityId, principal);
232
+ for (const { object, only } of captured.holders)
233
+ releaseHolders(sql, object, now, only);
234
+ }
235
+ //# sourceMappingURL=entity-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-binding.js","sourceRoot":"","sources":["../src/entity-binding.ts"],"names":[],"mappings":"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"}
@@ -36,13 +36,25 @@ import type { SwitchSql } from './system-switch.js';
36
36
  * the principal; a table column naming the principal), and a person is marked only on their
37
37
  * own record, and only when they hold a row there (live or tombstoned) for some key of the
38
38
  * shape — evidence they were given it. Someone `ctx.grant`ed even the whole shape on another
39
- * person's record is never marked. A shape with no `holder` gets no backfill. Each batch marks
40
- * at most what the pass's budget allows; the markers are the progress, since a marked pair is
41
- * no longer a candidate, and a record tuple (`shape:<type>`, `shape-backfilled`, `scope:<id>`)
42
- * ends it once a batch comes back short.
39
+ * person's record is never marked. A shape with no `holder` gets no backfill. It is read in
40
+ * windows like the walks (#2154): each pass reads at most its read budget of rows, in an index
41
+ * order, marks at most its write budget, and hands back the last row it read as the cursor's
42
+ * `row`, so the next pass seeks past it rather than re-reading from the start. A record tuple
43
+ * (`shape:<type>`, `shape-backfilled`, `scope:<id>`) ends it once a read reaches the end of the
44
+ * range, and never before. A table holder's read is keyed on `idColumn` and then the row's own
45
+ * identity (its `rowid`, or a `WITHOUT ROWID` table's primary key), because nothing makes
46
+ * `idColumn` unique or the principal non-NULL, and a key that ties lets a window's edge skip a row.
47
+ *
48
+ * The cut-off is the cursor. Evidence that lands behind it while the backfill runs (a direct
49
+ * grant of a shape key to the person on their own record, for `'self'` or a table holder) is not
50
+ * marked, and once the record is written nothing is: the same accepted gap as a grant landing
51
+ * after the record. There is deliberately no confirming walk, as a retirement has: it would
52
+ * double every first backfill's reads to catch a grant that a shape grant should have made. For
53
+ * `'grantee'` nothing can land at all, since the first pass records the grantee keys and the
54
+ * tuple writer refuses them to every other grant from then on.
43
55
  * - `holder: 'grantee'` (#2083), for a record that names no principal (a portal customer, a
44
56
  * contact): whoever holds a live current or retired key of the shape on such an entity was given it.
45
- * Each pass records current and retired keys (`shape-grantee-key`), and the explicit tuple
57
+ * Each reconcile records current and retired keys (`shape-grantee-key`), and the explicit tuple
46
58
  * writer makes non-shape grants refuse them on that entity type. A tuple from before the
47
59
  * first such pass cannot be told apart. A marker already written by a shape grant persists
48
60
  * through retirement, so its holder receives the new keys even if their old key was K alone.
@@ -65,7 +77,8 @@ export declare const SHAPE_MARKER_INDEX_DDL = "CREATE INDEX IF NOT EXISTS _subst
65
77
  /** Holders topped up per pass — one transaction each, so a large scope never holds one long. */
66
78
  export declare const SHAPE_TOP_UP_BATCH = 500;
67
79
  /**
68
- * Markers a pass may READ, per row of work it may write. The budget bounds writes, but finding
80
+ * Rows a pass may READ, per row of work it may write: markers on a walk, and the tuples or table
81
+ * rows the backfill reads for candidates (#2154). The budget bounds writes, but finding
69
82
  * the holders who need one means reading past the ones who do not, and on a scope where nobody
70
83
  * does (the common reconcile: nothing changed) that is every marker. Ten per row keeps a pass at
71
84
  * 5000 index rows by default, short on any scope, while a rollout still spends most of each pass
@@ -121,6 +134,15 @@ export interface ShapeCursor {
121
134
  object: string;
122
135
  subject: string;
123
136
  } | null;
137
+ /**
138
+ * The backfill only (#2154): the sort key of the last row its read reached, `[object, relation,
139
+ * subject]` of a tuple for a `'self'` or `'grantee'` holder, `[id, rowid]` for a table holder
140
+ * (`[id, …primary key]` for a `WITHOUT ROWID` table). Absent
141
+ * or `null` reads the backfill from its start, which is always safe: a pair it already marked
142
+ * is no longer a candidate, so a cursor from before this field (or one a rollback ignores) only
143
+ * costs a re-read.
144
+ */
145
+ row?: readonly (string | number)[] | null;
124
146
  /**
125
147
  * A confirming retire walk only: whether it has taken nothing so far, and how many confirming
126
148
  * walks before it, on this shape in this reconcile, took keys.
@@ -148,12 +170,15 @@ export interface ShapePass {
148
170
  }
149
171
  /**
150
172
  * One pass of the reconcile over one scope, at most `limit` rows of work and
151
- * `limit × SHAPE_MARKER_READS_PER_ROW` markers read: backfill marks for any shape whose backfill
173
+ * `limit × SHAPE_MARKER_READS_PER_ROW` rows read (markers, and the backfill's tuples or table
174
+ * rows): backfill marks for any shape whose backfill
152
175
  * is not done here, then holders whose retired keys are taken back, each with its
153
176
  * `entity.grants-retired` event, then holders topped up, each with its `entity.grants-topped-up`
154
177
  * event. `next` is `null` once the scope is done; otherwise the caller runs another pass with it
155
178
  * as `after`. `retirementsLeftOpen` counts the shapes whose retirement this pass gave up on at
156
- * `SHAPE_RETIRE_CONFIRMS_MAX`, for the next reconcile to run again. Run it inside ONE
179
+ * `SHAPE_RETIRE_CONFIRMS_MAX`, for the next reconcile to run again. The last pass (`next: null`)
180
+ * also answers `boundEver` (#2184): every type this scope has ever bound (`shape-bound`), read
181
+ * after this reconcile recorded its facts, for the platform's binding-shape gate. Run it inside ONE
157
182
  * transaction, so the keys and their events commit together. Re-running a finished scope writes
158
183
  * nothing.
159
184
  */
@@ -162,5 +187,26 @@ export declare function topUpEntityGrantShapes(db: SwitchSql, pass: ShapePass):
162
187
  retired: number;
163
188
  retirementsLeftOpen: number;
164
189
  next: ShapeCursor | null;
190
+ boundEver?: string[];
165
191
  };
192
+ /**
193
+ * A BINDING shape's record (#1686), on the scope's tuple spine beside the grantee keys: which
194
+ * table column names the record's person (`<table>.<idColumn>.<principalColumn>`), the key that
195
+ * lets someone bind or unbind them, and the shape's current keys — what a binding invite's claim
196
+ * gives. The claim and an unbind read these, never the vertical's code: the shape is the reviewed
197
+ * registry the platform last reconciled this scope with. Each identifier is a SQL identifier, so
198
+ * `.` cannot occur inside one.
199
+ */
200
+ export declare const BIND_HOLDER_RELATION = "shape-bind-holder";
201
+ export declare const BIND_PERMISSION_RELATION = "shape-bind-permission";
202
+ export declare const BIND_KEY_RELATION = "shape-bind-key";
203
+ /**
204
+ * `(shape:<type>, shape-bound, bound)`: this scope has declared a binding for `<type>` (#1686).
205
+ * Written by the first reconcile that records the binding (and by every claim, to the same effect)
206
+ * and STICKY — no reconcile removes it, whatever later
207
+ * versions declare — so an erasure keeps releasing that type's holders after a version drops the
208
+ * shape, drops its `bind` or moves its holder column. A spine tuple like the others here, so
209
+ * module code can never write one (`ctx.sql` refuses every `_substrat_*` write).
210
+ */
211
+ export declare const BOUND_EVER_RELATION = "shape-bound";
166
212
  //# sourceMappingURL=entity-grant-shape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,gIAAsJ,CAAC;AAE1L,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAA2B,GAAG,MAAM,CAS1E;AAuBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASjI;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,2EAA2E;IAC3E,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,sEAAsE;IACtE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CA8D9F"}
1
+ {"version":3,"file":"entity-grant-shape.d.ts","sourceRoot":"","sources":["../src/entity-grant-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,gIAAsJ,CAAC;AAE1L,gGAAgG;AAChG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAA2B,GAAG,MAAM,CAS1E;AAuBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASjI;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,2EAA2E;IAC3E,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,2FAA2F;AAC3F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,sEAAsE;IACtE,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,SAAS,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CA+DpH;AAmaD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAChE,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,gBAAgB,CAAC"}