@sentropic/h2a 0.98.4 → 0.98.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/runtime/drive/consent.d.ts +1 -1
  8. package/dist/runtime/drive/consent.d.ts.map +1 -1
  9. package/dist/runtime/drive/consent.js +2 -2
  10. package/dist/runtime/drive/consent.js.map +1 -1
  11. package/dist/runtime/drive/index.d.ts +1 -1
  12. package/dist/runtime/drive/index.d.ts.map +1 -1
  13. package/dist/runtime/drive/index.js +3 -1
  14. package/dist/runtime/drive/index.js.map +1 -1
  15. package/dist/runtime/drumbeat/relaunchers.d.ts +1 -1
  16. package/dist/runtime/drumbeat/relaunchers.d.ts.map +1 -1
  17. package/dist/runtime/drumbeat/relaunchers.js +2 -1
  18. package/dist/runtime/drumbeat/relaunchers.js.map +1 -1
  19. package/dist/runtime/identity/binding-commit.d.ts +31 -0
  20. package/dist/runtime/identity/binding-commit.d.ts.map +1 -0
  21. package/dist/runtime/identity/binding-commit.js +211 -0
  22. package/dist/runtime/identity/binding-commit.js.map +1 -0
  23. package/dist/runtime/identity/bindings.d.ts +6 -30
  24. package/dist/runtime/identity/bindings.d.ts.map +1 -1
  25. package/dist/runtime/identity/bindings.js +85 -96
  26. package/dist/runtime/identity/bindings.js.map +1 -1
  27. package/dist/runtime/identity/durable.d.ts +7 -0
  28. package/dist/runtime/identity/durable.d.ts.map +1 -0
  29. package/dist/runtime/identity/durable.js +68 -0
  30. package/dist/runtime/identity/durable.js.map +1 -0
  31. package/dist/runtime/identity/live.d.ts +4 -1
  32. package/dist/runtime/identity/live.d.ts.map +1 -1
  33. package/dist/runtime/identity/live.js +59 -6
  34. package/dist/runtime/identity/live.js.map +1 -1
  35. package/dist/runtime/identity/possession.d.ts +34 -0
  36. package/dist/runtime/identity/possession.d.ts.map +1 -0
  37. package/dist/runtime/identity/possession.js +162 -0
  38. package/dist/runtime/identity/possession.js.map +1 -0
  39. package/dist/runtime/identity/worker.js +16 -5
  40. package/dist/runtime/identity/worker.js.map +1 -1
  41. package/dist/runtime/local-files/identity-fence.d.ts +164 -0
  42. package/dist/runtime/local-files/identity-fence.d.ts.map +1 -0
  43. package/dist/runtime/local-files/identity-fence.js +1336 -0
  44. package/dist/runtime/local-files/identity-fence.js.map +1 -0
  45. package/dist/runtime/local-files/index.d.ts +1 -0
  46. package/dist/runtime/local-files/index.d.ts.map +1 -1
  47. package/dist/runtime/local-files/index.js +1 -0
  48. package/dist/runtime/local-files/index.js.map +1 -1
  49. package/dist/runtime/local-files/legacy-identity-evidence.d.ts +26 -0
  50. package/dist/runtime/local-files/legacy-identity-evidence.d.ts.map +1 -0
  51. package/dist/runtime/local-files/legacy-identity-evidence.js +234 -0
  52. package/dist/runtime/local-files/legacy-identity-evidence.js.map +1 -0
  53. package/dist/runtime/local-files/locks.d.ts +3 -0
  54. package/dist/runtime/local-files/locks.d.ts.map +1 -1
  55. package/dist/runtime/local-files/locks.js +6 -5
  56. package/dist/runtime/local-files/locks.js.map +1 -1
  57. package/dist/runtime/local-files/store.d.ts +1 -1
  58. package/dist/runtime/local-files/store.d.ts.map +1 -1
  59. package/dist/runtime/local-files/store.js +12 -1
  60. package/dist/runtime/local-files/store.js.map +1 -1
  61. package/dist/runtime/local-files/succession-lock.d.ts +71 -6
  62. package/dist/runtime/local-files/succession-lock.d.ts.map +1 -1
  63. package/dist/runtime/local-files/succession-lock.js +226 -31
  64. package/dist/runtime/local-files/succession-lock.js.map +1 -1
  65. package/dist/runtime/mcp/identity-blocker-snapshot.d.ts +2 -0
  66. package/dist/runtime/mcp/identity-blocker-snapshot.d.ts.map +1 -0
  67. package/dist/runtime/mcp/identity-blocker-snapshot.js +98 -0
  68. package/dist/runtime/mcp/identity-blocker-snapshot.js.map +1 -0
  69. package/dist/runtime/mcp/identity-state.d.ts +20 -3
  70. package/dist/runtime/mcp/identity-state.d.ts.map +1 -1
  71. package/dist/runtime/mcp/identity-state.js +98 -13
  72. package/dist/runtime/mcp/identity-state.js.map +1 -1
  73. package/dist/runtime/mcp/server.d.ts.map +1 -1
  74. package/dist/runtime/mcp/server.js +12 -9
  75. package/dist/runtime/mcp/server.js.map +1 -1
  76. package/dist/runtime/remote/client.d.ts +1 -1
  77. package/dist/runtime/remote/client.d.ts.map +1 -1
  78. package/dist/runtime/remote/client.js +1 -1
  79. package/dist/runtime/remote/client.js.map +1 -1
  80. package/package.json +3 -3
