@cotal-ai/auth 0.11.6 → 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 (102) 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/commands.js +16 -12
  18. package/dist/commands.js.map +1 -1
  19. package/dist/connect-reader.d.ts +72 -0
  20. package/dist/connect-reader.d.ts.map +1 -0
  21. package/dist/connect-reader.js +154 -0
  22. package/dist/connect-reader.js.map +1 -0
  23. package/dist/continuity.d.ts +23 -0
  24. package/dist/continuity.d.ts.map +1 -0
  25. package/dist/continuity.js +145 -0
  26. package/dist/continuity.js.map +1 -0
  27. package/dist/credential-ledger.d.ts +343 -0
  28. package/dist/credential-ledger.d.ts.map +1 -0
  29. package/dist/credential-ledger.js +732 -0
  30. package/dist/credential-ledger.js.map +1 -0
  31. package/dist/drain-repair.d.ts +95 -0
  32. package/dist/drain-repair.d.ts.map +1 -0
  33. package/dist/drain-repair.js +305 -0
  34. package/dist/drain-repair.js.map +1 -0
  35. package/dist/idp.d.ts +19 -0
  36. package/dist/idp.d.ts.map +1 -1
  37. package/dist/idp.js +17 -0
  38. package/dist/idp.js.map +1 -1
  39. package/dist/index.d.ts +7 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +31 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/issuer.d.ts +8 -0
  44. package/dist/issuer.d.ts.map +1 -1
  45. package/dist/issuer.js +4 -2
  46. package/dist/issuer.js.map +1 -1
  47. package/dist/ledger-scanner.d.ts +98 -0
  48. package/dist/ledger-scanner.d.ts.map +1 -0
  49. package/dist/ledger-scanner.js +352 -0
  50. package/dist/ledger-scanner.js.map +1 -0
  51. package/dist/ledger.d.ts +12 -0
  52. package/dist/ledger.d.ts.map +1 -1
  53. package/dist/ledger.js +103 -13
  54. package/dist/ledger.js.map +1 -1
  55. package/dist/lifecycle-registry.d.ts +397 -0
  56. package/dist/lifecycle-registry.d.ts.map +1 -0
  57. package/dist/lifecycle-registry.js +819 -0
  58. package/dist/lifecycle-registry.js.map +1 -0
  59. package/dist/permissions.d.ts +5 -1
  60. package/dist/permissions.d.ts.map +1 -1
  61. package/dist/permissions.js +29 -6
  62. package/dist/permissions.js.map +1 -1
  63. package/dist/plane-claim.d.ts +83 -0
  64. package/dist/plane-claim.d.ts.map +1 -0
  65. package/dist/plane-claim.js +290 -0
  66. package/dist/plane-claim.js.map +1 -0
  67. package/dist/provider.d.ts.map +1 -1
  68. package/dist/provider.js +45 -16
  69. package/dist/provider.js.map +1 -1
  70. package/dist/records-scanner.d.ts +78 -0
  71. package/dist/records-scanner.d.ts.map +1 -0
  72. package/dist/records-scanner.js +320 -0
  73. package/dist/records-scanner.js.map +1 -0
  74. package/dist/retirement-barrier.d.ts +217 -0
  75. package/dist/retirement-barrier.d.ts.map +1 -0
  76. package/dist/retirement-barrier.js +624 -0
  77. package/dist/retirement-barrier.js.map +1 -0
  78. package/dist/retirement-cleaner.d.ts +54 -0
  79. package/dist/retirement-cleaner.d.ts.map +1 -0
  80. package/dist/retirement-cleaner.js +158 -0
  81. package/dist/retirement-cleaner.js.map +1 -0
  82. package/dist/root-credential.d.ts +26 -0
  83. package/dist/root-credential.d.ts.map +1 -0
  84. package/dist/root-credential.js +116 -0
  85. package/dist/root-credential.js.map +1 -0
  86. package/dist/service.d.ts +73 -5
  87. package/dist/service.d.ts.map +1 -1
  88. package/dist/service.js +349 -24
  89. package/dist/service.js.map +1 -1
  90. package/dist/session-ledger.d.ts +224 -0
  91. package/dist/session-ledger.d.ts.map +1 -0
  92. package/dist/session-ledger.js +713 -0
  93. package/dist/session-ledger.js.map +1 -0
  94. package/dist/store.d.ts +18 -8
  95. package/dist/store.d.ts.map +1 -1
  96. package/dist/store.js +74 -51
  97. package/dist/store.js.map +1 -1
  98. package/dist/token.d.ts +17 -0
  99. package/dist/token.d.ts.map +1 -1
  100. package/dist/token.js +30 -2
  101. package/dist/token.js.map +1 -1
  102. package/package.json +7 -4
