@substrat-run/contracts 0.120.0 → 0.122.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 (41) hide show
  1. package/dist/control-plane.d.ts +6 -0
  2. package/dist/control-plane.d.ts.map +1 -1
  3. package/dist/control-plane.js +9 -0
  4. package/dist/control-plane.js.map +1 -1
  5. package/dist/deploy.d.ts +123 -1
  6. package/dist/deploy.d.ts.map +1 -1
  7. package/dist/deploy.js +126 -1
  8. package/dist/deploy.js.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/migration-diff.d.ts +52 -0
  14. package/dist/migration-diff.d.ts.map +1 -0
  15. package/dist/migration-diff.js +48 -0
  16. package/dist/migration-diff.js.map +1 -0
  17. package/dist/model.d.ts +37 -0
  18. package/dist/model.d.ts.map +1 -1
  19. package/dist/model.js +13 -0
  20. package/dist/model.js.map +1 -1
  21. package/dist/operations.d.ts +27 -1
  22. package/dist/operations.d.ts.map +1 -1
  23. package/dist/operations.js +54 -0
  24. package/dist/operations.js.map +1 -1
  25. package/dist/permission.d.ts +27 -0
  26. package/dist/permission.d.ts.map +1 -1
  27. package/dist/permission.js +26 -0
  28. package/dist/permission.js.map +1 -1
  29. package/dist/registry-diff.d.ts +68 -0
  30. package/dist/registry-diff.d.ts.map +1 -0
  31. package/dist/registry-diff.js +104 -0
  32. package/dist/registry-diff.js.map +1 -0
  33. package/dist/registry.d.ts +11 -0
  34. package/dist/registry.d.ts.map +1 -1
  35. package/dist/registry.js +14 -0
  36. package/dist/registry.js.map +1 -1
  37. package/dist/vertical-events.d.ts +258 -0
  38. package/dist/vertical-events.d.ts.map +1 -1
  39. package/dist/vertical-events.js +212 -1
  40. package/dist/vertical-events.js.map +1 -1
  41. package/package.json +1 -1
@@ -262,4 +262,262 @@ export type ImportedEvent = Omit<ExportedEvent, 'hops'> & {
262
262
  };
263
263
  /** How many vertical boundaries a cause chain may cross before its next export is withheld. */
264
264
  export declare const EXPORT_HOP_CAP = 8;
