@cotal-ai/core 0.48.2 → 0.49.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/agent-file.d.ts +34 -0
- package/dist/agent-file.d.ts.map +1 -1
- package/dist/agent-file.js +94 -2
- package/dist/agent-file.js.map +1 -1
- package/dist/auth-provider.d.ts +25 -1
- package/dist/auth-provider.d.ts.map +1 -1
- package/dist/auth-provider.js.map +1 -1
- package/dist/connector.d.ts +4 -0
- package/dist/connector.d.ts.map +1 -1
- package/dist/connector.js.map +1 -1
- package/dist/endpoint-action.d.ts +1 -0
- package/dist/endpoint-action.d.ts.map +1 -1
- package/dist/endpoint-action.js +1 -1
- package/dist/endpoint-action.js.map +1 -1
- package/dist/endpoint-binding.d.ts +6 -0
- package/dist/endpoint-binding.d.ts.map +1 -1
- package/dist/endpoint-binding.js +17 -0
- package/dist/endpoint-binding.js.map +1 -1
- package/dist/endpoint-grants.d.ts.map +1 -1
- package/dist/endpoint-grants.js +34 -12
- package/dist/endpoint-grants.js.map +1 -1
- package/dist/endpoint-invoke.d.ts.map +1 -1
- package/dist/endpoint-invoke.js +9 -49
- package/dist/endpoint-invoke.js.map +1 -1
- package/dist/endpoint-publish-denial.d.ts +35 -0
- package/dist/endpoint-publish-denial.d.ts.map +1 -0
- package/dist/endpoint-publish-denial.js +56 -0
- package/dist/endpoint-publish-denial.js.map +1 -0
- package/dist/endpoint-serve-kv.d.ts +16 -0
- package/dist/endpoint-serve-kv.d.ts.map +1 -1
- package/dist/endpoint-serve-kv.js +29 -0
- package/dist/endpoint-serve-kv.js.map +1 -1
- package/dist/endpoint-serve.d.ts.map +1 -1
- package/dist/endpoint-serve.js +9 -4
- package/dist/endpoint-serve.js.map +1 -1
- package/dist/endpoint-service.d.ts +21 -0
- package/dist/endpoint-service.d.ts.map +1 -1
- package/dist/endpoint-service.js +150 -15
- package/dist/endpoint-service.js.map +1 -1
- package/dist/endpoint-subjects.d.ts +34 -0
- package/dist/endpoint-subjects.d.ts.map +1 -1
- package/dist/endpoint-subjects.js +87 -18
- package/dist/endpoint-subjects.js.map +1 -1
- package/dist/endpoint-verbs.d.ts +4 -2
- package/dist/endpoint-verbs.d.ts.map +1 -1
- package/dist/endpoint-verbs.js +22 -7
- package/dist/endpoint-verbs.js.map +1 -1
- package/dist/endpoint.d.ts +155 -5
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +528 -48
- package/dist/endpoint.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/issued-authority.d.ts +168 -0
- package/dist/issued-authority.d.ts.map +1 -0
- package/dist/issued-authority.js +497 -0
- package/dist/issued-authority.js.map +1 -0
- package/dist/issuer-session.d.ts +30 -0
- package/dist/issuer-session.d.ts.map +1 -0
- package/dist/issuer-session.js +51 -0
- package/dist/issuer-session.js.map +1 -0
- package/dist/lifecycle-state.d.ts +9 -2
- package/dist/lifecycle-state.d.ts.map +1 -1
- package/dist/lifecycle-state.js +11 -2
- package/dist/lifecycle-state.js.map +1 -1
- package/dist/provision.d.ts +24 -14
- package/dist/provision.d.ts.map +1 -1
- package/dist/provision.js +137 -14
- package/dist/provision.js.map +1 -1
- package/dist/remote-manager-authority.d.ts +126 -1
- package/dist/remote-manager-authority.d.ts.map +1 -1
- package/dist/remote-manager-authority.js +21 -0
- package/dist/remote-manager-authority.js.map +1 -1
- package/dist/run-admission.d.ts +88 -0
- package/dist/run-admission.d.ts.map +1 -0
- package/dist/run-admission.js +193 -0
- package/dist/run-admission.js.map +1 -0
- package/dist/run-driver-grants.d.ts.map +1 -1
- package/dist/run-driver-grants.js +7 -0
- package/dist/run-driver-grants.js.map +1 -1
- package/dist/run-host.d.ts +5 -0
- package/dist/run-host.d.ts.map +1 -1
- package/dist/run-host.js.map +1 -1
- package/dist/runtime.d.ts +31 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/secret-fs.d.ts +25 -0
- package/dist/secret-fs.d.ts.map +1 -1
- package/dist/secret-fs.js +136 -3
- package/dist/secret-fs.js.map +1 -1
- package/dist/secret-store.d.ts +38 -0
- package/dist/secret-store.d.ts.map +1 -1
- package/dist/secret-store.js +53 -1
- package/dist/secret-store.js.map +1 -1
- package/dist/streams.d.ts +23 -75
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +65 -85
- package/dist/streams.js.map +1 -1
- package/dist/subjects.d.ts +3 -1
- package/dist/subjects.d.ts.map +1 -1
- package/dist/subjects.js +3 -1
- package/dist/subjects.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { canonicalJson } from "./canonical.js";
|
|
2
|
+
import { EpEnvelopeError } from "./endpoint-envelope.js";
|
|
3
|
+
import { assertIdToken, endpointToken } from "./endpoint-subjects.js";
|
|
4
|
+
import { isCasLoss } from "./endpoint-records.js";
|
|
5
|
+
import { AUTHORITY_STORE_IMMUTABLE_FLAGS, WRITE_ONCE_PER_KEY, assertStoreShape, issuedPermitsPattern, issuedPermitsSubject, readIssuedSubjectPermissions, } from "./issued-authority.js";
|
|
6
|
+
import { chatSubject, token } from "./subjects.js";
|
|
7
|
+
export function admissionBucket(space) {
|
|
8
|
+
return `cotal_admission_${token(space)}`;
|
|
9
|
+
}
|
|
10
|
+
export function admissionKey(endpoint, runId) {
|
|
11
|
+
return `admission.v1.${endpointToken(endpoint)}.${assertIdToken(runId, "runId")}`;
|
|
12
|
+
}
|
|
13
|
+
export function revocationKey(endpoint, runId) {
|
|
14
|
+
return `revoked.v1.${endpointToken(endpoint)}.${assertIdToken(runId, "runId")}`;
|
|
15
|
+
}
|
|
16
|
+
function closed(value, keys, label) {
|
|
17
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
18
|
+
throw new Error(`${label} must be a plain record`);
|
|
19
|
+
for (const key of Object.keys(value))
|
|
20
|
+
if (!keys.includes(key))
|
|
21
|
+
throw new Error(`${label} carries an unsupported field ${key}`);
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function callerSnapshot(value) {
|
|
25
|
+
const raw = closed(value, ["owner", "actor", "uid", "generation"], "admission caller");
|
|
26
|
+
if (typeof raw.owner !== "string" || typeof raw.actor !== "string" || typeof raw.uid !== "string"
|
|
27
|
+
|| (raw.generation !== undefined && typeof raw.generation !== "string"))
|
|
28
|
+
throw new Error("admission caller is malformed");
|
|
29
|
+
return Object.freeze({ owner: raw.owner, actor: raw.actor, uid: raw.uid, ...(raw.generation !== undefined ? { generation: raw.generation } : {}) });
|
|
30
|
+
}
|
|
31
|
+
function provenanceSnapshot(value) {
|
|
32
|
+
const raw = closed(value, ["kind", "ref", "resolvedRevision", "by", "reason"], "admission provenance");
|
|
33
|
+
if (raw.kind === "issued") {
|
|
34
|
+
const ref = closed(raw.ref, ["space", "owner", "actor", "uid", "generation"], "admission issued ref");
|
|
35
|
+
if (!["space", "owner", "actor", "uid", "generation"].every((k) => typeof ref[k] === "string")
|
|
36
|
+
|| typeof raw.resolvedRevision !== "number" || !Number.isSafeInteger(raw.resolvedRevision) || raw.resolvedRevision <= 0
|
|
37
|
+
|| raw.by !== undefined || raw.reason !== undefined)
|
|
38
|
+
throw new Error("issued admission provenance is malformed");
|
|
39
|
+
const pinned = { space: ref.space, owner: ref.owner, actor: ref.actor, uid: ref.uid, generation: ref.generation };
|
|
40
|
+
return Object.freeze({ kind: "issued", ref: Object.freeze(pinned), resolvedRevision: raw.resolvedRevision });
|
|
41
|
+
}
|
|
42
|
+
if (raw.kind === "operator") {
|
|
43
|
+
if (typeof raw.by !== "string" || raw.by.length === 0 || typeof raw.reason !== "string" || raw.reason.length === 0
|
|
44
|
+
|| raw.ref !== undefined || raw.resolvedRevision !== undefined)
|
|
45
|
+
throw new Error("operator admission provenance is malformed");
|
|
46
|
+
return Object.freeze({ kind: "operator", by: raw.by, reason: raw.reason });
|
|
47
|
+
}
|
|
48
|
+
throw new Error("unsupported admission provenance");
|
|
49
|
+
}
|
|
50
|
+
/** Validate a record at the consuming boundary: closed schema, version, coordinates. */
|
|
51
|
+
export function admissionSnapshot(value) {
|
|
52
|
+
const raw = closed(value, ["version", "space", "endpoint", "runId", "instanceId", "caller", "ceiling", "provenance", "admittedAt"], "run admission");
|
|
53
|
+
if (raw.version !== 1)
|
|
54
|
+
throw new Error(`unsupported run admission version ${String(raw.version)}`);
|
|
55
|
+
if (typeof raw.space !== "string" || typeof raw.endpoint !== "string" || typeof raw.runId !== "string" || typeof raw.instanceId !== "string"
|
|
56
|
+
|| typeof raw.admittedAt !== "number" || !Number.isSafeInteger(raw.admittedAt) || raw.admittedAt <= 0)
|
|
57
|
+
throw new Error("run admission is malformed");
|
|
58
|
+
endpointToken(raw.space);
|
|
59
|
+
endpointToken(raw.endpoint);
|
|
60
|
+
assertIdToken(raw.runId, "runId");
|
|
61
|
+
const caller = callerSnapshot(raw.caller);
|
|
62
|
+
const provenance = provenanceSnapshot(raw.provenance);
|
|
63
|
+
if (provenance.kind === "issued") {
|
|
64
|
+
const r = provenance.ref;
|
|
65
|
+
if (r.space !== raw.space || r.owner !== caller.owner || r.actor !== caller.actor || r.uid !== caller.uid || caller.generation !== r.generation)
|
|
66
|
+
throw new Error("run admission's issued reference disagrees with its caller");
|
|
67
|
+
}
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
version: 1, space: raw.space, endpoint: raw.endpoint, runId: raw.runId, instanceId: raw.instanceId,
|
|
70
|
+
caller, ceiling: readIssuedSubjectPermissions(raw.ceiling), provenance, admittedAt: raw.admittedAt,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function revocationSnapshot(value, runId) {
|
|
74
|
+
const raw = closed(value, ["version", "runId", "reason", "by", "revokedAt"], "run revocation");
|
|
75
|
+
if (raw.version !== 1 || raw.runId !== runId || typeof raw.reason !== "string" || typeof raw.by !== "string"
|
|
76
|
+
|| typeof raw.revokedAt !== "number" || !Number.isSafeInteger(raw.revokedAt) || raw.revokedAt <= 0)
|
|
77
|
+
throw new Error("run revocation is malformed");
|
|
78
|
+
return Object.freeze({ version: 1, runId, reason: raw.reason, by: raw.by, revokedAt: raw.revokedAt });
|
|
79
|
+
}
|
|
80
|
+
const enc = new TextEncoder();
|
|
81
|
+
const dec = new TextDecoder("utf-8", { fatal: true });
|
|
82
|
+
/** Leader-served point read of one admission-store key. Absence is `undefined`; a deletion
|
|
83
|
+
* marker or an unreadable value is a refusal. */
|
|
84
|
+
async function readLeader(jsm, space, key) {
|
|
85
|
+
const bucket = admissionBucket(space);
|
|
86
|
+
let m;
|
|
87
|
+
try {
|
|
88
|
+
m = await jsm.streams.getMessage(`KV_${bucket}`, { last_by_subj: `$KV.${bucket}.${key}` });
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
if (e.code === 10037)
|
|
92
|
+
return undefined;
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
if (!m)
|
|
96
|
+
return undefined;
|
|
97
|
+
if (m.header?.get("KV-Operation"))
|
|
98
|
+
throw new EpEnvelopeError("failed-precondition", `admission row ${key} carries a deletion marker; a deletion is never absence (SPEC 14.8)`);
|
|
99
|
+
return { value: JSON.parse(dec.decode(m.data)), revision: m.seq };
|
|
100
|
+
}
|
|
101
|
+
/** Create the admission, create-only. A second create for the same run is a conflict: a run is
|
|
102
|
+
* admitted once, and a re-admission is a new run (a fork) or an explicit migration. */
|
|
103
|
+
export async function createRunAdmission(kv, admission) {
|
|
104
|
+
const snap = admissionSnapshot(admission);
|
|
105
|
+
try {
|
|
106
|
+
return await kv.create(admissionKey(snap.endpoint, snap.runId), enc.encode(canonicalJson(snap)));
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
if (isCasLoss(e))
|
|
110
|
+
throw new EpEnvelopeError("conflict", `run ${snap.runId} is already admitted; an admission is written once (SPEC 14.8)`);
|
|
111
|
+
throw e;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Create the revocation marker, create-only and idempotent on an existing marker. */
|
|
115
|
+
export async function revokeRunAdmission(kv, endpoint, revocation) {
|
|
116
|
+
const snap = revocationSnapshot(revocation, revocation.runId);
|
|
117
|
+
try {
|
|
118
|
+
await kv.create(revocationKey(endpoint, snap.runId), enc.encode(canonicalJson(snap)));
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
if (!isCasLoss(e))
|
|
122
|
+
throw e;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** The admission a host acts on: the record must exist, match its coordinates, and carry no
|
|
126
|
+
* revocation marker. Missing, unreadable, malformed, mismatched, or revoked all refuse. */
|
|
127
|
+
export async function readRunAdmission(jsm, space, endpoint, runId) {
|
|
128
|
+
const entry = await readLeader(jsm, space, admissionKey(endpoint, runId));
|
|
129
|
+
if (entry === undefined)
|
|
130
|
+
throw new EpEnvelopeError("permission-denied", `run ${runId} has no admission record on endpoint ${endpoint}; a run with no admission runs no channel effect (SPEC 14.8)`);
|
|
131
|
+
let admission;
|
|
132
|
+
try {
|
|
133
|
+
admission = admissionSnapshot(entry.value);
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
throw new EpEnvelopeError("permission-denied", `run ${runId}'s admission record is unreadable (${e.message}); garbled trusted state never authorizes (SPEC 14.8)`);
|
|
137
|
+
}
|
|
138
|
+
if (admission.space !== space || admission.endpoint !== endpoint || admission.runId !== runId)
|
|
139
|
+
throw new EpEnvelopeError("permission-denied", `run ${runId}'s admission record names other coordinates (${admission.space}/${admission.endpoint}/${admission.runId}); refused (SPEC 14.8)`);
|
|
140
|
+
const marker = await readLeader(jsm, space, revocationKey(endpoint, runId));
|
|
141
|
+
const revoked = marker === undefined ? undefined : revocationSnapshot(marker.value, runId);
|
|
142
|
+
return Object.freeze({ admission, revoked });
|
|
143
|
+
}
|
|
144
|
+
/** The channel checks a host applies, over the admitted ceiling. Concrete channels only: a
|
|
145
|
+
* wildcard is not a channel a run can post to or await, and a generated name is checked after
|
|
146
|
+
* it is derived, by the same rule. */
|
|
147
|
+
export class RunAdmissionDenied extends EpEnvelopeError {
|
|
148
|
+
constructor(runId, what, channel) {
|
|
149
|
+
super("permission-denied", `run ${runId} is not admitted to ${what} channel "${channel}" (SPEC 14.8)`);
|
|
150
|
+
this.name = "RunAdmissionDenied";
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export function assertAdmittedPublish(view, channel, caller) {
|
|
154
|
+
assertNotRevoked(view);
|
|
155
|
+
const subject = chatSubject(view.admission.space, caller.owner, caller.actor, channel);
|
|
156
|
+
if (!issuedPermitsSubject(view.admission.ceiling.publish, subject))
|
|
157
|
+
throw new RunAdmissionDenied(view.admission.runId, "publish to", channel);
|
|
158
|
+
}
|
|
159
|
+
export function assertAdmittedSubscribe(view, channel) {
|
|
160
|
+
assertNotRevoked(view);
|
|
161
|
+
const pattern = chatSubject(view.admission.space, "*", "*", channel);
|
|
162
|
+
if (!issuedPermitsPattern(view.admission.ceiling.subscribe, pattern))
|
|
163
|
+
throw new RunAdmissionDenied(view.admission.runId, "read", channel);
|
|
164
|
+
}
|
|
165
|
+
export function assertNotRevoked(view) {
|
|
166
|
+
if (view.revoked !== undefined)
|
|
167
|
+
throw new EpEnvelopeError("permission-denied", `run ${view.admission.runId} was revoked by ${view.revoked.by} (${view.revoked.reason}); no further channel effect runs (SPEC 14.8)`);
|
|
168
|
+
}
|
|
169
|
+
/** Create-or-verify the admission store: `allow_direct=false`, file, no eviction. */
|
|
170
|
+
export async function ensureAdmissionStore(jsm, kvm, space) {
|
|
171
|
+
const bucket = admissionBucket(space);
|
|
172
|
+
const stream = `KV_${bucket}`;
|
|
173
|
+
// WRITE-ONCE PER KEY, AT THE BROKER. Both rows are create-only and the marker is permanent
|
|
174
|
+
// (SPEC 14.8), and the create-only CAS enforces neither on its own: the `run-admitter` holds a
|
|
175
|
+
// `$KV.<bucket>.<key>` publish row, and that row carries a plain replacement of the value, a
|
|
176
|
+
// `Nats-Rollup` header (which replaces the row, or with `all` empties the bucket), a deletion
|
|
177
|
+
// marker, and a per-key purge. None of them is a CAS write, so none loses the CAS, and a
|
|
178
|
+
// replacement leaves no marker for the deletion-marker read to catch. The three immutability
|
|
179
|
+
// flags close rollup, message delete and purge; write-once closes the rest, so the admission a
|
|
180
|
+
// host reads is the one that was admitted, and each run and each marker still gets its one write.
|
|
181
|
+
const shape = { ...AUTHORITY_STORE_IMMUTABLE_FLAGS, ...WRITE_ONCE_PER_KEY };
|
|
182
|
+
if (await jsm.streams.info(stream).catch(() => undefined) === undefined) {
|
|
183
|
+
await kvm.create(bucket, { allow_direct: false });
|
|
184
|
+
const created = (await jsm.streams.info(stream)).config;
|
|
185
|
+
await jsm.streams.update(stream, { ...created, ...shape });
|
|
186
|
+
}
|
|
187
|
+
const cfg = (await jsm.streams.info(stream)).config;
|
|
188
|
+
if (cfg.allow_direct !== false || cfg.storage !== "file" || (cfg.max_age ?? 0) !== 0 || (cfg.max_msgs ?? -1) > 0 || (cfg.max_bytes ?? -1) > 0
|
|
189
|
+
|| !Array.isArray(cfg.subjects) || cfg.subjects.length !== 1 || cfg.subjects[0] !== `$KV.${bucket}.>`)
|
|
190
|
+
throw new Error(`the run admission store ${bucket} has a drifted shape (allow_direct=${String(cfg.allow_direct)}); an authority store is never silently adopted - reprovision it (SPEC 14.8)`);
|
|
191
|
+
assertStoreShape(cfg, shape, bucket, "SPEC 14.8");
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=run-admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-admission.js","sourceRoot":"","sources":["../src/run-admission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-driver-grants.d.ts","sourceRoot":"","sources":["../src/run-driver-grants.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2E,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-driver-grants.d.ts","sourceRoot":"","sources":["../src/run-driver-grants.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2E,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAahI;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAGvD;AAED,mHAAmH;AACnH,MAAM,WAAW,kBAAkB;IACjC,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBnI;AAED;;;gGAGgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA6DrI;AAED,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;0CAGsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB;;;iFAG6E;IAC7E,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAqBvI"}
|
|
@@ -7,6 +7,7 @@ import { createHash } from "node:crypto";
|
|
|
7
7
|
import { spacePrefix, chatStream, presenceBucket, channelBucket, membersBucket, assertInboxConnId, DEV_OWNER } from "./subjects.js";
|
|
8
8
|
import { endpointToken, assertIdToken, assertLifecycleToken, epCallerReplyFilter } from "./endpoint-subjects.js";
|
|
9
9
|
import { recordsBucket } from "./endpoint-records.js";
|
|
10
|
+
import { admissionBucket } from "./run-admission.js";
|
|
10
11
|
import { runDriverJournalGrants, runJournalReplayGrants, recordsKvStreamName, epfStreamName, eptStreamName, epcStreamName, } from "./endpoint-binding.js";
|
|
11
12
|
import { epRequestGrantRows, epDescribeAllGrantRow, BASELINE_LIFECYCLE_ENDPOINT } from "./endpoint-grants.js";
|
|
12
13
|
/**
|
|
@@ -100,6 +101,9 @@ export function runMediatorGrants(space, args, connId) {
|
|
|
100
101
|
...epRequestGrantRows(space, { endpoint: BASELINE_LIFECYCLE_ENDPOINT, command: "despawn", target: { mode: "owner", tOwner: caller.owner } }, caller),
|
|
101
102
|
// The contract store fetch a resolve performs (the subject-scoped form every agent holds).
|
|
102
103
|
`$JS.API.DIRECT.GET.${epcStreamName(space)}.${p}.epc.>`,
|
|
104
|
+
// The run's admission and revocation rows (SPEC 14.8): a leader-served read before every
|
|
105
|
+
// channel effect. READ only; the admitter writes them.
|
|
106
|
+
`$JS.API.STREAM.MSG.GET.KV_${admissionBucket(space)}`,
|
|
103
107
|
"$JS.API.INFO",
|
|
104
108
|
];
|
|
105
109
|
return { publish, subscribe: [epCallerReplyFilter(space, caller), `_INBOX_${assertInboxConnId(connId)}.>`] };
|
|
@@ -128,6 +132,9 @@ export function runOperatorGrants(space, args, connId) {
|
|
|
128
132
|
// The run and program records of the endpoint, read through the leader-served point read and
|
|
129
133
|
// the consumer-free walk.
|
|
130
134
|
`$JS.API.STREAM.MSG.GET.${recordsKvStreamName(space)}`,
|
|
135
|
+
// The run's admission and revocation rows (SPEC 14.8): a resume, takeback or served read
|
|
136
|
+
// decides on them before any drive. READ only; the admitter writes them.
|
|
137
|
+
`$JS.API.STREAM.MSG.GET.KV_${admissionBucket(space)}`,
|
|
131
138
|
// The named run's journal replay, read-only, under this call's own takeover id.
|
|
132
139
|
...(args.runId === undefined ? [] : runJournalReplayGrants(space, args.runId, args.takeoverId)),
|
|
133
140
|
// An ANSWER of one pause: its answer record (create-only), the checkpoint status a settle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-driver-grants.js","sourceRoot":"","sources":["../src/run-driver-grants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-driver-grants.js","sourceRoot":"","sources":["../src/run-driver-grants.ts"],"names":[],"mappings":"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"}
|
package/dist/run-host.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { JetStreamClient, JetStreamManager } from "@nats-io/jetstream";
|
|
|
15
15
|
import type { KV } from "@nats-io/kv";
|
|
16
16
|
import type { Extension } from "./registry.js";
|
|
17
17
|
import type { RunSpecValue, RunStatusValue } from "./run-record.js";
|
|
18
|
+
import type { RunAdmissionView } from "./run-admission.js";
|
|
18
19
|
/** The kind every run host registers under. */
|
|
19
20
|
export declare const RUN_HOST_KIND = "run-host";
|
|
20
21
|
/** The one language this tree ships a host for. */
|
|
@@ -67,6 +68,10 @@ export interface RunHostDriveRequest {
|
|
|
67
68
|
readonly defaultCheckpointTimeout: string;
|
|
68
69
|
/** The most bytes a settled result may take, from the connection's own `max_payload`. */
|
|
69
70
|
readonly resultBytes?: number;
|
|
71
|
+
/** The run's ADMISSION (SPEC 14.8), read by the hosting runtime before the drive and re-read at
|
|
72
|
+
* every channel effect. A drive without one performs no channel effect: the host refuses at
|
|
73
|
+
* the boundary rather than running the effect under the mediator's own authority. */
|
|
74
|
+
readonly admission: RunAdmissionView;
|
|
70
75
|
}
|
|
71
76
|
/** How a drive attempt ended. `released` is the driver saying the run is not its to continue (a
|
|
72
77
|
* takeover won, a step was refused on this host, the host asked it to stop, the run was never
|
package/dist/run-host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-host.d.ts","sourceRoot":"","sources":["../src/run-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-host.d.ts","sourceRoot":"","sources":["../src/run-host.ts"],"names":[],"mappings":"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"}
|
package/dist/run-host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-host.js","sourceRoot":"","sources":["../src/run-host.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-host.js","sourceRoot":"","sources":["../src/run-host.ts"],"names":[],"mappings":"AAmBA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AACxC,mDAAmD;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAChD;6FAC6F;AAC7F,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAChE;;;qCAGqC;AACrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C;6BAC6B;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,GAAG,MAAM,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -48,6 +48,9 @@ export interface AgentHandle {
|
|
|
48
48
|
stop(opts?: {
|
|
49
49
|
graceful?: boolean;
|
|
50
50
|
}): void;
|
|
51
|
+
/** Release this manager's local handle without stopping or deprovisioning the agent. Optional,
|
|
52
|
+
* and absent means the runtime cannot survive manager exit, so callers must fail closed. */
|
|
53
|
+
release?(): void;
|
|
51
54
|
/** Resolve only after the runtime has authoritatively proved the process/window/workspace is gone.
|
|
52
55
|
* Optional during the preservation rollout; a manager maintenance cut must fail closed when absent. */
|
|
53
56
|
waitForExit?(): Promise<void>;
|
|
@@ -61,8 +64,12 @@ export interface AgentHandle {
|
|
|
61
64
|
* OPTIONAL, and absent means REFUSE, never degrade: a backend that does not own the child's
|
|
62
65
|
* input stream (tmux/cmux/orca/herdr attach to an externally-owned process) leaves it off, and
|
|
63
66
|
* the manager answers `input is not supported by runtime <kind>`. A silent no-op here would be
|
|
64
|
-
* a dropped keystroke, which is worse than an error.
|
|
65
|
-
|
|
67
|
+
* a dropped keystroke, which is worse than an error.
|
|
68
|
+
*
|
|
69
|
+
* Resolves only after the runtime has accepted the write, with the number of UTF-8 bytes it
|
|
70
|
+
* accepted. Rejects when the runtime cannot accept it. A caller must derive any delivery receipt
|
|
71
|
+
* from this acknowledgement, never from the buffer it intended to send. */
|
|
72
|
+
write?(data: string): Promise<number>;
|
|
66
73
|
/** What the runtime OBSERVED when the child ended: the OS exit code, and/or the signal number
|
|
67
74
|
* that killed it. Meaningful only once {@link status} reports `exited`; before that a backend
|
|
68
75
|
* returns undefined.
|
|
@@ -84,7 +91,28 @@ export interface AgentHandle {
|
|
|
84
91
|
* can delegate to an external terminal or process surface. */
|
|
85
92
|
export interface Runtime {
|
|
86
93
|
readonly kind: RuntimeKind;
|
|
87
|
-
|
|
94
|
+
/** True only when every handle this runtime creates can release manager-local custody without
|
|
95
|
+
* stopping the underlying agent. Absent is false for PTY runtimes and irrelevant for runtimes
|
|
96
|
+
* that hold no process-owning PTY master. */
|
|
97
|
+
readonly supportsRelease?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Mint the durable custody reference for a seat this runtime is ABOUT to spawn, before any
|
|
100
|
+
* process exists. The caller records it durably and then hands the SAME reference back to
|
|
101
|
+
* {@link spawn}, so the reference precedes the processes it addresses: a crash anywhere after
|
|
102
|
+
* the spawn leaves an orphan a successor can still address, never a live seat nobody can name.
|
|
103
|
+
* Minting the id inside `spawn` cannot give that ordering, because the processes are already
|
|
104
|
+
* running by the time it returns.
|
|
105
|
+
*
|
|
106
|
+
* OPTIONAL, and absent means this runtime has no durable custody to reserve (it also has no
|
|
107
|
+
* {@link reap}); the caller spawns without a reference, as before. A runtime that implements
|
|
108
|
+
* this MUST spawn the seat under exactly the reference it returned, and report it back on the
|
|
109
|
+
* handle: a spawn that quietly mints its own id would leave the recorded reference addressing
|
|
110
|
+
* nothing, which is worse than recording none.
|
|
111
|
+
*/
|
|
112
|
+
reserve?(): RuntimeReference;
|
|
113
|
+
/** Spawn the agent. `reference` is a custody reference from {@link reserve}, and a runtime that
|
|
114
|
+
* offers `reserve` must honour it exactly; it is absent for a runtime without durable custody. */
|
|
115
|
+
spawn(name: string, spec: LaunchSpec, cwd: string, reference?: RuntimeReference): AgentHandle;
|
|
88
116
|
/**
|
|
89
117
|
* Reattach this runtime to a handle it created previously. This is a local runtime operation,
|
|
90
118
|
* not a mesh operation. OPTIONAL, and absent means REFUSE, never spawn a replacement: a runtime
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;wDACwD;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;2BAE2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;yGAEqG;IACrG,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChD,0EAA0E;IAC1E,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACnC,yCAAyC;IACzC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kCAAkC;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;2DAC2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC;iFAC6E;IAC7E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,IAAI,SAAS,GAAG,QAAQ,CAAC;IAC/B;;uCAEmC;IACnC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1C;2GACuG;IACvG,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,IAAI,IAAI,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/secret-fs.d.ts
CHANGED
|
@@ -28,6 +28,31 @@ export declare function writeSecretFile(path: string, data: string | Buffer): vo
|
|
|
28
28
|
* under two truly-concurrent writers to the same file is a rarer residual that would need file locking.
|
|
29
29
|
*/
|
|
30
30
|
export declare function writeSecretFileAtomic(path: string, data: string | Buffer): void;
|
|
31
|
+
/** Test-only: drive the `link`-unavailable fallback, which no POSIX CI host can reach naturally.
|
|
32
|
+
* Pass `undefined` to restore. Not exported from the package index. */
|
|
33
|
+
export declare function __setPublishLinkForTest(fn: ((from: string, to: string) => void) | undefined): void;
|
|
34
|
+
/**
|
|
35
|
+
* Create a private secret file that MUST NOT already exist. Bytes are written to a unique temp
|
|
36
|
+
* sibling first, then {@link linkSync} publishes that complete inode at `path`. `link` is an
|
|
37
|
+
* atomic filesystem primitive: it fails with EEXIST if the destination exists, so of N concurrent
|
|
38
|
+
* creators exactly one succeeds and the others observe EEXIST. A concurrent reader never sees a
|
|
39
|
+
* torn destination because the name appears only after the temp write finished.
|
|
40
|
+
*
|
|
41
|
+
* `renameSync` is NOT this function. Rename replaces a winner, which would let every caller keep
|
|
42
|
+
* the identity it minted in memory. Exclusive create is the mutual-exclusion primitive; atomic
|
|
43
|
+
* replace is not.
|
|
44
|
+
*
|
|
45
|
+
* When the filesystem cannot hard-link (some Windows volumes), the fallback is `wx`
|
|
46
|
+
* (`O_CREAT|O_EXCL`) on `path` itself, which is still exclusive create, not a replace.
|
|
47
|
+
*
|
|
48
|
+
* The TEMP write is exclusive for the same reason the publish is. A temp name is unique only by
|
|
49
|
+
* probability (pid plus clock plus `Math.random`), and probability is not a concurrency argument:
|
|
50
|
+
* two creators that collided on the name would plain-overwrite each other's bytes, and then the
|
|
51
|
+
* one whose `link` succeeded would return the candidate IT minted while the published file held
|
|
52
|
+
* the OTHER one's identity: the exact split this function exists to prevent, reintroduced one
|
|
53
|
+
* step earlier. `wx` on the temp makes a collision fail loudly instead of silently swapping bytes.
|
|
54
|
+
*/
|
|
55
|
+
export declare function writeSecretFileCreateOnly(path: string, data: string | Buffer): void;
|
|
31
56
|
/** Create a private directory chain (recursive) and harden it — call BEFORE writing secrets into it
|
|
32
57
|
* so a child file is born under a private ACL (no creation-race window). POSIX sets 0o700 at create;
|
|
33
58
|
* win32 hardens the leaf's ACL (children then inherit it). Idempotent. */
|
package/dist/secret-fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret-fs.d.ts","sourceRoot":"","sources":["../src/secret-fs.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CA2BtE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa/E;AAED;;2EAE2E;AAC3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG9C"}
|
|
1
|
+
{"version":3,"file":"secret-fs.d.ts","sourceRoot":"","sources":["../src/secret-fs.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CA2BtE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAazE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa/E;AAuED;wEACwE;AACxE,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAElG;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BnF;AAED;;2EAE2E;AAC3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG9C"}
|
package/dist/secret-fs.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* world-readable (e.g. a `.cotal/auth` under a project on a permissive path). The fix is to harden
|
|
8
8
|
* the NTFS ACL explicitly with the built-in `icacls` (no new dependency). See {@link hardenPrivate}.
|
|
9
9
|
*/
|
|
10
|
-
import { chmodSync, mkdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { chmodSync, linkSync, lstatSync, mkdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
11
11
|
import { execFileSync } from "node:child_process";
|
|
12
12
|
import { join } from "node:path";
|
|
13
13
|
const isWin = process.platform === "win32";
|
|
@@ -77,7 +77,7 @@ export function hardenPrivate(path, kind) {
|
|
|
77
77
|
export function writeSecretFile(path, data) {
|
|
78
78
|
writeFileSync(path, data, { mode: 0o600 });
|
|
79
79
|
if (!isWin)
|
|
80
|
-
return; // POSIX mode set at create
|
|
80
|
+
return; // POSIX mode set at create, nothing more to do
|
|
81
81
|
try {
|
|
82
82
|
hardenPrivate(path, "file");
|
|
83
83
|
}
|
|
@@ -86,7 +86,7 @@ export function writeSecretFile(path, data) {
|
|
|
86
86
|
unlinkSync(path); // best-effort cleanup; the hardening error below is what the caller sees
|
|
87
87
|
}
|
|
88
88
|
catch {
|
|
89
|
-
/* ignore
|
|
89
|
+
/* ignore: surface the original hardening failure, not a secondary unlink error */
|
|
90
90
|
}
|
|
91
91
|
throw e;
|
|
92
92
|
}
|
|
@@ -115,6 +115,139 @@ export function writeSecretFileAtomic(path, data) {
|
|
|
115
115
|
throw e;
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* {@link writeSecretFile} with `O_EXCL`: the bytes land only if this caller created the name.
|
|
120
|
+
* Same fail-closed hardening contract as {@link writeSecretFile}: a win32 ACL failure propagates
|
|
121
|
+
* and the just-written file is best-effort removed, so a caller never proceeds as if the secret
|
|
122
|
+
* were private. EEXIST propagates to the caller, which is the point: the name was already taken.
|
|
123
|
+
*
|
|
124
|
+
* `O_EXCL` alone does not carry that contract everywhere. On POSIX it refuses a final symlink
|
|
125
|
+
* without following it, so a DANGLING link is EEXIST (measured: file, directory and dangling link
|
|
126
|
+
* all refuse, and nothing is materialised). On Windows the reparse point resolves, the missing
|
|
127
|
+
* target is created, and the bytes land at a name this caller did NOT create, which is precisely
|
|
128
|
+
* what the contract above forbids. A win32-only `lstatSync` closes that: it reports the LINK rather
|
|
129
|
+
* than its target, so a name that exists in any form is refused before anything is written.
|
|
130
|
+
*
|
|
131
|
+
* That pre-check is deliberately NOT run on POSIX. It would be a check-then-act step guarding a
|
|
132
|
+
* case `O_EXCL` already refuses, and an unnecessary one weakens the very property this function
|
|
133
|
+
* exists to provide. Where it does run it is a refusal, never a fallback: it only converts a
|
|
134
|
+
* would-be silent write-through into the EEXIST the caller already handles, and it never decides a
|
|
135
|
+
* concurrent create: two creators that both find the name free still both reach `O_EXCL`, which is
|
|
136
|
+
* one syscall and is what picks the winner.
|
|
137
|
+
*/
|
|
138
|
+
function writeSecretFileCreateOnlyRaw(path, data) {
|
|
139
|
+
// WIN32 ONLY, and deliberately so. Measured on POSIX: `O_EXCL` already refuses a plain file, a
|
|
140
|
+
// directory AND a dangling symlink with EEXIST, materialising nothing, so a pre-check there
|
|
141
|
+
// would add a check-then-act step that buys nothing and can only weaken the guarantee. Windows
|
|
142
|
+
// is the platform where `O_EXCL` RESOLVES a reparse point and creates its target, which would
|
|
143
|
+
// land bytes at a name the caller never asked for; `lstatSync` reports the link rather than its
|
|
144
|
+
// target, so the name is refused before anything is written.
|
|
145
|
+
//
|
|
146
|
+
// This never decides a concurrent create. Two creators that both see the name free still both
|
|
147
|
+
// reach `O_EXCL` below, and O_EXCL, one syscall, is what picks the winner. The check only ever
|
|
148
|
+
// converts a would-be write-through into the EEXIST the caller already handles.
|
|
149
|
+
if (isWin) {
|
|
150
|
+
let exists = true;
|
|
151
|
+
try {
|
|
152
|
+
lstatSync(path); // the NAME exists (file, dir, or dangling link), never write through it
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
if (e.code !== "ENOENT")
|
|
156
|
+
throw e;
|
|
157
|
+
exists = false;
|
|
158
|
+
}
|
|
159
|
+
if (exists) {
|
|
160
|
+
const taken = new Error(`EEXIST: file already exists, open '${path}'`);
|
|
161
|
+
taken.code = "EEXIST";
|
|
162
|
+
throw taken;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
writeFileSync(path, data, { flag: "wx", mode: 0o600 });
|
|
166
|
+
if (!isWin)
|
|
167
|
+
return; // POSIX mode set at create, nothing more to do
|
|
168
|
+
try {
|
|
169
|
+
hardenPrivate(path, "file");
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
try {
|
|
173
|
+
unlinkSync(path); // best-effort cleanup; the hardening error below is what the caller sees
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
/* ignore: surface the original hardening failure, not a secondary unlink error */
|
|
177
|
+
}
|
|
178
|
+
throw e;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Publish a completed temp inode at its final name. Separated from {@link writeSecretFileCreateOnly}
|
|
183
|
+
* because the hard-link primitive is the one part of exclusive create whose AVAILABILITY is
|
|
184
|
+
* platform-dependent: some Windows volumes and some network filesystems reject `link` outright, and
|
|
185
|
+
* the caller must then fall back to `O_EXCL` on the destination. Naming that seam also makes the
|
|
186
|
+
* fallback branch reachable from a suite, so the Windows-side primitive can carry a refusing case
|
|
187
|
+
* instead of being the one accepting branch nothing grades.
|
|
188
|
+
*/
|
|
189
|
+
let publishLink = linkSync;
|
|
190
|
+
/** Test-only: drive the `link`-unavailable fallback, which no POSIX CI host can reach naturally.
|
|
191
|
+
* Pass `undefined` to restore. Not exported from the package index. */
|
|
192
|
+
export function __setPublishLinkForTest(fn) {
|
|
193
|
+
publishLink = fn ?? linkSync;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create a private secret file that MUST NOT already exist. Bytes are written to a unique temp
|
|
197
|
+
* sibling first, then {@link linkSync} publishes that complete inode at `path`. `link` is an
|
|
198
|
+
* atomic filesystem primitive: it fails with EEXIST if the destination exists, so of N concurrent
|
|
199
|
+
* creators exactly one succeeds and the others observe EEXIST. A concurrent reader never sees a
|
|
200
|
+
* torn destination because the name appears only after the temp write finished.
|
|
201
|
+
*
|
|
202
|
+
* `renameSync` is NOT this function. Rename replaces a winner, which would let every caller keep
|
|
203
|
+
* the identity it minted in memory. Exclusive create is the mutual-exclusion primitive; atomic
|
|
204
|
+
* replace is not.
|
|
205
|
+
*
|
|
206
|
+
* When the filesystem cannot hard-link (some Windows volumes), the fallback is `wx`
|
|
207
|
+
* (`O_CREAT|O_EXCL`) on `path` itself, which is still exclusive create, not a replace.
|
|
208
|
+
*
|
|
209
|
+
* The TEMP write is exclusive for the same reason the publish is. A temp name is unique only by
|
|
210
|
+
* probability (pid plus clock plus `Math.random`), and probability is not a concurrency argument:
|
|
211
|
+
* two creators that collided on the name would plain-overwrite each other's bytes, and then the
|
|
212
|
+
* one whose `link` succeeded would return the candidate IT minted while the published file held
|
|
213
|
+
* the OTHER one's identity: the exact split this function exists to prevent, reintroduced one
|
|
214
|
+
* step earlier. `wx` on the temp makes a collision fail loudly instead of silently swapping bytes.
|
|
215
|
+
*/
|
|
216
|
+
export function writeSecretFileCreateOnly(path, data) {
|
|
217
|
+
const tmp = `${path}.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
218
|
+
// Exclusive, so EEXIST here means the temp name belongs to ANOTHER creator. Cleanup below must
|
|
219
|
+
// never run in that case: unlinking it would delete a live creator's bytes out from under it.
|
|
220
|
+
writeSecretFileCreateOnlyRaw(tmp, data);
|
|
221
|
+
try {
|
|
222
|
+
try {
|
|
223
|
+
publishLink(tmp, path);
|
|
224
|
+
}
|
|
225
|
+
catch (e) {
|
|
226
|
+
const code = e.code;
|
|
227
|
+
if (code === "ENOTSUP" || code === "EPERM" || code === "ENOSYS") {
|
|
228
|
+
writeSecretFileCreateOnlyRaw(path, data);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
throw e;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
try {
|
|
237
|
+
unlinkSync(tmp);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
/* ignore: surface the original exclusive-create error */
|
|
241
|
+
}
|
|
242
|
+
throw e;
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
unlinkSync(tmp);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
/* drop the extra nlink after a successful link, or a leftover temp */
|
|
249
|
+
}
|
|
250
|
+
}
|
|
118
251
|
/** Create a private directory chain (recursive) and harden it — call BEFORE writing secrets into it
|
|
119
252
|
* so a child file is born under a private ACL (no creation-race window). POSIX sets 0o700 at create;
|
|
120
253
|
* win32 hardens the leaf's ACL (children then inherit it). Idempotent. */
|