@cotal-ai/auth 0.12.0 → 0.13.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.
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,352 @@
1
+ /**
2
+ * The SEALED auth-ledger scanner: the LastPerSubject enumeration over the space's ONE auth KV
3
+ * stream (`KV_cotal_auth_<space>`), and the ONLY place a `CONSUMER.CREATE` on that stream lives.
4
+ *
5
+ * WHY IT EXISTS (SPEC 13.9, the 46e778f + 4cf1e2f4 re-verify): a consumer-create request BODY is
6
+ * NOT subject-ACL confinable — the extended `CONSUMER.CREATE.<stream>.<name>.<filter>` grant still
7
+ * admits a `durable_name` + PUSH `deliver_subject` body (nats-server#8274), i.e. a durable exporter
8
+ * of every current/future auth row that SURVIVES the holder's connection and JWT revoke. So NO
9
+ * standing or runtime-reachable credential (the barrier, the admission mediator, the session path,
10
+ * the piece-2 executor) may hold `CONSUMER.CREATE` on an authority stream. The dynamic-enumeration
11
+ * CREATE lives ONLY here.
12
+ *
13
+ * THE SEAL (fact/security first-pass blockers, this round):
14
+ * - the composition OWNS ITS AUTHORITY: {@link openAuthLedgerScannerCandidate} opens a DEDICATED, minimal
15
+ * credential+connection ({@link authorityScannerGrants}: exactly the one literal consumer name's
16
+ * CREATE/INFO/NEXT/DELETE + the stream shape read, nothing else) and never exposes it. No caller
17
+ * receives the raw `NatsConnection`, the JWT/seed, the grant builder, or a raw-prefix scan — only
18
+ * the CLOSED, validated ops below, each of which forces its exact filter from a validated id.
19
+ * `close()` tears the owned client down.
20
+ * - Honest boundary (security's wording correction): the broker necessarily authenticates this
21
+ * connection, so "network-stealable" is the wrong frame. The property is that the JWT, the user
22
+ * seed, the authenticator, and the raw connection NEVER reach a caller/runtime surface, a child
23
+ * process, a log, or persistence. A process-memory compromise of the trusted auth service reaches
24
+ * this CREATE — the SAME residual class as the data-account signing seed the process already holds
25
+ * — not broker confinement and not a leaked credential.
26
+ *
27
+ * THE SCAN (why LastPerSubject, no fence): under the normative history=1 auth store a same-subject
28
+ * `active→revoked` overwrite EVICTS the pre-scan revision, so a seq/INFO cutoff (the rejected
29
+ * `next_by_subj@B` walk) would then DROP that subject and leave its holder un-revoked. A
30
+ * LastPerSubject consumer carries NO upper fence: it delivers each subject's CURRENT last, so a
31
+ * concurrent overwrite is SEEN, never dropped. Security's least-privilege + completeness pins:
32
+ * - ONE exact literal consumer name; every scan over this stream SERIALIZES on one critical
33
+ * section (fail-closed pre-clean → create → full bind-verify → drain to a re-proved zero →
34
+ * unconditional delete), so concurrent callers never share, steal, or delete each other's read.
35
+ * - the config is FORCED — pull (no `deliver_subject`), ephemeral (no `durable_name`),
36
+ * `AckPolicy.None`, `DeliverPolicy.LastPerSubject`, memory storage, bounded inactivity. The
37
+ * bind-verify re-reads the created consumer and refuses if ANY forced field drifted.
38
+ * - pre-clean is FAIL-CLOSED and PROVES absence: it proceeds only on a confirmed delete
39
+ * (`delete(...) === true`) or a structured ConsumerNotFound; a `false` return or any other error
40
+ * (timeout/permission/leader) fails the scan. Final cleanup is unconditional; a leaked orphan is
41
+ * collected by the bounded inactivity and pre-cleaned next run.
42
+ * - completeness is FAIL-CLOSED: the drain re-reads `num_pending` and stops only at a freshly
43
+ * observed zero (never a stale initial count), so a subject overwritten WHILE draining is fetched
44
+ * in a later round; last-write-wins by subject keeps the current row. A run that cannot reach the
45
+ * fresh zero (unbounded churn, a stuck delivery) fails closed rather than looping.
46
+ * - the injected scanner is BRANDED to its exact space ({@link assertScannerSpace}): the barrier
47
+ * registry rejects a hand-assembled or foreign-space scanner, so enumeration can never be
48
+ * silently empty/foreign and let a barrier advance over live descendants.
49
+ *
50
+ * CAPABILITY INTEGRITY + SERIALIZATION (panel HIGHs on the seal claim):
51
+ * - the returned handle is FROZEN: the brand proves construction identity, the freeze proves the
52
+ * reference's ops are still the module's (a post-brand `scanStageFamily = async () => []` swap
53
+ * throws instead of surviving the injection assert). The ops close over module-private state, so
54
+ * the frozen handle carries the registry's frozen-marker seal's integrity in one object. The
55
+ * swap vector was reachable only from inside the trusted process (the signing-seed residual
56
+ * class above), never externally; it is refused anyway because the invariant must be enforced,
57
+ * not asserted.
58
+ * - the serialization critical section lives at MODULE level, keyed by space, so a second branded
59
+ * same-space instance (however composed) shares the ONE chain and can never interleave
60
+ * pre-clean/create/fetch/delete on the literal name with a live scan (a per-instance lock cannot
61
+ * see a sibling instance). Cross-PROCESS duplication is the two-authority-planes split-brain
62
+ * class, excluded by the one-plane-per-space composition; a foreign re-resolution of the name is
63
+ * made loud by the per-message exact-prefix validation in the drain.
64
+ */
65
+ import { AckPolicy, DeliverPolicy, JetStreamApiCodes, JetStreamApiError, jetstream, jetstreamManager } from "@nats-io/jetstream";
66
+ import { EpEnvelopeError, assertInboxConnId, assertLifecycleToken, epAuthBucket } from "@cotal-ai/core";
67
+ import { openAuthorityClient } from "./authority-client.js";
68
+ /** The ONE literal consumer name every scan over the auth stream reuses (the grant pins exactly
69
+ * this token). Scans over it serialize on the MODULE-LEVEL per-space chain below, never a
70
+ * per-instance lock, so a sibling instance can never delete a live read. */
71
+ const SCANNER_CONSUMER_NAME = "cotal-ledger-scan";
72
+ /** fact-5 ENFORCED (panel HIGH): the serialization critical section for a space's literal consumer
73
+ * name lives at MODULE level, keyed by space, shared by every instance for that space. */
74
+ const SPACE_SCAN_CHAINS = new Map();
75
+ const serializedForSpace = (space, fn) => {
76
+ const tail = SPACE_SCAN_CHAINS.get(space) ?? Promise.resolve();
77
+ const run = tail.then(fn, fn);
78
+ SPACE_SCAN_CHAINS.set(space, run.then(() => undefined, () => undefined));
79
+ return run;
80
+ };
81
+ /** Bounded inactivity (ns): a leaked orphan (a run that crashed before its unconditional delete)
82
+ * is broker-collected within this window, and the next run's pre-clean removes it by name. */
83
+ const INACTIVE_THRESHOLD_NS = 30_000_000_000;
84
+ /** Drain bounds (fail-closed, not spin). A LastPerSubject consumer over a quiescent family settles
85
+ * to zero pending in a handful of rounds; a concurrent same-subject overwrite (a mint that won its
86
+ * fence, or a crashing revoker) adds at most a bounded burst that the next round re-reads and
87
+ * drains. NOT "a frozen gate permits no new family writes" — the staged-mint/concurrent-revoke
88
+ * analysis disproves that; the completeness fence is the freshly-observed zero, and a run that
89
+ * cannot reach it (unbounded churn, a stuck delivery) fails closed rather than looping. */
90
+ const MAX_DRAIN_ROUNDS = 4096;
91
+ /** Consecutive rounds that observe pending > 0 yet deliver nothing before the scan fails closed —
92
+ * a consumer that claims pending but never delivers is a completeness hazard, not a slow one. */
93
+ const MAX_NO_PROGRESS_ROUNDS = 8;
94
+ /** One KV key segment (no dots — the separator — no wildcards): the closed ops validate every
95
+ * id token before it forms a filter, so a dot/wildcard can never widen the scan. */
96
+ const KEY_SEGMENT = /^[A-Za-z0-9_-]+$/;
97
+ function assertSegment(v, what) {
98
+ if (!KEY_SEGMENT.test(v))
99
+ throw new EpEnvelopeError("failed-precondition", `the sealed scanner's ${what} ${JSON.stringify(v)} is not a KV-safe key segment (SPEC 13.9)`);
100
+ return v;
101
+ }
102
+ /** STRUCTURAL not-found classification (not a message regex): @nats-io/jetstream@3.4.0 throws a
103
+ * ConsumerNotFoundError extends JetStreamApiError whose `.code` is the JS API err_code
104
+ * (`JetStreamApiCodes.ConsumerNotFound` = 10014); `.status` is the HTTP 404. The pre-clean proceeds
105
+ * ONLY on this exact structured shape — any other error fails the scan closed. */
106
+ const isConsumerNotFound = (e) => e instanceof JetStreamApiError && e.code === JetStreamApiCodes.ConsumerNotFound;
107
+ /** The production scanner's BRAND (HIGH: security/distsys, site-1 re-verify): the ONLY way to be an
108
+ * AuthLedgerScanner the barrier registry accepts is to be built by {@link buildScanner} in THIS
109
+ * module, which pins the scanner's exact space. A hand-assembled structural object (e.g. one whose
110
+ * ops return `[]`) or a real scanner for a DIFFERENT space is rejected by {@link assertScannerSpace},
111
+ * so a barrier can never enumerate an empty/foreign family and advance over live descendants. */
112
+ const SCANNER_BRAND = new WeakMap();
113
+ /** Assert `scanner` was built by this module for exactly `space` — the registry's space-bond and
114
+ * anti-hand-assembly discipline extended to the injected scanner (SPEC 13.12/13.9). */
115
+ export function assertScannerSpace(scanner, space) {
116
+ const bonded = SCANNER_BRAND.get(scanner);
117
+ if (bonded === undefined)
118
+ throw new EpEnvelopeError("failed-precondition", "the injected auth-ledger scanner was not built by openAuthLedgerScannerCandidate/makeLedgerScannerOverConnection; a hand-assembled scanner never authorizes an enumeration (SPEC 13.12)");
119
+ if (bonded !== space)
120
+ throw new EpEnvelopeError("failed-precondition", `the injected auth-ledger scanner is bonded to space ${JSON.stringify(bonded)}, not ${JSON.stringify(space)}; a foreign-space scanner would enumerate the wrong (or an empty) family and let a barrier advance over live descendants (SPEC 13.1/13.12)`);
121
+ }
122
+ /**
123
+ * Open the sealed auth-ledger scanner CANDIDATE over the space's auth stream: a DEDICATED
124
+ * self-minted plane-owned connection carrying ONLY {@link authorityScannerGrants}. The connection,
125
+ * credential, and raw scan are never handed out; the scan capability itself does not exist until
126
+ * the plane claim is won ({@link LedgerScannerCandidate.activate}).
127
+ */
128
+ export async function openAuthLedgerScannerCandidate(opts) {
129
+ const client = await openAuthorityClient({
130
+ server: opts.server, space: opts.space, dataAccount: opts.dataAccount, label: `cotal:auth-scan:${opts.space}`,
131
+ grants: (id) => authorityScannerGrants(opts.space, id), log: opts.log, planeCandidate: true,
132
+ });
133
+ // planeCandidate guarantees both (openAuthorityClient throws otherwise); the assert keeps the
134
+ // contract loud if that shape ever drifts.
135
+ if (client.tuple === undefined || client.gone === undefined)
136
+ throw new EpEnvelopeError("internal", "a plane-candidate authority client carries a tuple and a gone signal by contract (SPEC 13.13)");
137
+ let activated = false;
138
+ let closed = false;
139
+ return {
140
+ tuple: client.tuple,
141
+ gone: client.gone,
142
+ activate: (guard) => {
143
+ if (closed)
144
+ throw new EpEnvelopeError("failed-precondition", "this auth-ledger scanner candidate is closed (a losing plane open never activates)");
145
+ if (activated)
146
+ throw new EpEnvelopeError("failed-precondition", "this auth-ledger scanner candidate is already activated (one branded scanner per candidate)");
147
+ activated = true;
148
+ return buildScanner(client.nc, opts.space, () => client.close(), undefined, guard);
149
+ },
150
+ close: async () => {
151
+ closed = true;
152
+ await client.close();
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * TEST/SMOKE-ONLY: build the sealed scanner over an EXISTING connection. A plain-auth test broker
158
+ * has no data-account signing seed to self-mint a JWT, so the JWT-owning {@link openAuthLedgerScannerCandidate}
159
+ * (the PRODUCTION seam, which owns a dedicated credential+connection) does not apply. This factory's
160
+ * `close()` does NOT close the caller's connection (the harness owns it); it is never a production
161
+ * composition path and is never registered as a mintable profile.
162
+ */
163
+ export function makeLedgerScannerOverConnection(nc, space, probe, guard) {
164
+ return buildScanner(nc, space, async () => { }, probe, guard);
165
+ }
166
+ function buildScanner(nc, space, onClose, probe, guard) {
167
+ const bucket = epAuthBucket(space);
168
+ const stream = `KV_${bucket}`;
169
+ const keyPrefixLen = `$KV.${bucket}.`.length;
170
+ let jsmP;
171
+ let jsRef;
172
+ const jsmOf = () => (jsmP ??= jetstreamManager(nc));
173
+ const jsOf = () => (jsRef ??= jetstream(nc));
174
+ // Serialize every scan over the shared literal consumer name on the MODULE-LEVEL per-space
175
+ // chain: a second caller (or a sibling instance) waits rather than colliding on
176
+ // pre-clean/create/fetch/delete.
177
+ const serialized = (fn) => serializedForSpace(space, fn);
178
+ // The PLANE guard (#29 HIGH 3, SPEC 13.13), inside the serialized critical section: the claim
179
+ // is re-validated BEFORE the scan (refuse to enumerate under a lost claim) and AFTER it (a
180
+ // claim lost DURING the scan discards the result — a successor may already own the literal
181
+ // name). Intra-process serialization stays the module chain above; the guard is the
182
+ // CROSS-process authority.
183
+ const guarded = async (fn) => {
184
+ if (guard === undefined)
185
+ return fn();
186
+ await guard.assertHeld("before");
187
+ const out = await fn();
188
+ await guard.assertHeld("after");
189
+ return out;
190
+ };
191
+ // The RAW scan — MODULE-PRIVATE (a closure over the owned connection): no caller ever supplies
192
+ // `prefix`; the closed ops below force it from a validated id.
193
+ const scanOnce = async (prefix) => {
194
+ const jsm = await jsmOf();
195
+ const js = jsOf();
196
+ const filterBase = `$KV.${bucket}.${prefix}`; // every returned subject MUST start with this
197
+ const filter = `${filterBase}>`;
198
+ // 1. FAIL-CLOSED pre-clean: PROVE the literal name absent before create (a leftover from a run
199
+ // that crashed before its unconditional delete). Absence is proved ONLY by a confirmed delete
200
+ // (`delete(...) === true`) or a structured ConsumerNotFound; a `false` return, a timeout, a
201
+ // permission/leader error, or any other shape fails the scan (a surviving stale AckNone consumer
202
+ // with an outstanding pull could otherwise advance deliveries and make this run silently omit
203
+ // rows).
204
+ let provedAbsent = false;
205
+ try {
206
+ provedAbsent = (await jsm.consumers.delete(stream, SCANNER_CONSUMER_NAME)) === true;
207
+ }
208
+ catch (e) {
209
+ if (isConsumerNotFound(e))
210
+ provedAbsent = true;
211
+ else
212
+ throw new EpEnvelopeError("unavailable", `the sealed scanner could not prove its literal consumer absent on ${stream} before create (pre-clean fails closed, SPEC 13.9): ${e?.message ?? String(e)}`);
213
+ }
214
+ if (!provedAbsent)
215
+ throw new EpEnvelopeError("unavailable", `the sealed scanner's pre-clean did not confirm the literal consumer deleted or absent on ${stream}; refusing to create over an unproven consumer (fail-closed, SPEC 13.9)`);
216
+ // 2. Create with the FORCED config ONLY (the seam derives every field; no caller config).
217
+ try {
218
+ await jsm.consumers.add(stream, {
219
+ name: SCANNER_CONSUMER_NAME,
220
+ filter_subject: filter,
221
+ ack_policy: AckPolicy.None,
222
+ deliver_policy: DeliverPolicy.LastPerSubject,
223
+ mem_storage: true,
224
+ inactive_threshold: INACTIVE_THRESHOLD_NS,
225
+ });
226
+ }
227
+ catch (e) {
228
+ throw new EpEnvelopeError("unavailable", `the sealed scanner could not create its consumer on ${stream} (${prefix}); the scan fails closed (SPEC 13.9): ${e?.message ?? String(e)}`);
229
+ }
230
+ try {
231
+ // 3. FULL bind-verify: the created consumer must carry EXACTLY the forced shape — the exact
232
+ // name and single filter (no `filter_subjects` multi-filter), pull (no `deliver_subject`),
233
+ // ephemeral (no `durable_name`), AckNone/LastPerSubject, memory storage, the bounded exact
234
+ // inactivity. A drifted or foreign consumer of this name never feeds a scan.
235
+ const info = await jsm.consumers.info(stream, SCANNER_CONSUMER_NAME);
236
+ const cfg = info.config;
237
+ const drift = cfg.name !== SCANNER_CONSUMER_NAME ? `name=${cfg.name}` :
238
+ cfg.filter_subject !== filter ? `filter=${cfg.filter_subject}` :
239
+ (Array.isArray(cfg.filter_subjects) && cfg.filter_subjects.length > 0) ? `filter_subjects=${JSON.stringify(cfg.filter_subjects)}` :
240
+ cfg.deliver_subject !== undefined ? `deliver_subject=${cfg.deliver_subject}` :
241
+ cfg.durable_name !== undefined ? `durable=${cfg.durable_name}` :
242
+ cfg.ack_policy !== AckPolicy.None ? `ack=${cfg.ack_policy}` :
243
+ cfg.deliver_policy !== DeliverPolicy.LastPerSubject ? `deliver=${cfg.deliver_policy}` :
244
+ cfg.mem_storage !== true ? `mem_storage=${cfg.mem_storage}` :
245
+ cfg.inactive_threshold !== INACTIVE_THRESHOLD_NS ? `inactive_threshold=${cfg.inactive_threshold}` :
246
+ undefined;
247
+ if (drift !== undefined)
248
+ throw new EpEnvelopeError("failed-precondition", `the sealed scanner's consumer on ${stream} does not carry the forced pull/LastPerSubject shape (${drift}); refusing the scan (SPEC 13.9)`);
249
+ // SMOKE-ONLY race window: force a concurrent `active→revoked` overwrite between create and
250
+ // drain, so the history=1 proof runs against the real broker. Never set in production.
251
+ if (probe?.afterCreate)
252
+ await probe.afterCreate();
253
+ // 4. Drain to a FRESHLY-OBSERVED zero. `num_pending` is re-read each round (never a stale
254
+ // initial count): a subject delivered old (a@1) and then overwritten while draining (a@4)
255
+ // re-appears as pending and is fetched in a later round, so the result is one CURRENT row per
256
+ // subject. The completeness fence is num_pending===0 — NOT a per-fetch `got===want` assertion,
257
+ // which a concurrent eviction (a@1 replaced by a@4 between the info read and the fetch) would
258
+ // trip falsely. Last-write-wins by concrete subject, keeping the HIGHEST safe sequence.
259
+ const latest = new Map();
260
+ const consumer = await js.consumers.get(stream, SCANNER_CONSUMER_NAME);
261
+ let noProgress = 0;
262
+ for (let round = 0;; round++) {
263
+ const pending = (await consumer.info()).num_pending;
264
+ if (pending === 0)
265
+ break;
266
+ if (round >= MAX_DRAIN_ROUNDS)
267
+ throw new EpEnvelopeError("unavailable", `the sealed scanner under ${prefix} never settled to zero pending after ${round} rounds; the scan fails closed (SPEC 13.9)`);
268
+ const want = Math.min(pending, 256);
269
+ const iter = await consumer.fetch({ max_messages: want, expires: 5_000 });
270
+ let got = 0;
271
+ for await (const m of iter) {
272
+ got++;
273
+ // CLOSED subject validation: a delivered subject MUST start with the exact computed
274
+ // prefix before we slice its key (a foreign subject never enters the result).
275
+ if (!m.subject.startsWith(filterBase))
276
+ throw new EpEnvelopeError("internal", `the sealed scanner received subject ${m.subject} outside the forced prefix ${filterBase}; refusing (SPEC 13.9)`);
277
+ // Safe positive stream sequence before any ordering decision (a garbled/zero seq never
278
+ // wins a last-write-wins comparison).
279
+ if (!Number.isSafeInteger(m.seq) || m.seq <= 0)
280
+ throw new EpEnvelopeError("internal", `the sealed scanner received a non-positive/unsafe sequence ${m.seq} for ${m.subject}; refusing (SPEC 13.9)`);
281
+ const prev = latest.get(m.subject);
282
+ if (prev === undefined || m.seq > prev.seq)
283
+ latest.set(m.subject, { data: m.data, seq: m.seq, op: m.headers?.get("KV-Operation") || undefined });
284
+ }
285
+ // SMOKE-ONLY mid-drain race window: fire once after the FIRST fetch so a test can overwrite
286
+ // an already-delivered subject and prove the fresh-zero re-read (not a stale local count)
287
+ // picks up the new revision in a later round. Never set in production.
288
+ if (round === 0 && probe?.afterFirstFetch)
289
+ await probe.afterFirstFetch();
290
+ // A round that observed pending > 0 yet delivered nothing makes no progress toward the
291
+ // fresh zero; a bounded run of those fails closed rather than looping to the round cap.
292
+ if (got === 0) {
293
+ if (++noProgress >= MAX_NO_PROGRESS_ROUNDS)
294
+ throw new EpEnvelopeError("unavailable", `the sealed scanner under ${prefix} reported pending but delivered nothing for ${noProgress} rounds; the scan fails closed (SPEC 13.9)`);
295
+ }
296
+ else {
297
+ noProgress = 0;
298
+ }
299
+ }
300
+ const out = [];
301
+ for (const [subject, v] of latest)
302
+ out.push({ key: subject.slice(keyPrefixLen), data: v.data, seq: v.seq, op: v.op });
303
+ return out;
304
+ }
305
+ finally {
306
+ // 5. Unconditional cleanup (a leaked orphan is collected by the bounded inactivity).
307
+ try {
308
+ await jsm.consumers.delete(stream, SCANNER_CONSUMER_NAME);
309
+ }
310
+ catch { /* orphan collected by inactivity */ }
311
+ }
312
+ };
313
+ // FROZEN before branding (capability integrity): the brand keys this exact reference, and the
314
+ // freeze guarantees its ops are still the module's when an install seam asserts the brand — a
315
+ // post-brand method swap throws (strict mode) instead of surviving as a silent-empty scanner.
316
+ const scanner = Object.freeze({
317
+ scanCredentialFamily: (lifecycleUid) => serialized(() => guarded(() => scanOnce(`cred.${assertLifecycleToken(lifecycleUid)}.`))),
318
+ scanBysrc: (issuerKeyId, id) => serialized(() => guarded(() => scanOnce(`bysrc.${assertSegment(issuerKeyId, "issuerKeyId")}.${assertSegment(id, "handle id")}.`))),
319
+ scanStageFamily: () => serialized(() => guarded(() => scanOnce("stage."))),
320
+ scanSessions: () => serialized(() => guarded(() => scanOnce("session."))),
321
+ close: onClose,
322
+ });
323
+ // BRAND the scanner with its exact space so the barrier registry's assertScannerSpace can reject a
324
+ // hand-assembled or foreign-space scanner (a structural object can never enter the WeakMap).
325
+ SCANNER_BRAND.set(scanner, space);
326
+ return scanner;
327
+ }
328
+ /**
329
+ * The SEALED SCANNER's credential grant on the AUTH stream (SPEC 13.9): exactly the ONE literal
330
+ * enumeration consumer's lifecycle (CREATE/INFO/NEXT/DELETE pinned to {@link SCANNER_CONSUMER_NAME})
331
+ * + the stream shape read + the scoped inbox. This is the ONLY profile that holds `CONSUMER.CREATE`
332
+ * on `KV_cotal_auth_<space>`; {@link openAuthLedgerScannerCandidate} opens it for the trusted process and it
333
+ * is NEVER registered as an external/mintable profile. The bucket is DERIVED from the validated
334
+ * space and the name is the module constant, so no caller-supplied token forms a privileged subject.
335
+ */
336
+ export function authorityScannerGrants(space, connId) {
337
+ const bucket = epAuthBucket(space);
338
+ const stream = `KV_${bucket}`;
339
+ const inbox = assertInboxConnId(connId);
340
+ return {
341
+ publish: [
342
+ "$JS.API.INFO",
343
+ `$JS.API.STREAM.INFO.${stream}`,
344
+ `$JS.API.CONSUMER.CREATE.${stream}.${SCANNER_CONSUMER_NAME}.$KV.${bucket}.>`,
345
+ `$JS.API.CONSUMER.INFO.${stream}.${SCANNER_CONSUMER_NAME}`,
346
+ `$JS.API.CONSUMER.MSG.NEXT.${stream}.${SCANNER_CONSUMER_NAME}`,
347
+ `$JS.API.CONSUMER.DELETE.${stream}.${SCANNER_CONSUMER_NAME}`,
348
+ ],
349
+ subscribe: [`_INBOX_${inbox}.>`],
350
+ };
351
+ }
352
+ //# sourceMappingURL=ledger-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-scanner.js","sourceRoot":"","sources":["../src/ledger-scanner.ts"],"names":[],"mappings":"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"}
package/dist/ledger.d.ts CHANGED
@@ -26,6 +26,12 @@ export interface ActorRow {
26
26
  * defining shape), REFUSED in an interactive row (readRow fails closed on either violation).
27
27
  * The plaintext secret is returned ONCE at grant time and never persisted. */
28
28
  tokenHash?: string;
29
+ /** The incarnation's lifecycle UID (SPEC §13.1): the value the auth callout mints this agent's
30
+ * lifecycle-keyed grants from (`dm_…-<uid>`/`dlv_…-<uid>`/`chathist_…-<uid>`), rotated with the
31
+ * row on each (re)spawn — a same-name successor's row carries a fresh uid, so a stale bearer's
32
+ * next mint can never name the successor's broker resources. Absent on legacy/interactive rows:
33
+ * the callout refuses to mint agent creds without one (the v0.4 hard cut). */
34
+ lifecycleUid?: string;
29
35
  /** ISO timestamp of the grant (audit). */
30
36
  grantedAt: string;
31
37
  }
@@ -109,5 +115,6 @@ export declare function ledgerAuthorizeAgentExchange(dir: string, owner: string,
109
115
  allowPublish: string[];
110
116
  role?: string;
111
117
  parent?: string;
118
+ lifecycleUid?: string;
112
119
  };
113
120
  //# sourceMappingURL=ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
package/dist/ledger.js CHANGED
@@ -36,7 +36,7 @@
36
36
  import { createHash, randomBytes, timingSafeEqual } from "node:crypto";
37
37
  import { closeSync, constants, existsSync, fstatSync, lstatSync, openSync, readdirSync, readFileSync, renameSync, rmSync } from "node:fs";
38
38
  import { join } from "node:path";
39
- import { assertDerivedOwnerToken, assertValidChannel, assertValidOwnerToken, mkSecretDir, patternInAllow, writeSecretFile, } from "@cotal-ai/core";
39
+ import { assertDerivedOwnerToken, assertValidChannel, assertValidOwnerToken, mintLifecycleUid, mkSecretDir, patternInAllow, writeSecretFile, } from "@cotal-ai/core";
40
40
  const ACTORS_DIR = "actors";
41
41
  const MANAGED_DIR = "managed-actors";
42
42
  const LEDGER_VER = 1;
@@ -203,7 +203,12 @@ export function grantActor(dir, row) {
203
203
  const managedRefusal = () => new Error(`actor "${row.actor}" is a managed agent - its grant is owned by the spawn lifecycle (respawn rewrites it, despawn revokes it); pick another actor name for an interactive grant`);
204
204
  if (findIn(dir, "managed-agent", row.owner, row.actor))
205
205
  throw managedRefusal();
206
- const full = { ...row, grantedAt: new Date().toISOString() };
206
+ // Every row carries a lifecycle UID (SPEC 13.1): the callout mints the agent's lifecycle-keyed
207
+ // grant names from it and refuses rows without one. An interactive (operator-authored) grant IS
208
+ // its lifecycle, so the writer mints one here when the caller did not; a re-grant (upsert)
209
+ // rotates it like the managed space does — an interactive session pre-creates no durables, so
210
+ // rotation orphans nothing.
211
+ const full = { ...row, lifecycleUid: row.lifecycleUid ?? mintLifecycleUid(), grantedAt: new Date().toISOString() };
207
212
  writeRow(dir, "interactive", full);
208
213
  // Post-write compensation for the check-then-write race (an operator grant racing a spawn for
209
214
  // the same name): if the OTHER space's row appeared meanwhile, remove the just-written row and
@@ -310,7 +315,9 @@ export function grantManagedActor(dir, row) {
310
315
  const shadowRefusal = () => new Error(`actor "${row.actor}" already has an interactive grant - a managed agent cannot shadow it; revoke it first (\`cotal actor revoke ${row.actor}\`) or spawn under another name`);
311
316
  if (findIn(dir, "interactive", row.owner, row.actor))
312
317
  throw shadowRefusal();
313
- const full = { ...row, grantedAt: new Date().toISOString() };
318
+ // Same rule as grantActor: every row carries a lifecycle UID; the spawn path passes the one it
319
+ // provisioned durables under, and a direct caller without one gets a fresh mint (never absent).
320
+ const full = { ...row, lifecycleUid: row.lifecycleUid ?? mintLifecycleUid(), grantedAt: new Date().toISOString() };
314
321
  writeRow(dir, "managed-agent", full);
315
322
  // Symmetric post-write compensation (see grantActor) — at most one surviving row per principal.
316
323
  if (findIn(dir, "interactive", row.owner, row.actor)) {
@@ -346,7 +353,13 @@ export function ledgerAuthorizeGrant(dir) {
346
353
  throw new Error(`actor "${actor}" is a managed agent - it authenticates with its own spawn-time secret; interact with it via the mesh, or respawn it with \`cotal spawn\``);
347
354
  throw new Error(`actor "${actor}" is not granted for this user - the mesh operator lets them in with \`cotal actor grant ${actor} --owner ${owner}\` (or --sub <their IdP subject>, printed by their \`cotal login\`)`);
348
355
  }
349
- return { scope: row.scope, ...(row.parent ? { parent: row.parent } : {}) };
356
+ // MINT-boundary lifecycle stamp (SPEC 13.1): EVERY minted bearer - view or not - carries the
357
+ // row's current uid, so the connect boundary's exact-equality gate has a claim to check. A
358
+ // row without one is a pre-cut grant and cannot mint (re-grant rotates one in); minting a
359
+ // claimless bearer here would only defer the same refusal to every connect it attempts.
360
+ if (!row.lifecycleUid)
361
+ throw new Error(`actor "${actor}" has no lifecycleUid on its ledger row - re-grant it (bearers are lifecycle-bound from v0.4)`);
362
+ return { scope: row.scope, ...(row.parent ? { parent: row.parent } : {}), lifecycleUid: row.lifecycleUid };
350
363
  };
351
364
  }
352
365
  /** The callout's `authorizeActor` hook (CONNECT boundary): the row must still exist — in EITHER
@@ -362,6 +375,19 @@ export function ledgerAuthorizeConnect(dir) {
362
375
  for (const s of t.act.scope ?? [])
363
376
  if (!granted.has(s))
364
377
  throw new Error(`bearer scope "${s}" exceeds the actor's current grant - re-login to mint a fresh bearer`);
378
+ // LIFECYCLE EQUALITY (SPEC 13.1, EVERY bearer - no view carve-out): the bearer must name the
379
+ // CURRENT row's lifecycle uid EXACTLY. Row existence + scope alone would let a predecessor
380
+ // incarnation's still-unexpired bearer connect after a same-alias respawn/re-grant and be
381
+ // minted the SUCCESSOR's authority - for a non-view bearer that is the agent's exact
382
+ // lifecycle-keyed broker grants (the resolver reads the current row); for a VIEW bearer it is
383
+ // worse: the full ELEVATED profile (admin/purger/deployer), which never touches the resolver.
384
+ // SPEC "every minted connection also carries its lifecycle UID" + "re-authorized against the
385
+ // live grant ledger at every connect" covers views too. No missing-claim fallback: a
386
+ // claimless bearer of either shape is a pre-cut or forged shape and is refused.
387
+ if (t.act.lifecycleUid === undefined)
388
+ throw new Error("bearer carries no lifecycle claim - re-exchange for a fresh bearer (lifecycle-bound from v0.4)");
389
+ if (t.act.lifecycleUid !== row.lifecycleUid)
390
+ throw new Error(`bearer lifecycle ${t.act.lifecycleUid} is not the actor's current incarnation - the alias was respawned; re-exchange for a fresh bearer`);
365
391
  };
366
392
  }
367
393
  /** The channel-ACL resolver over this ledger — the ONE resolver both the callout permission
@@ -373,7 +399,28 @@ export function ledgerAclResolver(dir) {
373
399
  const row = findActorUnified(dir, t.owner, t.act.actor);
374
400
  if (!row)
375
401
  throw new Error(`actor "${t.act.actor}" has no ledger row - no channel ACL to mint`);
376
- return { allowSubscribe: row.allowSubscribe, allowPublish: row.allowPublish, ...(row.role ? { role: row.role } : {}) };
402
+ // The row's recorded lifecycle UID is what the callout mints the agent's lifecycle-keyed
403
+ // dm/dlv/chathist grants from (SPEC 13.1) — a row without one cannot mint an agent credential
404
+ // (core's permissionsFor("agent") refuses), the v0.4 hard cut for pre-cut rows: re-grant.
405
+ if (!row.lifecycleUid)
406
+ throw new Error(`actor "${t.act.actor}" has no lifecycleUid on its ledger row - re-grant (respawn) it; agent grants are lifecycle-keyed (SPEC 13.1)`);
407
+ // Mint from the VALIDATED BEARER CLAIM, never an independent current-row re-resolve: resolving
408
+ // the row's uid regardless of the bearer is exactly the stale-bearer crossover (a predecessor's
409
+ // bearer minted the successor's authority). ledgerAuthorizeConnect already enforced equality at
410
+ // the connect boundary; this re-assert keeps the resolver safe for any other composition.
411
+ if (t.act.lifecycleUid === undefined)
412
+ throw new Error("bearer carries no lifecycle claim - re-exchange for a fresh bearer (lifecycle-bound from v0.4)");
413
+ if (t.act.lifecycleUid !== row.lifecycleUid)
414
+ throw new Error(`bearer lifecycle ${t.act.lifecycleUid} is not the actor's current incarnation - re-exchange for a fresh bearer`);
415
+ return {
416
+ allowSubscribe: row.allowSubscribe,
417
+ allowPublish: row.allowPublish,
418
+ ...(row.role ? { role: row.role } : {}),
419
+ lifecycleUid: t.act.lifecycleUid,
420
+ // The CURRENT grant's capabilities, so the mint re-contains the bearer against the row
421
+ // as of THIS read (the callout's fresh-row re-check), not only as of the connect gate.
422
+ scope: row.scope,
423
+ };
377
424
  };
378
425
  }
379
426
  /** Ensure a filename-hostile owner/actor can never traverse (defense-in-depth behind the grammar
@@ -436,6 +483,7 @@ export function ledgerAuthorizeAgentExchange(dir, owner, actor, actorToken) {
436
483
  allowPublish: row.allowPublish,
437
484
  ...(row.role ? { role: row.role } : {}),
438
485
  ...(row.parent ? { parent: row.parent } : {}),
486
+ ...(row.lifecycleUid ? { lifecycleUid: row.lifecycleUid } : {}),
439
487
  };
440
488
  }
441
489
  //# sourceMappingURL=ledger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}