@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
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 {
|
|
42
|
+
import { jetstreamManager } from "@nats-io/jetstream";
|
|
43
|
+
import { Kvm } from "@nats-io/kv";
|
|
44
|
+
import { admissionMediatorGrants, EpEnvelopeError, ensureAuthorityStores, isReachable } from "@cotal-ai/core";
|
|
43
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,6 +74,264 @@ 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
336
|
* (loopback HTTP port; default ephemeral). All persisted material must already exist (the
|
|
63
337
|
* provider's `prepareServer` ran at `cotal up`) — a missing piece is a fail-loud config error
|
|
@@ -108,6 +382,15 @@ export async function runAuthService(args, store) {
|
|
|
108
382
|
throw new Error(`auth-service: issuer pin ${issuer.issuer} does not match space "${space}"`);
|
|
109
383
|
if (!(await isReachable(server, { creds: callout.calloutCreds })))
|
|
110
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
|
+
});
|
|
111
394
|
// ---- Plane 2: the callout, on its own callout-account connection ----
|
|
112
395
|
const nc = await connect({
|
|
113
396
|
servers: server,
|
|
@@ -120,7 +403,7 @@ export async function runAuthService(args, store) {
|
|
|
120
403
|
dataAccount: { pub: keys.dataAccount.pub, signingSeed: keys.dataAccount.signingSeed },
|
|
121
404
|
space,
|
|
122
405
|
token: { key: issuer.localKeySet(), issuer: issuer.issuer },
|
|
123
|
-
authorizeActor:
|
|
406
|
+
authorizeActor: plane.authorizeConnect,
|
|
124
407
|
permissionsFor: calloutPermissions(ledgerAclResolver(dir)),
|
|
125
408
|
log: (l) => console.error(l),
|
|
126
409
|
});
|
|
@@ -134,11 +417,12 @@ export async function runAuthService(args, store) {
|
|
|
134
417
|
spaceSecret: ownerSecret,
|
|
135
418
|
issuer,
|
|
136
419
|
authorizeActor: ledgerAuthorizeGrant(dir),
|
|
420
|
+
mintConnectCredential: plane.mintConnectCredential,
|
|
137
421
|
});
|
|
138
422
|
const cap = randomBytes(32).toString("hex"); // per-start exchange capability (rotates with the daemon)
|
|
139
423
|
const failures = []; // rolling-window timestamps of REFUSED exchanges
|
|
140
424
|
const badCaps = []; // rolling-window timestamps of invalid-capability attempts
|
|
141
|
-
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 }));
|
|
142
426
|
await new Promise((resolvePort, reject) => {
|
|
143
427
|
http.once("error", reject);
|
|
144
428
|
http.listen(port, "127.0.0.1", () => resolvePort());
|
|
@@ -152,6 +436,7 @@ export async function runAuthService(args, store) {
|
|
|
152
436
|
const stop = async () => {
|
|
153
437
|
clearAuthServiceInfo(dir); // a dead service must not satisfy the next start's readiness poll
|
|
154
438
|
http.close();
|
|
439
|
+
await plane.close().catch(() => { });
|
|
155
440
|
await nc.close().catch(() => { });
|
|
156
441
|
process.exit(0);
|
|
157
442
|
};
|
|
@@ -159,14 +444,24 @@ export async function runAuthService(args, store) {
|
|
|
159
444
|
process.on("SIGTERM", () => void stop());
|
|
160
445
|
// A dropped broker connection is fatal-loud, not a zombie: the supervising `up`/`down` lifecycle
|
|
161
446
|
// owns restarts, and a callout that silently stopped answering would hang every user connect.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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`);
|
|
166
462
|
process.exit(1);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
});
|
|
463
|
+
}),
|
|
464
|
+
]);
|
|
170
465
|
}
|
|
171
466
|
/** Route one HTTP request. Local-only surface: /jwks (public keys, cacheable), /exchange (IdP JWT →
|
|
172
467
|
* bearer; capability-gated), /health. Anything else 404s. Errors are JSON `{ error }`. */
|
|
@@ -235,12 +530,24 @@ async function handle(req, res, ctx) {
|
|
|
235
530
|
return send(400, { error: "agent exchange needs { owner: string, actor: string, actorToken: string, ttlSec?: number }" });
|
|
236
531
|
try {
|
|
237
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 });
|
|
238
539
|
const token = await ctx.issuer.issue({
|
|
239
540
|
owner,
|
|
240
541
|
space: ctx.space,
|
|
241
542
|
actor,
|
|
242
543
|
scope: grant.scope,
|
|
243
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,
|
|
244
551
|
ttlSec: Math.min(ttlSec ?? AGENT_BEARER_TTL_SEC, AGENT_BEARER_TTL_SEC),
|
|
245
552
|
});
|
|
246
553
|
const { exp } = decodeJwt(token);
|
package/dist/service.js.map
CHANGED
|
@@ -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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"}
|