@substrat-run/contracts 0.1.0 → 0.2.1

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/README.md CHANGED
@@ -9,6 +9,8 @@ boundary. The schemas are written in [Zod](https://zod.dev), so the reviewed art
9
9
  *is* the runtime validator: OpenAPI and JSON Schema documents are emitted from this
10
10
  package, never hand-maintained beside it.
11
11
 
12
+ **Full documentation: https://substrat.ahlstrand.es/reference/contracts**
13
+
12
14
  ## What's inside
13
15
 
14
16
  - **IDs** — branded ULID types (`TenantId`, `ScopeId`, `PrincipalId`, `EventId`, …):
@@ -0,0 +1,88 @@
1
+ import { z } from 'zod';
2
+ export declare const adminAction: z.ZodEnum<["defineRole", "assignRole", "grant", "grantToOrg", "addMember", "createTenant", "setTenantStatus", "provisionScope", "suspendScope", "unsuspendScope", "archiveScope", "unarchiveScope", "grantEntitlement", "revokeEntitlement", "linkIdentity"]>;
3
+ export type AdminAction = z.infer<typeof adminAction>;
4
+ /**
5
+ * The neutral identity seam (D-16; control-plane.md §6 "principal derivation").
6
+ * An auth adapter at the edge (Better Auth, an OIDC issuer, …) authenticates a
7
+ * user and maps its external identity to a Substrat principal + home node. The
8
+ * kernel never learns HOW a caller authenticated, only WHO they are — the
9
+ * mechanism stays a swappable adapter. Authentication only: authorization is
10
+ * roles/grants, and `provider` keeps N adapters (and OIDC upstreams) distinct.
11
+ */
12
+ export declare const identityLink: z.ZodObject<{
13
+ provider: z.ZodString;
14
+ externalId: z.ZodString;
15
+ principal: z.ZodBranded<z.ZodString, "PrincipalId">;
16
+ tenantId: z.ZodBranded<z.ZodString, "TenantId">;
17
+ scopeId: z.ZodOptional<z.ZodBranded<z.ZodString, "ScopeId">>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ provider: string;
20
+ externalId: string;
21
+ principal: string & z.BRAND<"PrincipalId">;
22
+ tenantId: string & z.BRAND<"TenantId">;
23
+ scopeId?: (string & z.BRAND<"ScopeId">) | undefined;
24
+ }, {
25
+ provider: string;
26
+ externalId: string;
27
+ principal: string;
28
+ tenantId: string;
29
+ scopeId?: string | undefined;
30
+ }>;
31
+ export type IdentityLink = z.infer<typeof identityLink>;
32
+ export declare const resolvedIdentity: z.ZodObject<{
33
+ principal: z.ZodBranded<z.ZodString, "PrincipalId">;
34
+ tenantId: z.ZodBranded<z.ZodString, "TenantId">;
35
+ scopeId: z.ZodNullable<z.ZodBranded<z.ZodString, "ScopeId">>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ principal: string & z.BRAND<"PrincipalId">;
38
+ tenantId: string & z.BRAND<"TenantId">;
39
+ scopeId: (string & z.BRAND<"ScopeId">) | null;
40
+ }, {
41
+ principal: string;
42
+ tenantId: string;
43
+ scopeId: string | null;
44
+ }>;
45
+ export type ResolvedIdentity = z.infer<typeof resolvedIdentity>;
46
+ /**
47
+ * An append-only admin audit row (control-plane.md §4.4). Every field except
48
+ * `before`/`after` is stamped platform-side — never supplied by the caller —
49
+ * for the same reason the kernel is trusted at all (K-4): a surface that can act
50
+ * without a durable record of who acted is worse than no surface.
51
+ *
52
+ * `target` is `(tenantId, scopeId?, vertical?)`. `scopeId`/`vertical` are null
53
+ * for tenant-wide actions; `vertical` stays null until §4.2 lifecycle actions
54
+ * (provision/suspend) that name one.
55
+ */
56
+ export declare const adminLogEntry: z.ZodObject<{
57
+ id: z.ZodString;
58
+ actor: z.ZodBranded<z.ZodString, "PlatformActorId">;
59
+ action: z.ZodEnum<["defineRole", "assignRole", "grant", "grantToOrg", "addMember", "createTenant", "setTenantStatus", "provisionScope", "suspendScope", "unsuspendScope", "archiveScope", "unarchiveScope", "grantEntitlement", "revokeEntitlement", "linkIdentity"]>;
60
+ tenantId: z.ZodBranded<z.ZodString, "TenantId">;
61
+ scopeId: z.ZodNullable<z.ZodBranded<z.ZodString, "ScopeId">>;
62
+ vertical: z.ZodNullable<z.ZodString>;
63
+ before: z.ZodNullable<z.ZodUnknown>;
64
+ after: z.ZodNullable<z.ZodUnknown>;
65
+ at: z.ZodBranded<z.ZodString, "Instant">;
66
+ }, "strip", z.ZodTypeAny, {
67
+ at: string & z.BRAND<"Instant">;
68
+ tenantId: string & z.BRAND<"TenantId">;
69
+ scopeId: (string & z.BRAND<"ScopeId">) | null;
70
+ id: string;
71
+ actor: string & z.BRAND<"PlatformActorId">;
72
+ action: "defineRole" | "assignRole" | "grant" | "grantToOrg" | "addMember" | "createTenant" | "setTenantStatus" | "provisionScope" | "suspendScope" | "unsuspendScope" | "archiveScope" | "unarchiveScope" | "grantEntitlement" | "revokeEntitlement" | "linkIdentity";
73
+ vertical: string | null;
74
+ before?: unknown;
75
+ after?: unknown;
76
+ }, {
77
+ at: string;
78
+ tenantId: string;
79
+ scopeId: string | null;
80
+ id: string;
81
+ actor: string;
82
+ action: "defineRole" | "assignRole" | "grant" | "grantToOrg" | "addMember" | "createTenant" | "setTenantStatus" | "provisionScope" | "suspendScope" | "unsuspendScope" | "archiveScope" | "unarchiveScope" | "grantEntitlement" | "revokeEntitlement" | "linkIdentity";
83
+ vertical: string | null;
84
+ before?: unknown;
85
+ after?: unknown;
86
+ }>;
87
+ export type AdminLogEntry = z.infer<typeof adminLogEntry>;
88
+ //# sourceMappingURL=control-plane.d.ts.map
@@ -0,0 +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;AAUxB,eAAO,MAAM,WAAW,+PAgBtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;EAMvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { z } from 'zod';
2
+ import { instant, platformActorId, principalId, scopeId, tenantId } from './ids.js';
3
+ // The control plane — the shared layer across N per-vertical deployments (D-30,
4
+ // control-plane.md). This file carries the audit contract that every effecting
5
+ // mutation writes; the tenant registry, lifecycle, and entitlement store land in
6
+ // later slices (control-plane.md §4.1–4.3).
7
+ // One row per control-plane mutation. Extended additively as §4.2/§4.3 add
8
+ // lifecycle and entitlement actions (new enum members are additive — D-28).
9
+ export const adminAction = z.enum([
10
+ 'defineRole',
11
+ 'assignRole',
12
+ 'grant',
13
+ 'grantToOrg',
14
+ 'addMember',
15
+ 'createTenant', // §4.1
16
+ 'setTenantStatus', // §4.1 — before/after carry the transitioned status
17
+ 'provisionScope', // §4.2 — the first scope-lifecycle transition (→ active)
18
+ 'suspendScope', // §4.2
19
+ 'unsuspendScope', // §4.2
20
+ 'archiveScope', // §4.2
21
+ 'unarchiveScope', // §4.2 — an explicit restore, never a silent flag flip
22
+ 'grantEntitlement', // §4.3 — the SKU flag turned on for a tenant
23
+ 'revokeEntitlement', // §4.3
24
+ 'linkIdentity', // D-16 — bind an external identity to a principal
25
+ ]);
26
+ /**
27
+ * The neutral identity seam (D-16; control-plane.md §6 "principal derivation").
28
+ * An auth adapter at the edge (Better Auth, an OIDC issuer, …) authenticates a
29
+ * user and maps its external identity to a Substrat principal + home node. The
30
+ * kernel never learns HOW a caller authenticated, only WHO they are — the
31
+ * mechanism stays a swappable adapter. Authentication only: authorization is
32
+ * roles/grants, and `provider` keeps N adapters (and OIDC upstreams) distinct.
33
+ */
34
+ export const identityLink = z.object({
35
+ provider: z.string().min(1), // 'better-auth' | 'oidc:<issuer>' | …
36
+ externalId: z.string().min(1), // the provider's stable user id (e.g. the OIDC `sub`)
37
+ principal: principalId,
38
+ tenantId,
39
+ scopeId: scopeId.optional(), // omitted = tenant-level home
40
+ });
41
+ export const resolvedIdentity = z.object({
42
+ principal: principalId,
43
+ tenantId,
44
+ scopeId: scopeId.nullable(),
45
+ });
46
+ /**
47
+ * An append-only admin audit row (control-plane.md §4.4). Every field except
48
+ * `before`/`after` is stamped platform-side — never supplied by the caller —
49
+ * for the same reason the kernel is trusted at all (K-4): a surface that can act
50
+ * without a durable record of who acted is worse than no surface.
51
+ *
52
+ * `target` is `(tenantId, scopeId?, vertical?)`. `scopeId`/`vertical` are null
53
+ * for tenant-wide actions; `vertical` stays null until §4.2 lifecycle actions
54
+ * (provision/suspend) that name one.
55
+ */
56
+ export const adminLogEntry = z.object({
57
+ id: z.string().min(1), // ULID, stamped host-side; sortable = chronological
58
+ actor: platformActorId,
59
+ action: adminAction,
60
+ tenantId,
61
+ scopeId: scopeId.nullable(),
62
+ vertical: z.string().nullable(),
63
+ before: z.unknown().nullable(), // prior state where cheaply readable (e.g. a redefined role)
64
+ after: z.unknown().nullable(), // the applied payload
65
+ at: instant,
66
+ });
67
+ //# sourceMappingURL=control-plane.js.map
@@ -0,0 +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,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpF,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AACjF,4CAA4C;AAE5C,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,WAAW;IACX,cAAc,EAAE,OAAO;IACvB,iBAAiB,EAAE,oDAAoD;IACvE,gBAAgB,EAAE,yDAAyD;IAC3E,cAAc,EAAE,OAAO;IACvB,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO;IACvB,gBAAgB,EAAE,uDAAuD;IACzE,kBAAkB,EAAE,6CAA6C;IACjE,mBAAmB,EAAE,OAAO;IAC5B,cAAc,EAAE,kDAAkD;CACnE,CAAC,CAAC;AAGH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sCAAsC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,sDAAsD;IACrF,SAAS,EAAE,WAAW;IACtB,QAAQ;IACR,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,8BAA8B;CAC5D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,WAAW;IACtB,QAAQ;IACR,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,oDAAoD;IAC3E,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,WAAW;IACnB,QAAQ;IACR,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,6DAA6D;IAC7F,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,sBAAsB;IACrD,EAAE,EAAE,OAAO;CACZ,CAAC,CAAC"}
package/dist/events.d.ts CHANGED
@@ -115,70 +115,70 @@ export declare const domainEvent: z.ZodEffects<z.ZodObject<{
115
115
  payload: z.ZodUnknown;
116
116
  }, "strip", z.ZodTypeAny, {
117
117
  type: string;
118
+ tenantId: string & z.BRAND<"TenantId">;
119
+ scopeId: string & z.BRAND<"ScopeId">;
120
+ id: string & z.BRAND<"EventId">;
121
+ actor: (string & z.BRAND<"PrincipalId">) | {
122
+ system: string & z.BRAND<"ModuleId">;
123
+ };
118
124
  schemaVersion: number;
119
125
  entity: {
120
126
  entityType: string;
121
127
  entityId: string;
122
128
  };
123
129
  piiClass: "none" | "pseudonymous" | "direct";
124
- id: string & z.BRAND<"EventId">;
125
130
  occurredAt: string & z.BRAND<"Instant">;
126
- tenantId: string & z.BRAND<"TenantId">;
127
- scopeId: string & z.BRAND<"ScopeId">;
128
- actor: (string & z.BRAND<"PrincipalId">) | {
129
- system: string & z.BRAND<"ModuleId">;
130
- };
131
131
  subjectId?: (string & z.BRAND<"DataSubjectId">) | undefined;
132
132
  payload?: unknown;
133
133
  }, {
134
134
  type: string;
135
+ tenantId: string;
136
+ scopeId: string;
137
+ id: string;
138
+ actor: string | {
139
+ system: string;
140
+ };
135
141
  schemaVersion: number;
136
142
  entity: {
137
143
  entityType: string;
138
144
  entityId: string;
139
145
  };
140
146
  piiClass: "none" | "pseudonymous" | "direct";
141
- id: string;
142
147
  occurredAt: string;
143
- tenantId: string;
144
- scopeId: string;
145
- actor: string | {
146
- system: string;
147
- };
148
148
  subjectId?: string | undefined;
149
149
  payload?: unknown;
150
150
  }>, {
151
151
  type: string;
152
+ tenantId: string & z.BRAND<"TenantId">;
153
+ scopeId: string & z.BRAND<"ScopeId">;
154
+ id: string & z.BRAND<"EventId">;
155
+ actor: (string & z.BRAND<"PrincipalId">) | {
156
+ system: string & z.BRAND<"ModuleId">;
157
+ };
152
158
  schemaVersion: number;
153
159
  entity: {
154
160
  entityType: string;
155
161
  entityId: string;
156
162
  };
157
163
  piiClass: "none" | "pseudonymous" | "direct";
158
- id: string & z.BRAND<"EventId">;
159
164
  occurredAt: string & z.BRAND<"Instant">;
160
- tenantId: string & z.BRAND<"TenantId">;
161
- scopeId: string & z.BRAND<"ScopeId">;
162
- actor: (string & z.BRAND<"PrincipalId">) | {
163
- system: string & z.BRAND<"ModuleId">;
164
- };
165
165
  subjectId?: (string & z.BRAND<"DataSubjectId">) | undefined;
166
166
  payload?: unknown;
167
167
  }, {
168
168
  type: string;
169
+ tenantId: string;
170
+ scopeId: string;
171
+ id: string;
172
+ actor: string | {
173
+ system: string;
174
+ };
169
175
  schemaVersion: number;
170
176
  entity: {
171
177
  entityType: string;
172
178
  entityId: string;
173
179
  };
174
180
  piiClass: "none" | "pseudonymous" | "direct";
175
- id: string;
176
181
  occurredAt: string;
177
- tenantId: string;
178
- scopeId: string;
179
- actor: string | {
180
- system: string;
181
- };
182
182
  subjectId?: string | undefined;
183
183
  payload?: unknown;
184
184
  }>;
package/dist/ids.d.ts CHANGED
@@ -5,6 +5,8 @@ export declare const scopeId: z.ZodBranded<z.ZodString, "ScopeId">;
5
5
  export type ScopeId = z.infer<typeof scopeId>;
6
6
  export declare const principalId: z.ZodBranded<z.ZodString, "PrincipalId">;
7
7
  export type PrincipalId = z.infer<typeof principalId>;
8
+ export declare const platformActorId: z.ZodBranded<z.ZodString, "PlatformActorId">;
9
+ export type PlatformActorId = z.infer<typeof platformActorId>;
8
10
  export declare const eventId: z.ZodBranded<z.ZodString, "EventId">;
9
11
  export type EventId = z.infer<typeof eventId>;
10
12
  export declare const dataSubjectId: z.ZodBranded<z.ZodString, "DataSubjectId">;
package/dist/ids.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,QAAQ,uCAA6C,CAAC;AACnE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,OAAO,sCAA4C,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,WAAW,0CAAgD,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,OAAO,sCAA4C,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,aAAa,4CAAkD,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAG1D,eAAO,MAAM,QAAQ,uCAGC,CAAC;AACvB,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAGhD,eAAO,MAAM,OAAO,sCAA2D,CAAC;AAChF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAG9C,eAAO,MAAM,aAAa,4CAGC,CAAC;AAC5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,IAAI,aAAwD,CAAC"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,QAAQ,uCAA6C,CAAC;AACnE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,OAAO,sCAA4C,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,WAAW,0CAAgD,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAKtD,eAAO,MAAM,eAAe,8CAAoD,CAAC;AACjF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,OAAO,sCAA4C,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,eAAO,MAAM,aAAa,4CAAkD,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAG1D,eAAO,MAAM,QAAQ,uCAGC,CAAC;AACvB,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAGhD,eAAO,MAAM,OAAO,sCAA2D,CAAC;AAChF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAG9C,eAAO,MAAM,aAAa,4CAGC,CAAC;AAC5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,IAAI,aAAwD,CAAC"}
package/dist/ids.js CHANGED
@@ -6,6 +6,10 @@ const ULID = /^[0-9A-HJKMNP-TV-Z]{26}$/;
6
6
  export const tenantId = z.string().regex(ULID).brand();