package/dist/service.js CHANGED
@@ -39,13 +39,29 @@
39
39
  import { randomBytes } from "node:crypto";
40
40
  import { createServer } from "node:http";
41
41
  import { connect, credsAuthenticator } from "@nats-io/transport-node";
42
- import { isReachable } from "@cotal-ai/core";
43
- import { findCotalRoot, userAuthStateDir } from "@cotal-ai/workspace";
42
+ import { jetstreamManager } from "@nats-io/jetstream";
43
+ import { Kvm } from "@nats-io/kv";
44
+ import { admissionMediatorGrants, EpEnvelopeError, ensureAuthorityStores, isReachable } from "@cotal-ai/core";
45
+ import { findCotalRoot, userAuthStateDir, workspaceSecretStore } from "@cotal-ai/workspace";
44
46
  import { decodeJwt } from "jose";
45
47
  import { startAuthCallout } from "./callout.js";
46
48
  import { createIdpBridge } from "./idp.js";
47
49
  import { pinnedJwksResolver } from "./issuer.js";
48
50
  import { calloutPermissions } from "./permissions.js";
51
+ import { authorityBarrierGrants, authorityWriterGrants, openAuthorityClient, openSupervisedConnectReader } from "./authority-client.js";
52
+ import { authorizeConnectCredential } from "./connect-reader.js";
53
+ import { ensureRootCredential } from "./root-credential.js";
54
+ import { observeGate, openLifecycleRegistry } from "./lifecycle-registry.js";
55
+ import { openAuthLedgerScannerCandidate } from "./ledger-scanner.js";
56
+ import { openRecordsScannerCandidate } from "./records-scanner.js";
57
+ import { acquirePlaneClaim, makeDeliveryAdminPlaneOracle, scannerDeathCopy } from "./plane-claim.js";
58
+ import { enumerateOperationIntents, resumeAgentTakeover } from "./credential-ledger.js";
59
+ import { makeDeliveryAdminEvictor } from "./barrier-evict.js";
60
+ import { resumeAgentRetirement } from "./retirement-barrier.js";
61
+ import { makeRetirementCleaners } from "./retirement-cleaner.js";
62
+ import { makeDrainRepairers } from "./drain-repair.js";
63
+ import { openAuthAdminListener } from "./auth-admin.js";
64
+ import { drainTargetForEndpoint, openAdmissionMediator } from "./admission-mediator.js";
49
65
  import { AGENT_BEARER_TTL_SEC, ledgerAclResolver, ledgerAuthorizeAgentExchange, ledgerAuthorizeConnect, ledgerAuthorizeGrant, } from "./ledger.js";
50
66
  import { clearAuthServiceInfo, loadCalloutAuth, loadIssuer, loadOwnerSecret, loadPinnedIdp, loadServiceKeys, saveAuthServiceInfo, spaceIssuer, } from "./store.js";
51
67
  /** JWKS max-age seconds — the cache contract's knob. Exported so a rotation tool can compute the
@@ -58,11 +74,277 @@ const FAILED_EXCHANGE_PER_MIN = 30;
58
74
  * is throttled AND audited, but never consumes the refused-exchange budget of a caller holding
59
75
  * the real capability — a cap-less process must not be able to starve legitimate exchanges. */
60
76
  const BAD_CAP_PER_MIN = 30;
77
+ /**
78
+ * Open the authority plane — the PRODUCTION connect/exchange composition (exported so the live
79
+ * deny-new smoke exercises exactly what the daemon runs). Boot order is the readiness contract:
80
+ * the MINT WRITER connects first and ensures both authority stores exist with their normative
81
+ * shape ({@link ensureAuthorityStores}; the reader's bind proof requires them), then the
82
+ * lifecycle registry binds (its own §13.12 shape proof), then the supervised CONNECT READER
83
+ * binds + proves. Any failure throws — the daemon refuses to come up rather than serving
84
+ * connects it cannot credential-check (no file-only fallback).
85
+ *
86
+ * These are STATIC data-account users (signed by the data-account signing key), so they never
87
+ * transit the auth callout — the callout cannot deadlock on its own reader.
88
+ */
89
+ export async function openAuthAuthorityPlane(opts) {
90
+ const { server, space, dataAccount, log } = opts;
91
+ const writer = await openAuthorityClient({ server, space, dataAccount, label: `cotal:auth-mint:${space}`, grants: (id) => authorityWriterGrants(space, id), log });
92
+ let registry;
93
+ try {
94
+ await ensureAuthorityStores(await jetstreamManager(writer.nc), new Kvm(writer.nc), space);
95
+ registry = await openLifecycleRegistry(writer.nc, space);
96
+ }
97
+ catch (e) {
98
+ await writer.close();
99
+ throw e;
100
+ }
101
+ let reader;
102
+ try {
103
+ reader = await openSupervisedConnectReader({ server, space, dataAccount, log });
104
+ }
105
+ catch (e) {
106
+ await writer.close();
107
+ throw e;
108
+ }
109
+ // The BARRIER EXECUTOR: the third self-minted connection, with its own registry bind — the
110
+ // mint writer stays the minimal issuance credential ("barriers are NOT this credential's
111
+ // job") and the barrier's stage-write authority lives here alone. The barrier profile holds NO
112
+ // auth-stream `CONSUMER.CREATE` (nats-server#8274): its family/intent/lineage enumeration runs
113
+ // on the SEALED auth-ledger scanner, a FOURTH self-minted connection whose CREATE-capable
114
+ // credential never escapes ({@link openAuthLedgerScannerCandidate}), threaded into the barrier
115
+ // registry. The retirement barrier's OBLIGATION drain (§13.8, records stream) enumerates the
116
+ // same way and for the same #8274 reason: a FIFTH self-minted connection, the SEALED records
117
+ // scanner ({@link openRecordsScannerCandidate}), is opened co-located and threaded into the SAME
118
+ // barrier registry (the ONE records scanner per space the composition owns). The mint-writer
119
+ // registry above carries neither scanner — only the barrier registry enumerates.
120
+ //
121
+ // THE PLANE CLAIM (#29 HIGH 3, SPEC 13.13) gates the whole block: both scanner connections open
122
+ // FIRST as INERT candidates (non-reconnecting, identities captured, no scan capability exists),
123
+ // then the claim is taken by broker-atomic create/CAS on the ONE `plane` auth-KV key. Only the
124
+ // WINNER activates the branded scanners; a loser closes both candidates and this open REFUSES
125
+ // with the operator-legible copy (live peer / inconclusive / concurrent). A stale held claim is
126
+ // reclaimed on LIVENESS ALONE: both claimed tuples conclusively absent under a COMPLETE CONNZ
127
+ // sweep, adjudicated over the delivery-admin rail (auth holds no $SYS). A mid-life scanner
128
+ // disconnect FENCES the plane: the guard refuses every later scan, the sibling closes, and the
129
+ // in-flight enumeration's result is discarded by the post-scan claim check.
130
+ let barrier;
131
+ let ledgerCand;
132
+ let recordsCand;
133
+ let hold;
134
+ let scanner;
135
+ let recordsScanner;
136
+ let barrierReg;
137
+ let closing = false;
138
+ // The plane-fatal channel (fact HIGH: a fenced plane must never keep serving): the mid-life
139
+ // fence resolves it, every authority operation refuses from then on, and the composition root
140
+ // downs the daemon. A clean close never resolves it.
141
+ let fatalReason;
142
+ let fireFatal;
143
+ const fenced = new Promise((r) => { fireFatal = r; });
144
+ try {
145
+ barrier = await openAuthorityClient({ server, space, dataAccount, label: `cotal:auth-barrier:${space}`, grants: (id) => authorityBarrierGrants(space, id), log });
146
+ ledgerCand = await openAuthLedgerScannerCandidate({ server, space, dataAccount, log });
147
+ recordsCand = await openRecordsScannerCandidate({ server, space, dataAccount, log });
148
+ const oracle = opts.probePlaneOracle ?? makeDeliveryAdminPlaneOracle({ space, server, dataAccount, log });
149
+ hold = await acquirePlaneClaim({ nc: barrier.nc, space, ledger: ledgerCand.tuple, records: recordsCand.tuple, oracle, log });
150
+ scanner = ledgerCand.activate(hold.guard);
151
+ recordsScanner = recordsCand.activate(hold.guard);
152
+ // Mid-life disconnect = the FENCING event (security req: an owned scanner that dies must not
153
+ // leave the plane half-running). First death wins: fence the guard with the ux state-3 copy,
154
+ // close the sibling so a successor's reclaim isn't blocked by a half-dead pair, log loud.
155
+ const fenceOnDeath = (role, sibling) => {
156
+ if (closing)
157
+ return;
158
+ const copy = scannerDeathCopy(space, role);
159
+ hold?.fence(copy);
160
+ fatalReason = fatalReason ?? copy;
161
+ fireFatal(copy);
162
+ log(`auth-plane: ${copy}`);
163
+ void sibling().catch(() => { });
164
+ };
165
+ void ledgerCand.gone.then(() => fenceOnDeath("auth-ledger", () => recordsCand?.close() ?? Promise.resolve()));
166
+ void recordsCand.gone.then(() => fenceOnDeath("records", () => ledgerCand?.close() ?? Promise.resolve()));
167
+ const lc = ledgerCand, rc = recordsCand;
168
+ opts.probePlaneDeath?.({ ledger: () => lc.close(), records: () => rc.close() });
169
+ barrierReg = await openLifecycleRegistry(barrier.nc, space, scanner, recordsScanner);
170
+ }
171
+ catch (e) {
172
+ // Clean-close order even on a failed open: scan-capable clients first, THEN the claim release
173
+ // (held → released is valid only once neither scanner can act), then the rest.
174
+ closing = true;
175
+ await recordsCand?.close();
176
+ await ledgerCand?.close();
177
+ await hold?.release();
178
+ await barrier?.close();
179
+ await reader.close();
180
+ await writer.close();
181
+ throw e;
182
+ }
183
+ const evictPrincipal = opts.probeEvictor ?? makeDeliveryAdminEvictor({ space, server, dataAccount, log });
184
+ // The RETIREMENT deps (#29 piece 4): the barrier's injected mechanics, assembled from reviewed
185
+ // §13.9 profiles only. The obligation drain runs per endpoint on a SHORT-LIVED client minted
186
+ // with that endpoint's admission-mediator profile (the daemon owns no standing mediator; the
187
+ // drain is the first production mediator composition), sharing the plane's ONE sealed records
188
+ // scanner. The per-op cleaner/executor credentials come from the piece-2 split factory.
189
+ //
190
+ // THE CONFINED DRAIN REPAIRERS (#29 HIGH 1 functional closure): the mediator hands CLOSED,
191
+ // already-validated repair commands; the per-op executors ({@link makeDrainRepairers}) mint an
192
+ // exact-coordinate credential per repair, execute, and close. Covered classes now COMPLETE on
193
+ // resume instead of freezing: an accepted self-commit re-applies (or classifies landed /
194
+ // superseded), an accepted pool route re-enqueues create-only. THREE distinct operator
195
+ // outcomes (ux):
196
+ // 1. auto-completed - the retirement finishes; the repair is logged, no freeze message;
197
+ // 2. a covered-class repair that still cannot land names its SPECIFIC reason (an out-of-class
198
+ // commit key refuses in the executor with the confused-deputy copy; a CAS loss reports
199
+ // "another writer moved the record" and the next pass re-classifies);
200
+ // 3. accepted EFFECTS work terminalizes through the RETIREMENT-CANCEL terminal (§13.8 option
201
+ // (i)): a first-terminal-wins cancelled marker on the SAME completion coordinate — an
202
+ // action's goal union already carries the first-class `cancelled` state, a non-action
203
+ // effect gets the EffectCancelledFact union member. Never a forged success: a reader sees
204
+ // the effect did NOT run and which retirement cancelled it; a racing real completion wins
205
+ // by landing first.
206
+ const repairers = makeDrainRepairers({ server, space, dataAccount, log });
207
+ const retirement = {
208
+ evictPrincipal,
209
+ drainTargetObligations: async (endpoint, targetUid, opId) => {
210
+ const drain = await openAuthorityClient({
211
+ server, space, dataAccount,
212
+ label: `cotal:ep-drain:${space}:${endpoint}`,
213
+ grants: (id) => admissionMediatorGrants(space, endpoint, id),
214
+ log,
215
+ });
216
+ try {
217
+ await drainTargetForEndpoint(await openAdmissionMediator(drain.nc, space, endpoint, { recordsScanner }), targetUid, {
218
+ applyCommit: repairers.applyCommitFor(opId),
219
+ reconcilePoolRoute: repairers.reconcilePoolRouteFor(opId),
220
+ cancelEffectsRoute: repairers.cancelEffectsRouteFor(opId),
221
+ });
222
+ }
223
+ finally {
224
+ await drain.close();
225
+ }
226
+ },
227
+ ...makeRetirementCleaners({ server, space, dataAccount, log }),
228
+ now: Date.now,
229
+ };
230
+ // Boot crash-resume BEFORE the plane answers anything (SPEC 13.1): finish every takeover this
231
+ // executor owes from its durable intents. A garbled intent store fails the boot (we cannot
232
+ // know what we owe); an individual resume failure is LOUD but non-fatal — that alias stays
233
+ // frozen (nothing mints for it, fail-closed) while every other alias keeps working, and a
234
+ // later restart re-drives it.
235
+ try {
236
+ await resumeOpenOperations(barrierReg, evictPrincipal, retirement, log);
237
+ }
238
+ catch (e) {
239
+ closing = true;
240
+ await recordsScanner.close();
241
+ await scanner.close();
242
+ await hold.release();
243
+ await barrier.close();
244
+ await reader.close();
245
+ await writer.close();
246
+ throw e;
247
+ }
248
+ // The AUTH CONTROL RAIL (#29 piece 3, SPEC 13.2 CONTROL_AUTH_ADMIN): serve the generic
249
+ // "retire a lifecycle" op over a dedicated minimal listener credential. Every executing right
250
+ // stays with the plane's own registry + retirement deps (the drain rides the ONE sealed records
251
+ // scanner exactly like the boot resume); the listener only authorizes (subject attribution +
252
+ // the FRESH space-manager-lease holder check) and dispatches.
253
+ let authAdmin;
254
+ try {
255
+ authAdmin = await openAuthAdminListener({ server, space, dataAccount, reg: barrierReg, retirement, log });
256
+ }
257
+ catch (e) {
258
+ closing = true;
259
+ await recordsScanner.close();
260
+ await scanner.close();
261
+ await hold.release();
262
+ await barrier.close();
263
+ await reader.close();
264
+ await writer.close();
265
+ throw e;
266
+ }
267
+ const fileArm = ledgerAuthorizeConnect(opts.dir);
268
+ // Every authority operation refuses once the plane is fenced: a half-dead plane keeps NO face up.
269
+ // AUDIENCE SPLIT (ux): these refusals reach a CONNECTING AGENT during the brief fence→exit
270
+ // window, not the operator — the agent cannot "restart the auth service", so it gets a retryable
271
+ // unavailability, while the operator's state-3 copy stays on the log and the exit line.
272
+ const refuseIfFenced = () => {
273
+ if (fatalReason !== undefined)
274
+ throw new EpEnvelopeError("unavailable", `the auth service for space "${space}" is momentarily unavailable (it detected a fault and is restarting); retry shortly`);
275
+ };
276
+ return {
277
+ authorizeConnect: async (t) => {
278
+ refuseIfFenced();
279
+ fileArm(t);
280
+ await authorizeConnectCredential(reader.current(), t, Date.now);
281
+ },
282
+ mintConnectCredential: (args) => {
283
+ refuseIfFenced();
284
+ return ensureRootCredential(registry, { ...args, managerInstance: `auth-service:${space}` });
285
+ },
286
+ fenced,
287
+ close: async () => {
288
+ // Clean-close order (SPEC 13.13): the rail stops answering first, then scan-capable
289
+ // clients down, then `held → released` (never released while either scanner can still
290
+ // act), then the barrier that wrote it.
291
+ closing = true;
292
+ await authAdmin?.close();
293
+ await reader.close();
294
+ await recordsScanner.close();
295
+ await scanner.close();
296
+ await hold.release();
297
+ await barrier.close();
298
+ await writer.close();
299
+ },
300
+ };
301
+ }
302
+ /**
303
+ * Boot crash-resume (SPEC 13.1): enumerate the durable operation intents and finish every
304
+ * barrier this executor OWES — an intent is owed exactly when its gate is still FROZEN by that
305
+ * opId (completed and lost operations leave their intent behind by design and are skipped).
306
+ * A frozen TAKEOVER resumes through {@link resumeAgentTakeover}; session-derived descendants
307
+ * fail loud inside the barrier until the session reconciler is wired (the #29 trigger slice).
308
+ * A frozen RETIREMENT resumes through {@link resumeAgentRetirement} with the plane's assembled
309
+ * {@link RetirementDeps} (#29 piece 4); its failure is equally loud and non-fatal.
310
+ */
311
+ async function resumeOpenOperations(reg, evictPrincipal, retirement, log) {
312
+ for (const it of await enumerateOperationIntents(reg)) {
313
+ const gate = await observeGate(reg, it.lifecycleUid);
314
+ if (gate === undefined || gate.row.state !== "frozen" || gate.row.op?.opId !== it.opId)
315
+ continue;
316
+ if (it.kind === "retirement") {
317
+ try {
318
+ const r = await resumeAgentRetirement(reg, it.opId, retirement);
319
+ log(`auth-barrier: resumed retirement ${it.opId} for ${it.lifecycleUid} (${r.revokedRows} row(s) revoked, ${r.evictedPrincipals.length} principal(s) verified-evicted, ${r.drainedEndpoints.length} endpoint(s) drained, ${Object.keys(r.cleaned).length} pool(s) cleaned, ${Object.keys(r.frontiers).length} frontier stream(s))`);
320
+ }
321
+ catch (e) {
322
+ log(`auth-barrier: resuming retirement ${it.opId} for ${it.lifecycleUid} FAILED (${e instanceof Error ? e.message : String(e)}) - the gate stays frozen and nothing mints for this alias until a resume succeeds (fail-closed)`);
323
+ }
324
+ continue;
325
+ }
326
+ try {
327
+ const r = await resumeAgentTakeover(reg, it.opId, { evictPrincipal });
328
+ log(`auth-barrier: resumed takeover ${it.opId} for ${it.lifecycleUid} (epoch ${r.toEpoch}, ${r.revokedRows} row(s) revoked, ${r.evictedPrincipals.length} principal(s) verified-evicted)`);
329
+ }
330
+ catch (e) {
331
+ log(`auth-barrier: resuming takeover ${it.opId} for ${it.lifecycleUid} FAILED (${e instanceof Error ? e.message : String(e)}) - the gate stays frozen and nothing mints for this alias until a resume succeeds (fail-closed)`);
332
+ }
333
+ }
334
+ }
61
335
  /** Run the auth service. Flags: `--space` (required), `--server` (broker URL, required), `--port`
62
- * (loopback HTTP port; default ephemeral). All persisted material must already exist in the
63
- * space-scoped state dir (the provider's `prepareServer` ran at `cotal up`) — a missing piece is a
64
- * fail-loud config error naming the fix, never a silent partial service. */
65
- export async function runAuthService(args) {
336
+ * (loopback HTTP port; default ephemeral). All persisted material must already exist (the
337
+ * provider's `prepareServer` ran at `cotal up`) — a missing piece is a fail-loud config error
338
+ * naming the fix, never a silent partial service; this daemon LOADS the four secret kinds and
339
+ * never generates them.
340
+ *
341
+ * `store` is the hosted composition's injection point for the space's SECRET material (callout
342
+ * account, issuer keys, owner secret, service key projection) — when given, it is those kinds'
343
+ * ONLY source (no flag or path can point this daemon at other secret material; an absent key is
344
+ * the hard error below). Absent, the daemon composes the local workspace store over `.cotal/`.
345
+ * NON-SEAM state (the actor ledger, the IdP pin, the discovery file) still lives in the local
346
+ * state dir either way — hosting those is a later, separate seam. */
347
+ export async function runAuthService(args, store) {
66
348
  const v = args.values;
67
349
  const space = v.space;
68
350
  if (!space)
@@ -73,23 +355,42 @@ export async function runAuthService(args) {
73
355
  const port = v.port === undefined ? 0 : Number(v.port);
74
356
  if (!Number.isInteger(port) || port < 0 || port > 65535)
75
357
  throw new Error(`auth-service: --port must be a port number, got "${v.port}"`);
76
- // The provider's space-scoped state dir every file this daemon reads lives here. The layout
77
- // fact is workspace-owned (userAuthStateDir); this daemon never touches `.cotal/auth/auth.json`.
78
- const dir = userAuthStateDir(findCotalRoot(), space);
358
+ // The provider's space-scoped state dir for NON-SEAM material (ledger, IdP pin, discovery). The
359
+ // layout fact is workspace-owned (userAuthStateDir); this daemon never touches `.cotal/auth/auth.json`.
360
+ const root = findCotalRoot();
361
+ const dir = userAuthStateDir(root, space);
362
+ const secrets = store ?? workspaceSecretStore(root);
79
363
  // Scrub any stale discovery file FIRST — a dead prior daemon's entry must never satisfy a
80
364
  // readiness poll for THIS start (the provider's ready() also pid-checks; belt and braces).
81
365
  clearAuthServiceInfo(dir);
82
- const keys = loadServiceKeys(dir);
83
- const callout = loadCalloutAuth(dir);
84
- const issuer = await loadIssuer(dir);
85
- const ownerSecret = loadOwnerSecret(dir);
366
+ const keys = await loadServiceKeys(secrets, space);
367
+ const callout = await loadCalloutAuth(secrets, space);
368
+ const issuer = await loadIssuer(secrets, space);
369
+ const ownerSecret = await loadOwnerSecret(secrets, space);
86
370
  const idp = loadPinnedIdp(dir);
87
- if (!keys || !callout || !issuer || !ownerSecret || !idp)
88
- throw new Error(`auth-service: user-auth material is missing under ${dir} - enable it with \`cotal up --user-auth --idp <url>\``);
371
+ if (!keys || !callout || !issuer || !ownerSecret || !idp) {
372
+ const missing = [
373
+ ...(keys ? [] : ["service keys"]),
374
+ ...(callout ? [] : ["callout account"]),
375
+ ...(issuer ? [] : ["issuer keys"]),
376
+ ...(ownerSecret ? [] : ["owner secret"]),
377
+ ...(idp ? [] : [`IdP pin under ${dir}`]),
378
+ ];
379
+ throw new Error(`auth-service: user-auth material is missing (${missing.join(", ")}) - ${store ? "the hosted composition must provision the secret store before starting this daemon" : "enable it with `cotal up --user-auth --idp <url>`"}`);
380
+ }
89
381
  if (issuer.issuer !== spaceIssuer(space))
90
382
  throw new Error(`auth-service: issuer pin ${issuer.issuer} does not match space "${space}"`);
91
383
  if (!(await isReachable(server, { creds: callout.calloutCreds })))
92
384
  throw new Error(`auth-service: can't reach the broker at ${server} with the callout creds - is the mesh up (with the callout account preloaded)?`);
385
+ // ---- The authority plane (R1): stores ensured + registry + supervised reader, BEFORE the
386
+ // callout exists — a connect must never be answered without the credential arm bound.
387
+ const plane = await openAuthAuthorityPlane({
388
+ server,
389
+ space,
390
+ dir,
391
+ dataAccount: { pub: keys.dataAccount.pub, signingSeed: keys.dataAccount.signingSeed },
392
+ log: (l) => console.error(l),
393
+ });
93
394
  // ---- Plane 2: the callout, on its own callout-account connection ----
94
395
  const nc = await connect({
95
396
  servers: server,
@@ -102,7 +403,7 @@ export async function runAuthService(args) {
102
403
  dataAccount: { pub: keys.dataAccount.pub, signingSeed: keys.dataAccount.signingSeed },
103
404
  space,
104
405
  token: { key: issuer.localKeySet(), issuer: issuer.issuer },
105
- authorizeActor: ledgerAuthorizeConnect(dir),
406
+ authorizeActor: plane.authorizeConnect,
106
407
  permissionsFor: calloutPermissions(ledgerAclResolver(dir)),
107
408
  log: (l) => console.error(l),
108
409
  });
@@ -116,11 +417,12 @@ export async function runAuthService(args) {
116
417
  spaceSecret: ownerSecret,
117
418
  issuer,
118
419
  authorizeActor: ledgerAuthorizeGrant(dir),
420
+ mintConnectCredential: plane.mintConnectCredential,
119
421
  });
120
422
  const cap = randomBytes(32).toString("hex"); // per-start exchange capability (rotates with the daemon)
121
423
  const failures = []; // rolling-window timestamps of REFUSED exchanges
122
424
  const badCaps = []; // rolling-window timestamps of invalid-capability attempts
123
- const http = createServer((req, res) => void handle(req, res, { issuer, bridge, cap, failures, badCaps, space, dir }));
425
+ const http = createServer((req, res) => void handle(req, res, { issuer, bridge, cap, failures, badCaps, space, dir, mintConnectCredential: plane.mintConnectCredential }));
124
426
  await new Promise((resolvePort, reject) => {
125
427
  http.once("error", reject);
126
428
  http.listen(port, "127.0.0.1", () => resolvePort());
@@ -134,6 +436,7 @@ export async function runAuthService(args) {
134
436
  const stop = async () => {
135
437
  clearAuthServiceInfo(dir); // a dead service must not satisfy the next start's readiness poll
136
438
  http.close();
439
+ await plane.close().catch(() => { });
137
440
  await nc.close().catch(() => { });
138
441
  process.exit(0);
139
442
  };
@@ -141,14 +444,24 @@ export async function runAuthService(args) {
141
444
  process.on("SIGTERM", () => void stop());
142
445
  // A dropped broker connection is fatal-loud, not a zombie: the supervising `up`/`down` lifecycle
143
446
  // owns restarts, and a callout that silently stopped answering would hang every user connect.
144
- await nc.closed().then((err) => {
145
- clearAuthServiceInfo(dir);
146
- if (err) {
147
- console.error(`✗ auth-service: broker connection closed (${err.message}) - exiting`);
447
+ // A FENCED plane is equally fatal (SPEC 13.13): its scanners are no longer whole, every authority
448
+ // operation already refuses, and a daemon that stayed up would look healthy while a successor
449
+ // reclaims — down the whole service instead.
450
+ await Promise.race([
451
+ nc.closed().then((err) => {
452
+ clearAuthServiceInfo(dir);
453
+ if (err) {
454
+ console.error(`✗ auth-service: broker connection closed (${err.message}) - exiting`);
455
+ process.exit(1);
456
+ }
457
+ process.exit(0);
458
+ }),
459
+ plane.fenced.then((reason) => {
460
+ clearAuthServiceInfo(dir);
461
+ console.error(`✗ auth-service: ${reason} - exiting`);
148
462
  process.exit(1);
149
- }
150
- process.exit(0);
151
- });
463
+ }),
464
+ ]);
152
465
  }
153
466
  /** Route one HTTP request. Local-only surface: /jwks (public keys, cacheable), /exchange (IdP JWT →
154
467
  * bearer; capability-gated), /health. Anything else 404s. Errors are JSON `{ error }`. */
@@ -217,12 +530,24 @@ async function handle(req, res, ctx) {
217
530
  return send(400, { error: "agent exchange needs { owner: string, actor: string, actorToken: string, ttlSec?: number }" });
218
531
  try {
219
532
  const grant = ledgerAuthorizeAgentExchange(ctx.dir, owner, actor, actorToken);
533
+ if (typeof grant.lifecycleUid !== "string" || !grant.lifecycleUid)
534
+ throw new Error(`actor "${actor}" has no lifecycleUid on its ledger row - respawn it (bearers are lifecycle-bound from v0.4)`);
535
+ // Credential-BIND the bearer (SPEC 13.1, R1): the incarnation's live root credential is
536
+ // ensured (minted release-last on first exchange) BEFORE the bearer bytes are signed,
537
+ // and rides act.credentialId — the connect arm requires it against the LIVE cred row.
538
+ const credentialId = await ctx.mintConnectCredential({ owner, actor, lifecycleUid: grant.lifecycleUid });
220
539
  const token = await ctx.issuer.issue({
221
540
  owner,
222
541
  space: ctx.space,
223
542
  actor,
224
543
  scope: grant.scope,
225
544
  parent: grant.parent,
545
+ // Lifecycle-BIND the bearer (SPEC 13.1): the row's uid rides act.lifecycleUid, and the
546
+ // callout refuses a mismatch against the CURRENT row at connect — a predecessor's
547
+ // still-unexpired bearer dies at the alias's respawn instead of minting the
548
+ // successor's broker authority.
549
+ lifecycleUid: grant.lifecycleUid,
550
+ credentialId,
226
551
  ttlSec: Math.min(ttlSec ?? AGENT_BEARER_TTL_SEC, AGENT_BEARER_TTL_SEC),
227
552
  });
228
553
  const { exp } = decodeJwt(token);
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}