@cotal-ai/auth 0.12.0 → 0.13.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 (95) hide show
  1. package/dist/admission-mediator.d.ts +319 -0
  2. package/dist/admission-mediator.d.ts.map +1 -0
  3. package/dist/admission-mediator.js +1033 -0
  4. package/dist/admission-mediator.js.map +1 -0
  5. package/dist/auth-admin.d.ts +29 -0
  6. package/dist/auth-admin.d.ts.map +1 -0
  7. package/dist/auth-admin.js +224 -0
  8. package/dist/auth-admin.js.map +1 -0
  9. package/dist/authority-client.d.ts +215 -0
  10. package/dist/authority-client.d.ts.map +1 -0
  11. package/dist/authority-client.js +346 -0
  12. package/dist/authority-client.js.map +1 -0
  13. package/dist/barrier-evict.d.ts +16 -0
  14. package/dist/barrier-evict.d.ts.map +1 -0
  15. package/dist/barrier-evict.js +100 -0
  16. package/dist/barrier-evict.js.map +1 -0
  17. package/dist/connect-reader.d.ts +72 -0
  18. package/dist/connect-reader.d.ts.map +1 -0
  19. package/dist/connect-reader.js +154 -0
  20. package/dist/connect-reader.js.map +1 -0
  21. package/dist/continuity.d.ts.map +1 -1
  22. package/dist/continuity.js +3 -0
  23. package/dist/continuity.js.map +1 -1
  24. package/dist/credential-ledger.d.ts +343 -0
  25. package/dist/credential-ledger.d.ts.map +1 -0
  26. package/dist/credential-ledger.js +732 -0
  27. package/dist/credential-ledger.js.map +1 -0
  28. package/dist/drain-repair.d.ts +95 -0
  29. package/dist/drain-repair.d.ts.map +1 -0
  30. package/dist/drain-repair.js +305 -0
  31. package/dist/drain-repair.js.map +1 -0
  32. package/dist/idp.d.ts +19 -0
  33. package/dist/idp.d.ts.map +1 -1
  34. package/dist/idp.js +17 -0
  35. package/dist/idp.js.map +1 -1
  36. package/dist/index.d.ts +5 -2
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +29 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/issuer.d.ts +8 -0
  41. package/dist/issuer.d.ts.map +1 -1
  42. package/dist/issuer.js +4 -2
  43. package/dist/issuer.js.map +1 -1
  44. package/dist/ledger-scanner.d.ts +98 -0
  45. package/dist/ledger-scanner.d.ts.map +1 -0
  46. package/dist/ledger-scanner.js +352 -0
  47. package/dist/ledger-scanner.js.map +1 -0
  48. package/dist/ledger.d.ts +7 -0
  49. package/dist/ledger.d.ts.map +1 -1
  50. package/dist/ledger.js +53 -5
  51. package/dist/ledger.js.map +1 -1
  52. package/dist/lifecycle-registry.d.ts +397 -0
  53. package/dist/lifecycle-registry.d.ts.map +1 -0
  54. package/dist/lifecycle-registry.js +819 -0
  55. package/dist/lifecycle-registry.js.map +1 -0
  56. package/dist/permissions.d.ts +5 -1
  57. package/dist/permissions.d.ts.map +1 -1
  58. package/dist/permissions.js +29 -6
  59. package/dist/permissions.js.map +1 -1
  60. package/dist/plane-claim.d.ts +83 -0
  61. package/dist/plane-claim.d.ts.map +1 -0
  62. package/dist/plane-claim.js +290 -0
  63. package/dist/plane-claim.js.map +1 -0
  64. package/dist/provider.d.ts.map +1 -1
  65. package/dist/provider.js +2 -1
  66. package/dist/provider.js.map +1 -1
  67. package/dist/records-scanner.d.ts +78 -0
  68. package/dist/records-scanner.d.ts.map +1 -0
  69. package/dist/records-scanner.js +320 -0
  70. package/dist/records-scanner.js.map +1 -0
  71. package/dist/retirement-barrier.d.ts +217 -0
  72. package/dist/retirement-barrier.d.ts.map +1 -0
  73. package/dist/retirement-barrier.js +624 -0
  74. package/dist/retirement-barrier.js.map +1 -0
  75. package/dist/retirement-cleaner.d.ts +54 -0
  76. package/dist/retirement-cleaner.d.ts.map +1 -0
  77. package/dist/retirement-cleaner.js +158 -0
  78. package/dist/retirement-cleaner.js.map +1 -0
  79. package/dist/root-credential.d.ts +26 -0
  80. package/dist/root-credential.d.ts.map +1 -0
  81. package/dist/root-credential.js +116 -0
  82. package/dist/root-credential.js.map +1 -0
  83. package/dist/service.d.ts +60 -0
  84. package/dist/service.d.ts.map +1 -1
  85. package/dist/service.js +317 -10
  86. package/dist/service.js.map +1 -1
  87. package/dist/session-ledger.d.ts +224 -0
  88. package/dist/session-ledger.d.ts.map +1 -0
  89. package/dist/session-ledger.js +713 -0
  90. package/dist/session-ledger.js.map +1 -0
  91. package/dist/token.d.ts +17 -0
  92. package/dist/token.d.ts.map +1 -1
  93. package/dist/token.js +30 -2
  94. package/dist/token.js.map +1 -1
  95. package/package.json +5 -3