265
+ /**
266
+ * What a replay costs, in the words a person is shown before they pull the lever. The literal
267
+ * the request must carry (`acknowledge: 'rerun-handlers'`) stands for exactly this sentence.
268
+ */
269
+ export declare const REPLAY_EFFECT = "handlers run again; anything they send or call outside this app happens again";
270
+ /** What a skip costs, in the words a person is shown before they pull the lever. */
271
+ export declare const SKIP_EFFECT = "the skipped events are never handed to this app's handlers, unless a later replay reaches back to them";
272
+ /**
273
+ * Move a consumer's watermark on one edge (#1705 PR 3): the lever behind "replay from N" and
274
+ * "skip to now".
275
+ *
276
+ * The edge is named by the PRODUCER's vertical slug. Which scope that is, is the platform's to
277
+ * resolve from its directory, in the consumer's tenant, exactly as the sweep does. A caller
278
+ * never names the producer's scope.
279
+ *
280
+ * - `replay`: re-deliver every event after `after` (`null`: the whole exported history). Each
281
+ * importing module's handler runs AGAIN for every replayed event, and what it emits is a new
282
+ * event that fans out again. "Once per (event, module)" becomes "once per (event, module) per
283
+ * replay". Hence the acknowledgement, whose literal stands for `REPLAY_EFFECT`.
284
+ * - `skip`: move the watermark forward to `through` (`'now'`: every event of an earlier millisecond
285
+ * than the skip's; one in the skip's own millisecond is delivered, never dropped), so
286
+ * what lies between is never delivered. Recoverable, since the producer's outbox keeps the
287
+ * events and a later replay reaches back to them. Still acknowledged, because nothing else
288
+ * tells the person that the app will simply not see those events.
289
+ *
290
+ * The mode is held to its direction: a replay refuses a target ahead of the watermark and a
291
+ * skip refuses one behind it, so the acknowledgement a person gave always matches what moved.
292
+ */
293
+ export declare const importCursorMove: z.ZodDiscriminatedUnion<[z.ZodObject<{
294
+ mode: z.ZodLiteral<"replay">;
295
+ from: z.ZodString;
296
+ after: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "EventId", "out">>;
297
+ acknowledge: z.ZodLiteral<"rerun-handlers">;
298
+ reason: z.ZodString;
299
+ }, z.core.$strip>, z.ZodObject<{
300
+ mode: z.ZodLiteral<"skip">;
301
+ from: z.ZodString;
302
+ through: z.ZodUnion<readonly [z.core.$ZodBranded<z.ZodString, "EventId", "out">, z.ZodLiteral<"now">]>;
303
+ acknowledge: z.ZodLiteral<"skip-events">;
304
+ reason: z.ZodString;
305
+ }, z.core.$strip>], "mode">;
306
+ export type ImportCursorMove = z.infer<typeof importCursorMove>;
307
+ /**
308
+ * The refusal a lever request without its acknowledgement gets (#1705 PR 3), or `null` when the
309
+ * acknowledgement matches the mode. Said in the words the literal stands for, so a caller that
310
+ * left it out is told what it would have agreed to, not that a string did not match.
311
+ */
312
+ export declare function importCursorAcknowledgementMissing(raw: unknown): string | null;
313
+ /**
314
+ * The far end's half of the lever (#1705 PR 3): the move, plus the producer the platform
315
+ * resolved. A CP-less deployment has no directory to resolve it from, so the control plane
316
+ * asserts it, as it asserts `ImportBatch.source`. `replayId` is the act the platform's admin
317
+ * rows already name, so the rows the far end moves aside carry the same id.
318
+ */
319
+ export declare const importCursorMoveAt: z.ZodObject<{
320
+ move: z.ZodDiscriminatedUnion<[z.ZodObject<{
321
+ mode: z.ZodLiteral<"replay">;
322
+ from: z.ZodString;
323
+ after: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "EventId", "out">>;
324
+ acknowledge: z.ZodLiteral<"rerun-handlers">;
325
+ reason: z.ZodString;
326
+ }, z.core.$strip>, z.ZodObject<{
327
+ mode: z.ZodLiteral<"skip">;
328
+ from: z.ZodString;
329
+ through: z.ZodUnion<readonly [z.core.$ZodBranded<z.ZodString, "EventId", "out">, z.ZodLiteral<"now">]>;
330
+ acknowledge: z.ZodLiteral<"skip-events">;
331
+ reason: z.ZodString;
332
+ }, z.core.$strip>], "mode">;
333
+ source: z.ZodObject<{
334
+ vertical: z.ZodString;
335
+ scopeId: z.core.$ZodBranded<z.ZodString, "ScopeId", "out">;
336
+ }, z.core.$strip>;
337
+ replayId: z.ZodString;
338
+ }, z.core.$strip>;
339
+ export type ImportCursorMoveAt = z.infer<typeof importCursorMoveAt>;
340
+ /**
341
+ * What a move did (#1705 PR 3).
342
+ *
343
+ * `replayId` names the act: the admin-log row carries it, and so does every journal row the
344
+ * replay moved into `_substrat_import_replays`. A replay does not delete the record that a
345
+ * delivery happened. It moves it aside, so the live journal can take the event again and the
346
+ * evidence of the first delivery stays. `archived` counts what moved (0 on a skip).
347
+ */
348
+ export declare const importCursorMoved: z.ZodObject<{
349
+ replayId: z.ZodString;
350
+ mode: z.ZodEnum<{
351
+ replay: "replay";
352
+ skip: "skip";
353
+ }>;
354
+ source: z.ZodObject<{
355
+ vertical: z.ZodString;
356
+ scopeId: z.core.$ZodBranded<z.ZodString, "ScopeId", "out">;
357
+ }, z.core.$strip>;
358
+ previous: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "EventId", "out">>;
359
+ cursor: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "EventId", "out">>;
360
+ archived: z.ZodObject<{
361
+ journal: z.ZodNumber;
362
+ deliveries: z.ZodNumber;
363
+ }, z.core.$strip>;
364
+ }, z.core.$strip>;
365
+ export type ImportCursorMoved = z.infer<typeof importCursorMoved>;
366
+ /**
367
+ * Where one edge stands, read live (#1705 PR 3). What a person needs is whether events are
368
+ * getting through, and if not, why.
369
+ *
370
+ * - `caught-up`: the consumer has everything the producer releases to it.
371
+ * - `behind`: events are waiting past the watermark. `lagMs` says how long the oldest has waited.
372
+ * A sweep takes them on its next pass unless something below is also true.
373
+ * - `paused`: one side refuses the other. Either the producer does not grant the consumer's
374
+ * key, or the consumer's door has the producer switched off. Nothing is lost, and the backlog
375
+ * waits in the producer's outbox.
376
+ * - `unresolved`: the platform cannot name both ends. The producer is not installed, or a
377
+ * vertical has two primary installs.
378
+ * - `unavailable`: a side could not be ASKED (a transport error, or a deployment that predates
379
+ * the routes). This is not a healthy state and must never render as one. It says nothing about
380
+ * whether events are moving.
381
+ */
382
+ export declare const edgeHealthState: z.ZodEnum<{
383
+ behind: "behind";
384
+ "caught-up": "caught-up";
385
+ paused: "paused";
386
+ unavailable: "unavailable";
387
+ unresolved: "unresolved";
388
+ }>;
389
+ export type EdgeHealthState = z.infer<typeof edgeHealthState>;
390
+ export declare const edgeHealth: z.ZodObject<{
391
+ tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
392
+ consumer: z.ZodObject<{
393
+ scopeId: z.core.$ZodBranded<z.ZodString, "ScopeId", "out">;
394
+ vertical: z.ZodString;
395
+ }, z.core.$strip>;
396
+ producer: z.ZodObject<{
397
+ vertical: z.ZodString;
398
+ scopeId: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "ScopeId", "out">>;
399
+ }, z.core.$strip>;
400
+ state: z.ZodEnum<{
401
+ behind: "behind";
402
+ "caught-up": "caught-up";
403
+ paused: "paused";
404
+ unavailable: "unavailable";
405
+ unresolved: "unresolved";
406
+ }>;
407
+ reason: z.ZodNullable<z.ZodString>;
408
+ watermark: z.ZodNullable<z.ZodObject<{
409
+ cursor: z.core.$ZodBranded<z.ZodString, "EventId", "out">;
410
+ updatedAt: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "Instant", "out">>;
411
+ }, z.core.$strip>>;
412
+ oldestPending: z.ZodNullable<z.ZodObject<{
413
+ id: z.core.$ZodBranded<z.ZodString, "EventId", "out">;
414
+ occurredAt: z.ZodString;
415
+ }, z.core.$strip>>;
416
+ lagMs: z.ZodNullable<z.ZodNumber>;
417
+ unexported: z.ZodArray<z.ZodObject<{
418
+ type: z.ZodString;
419
+ schemaVersion: z.ZodNumber;
420
+ }, z.core.$strip>>;
421
+ lastDelivered: z.ZodNullable<z.ZodObject<{
422
+ at: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
423
+ }, z.core.$strip>>;
424
+ lastProblem: z.ZodNullable<z.ZodObject<{
425
+ at: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
426
+ outcome: z.ZodEnum<{
427
+ failed: "failed";
428
+ skipped: "skipped";
429
+ }>;
430
+ error: z.ZodNullable<z.ZodString>;
431
+ }, z.core.$strip>>;
432
+ }, z.core.$strip>;
433
+ export type EdgeHealth = z.infer<typeof edgeHealth>;
434
+ /**
435
+ * Every edge in one tenant (#1705 PR 3), read live. `history` is the sweep-run read that
436
+ * supplies `lastDelivered` / `lastProblem`. If it fails, the live states still stand, and the
437
+ * view says the history is missing rather than showing edges with no past.
438
+ */
439
+ export declare const edgeHealthReport: z.ZodObject<{
440
+ tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
441
+ checkedAt: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
442
+ edges: z.ZodArray<z.ZodObject<{
443
+ tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
444
+ consumer: z.ZodObject<{
445
+ scopeId: z.core.$ZodBranded<z.ZodString, "ScopeId", "out">;
446
+ vertical: z.ZodString;
447
+ }, z.core.$strip>;
448
+ producer: z.ZodObject<{
449
+ vertical: z.ZodString;
450
+ scopeId: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "ScopeId", "out">>;
451
+ }, z.core.$strip>;
452
+ state: z.ZodEnum<{
453
+ behind: "behind";
454
+ "caught-up": "caught-up";
455
+ paused: "paused";
456
+ unavailable: "unavailable";
457
+ unresolved: "unresolved";
458
+ }>;
459
+ reason: z.ZodNullable<z.ZodString>;
460
+ watermark: z.ZodNullable<z.ZodObject<{
461
+ cursor: z.core.$ZodBranded<z.ZodString, "EventId", "out">;
462
+ updatedAt: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "Instant", "out">>;
463
+ }, z.core.$strip>>;
464
+ oldestPending: z.ZodNullable<z.ZodObject<{
465
+ id: z.core.$ZodBranded<z.ZodString, "EventId", "out">;
466
+ occurredAt: z.ZodString;
467
+ }, z.core.$strip>>;
468
+ lagMs: z.ZodNullable<z.ZodNumber>;
469
+ unexported: z.ZodArray<z.ZodObject<{
470
+ type: z.ZodString;
471
+ schemaVersion: z.ZodNumber;
472
+ }, z.core.$strip>>;
473
+ lastDelivered: z.ZodNullable<z.ZodObject<{
474
+ at: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
475
+ }, z.core.$strip>>;
476
+ lastProblem: z.ZodNullable<z.ZodObject<{
477
+ at: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
478
+ outcome: z.ZodEnum<{
479
+ failed: "failed";
480
+ skipped: "skipped";
481
+ }>;
482
+ error: z.ZodNullable<z.ZodString>;
483
+ }, z.core.$strip>>;
484
+ }, z.core.$strip>>;
485
+ unavailable: z.ZodNullable<z.ZodString>;
486
+ history: z.ZodObject<{
487
+ available: z.ZodBoolean;
488
+ reason: z.ZodNullable<z.ZodString>;
489
+ }, z.core.$strip>;
490
+ }, z.core.$strip>;
491
+ export type EdgeHealthReport = z.infer<typeof edgeHealthReport>;
492
+ /**
493
+ * How each state reads on a badge. `unavailable` is a side nobody could ask. It says nothing
494
+ * about whether events move, so it is never `success`, and only a caught-up edge is green.
495
+ */
496
+ export declare const EDGE_STATE: Record<EdgeHealthState, {
497
+ tone: 'success' | 'warning' | 'danger';
498
+ label: string;
499
+ }>;
500
+ /**
501
+ * The badge one edge wears, which is its state's unless the consumer imports types its producer
502
+ * does not export (`edge.unexported`). Those never arrive, so a caught-up edge carrying them is
503
+ * not green: it is caught up on what is exported, and waiting forever on the rest.
504
+ */
505
+ export declare function edgeBadge(edge: Pick<EdgeHealth, 'state' | 'unexported'>): {
506
+ tone: 'success' | 'warning' | 'danger';
507
+ label: string;
508
+ };
509
+ /** The sentence naming what an edge's producer does not export, or null when it exports all of it. */
510
+ export declare function unexportedNote(edge: Pick<EdgeHealth, 'unexported' | 'producer'>): string | null;
511
+ /** How long the oldest waiting event has waited, in a person's words. */
512
+ export declare function lagText(ms: number | null): string | null;
513
+ /**
514
+ * Whether a view of `scopeId` offers the lever on an edge: only on an edge INTO it (the watermark
515
+ * is the consumer's), and only where both ends resolved and could be asked.
516
+ */
517
+ export declare function leverOffered(edge: EdgeHealth, scopeId: string): boolean;
518
+ export type LeverMode = ImportCursorMove['mode'];
519
+ /** What a lever does, in the words the platform refuses a missing acknowledgement in. */
520
+ export declare const LEVER_EFFECT: Record<LeverMode, string>;
521
+ /** The request a dialog sends once the person has agreed: the whole history, or up to now. */
522
+ export declare function leverRequest(mode: LeverMode, from: string, reason: string): ImportCursorMove;
265
523
  //# sourceMappingURL=vertical-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vertical-events.d.ts","sourceRoot":"","sources":["../src/vertical-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAmC,OAAO,EAAgB,MAAM,UAAU,CAAC;AAelF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;iBAQxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc;;;;;EAAuD,CAAC;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;iBAOxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,WAAW;;;iBAGtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;iBAM1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,gFAAgF;AAChF,eAAO,MAAM,YAAY;;;;;iBAKvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;iBAGtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;iBASvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG;IACxD,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAA;KAAE,CAAC;CAChE,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,cAAc,IAAI,CAAC"}