7
7
  export const scopeId = z.string().regex(ULID).brand();
8
8
  export const principalId = z.string().regex(ULID).brand();
9
+ // A platform-staff actor — the subject of every control-plane mutation (D-30, K-20).
10
+ // Branded DISTINCTLY from PrincipalId on purpose: a platform actor is not a principal
11
+ // in any tenant, and the compiler must refuse to confuse the two.
12
+ export const platformActorId = z.string().regex(ULID).brand();
9
13
  export const eventId = z.string().regex(ULID).brand();
10
14
  export const dataSubjectId = z.string().regex(ULID).brand();
11
15
  // npm-package-shaped, e.g. '@substrat-run/engine-workorder'
package/dist/ids.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,oFAAoF;AACpF,oEAAoE;AAEpE,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAExC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAc,CAAC;AAGnE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAa,CAAC;AAGjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAiB,CAAC;AAGzE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAa,CAAC;AAGjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAmB,CAAC;AAG7E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,KAAK,CAAC,wDAAwD,CAAC;KAC/D,KAAK,EAAc,CAAC;AAGvB,gFAAgF;AAChF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAa,CAAC;AAGhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,yBAAyB,CAAC;KAChC,KAAK,EAAmB,CAAC;AAG5B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,oFAAoF;AACpF,oEAAoE;AAEpE,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAExC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAc,CAAC;AAGnE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAa,CAAC;AAGjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAiB,CAAC;AAGzE,qFAAqF;AACrF,sFAAsF;AACtF,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAqB,CAAC;AAGjF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAa,CAAC;AAGjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAmB,CAAC;AAG7E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,KAAK,CAAC,wDAAwD,CAAC;KAC/D,KAAK,EAAc,CAAC;AAGvB,gFAAgF;AAChF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAa,CAAC;AAGhF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,yBAAyB,CAAC;KAChC,KAAK,EAAmB,CAAC;AAG5B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './ids.js';
2
2
  export * from './tenancy.js';
