@cotal-ai/auth 0.78.1 → 0.81.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authority-client.d.ts +11 -0
- package/dist/authority-client.d.ts.map +1 -1
- package/dist/authority-client.js +22 -0
- package/dist/authority-client.js.map +1 -1
- package/dist/barrier-evict.d.ts +3 -0
- package/dist/barrier-evict.d.ts.map +1 -1
- package/dist/barrier-evict.js +1 -1
- package/dist/barrier-evict.js.map +1 -1
- package/dist/commands.js +6 -4
- package/dist/commands.js.map +1 -1
- package/dist/delivery-admin.d.ts.map +1 -1
- package/dist/delivery-admin.js +2 -9
- package/dist/delivery-admin.js.map +1 -1
- package/dist/environment-manager-admission-index.d.ts +29 -0
- package/dist/environment-manager-admission-index.d.ts.map +1 -0
- package/dist/environment-manager-admission-index.js +100 -0
- package/dist/environment-manager-admission-index.js.map +1 -0
- package/dist/environment-manager-admission.d.ts +15 -0
- package/dist/environment-manager-admission.d.ts.map +1 -0
- package/dist/environment-manager-admission.js +100 -0
- package/dist/environment-manager-admission.js.map +1 -0
- package/dist/environment-manager-bootstrap-mint.d.ts +24 -0
- package/dist/environment-manager-bootstrap-mint.d.ts.map +1 -0
- package/dist/environment-manager-bootstrap-mint.js +92 -0
- package/dist/environment-manager-bootstrap-mint.js.map +1 -0
- package/dist/ledger-scanner.d.ts.map +1 -1
- package/dist/ledger-scanner.js +2 -7
- package/dist/ledger-scanner.js.map +1 -1
- package/dist/manager-authority.d.ts.map +1 -1
- package/dist/manager-authority.js +44 -48
- package/dist/manager-authority.js.map +1 -1
- package/dist/records-scanner.d.ts.map +1 -1
- package/dist/records-scanner.js +2 -6
- package/dist/records-scanner.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +49 -35
- package/dist/service.js.map +1 -1
- package/dist/store.d.ts +4 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +10 -0
- package/dist/store.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { assertDerivedOwnerToken, assertLifecycleToken, endpointRegistrationBarrier, endpointToken, environmentBootstrapActor, EpEnvelopeError, isCasLoss, provisionEndpointGateOpen, remoteManagerActors, serveIssuanceGateKv, } from "@cotal-ai/core";
|
|
2
|
+
import { activateLifecycleAtUid, registryStores } from "./lifecycle-registry.js";
|
|
3
|
+
/** Stage the native registration reservation under the host's original operation. The caller must
|
|
4
|
+
* have validated the external admission and required host policies before reaching this step. */
|
|
5
|
+
export async function stageEnvironmentManagerAdmission(reg, input) {
|
|
6
|
+
const pin = structuredClone(input);
|
|
7
|
+
assertDerivedOwnerToken(pin.owner);
|
|
8
|
+
for (const field of ["instanceId", "lifecycleUid", "authorityInstanceId", "operationId"])
|
|
9
|
+
assertLifecycleToken(pin[field], field);
|
|
10
|
+
endpointToken(pin.authorityEndpoint);
|
|
11
|
+
const fields = ["owner", "instanceId", "lifecycleUid", "authorityEndpoint", "authorityInstanceId",
|
|
12
|
+
"expiresAt", "environmentId", "admissionRevision", "operationId"];
|
|
13
|
+
if (Object.keys(pin).some(key => !fields.includes(key)) || !/^[0-9a-f]{64}$/.test(pin.environmentId) ||
|
|
14
|
+
!Number.isSafeInteger(pin.admissionRevision) || pin.admissionRevision < 1 ||
|
|
15
|
+
!Number.isSafeInteger(pin.expiresAt) || pin.expiresAt <= Math.floor(Date.now() / 1000))
|
|
16
|
+
throw new EpEnvelopeError("failed-precondition", "environment manager admission coordinates are invalid or expired");
|
|
17
|
+
const { space, authKv } = registryStores(reg);
|
|
18
|
+
const principal = `${pin.owner}.${remoteManagerActors(pin.instanceId).serve}`;
|
|
19
|
+
const gate = serveIssuanceGateKv(authKv, space, { endpoint: "manager", instanceId: pin.instanceId });
|
|
20
|
+
const eligible = async () => {
|
|
21
|
+
const observed = await gate.observe();
|
|
22
|
+
if (observed && (observed.authorityFamily !== "environment-manager" || observed.principal !== principal))
|
|
23
|
+
throw new EpEnvelopeError("permission-denied", "environment admission cannot adopt an ordinary or foreign manager instance");
|
|
24
|
+
if (observed && (observed.state === "retired" || observed.registrationRevision !== 0 ||
|
|
25
|
+
(observed.state === "frozen" && (observed.op.kind !== "registration" || observed.op.opId !== pin.operationId))))
|
|
26
|
+
throw new EpEnvelopeError("conflict", "environment admission cannot adopt a completed or foreign registration operation");
|
|
27
|
+
return observed;
|
|
28
|
+
};
|
|
29
|
+
await eligible();
|
|
30
|
+
const key = `stage.${pin.operationId}.environment-manager`;
|
|
31
|
+
// Explicit ordering makes a same-input retry byte-identical regardless of input property order.
|
|
32
|
+
const bytes = new TextEncoder().encode(JSON.stringify({
|
|
33
|
+
v: 1, kind: "environment-manager-admission", space,
|
|
34
|
+
owner: pin.owner, environmentId: pin.environmentId, admissionRevision: pin.admissionRevision,
|
|
35
|
+
instanceId: pin.instanceId, lifecycleUid: pin.lifecycleUid, authorityEndpoint: pin.authorityEndpoint,
|
|
36
|
+
authorityInstanceId: pin.authorityInstanceId, expiresAt: pin.expiresAt, operationId: pin.operationId,
|
|
37
|
+
}));
|
|
38
|
+
try {
|
|
39
|
+
// KV.create can resurrect a tombstone. An operation never acquires a second binding.
|
|
40
|
+
await authKv.put(key, bytes, { previousSeq: 0 });
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (!isCasLoss(error))
|
|
44
|
+
throw new EpEnvelopeError("unavailable", "environment admission staging outcome is unknown");
|
|
45
|
+
const existing = await authKv.get(key);
|
|
46
|
+
if (!existing || existing.operation !== "PUT" || Buffer.compare(existing.value, bytes) !== 0)
|
|
47
|
+
throw new EpEnvelopeError("conflict", "environment admission operation has foreign content or a deletion marker");
|
|
48
|
+
}
|
|
49
|
+
await activateLifecycleAtUid(reg, { owner: pin.owner, actor: environmentBootstrapActor(pin.instanceId),
|
|
50
|
+
lifecycleUid: pin.lifecycleUid, managerInstance: pin.instanceId });
|
|
51
|
+
if (await eligible() === null)
|
|
52
|
+
await provisionEndpointGateOpen(authKv, { endpoint: "manager", instanceId: pin.instanceId,
|
|
53
|
+
principal, authorityFamily: "environment-manager" });
|
|
54
|
+
// An abort may preserve every counter; its changed KV revision is the durable distinction.
|
|
55
|
+
const birthKey = `stage.${pin.operationId}.environment-manager-gate`;
|
|
56
|
+
let birth = await authKv.get(birthKey);
|
|
57
|
+
if (!birth) {
|
|
58
|
+
const opened = await eligible();
|
|
59
|
+
if (opened?.state === "open" && opened.generation === 0) {
|
|
60
|
+
const value = JSON.stringify({ instanceId: pin.instanceId, principal, openRevision: opened.revision });
|
|
61
|
+
try {
|
|
62
|
+
await authKv.put(birthKey, value, { previousSeq: 0 });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (!isCasLoss(error))
|
|
66
|
+
throw new EpEnvelopeError("unavailable", "environment manager initial gate reservation outcome is unknown");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
birth = await authKv.get(birthKey);
|
|
70
|
+
}
|
|
71
|
+
if (!birth || birth.operation !== "PUT")
|
|
72
|
+
throw new EpEnvelopeError("failed-precondition", "environment manager initial gate reservation is absent or deleted");
|
|
73
|
+
let initial;
|
|
74
|
+
try {
|
|
75
|
+
initial = birth.json();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
throw new EpEnvelopeError("failed-precondition", "environment manager initial gate reservation is not JSON");
|
|
79
|
+
}
|
|
80
|
+
const row = initial;
|
|
81
|
+
if (!row || typeof row !== "object" || Object.keys(row).length !== 3 || row.instanceId !== pin.instanceId ||
|
|
82
|
+
row.principal !== principal || !Number.isSafeInteger(row.openRevision) || Number(row.openRevision) < 1)
|
|
83
|
+
throw new EpEnvelopeError("failed-precondition", "environment manager initial gate reservation has foreign coordinates");
|
|
84
|
+
const barrier = endpointRegistrationBarrier(authKv, space, { endpoint: "manager", instanceId: pin.instanceId,
|
|
85
|
+
opId: pin.operationId });
|
|
86
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
87
|
+
const current = await eligible();
|
|
88
|
+
if (!current)
|
|
89
|
+
throw new EpEnvelopeError("failed-precondition", "environment manager gate disappeared");
|
|
90
|
+
if (current.state === "frozen")
|
|
91
|
+
return { gateRevision: current.revision };
|
|
92
|
+
if (current.revision !== row.openRevision)
|
|
93
|
+
throw new EpEnvelopeError("conflict", "environment manager registration was aborted; its reopened gate cannot be re-frozen");
|
|
94
|
+
const revision = await barrier.freeze(current.revision);
|
|
95
|
+
if (revision !== null)
|
|
96
|
+
return { gateRevision: revision };
|
|
97
|
+
}
|
|
98
|
+
throw new EpEnvelopeError("conflict", "environment registration reservation kept losing its native freeze CAS");
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=environment-manager-admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-manager-admission.js","sourceRoot":"","sources":["../src/environment-manager-admission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { EnvironmentManagerAdmissionCoordinates } from "./environment-manager-admission.js";
|
|
2
|
+
import { type LifecycleRegistry } from "./lifecycle-registry.js";
|
|
3
|
+
/** Host-only signing inputs. The public nkey and credential ID are recorded before this call;
|
|
4
|
+
* neither a guest request nor this helper chooses a new admission or permission profile. */
|
|
5
|
+
interface BootstrapMintInput {
|
|
6
|
+
publicId: string;
|
|
7
|
+
credentialId: string;
|
|
8
|
+
expiresAt: number;
|
|
9
|
+
account: {
|
|
10
|
+
pub: string;
|
|
11
|
+
signingSeed: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Internal one-shot mint after native admission staging. A reserved or ambiguous attempt stays
|
|
15
|
+
* held on replay; external cleanup must retire its recorded lifecycle, never mint a replacement.
|
|
16
|
+
* Full provider/policy admission and private file delivery are not implemented by this helper. */
|
|
17
|
+
export declare function mintEnvironmentManagerBootstrap(reg: LifecycleRegistry, input: EnvironmentManagerAdmissionCoordinates, mint: BootstrapMintInput): Promise<{
|
|
18
|
+
jwt: string;
|
|
19
|
+
exp: number;
|
|
20
|
+
credentialId: string;
|
|
21
|
+
gateRevision: number;
|
|
22
|
+
}>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=environment-manager-bootstrap-mint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-manager-bootstrap-mint.d.ts","sourceRoot":"","sources":["../src/environment-manager-bootstrap-mint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAC;AAEjG,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjF;4FAC4F;AAC5F,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED;;kGAEkG;AAClG,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,sCAAsC,EAC7C,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAyEnF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { assertLifecycleToken, contractDigest, environmentBootstrapActor, EpEnvelopeError, epgateKey, isCasLoss, isUserNkey, mintPublicUserJwt, parseEndpointGate, remoteManagerActors, } from "@cotal-ai/core";
|
|
2
|
+
import { finalizeAgentMint, markLedgerRowRevoked, stageAgentMint } from "./credential-ledger.js";
|
|
3
|
+
import { registryStores } from "./lifecycle-registry.js";
|
|
4
|
+
/** Internal one-shot mint after native admission staging. A reserved or ambiguous attempt stays
|
|
5
|
+
* held on replay; external cleanup must retire its recorded lifecycle, never mint a replacement.
|
|
6
|
+
* Full provider/policy admission and private file delivery are not implemented by this helper. */
|
|
7
|
+
export async function mintEnvironmentManagerBootstrap(reg, input, mint) {
|
|
8
|
+
const pin = structuredClone(input);
|
|
9
|
+
const args = structuredClone(mint);
|
|
10
|
+
const now = Math.floor(Date.now() / 1000);
|
|
11
|
+
const fields = ["owner", "instanceId", "lifecycleUid", "authorityEndpoint", "authorityInstanceId",
|
|
12
|
+
"expiresAt", "environmentId", "admissionRevision", "operationId"];
|
|
13
|
+
if (Object.keys(pin).length !== fields.length || Object.keys(pin).some(key => !fields.includes(key)) ||
|
|
14
|
+
Object.keys(args).sort().join(",") !== "account,credentialId,expiresAt,publicId" ||
|
|
15
|
+
!isUserNkey(args.publicId) || !Number.isSafeInteger(args.expiresAt) || args.expiresAt <= now ||
|
|
16
|
+
args.expiresAt > now + 300 || args.expiresAt > pin.expiresAt)
|
|
17
|
+
throw new EpEnvelopeError("failed-precondition", "environment bootstrap mint inputs or expiry are invalid");
|
|
18
|
+
assertLifecycleToken(pin.operationId, "operationId");
|
|
19
|
+
assertLifecycleToken(pin.instanceId, "instanceId");
|
|
20
|
+
assertLifecycleToken(pin.lifecycleUid, "lifecycleUid");
|
|
21
|
+
assertLifecycleToken(args.credentialId, "credentialId");
|
|
22
|
+
const { space, authKv } = registryStores(reg);
|
|
23
|
+
const admission = await authKv.get(`stage.${pin.operationId}.environment-manager`);
|
|
24
|
+
if (!admission || admission.operation !== "PUT")
|
|
25
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap has no native admission staging");
|
|
26
|
+
let staged;
|
|
27
|
+
try {
|
|
28
|
+
staged = admission.json();
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new EpEnvelopeError("failed-precondition", "environment bootstrap admission staging is not JSON");
|
|
32
|
+
}
|
|
33
|
+
const expected = { v: 1, kind: "environment-manager-admission", space, ...pin };
|
|
34
|
+
if (contractDigest(staged) !== contractDigest(expected))
|
|
35
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap does not match the staged admission");
|
|
36
|
+
const birth = await authKv.get(`stage.${pin.operationId}.environment-manager-gate`);
|
|
37
|
+
if (!birth || birth.operation !== "PUT")
|
|
38
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap has no native initial-gate stamp");
|
|
39
|
+
let initial;
|
|
40
|
+
try {
|
|
41
|
+
initial = birth.json();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
throw new EpEnvelopeError("failed-precondition", "environment bootstrap initial-gate stamp is not JSON");
|
|
45
|
+
}
|
|
46
|
+
if (!initial || typeof initial !== "object" || Object.keys(initial).length !== 3 || initial.instanceId !== pin.instanceId ||
|
|
47
|
+
initial.principal !== `${pin.owner}.${remoteManagerActors(pin.instanceId).serve}` ||
|
|
48
|
+
!Number.isSafeInteger(initial.openRevision) || Number(initial.openRevision) < 1)
|
|
49
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap initial-gate stamp has foreign coordinates");
|
|
50
|
+
const key = epgateKey("manager", pin.instanceId);
|
|
51
|
+
const entry = await authKv.get(key);
|
|
52
|
+
if (!entry || entry.operation !== "PUT")
|
|
53
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap has no native registration gate");
|
|
54
|
+
const gate = parseEndpointGate(entry.value, key);
|
|
55
|
+
if (gate.authorityFamily !== "environment-manager" ||
|
|
56
|
+
gate.principal !== `${pin.owner}.${remoteManagerActors(pin.instanceId).serve}` ||
|
|
57
|
+
gate.state !== "frozen" || gate.op.kind !== "registration" || gate.op.opId !== pin.operationId ||
|
|
58
|
+
gate.registrationRevision !== 0)
|
|
59
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap requires its original frozen registration");
|
|
60
|
+
const reservationKey = `stage.${pin.operationId}.environment-bootstrap-mint`;
|
|
61
|
+
const reservation = JSON.stringify({ v: 1, admissionDigest: contractDigest(expected), publicId: args.publicId,
|
|
62
|
+
credentialId: args.credentialId, expiresAt: args.expiresAt });
|
|
63
|
+
try {
|
|
64
|
+
await authKv.put(reservationKey, reservation, { previousSeq: 0 });
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (isCasLoss(error))
|
|
68
|
+
throw new EpEnvelopeError("conflict", "environment bootstrap mint is already reserved; its outcome stays held");
|
|
69
|
+
throw new EpEnvelopeError("unavailable", "environment bootstrap mint reservation outcome is unknown");
|
|
70
|
+
}
|
|
71
|
+
const signed = await mintPublicUserJwt({ space, account: args.account }, args.publicId, "environment-bootstrap", {
|
|
72
|
+
principal: { owner: pin.owner, actor: environmentBootstrapActor(pin.instanceId) }, lifecycleUid: pin.lifecycleUid,
|
|
73
|
+
environmentManager: pin, expiresAt: args.expiresAt,
|
|
74
|
+
});
|
|
75
|
+
const ledger = await stageAgentMint(reg, { lifecycleUid: pin.lifecycleUid, credentialId: args.credentialId,
|
|
76
|
+
holderPrincipal: `${pin.owner}.${environmentBootstrapActor(pin.instanceId)}`, sourceChain: ["root"], exp: signed.exp });
|
|
77
|
+
let gateRevision;
|
|
78
|
+
try {
|
|
79
|
+
// This touch precedes preparation, never a token-pinned registration continuation. The native
|
|
80
|
+
// lifecycle finalize remains separate; terminal cleanup freezes that lifecycle before abort.
|
|
81
|
+
gateRevision = await authKv.update(key, entry.value, entry.revision);
|
|
82
|
+
await finalizeAgentMint(reg, ledger);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
await markLedgerRowRevoked(authKv, ledger.rowKey);
|
|
86
|
+
if (isCasLoss(error))
|
|
87
|
+
throw new EpEnvelopeError("permission-denied", "environment bootstrap lost its native registration fence");
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
return { ...signed, credentialId: args.credentialId, gateRevision };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=environment-manager-bootstrap-mint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-manager-bootstrap-mint.js","sourceRoot":"","sources":["../src/environment-manager-bootstrap-mint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-scanner.d.ts","sourceRoot":"","sources":["../src/ledger-scanner.ts"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"ledger-scanner.d.ts","sourceRoot":"","sources":["../src/ledger-scanner.ts"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAA6G,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhK,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAkC/D;;;;oGAIoG;AACpG,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;CACxB;AAED;0EAC0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,gGAAgG;IAChG,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C;2CACuC;IACvC,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,6FAA6F;IAC7F,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5F;4BACwB;IACxB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE;8FAC0F;IAC1F,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3C;;;wFAGoF;IACpF,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACxC,iDAAiD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AASD;wFACwF;AACxF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMlF;AAED;;;iFAGiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,KAAK,EAAE,cAAc,CAAC;IACtB,8FAA8F;IAC9F,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;+FAC2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAAC;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,YAAY,CAAC,EAAE,OAAO,uBAAuB,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACnF,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0BlC;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,iBAAiB,CAE7I;AAED;;;;;;yGAMyG;AACzG,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AA6JD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAehH"}
|
package/dist/ledger-scanner.js
CHANGED
|
@@ -62,8 +62,8 @@
|
|
|
62
62
|
* class, excluded by the one-plane-per-space composition; a foreign re-resolution of the name is
|
|
63
63
|
* made loud by the per-message exact-prefix validation in the drain.
|
|
64
64
|
*/
|
|
65
|
-
import { AckPolicy, DeliverPolicy,
|
|
66
|
-
import { EpEnvelopeError, assertInboxConnId, assertLifecycleToken, endpointToken, epAuthBucket } from "@cotal-ai/core";
|
|
65
|
+
import { AckPolicy, DeliverPolicy, jetstream, jetstreamManager } from "@nats-io/jetstream";
|
|
66
|
+
import { EpEnvelopeError, assertInboxConnId, assertLifecycleToken, endpointToken, epAuthBucket, isConsumerNotFound } from "@cotal-ai/core";
|
|
67
67
|
import { openAuthorityClient } from "./authority-client.js";
|
|
68
68
|
import { guardedScan } from "./plane-claim.js";
|
|
69
69
|
import { serializedFor } from "./serialized.js";
|
|
@@ -95,11 +95,6 @@ function assertSegment(v, what) {
|
|
|
95
95
|
throw new EpEnvelopeError("failed-precondition", `the sealed scanner's ${what} ${JSON.stringify(v)} is not a KV-safe key segment (SPEC 13.9)`);
|
|
96
96
|
return v;
|
|
97
97
|
}
|
|
98
|
-
/** STRUCTURAL not-found classification (not a message regex): @nats-io/jetstream@3.4.0 throws a
|
|
99
|
-
* ConsumerNotFoundError extends JetStreamApiError whose `.code` is the JS API err_code
|
|
100
|
-
* (`JetStreamApiCodes.ConsumerNotFound` = 10014); `.status` is the HTTP 404. The pre-clean proceeds
|
|
101
|
-
* ONLY on this exact structured shape — any other error fails the scan closed. */
|
|
102
|
-
const isConsumerNotFound = (e) => e instanceof JetStreamApiError && e.code === JetStreamApiCodes.ConsumerNotFound;
|
|
103
98
|
/** The production scanner's BRAND (HIGH: security/distsys, site-1 re-verify): the ONLY way to be an
|
|
104
99
|
* AuthLedgerScanner the barrier registry accepts is to be built by {@link buildScanner} in THIS
|
|
105
100
|
* module, which pins the scanner's exact space. A hand-assembled structural object (e.g. one whose
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-scanner.js","sourceRoot":"","sources":["../src/ledger-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"ledger-scanner.js","sourceRoot":"","sources":["../src/ledger-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-authority.d.ts","sourceRoot":"","sources":["../src/manager-authority.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,mBAAmB,EACnB,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAE7B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAerB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAqF,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtI,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,qGAAqG;AACrG,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAEpF;+FAC+F;AAC/F,wBAAsB,6BAA6B,CAAC,IAAI,EAAE;IACxD,OAAO,EAAE,6BAA6B,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBhB;AAED;sGACsG;AACtG,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAAC,EAAE,6BAA6B,GAAG,OAAO,CAGrG;AAED;qEACqE;AACrE,MAAM,MAAM,+BAA+B,GAAG,sBAAsB,GAAG;IACrE,OAAO,EAAE,6BAA6B,CAAC;IACvC;mEAC+D;IAC/D,KAAK,EAAE,CAAC,IAAI,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;QAC/C,OAAO,EAAE,6BAA6B,CAAC;KACxC,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,8BAA8B,CAAC,aAAa,CAAC,CAAC;QAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9G;iGAC6F;IAC7F,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,6BAA6B,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAMF;;mGAEmG;AACnG,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,6BAA6B,
|
|
1
|
+
{"version":3,"file":"manager-authority.d.ts","sourceRoot":"","sources":["../src/manager-authority.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,12 +77,14 @@ export function parseRemoteManagerAuthorityRequest(raw, opts = {}) {
|
|
|
77
77
|
}
|
|
78
78
|
else if (o.run !== undefined)
|
|
79
79
|
requestError(`${o.operation} must not carry run`);
|
|
80
|
+
let session;
|
|
80
81
|
if (o.operation === "session") {
|
|
81
82
|
const s = o.session;
|
|
82
|
-
if (!s || !isUserNkey(s.id) || s.endpoint !== "manager" ||
|
|
83
|
+
if (!s || Object.keys(s).sort().join(",") !== "endpoint,epoch,exp,id,sessionId" || !isUserNkey(s.id) || s.endpoint !== "manager" ||
|
|
83
84
|
typeof s.sessionId !== "string" || s.sessionId.length === 0 || typeof s.epoch !== "number" || !Number.isSafeInteger(s.epoch) || s.epoch < 0 ||
|
|
84
85
|
typeof s.exp !== "number" || !Number.isSafeInteger(s.exp) || s.exp <= 0)
|
|
85
86
|
requestError("session requires { id, endpoint:\"manager\", sessionId, epoch, exp }");
|
|
87
|
+
session = { id: s.id, endpoint: s.endpoint, sessionId: s.sessionId, epoch: s.epoch, exp: s.exp };
|
|
86
88
|
}
|
|
87
89
|
else if (o.session !== undefined)
|
|
88
90
|
requestError(`${o.operation} must not carry session`);
|
|
@@ -128,7 +130,7 @@ export function parseRemoteManagerAuthorityRequest(raw, opts = {}) {
|
|
|
128
130
|
...envelope,
|
|
129
131
|
...(renewal ? { accountPublicKey: o.accountPublicKey, processEpoch: o.processEpoch } : {}),
|
|
130
132
|
...(run ? { run } : {}),
|
|
131
|
-
...(
|
|
133
|
+
...(session ? { session } : {}),
|
|
132
134
|
...(retirement ? { retirement } : {}),
|
|
133
135
|
...(o.operation === "transferReader" ? { transferReader: { id: o.transferReader.id } } : {}),
|
|
134
136
|
...(Array.isArray(o.contractArtifacts) ? { contractArtifacts: o.contractArtifacts } : {}),
|
|
@@ -202,29 +204,37 @@ export async function issueRemoteManagerAuthority(args) {
|
|
|
202
204
|
credentials,
|
|
203
205
|
};
|
|
204
206
|
}
|
|
205
|
-
function
|
|
206
|
-
throw new EpEnvelopeError("bad-request",
|
|
207
|
+
function runRequestError(what, detail) {
|
|
208
|
+
throw new EpEnvelopeError("bad-request", `${what} request ${detail}`);
|
|
207
209
|
}
|
|
208
|
-
/** Closed parser for
|
|
209
|
-
|
|
210
|
+
/** Closed parser for what every run request from a registered manager carries: the envelope, the
|
|
211
|
+
* assigned account and the process epoch. A field outside those and the request's own `fields` is
|
|
212
|
+
* refused, and `what` names the request in every refusal. */
|
|
213
|
+
function parseRegisteredRunRequest(raw, kind, what, fields) {
|
|
210
214
|
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
211
|
-
|
|
215
|
+
runRequestError(what, "must be an object");
|
|
212
216
|
const o = raw;
|
|
213
|
-
const allowed = ["v", "kind", "space", "actor", "instanceId", "managerLifecycleUid", "requestId", "registrationProof", "accountPublicKey", "processEpoch", "identities",
|
|
217
|
+
const allowed = ["v", "kind", "space", "actor", "instanceId", "managerLifecycleUid", "requestId", "registrationProof", "accountPublicKey", "processEpoch", "identities", ...fields];
|
|
214
218
|
for (const k of Object.keys(o))
|
|
215
219
|
if (!allowed.includes(k))
|
|
216
|
-
|
|
217
|
-
const envelope = parseRemoteManagerEnvelope(o,
|
|
220
|
+
runRequestError(what, `has unknown field ${k}`);
|
|
221
|
+
const envelope = parseRemoteManagerEnvelope(o, kind, what);
|
|
218
222
|
if (!isAccountNkey(o.accountPublicKey))
|
|
219
|
-
|
|
223
|
+
runRequestError(what, "requires an account public key");
|
|
220
224
|
if (!Number.isSafeInteger(o.processEpoch) || o.processEpoch < 0)
|
|
221
|
-
|
|
222
|
-
|
|
225
|
+
runRequestError(what, "requires a non-negative processEpoch");
|
|
226
|
+
return { ...envelope, accountPublicKey: o.accountPublicKey, processEpoch: o.processEpoch };
|
|
227
|
+
}
|
|
228
|
+
/** Closed parser for {@link RemoteRunAdmissionRequest}: unknown fields refuse, never ignored. */
|
|
229
|
+
export function parseRemoteRunAdmissionRequest(raw) {
|
|
230
|
+
const what = "manager run admission";
|
|
231
|
+
const registered = parseRegisteredRunRequest(raw, "manager-run-admission", what, ["run"]);
|
|
232
|
+
const run = raw.run;
|
|
223
233
|
if (run === null || typeof run !== "object" || Object.keys(run).sort().join(",") !== "runId,subject" ||
|
|
224
234
|
typeof run.runId !== "string" || !/^run-[0-9a-f]{32}$/.test(run.runId) || typeof run.subject !== "string")
|
|
225
|
-
|
|
235
|
+
runRequestError(what, "requires exactly run.runId (host-minted) and run.subject");
|
|
226
236
|
return {
|
|
227
|
-
v: 1, kind: "manager-run-admission", ...
|
|
237
|
+
v: 1, kind: "manager-run-admission", ...registered,
|
|
228
238
|
run: { runId: run.runId, subject: run.subject },
|
|
229
239
|
};
|
|
230
240
|
}
|
|
@@ -302,25 +312,16 @@ export async function admitRemoteRun(args) {
|
|
|
302
312
|
const ID_TOKEN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
303
313
|
/** Closed parser for the issuing-host revoke. It carries no asserted owner or attribution. */
|
|
304
314
|
export function parseRemoteRunRevokeRequest(raw) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const
|
|
308
|
-
if (o.kind !== "manager-run-revoke")
|
|
309
|
-
admissionError("must be v1 manager-run-revoke");
|
|
310
|
-
const allowed = ["v", "kind", "space", "actor", "instanceId", "managerLifecycleUid", "requestId", "registrationProof", "accountPublicKey", "processEpoch", "identities", "revoke"];
|
|
311
|
-
for (const key of Object.keys(o))
|
|
312
|
-
if (!allowed.includes(key))
|
|
313
|
-
admissionError(`has unknown field ${key}`);
|
|
314
|
-
const { revoke, ...rest } = o;
|
|
315
|
-
const base = parseRemoteRunAdmissionRequest({ ...rest, kind: "manager-run-admission", run: { runId: `run-${"0".repeat(32)}`, subject: "" } });
|
|
315
|
+
const what = "manager run revoke";
|
|
316
|
+
const registered = parseRegisteredRunRequest(raw, "manager-run-revoke", what, ["revoke"]);
|
|
317
|
+
const { revoke } = raw;
|
|
316
318
|
if (revoke === null || typeof revoke !== "object" || Array.isArray(revoke))
|
|
317
|
-
|
|
319
|
+
runRequestError(what, "requires revoke");
|
|
318
320
|
const r = revoke;
|
|
319
321
|
if (Object.keys(r).sort().join(",") !== "reason,runId" || typeof r.runId !== "string" || !/^run-[0-9a-f]{32}$/.test(r.runId) ||
|
|
320
322
|
typeof r.reason !== "string" || r.reason.length === 0)
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
return { ...registered, kind: "manager-run-revoke", revoke: { runId: r.runId, reason: r.reason } };
|
|
323
|
+
runRequestError(what, "requires exactly revoke.runId and a non-empty revoke.reason");
|
|
324
|
+
return { v: 1, kind: "manager-run-revoke", ...registered, revoke: { runId: r.runId, reason: r.reason } };
|
|
324
325
|
}
|
|
325
326
|
/** The door has authenticated the holder and read its current scope. The run's owner comes only
|
|
326
327
|
* from the recorded admission. A platform assignment is not an admin grant. */
|
|
@@ -348,22 +349,17 @@ export async function revokeRemoteRun(args) {
|
|
|
348
349
|
}
|
|
349
350
|
/** Closed parser for {@link RemoteRunAttemptRequest}. */
|
|
350
351
|
export function parseRemoteRunAttemptRequest(raw) {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
const
|
|
354
|
-
if (o.kind !== "manager-run-attempt")
|
|
355
|
-
admissionError("must be v1 manager-run-attempt");
|
|
356
|
-
const { attempt, operator, ...rest } = o;
|
|
352
|
+
const what = "manager run attempt";
|
|
353
|
+
const registered = parseRegisteredRunRequest(raw, "manager-run-attempt", what, ["attempt", "operator"]);
|
|
354
|
+
const { attempt, operator } = raw;
|
|
357
355
|
if ((attempt === undefined) === (operator === undefined))
|
|
358
|
-
|
|
359
|
-
const base = parseRemoteRunAdmissionRequest({ ...rest, kind: "manager-run-admission", run: { runId: `run-${"0".repeat(32)}`, subject: "" } });
|
|
360
|
-
const { run: _run, kind: _kind, ...registered } = base;
|
|
356
|
+
runRequestError(what, "carries exactly one of attempt or operator");
|
|
361
357
|
const plain = (v, keys, optional = []) => {
|
|
362
358
|
if (v === null || typeof v !== "object" || Array.isArray(v))
|
|
363
|
-
|
|
359
|
+
runRequestError(what, "attempt/operator must be an object");
|
|
364
360
|
const k = Object.keys(v);
|
|
365
361
|
if (k.some((x) => !keys.includes(x) && !optional.includes(x)) || keys.some((x) => !k.includes(x)))
|
|
366
|
-
|
|
362
|
+
runRequestError(what, `attempt/operator must carry exactly ${keys.join(", ")}`);
|
|
367
363
|
return v;
|
|
368
364
|
};
|
|
369
365
|
const runIdOk = (v) => typeof v === "string" && /^run-[0-9a-f]{32}$/.test(v);
|
|
@@ -373,26 +369,26 @@ export function parseRemoteRunAttemptRequest(raw) {
|
|
|
373
369
|
if (!runIdOk(a.runId) || typeof a.takeoverId !== "string" || !ID_TOKEN.test(a.takeoverId) ||
|
|
374
370
|
!Number.isSafeInteger(a.epoch) || a.epoch < 1 || !Number.isSafeInteger(a.fencingToken) || a.fencingToken < 1 ||
|
|
375
371
|
!isUserNkey(a.driverId) || !isUserNkey(a.mediatorId) || a.driverId === a.mediatorId)
|
|
376
|
-
|
|
372
|
+
runRequestError(what, "attempt requires a run id, takeover id, positive epoch/fencingToken and distinct driver/mediator nkeys");
|
|
377
373
|
if (!servedOk(a.served))
|
|
378
|
-
|
|
379
|
-
return {
|
|
374
|
+
runRequestError(what, "attempt served must be a request subject");
|
|
375
|
+
return { v: 1, kind: "manager-run-attempt", ...registered, attempt: { runId: a.runId, takeoverId: a.takeoverId, epoch: a.epoch, fencingToken: a.fencingToken, driverId: a.driverId, mediatorId: a.mediatorId, ...(a.served !== undefined ? { served: a.served } : {}) } };
|
|
380
376
|
}
|
|
381
377
|
const op = plain(operator, ["id", "takeoverId"], ["runId", "answers", "served"]);
|
|
382
378
|
if (!isUserNkey(op.id) || typeof op.takeoverId !== "string" || !ID_TOKEN.test(op.takeoverId) ||
|
|
383
379
|
(op.runId !== undefined && !runIdOk(op.runId)))
|
|
384
|
-
|
|
380
|
+
runRequestError(what, "operator requires an nkey id, a takeover id and an optional run id");
|
|
385
381
|
let answers;
|
|
386
382
|
if (op.answers !== undefined) {
|
|
387
383
|
const t = plain(op.answers, ["runId", "stepKey"], ["amend"]);
|
|
388
384
|
if (!runIdOk(t.runId) || typeof t.stepKey !== "string" || t.stepKey.length === 0 || t.stepKey.length > 1024 || op.runId !== undefined ||
|
|
389
385
|
(t.amend !== undefined && t.amend !== true))
|
|
390
|
-
|
|
386
|
+
runRequestError(what, "operator answers carries the run id and step key of one pause, an optional amend: true and no outer run id");
|
|
391
387
|
answers = { runId: t.runId, stepKey: t.stepKey, ...(t.amend === true ? { amend: true } : {}) };
|
|
392
388
|
}
|
|
393
389
|
if (!servedOk(op.served) || (op.served !== undefined && answers === undefined))
|
|
394
|
-
|
|
395
|
-
return {
|
|
390
|
+
runRequestError(what, "operator served is the run-answer subject, and only an answering operator carries one");
|
|
391
|
+
return { v: 1, kind: "manager-run-attempt", ...registered, operator: { id: op.id, takeoverId: op.takeoverId, ...(op.runId !== undefined ? { runId: op.runId } : {}), ...(answers ? { answers } : {}), ...(op.served !== undefined ? { served: op.served } : {}) } };
|
|
396
392
|
}
|
|
397
393
|
/** The run-start, resume or answer request its caller published on `subject`, or undefined for a
|
|
398
394
|
* request no manager serves. */
|