@@ -0,0 +1,211 @@
1
+ import { closeSync, existsSync, fsyncSync, linkSync, openSync, readFileSync, readdirSync, statSync, unlinkSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { BindingCommitIntegrityError, BindingCommitConflictError, BindingFenceStaleError, digestBytes, preparePossession, receiptMatches, withPossession, isPreparedPossession } from './possession.js';
4
+ import { appendDurable, ensureDurableDirectory, syncDirectory, syncFile, writeComplete } from './durable.js';
5
+ export const bindingKeyHash = (host, providerSessionId) => digestBytes(`${host}\0${providerSessionId}`).slice(0, 32);
6
+ export const bindingLineId = (line) => digestBytes(line);
7
+ const journal = (dir) => join(dir, 'bindings.jsonl');
8
+ function lines(dir) {
9
+ if (!existsSync(journal(dir)))
10
+ return [];
11
+ const bytes = readFileSync(journal(dir), 'utf8');
12
+ return [...new Set(bytes.slice(0, bytes.lastIndexOf('\n') + 1).split('\n').filter(Boolean).map(line => line + '\n'))];
13
+ }
14
+ function keyOf(line) {
15
+ try {
16
+ const row = JSON.parse(line);
17
+ return typeof row.host === 'string' && typeof row.providerSessionId === 'string' ? bindingKeyHash(row.host, row.providerSessionId) : undefined;
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ function latest(dir, host, providerSessionId) {
24
+ return lines(dir).filter(line => { try {
25
+ const row = JSON.parse(line);
26
+ return row.host === host && row.providerSessionId === providerSessionId;
27
+ }
28
+ catch {
29
+ return false;
30
+ } }).map(bindingLineId).at(-1) ?? 'genesis';
31
+ }
32
+ function requireHeld(held) {
33
+ if (!held())
34
+ throw new BindingCommitIntegrityError('fence changed during protected mutation');
35
+ }
36
+ /** A pending winner is prepared before acquiring the fence; it forbids remint. */
37
+ export function pendingBindingWinner(dir, kh) {
38
+ const commits = join(dir, 'commits');
39
+ if (!existsSync(commits))
40
+ return undefined;
41
+ const candidates = readdirSync(commits).filter(name => name.startsWith(kh + '.') && name.endsWith('.json'));
42
+ if (!candidates.length)
43
+ return undefined;
44
+ const complete = new Set(lines(dir).map(bindingLineId));
45
+ const slots = candidates.map(name => {
46
+ try {
47
+ const slot = JSON.parse(readFileSync(join(commits, name), 'utf8'));
48
+ if (slot.kh !== kh || !slot.line.endsWith('\n') || bindingLineId(slot.line) !== slot.lineId)
49
+ throw new Error();
50
+ return slot;
51
+ }
52
+ catch {
53
+ throw new BindingCommitIntegrityError('pending winner incomplete or incoherent');
54
+ }
55
+ }).filter(slot => !complete.has(slot.lineId));
56
+ if (!slots.length)
57
+ return undefined;
58
+ const tip = slots.find(slot => !slots.some(next => next.pred === slot.lineId));
59
+ if (!tip)
60
+ throw new BindingCommitIntegrityError('pending winner chain cyclic');
61
+ return JSON.parse(tip.line);
62
+ }
63
+ /** Cold possession preparation happens before election/normal possession. */
64
+ export function prepareBindingSlots(dir) {
65
+ const commits = join(dir, 'commits');
66
+ const prepared = new Map();
67
+ if (!existsSync(commits))
68
+ return prepared;
69
+ for (const name of readdirSync(commits)) {
70
+ if (!name.endsWith('.json') || name.includes('.tmp.'))
71
+ continue;
72
+ const bytes = readFileSync(join(commits, name));
73
+ let receipt;
74
+ try {
75
+ const slot = JSON.parse(bytes.toString());
76
+ const row = JSON.parse(slot.line);
77
+ if (slot.proof?.instance === row.instance && receiptMatches(dirname(dir), slot.proof, true))
78
+ receipt = preparePossession(dirname(dir), row.instance);
79
+ }
80
+ catch (e) {
81
+ if (e.code)
82
+ throw e;
83
+ }
84
+ prepared.set(name, { sha256: digestBytes(bytes), ...(receipt ? { receipt } : {}) });
85
+ }
86
+ return prepared;
87
+ }
88
+ export function repairBindingSlots(dir, held, prepared) {
89
+ const commits = join(dir, 'commits');
90
+ if (!existsSync(commits))
91
+ return;
92
+ const pending = [];
93
+ for (const name of readdirSync(commits)) {
94
+ if (name.includes('.tmp.'))
95
+ continue;
96
+ if (!/^[0-9a-f]{32}\.(genesis|[0-9a-f]{64})\.json$/.test(name))
97
+ throw new BindingCommitIntegrityError('unsupported slot name');
98
+ let slot;
99
+ const bytes = readFileSync(join(commits, name));
100
+ const preparation = prepared.get(name);
101
+ if (!preparation || preparation.sha256 !== digestBytes(bytes))
102
+ throw new BindingFenceStaleError();
103
+ try {
104
+ slot = JSON.parse(bytes.toString());
105
+ }
106
+ catch {
107
+ throw new BindingCommitIntegrityError('incomplete slot');
108
+ }
109
+ if (!slot || slot.version !== 1 || typeof slot.line !== 'string' || !slot.line.endsWith('\n') || slot.line.slice(0, -1).includes('\n')
110
+ || keyOf(slot.line) !== slot.kh || bindingLineId(slot.line) !== slot.lineId || name !== `${slot.kh}.${slot.pred}.json`
111
+ || !/^[0-9a-f]{32}$/.test(slot.fenceEpoch))
112
+ throw new BindingCommitIntegrityError('incoherent slot content or predecessor');
113
+ const row = JSON.parse(slot.line);
114
+ if (!slot.proof || slot.proof.instance !== row.instance || !preparation.receipt || !isPreparedPossession(preparation.receipt))
115
+ throw new BindingCommitIntegrityError('slot possession proof missing');
116
+ if (!receiptMatches(dirname(dir), preparation.receipt))
117
+ throw new BindingFenceStaleError();
118
+ syncFile(join(commits, name));
119
+ pending.push(slot);
120
+ }
121
+ const complete = new Set(lines(dir).map(bindingLineId));
122
+ const byKey = new Map();
123
+ for (const line of lines(dir)) {
124
+ const kh = keyOf(line);
125
+ if (kh) {
126
+ const ids = byKey.get(kh) ?? new Set();
127
+ ids.add(bindingLineId(line));
128
+ byKey.set(kh, ids);
129
+ }
130
+ }
131
+ while (pending.length) {
132
+ const i = pending.findIndex(slot => slot.pred === 'genesis' || byKey.get(slot.kh)?.has(slot.pred));
133
+ if (i < 0)
134
+ throw new BindingCommitIntegrityError('slot predecessor missing or cyclic');
135
+ const [slot] = pending.splice(i, 1);
136
+ if (!complete.has(slot.lineId)) {
137
+ requireHeld(held);
138
+ appendDurable(journal(dir), slot.line, held);
139
+ complete.add(slot.lineId);
140
+ }
141
+ else
142
+ syncFile(journal(dir));
143
+ const ids = byKey.get(slot.kh) ?? new Set();
144
+ ids.add(slot.lineId);
145
+ byKey.set(slot.kh, ids);
146
+ }
147
+ }
148
+ export function commitBinding(dir, row, fenceEpoch, proof, held, beginMutation, endMutation) {
149
+ const kh = bindingKeyHash(row.host, row.providerSessionId);
150
+ const pred = latest(dir, row.host, row.providerSessionId);
151
+ const line = JSON.stringify(row) + '\n';
152
+ const slot = { version: 1, kh, pred, fenceEpoch, line, lineId: bindingLineId(line), proof };
153
+ const commits = join(dir, 'commits');
154
+ withPossession(dirname(dir), proof, () => {
155
+ requireHeld(held);
156
+ beginMutation();
157
+ ensureDurableDirectory(commits);
158
+ const path = join(commits, `${kh}.${pred}.json`);
159
+ if (existsSync(path))
160
+ throw new BindingCommitConflictError();
161
+ const tmp = `${path}.tmp.${fenceEpoch}`;
162
+ const fd = openSync(tmp, 'wx', 0o600);
163
+ try {
164
+ writeComplete(fd, JSON.stringify(slot));
165
+ fsyncSync(fd);
166
+ }
167
+ finally {
168
+ closeSync(fd);
169
+ }
170
+ requireHeld(held);
171
+ try {
172
+ linkSync(tmp, path);
173
+ }
174
+ catch (e) {
175
+ const code = e.code;
176
+ if (code === 'EEXIST')
177
+ throw new BindingCommitConflictError();
178
+ if (!['EPERM', 'ENOTSUP', 'EOPNOTSUPP', 'ENOSYS'].includes(code ?? ''))
179
+ throw e;
180
+ // Nominal acquisition remains possible without hard links. A partial
181
+ // fallback slot after a crash fails integrity under the retained barrier.
182
+ requireHeld(held);
183
+ const slotFd = openSync(path, 'wx', 0o600);
184
+ try {
185
+ writeComplete(slotFd, JSON.stringify(slot));
186
+ fsyncSync(slotFd);
187
+ }
188
+ finally {
189
+ closeSync(slotFd);
190
+ }
191
+ }
192
+ syncDirectory(commits);
193
+ requireHeld(held);
194
+ unlinkSync(tmp);
195
+ syncDirectory(commits);
196
+ requireHeld(held);
197
+ appendDurable(journal(dir), line, held);
198
+ // Conditional cleanup is limited to this key's successfully materialized slot.
199
+ const before = statSync(path);
200
+ if (readFileSync(path, 'utf8') !== JSON.stringify(slot))
201
+ throw new BindingCommitIntegrityError('slot changed after append');
202
+ requireHeld(held);
203
+ const current = statSync(path);
204
+ if (before.dev !== current.dev || before.ino !== current.ino)
205
+ throw new BindingCommitIntegrityError('slot replaced after append');
206
+ unlinkSync(path);
207
+ syncDirectory(commits);
208
+ endMutation();
209
+ });
210
+ }
211
+ //# sourceMappingURL=binding-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-commit.js","sourceRoot":"","sources":["../../../src/runtime/identity/binding-commit.ts"],"names":[],"mappings":"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"}
@@ -24,13 +24,15 @@
24
24
  * identity, not the victim's inbox). The read → decide → append runs in ONE lock
25
25
  * (no reclaim/mint race, F3).
26
26
  */
27
- import { type H2ASignature } from "@sentropic/h2a";
27
+ import type { IdentityFenceOptions } from "../local-files/identity-fence.js";
28
+ import type { H2ASignature } from "@sentropic/h2a";
29
+ import { IDENTITY_BINDING_FENCE_PROTOCOL } from "../local-files/identity-fence.js";
28
30
  /**
29
31
  * The one protocol accepted by the DEF identity-binding writer. The cull
30
32
  * executor uses the same sentinel and refuses a writer inventory that cannot
31
33
  * prove this epoch-bearing protocol for every binding write path.
32
34
  */
33
- export declare const IDENTITY_BINDING_FENCE_PROTOCOL = "identity-binding-fence-v1";
35
+ export { IDENTITY_BINDING_FENCE_PROTOCOL };
34
36
  export interface H2AIdentityBinding {
35
37
  readonly host: string;
36
38
  readonly providerSessionId: string;
@@ -86,38 +88,12 @@ export interface ReclaimOrMintResult {
86
88
  * binding. Spoofing the id without the key → mint (a new identity), never a
87
89
  * reclaim of someone else's.
88
90
  */
89
- export declare function reclaimOrMint(root: string, key: IdentityBindingKey, deps: ReclaimOrMintDeps): ReclaimOrMintResult;
90
- /**
91
- * L2 options for the ASYNC (MCP identity worker) reclaim/mint transaction.
92
- */
93
- export interface ReclaimOrMintOptions {
94
- /**
95
- * Cooperative cancellation (transport closed / signal). When aborted BEFORE the
96
- * lock is held, the wait stops and the attempt throws; a transaction already
97
- * entered under the lock finishes so no half-written binding is left.
98
- */
99
- readonly signal?: AbortSignal;
100
- /** Monotone remaining budget (ms) bounding the lock wait for this attempt. */
91
+ export interface ReclaimOrMintOptions extends IdentityFenceOptions {
101
92
  readonly deadlineMs?: number;
102
- /**
103
- * Materialize keys / registration / alias BEFORE the binding row is appended
104
- * (mint path only), all inside the held identity lock. This closes the
105
- * publish-order window through which a concurrent worker that read the fresh
106
- * binding — but not yet its keyring — could fail proof-of-possession and mint a
107
- * DUPLICATE identity. The binding is always the LAST durable write.
108
- */
109
93
  readonly beforePublish?: (result: ReclaimOrMintResult, heldLocks: {
110
94
  readonly identity: true;
111
95
  }) => void;
112
96
  }
113
- /**
114
- * Async twin of {@link reclaimOrMint} used by the L2 identity worker. Identical
115
- * invariants — proof-of-possession gates reclaim, a fail-closed fence
116
- * (`reclaimStale:false`) refuses an ambiguous sentinel, `reclaimOrMint*` stays
117
- * the UNIQUE append of a binding row — but the lock WAIT is asynchronous so the
118
- * worker can receive an IPC cancel between poll attempts instead of blocking the
119
- * event loop inside `Atomics.wait`. On a mint, `beforePublish` publishes the
120
- * keyring/registration/alias before the binding append (window closure, T5).
121
- */
97
+ export declare function reclaimOrMint(root: string, key: IdentityBindingKey, deps: ReclaimOrMintDeps, options?: ReclaimOrMintOptions): ReclaimOrMintResult;
122
98
  export declare function reclaimOrMintAsync(root: string, key: IdentityBindingKey, deps: ReclaimOrMintDeps, options?: ReclaimOrMintOptions): Promise<ReclaimOrMintResult>;
123
99
  //# sourceMappingURL=bindings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMpE;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,8BAA8B,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAYD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAa/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAUjG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAST;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAClD,2EAA2E;IAC3E,IAAI,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAoCrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,KACnC,IAAI,CAAC;CACX;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA6C9B"}
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,OAAO,KAAK,EACV,YAAY,EACb,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EACL,+BAA+B,EAIhC,MAAM,kCAAkC,CAAC;AAG1C;;;;GAIG;AACH,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAYD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAc/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAUjG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAST;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAClD,2EAA2E;IAC3E,IAAI,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AAEH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;CACxG;AAoCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,EAC1F,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CAgBzD;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,EACrG,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBlE"}
@@ -24,19 +24,23 @@
24
24
  * identity, not the victim's inbox). The read → decide → append runs in ONE lock
25
25
  * (no reclaim/mint race, F3).
26
26
  */
27
- import { existsSync, mkdirSync, readFileSync } from "node:fs";
28
- import { randomUUID } from "node:crypto";
27
+ import { existsSync, readFileSync } from "node:fs";
29
28
  import { join } from "node:path";
30
- import { verifyCanonical } from "@sentropic/h2a";
31
- import { localStorePaths, withLock, withLockSync } from "../local-files/index.js";
32
- import { getActiveMcpTrace } from "../mcp/phase-trace.js";
33
- import { appendLaunchRow, launchLookupKey, lookupLaunchRows } from "../local-files/launch-index.js";
29
+ import { performance } from "node:perf_hooks";
30
+ import { commitBinding, pendingBindingWinner, bindingKeyHash } from "./binding-commit.js";
31
+ import { BindingCommitIntegrityError, BindingFenceStaleError, preparePossession, receiptMatches, withPossession } from "./possession.js";
32
+ import { ensureDurableDirectory } from "./durable.js";
33
+ import { LockTimeoutError } from "../local-files/locks.js";
34
+ import { verifyCanonical } from "../../signature.js";
35
+ import { localStorePaths } from "../local-files/index.js";
36
+ import { IDENTITY_BINDING_FENCE_PROTOCOL, withIdentityFence, withIdentityFenceSync } from "../local-files/identity-fence.js";
37
+ import { launchLookupKey, lookupLaunchRows } from "../local-files/launch-index.js";
34
38
  /**
35
39
  * The one protocol accepted by the DEF identity-binding writer. The cull
36
40
  * executor uses the same sentinel and refuses a writer inventory that cannot
37
41
  * prove this epoch-bearing protocol for every binding write path.
38
42
  */
39
- export const IDENTITY_BINDING_FENCE_PROTOCOL = "identity-binding-fence-v1";
43
+ export { IDENTITY_BINDING_FENCE_PROTOCOL };
40
44
  function identityDir(root) {
41
45
  return join(localStorePaths(root).root, "identity");
42
46
  }
@@ -51,11 +55,13 @@ export function listBindings(root) {
51
55
  if (!existsSync(f))
52
56
  return [];
53
57
  const out = [];
54
- for (const line of readFileSync(f, "utf8").split("\n")) {
58
+ for (const line of readFileSync(f, "utf8").split("\n").slice(0, -1)) {
55
59
  if (!line.trim())
56
60
  continue;
57
61
  try {
58
- out.push(JSON.parse(line));
62
+ const row = JSON.parse(line);
63
+ if (row && typeof row === 'object' && !Array.isArray(row))
64
+ out.push(row);
59
65
  }
60
66
  catch {
61
67
  // skip malformed
@@ -103,98 +109,81 @@ export function verifyReclaimProof(nonce, signature, publicKeys) {
103
109
  }
104
110
  return false;
105
111
  }
106
- /**
107
- * Atomically (one lock) reclaim the existing binding iff it exists AND
108
- * proof-of-possession passes; otherwise mint a fresh identity and record the new
109
- * binding. Spoofing the id without the key → mint (a new identity), never a
110
- * reclaim of someone else's.
111
- */
112
- export function reclaimOrMint(root, key, deps) {
113
- mkdirSync(identityDir(root), { recursive: true });
114
- // L0 (detailed-gated): observe the binding lock's wait/acquire/hold so the
115
- // trace shows time spent contending the identity write — a logical lock id,
116
- // never a binding row's content.
117
- const trace = getActiveMcpTrace();
118
- const observe = trace?.detailed
119
- ? (event) => {
120
- trace.phase(`binding_lock_${event.event}`, {
121
- tool: "identity",
122
- ...(event.waitMs !== undefined ? { waitMs: event.waitMs } : {}),
123
- ...(event.holdMs !== undefined ? { holdMs: event.holdMs } : {})
124
- });
112
+ function prepareTransaction(root, key, deps, options, memo) {
113
+ const binding = findBinding(root, key);
114
+ let pending;
115
+ try {
116
+ pending = pendingBindingWinner(identityDir(root), bindingKeyHash(key.host, key.providerSessionId));
117
+ }
118
+ catch (e) {
119
+ if (!(e instanceof BindingCommitIntegrityError))
120
+ throw e;
121
+ return { binding, proof: undefined };
122
+ }
123
+ if (pending) {
124
+ const proof = preparePossession(root, pending.instance);
125
+ if (!proof)
126
+ return { binding: pending, proof: undefined };
127
+ return { binding: pending, proof };
128
+ }
129
+ const proof = binding && deps.verifyProof(binding) ? preparePossession(root, binding.instance) : undefined;
130
+ if (binding && proof)
131
+ return { binding, proof };
132
+ memo.value ??= { action: 'mint', ...deps.mint() };
133
+ options.beforePublish?.(memo.value, { identity: true });
134
+ const mintedProof = preparePossession(root, memo.value.instance);
135
+ if (!mintedProof)
136
+ throw new BindingCommitIntegrityError('binding possession prerequisites missing');
137
+ return { binding, proof: mintedProof };
138
+ }
139
+ function transact(root, key, deps, memo, prepared, lease) {
140
+ if (!prepared.proof)
141
+ throw new BindingFenceStaleError();
142
+ const existing = findBinding(root, key);
143
+ if (existing?.instance !== prepared.binding?.instance || !receiptMatches(root, prepared.proof))
144
+ throw new BindingFenceStaleError();
145
+ if (existing && prepared.proof.instance === existing.instance) {
146
+ return withPossession(root, prepared.proof, () => ({ action: 'reclaim', instance: existing.instance, agentUuid: existing.agentUuid }));
147
+ }
148
+ if (!memo.value)
149
+ throw new BindingCommitIntegrityError('mint candidate unavailable');
150
+ commitBinding(identityDir(root), { ...key, instance: memo.value.instance, agentUuid: memo.value.agentUuid, at: new Date(deps.now()).toISOString() }, lease.token, prepared.proof, lease.stillHeld, lease.beginMutation, lease.endMutation);
151
+ return memo.value;
152
+ }
153
+ export function reclaimOrMint(root, key, deps, options = {}) {
154
+ ensureDurableDirectory(identityDir(root));
155
+ const end = performance.now() + (options.deadlineMs ?? options.timeoutMs ?? 5000);
156
+ const memo = {};
157
+ options = { ...options, signal: options.signal ?? new AbortController().signal };
158
+ for (;;) {
159
+ try {
160
+ const prepared = prepareTransaction(root, key, deps, options, memo);
161
+ return withIdentityFenceSync(bindingsLock(root), lease => transact(root, key, deps, memo, prepared, lease), { ...options, timeoutMs: Math.max(0, end - performance.now()) });
125
162
  }
126
- : undefined;
127
- return withLockSync(bindingsLock(root), () => {
128
- const existing = findBinding(root, key);
129
- if (existing && deps.verifyProof(existing)) {
130
- return { action: "reclaim", instance: existing.instance, agentUuid: existing.agentUuid };
163
+ catch (e) {
164
+ // The short registry wait is one preparation attempt within the original deadline.
165
+ const contention = e instanceof LockTimeoutError && e.lockPath === join(root, "registry", ".lock");
166
+ if ((!(e instanceof BindingFenceStaleError) && !contention) || performance.now() >= end)
167
+ throw e;
131
168
  }
132
- const minted = deps.mint();
133
- appendLaunchRow(bindingsFile(root), "bindings", {
134
- ...key, instance: minted.instance, agentUuid: minted.agentUuid,
135
- at: new Date(deps.now()).toISOString()
136
- });
137
- return { action: "mint", instance: minted.instance, agentUuid: minted.agentUuid };
138
- }, {
139
- ownerMetadata: {
140
- protocol: IDENTITY_BINDING_FENCE_PROTOCOL,
141
- fenceEpoch: randomUUID()
142
- },
143
- // A cull fence is fail-closed. Reclaiming an apparently stale sentinel
144
- // would turn an ambiguous owner/fence state into a concurrent write.
145
- reclaimStale: false,
146
- ...(observe ? { observe } : {})
147
- });
169
+ }
148
170
  }
149
- /**
150
- * Async twin of {@link reclaimOrMint} used by the L2 identity worker. Identical
151
- * invariants — proof-of-possession gates reclaim, a fail-closed fence
152
- * (`reclaimStale:false`) refuses an ambiguous sentinel, `reclaimOrMint*` stays
153
- * the UNIQUE append of a binding row — but the lock WAIT is asynchronous so the
154
- * worker can receive an IPC cancel between poll attempts instead of blocking the
155
- * event loop inside `Atomics.wait`. On a mint, `beforePublish` publishes the
156
- * keyring/registration/alias before the binding append (window closure, T5).
157
- */
158
171
  export async function reclaimOrMintAsync(root, key, deps, options = {}) {
159
- mkdirSync(identityDir(root), { recursive: true });
160
- const trace = getActiveMcpTrace();
161
- const observe = trace?.detailed
162
- ? (event) => {
163
- trace.phase(`binding_lock_${event.event}`, {
164
- tool: "identity",
165
- ...(event.waitMs !== undefined ? { waitMs: event.waitMs } : {}),
166
- ...(event.holdMs !== undefined ? { holdMs: event.holdMs } : {})
167
- });
172
+ ensureDurableDirectory(identityDir(root));
173
+ const end = performance.now() + (options.deadlineMs ?? options.timeoutMs ?? 5000);
174
+ const memo = {};
175
+ options = { ...options, signal: options.signal ?? new AbortController().signal };
176
+ for (;;) {
177
+ try {
178
+ const prepared = prepareTransaction(root, key, deps, options, memo);
179
+ return await withIdentityFence(bindingsLock(root), lease => transact(root, key, deps, memo, prepared, lease), { ...options, timeoutMs: Math.max(0, end - performance.now()) });
168
180
  }
169
- : undefined;
170
- return withLock(bindingsLock(root), () => {
171
- const existing = findBinding(root, key);
172
- if (existing && deps.verifyProof(existing)) {
173
- return { action: "reclaim", instance: existing.instance, agentUuid: existing.agentUuid };
181
+ catch (e) {
182
+ const contention = e instanceof LockTimeoutError && e.lockPath === join(root, "registry", ".lock");
183
+ if ((!(e instanceof BindingFenceStaleError) && !contention) || performance.now() >= end)
184
+ throw e;
185
+ await new Promise(r => setTimeout(r, 0));
174
186
  }
175
- const minted = deps.mint();
176
- const result = {
177
- action: "mint",
178
- instance: minted.instance,
179
- agentUuid: minted.agentUuid
180
- };
181
- // Publish keys / registration / alias BEFORE the binding row so no reader
182
- // can observe a binding whose keyring is not yet provable.
183
- options.beforePublish?.(result, { identity: true });
184
- appendLaunchRow(bindingsFile(root), "bindings", {
185
- ...key, instance: minted.instance, agentUuid: minted.agentUuid,
186
- at: new Date(deps.now()).toISOString()
187
- });
188
- return result;
189
- }, {
190
- ownerMetadata: {
191
- protocol: IDENTITY_BINDING_FENCE_PROTOCOL,
192
- fenceEpoch: randomUUID()
193
- },
194
- reclaimStale: false,
195
- ...(options.signal ? { signal: options.signal } : {}),
196
- ...(options.deadlineMs !== undefined ? { timeoutMs: options.deadlineMs } : {}),
197
- ...(observe ? { observe } : {})
198
- });
187
+ }
199
188
  }
200
189
  //# sourceMappingURL=bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function redactIdentityStorageError(error: unknown): unknown;
2
+ export declare function syncDirectory(dir: string): void;
3
+ export declare function ensureDurableDirectory(dir: string): void;
4
+ export declare function syncFile(file: string): void;
5
+ export declare function writeComplete(fd: number, bytes: Buffer | string): void;
6
+ export declare function appendDurable(file: string, line: string, held: () => boolean): void;
7
+ //# sourceMappingURL=durable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durable.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/durable.ts"],"names":[],"mappings":"AAGA,wBAAgB,0BAA0B,CAAC,KAAK,EAAC,OAAO,GAAE,OAAO,CAIhE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ/C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,GAAG,IAAI,CAKnF"}