@substrat-run/contracts 0.51.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control-plane.d.ts +134 -0
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +107 -2
- package/dist/control-plane.js.map +1 -1
- package/package.json +1 -1
package/dist/control-plane.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare const adminAction: z.ZodEnum<{
|
|
|
13
13
|
defineRole: "defineRole";
|
|
14
14
|
deleteSnapshot: "deleteSnapshot";
|
|
15
15
|
deleteVertical: "deleteVertical";
|
|
16
|
+
drainAccessLog: "drainAccessLog";
|
|
16
17
|
grant: "grant";
|
|
17
18
|
grantEntitlement: "grantEntitlement";
|
|
18
19
|
grantToConnection: "grantToConnection";
|
|
@@ -263,6 +264,7 @@ export declare const adminLogEntry: z.ZodObject<{
|
|
|
263
264
|
defineRole: "defineRole";
|
|
264
265
|
deleteSnapshot: "deleteSnapshot";
|
|
265
266
|
deleteVertical: "deleteVertical";
|
|
267
|
+
drainAccessLog: "drainAccessLog";
|
|
266
268
|
grant: "grant";
|
|
267
269
|
grantEntitlement: "grantEntitlement";
|
|
268
270
|
grantToConnection: "grantToConnection";
|
|
@@ -529,6 +531,7 @@ export declare const tenantExport: z.ZodObject<{
|
|
|
529
531
|
defineRole: "defineRole";
|
|
530
532
|
deleteSnapshot: "deleteSnapshot";
|
|
531
533
|
deleteVertical: "deleteVertical";
|
|
534
|
+
drainAccessLog: "drainAccessLog";
|
|
532
535
|
grant: "grant";
|
|
533
536
|
grantEntitlement: "grantEntitlement";
|
|
534
537
|
grantToConnection: "grantToConnection";
|
|
@@ -594,4 +597,135 @@ export declare const tenantExport: z.ZodObject<{
|
|
|
594
597
|
}, z.core.$strip>>;
|
|
595
598
|
}, z.core.$strip>;
|
|
596
599
|
export type TenantExport = z.infer<typeof tenantExport>;
|
|
600
|
+
/**
|
|
601
|
+
* The meters (#38; control-plane.md §5) — and the shape is as narrow as it is on
|
|
602
|
+
* purpose, because only two of §9's four are computable at all.
|
|
603
|
+
*
|
|
604
|
+
* **Meter 1** (base fee: per tenant + per active scope) is a `COUNT` over the directory.
|
|
605
|
+
* **Meter 2** (per-engine licensing) is a `GROUP BY` over the entitlement store, whose
|
|
606
|
+
* flags *are* the SKUs. Both are free, both come from the directory database, and
|
|
607
|
+
* neither needs a data pipeline. **Meters 3 and 4 are absent by construction**, not by
|
|
608
|
+
* omission: the outbox is per-scope-database with no cross-tenant fan-in, reads emit
|
|
609
|
+
* nothing, and the cross-tenant order flow does not exist. A field here would be a
|
|
610
|
+
* number we cannot compute — "a meter you cannot compute is not a pricing decision, it
|
|
611
|
+
* is a data-pipeline project" (§5).
|
|
612
|
+
*
|
|
613
|
+
* Two rules decide every number below, and they are the reason this is a server-side
|
|
614
|
+
* aggregate rather than arithmetic over `listScopes`:
|
|
615
|
+
*
|
|
616
|
+
* 1. **Billable means EFFECTIVE, not stored.** Suspending a tenant does not touch its
|
|
617
|
+
* scopes' rows, but `getScope` fails closed for all of them (§4.1) — so a scope
|
|
618
|
+
* stored `active` under a non-active tenant is serving nobody and is counted
|
|
619
|
+
* suspended here, exactly as the console's `effectiveStatus` counts it. A meter that
|
|
620
|
+
* read stored status would bill a tenant-wide outage.
|
|
621
|
+
* 2. **Expiry is evaluated at `readAt`.** An expired grant is gate-dead (#33), so it is
|
|
622
|
+
* not billable — but it stays visible as `expired` rather than vanishing, because a
|
|
623
|
+
* lapsed trial is a renewal, not an absence.
|
|
624
|
+
*/
|
|
625
|
+
export declare const meterScopeCounts: z.ZodObject<{
|
|
626
|
+
total: z.ZodNumber;
|
|
627
|
+
active: z.ZodNumber;
|
|
628
|
+
suspended: z.ZodNumber;
|
|
629
|
+
provisioning: z.ZodNumber;
|
|
630
|
+
archived: z.ZodNumber;
|
|
631
|
+
reaped: z.ZodNumber;
|
|
632
|
+
}, z.core.$strip>;
|
|
633
|
+
export type MeterScopeCounts = z.infer<typeof meterScopeCounts>;
|
|
634
|
+
/** Meter 1, per tenant: the scopes under it, and how many SKUs it holds. */
|
|
635
|
+
export declare const tenantMeterRow: z.ZodObject<{
|
|
636
|
+
tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
|
|
637
|
+
slug: z.ZodString;
|
|
638
|
+
status: z.ZodEnum<{
|
|
639
|
+
active: "active";
|
|
640
|
+
deleting: "deleting";
|
|
641
|
+
reaped: "reaped";
|
|
642
|
+
suspended: "suspended";
|
|
643
|
+
}>;
|
|
644
|
+
billable: z.ZodBoolean;
|
|
645
|
+
scopes: z.ZodObject<{
|
|
646
|
+
total: z.ZodNumber;
|
|
647
|
+
active: z.ZodNumber;
|
|
648
|
+
suspended: z.ZodNumber;
|
|
649
|
+
provisioning: z.ZodNumber;
|
|
650
|
+
archived: z.ZodNumber;
|
|
651
|
+
reaped: z.ZodNumber;
|
|
652
|
+
}, z.core.$strip>;
|
|
653
|
+
entitlements: z.ZodObject<{
|
|
654
|
+
live: z.ZodNumber;
|
|
655
|
+
expired: z.ZodNumber;
|
|
656
|
+
}, z.core.$strip>;
|
|
657
|
+
}, z.core.$strip>;
|
|
658
|
+
export type TenantMeterRow = z.infer<typeof tenantMeterRow>;
|
|
659
|
+
/**
|
|
660
|
+
* Meter 2, one row per (SKU, tier): entitlement flags are the SKUs (§9), and `plan` is
|
|
661
|
+
* what makes a tier data instead of operator convention (#33). Grouped rather than
|
|
662
|
+
* summed so "how many tenants are on `pro` of this engine" is a read, not a re-derivation.
|
|
663
|
+
*
|
|
664
|
+
* Counts BILLABLE holders only — an active tenant with a live grant. A grant held by a
|
|
665
|
+
* suspended tenant is not revenue, and counting it here would make the meter disagree
|
|
666
|
+
* with the base fee beside it.
|
|
667
|
+
*/
|
|
668
|
+
export declare const entitlementMeterRow: z.ZodObject<{
|
|
669
|
+
entitlementKey: z.ZodString;
|
|
670
|
+
plan: z.ZodNullable<z.ZodString>;
|
|
671
|
+
tenants: z.ZodNumber;
|
|
672
|
+
expired: z.ZodNumber;
|
|
673
|
+
}, z.core.$strip>;
|
|
674
|
+
export type EntitlementMeterRow = z.infer<typeof entitlementMeterRow>;
|
|
675
|
+
/**
|
|
676
|
+
* One reading of meters 1 and 2 — fleet-wide, or narrowed to a single tenant.
|
|
677
|
+
*
|
|
678
|
+
* A reading is a fact about an INSTANT, not a running total: nothing is stored, nothing
|
|
679
|
+
* accumulates, and re-reading recomputes. That is deliberate — a stored meter is a
|
|
680
|
+
* billing system's ledger, and D-30 says meter, do not bill. `readAt` is what makes the
|
|
681
|
+
* number quotable ("42 active scopes at 09:00") without pretending it is invoiced.
|
|
682
|
+
*/
|
|
683
|
+
export declare const meterReading: z.ZodObject<{
|
|
684
|
+
readAt: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
|
|
685
|
+
tenants: z.ZodObject<{
|
|
686
|
+
total: z.ZodNumber;
|
|
687
|
+
active: z.ZodNumber;
|
|
688
|
+
suspended: z.ZodNumber;
|
|
689
|
+
deleting: z.ZodNumber;
|
|
690
|
+
reaped: z.ZodNumber;
|
|
691
|
+
}, z.core.$strip>;
|
|
692
|
+
scopes: z.ZodObject<{
|
|
693
|
+
total: z.ZodNumber;
|
|
694
|
+
active: z.ZodNumber;
|
|
695
|
+
suspended: z.ZodNumber;
|
|
696
|
+
provisioning: z.ZodNumber;
|
|
697
|
+
archived: z.ZodNumber;
|
|
698
|
+
reaped: z.ZodNumber;
|
|
699
|
+
}, z.core.$strip>;
|
|
700
|
+
entitlements: z.ZodArray<z.ZodObject<{
|
|
701
|
+
entitlementKey: z.ZodString;
|
|
702
|
+
plan: z.ZodNullable<z.ZodString>;
|
|
703
|
+
tenants: z.ZodNumber;
|
|
704
|
+
expired: z.ZodNumber;
|
|
705
|
+
}, z.core.$strip>>;
|
|
706
|
+
perTenant: z.ZodArray<z.ZodObject<{
|
|
707
|
+
tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
|
|
708
|
+
slug: z.ZodString;
|
|
709
|
+
status: z.ZodEnum<{
|
|
710
|
+
active: "active";
|
|
711
|
+
deleting: "deleting";
|
|
712
|
+
reaped: "reaped";
|
|
713
|
+
suspended: "suspended";
|
|
714
|
+
}>;
|
|
715
|
+
billable: z.ZodBoolean;
|
|
716
|
+
scopes: z.ZodObject<{
|
|
717
|
+
total: z.ZodNumber;
|
|
718
|
+
active: z.ZodNumber;
|
|
719
|
+
suspended: z.ZodNumber;
|
|
720
|
+
provisioning: z.ZodNumber;
|
|
721
|
+
archived: z.ZodNumber;
|
|
722
|
+
reaped: z.ZodNumber;
|
|
723
|
+
}, z.core.$strip>;
|
|
724
|
+
entitlements: z.ZodObject<{
|
|
725
|
+
live: z.ZodNumber;
|
|
726
|
+
expired: z.ZodNumber;
|
|
727
|
+
}, z.core.$strip>;
|
|
728
|
+
}, z.core.$strip>>;
|
|
729
|
+
}, z.core.$strip>;
|
|
730
|
+
export type MeterReading = z.infer<typeof meterReading>;
|
|
597
731
|
//# sourceMappingURL=control-plane.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"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"}
|
package/dist/control-plane.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { eventId, instant, orgId, platformActorId, principalId, scopeId, tenantId, } from './ids.js';
|
|
2
|
+
import { eventId, instant, orgId, platformActorId, principalId, scopeId, slug, tenantId, } from './ids.js';
|
|
3
3
|
// #36's tenant export speaks the platform's own vocabulary rather than restating it, so
|
|
4
4
|
// it composes the schemas that already define these shapes. One-way imports only —
|
|
5
5
|
// none of these modules imports this one, so no cycle.
|
|
6
|
-
import { org, scope, tenant } from './tenancy.js';
|
|
6
|
+
import { org, scope, tenant, tenantStatus } from './tenancy.js';
|
|
7
7
|
import { tenantRole } from './permission.js';
|
|
8
8
|
import { hostnameBinding } from './routing.js';
|
|
9
9
|
import { connection } from './connections.js';
|
|
@@ -45,6 +45,11 @@ export const adminAction = z.enum([
|
|
|
45
45
|
'setHostnameStatus', // #31 step 2 — where the two human checkpoints fire
|
|
46
46
|
'setHostnameIssuance', // #305 §4.7 — a Cloudflare-for-SaaS issuance step (create/poll) result
|
|
47
47
|
'unbindHostname', // the inverse of bindHostname — a hard delete; the history is this log
|
|
48
|
+
// K-24 — shipping access rows to Tier 2 is a data EGRESS, so it is evidence in its own
|
|
49
|
+
// right: the admin log is where "these rows left the platform, at this time, to this
|
|
50
|
+
// object" is recorded. It is also what licenses the prune below — nothing may be deleted
|
|
51
|
+
// that this action did not first place somewhere durable.
|
|
52
|
+
'drainAccessLog',
|
|
48
53
|
'pruneAccessLog', // K-24 — deleting drained access rows is itself a mutation // K-23 — a provider declares its topology before it may link
|
|
49
54
|
'createTenant', // §4.1
|
|
50
55
|
// §4.1/§4.8 — before/after carry the transitioned status. Starting the delete grace
|
|
@@ -393,4 +398,104 @@ export const tenantExport = z.object({
|
|
|
393
398
|
/** Each scope's database, as the same `scopeDump` a fork or a pull produces. */
|
|
394
399
|
data: z.array(scopeDump),
|
|
395
400
|
});
|
|
401
|
+
/**
|
|
402
|
+
* The meters (#38; control-plane.md §5) — and the shape is as narrow as it is on
|
|
403
|
+
* purpose, because only two of §9's four are computable at all.
|
|
404
|
+
*
|
|
405
|
+
* **Meter 1** (base fee: per tenant + per active scope) is a `COUNT` over the directory.
|
|
406
|
+
* **Meter 2** (per-engine licensing) is a `GROUP BY` over the entitlement store, whose
|
|
407
|
+
* flags *are* the SKUs. Both are free, both come from the directory database, and
|
|
408
|
+
* neither needs a data pipeline. **Meters 3 and 4 are absent by construction**, not by
|
|
409
|
+
* omission: the outbox is per-scope-database with no cross-tenant fan-in, reads emit
|
|
410
|
+
* nothing, and the cross-tenant order flow does not exist. A field here would be a
|
|
411
|
+
* number we cannot compute — "a meter you cannot compute is not a pricing decision, it
|
|
412
|
+
* is a data-pipeline project" (§5).
|
|
413
|
+
*
|
|
414
|
+
* Two rules decide every number below, and they are the reason this is a server-side
|
|
415
|
+
* aggregate rather than arithmetic over `listScopes`:
|
|
416
|
+
*
|
|
417
|
+
* 1. **Billable means EFFECTIVE, not stored.** Suspending a tenant does not touch its
|
|
418
|
+
* scopes' rows, but `getScope` fails closed for all of them (§4.1) — so a scope
|
|
419
|
+
* stored `active` under a non-active tenant is serving nobody and is counted
|
|
420
|
+
* suspended here, exactly as the console's `effectiveStatus` counts it. A meter that
|
|
421
|
+
* read stored status would bill a tenant-wide outage.
|
|
422
|
+
* 2. **Expiry is evaluated at `readAt`.** An expired grant is gate-dead (#33), so it is
|
|
423
|
+
* not billable — but it stays visible as `expired` rather than vanishing, because a
|
|
424
|
+
* lapsed trial is a renewal, not an absence.
|
|
425
|
+
*/
|
|
426
|
+
export const meterScopeCounts = z.object({
|
|
427
|
+
/** Every scope row, tombstones included — the denominator, not a billable number. */
|
|
428
|
+
total: z.number().int().nonnegative(),
|
|
429
|
+
/** Effective-active: the row is `active` AND its tenant is. The billable count. */
|
|
430
|
+
active: z.number().int().nonnegative(),
|
|
431
|
+
/** Own suspension plus tenant cascade — the two are one outage from where a meter sits. */
|
|
432
|
+
suspended: z.number().int().nonnegative(),
|
|
433
|
+
provisioning: z.number().int().nonnegative(),
|
|
434
|
+
/** `archiving` + `archived`: reversible, not serving, not billable. */
|
|
435
|
+
archived: z.number().int().nonnegative(),
|
|
436
|
+
/** Terminal tombstones — storage is gone. Kept visible so `total` reconciles. */
|
|
437
|
+
reaped: z.number().int().nonnegative(),
|
|
438
|
+
});
|
|
439
|
+
/** Meter 1, per tenant: the scopes under it, and how many SKUs it holds. */
|
|
440
|
+
export const tenantMeterRow = z.object({
|
|
441
|
+
tenantId,
|
|
442
|
+
slug,
|
|
443
|
+
status: tenantStatus,
|
|
444
|
+
/** `status === 'active'` — a suspended or deleting tenant serves nobody, so it bills for nothing. */
|
|
445
|
+
billable: z.boolean(),
|
|
446
|
+
scopes: meterScopeCounts,
|
|
447
|
+
/** Grants live at `readAt`, and grants that have lapsed — see the expiry rule above. */
|
|
448
|
+
entitlements: z.object({
|
|
449
|
+
live: z.number().int().nonnegative(),
|
|
450
|
+
expired: z.number().int().nonnegative(),
|
|
451
|
+
}),
|
|
452
|
+
});
|
|
453
|
+
/**
|
|
454
|
+
* Meter 2, one row per (SKU, tier): entitlement flags are the SKUs (§9), and `plan` is
|
|
455
|
+
* what makes a tier data instead of operator convention (#33). Grouped rather than
|
|
456
|
+
* summed so "how many tenants are on `pro` of this engine" is a read, not a re-derivation.
|
|
457
|
+
*
|
|
458
|
+
* Counts BILLABLE holders only — an active tenant with a live grant. A grant held by a
|
|
459
|
+
* suspended tenant is not revenue, and counting it here would make the meter disagree
|
|
460
|
+
* with the base fee beside it.
|
|
461
|
+
*/
|
|
462
|
+
export const entitlementMeterRow = z.object({
|
|
463
|
+
entitlementKey: z.string().min(1),
|
|
464
|
+
/** Null = an ungrouped key (today's plain on/off flag). */
|
|
465
|
+
plan: z.string().min(1).nullable(),
|
|
466
|
+
/** Active tenants holding this key live at `readAt`. */
|
|
467
|
+
tenants: z.number().int().nonnegative(),
|
|
468
|
+
/** Active tenants whose grant for this key has lapsed — renewals, not revenue. */
|
|
469
|
+
expired: z.number().int().nonnegative(),
|
|
470
|
+
});
|
|
471
|
+
/**
|
|
472
|
+
* One reading of meters 1 and 2 — fleet-wide, or narrowed to a single tenant.
|
|
473
|
+
*
|
|
474
|
+
* A reading is a fact about an INSTANT, not a running total: nothing is stored, nothing
|
|
475
|
+
* accumulates, and re-reading recomputes. That is deliberate — a stored meter is a
|
|
476
|
+
* billing system's ledger, and D-30 says meter, do not bill. `readAt` is what makes the
|
|
477
|
+
* number quotable ("42 active scopes at 09:00") without pretending it is invoiced.
|
|
478
|
+
*/
|
|
479
|
+
export const meterReading = z.object({
|
|
480
|
+
/** When the directory was read; every expiry comparison above is against this. */
|
|
481
|
+
readAt: instant,
|
|
482
|
+
/** Meter 1's tenant half, over the tenants in scope of this reading. */
|
|
483
|
+
tenants: z.object({
|
|
484
|
+
total: z.number().int().nonnegative(),
|
|
485
|
+
/** The billable count — the per-tenant base fee's multiplier. */
|
|
486
|
+
active: z.number().int().nonnegative(),
|
|
487
|
+
suspended: z.number().int().nonnegative(),
|
|
488
|
+
deleting: z.number().int().nonnegative(),
|
|
489
|
+
reaped: z.number().int().nonnegative(),
|
|
490
|
+
}),
|
|
491
|
+
/** Meter 1's scope half, summed over those tenants. */
|
|
492
|
+
scopes: meterScopeCounts,
|
|
493
|
+
/** Meter 2, ordered by key then plan. Empty when nothing is entitled. */
|
|
494
|
+
entitlements: z.array(entitlementMeterRow),
|
|
495
|
+
/**
|
|
496
|
+
* The per-tenant breakdown the totals are summed from — one row per tenant in scope
|
|
497
|
+
* of the reading (exactly one when narrowed by `tenantId`). Ordered by tenant id.
|
|
498
|
+
*/
|
|
499
|
+
perTenant: z.array(tenantMeterRow),
|
|
500
|
+
});
|
|
396
501
|
//# sourceMappingURL=control-plane.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,EACL,eAAe,EACf,WAAW,EACX,OAAO,EACP,QAAQ,GACT,MAAM,UAAU,CAAC;AAClB,wFAAwF;AACxF,mFAAmF;AACnF,uDAAuD;AACvD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../src/control-plane.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.
|
|
3
|
+
"version": "0.53.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": {
|