@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.
- package/dist/admission-mediator.d.ts +319 -0
- package/dist/admission-mediator.d.ts.map +1 -0
- package/dist/admission-mediator.js +1033 -0
- package/dist/admission-mediator.js.map +1 -0
- package/dist/auth-admin.d.ts +29 -0
- package/dist/auth-admin.d.ts.map +1 -0
- package/dist/auth-admin.js +224 -0
- package/dist/auth-admin.js.map +1 -0
- package/dist/authority-client.d.ts +215 -0
- package/dist/authority-client.d.ts.map +1 -0
- package/dist/authority-client.js +346 -0
- package/dist/authority-client.js.map +1 -0
- package/dist/barrier-evict.d.ts +16 -0
- package/dist/barrier-evict.d.ts.map +1 -0
- package/dist/barrier-evict.js +100 -0
- package/dist/barrier-evict.js.map +1 -0
- package/dist/connect-reader.d.ts +72 -0
- package/dist/connect-reader.d.ts.map +1 -0
- package/dist/connect-reader.js +154 -0
- package/dist/connect-reader.js.map +1 -0
- package/dist/continuity.d.ts.map +1 -1
- package/dist/continuity.js +3 -0
- package/dist/continuity.js.map +1 -1
- package/dist/credential-ledger.d.ts +343 -0
- package/dist/credential-ledger.d.ts.map +1 -0
- package/dist/credential-ledger.js +732 -0
- package/dist/credential-ledger.js.map +1 -0
- package/dist/drain-repair.d.ts +95 -0
- package/dist/drain-repair.d.ts.map +1 -0
- package/dist/drain-repair.js +305 -0
- package/dist/drain-repair.js.map +1 -0
- package/dist/idp.d.ts +19 -0
- package/dist/idp.d.ts.map +1 -1
- package/dist/idp.js +17 -0
- package/dist/idp.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/issuer.d.ts +8 -0
- package/dist/issuer.d.ts.map +1 -1
- package/dist/issuer.js +4 -2
- package/dist/issuer.js.map +1 -1
- package/dist/ledger-scanner.d.ts +98 -0
- package/dist/ledger-scanner.d.ts.map +1 -0
- package/dist/ledger-scanner.js +352 -0
- package/dist/ledger-scanner.js.map +1 -0
- package/dist/ledger.d.ts +7 -0
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +53 -5
- package/dist/ledger.js.map +1 -1
- package/dist/lifecycle-registry.d.ts +397 -0
- package/dist/lifecycle-registry.d.ts.map +1 -0
- package/dist/lifecycle-registry.js +819 -0
- package/dist/lifecycle-registry.js.map +1 -0
- package/dist/permissions.d.ts +5 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +29 -6
- package/dist/permissions.js.map +1 -1
- package/dist/plane-claim.d.ts +83 -0
- package/dist/plane-claim.d.ts.map +1 -0
- package/dist/plane-claim.js +290 -0
- package/dist/plane-claim.js.map +1 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +2 -1
- package/dist/provider.js.map +1 -1
- package/dist/records-scanner.d.ts +78 -0
- package/dist/records-scanner.d.ts.map +1 -0
- package/dist/records-scanner.js +320 -0
- package/dist/records-scanner.js.map +1 -0
- package/dist/retirement-barrier.d.ts +217 -0
- package/dist/retirement-barrier.d.ts.map +1 -0
- package/dist/retirement-barrier.js +624 -0
- package/dist/retirement-barrier.js.map +1 -0
- package/dist/retirement-cleaner.d.ts +54 -0
- package/dist/retirement-cleaner.d.ts.map +1 -0
- package/dist/retirement-cleaner.js +158 -0
- package/dist/retirement-cleaner.js.map +1 -0
- package/dist/root-credential.d.ts +26 -0
- package/dist/root-credential.d.ts.map +1 -0
- package/dist/root-credential.js +116 -0
- package/dist/root-credential.js.map +1 -0
- package/dist/service.d.ts +60 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +317 -10
- package/dist/service.js.map +1 -1
- package/dist/session-ledger.d.ts +224 -0
- package/dist/session-ledger.d.ts.map +1 -0
- package/dist/session-ledger.js +713 -0
- package/dist/session-ledger.js.map +1 -0
- package/dist/token.d.ts +17 -0
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +30 -2
- package/dist/token.js.map +1 -1
- 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
|
package/dist/ledger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/ledger.js.map
CHANGED
|
@@ -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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"}
|