1
+ {"version":3,"file":"vertical-events.d.ts","sourceRoot":"","sources":["../src/vertical-events.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { eventId, instant, permissionKey, scopeId, verticalSlug } from './ids.js';
2
+ import { eventId, instant, permissionKey, scopeId, tenantId, verticalSlug } from './ids.js';
3
3
  import { entityRef, eventType } from './events.js';
4
4
  // Cross-vertical event delivery (#1705): the three messages the platform carries between a
5
5
  // producer vertical's scope and a consumer vertical's scope in the same tenant.
@@ -164,4 +164,215 @@ export const importResult = z.object({
164
164
  });
165
165
  /** How many vertical boundaries a cause chain may cross before its next export is withheld. */
166
166
  export const EXPORT_HOP_CAP = 8;
167
+ // -- the replay lever (#1705 PR 3) -----------------------------------------------------------
168
+ /**
169
+ * What a replay costs, in the words a person is shown before they pull the lever. The literal
170
+ * the request must carry (`acknowledge: 'rerun-handlers'`) stands for exactly this sentence.
171
+ */
172
+ export const REPLAY_EFFECT = 'handlers run again; anything they send or call outside this app happens again';
173
+ /** What a skip costs, in the words a person is shown before they pull the lever. */
174
+ export const SKIP_EFFECT = "the skipped events are never handed to this app's handlers, unless a later replay reaches back to them";
175
+ /**
176
+ * Move a consumer's watermark on one edge (#1705 PR 3): the lever behind "replay from N" and
177
+ * "skip to now".
178
+ *
179
+ * The edge is named by the PRODUCER's vertical slug. Which scope that is, is the platform's to
180
+ * resolve from its directory, in the consumer's tenant, exactly as the sweep does. A caller
181
+ * never names the producer's scope.
182
+ *
183
+ * - `replay`: re-deliver every event after `after` (`null`: the whole exported history). Each
184
+ * importing module's handler runs AGAIN for every replayed event, and what it emits is a new
185
+ * event that fans out again. "Once per (event, module)" becomes "once per (event, module) per
186
+ * replay". Hence the acknowledgement, whose literal stands for `REPLAY_EFFECT`.
187
+ * - `skip`: move the watermark forward to `through` (`'now'`: every event of an earlier millisecond
188
+ * than the skip's; one in the skip's own millisecond is delivered, never dropped), so
189
+ * what lies between is never delivered. Recoverable, since the producer's outbox keeps the
190
+ * events and a later replay reaches back to them. Still acknowledged, because nothing else
191
+ * tells the person that the app will simply not see those events.
192
+ *
193
+ * The mode is held to its direction: a replay refuses a target ahead of the watermark and a
194
+ * skip refuses one behind it, so the acknowledgement a person gave always matches what moved.
195
+ */
196
+ export const importCursorMove = z.discriminatedUnion('mode', [
197
+ z.object({
198
+ mode: z.literal('replay'),
199
+ from: verticalSlug,
200
+ after: eventId.nullable(),
201
+ acknowledge: z.literal('rerun-handlers'),
202
+ reason: z.string().trim().min(1).max(500),
203
+ }),
204
+ z.object({
205
+ mode: z.literal('skip'),
206
+ from: verticalSlug,
207
+ through: z.union([eventId, z.literal('now')]),
208
+ acknowledge: z.literal('skip-events'),
209
+ reason: z.string().trim().min(1).max(500),
210
+ }),
211
+ ]);
212
+ /**
213
+ * The refusal a lever request without its acknowledgement gets (#1705 PR 3), or `null` when the
214
+ * acknowledgement matches the mode. Said in the words the literal stands for, so a caller that
215
+ * left it out is told what it would have agreed to, not that a string did not match.
216
+ */
217
+ export function importCursorAcknowledgementMissing(raw) {
218
+ if (raw === null || typeof raw !== 'object')
219
+ return null;
220
+ const r = raw;
221
+ if (r.mode === 'replay' && r.acknowledge !== 'rerun-handlers') {
222
+ return `a replay needs acknowledge: 'rerun-handlers' — ${REPLAY_EFFECT}`;
223
+ }
224
+ if (r.mode === 'skip' && r.acknowledge !== 'skip-events') {
225
+ return `a skip needs acknowledge: 'skip-events' — ${SKIP_EFFECT}`;
226
+ }
227
+ return null;
228
+ }
229
+ /**
230
+ * The far end's half of the lever (#1705 PR 3): the move, plus the producer the platform
231
+ * resolved. A CP-less deployment has no directory to resolve it from, so the control plane
232
+ * asserts it, as it asserts `ImportBatch.source`. `replayId` is the act the platform's admin
233
+ * rows already name, so the rows the far end moves aside carry the same id.
234
+ */
235
+ export const importCursorMoveAt = z.object({
236
+ move: importCursorMove,
237
+ source: z.object({ vertical: verticalSlug, scopeId }),
238
+ replayId: z.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/),
239
+ });
240
+ /**
241
+ * What a move did (#1705 PR 3).
242
+ *
243
+ * `replayId` names the act: the admin-log row carries it, and so does every journal row the
244
+ * replay moved into `_substrat_import_replays`. A replay does not delete the record that a
245
+ * delivery happened. It moves it aside, so the live journal can take the event again and the
246
+ * evidence of the first delivery stays. `archived` counts what moved (0 on a skip).
247
+ */
248
+ export const importCursorMoved = z.object({
249
+ replayId: z.string().min(1),
250
+ mode: z.enum(['replay', 'skip']),
251
+ source: z.object({ vertical: verticalSlug, scopeId }),
252
+ previous: eventId.nullable(),
253
+ cursor: eventId.nullable(),
254
+ archived: z.object({
255
+ journal: z.number().int().nonnegative(),
256
+ deliveries: z.number().int().nonnegative(),
257
+ }),
258
+ });
259
+ // -- edge health (#1705 PR 3) ----------------------------------------------------------------
260
+ /**
261
+ * Where one edge stands, read live (#1705 PR 3). What a person needs is whether events are
262
+ * getting through, and if not, why.
263
+ *
264
+ * - `caught-up`: the consumer has everything the producer releases to it.
265
+ * - `behind`: events are waiting past the watermark. `lagMs` says how long the oldest has waited.
266
+ * A sweep takes them on its next pass unless something below is also true.
267
+ * - `paused`: one side refuses the other. Either the producer does not grant the consumer's
268
+ * key, or the consumer's door has the producer switched off. Nothing is lost, and the backlog
269
+ * waits in the producer's outbox.
270
+ * - `unresolved`: the platform cannot name both ends. The producer is not installed, or a
271
+ * vertical has two primary installs.
272
+ * - `unavailable`: a side could not be ASKED (a transport error, or a deployment that predates
273
+ * the routes). This is not a healthy state and must never render as one. It says nothing about
274
+ * whether events are moving.
275
+ */
276
+ export const edgeHealthState = z.enum(['caught-up', 'behind', 'paused', 'unresolved', 'unavailable']);
277
+ export const edgeHealth = z.object({
278
+ tenantId,
279
+ consumer: z.object({ scopeId, vertical: z.string() }),
280
+ /** `'*'`, with no scope: the consumer could not be asked, so no producer was named. */
281
+ producer: z.object({ vertical: z.string(), scopeId: scopeId.nullable() }),
282
+ state: edgeHealthState,
283
+ /** The sentence a person reads. Set on every state but `caught-up`. */
284
+ reason: z.string().nullable(),
285
+ /** The consumer's watermark on this edge. `null`: it has taken nothing yet. */
286
+ watermark: z.object({ cursor: eventId, updatedAt: instant.nullable() }).nullable(),
287
+ /** The oldest event waiting past the watermark (released or withheld). */
288
+ oldestPending: z.object({ id: eventId, occurredAt: z.string() }).nullable(),
289
+ /** How long the oldest pending event has waited, in ms. `null` when nothing waits, or it is unknown. */
290
+ lagMs: z.number().int().nonnegative().nullable(),
291
+ /** Types the consumer imports that the producer does not export. Reported, not paused. */
292
+ unexported: z.array(wantedEvent),
293
+ /** The latest sweep pass that moved this edge. */
294
+ lastDelivered: z.object({ at: instant }).nullable(),
295
+ /** The latest sweep pass on this edge that did NOT deliver, if it is newer than the last one that did. */
296
+ lastProblem: z
297
+ .object({ at: instant, outcome: z.enum(['failed', 'skipped']), error: z.string().nullable() })
298
+ .nullable(),
299
+ });
300
+ /**
301
+ * Every edge in one tenant (#1705 PR 3), read live. `history` is the sweep-run read that
302
+ * supplies `lastDelivered` / `lastProblem`. If it fails, the live states still stand, and the
303
+ * view says the history is missing rather than showing edges with no past.
304
+ */
305
+ export const edgeHealthReport = z.object({
306
+ tenantId,
307
+ checkedAt: instant,
308
+ edges: z.array(edgeHealth),
309
+ /** Set when the tenant's importing apps could not be listed at all: no edge can be shown. */
310
+ unavailable: z.string().nullable(),
311
+ history: z.object({ available: z.boolean(), reason: z.string().nullable() }),
312
+ });
313
+ // -- what the console and the dashboard say about an edge (#1705 PR 3) ------------------------
314
+ // One copy, because a tenant and an operator looking at the same edge must be told the same
315
+ // thing: the same label, the same tone, the same lag, and the same request behind the lever.
316
+ /**
317
+ * How each state reads on a badge. `unavailable` is a side nobody could ask. It says nothing
318
+ * about whether events move, so it is never `success`, and only a caught-up edge is green.
319
+ */
320
+ export const EDGE_STATE = {
321
+ 'caught-up': { tone: 'success', label: 'Caught up' },
322
+ behind: { tone: 'warning', label: 'Behind' },
323
+ paused: { tone: 'danger', label: 'Paused' },
324
+ unresolved: { tone: 'warning', label: 'Unresolved' },
325
+ unavailable: { tone: 'danger', label: 'Unavailable' },
326
+ };
327
+ /**
328
+ * The badge one edge wears, which is its state's unless the consumer imports types its producer
329
+ * does not export (`edge.unexported`). Those never arrive, so a caught-up edge carrying them is
330
+ * not green: it is caught up on what is exported, and waiting forever on the rest.
331
+ */
332
+ export function edgeBadge(edge) {
333
+ const base = EDGE_STATE[edge.state];
334
+ if (edge.unexported.length === 0 || base.tone !== 'success')
335
+ return base;
336
+ return { tone: 'warning', label: `${base.label} · ${edge.unexported.length} type(s) never arrive` };
337
+ }
338
+ /** The sentence naming what an edge's producer does not export, or null when it exports all of it. */
339
+ export function unexportedNote(edge) {
340
+ if (edge.unexported.length === 0)
341
+ return null;
342
+ const types = edge.unexported.map((w) => `${w.type} v${w.schemaVersion}`).join(', ');
343
+ return `'${edge.producer.vertical}' does not export ${types} — this app imports it, and it never arrives until the producer exports it`;
344
+ }
345
+ /** How long the oldest waiting event has waited, in a person's words. */
346
+ export function lagText(ms) {
347
+ if (ms === null)
348
+ return null;
349
+ const s = Math.floor(ms / 1000);
350
+ if (s < 60)
351
+ return `${s}s`;
352
+ const m = Math.floor(s / 60);
353
+ if (m < 60)
354
+ return `${m} min`;
355
+ const h = Math.floor(m / 60);
356
+ if (h < 48)
357
+ return `${h} h`;
358
+ return `${Math.floor(h / 24)} days`;
359
+ }
360
+ /**
361
+ * Whether a view of `scopeId` offers the lever on an edge: only on an edge INTO it (the watermark
362
+ * is the consumer's), and only where both ends resolved and could be asked.
363
+ */
364
+ export function leverOffered(edge, scopeId) {
365
+ return (edge.consumer.scopeId === scopeId &&
366
+ edge.producer.scopeId !== null &&
367
+ edge.state !== 'unresolved' &&
368
+ edge.state !== 'unavailable');
369
+ }
370
+ /** What a lever does, in the words the platform refuses a missing acknowledgement in. */
371
+ export const LEVER_EFFECT = { replay: REPLAY_EFFECT, skip: SKIP_EFFECT };
372
+ /** The request a dialog sends once the person has agreed: the whole history, or up to now. */
373
+ export function leverRequest(mode, from, reason) {
374
+ return mode === 'replay'
375
+ ? { mode: 'replay', from, after: null, acknowledge: 'rerun-handlers', reason: reason.trim() }
376
+ : { mode: 'skip', from, through: 'now', acknowledge: 'skip-events', reason: reason.trim() };
377
+ }
167
378
  //# sourceMappingURL=vertical-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vertical-events.js","sourceRoot":"","sources":["../src/vertical-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertical-events.js","sourceRoot":"","sources":["../src/vertical-events.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/contracts",
3
- "version": "0.120.0",
3
+ "version": "0.122.0",
4
4
  "description": "Substrat kernel contract schemas — Zod is the source of truth (master plan D-22); OAS/JSON Schema are emitted artifacts",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {