@substrat-run/contracts 0.138.0 → 0.140.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/connections.d.ts +131 -0
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +90 -1
- package/dist/connections.js.map +1 -1
- package/dist/control-plane.d.ts +366 -10
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +254 -11
- package/dist/control-plane.js.map +1 -1
- package/dist/deploy.d.ts +83 -3
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +109 -3
- package/dist/deploy.js.map +1 -1
- package/dist/email-intent.d.ts +106 -0
- package/dist/email-intent.d.ts.map +1 -0
- package/dist/email-intent.js +111 -0
- package/dist/email-intent.js.map +1 -0
- package/dist/entity-state.d.ts +96 -0
- package/dist/entity-state.d.ts.map +1 -0
- package/dist/entity-state.js +85 -0
- package/dist/entity-state.js.map +1 -0
- package/dist/findings.d.ts +208 -0
- package/dist/findings.d.ts.map +1 -0
- package/dist/findings.js +116 -0
- package/dist/findings.js.map +1 -0
- package/dist/ids.d.ts +13 -0
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +30 -0
- package/dist/ids.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/introspection.d.ts +22 -0
- package/dist/introspection.d.ts.map +1 -1
- package/dist/introspection.js +1 -1
- package/dist/introspection.js.map +1 -1
- package/dist/kernel-events.d.ts.map +1 -1
- package/dist/kernel-events.js +12 -1
- package/dist/kernel-events.js.map +1 -1
- package/dist/manifest.d.ts +53 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +40 -2
- package/dist/manifest.js.map +1 -1
- package/dist/model.d.ts +119 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +147 -0
- package/dist/model.js.map +1 -1
- package/dist/operations.d.ts +117 -1
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +159 -1
- package/dist/operations.js.map +1 -1
- package/dist/pagination.d.ts +0 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +0 -0
- package/dist/pagination.js.map +1 -1
- package/dist/peer.d.ts +34 -0
- package/dist/peer.d.ts.map +1 -1
- package/dist/peer.js +17 -2
- package/dist/peer.js.map +1 -1
- package/dist/permission.d.ts +56 -0
- package/dist/permission.d.ts.map +1 -1
- package/dist/permission.js +58 -3
- package/dist/permission.js.map +1 -1
- package/dist/registry-diff.d.ts +18 -1
- package/dist/registry-diff.d.ts.map +1 -1
- package/dist/registry-diff.js +24 -7
- package/dist/registry-diff.js.map +1 -1
- package/dist/registry.d.ts +6 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +8 -2
- package/dist/registry.js.map +1 -1
- package/dist/relay-caller.d.ts +28 -0
- package/dist/relay-caller.d.ts.map +1 -0
- package/dist/relay-caller.js +28 -0
- package/dist/relay-caller.js.map +1 -0
- package/dist/sql-tokens.d.ts +9 -1
- package/dist/sql-tokens.d.ts.map +1 -1
- package/dist/sql-tokens.js +4 -1
- package/dist/sql-tokens.js.map +1 -1
- package/dist/subject-erasure.d.ts +109 -0
- package/dist/subject-erasure.d.ts.map +1 -0
- package/dist/subject-erasure.js +93 -0
- package/dist/subject-erasure.js.map +1 -0
- package/dist/vertical-events.d.ts +1 -0
- package/dist/vertical-events.d.ts.map +1 -1
- package/dist/vertical-events.js +6 -0
- package/dist/vertical-events.js.map +1 -1
- package/dist/wire-headers.d.ts +6 -1
- package/dist/wire-headers.d.ts.map +1 -1
- package/dist/wire-headers.js.map +1 -1
- package/package.json +1 -1
package/dist/model.d.ts
CHANGED
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { z } from 'zod';
|
|
25
25
|
import { type EmittedLifecycle, type LifecycleDef } from './lifecycle.js';
|
|
26
|
+
import type { EntityStateDeclaration } from './entity-state.js';
|
|
27
|
+
import { type SubjectErasureDeclaration } from './subject-erasure.js';
|
|
26
28
|
/**
|
|
27
29
|
* One entity: the table it lives in, its field schema, and its place in the
|
|
28
30
|
* permission graph.
|
|
@@ -110,7 +112,55 @@ export interface EntityDef<Names extends string = string> {
|
|
|
110
112
|
* carrying gravestones.
|
|
111
113
|
*/
|
|
112
114
|
readonly renamedFrom?: Readonly<Record<string, string>>;
|
|
115
|
+
/**
|
|
116
|
+
* The entity can be ARCHIVED — hidden from active views, retained, and readable through
|
|
117
|
+
* its ordinary read authority (#119). `permission` gates `ctx.archive` and `ctx.unarchive`
|
|
118
|
+
* on the entity; the kernel re-checks it, so an operation cannot archive under another key.
|
|
119
|
+
*
|
|
120
|
+
* Declaring it gives the table a kernel-owned `_substrat_archived_at` column (a derived
|
|
121
|
+
* migration, like a search index's) and makes `ctx.page`/`ctx.search` leave archived rows
|
|
122
|
+
* out unless asked for them. Only a single-column-keyed entity can declare it: the verbs
|
|
123
|
+
* take an `EntityRef`.
|
|
124
|
+
*/
|
|
125
|
+
readonly archive?: {
|
|
126
|
+
readonly permission: string;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* The entity can be TRASHED — a reversible delete (#119). `permission` gates `ctx.trash`,
|
|
130
|
+
* `ctx.restore` and the trashed readers, and is distinct from `archive`'s on purpose:
|
|
131
|
+
* putting something in the bin and seeing what is in it are not the same authority as
|
|
132
|
+
* filing it away. Gives the table `_substrat_trashed_at`.
|
|
133
|
+
*
|
|
134
|
+
* `purgeAfterDays` adds a PURGE HORIZON (#119): an entity in the bin longer than that is
|
|
135
|
+
* permanently deleted by the platform's sweep, which runs the vertical's own operation that
|
|
136
|
+
* declares `trashed: 'purges'` for this entity — so what a delete cascades to stays the
|
|
137
|
+
* vertical's rule. The operation is run as the module's system principal, one entity per
|
|
138
|
+
* transaction. Absent, nothing is ever purged: the bin keeps what it holds until a person
|
|
139
|
+
* empties it. A purge removes the row the way that operation always has; the events about the
|
|
140
|
+
* entity stay, which is what separates it from erasure (#37).
|
|
141
|
+
*/
|
|
142
|
+
readonly trash?: {
|
|
143
|
+
readonly permission: string;
|
|
144
|
+
readonly purgeAfterDays?: number;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* How a subject erasure reaches this entity's rows (#2068) — see `subject-erasure.ts`.
|
|
148
|
+
*
|
|
149
|
+
* `subjects` names the fields whose value is a data subject id; a row is the subject's when
|
|
150
|
+
* any of them equals the id erased. `mode: 'blank'` (the default) blanks the `erasable`
|
|
151
|
+
* fields and keeps the row; `'delete'` removes the row; `{ mode: 'custom' }` says the
|
|
152
|
+
* module's `onSubjectErased` hook reaches it. Requires `erasable`. An entity with `erasable`
|
|
153
|
+
* fields and no `erasure` is unreached, and every receipt says so.
|
|
154
|
+
*/
|
|
155
|
+
readonly erasure?: EntityErasureDef;
|
|
113
156
|
}
|
|
157
|
+
/** An entity's `erasure` declaration, as authored. */
|
|
158
|
+
export type EntityErasureDef<F extends string = string> = {
|
|
159
|
+
readonly subjects: readonly F[];
|
|
160
|
+
readonly mode?: 'blank' | 'delete';
|
|
161
|
+
} | {
|
|
162
|
+
readonly mode: 'custom';
|
|
163
|
+
};
|
|
114
164
|
/**
|
|
115
165
|
* The entities the platform can point AT — those identified by ONE column.
|
|
116
166
|
*
|
|
@@ -168,6 +218,7 @@ export declare function defineEntities<const T extends {
|
|
|
168
218
|
key?: readonly EntityFields<T[K]>[];
|
|
169
219
|
erasable?: readonly EntityFields<T[K]>[];
|
|
170
220
|
outsideText?: readonly EntityFields<T[K]>[];
|
|
221
|
+
erasure?: EntityErasureDef<EntityFields<T[K]>>;
|
|
171
222
|
renamedFrom?: Readonly<Partial<Record<EntityFields<T[K]>, string>>>;
|
|
172
223
|
};
|
|
173
224
|
}>(entities: T): T;
|
|
@@ -213,6 +264,20 @@ export interface EmittedEntity {
|
|
|
213
264
|
readonly key?: readonly string[];
|
|
214
265
|
readonly erasable?: readonly string[];
|
|
215
266
|
readonly outsideText?: readonly string[];
|
|
267
|
+
/** The permission key that archives it (#119), when it can be archived. */
|
|
268
|
+
readonly archive?: {
|
|
269
|
+
readonly permission: string;
|
|
270
|
+
};
|
|
271
|
+
/** The permission key that trashes it (#119), when it can be trashed, and its purge horizon. */
|
|
272
|
+
readonly trash?: {
|
|
273
|
+
readonly permission: string;
|
|
274
|
+
readonly purgeAfterDays?: number;
|
|
275
|
+
};
|
|
276
|
+
/** How a subject erasure reaches it (#2068), when declared. `subjects` sorted. */
|
|
277
|
+
readonly erasure?: {
|
|
278
|
+
readonly mode: 'blank' | 'delete' | 'custom';
|
|
279
|
+
readonly subjects?: readonly string[];
|
|
280
|
+
};
|
|
216
281
|
}
|
|
217
282
|
export interface EmittedModel {
|
|
218
283
|
/**
|
|
@@ -284,6 +349,21 @@ export declare const emittedEntity: z.ZodObject<{
|
|
|
284
349
|
key: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
285
350
|
erasable: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
286
351
|
outsideText: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
352
|
+
archive: z.ZodOptional<z.ZodObject<{
|
|
353
|
+
permission: z.ZodString;
|
|
354
|
+
}, z.core.$strip>>;
|
|
355
|
+
trash: z.ZodOptional<z.ZodObject<{
|
|
356
|
+
permission: z.ZodString;
|
|
357
|
+
purgeAfterDays: z.ZodOptional<z.ZodNumber>;
|
|
358
|
+
}, z.core.$strip>>;
|
|
359
|
+
erasure: z.ZodOptional<z.ZodObject<{
|
|
360
|
+
mode: z.ZodEnum<{
|
|
361
|
+
blank: "blank";
|
|
362
|
+
custom: "custom";
|
|
363
|
+
delete: "delete";
|
|
364
|
+
}>;
|
|
365
|
+
subjects: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
366
|
+
}, z.core.$strip>>;
|
|
287
367
|
}, z.core.$strip>;
|
|
288
368
|
export declare const emittedExport: z.ZodObject<{
|
|
289
369
|
schemaVersion: z.ZodNumber;
|
|
@@ -300,6 +380,21 @@ export declare const emittedModel: z.ZodObject<{
|
|
|
300
380
|
key: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
301
381
|
erasable: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
302
382
|
outsideText: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
383
|
+
archive: z.ZodOptional<z.ZodObject<{
|
|
384
|
+
permission: z.ZodString;
|
|
385
|
+
}, z.core.$strip>>;
|
|
386
|
+
trash: z.ZodOptional<z.ZodObject<{
|
|
387
|
+
permission: z.ZodString;
|
|
388
|
+
purgeAfterDays: z.ZodOptional<z.ZodNumber>;
|
|
389
|
+
}, z.core.$strip>>;
|
|
390
|
+
erasure: z.ZodOptional<z.ZodObject<{
|
|
391
|
+
mode: z.ZodEnum<{
|
|
392
|
+
blank: "blank";
|
|
393
|
+
custom: "custom";
|
|
394
|
+
delete: "delete";
|
|
395
|
+
}>;
|
|
396
|
+
subjects: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
397
|
+
}, z.core.$strip>>;
|
|
303
398
|
}, z.core.$strip>>;
|
|
304
399
|
lifecycles: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
305
400
|
field: z.ZodString;
|
|
@@ -503,6 +598,28 @@ export interface EnrichedSearchable {
|
|
|
503
598
|
readonly idColumn: string;
|
|
504
599
|
readonly tokenizer?: 'prefix' | 'substring';
|
|
505
600
|
}
|
|
601
|
+
/**
|
|
602
|
+
* The `entityStates` manifest entries (#119), derived from each entity's own `archive` /
|
|
603
|
+
* `trash` — never written a second time, as `entityRelations` is derived from `parents`.
|
|
604
|
+
*
|
|
605
|
+
* Refuses a composite-keyed entity for `enrichSearchables`'s reason: the verbs take an
|
|
606
|
+
* `EntityRef`, which is one id, and a row keyed by three columns has none to give.
|
|
607
|
+
*/
|
|
608
|
+
export declare function entityStatesOf(entities: Record<string, EntityDef>): EntityStateDeclaration[];
|
|
609
|
+
/**
|
|
610
|
+
* The `erasure` manifest block (#2068), derived from each entity's `erasable` and `erasure`.
|
|
611
|
+
* Undefined when no entity declares either, so a model with nothing personal in it emits a
|
|
612
|
+
* manifest byte-for-byte what it was before.
|
|
613
|
+
*
|
|
614
|
+
* Refuses, at emit and at manifest time alike:
|
|
615
|
+
* - an `erasure` on an entity with no `erasable` fields — it would reach nothing;
|
|
616
|
+
* - a subject column that is not a field;
|
|
617
|
+
* - a `blank` that would write into the primary key, or write `''` into a `key` column (a
|
|
618
|
+
* second blanked row would collide with the first and fail the erasure mid-way) — such an
|
|
619
|
+
* entity is the person's data whole, and declares `mode: 'delete'`;
|
|
620
|
+
* - a blank of a field that admits neither NULL nor `''`.
|
|
621
|
+
*/
|
|
622
|
+
export declare function subjectErasureOf(entities: Record<string, EntityDef>): SubjectErasureDeclaration | undefined;
|
|
506
623
|
export declare function manifestEntities<const T extends Record<string, EntityDef>, const M extends EntityRefs<T, M>>(entities: T, refs: M): {
|
|
507
624
|
attachmentTargets: NonNullable<M['attachmentTargets']> | [];
|
|
508
625
|
liveTargets: NonNullable<M['liveTargets']> | [];
|
|
@@ -511,6 +628,8 @@ export declare function manifestEntities<const T extends Record<string, EntityDe
|
|
|
511
628
|
entityType: string;
|
|
512
629
|
parentType: string;
|
|
513
630
|
}[];
|
|
631
|
+
entityStates?: EntityStateDeclaration[];
|
|
632
|
+
erasure?: SubjectErasureDeclaration;
|
|
514
633
|
ui: {
|
|
515
634
|
entityViews: M['entityViews'];
|
|
516
635
|
};
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
CHANGED
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
import { z } from 'zod';
|
|
25
25
|
import { emitLifecycles } from './lifecycle.js';
|
|
26
26
|
import { isKernelNamespace } from './object-ref.js';
|
|
27
|
+
import { subjectErasureDeclaration, } from './subject-erasure.js';
|
|
28
|
+
import { permissionKey } from './ids.js';
|
|
27
29
|
/**
|
|
28
30
|
* Declare a module's entities.
|
|
29
31
|
*
|
|
@@ -115,6 +117,11 @@ export const emittedEntity = z.object({
|
|
|
115
117
|
key: z.array(z.string()).optional(),
|
|
116
118
|
erasable: z.array(z.string()).optional(),
|
|
117
119
|
outsideText: z.array(z.string()).optional(),
|
|
120
|
+
archive: z.object({ permission: z.string().min(1) }).optional(),
|
|
121
|
+
trash: z.object({ permission: z.string().min(1), purgeAfterDays: z.number().int().positive().optional() }).optional(),
|
|
122
|
+
erasure: z
|
|
123
|
+
.object({ mode: z.enum(['blank', 'delete', 'custom']), subjects: z.array(z.string()).optional() })
|
|
124
|
+
.optional(),
|
|
118
125
|
});
|
|
119
126
|
export const emittedExport = z.object({
|
|
120
127
|
schemaVersion: z.number().int().positive(),
|
|
@@ -154,8 +161,21 @@ export function emitModel(entities, options = {}) {
|
|
|
154
161
|
...(e.key ? { key: [...e.key].sort() } : {}),
|
|
155
162
|
...(e.erasable ? { erasable: [...e.erasable].sort() } : {}),
|
|
156
163
|
...(e.outsideText ? { outsideText: [...e.outsideText].sort() } : {}),
|
|
164
|
+
...(e.archive ? { archive: { permission: e.archive.permission } } : {}),
|
|
165
|
+
...(e.trash
|
|
166
|
+
? {
|
|
167
|
+
trash: {
|
|
168
|
+
permission: e.trash.permission,
|
|
169
|
+
...(e.trash.purgeAfterDays !== undefined ? { purgeAfterDays: e.trash.purgeAfterDays } : {}),
|
|
170
|
+
},
|
|
171
|
+
}
|
|
172
|
+
: {}),
|
|
173
|
+
...(e.erasure ? { erasure: emittedErasure(e.erasure) } : {}),
|
|
157
174
|
};
|
|
158
175
|
}
|
|
176
|
+
// Refused at emit too, so `lint:model --check` goes red where `manifestEntities` would.
|
|
177
|
+
entityStatesOf(entities);
|
|
178
|
+
subjectErasureOf(entities);
|
|
159
179
|
const lifecycles = options.lifecycles ? emitLifecycles(options.lifecycles) : undefined;
|
|
160
180
|
if (lifecycles) {
|
|
161
181
|
// A machine over an entity the registry does not declare is the same class
|
|
@@ -230,7 +250,132 @@ function enrichSearchables(entities, searchables) {
|
|
|
230
250
|
};
|
|
231
251
|
});
|
|
232
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* The `entityStates` manifest entries (#119), derived from each entity's own `archive` /
|
|
255
|
+
* `trash` — never written a second time, as `entityRelations` is derived from `parents`.
|
|
256
|
+
*
|
|
257
|
+
* Refuses a composite-keyed entity for `enrichSearchables`'s reason: the verbs take an
|
|
258
|
+
* `EntityRef`, which is one id, and a row keyed by three columns has none to give.
|
|
259
|
+
*/
|
|
260
|
+
export function entityStatesOf(entities) {
|
|
261
|
+
const out = [];
|
|
262
|
+
for (const name of Object.keys(entities).sort()) {
|
|
263
|
+
const entity = entities[name];
|
|
264
|
+
if (!entity || (!entity.archive && !entity.trash))
|
|
265
|
+
continue;
|
|
266
|
+
const key = primaryKeyOf(name, entity);
|
|
267
|
+
if (key.length !== 1) {
|
|
268
|
+
throw new Error(`model: '${name}' is keyed by (${key.join(', ')}) and cannot be archived or trashed — ` +
|
|
269
|
+
'ctx.archive and ctx.trash take one id, and a composite key has none to give');
|
|
270
|
+
}
|
|
271
|
+
const days = entity.trash?.purgeAfterDays;
|
|
272
|
+
if (days !== undefined && !(Number.isInteger(days) && days > 0)) {
|
|
273
|
+
throw new Error(`model: '${name}' declares trash.purgeAfterDays ${String(days)} — a horizon is a whole number of days, at least 1`);
|
|
274
|
+
}
|
|
275
|
+
out.push({
|
|
276
|
+
entityType: name,
|
|
277
|
+
...(entity.archive ? { archivePermission: permissionKey.parse(entity.archive.permission) } : {}),
|
|
278
|
+
...(entity.trash ? { trashPermission: permissionKey.parse(entity.trash.permission) } : {}),
|
|
279
|
+
...(entity.trash?.purgeAfterDays !== undefined ? { purgeAfterDays: entity.trash.purgeAfterDays } : {}),
|
|
280
|
+
table: entity.table,
|
|
281
|
+
idColumn: key[0],
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
return out;
|
|
285
|
+
}
|
|
286
|
+
/** An authored `erasure`, in the artifact's one shape: the mode spelled out, subjects sorted. */
|
|
287
|
+
function emittedErasure(e) {
|
|
288
|
+
return 'subjects' in e
|
|
289
|
+
? { mode: e.mode ?? 'blank', subjects: [...e.subjects].sort() }
|
|
290
|
+
: { mode: 'custom' };
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* What a blank writes into one erasable field (#2068): NULL when the field admits it, else the
|
|
294
|
+
* empty string when IT admits that, else nothing a blank can write — and the model is refused.
|
|
295
|
+
* Probed against the field's own schema, so the answer is the one the row's writers live by.
|
|
296
|
+
*/
|
|
297
|
+
function blankFor(entity, field, schema) {
|
|
298
|
+
const blank = blankOf(schema);
|
|
299
|
+
if (blank !== undefined)
|
|
300
|
+
return blank;
|
|
301
|
+
throw new Error(`model: ${entity}.${field} is erasable, admits neither NULL nor '', and so cannot be blanked — ` +
|
|
302
|
+
"make it nullable, or declare `erasure: { subjects, mode: 'delete' }`");
|
|
303
|
+
}
|
|
304
|
+
/** NULL when the field admits it, else `''` when it admits that, else undefined. */
|
|
305
|
+
function blankOf(schema) {
|
|
306
|
+
if (schema.safeParse(null).success)
|
|
307
|
+
return null;
|
|
308
|
+
if (schema.safeParse('').success)
|
|
309
|
+
return '';
|
|
310
|
+
return undefined;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* The `erasure` manifest block (#2068), derived from each entity's `erasable` and `erasure`.
|
|
314
|
+
* Undefined when no entity declares either, so a model with nothing personal in it emits a
|
|
315
|
+
* manifest byte-for-byte what it was before.
|
|
316
|
+
*
|
|
317
|
+
* Refuses, at emit and at manifest time alike:
|
|
318
|
+
* - an `erasure` on an entity with no `erasable` fields — it would reach nothing;
|
|
319
|
+
* - a subject column that is not a field;
|
|
320
|
+
* - a `blank` that would write into the primary key, or write `''` into a `key` column (a
|
|
321
|
+
* second blanked row would collide with the first and fail the erasure mid-way) — such an
|
|
322
|
+
* entity is the person's data whole, and declares `mode: 'delete'`;
|
|
323
|
+
* - a blank of a field that admits neither NULL nor `''`.
|
|
324
|
+
*/
|
|
325
|
+
export function subjectErasureOf(entities) {
|
|
326
|
+
const out = [];
|
|
327
|
+
for (const name of Object.keys(entities).sort()) {
|
|
328
|
+
const entity = entities[name];
|
|
329
|
+
if (!entity)
|
|
330
|
+
continue;
|
|
331
|
+
const erasable = entity.erasable ?? [];
|
|
332
|
+
if (erasable.length === 0) {
|
|
333
|
+
if (entity.erasure) {
|
|
334
|
+
throw new Error(`model: ${name} declares an \`erasure\` but no \`erasable\` fields — it would reach nothing`);
|
|
335
|
+
}
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
const shape = entity.fields.shape;
|
|
339
|
+
const emitted = entity.erasure && emittedErasure(entity.erasure);
|
|
340
|
+
const mode = emitted?.mode ?? 'unreached';
|
|
341
|
+
const subjects = emitted?.subjects;
|
|
342
|
+
for (const col of subjects ?? []) {
|
|
343
|
+
if (!(col in shape))
|
|
344
|
+
throw new Error(`model: ${name}.erasure.subjects names '${col}', which is not a field`);
|
|
345
|
+
}
|
|
346
|
+
if (subjects?.length === 0)
|
|
347
|
+
throw new Error(`model: ${name}.erasure.subjects is empty — name the subject column`);
|
|
348
|
+
const fields = [...erasable].sort().map((f) => {
|
|
349
|
+
const schema = shape[f];
|
|
350
|
+
if (!schema)
|
|
351
|
+
throw new Error(`model: ${name}.erasable names '${f}', which is not a field`);
|
|
352
|
+
// Only a blank writes the value, so only a blank is refused for having none to write.
|
|
353
|
+
return { name: f, blank: mode === 'blank' ? blankFor(name, f, schema) : blankOf(schema) === null ? null : '' };
|
|
354
|
+
});
|
|
355
|
+
if (mode === 'blank') {
|
|
356
|
+
const pk = new Set(primaryKeyOf(name, entity));
|
|
357
|
+
const key = new Set(entity.key ?? []);
|
|
358
|
+
for (const f of fields) {
|
|
359
|
+
const inPk = pk.has(f.name);
|
|
360
|
+
if (inPk || (f.blank === '' && key.has(f.name))) {
|
|
361
|
+
throw new Error(`model: ${name}.${f.name} is erasable and part of the ${inPk ? 'primary key' : '`key`'}, so a ` +
|
|
362
|
+
"blank would collide with the next one — declare `erasure: { subjects, mode: 'delete' }`");
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
out.push({ entityType: name, table: entity.table, mode, ...(subjects ? { subjects: [...subjects] } : {}), fields });
|
|
367
|
+
}
|
|
368
|
+
if (out.length === 0)
|
|
369
|
+
return undefined;
|
|
370
|
+
const tables = [...new Set(Object.values(entities).map((e) => e.table))].sort();
|
|
371
|
+
return subjectErasureDeclaration.parse({ tables, entities: out });
|
|
372
|
+
}
|
|
233
373
|
export function manifestEntities(entities, refs) {
|
|
374
|
+
// Absent rather than `[]` when nothing declares one, so a manifest that has no archivable
|
|
375
|
+
// entity is byte-for-byte what it was before #119.
|
|
376
|
+
const entityStates = entityStatesOf(entities);
|
|
377
|
+
// #2068: absent when nothing is erasable, for the same reason.
|
|
378
|
+
const erasure = subjectErasureOf(entities);
|
|
234
379
|
return {
|
|
235
380
|
attachmentTargets: (refs.attachmentTargets ?? []),
|
|
236
381
|
// `[]` when undeclared, like `attachmentTargets` — and it means the same
|
|
@@ -242,6 +387,8 @@ export function manifestEntities(entities, refs) {
|
|
|
242
387
|
// Local edges are derived from the entities' own `parents`; edges involving
|
|
243
388
|
// a composed engine's entity are declared, and both sides are checked.
|
|
244
389
|
entityRelations: [...entityRelationsOf(entities), ...(refs.relations ?? [])],
|
|
390
|
+
...(entityStates.length ? { entityStates } : {}),
|
|
391
|
+
...(erasure ? { erasure } : {}),
|
|
245
392
|
ui: { entityViews: refs.entityViews },
|
|
246
393
|
};
|
|
247
394
|
}
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/operations.d.ts
CHANGED
|
@@ -238,6 +238,18 @@ type PermissionRefCheck<O, PermKey extends string> = {
|
|
|
238
238
|
readonly idFrom?: never;
|
|
239
239
|
readonly resolved?: never;
|
|
240
240
|
};
|
|
241
|
+
/**
|
|
242
|
+
* What `trashed` may say on this operation: `'admits' | 'purges'` where the leading check is
|
|
243
|
+
* `{ entity: E, idFrom }` and `E` declares `trash`, and nothing anywhere else.
|
|
244
|
+
*/
|
|
245
|
+
type TrashedShape<O, Entities> = O extends {
|
|
246
|
+
permission: {
|
|
247
|
+
entity: infer E;
|
|
248
|
+
idFrom: infer F;
|
|
249
|
+
};
|
|
250
|
+
} ? E extends keyof Entities ? Entities[E] extends {
|
|
251
|
+
trash: object;
|
|
252
|
+
} ? 'admits' | (Exclude<InputKeys<O>, F> extends never ? 'purges' : never) : never : never : never;
|
|
241
253
|
type OpAuthority<O, Entities, Engines, PermKey extends string> = O extends {
|
|
242
254
|
narrows: unknown;
|
|
243
255
|
} ? {
|
|
@@ -615,6 +627,26 @@ type OperationShape<O, Entities, Engines, PermKey extends string> = {
|
|
|
615
627
|
* node-level: state the exception, never the rule.
|
|
616
628
|
*/
|
|
617
629
|
readonly idempotency?: false;
|
|
630
|
+
/**
|
|
631
|
+
* This operation reaches an entity IN THE TRASH (#119). Absent — the default, and the right
|
|
632
|
+
* answer for nearly every operation — the HOST refuses it on a trashed entity before the
|
|
633
|
+
* guards and the handler run: `not_found` to a caller who holds the operation's key on the
|
|
634
|
+
* entity, and the same `forbidden` as on an active one to a caller who does not. So a binned
|
|
635
|
+
* entity is gone from everyone's point of view without each handler remembering to ask.
|
|
636
|
+
*
|
|
637
|
+
* - `'admits'` — the operation works on a trashed entity too: the restore, a read of the bin.
|
|
638
|
+
* - `'purges'` — the operation is the entity's PERMANENT delete. It admits a trashed entity,
|
|
639
|
+
* and it is the one a declared `trash.purgeAfterDays` horizon runs (`purgeSchedulesOf`).
|
|
640
|
+
* One per entity, and its input is the id and NOTHING else — not even an optional field, so a
|
|
641
|
+
* purge can only ever reach the entity it was invoked for.
|
|
642
|
+
*
|
|
643
|
+
* Only legal where the host can see the entity: a leading `permission: { entity, idFrom }`
|
|
644
|
+
* naming an entity that declares `trash`. Anywhere else it is a compile error, because there
|
|
645
|
+
* would be nothing for it to opt out of. An operation that narrows `resolved`, by `refFrom`
|
|
646
|
+
* or through `narrows` is not refused by the host at all, and keeps its own check
|
|
647
|
+
* (`trashRefusalGapsOf` names them).
|
|
648
|
+
*/
|
|
649
|
+
readonly trashed?: TrashedShape<O, Entities>;
|
|
618
650
|
readonly emits?: {
|
|
619
651
|
/**
|
|
620
652
|
* The entity the event is about — one of THIS module's entities, or one of a
|
|
@@ -706,6 +738,76 @@ export declare function operationConcurrencyOf(operations: Readonly<Record<strin
|
|
|
706
738
|
entity: string;
|
|
707
739
|
idFrom: string;
|
|
708
740
|
}>;
|
|
741
|
+
/**
|
|
742
|
+
* The entity an operation addresses by id, as the host reads it (#119).
|
|
743
|
+
*
|
|
744
|
+
* `key` is the operation's DECLARED leading check, which the host evaluates itself before it
|
|
745
|
+
* refuses a trashed entity — so a caller without the key meets the same `forbidden` there that
|
|
746
|
+
* the handler would have given on an active one, and learns nothing about the bin.
|
|
747
|
+
*/
|
|
748
|
+
export interface OperationTarget {
|
|
749
|
+
readonly entity: string;
|
|
750
|
+
readonly idFrom: string;
|
|
751
|
+
readonly key: string;
|
|
752
|
+
readonly trashed?: 'admits' | 'purges';
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* name → the entity each operation addresses by id, for the host (#119).
|
|
756
|
+
*
|
|
757
|
+
* Every operation whose leading check is `{ entity, idFrom }`, whether or not its entity
|
|
758
|
+
* declares `trash` — the host keeps the ones whose entity does. Handed over beside
|
|
759
|
+
* `operationInputs`, and required by the host from any module with a trashable entity, so a
|
|
760
|
+
* module cannot leave its binned entities reachable by forgetting the line.
|
|
761
|
+
*/
|
|
762
|
+
export declare function operationTargetsOf(operations: Readonly<Record<string, object>>): Record<string, OperationTarget>;
|
|
763
|
+
/** How often a purge horizon's schedule runs (#119). The horizon is in days; hourly is plenty. */
|
|
764
|
+
export declare const PURGE_CADENCE_MINUTES = 60;
|
|
765
|
+
/**
|
|
766
|
+
* The schedules a module's purge horizons run as (#119), derived — spread into the manifest's
|
|
767
|
+
* `schedules` beside any the module writes:
|
|
768
|
+
*
|
|
769
|
+
* ```ts
|
|
770
|
+
* schedules: purgeSchedulesOf(todoOperations, todoEntities),
|
|
771
|
+
* ```
|
|
772
|
+
*
|
|
773
|
+
* One per entity declaring `trash.purgeAfterDays`, running the operation that declares
|
|
774
|
+
* `trashed: 'purges'` for it, holding exactly that operation's key. Being a schedule is what
|
|
775
|
+
* gives the purge everything a schedule already has: the module's system principal and its
|
|
776
|
+
* seated grant (rendered in `PERMISSIONS.md`), the kill switch, the lifecycle hold, the
|
|
777
|
+
* exclusion of preview copies, and a sweeper on a pushed deploy.
|
|
778
|
+
*
|
|
779
|
+
* Refuses a horizon with no purging operation, and a purging operation whose input needs
|
|
780
|
+
* more than the id — the sweep has nothing else to pass it.
|
|
781
|
+
*/
|
|
782
|
+
export declare function purgeSchedulesOf(operations: Readonly<Record<string, object>>, entities: Readonly<Record<string, EntityDef>>): {
|
|
783
|
+
operation: string;
|
|
784
|
+
cadence: {
|
|
785
|
+
everyMinutes: number;
|
|
786
|
+
};
|
|
787
|
+
permissions: string[];
|
|
788
|
+
purge: {
|
|
789
|
+
entityType: string;
|
|
790
|
+
};
|
|
791
|
+
}[];
|
|
792
|
+
/**
|
|
793
|
+
* The operations on a trashable entity the HOST cannot refuse on a trashed one (#119), because
|
|
794
|
+
* their check names the entity but not the input field carrying its id — it is `resolved` in the
|
|
795
|
+
* handler. Each keeps its own `ctx.entityState` check. `lint:model` prints them as warnings, so
|
|
796
|
+
* the gap is seen when a vertical is built rather than found in review.
|
|
797
|
+
*
|
|
798
|
+
* What it cannot name, and K-45 states: an operation that reaches a trashable entity with no
|
|
799
|
+
* entity in its check at all — a `narrows` walk, a `refFrom` check, a node-level key.
|
|
800
|
+
*/
|
|
801
|
+
export declare function trashRefusalGapsOf(operations: Readonly<Record<string, object>>, entities: Readonly<Record<string, EntityDef>>): {
|
|
802
|
+
operation: string;
|
|
803
|
+
entity: string;
|
|
804
|
+
}[];
|
|
805
|
+
/**
|
|
806
|
+
* Whether `schema` is a zod object that REFUSES unknown keys (`z.strictObject`, `.strict()`) —
|
|
807
|
+
* what a `trashed: 'purges'` operation's input must be (#119), so that the parsed input is the id
|
|
808
|
+
* and nothing else: a passthrough object keeps an extra field, and a default one drops it silently.
|
|
809
|
+
*/
|
|
810
|
+
export declare function isStrictObjectSchema(schema: unknown): boolean;
|
|
709
811
|
/**
|
|
710
812
|
* The operations that opted OUT of request idempotency (#116).
|
|
711
813
|
*
|
|
@@ -1021,7 +1123,21 @@ export declare function manifestOperations<const Ops extends Record<string, obje
|
|
|
1021
1123
|
* operation is always present even with no `input`, because the platform hands
|
|
1022
1124
|
* it a page whether it declared one or not.
|
|
1023
1125
|
*/
|
|
1024
|
-
export declare function operationInputsOf<const Ops extends Record<string, object>>(operations: Ops): Record<string, z.ZodType
|
|
1126
|
+
export declare function operationInputsOf<const Ops extends Record<string, object>>(operations: Ops): Readonly<Record<string, z.ZodType>>;
|
|
1127
|
+
/**
|
|
1128
|
+
* What `operationInputsOf` records for each map it builds (#119): every declared operation's name
|
|
1129
|
+
* and the entity each addresses by id. Deep-frozen.
|
|
1130
|
+
*/
|
|
1131
|
+
export interface DeclaredOperationSurface {
|
|
1132
|
+
readonly operations: readonly string[];
|
|
1133
|
+
readonly targets: Readonly<Record<string, Readonly<OperationTarget>>>;
|
|
1134
|
+
}
|
|
1135
|
+
/**
|
|
1136
|
+
* The declared surface an `operationInputs` map was derived from — `undefined` for any map
|
|
1137
|
+
* `operationInputsOf` did not itself return (a hand-built one, a copy, or one built by a second
|
|
1138
|
+
* copy of this package, whose record this one cannot read).
|
|
1139
|
+
*/
|
|
1140
|
+
export declare function declaredSurfaceOf(operationInputs: object | undefined): DeclaredOperationSurface | undefined;
|
|
1025
1141
|
/**
|
|
1026
1142
|
* Where one composed-engine operation lives in THIS vertical's HTTP surface.
|
|
1027
1143
|
*
|