@@ -0,0 +1,217 @@
1
+ /**
2
+ * The D13 (5) TERMINAL RETIREMENT BARRIER + the EXACT-POOL TERMINAL CLEANER (SPEC §13.1, as
3
+ * amended; the §13.9 cleaner matrix row). The third sibling of `lifecycle-registry.ts` /
4
+ * `credential-ledger.ts`: the SAME minting authority over the SAME stores, reached only through
5
+ * the sealed registry ({@link registryStores}).
6
+ *
7
+ * The barrier, in the NORMATIVE order (§13.1) — every boundary crash-resumable from the durable
8
+ * `stage.<opId>` intent, and only the SAME operation resumes it:
9
+ * 1. durable retirement intent (create-only, captured BEFORE any movement; it carries only the
10
+ * frontier stream set: the barrier DISCOVERS the whole cleaner inventory from the target's
11
+ * own accepted pool obligations, taking no caller-supplied pool hint, §13.1 #F);
12
+ * 2. CAS the issuance gate `open → frozen` carrying the intent (the bar: a staged mint loses
13
+ * its finalize touch) — a retirement freeze NEVER reopens (§13.1: its only exit is the
14
+ * terminal);
15
+ * 3. CAS the head `active → retiring` bound to the same op (every currency seam now yields no
16
+ * current mapping and no current epoch; the alias is NOT replaceable);
17
+ * 4. the shared containment core ({@link containLifecycleFamily}): revoke every ledger row
18
+ * under `cred.<uid>.>`, reconcile both halves of every session-derived credential, and
19
+ * VERIFIED cluster-wide eviction of every holder principal + the alias principal;
20
+ * 5. drain the target's acceptance obligations to quiescence (§13.8): enumerate
21
+ * `oblig.<targetUid>.>` for endpoint discovery, drive each endpoint's injected drain
22
+ * ({@link drainTargetForEndpoint} over that endpoint's mediator), then RE-ENUMERATE and
23
+ * verify — the barrier OWNS the quiescence check, never the injected seam; then, BEFORE
24
+ * anything else proceeds, fence the drain's per-op repair principals (the commit applier /
25
+ * pool-route reconciler / effects canceller, {@link drainRepairPrincipals}) with a
26
+ * cluster-verified eviction — the APPLIER especially, whose records-KV last-value write is
27
+ * visible to a normal reader regardless of the frontier cutoff (#4);
28
+ * 6. the exact-pool terminal cleaner ({@link runExactPoolCleaner}) under a DISTINCT,
29
+ * separately minted, bounded-lived profile per (op × endpoint), then — BEFORE any frontier
30
+ * records — revoke the cleaner's own credential and cluster-verify eviction of its
31
+ * principal (the §13.1 cleaner fence: no in-flight cleaner can ACK a redelivery or write a
32
+ * terminal after the alias is reused);
33
+ * 7. record the per-stream retirement frontiers (`frontier.<lifecycleUid>`, create-only,
34
+ * never deleted — the cutoffs that bound the predecessor's half-open interval);
35
+ * 8. CAS the gate `frozen → retired` (terminal; unlike takeover, never reopened);
36
+ * 9. CAS the head `retiring → retired` — only now is the alias replaceable, and `retired`
37
+ * ASSERTS the completed barrier.
38
+ *
39
+ * FAIL-CLOSED CONTRACT: any failure after the freeze leaves the gate FROZEN and the head at its
40
+ * current containment state (nothing mints, the alias is not replaceable); eviction failure is
41
+ * `unavailable`; a live, unexpired, FOREIGN-target pool item is never settled or ACKed and the
42
+ * barrier refuses to close frontiers while one remains (§13.9).
43
+ *
44
+ * SURFACE: NOTHING here is exported from the package index (the same discipline as the
45
+ * takeover barrier); production wiring lands with the activation slices. The executor seam is
46
+ * the sealed registry; an `opId` is an identifier, never a bearer capability.
47
+ */
48
+ import { type JetStreamClient, type JetStreamManager } from "@nats-io/jetstream";
49
+ import { type WorkPoolContext, type WorkItemRef, type WorkTerminalFact } from "@cotal-ai/core";
50
+ import { type LifecycleRegistry } from "./lifecycle-registry.js";
51
+ import { type TakeoverDeps } from "./credential-ledger.js";
52
+ /** One endpoint's EXACT pool list for the cleaner step — the cleaner profile's grant is minted
53
+ * from these (§13.9: never a pool wildcard). The barrier DISCOVERS this inventory from the
54
+ * target's own accepted pool obligations (#F); it takes no caller-supplied hint. */
55
+ export interface RetirementPoolSpec {
56
+ endpoint: string;
57
+ pools: string[];
58
+ }
59
+ /** The durable retirement intent at `stage.<opId>` — captured BEFORE the freeze; every resumed
60
+ * step works from these SAME coordinates ({@link resumeAgentRetirement}). */
61
+ export interface RetirementIntent {
62
+ kind: "retirement";
63
+ lifecycleUid: string;
64
+ owner: string;
65
+ actor: string;
66
+ /** The gate generation the barrier freezes at (a retirement freeze never reopens, so there is
67
+ * no successor generation — the gate terminalizes at this one). */
68
+ fromGeneration: number;
69
+ /** The streams whose last sequence the frontier step records (§13.1: the deployment's
70
+ * lifecycle-bounded streams). */
71
+ frontierStreams: string[];
72
+ }
73
+ /** The cleaner's bind: JS handles over the cleaner's OWN authenticated connection (the
74
+ * separately minted, bounded-lived, exact-pool profile — NEVER the executor's or the revoked
75
+ * owner's connection) plus the CONNZ-attributable principal of that connection, which the
76
+ * barrier verified-evicts at the cleaner fence. */
77
+ export interface PoolCleanerBind {
78
+ jsm: JetStreamManager;
79
+ js: JetStreamClient;
80
+ principal: string;
81
+ }
82
+ /** The settlement executor's bind: a space-bonded {@link WorkPoolContext} DERIVED from the
83
+ * executor's OWN authenticated connection (the separately minted, op-bounded settlement
84
+ * profile, SPEC 13.9 "Retirement settlement"; never the cleaner's bind and never the barrier's
85
+ * standing connection, so the settlement rights and the settlement code sit on ONE connection)
86
+ * plus that connection's CONNZ-attributable principal, which the barrier verified-evicts at
87
+ * the fence alongside the cleaner's. */
88
+ export interface RetirementExecutorBind {
89
+ work: WorkPoolContext;
90
+ principal: string;
91
+ }
92
+ /** The retirement barrier's injected capabilities — the takeover deps plus the retirement-only
93
+ * seams. Every seam is deployment-owned mechanics; the barrier owns the ORDER and the
94
+ * verification. */
95
+ export interface RetirementDeps extends TakeoverDeps {
96
+ /** Drive ONE endpoint's obligations under the retiring target to §13.8 quiescence (wire to
97
+ * `drainTargetForEndpoint` over that endpoint's admission mediator). `opId` is the barrier's
98
+ * own durable operation id: the drain's per-op repair credentials (the confined
99
+ * commit-applier and pool-route reconciler) mint under it, so their principals are
100
+ * op-attributable and op-bounded. The barrier re-checks
101
+ * quiescence itself afterward; a drain that lied fails the barrier, not the invariant. */
102
+ drainTargetObligations: (endpoint: string, targetUid: string, opId: string) => Promise<void>;
103
+ /** Mint + connect the DISTINCT bounded-lived cleaner profile for (op × endpoint), granted
104
+ * exactly the listed pools (§13.9 cleaner row). */
105
+ openCleaner: (args: {
106
+ opId: string;
107
+ endpoint: string;
108
+ pools: string[];
109
+ }) => Promise<PoolCleanerBind>;
110
+ /** Revoke the cleaner bind's credential (the deny-new half) and release its resources. The
111
+ * barrier then verified-evicts the bind's principal itself (the kill-live half). Called on
112
+ * BOTH the success and the failure path — a wedged barrier never leaves a live cleaner. */
113
+ retireCleanerCredential: (bind: PoolCleanerBind) => Promise<void>;
114
+ /** Mint + connect the DISTINCT bounded-lived settlement-executor profile for (op × endpoint),
115
+ * granted exactly the listed pools' settlement rows (§13.9 "Retirement settlement": the lease
116
+ * CAS + `wrk` terminal publish + the leader-served EPF/records fencing reads; NO EPW read, that
117
+ * live-entry probe is unreachable from the settlement path). The barrier builds the settlement
118
+ * seam over THIS bind's work context, never its own standing connection. */
119
+ openExecutor: (args: {
120
+ opId: string;
121
+ endpoint: string;
122
+ pools: string[];
123
+ }) => Promise<RetirementExecutorBind>;
124
+ /** Revoke the executor bind's credential (the deny-new half); the barrier verified-evicts its
125
+ * principal too. Same discipline as the cleaner: called on success AND failure paths. */
126
+ retireExecutorCredential: (bind: RetirementExecutorBind) => Promise<void>;
127
+ /** The executor's clock (the `workExpiry` comparisons and the terminal-fact timestamps). */
128
+ now: () => number;
129
+ /** Cleaner pacing knobs (tests tighten them; production defaults hold). */
130
+ cleaner?: {
131
+ fetchExpiresMs?: number;
132
+ maxStalledPasses?: number;
133
+ };
134
+ }
135
+ /** What one pool's cleaning pass settled. */
136
+ export interface PoolCleanResult {
137
+ /** Messages ACKed because their item was ALREADY durably terminal. */
138
+ ackedTerminal: number;
139
+ /** Items this run settled `expired` (their own `workExpiry` passed). */
140
+ settledExpired: number;
141
+ /** Items this run settled `retired` (re-bound to the retiring target via their acceptance). */
142
+ settledRetired: number;
143
+ }
144
+ /** Executor-authority settlement seam. The cleaner supplies only delivery identity/bytes and a
145
+ * requested disposition; the implementation is closed over the durable retirement intent and
146
+ * independently re-derives every authority coordinate before touching the lease. */
147
+ export type SettleRetirementPoolItem = (args: {
148
+ ref: WorkItemRef;
149
+ itemBytes: Uint8Array;
150
+ disposition: "expired" | "retired";
151
+ }) => Promise<WorkTerminalFact>;
152
+ /**
153
+ * Run the exact-pool terminal cleaner over ONE named pool (§13.9 matrix row), on the CLEANER's
154
+ * own bind. Bind-time re-proof first: the pre-created durable's filter is exactly the named
155
+ * pool's subtree, pull mode, explicit ack, unlimited delivery ceiling. Then drain to a PROVEN
156
+ * quiescent pool: for each delivered message — ACK only if the item is durably terminal; settle
157
+ * `expired` when its own `workExpiry` passed (any target); settle `retired` ONLY after
158
+ * re-binding the item to THIS operation's retiring target through its acceptance decision fact
159
+ * (the `epw` subject carries no target); a live, unexpired, FOREIGN-target item is never
160
+ * settled or ACKed and quiescence fails loud while one remains. Quiescence is a FRESH consumer
161
+ * read showing zero `num_pending` and zero `num_ack_pending` (pre-existing owner ACKs drain
162
+ * through `AckWait` redelivery into this loop).
163
+ */
164
+ export declare function runExactPoolCleaner(bind: PoolCleanerBind, args: {
165
+ space: string;
166
+ endpoint: string;
167
+ pool: string;
168
+ /** Executor-authority, effective-inventory-closed lease/terminal seam; never cleaner-owned handles. */
169
+ settleItem: SettleRetirementPoolItem;
170
+ /** The retiring target this operation may re-bind items to. */
171
+ targetUid: string;
172
+ now: () => number;
173
+ fetchExpiresMs?: number;
174
+ maxStalledPasses?: number;
175
+ }): Promise<PoolCleanResult>;
176
+ /** The barrier's outcome (durable facts, re-readable on resume; a resume that found the work
177
+ * already done reports zero counts, exactly the takeover discipline). */
178
+ export interface RetirementResult {
179
+ opId: string;
180
+ lifecycleUid: string;
181
+ revokedRows: number;
182
+ evictedPrincipals: string[];
183
+ /** Endpoints whose obligations the drain step drove (discovery order, sorted). */
184
+ drainedEndpoints: string[];
185
+ /** Per `<endpoint>/<pool>` cleaning counts for the pools THIS run cleaned. */
186
+ cleaned: Record<string, PoolCleanResult>;
187
+ /** The recorded per-stream retirement frontiers. */
188
+ frontiers: Record<string, number>;
189
+ }
190
+ /** Build the effective-inventory-closed executor settlement seam (§13.9): the returned function
191
+ * runs under the barrier's op-bounded authority and refuses any ref outside its effective
192
+ * inventory (the barrier-discovered `spec.pools`, the accepted `oblig.<uid>.>` routes) or
193
+ * this retirement's lifecycle — a foreign endpoint or a pool outside its discovered spec, an
194
+ * unaccepted or non-pool decision, expiring a live item, or retiring an item accepted for a
195
+ * target outside this intent's lifecycle. The cleaner chooses refs; it can never borrow this
196
+ * authority beyond its discovered inventory or this retirement's lifecycle (the confused-deputy
197
+ * closure). */
198
+ export declare function settlementForIntent(work: WorkPoolContext, intent: RetirementIntent, spec: RetirementPoolSpec, space: string, opId: string, now: () => number): SettleRetirementPoolItem;
199
+ /**
200
+ * Run the FULL terminal retirement barrier for a managed-agent lifecycle (SPEC 13.1, in the
201
+ * normative order — module header). Idempotent/crash-resumable: every step re-checks durable
202
+ * state, so calling it again with the SAME `opId` (directly or via
203
+ * {@link resumeAgentRetirement}) finishes the same operation; a different operation's freeze, a
204
+ * foreign generation movement, or a stranger's opId refuses before any CAS.
205
+ */
206
+ export declare function runAgentRetirementBarrier(reg: LifecycleRegistry, args: {
207
+ owner: string;
208
+ actor: string;
209
+ lifecycleUid: string;
210
+ opId: string;
211
+ frontierStreams: string[];
212
+ }, deps: RetirementDeps): Promise<RetirementResult>;
213
+ /** Resume a crashed retirement from its durable intent alone (`{ opId }` — SPEC 13.1). Re-runs
214
+ * {@link runAgentRetirementBarrier} with the intent's own coordinates; a stranger's opId (no
215
+ * intent) is `not-found`. */
216
+ export declare function resumeAgentRetirement(reg: LifecycleRegistry, opId: string, deps: RetirementDeps): Promise<RetirementResult>;
217
+ //# sourceMappingURL=retirement-barrier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retirement-barrier.d.ts","sourceRoot":"","sources":["../src/retirement-barrier.ts"],"names":[],"mappings":"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"}