@ninelives/agent-governance-sdk 5.0.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.
Files changed (126) hide show
  1. package/README.md +363 -0
  2. package/dist/audit.d.ts +26 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +107 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/cascade-containment.d.ts +84 -0
  7. package/dist/cascade-containment.d.ts.map +1 -0
  8. package/dist/cascade-containment.js +387 -0
  9. package/dist/cascade-containment.js.map +1 -0
  10. package/dist/client.d.ts +34 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +112 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/context-poisoning.d.ts +58 -0
  15. package/dist/context-poisoning.d.ts.map +1 -0
  16. package/dist/context-poisoning.js +410 -0
  17. package/dist/context-poisoning.js.map +1 -0
  18. package/dist/credential-vault.d.ts +213 -0
  19. package/dist/credential-vault.d.ts.map +1 -0
  20. package/dist/credential-vault.js +567 -0
  21. package/dist/credential-vault.js.map +1 -0
  22. package/dist/discovery.d.ts +80 -0
  23. package/dist/discovery.d.ts.map +1 -0
  24. package/dist/discovery.js +404 -0
  25. package/dist/discovery.js.map +1 -0
  26. package/dist/encryption/channel.d.ts +29 -0
  27. package/dist/encryption/channel.d.ts.map +1 -0
  28. package/dist/encryption/channel.js +78 -0
  29. package/dist/encryption/channel.js.map +1 -0
  30. package/dist/encryption/index.d.ts +9 -0
  31. package/dist/encryption/index.d.ts.map +1 -0
  32. package/dist/encryption/index.js +23 -0
  33. package/dist/encryption/index.js.map +1 -0
  34. package/dist/encryption/mesh-client.d.ts +281 -0
  35. package/dist/encryption/mesh-client.d.ts.map +1 -0
  36. package/dist/encryption/mesh-client.js +1110 -0
  37. package/dist/encryption/mesh-client.js.map +1 -0
  38. package/dist/encryption/ratchet.d.ts +38 -0
  39. package/dist/encryption/ratchet.d.ts.map +1 -0
  40. package/dist/encryption/ratchet.js +223 -0
  41. package/dist/encryption/ratchet.js.map +1 -0
  42. package/dist/encryption/registry-client.d.ts +136 -0
  43. package/dist/encryption/registry-client.d.ts.map +1 -0
  44. package/dist/encryption/registry-client.js +369 -0
  45. package/dist/encryption/registry-client.js.map +1 -0
  46. package/dist/encryption/x3dh.d.ts +80 -0
  47. package/dist/encryption/x3dh.d.ts.map +1 -0
  48. package/dist/encryption/x3dh.js +238 -0
  49. package/dist/encryption/x3dh.js.map +1 -0
  50. package/dist/framework-adapter.d.ts +63 -0
  51. package/dist/framework-adapter.d.ts.map +1 -0
  52. package/dist/framework-adapter.js +253 -0
  53. package/dist/framework-adapter.js.map +1 -0
  54. package/dist/identity.d.ts +124 -0
  55. package/dist/identity.d.ts.map +1 -0
  56. package/dist/identity.js +446 -0
  57. package/dist/identity.js.map +1 -0
  58. package/dist/index.d.ts +39 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +95 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/kill-switch.d.ts +22 -0
  63. package/dist/kill-switch.d.ts.map +1 -0
  64. package/dist/kill-switch.js +60 -0
  65. package/dist/kill-switch.js.map +1 -0
  66. package/dist/lifecycle.d.ts +50 -0
  67. package/dist/lifecycle.d.ts.map +1 -0
  68. package/dist/lifecycle.js +113 -0
  69. package/dist/lifecycle.js.map +1 -0
  70. package/dist/mcp.d.ts +41 -0
  71. package/dist/mcp.d.ts.map +1 -0
  72. package/dist/mcp.js +233 -0
  73. package/dist/mcp.js.map +1 -0
  74. package/dist/metrics.d.ts +123 -0
  75. package/dist/metrics.d.ts.map +1 -0
  76. package/dist/metrics.js +289 -0
  77. package/dist/metrics.js.map +1 -0
  78. package/dist/oci-manifest.d.ts +49 -0
  79. package/dist/oci-manifest.d.ts.map +1 -0
  80. package/dist/oci-manifest.js +182 -0
  81. package/dist/oci-manifest.js.map +1 -0
  82. package/dist/policy-backends/cedar.d.ts +15 -0
  83. package/dist/policy-backends/cedar.d.ts.map +1 -0
  84. package/dist/policy-backends/cedar.js +88 -0
  85. package/dist/policy-backends/cedar.js.map +1 -0
  86. package/dist/policy-backends/opa.d.ts +17 -0
  87. package/dist/policy-backends/opa.d.ts.map +1 -0
  88. package/dist/policy-backends/opa.js +74 -0
  89. package/dist/policy-backends/opa.js.map +1 -0
  90. package/dist/policy.d.ts +77 -0
  91. package/dist/policy.d.ts.map +1 -0
  92. package/dist/policy.js +760 -0
  93. package/dist/policy.js.map +1 -0
  94. package/dist/prompt-defense.d.ts +37 -0
  95. package/dist/prompt-defense.d.ts.map +1 -0
  96. package/dist/prompt-defense.js +229 -0
  97. package/dist/prompt-defense.js.map +1 -0
  98. package/dist/protocol-facets.d.ts +87 -0
  99. package/dist/protocol-facets.d.ts.map +1 -0
  100. package/dist/protocol-facets.js +728 -0
  101. package/dist/protocol-facets.js.map +1 -0
  102. package/dist/rings.d.ts +17 -0
  103. package/dist/rings.d.ts.map +1 -0
  104. package/dist/rings.js +61 -0
  105. package/dist/rings.js.map +1 -0
  106. package/dist/sandbox.d.ts +61 -0
  107. package/dist/sandbox.d.ts.map +1 -0
  108. package/dist/sandbox.js +199 -0
  109. package/dist/sandbox.js.map +1 -0
  110. package/dist/surface-parity.d.ts +45 -0
  111. package/dist/surface-parity.d.ts.map +1 -0
  112. package/dist/surface-parity.js +216 -0
  113. package/dist/surface-parity.js.map +1 -0
  114. package/dist/trust.d.ts +28 -0
  115. package/dist/trust.d.ts.map +1 -0
  116. package/dist/trust.js +209 -0
  117. package/dist/trust.js.map +1 -0
  118. package/dist/types.d.ts +422 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +29 -0
  121. package/dist/types.js.map +1 -0
  122. package/dist/verify.d.ts +135 -0
  123. package/dist/verify.d.ts.map +1 -0
  124. package/dist/verify.js +356 -0
  125. package/dist/verify.js.map +1 -0
  126. package/package.json +66 -0
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.RegistryClient = exports.RegistryError = void 0;
6
+ exports.ed25519AuthSigner = ed25519AuthSigner;
7
+ /**
8
+ * AgentMesh Registry HTTP client.
9
+ *
10
+ * Wraps the registry's REST surface (POST /v1/agents,
11
+ * PUT/GET /v1/agents/{did}/prekeys, GET /v1/discover, GET/DELETE /v1/agents/{did})
12
+ * with typed Uint8Array <-> base64url marshalling so callers stay in raw key
13
+ * material on both sides of the wire.
14
+ *
15
+ * Spec: docs/specs/AGENTMESH-WIRE-1.0.md Section 13 (Registry)
16
+ *
17
+ * The optional `authSigner` lets callers attach an Ed25519-Timestamp
18
+ * Authorization header when the registry is configured to require it
19
+ * (verify_ed25519_timestamp_auth in agent-governance-python). Open
20
+ * registries leave it unset.
21
+ */
22
+ const ed25519_js_1 = require("@noble/curves/ed25519.js");
23
+ // ── base64url helpers (browser + node) ────────────────────────────
24
+ function toBase64Url(bytes) {
25
+ // Node 18+ supports 'base64url' encoding. Fall back to btoa for browsers.
26
+ if (typeof Buffer !== "undefined") {
27
+ return Buffer.from(bytes).toString("base64url");
28
+ }
29
+ let bin = "";
30
+ for (const b of bytes)
31
+ bin += String.fromCharCode(b);
32
+ return btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
33
+ }
34
+ function fromBase64Url(s) {
35
+ if (typeof Buffer !== "undefined") {
36
+ return new Uint8Array(Buffer.from(s, "base64url"));
37
+ }
38
+ const pad = "=".repeat((4 - (s.length % 4)) % 4);
39
+ const bin = atob(s.replace(/-/g, "+").replace(/_/g, "/") + pad);
40
+ const out = new Uint8Array(bin.length);
41
+ for (let i = 0; i < bin.length; i++)
42
+ out[i] = bin.charCodeAt(i);
43
+ return out;
44
+ }
45
+ /**
46
+ * sha256(bytes) → lowercase hex. Used to deterministically derive the
47
+ * canonical `did:mesh:<hex32>` server DID when a 409 conflict occurs
48
+ * during POP registration and the server didn't return a body to parse.
49
+ * Matches `hashlib.sha256(public_key).hexdigest()` on the Python side.
50
+ */
51
+ async function sha256Hex(bytes) {
52
+ // Node 18+ exposes Web Crypto via globalThis.crypto.
53
+ const c = globalThis.crypto;
54
+ if (c?.subtle) {
55
+ const ab = bytes.buffer instanceof ArrayBuffer
56
+ ? bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
57
+ : new Uint8Array(bytes).buffer;
58
+ const digest = await c.subtle.digest("SHA-256", ab);
59
+ return Array.from(new Uint8Array(digest))
60
+ .map((b) => b.toString(16).padStart(2, "0"))
61
+ .join("");
62
+ }
63
+ // Fallback: node:crypto (CommonJS require to keep browser bundlers happy).
64
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
65
+ const nodeCrypto = require("node:crypto");
66
+ return nodeCrypto.createHash("sha256").update(bytes).digest("hex");
67
+ }
68
+ class RegistryError extends Error {
69
+ status;
70
+ body;
71
+ constructor(message, status, body) {
72
+ super(message);
73
+ this.status = status;
74
+ this.body = body;
75
+ this.name = "RegistryError";
76
+ }
77
+ }
78
+ exports.RegistryError = RegistryError;
79
+ // ── Implementation ───────────────────────────────────────────────
80
+ class RegistryClient {
81
+ baseUrl;
82
+ fetchImpl;
83
+ authSigner;
84
+ timeoutMs;
85
+ maxRetries;
86
+ retryBaseDelayMs;
87
+ constructor(opts) {
88
+ this.baseUrl = opts.baseUrl.replace(/\/$/, "");
89
+ this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);
90
+ this.authSigner = opts.authSigner;
91
+ this.timeoutMs = opts.timeoutMs ?? 10_000;
92
+ this.maxRetries = opts.maxRetries ?? 2;
93
+ this.retryBaseDelayMs = opts.retryBaseDelayMs ?? 250;
94
+ }
95
+ // ── Registration ───────────────────────────────────────────────
96
+ /**
97
+ * Register the agent in the registry. Idempotent: a 409 response
98
+ * (already registered) resolves successfully without throwing.
99
+ *
100
+ * @param did Client-supplied DID hint. Ignored when `popSigner`
101
+ * is provided (the server derives the canonical
102
+ * `did:mesh:<sha256(public_key)[:32]>` itself); kept
103
+ * for back-compat with pre-2533 (May-23-2026)
104
+ * registries that accept a body-supplied DID.
105
+ * @param identityKey When `popSigner` is set: the **Ed25519** identity
106
+ * public key (32 bytes). The server verifies the
107
+ * proof against this key.
108
+ * When `popSigner` is unset: legacy X25519 public
109
+ * key path, preserves the old wire shape.
110
+ * @param capabilities Capability strings the agent advertises. Include
111
+ * friendly display name here so peers can find this
112
+ * agent via `discover(name)`.
113
+ * @param metadata Arbitrary string metadata (e.g. {display_name}).
114
+ * @param popSigner Optional Ed25519 signer. When set, the client
115
+ * attaches proof-of-possession (the new wire
116
+ * shape introduced by AGT PR #2533, mandatory on
117
+ * registries built from main after 2026-05-23).
118
+ * Required by `ghcr.io/microsoft/agentmesh/registry:4.0.0+`.
119
+ * @returns The canonical agent DID (server-derived when popSigner is
120
+ * set; falls back to the caller-supplied `did` otherwise).
121
+ */
122
+ async register(did, identityKey, capabilities = [], metadata = {}, popSigner) {
123
+ if (identityKey.length !== 32) {
124
+ throw new Error(`RegistryClient.register: identityKey must be 32 bytes, got ${identityKey.length}`);
125
+ }
126
+ // POP path (new wire shape, AGT PR #2533+).
127
+ if (popSigner) {
128
+ const publicKeyB64 = toBase64Url(identityKey);
129
+ const proofTimestamp = new Date().toISOString();
130
+ // Server verifies Ed25519(public_key_b64_str || proof_timestamp_str)
131
+ // — the strings as transmitted, NOT the raw key bytes. See
132
+ // agent-governance-python/agent-mesh/src/agentmesh/registry/app.py
133
+ // line ~204: `message = req.public_key.encode() + req.proof_timestamp.encode()`.
134
+ const popMessage = new TextEncoder().encode(publicKeyB64 + proofTimestamp);
135
+ const proof = popSigner.sign(popMessage);
136
+ const body = JSON.stringify({
137
+ public_key: publicKeyB64,
138
+ proof: toBase64Url(proof),
139
+ proof_timestamp: proofTimestamp,
140
+ capabilities,
141
+ metadata,
142
+ });
143
+ const resp = await this.request("POST", "/v1/agents", body);
144
+ if (resp.status === 201 || resp.status === 200) {
145
+ // Parse the server-derived DID out of the response body.
146
+ try {
147
+ const j = JSON.parse(resp.bodyText);
148
+ if (j.did)
149
+ return { did: j.did };
150
+ }
151
+ catch { /* fall through */ }
152
+ return { did };
153
+ }
154
+ if (resp.status === 409) {
155
+ // Already registered — server didn't necessarily return a DID body.
156
+ // Re-derive it deterministically the same way the server does so the
157
+ // caller can use the canonical form for subsequent lookups.
158
+ const sha256 = await sha256Hex(identityKey);
159
+ return { did: `did:mesh:${sha256.slice(0, 32)}` };
160
+ }
161
+ throw new RegistryError(`register failed: ${resp.status}`, resp.status, resp.bodyText);
162
+ }
163
+ // Legacy path (pre-2533 registries that accept body `did` + X25519 key).
164
+ const body = JSON.stringify({
165
+ did,
166
+ public_key: toBase64Url(identityKey),
167
+ capabilities,
168
+ metadata,
169
+ });
170
+ const resp = await this.request("POST", "/v1/agents", body);
171
+ if (resp.status === 201 || resp.status === 200)
172
+ return { did };
173
+ if (resp.status === 409)
174
+ return { did }; // already registered — idempotent
175
+ throw new RegistryError(`register failed: ${resp.status}`, resp.status, resp.bodyText);
176
+ }
177
+ /** Look up an agent record. Returns null on 404. */
178
+ async getAgent(did) {
179
+ const resp = await this.request("GET", `/v1/agents/${encodeURIComponent(did)}`);
180
+ if (resp.status === 404)
181
+ return null;
182
+ if (!resp.ok) {
183
+ throw new RegistryError(`getAgent failed: ${resp.status}`, resp.status, resp.bodyText);
184
+ }
185
+ const j = JSON.parse(resp.bodyText);
186
+ return {
187
+ did: j.did,
188
+ capabilities: j.capabilities,
189
+ metadata: j.metadata,
190
+ registeredAt: new Date(j.registered_at),
191
+ lastSeen: new Date(j.last_seen),
192
+ reputationScore: j.reputation_score,
193
+ };
194
+ }
195
+ /** Deregister an agent. */
196
+ async deleteAgent(did) {
197
+ const resp = await this.request("DELETE", `/v1/agents/${encodeURIComponent(did)}`);
198
+ if (resp.status === 204 || resp.status === 404)
199
+ return;
200
+ if (!resp.ok) {
201
+ throw new RegistryError(`deleteAgent failed: ${resp.status}`, resp.status, resp.bodyText);
202
+ }
203
+ }
204
+ // ── Pre-Keys ───────────────────────────────────────────────────
205
+ /**
206
+ * Upload a pre-key bundle. Replaces any existing bundle for this DID.
207
+ *
208
+ * @param identityKey X25519 long-term key (32 bytes).
209
+ * @param identityKeyEd Ed25519 signing key (32 bytes) — REQUIRED for
210
+ * receivers to verify the signed pre-key signature.
211
+ * Pass `keyManager.identityKeyEd`.
212
+ * @param signedPreKey Output of X3DHKeyManager.generateSignedPreKey()
213
+ * @param oneTimePreKeys Output of X3DHKeyManager.generateOneTimePreKeys(N)
214
+ */
215
+ async uploadPrekeys(did, identityKey, identityKeyEd, signedPreKey, oneTimePreKeys) {
216
+ if (identityKey.length !== 32) {
217
+ throw new Error(`RegistryClient.uploadPrekeys: identityKey must be 32 bytes, got ${identityKey.length}`);
218
+ }
219
+ if (identityKeyEd.length !== 32) {
220
+ throw new Error(`RegistryClient.uploadPrekeys: identityKeyEd must be 32 bytes, got ${identityKeyEd.length}`);
221
+ }
222
+ const body = JSON.stringify({
223
+ identity_key: toBase64Url(identityKey),
224
+ identity_key_ed: toBase64Url(identityKeyEd),
225
+ signed_pre_key: {
226
+ key_id: signedPreKey.keyId,
227
+ public_key: toBase64Url(signedPreKey.publicKey),
228
+ signature: toBase64Url(signedPreKey.signature),
229
+ },
230
+ one_time_pre_keys: oneTimePreKeys.map((otk) => ({
231
+ key_id: otk.keyId,
232
+ public_key: toBase64Url(otk.publicKey),
233
+ })),
234
+ });
235
+ const resp = await this.request("PUT", `/v1/agents/${encodeURIComponent(did)}/prekeys`, body);
236
+ if (!resp.ok) {
237
+ throw new RegistryError(`uploadPrekeys failed: ${resp.status}`, resp.status, resp.bodyText);
238
+ }
239
+ }
240
+ /**
241
+ * Fetch a peer's pre-key bundle for X3DH initiation. Atomically
242
+ * consumes one OPK on the registry side. Returns null on 404 (no
243
+ * bundle published).
244
+ *
245
+ * The returned PreKeyBundle is shaped for direct use with
246
+ * SecureChannel.createSender() / X3DHKeyManager.
247
+ *
248
+ * `identityKeyEd` (Ed25519, used to verify the signed pre-key
249
+ * signature) is included when the publisher uploaded it via
250
+ * `uploadPrekeys()`. Bundles that lack identity_key_ed (older clients)
251
+ * will fail verifyBundle() — peers must upgrade.
252
+ */
253
+ async fetchPrekeys(did) {
254
+ const resp = await this.request("GET", `/v1/agents/${encodeURIComponent(did)}/prekeys`);
255
+ if (resp.status === 404)
256
+ return null;
257
+ if (!resp.ok) {
258
+ throw new RegistryError(`fetchPrekeys failed: ${resp.status}`, resp.status, resp.bodyText);
259
+ }
260
+ const j = JSON.parse(resp.bodyText);
261
+ const identityKey = fromBase64Url(j.identity_key);
262
+ if (!j.identity_key_ed) {
263
+ throw new RegistryError(`Peer ${did} has not published identity_key_ed (Ed25519 signing key). ` +
264
+ "Their client must upgrade to a version that uploads both X25519 and Ed25519 keys.", 200, resp.bodyText);
265
+ }
266
+ const identityKeyEd = fromBase64Url(j.identity_key_ed);
267
+ const bundle = {
268
+ identityKey,
269
+ identityKeyEd,
270
+ signedPreKey: fromBase64Url(j.signed_pre_key.public_key),
271
+ signedPreKeySignature: fromBase64Url(j.signed_pre_key.signature),
272
+ signedPreKeyId: j.signed_pre_key.key_id,
273
+ };
274
+ if (j.one_time_pre_key) {
275
+ bundle.oneTimePreKey = fromBase64Url(j.one_time_pre_key.public_key);
276
+ bundle.oneTimePreKeyId = j.one_time_pre_key.key_id;
277
+ }
278
+ return bundle;
279
+ }
280
+ // ── Discovery ──────────────────────────────────────────────────
281
+ /**
282
+ * Search agents by capability. Capability matching on the registry
283
+ * side is exact-string (no globs); to find a friendly name, the agent
284
+ * must have published that name in its capabilities array at register
285
+ * time.
286
+ */
287
+ async discover(capability, limit = 50) {
288
+ const path = `/v1/discover?capability=${encodeURIComponent(capability)}&limit=${limit}`;
289
+ const resp = await this.request("GET", path);
290
+ if (!resp.ok) {
291
+ throw new RegistryError(`discover failed: ${resp.status}`, resp.status, resp.bodyText);
292
+ }
293
+ const j = JSON.parse(resp.bodyText);
294
+ return j.results.map((r) => ({
295
+ did: r.did,
296
+ capabilities: r.capabilities,
297
+ reputationScore: r.reputation_score,
298
+ lastSeen: new Date(r.last_seen),
299
+ }));
300
+ }
301
+ // ── Internal request plumbing ──────────────────────────────────
302
+ async request(method, path, body) {
303
+ let lastErr;
304
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
305
+ try {
306
+ const result = await this.requestOnce(method, path, body);
307
+ // Retry on 5xx; succeed/return on 2xx and 4xx.
308
+ if (result.status >= 500 && result.status < 600 && attempt < this.maxRetries) {
309
+ await this.delay(this.retryBaseDelayMs * 2 ** attempt);
310
+ continue;
311
+ }
312
+ return result;
313
+ }
314
+ catch (e) {
315
+ lastErr = e;
316
+ if (attempt < this.maxRetries) {
317
+ await this.delay(this.retryBaseDelayMs * 2 ** attempt);
318
+ continue;
319
+ }
320
+ throw e;
321
+ }
322
+ }
323
+ // Unreachable, but keeps TS happy.
324
+ throw lastErr ?? new Error("RegistryClient.request: exhausted retries");
325
+ }
326
+ async requestOnce(method, path, body) {
327
+ const headers = {};
328
+ if (body !== undefined)
329
+ headers["content-type"] = "application/json";
330
+ if (this.authSigner) {
331
+ const ts = new Date().toISOString();
332
+ const sig = this.authSigner.sign(new TextEncoder().encode(ts));
333
+ headers["authorization"] = `Ed25519-Timestamp ${this.authSigner.did} ${ts} ${toBase64Url(sig)}`;
334
+ }
335
+ const ac = new AbortController();
336
+ const timer = setTimeout(() => ac.abort(), this.timeoutMs);
337
+ try {
338
+ const resp = await this.fetchImpl(`${this.baseUrl}${path}`, {
339
+ method,
340
+ headers,
341
+ body,
342
+ signal: ac.signal,
343
+ });
344
+ const bodyText = await resp.text();
345
+ return { ok: resp.ok, status: resp.status, bodyText };
346
+ }
347
+ finally {
348
+ clearTimeout(timer);
349
+ }
350
+ }
351
+ delay(ms) {
352
+ return new Promise((r) => setTimeout(r, ms));
353
+ }
354
+ }
355
+ exports.RegistryClient = RegistryClient;
356
+ // ── Convenience: build an authSigner from an Ed25519 private key ──
357
+ /**
358
+ * Build an authSigner suitable for RegistryClientOptions.authSigner
359
+ * from a 32-byte Ed25519 secret key. This is a thin wrapper around
360
+ * @noble/curves so callers don't need to import noble themselves.
361
+ */
362
+ function ed25519AuthSigner(did, ed25519PrivateKey) {
363
+ const sk = ed25519PrivateKey.length === 64 ? ed25519PrivateKey.slice(0, 32) : ed25519PrivateKey;
364
+ return {
365
+ did,
366
+ sign: (msg) => ed25519_js_1.ed25519.sign(msg, sk),
367
+ };
368
+ }
369
+ //# sourceMappingURL=registry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../../src/encryption/registry-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ export interface X25519KeyPair {
2
+ privateKey: Uint8Array;
3
+ publicKey: Uint8Array;
4
+ }
5
+ export interface PreKeyBundle {
6
+ identityKey: Uint8Array;
7
+ /** Ed25519 signing public key — required for signature verification. */
8
+ identityKeyEd: Uint8Array;
9
+ signedPreKey: Uint8Array;
10
+ signedPreKeySignature: Uint8Array;
11
+ signedPreKeyId: number;
12
+ oneTimePreKey?: Uint8Array;
13
+ oneTimePreKeyId?: number;
14
+ }
15
+ export interface X3DHResult {
16
+ sharedSecret: Uint8Array;
17
+ ephemeralPublicKey: Uint8Array;
18
+ usedOneTimeKeyId?: number;
19
+ associatedData: Uint8Array;
20
+ }
21
+ export declare function generateX25519KeyPair(): X25519KeyPair;
22
+ export declare function ed25519ToX25519(ed25519Private: Uint8Array, ed25519Public: Uint8Array): X25519KeyPair;
23
+ /**
24
+ * X3DH key-derivation function.
25
+ *
26
+ * Computes `HKDF-SHA256(salt = 0x00 × 32, IKM = F ‖ dhConcat,
27
+ * info = "AgentMesh_X3DH_v1", L = 32)` where `F` is `0xFF × 32`, per the
28
+ * Signal X3DH spec (§2.2). Callers pass `dhConcat` (the concatenation of the
29
+ * DH outputs) as `ikm`; the F prefix is prepended here so every code path
30
+ * (initiator + responder) applies it exactly once.
31
+ *
32
+ * Exported so the test suite can pin the exact derived key against a
33
+ * cross-runtime known-answer vector shared with the AGT Python SDK, which
34
+ * guards against silent salt/IKM regressions that pass intra-runtime
35
+ * consistency checks but break Python↔TypeScript interop.
36
+ */
37
+ export declare function kdf(ikm: Uint8Array): Uint8Array;
38
+ export declare class X3DHKeyManager {
39
+ readonly identityKey: X25519KeyPair;
40
+ private readonly ed25519Private;
41
+ private readonly ed25519Public;
42
+ private signedPreKeyPair;
43
+ private oneTimePreKeys;
44
+ private nextSpkId;
45
+ private nextOtkId;
46
+ constructor(ed25519Private: Uint8Array, ed25519Public: Uint8Array);
47
+ /**
48
+ * Ed25519 public key used to sign pre-keys. Distinct from
49
+ * `identityKey.publicKey` (X25519). Peers MUST be given this key to
50
+ * verify the signature on the signed pre-key (`verifyBundle`).
51
+ */
52
+ get identityKeyEd(): Uint8Array;
53
+ /**
54
+ * Sign an arbitrary message with the Ed25519 identity private key.
55
+ *
56
+ * Used for registry registration proof-of-possession (the server
57
+ * verifies `Ed25519(public_key || proof_timestamp)` against
58
+ * `identityKeyEd`) and for the relay's `connect` frame Ed25519
59
+ * timestamp signature.
60
+ */
61
+ signMessage(message: Uint8Array): Uint8Array;
62
+ generateSignedPreKey(): {
63
+ keyId: number;
64
+ publicKey: Uint8Array;
65
+ signature: Uint8Array;
66
+ };
67
+ generateOneTimePreKeys(count: number): Array<{
68
+ keyId: number;
69
+ publicKey: Uint8Array;
70
+ }>;
71
+ getPublicBundle(otkId?: number): PreKeyBundle;
72
+ initiate(peerBundle: PreKeyBundle): X3DHResult;
73
+ respond(peerIdentityKey: Uint8Array, ephemeralPublicKey: Uint8Array, usedOneTimeKeyId?: number): X3DHResult;
74
+ get signedPreKey(): {
75
+ keyPair: X25519KeyPair;
76
+ signature: Uint8Array;
77
+ keyId: number;
78
+ } | null;
79
+ }
80
+ //# sourceMappingURL=x3dh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x3dh.d.ts","sourceRoot":"","sources":["../../src/encryption/x3dh.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,UAAU,CAAC;IACxB,wEAAwE;IACxE,aAAa,EAAE,UAAU,CAAC;IAC1B,YAAY,EAAE,UAAU,CAAC;IACzB,qBAAqB,EAAE,UAAU,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,UAAU,CAAC;IACzB,kBAAkB,EAAE,UAAU,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAIrD;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,UAAU,EAC1B,aAAa,EAAE,UAAU,GACxB,aAAa,CAgBf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAE/C;AAaD,qBAAa,cAAc;IACzB,SAAgB,WAAW,EAAE,aAAa,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,gBAAgB,CAAiF;IACzG,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;gBAEV,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU;IAMjE;;;;OAIG;IACH,IAAI,aAAa,IAAI,UAAU,CAE9B;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAI5C,oBAAoB,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE;IAQvF,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IAWtF,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY;IAqB7C,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,UAAU;IA6B9C,OAAO,CACL,eAAe,EAAE,UAAU,EAC3B,kBAAkB,EAAE,UAAU,EAC9B,gBAAgB,CAAC,EAAE,MAAM,GACxB,UAAU;IAgCb,IAAI,YAAY;iBAzIqB,aAAa;mBAAa,UAAU;eAAS,MAAM;aA2IvF;CACF"}