3
+ export * from './control-plane.js';
3
4
  export * from './permission.js';
4
5
  export * from './events.js';
5
6
  export * from './manifest.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './ids.js';
2
2
  export * from './tenancy.js';
3
+ export * from './control-plane.js';
3
4
  export * from './permission.js';
4
5
  export * from './events.js';
5
6
  export * from './manifest.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -22,6 +22,20 @@ export declare const eventTypeRef: z.ZodObject<{
22
22
  schemaVersion: number;
23
23
  }>;
24
24
  export type EventTypeRef = z.infer<typeof eventTypeRef>;
25
+ export declare const manifestGuard: z.ZodObject<{
26
+ before: z.ZodString;
27
+ predicate: z.ZodString;
28
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ before: string;
31
+ predicate: string;
32
+ config: Record<string, unknown>;
33
+ }, {
34
+ before: string;
35
+ predicate: string;
36
+ config?: Record<string, unknown> | undefined;
37
+ }>;
38
+ export type ManifestGuard = z.infer<typeof manifestGuard>;
25
39
  export declare const moduleManifest: z.ZodObject<{
26
40
  id: z.ZodBranded<z.ZodString, "ModuleId">;
27
41
  version: z.ZodString;
@@ -106,6 +120,20 @@ export declare const moduleManifest: z.ZodObject<{
106
120
  entityType: string;
107
121
  parentType: string;
108
122
  }>, "many">>;
123
+ guards: z.ZodOptional<z.ZodArray<z.ZodObject<{
124
+ before: z.ZodString;
125
+ predicate: z.ZodString;
126
+ config: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ before: string;
129
+ predicate: string;
130
+ config: Record<string, unknown>;
131
+ }, {
132
+ before: string;
133
+ predicate: string;
134
+ config?: Record<string, unknown> | undefined;
135
+ }>, "many">>;
136
+ withdraws: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
109
137
  entitlementKey: z.ZodString;
110
138
  api: z.ZodOptional<z.ZodString>;
111
139
  searchables: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -268,6 +296,12 @@ export declare const moduleManifest: z.ZodObject<{
268
296
  entityType: string;
269
297
  parentType: string;
270
298
  }[] | undefined;
299
+ guards?: {
300
+ before: string;
301
+ predicate: string;
302
+ config: Record<string, unknown>;
303
+ }[] | undefined;
304
+ withdraws?: string[] | undefined;
271
305
  api?: string | undefined;
272
306
  searchables?: {
273
307
  entityType: string;
@@ -331,6 +365,12 @@ export declare const moduleManifest: z.ZodObject<{
331
365
  entityType: string;
332
366
  parentType: string;
333
367
  }[] | undefined;
368
+ guards?: {
369
+ before: string;
370
+ predicate: string;
371
+ config?: Record<string, unknown> | undefined;
372
+ }[] | undefined;
373
+ withdraws?: string[] | undefined;
334
374
  api?: string | undefined;
335
375
  searchables?: {
336
376
  entityType: string;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,aAAa,aAEsC,CAAC;AAEjE,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,eAAO,MAAM,YAAY;;;;;;;;;EAGvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuEzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,aAAa,aAEsC,CAAC;AAEjE,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,eAAO,MAAM,YAAY;;;;;;;;;EAGvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqGzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
package/dist/manifest.js CHANGED
@@ -14,6 +14,11 @@ export const eventTypeRef = z.object({
14
14
  type: eventType,
15
15
  schemaVersion: z.number().int().positive(),
16
16
  });
17
+ export const manifestGuard = z.object({
18
+ before: z.string().min(1), // operation name, e.g. 'bike-shop/close-repair'
19
+ predicate: z.string().min(1), // named predicate, e.g. 'protocol/all-signed'
20
+ config: z.record(z.string(), z.unknown()).default({}), // predicate-owned shape
21
+ });
17
22
  export const moduleManifest = z.object({
18
23
  id: moduleId, // '@substrat-run/engine-workorder'
19
24
  version: semverVersion,
@@ -40,6 +45,36 @@ export const moduleManifest = z.object({
40
45
  parentType: z.string().min(1), // 'facility'
41
46
  }))
42
47
  .optional(),
48
+ // MANIFEST-DECLARED OPERATION GUARDS (engine-protocol.md §6, kernel-design
49
+ // open question 11, milestone C). A guard is an UNCONDITIONAL pre-condition
50
+ // on a registered OPERATION: the kernel resolves `predicate` (a named
51
+ // predicate contributed by some registered module) and runs it inside the
52
+ // operation's own transaction, before the handler. A throw blocks the
53
+ // operation and rolls back — fail closed.
54
+ //
55
+ // Keyed on operations, never on engine transitions: the kernel sees
56
+ // operations, and must not learn engine internals (star topology). Policy
57
+ // that is CONDITIONAL on vertical data (e.g. "only montage orders need an
58
+ // egenkontroll") stays vertical-composed glue inside the operation — see
59
+ // demos/fsm. Guards live here so that adding or DROPPING a compliance gate
60
+ // lands in the reviewable manifest diff.
61
+ //
62
+ // Optional: every pre-milestone-C manifest still parses unchanged (D-28,
63
+ // additive-only surface).
64
+ guards: z.array(manifestGuard).optional(),
65
+ // OPERATION WITHDRAWAL (K-17, the complement that makes guards enforceable).
66
+ // Operation names whose DEFAULT BINDING this module suppresses in the host it
67
+ // registers into: the name stops resolving — an invoke fails 'unknown
68
+ // operation', exactly as if it had never been registered. Order-independent
69
+ // (withdraw before or after the owning module registers) and opt-in.
70
+ //
71
+ // Withdrawal removes the BINDING, not the capability: the engine's in-scope
72
+ // function (e.g. `closeWorkOrder`) stays composable, which is how a vertical
73
+ // re-offers the same transition behind its own guarded operation. A module may
74
+ // not withdraw its own operations.
75
+ //
76
+ // Optional: additive-only surface (D-28).
77
+ withdraws: z.array(z.string().min(1)).optional(),
43
78
  entitlementKey: z.string().regex(/^[a-z0-9-]+$/), // the SKU flag that gates loading (D-20)
44
79
  api: z.string().optional(), // path to emitted OAS for the HTTP surface, if any (D-22)
45
80
  searchables: z
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
package/dist/tenancy.d.ts CHANGED
@@ -21,6 +21,22 @@ export declare const tenant: z.ZodObject<{
21
21
  createdAt: string;
22
22
  }>;
23
23
  export type Tenant = z.infer<typeof tenant>;
24
+ export declare const createTenantInput: z.ZodObject<Pick<{
25
+ id: z.ZodBranded<z.ZodString, "TenantId">;
26
+ slug: z.ZodString;
27
+ name: z.ZodString;
28
+ status: z.ZodEnum<["active", "suspended", "deleting"]>;
29
+ createdAt: z.ZodBranded<z.ZodString, "Instant">;
30
+ }, "id" | "slug" | "name">, "strip", z.ZodTypeAny, {
31
+ id: string & z.BRAND<"TenantId">;
32
+ slug: string;
33
+ name: string;
34
+ }, {
35
+ id: string;
36
+ slug: string;
37
+ name: string;
38
+ }>;
39
+ export type CreateTenantInput = z.infer<typeof createTenantInput>;
24
40
  export declare const scopeStatus: z.ZodEnum<["provisioning", "active", "suspended", "archiving", "archived"]>;
25
41
  export type ScopeStatus = z.infer<typeof scopeStatus>;
26
42
  export declare const storageShape: z.ZodEnum<["A", "B"]>;
@@ -41,9 +57,9 @@ export declare const scope: z.ZodObject<{
41
57
  createdAt: z.ZodBranded<z.ZodString, "Instant">;
42
58
  }, "strip", z.ZodTypeAny, {
43
59
  status: "active" | "suspended" | "provisioning" | "archiving" | "archived";
44
- schemaVersion: string;
45
- id: string & z.BRAND<"ScopeId">;
46
60
  tenantId: string & z.BRAND<"TenantId">;
61
+ id: string & z.BRAND<"ScopeId">;
62
+ schemaVersion: string;
47
63
  slug: string;
48
64
  name: string;
49
65
  createdAt: string & z.BRAND<"Instant">;
@@ -53,9 +69,9 @@ export declare const scope: z.ZodObject<{
53
69
  jurisdiction: "eu" | null;
54
70
  }, {
55
71
  status: "active" | "suspended" | "provisioning" | "archiving" | "archived";
56
- schemaVersion: string;
57
- id: string;
58
72
  tenantId: string;
73
+ id: string;
74
+ schemaVersion: string;
59
75
  slug: string;
60
76
  name: string;
61
77
  createdAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY,gDAA8C,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAE5C,eAAO,MAAM,WAAW,6EAMtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAGtD,eAAO,MAAM,YAAY,uBAAqB,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGxD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYhB,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY,gDAA8C,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EAMjB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAI5C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;EAAoD,CAAC;AACnF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,WAAW,6EAMtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAGtD,eAAO,MAAM,YAAY,uBAAqB,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGxD,eAAO,MAAM,YAAY,kCAA4B,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYhB,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC"}
package/dist/tenancy.js CHANGED
@@ -8,6 +8,9 @@ export const tenant = z.object({
8
8
  status: tenantStatus,
9
9
  createdAt: instant,
10
10
  });
11
+ // What the caller supplies to createTenant (control-plane.md §4.1); `status`
12
+ // (active) and `createdAt` are stamped host-side, never caller-supplied.
13
+ export const createTenantInput = tenant.pick({ id: true, slug: true, name: true });
11
14
  export const scopeStatus = z.enum([
12
15
  'provisioning',
13
16
  'active',
@@ -1 +1 @@
1
- {"version":3,"file":"tenancy.js","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAGxE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,QAAQ;IACZ,IAAI;IACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,cAAc;IACd,QAAQ;IACR,WAAW;IACX,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAGH,uFAAuF;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAG/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAGtD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,OAAO,EAAE,6EAA6E;IAC1F,QAAQ;IACR,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,4DAA4D;IAC/F,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,qEAAqE;IAC9F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,WAAW;IACnB,YAAY;IACZ,YAAY;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"tenancy.js","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAGxE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAE,QAAQ;IACZ,IAAI;IACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC;AAGH,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAGnF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC;IAChC,cAAc;IACd,QAAQ;IACR,WAAW;IACX,WAAW;IACX,UAAU;CACX,CAAC,CAAC;AAGH,uFAAuF;AACvF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAG/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAGtD,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,OAAO,EAAE,6EAA6E;IAC1F,QAAQ;IACR,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,4DAA4D;IAC/F,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,qEAAqE;IAC9F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,WAAW;IACnB,YAAY;IACZ,YAAY;IACZ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/contracts",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
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": {