@iicp/client 0.7.12 → 0.7.35

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 (49) hide show
  1. package/README.md +120 -19
  2. package/dist/backends/anthropic.d.ts +40 -0
  3. package/dist/backends/anthropic.d.ts.map +1 -0
  4. package/dist/backends/anthropic.js +205 -0
  5. package/dist/backends/anthropic.js.map +1 -0
  6. package/dist/backends/index.d.ts +1 -1
  7. package/dist/backends/index.d.ts.map +1 -1
  8. package/dist/backends/index.js +3 -1
  9. package/dist/backends/index.js.map +1 -1
  10. package/dist/cip_policy.d.ts +9 -0
  11. package/dist/cip_policy.d.ts.map +1 -1
  12. package/dist/cip_policy.js +13 -0
  13. package/dist/cip_policy.js.map +1 -1
  14. package/dist/cli.d.ts +24 -0
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +205 -35
  17. package/dist/cli.js.map +1 -1
  18. package/dist/client.d.ts.map +1 -1
  19. package/dist/client.js +122 -36
  20. package/dist/client.js.map +1 -1
  21. package/dist/confidentiality.d.ts +14 -0
  22. package/dist/confidentiality.d.ts.map +1 -0
  23. package/dist/confidentiality.js +104 -0
  24. package/dist/confidentiality.js.map +1 -0
  25. package/dist/delegation.d.ts +40 -0
  26. package/dist/delegation.d.ts.map +1 -0
  27. package/dist/delegation.js +76 -0
  28. package/dist/delegation.js.map +1 -0
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/instance_lock.d.ts +11 -0
  34. package/dist/instance_lock.d.ts.map +1 -0
  35. package/dist/instance_lock.js +86 -0
  36. package/dist/instance_lock.js.map +1 -0
  37. package/dist/node.d.ts +48 -0
  38. package/dist/node.d.ts.map +1 -1
  39. package/dist/node.js +0 -0
  40. package/dist/node.js.map +1 -1
  41. package/dist/node_log.d.ts +5 -0
  42. package/dist/node_log.d.ts.map +1 -0
  43. package/dist/node_log.js +69 -0
  44. package/dist/node_log.js.map +1 -0
  45. package/dist/qualify.js +2 -2
  46. package/dist/qualify.js.map +1 -1
  47. package/dist/types.d.ts +10 -1
  48. package/dist/types.d.ts.map +1 -1
  49. package/package.json +1 -1
package/dist/client.js CHANGED
@@ -7,13 +7,64 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.IicpClient = void 0;
8
8
  const node_crypto_1 = require("node:crypto");
9
9
  const errors_js_1 = require("./errors.js");
10
+ const confidentiality_js_1 = require("./confidentiality.js");
10
11
  const INTENT_RE = /^urn:iicp:intent:[a-z0-9_:/-]+$/;
11
12
  const MAX_TIMEOUT_MS = 120_000;
12
13
  const DEFAULT_TIMEOUT_MS = 30_000;
13
14
  const MAX_RETRIES = 3;
14
15
  const TRANSIENT_STATUSES = new Set([429, 502, 503, 504]);
16
+ /** SSRF guard: return true only if url is safe to use as a node endpoint (#388). */
17
+ function _isSsrfSafe(url) {
18
+ let parsed;
19
+ try {
20
+ parsed = new URL(url);
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ if (!["http:", "https:"].includes(parsed.protocol))
26
+ return false;
27
+ const host = parsed.hostname.toLowerCase();
28
+ if (!host)
29
+ return false;
30
+ if (["localhost", "0.0.0.0", "::1", "::"].includes(host))
31
+ return false;
32
+ const blockedSuffixes = [".local", ".internal", ".lan", ".test", ".invalid", ".localhost"];
33
+ if (blockedSuffixes.some((s) => host.endsWith(s)))
34
+ return false;
35
+ // IPv6 address — URL.hostname strips brackets, leaving e.g. "2a0a:a543::1"
36
+ if (host.includes(":")) {
37
+ // Block link-local (fe80:) and unique-local (fc00::/7)
38
+ if (/^(fe80:|fc[0-9a-f]{2}:|fd[0-9a-f]{2}:)/i.test(host))
39
+ return false;
40
+ return true; // global unicast IPv6 — safe
41
+ }
42
+ if (!host.includes("."))
43
+ return false; // bare Docker service name
44
+ const ipv4Match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
45
+ if (ipv4Match) {
46
+ const [a, b, c, d] = ipv4Match.slice(1).map(Number);
47
+ if (a === 10)
48
+ return false; // RFC1918 10/8
49
+ if (a === 172 && b >= 16 && b <= 31)
50
+ return false; // RFC1918 172.16/12
51
+ if (a === 192 && b === 168)
52
+ return false; // RFC1918 192.168/16
53
+ if (a === 127)
54
+ return false; // loopback
55
+ if (a === 169 && b === 254)
56
+ return false; // link-local / metadata
57
+ if (a === 100 && b >= 64 && b <= 127)
58
+ return false; // CGNAT
59
+ if (a === 0)
60
+ return false; // this-network
61
+ void c;
62
+ void d;
63
+ }
64
+ return true;
65
+ }
15
66
  const DEFAULT_CONFIG = {
16
- directory_url: "https://iicp.network",
67
+ directory_url: "https://iicp.network/api",
17
68
  timeout_ms: DEFAULT_TIMEOUT_MS,
18
69
  tls_verify: true,
19
70
  };
@@ -21,6 +72,11 @@ class IicpClient {
21
72
  cfg;
22
73
  constructor(config) {
23
74
  const merged = { ...DEFAULT_CONFIG, ...config };
75
+ if (merged.tls_verify === false) {
76
+ console.warn("[iicp-client] tls_verify: false has no effect — TLS certificate verification " +
77
+ "cannot be disabled via this config field. Use NODE_TLS_REJECT_UNAUTHORIZED=0 " +
78
+ "in the environment if you need to disable cert verification for local testing.");
79
+ }
24
80
  // SDK-04: reject oversized timeouts at construction time
25
81
  if (merged.timeout_ms > MAX_TIMEOUT_MS) {
26
82
  throw new errors_js_1.IicpError(`timeout_ms must be ≤ ${MAX_TIMEOUT_MS}; got ${merged.timeout_ms}`, "SDK-04");
@@ -43,13 +99,20 @@ class IicpClient {
43
99
  params.set("qos", o.qos);
44
100
  if (o.min_reputation !== undefined)
45
101
  params.set("min_reputation", String(o.min_reputation));
46
- const data = await this._get(`${this.cfg.directory_url}/api/v1/discover?${params}`, 5_000, traceparent);
102
+ const data = await this._get(`${this.cfg.directory_url.replace(/\/$/, "")}/v1/discover?${params}`, 5_000, traceparent);
47
103
  const raw = data.nodes ?? [];
48
- return raw.map((n) => {
104
+ const nodes = [];
105
+ for (const n of raw) {
49
106
  const node = n;
50
- return {
107
+ const endpoint = String(node.endpoint ?? "");
108
+ if (!_isSsrfSafe(endpoint)) {
109
+ console.warn(`[iicp-client] SSRF guard: skipping node ${String(node.node_id ?? "?").slice(0, 8)} — endpoint ${endpoint} is not publicly routable`);
110
+ continue;
111
+ }
112
+ const rawCx = node.cx_public_key;
113
+ nodes.push({
51
114
  node_id: String(node.node_id),
52
- endpoint: String(node.endpoint ?? ""),
115
+ endpoint,
53
116
  score: Number(node.score ?? 0),
54
117
  available: Boolean(node.available ?? true),
55
118
  region: String(node.region ?? ""),
@@ -57,8 +120,16 @@ class IicpClient {
57
120
  reputation_score: node.reputation_score,
58
121
  health_label: node.health_label,
59
122
  exposure_mode: node.exposure_mode,
60
- };
61
- });
123
+ cx_public_key: rawCx && typeof rawCx === "object" && rawCx.algorithm && rawCx.key && rawCx.key_id
124
+ ? { algorithm: rawCx.algorithm, key: rawCx.key, key_id: rawCx.key_id }
125
+ : undefined,
126
+ // #397 — transport protocols (http/https/iicp-native) when the directory emits them.
127
+ transport: Array.isArray(node.transport)
128
+ ? node.transport.map(String)
129
+ : undefined,
130
+ });
131
+ }
132
+ return nodes;
62
133
  }
63
134
  /**
64
135
  * Discover → select best node → submit task.
@@ -69,23 +140,16 @@ class IicpClient {
69
140
  const tp = _traceparent(); // SDK-06: shared trace across discover + submit
70
141
  const nodes = await this.discover(req.intent, {
71
142
  region: req.constraints?.region ?? this.cfg.region,
72
- qos: req.constraints?.qos,
143
+ // Do not filter by qos qos is a task execution hint, not a node capability
144
+ // filter. Most nodes don't declare qos support; directory returns 0 nodes.
73
145
  min_reputation: req.constraints?.min_reputation,
74
146
  }, tp);
75
147
  if (nodes.length === 0) {
76
148
  throw new errors_js_1.IicpError(`No nodes available for intent: ${req.intent}`, "SDK-03", { component: "directory" });
77
149
  }
78
- const node = nodes[0];
79
150
  const taskId = req.task_id ?? (0, node_crypto_1.randomUUID)();
80
- const body = {
81
- task_id: taskId,
82
- intent: req.intent,
83
- payload: req.payload,
84
- constraints: req.constraints ?? {},
85
- };
86
- const headers = {
87
- "Content-Type": "application/json",
88
- };
151
+ const candidates = nodes.slice(0, MAX_RETRIES);
152
+ const headers = { "Content-Type": "application/json" };
89
153
  if (req.auth?.token) {
90
154
  headers["Authorization"] = `Bearer ${req.auth.token}`;
91
155
  }
@@ -93,27 +157,49 @@ class IicpClient {
93
157
  headers["Authorization"] = `Bearer ${this.cfg.api_token}`;
94
158
  }
95
159
  let lastErr;
96
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
97
- try {
98
- const data = await this._post(`${node.endpoint}/v1/task`, body, req.constraints?.timeout_ms ?? this.cfg.timeout_ms, headers, tp);
99
- return {
100
- task_id: taskId,
101
- result: data.result,
102
- status: String(data.status ?? "ok"),
103
- metrics: data.metrics,
104
- };
160
+ for (const node of candidates) {
161
+ // IICP-CX S.16 §5: build body per node (cx_public_key may differ)
162
+ const shouldEncrypt = this.cfg.use_confidentiality === true && node.cx_public_key != null;
163
+ const body = {
164
+ task_id: taskId,
165
+ intent: req.intent,
166
+ constraints: req.constraints ?? {},
167
+ };
168
+ if (shouldEncrypt && node.cx_public_key) {
169
+ body["iicp_conf"] = (0, confidentiality_js_1.encryptPayload)(req.payload, node.cx_public_key, taskId, req.intent);
105
170
  }
106
- catch (err) {
107
- if (err instanceof errors_js_1.IicpError &&
108
- err.status_code !== undefined &&
109
- TRANSIENT_STATUSES.has(err.status_code)) {
110
- lastErr = err;
111
- // SDK-01: exponential back-off on transient errors
112
- await _sleep(200 * 2 ** attempt);
113
- continue;
171
+ else {
172
+ body["payload"] = req.payload;
173
+ }
174
+ let nodeConnected = true;
175
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
176
+ try {
177
+ const data = await this._post(`${node.endpoint}/v1/task`, body, req.constraints?.timeout_ms ?? this.cfg.timeout_ms, headers, tp);
178
+ return {
179
+ task_id: taskId,
180
+ result: data.result,
181
+ status: String(data.status ?? "ok"),
182
+ metrics: data.metrics,
183
+ };
184
+ }
185
+ catch (err) {
186
+ if (err instanceof errors_js_1.IicpError) {
187
+ lastErr = err;
188
+ // Connection error → skip to next node immediately
189
+ if (!err.status_code) {
190
+ nodeConnected = false;
191
+ break;
192
+ }
193
+ if (TRANSIENT_STATUSES.has(err.status_code)) {
194
+ await _sleep(200 * 2 ** attempt);
195
+ continue; // retry same node on 5xx
196
+ }
197
+ }
198
+ throw err; // non-retryable
114
199
  }
115
- throw err;
116
200
  }
201
+ if (!nodeConnected)
202
+ continue; // unreachable node, try next
117
203
  }
118
204
  throw lastErr;
119
205
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAAyC;AAEzC,2CAAwC;AAYxC,MAAM,SAAS,GAAG,iCAAiC,CAAC;AACpD,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEzD,MAAM,cAAc,GAAiB;IACnC,aAAa,EAAE,sBAAsB;IACrC,UAAU,EAAE,kBAAkB;IAC9B,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAa,UAAU;IACJ,GAAG,CAAe;IAEnC,YAAY,MAA8B;QACxC,MAAM,MAAM,GAAiB,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC9D,yDAAyD;QACzD,IAAI,MAAM,CAAC,UAAU,GAAG,cAAc,EAAE,CAAC;YACvC,MAAM,IAAI,qBAAS,CACjB,wBAAwB,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,EAClE,QAAQ,CACT,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,mBAAmB;IACnB,qEAAqE;IAErE,2DAA2D;IAC3D,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,IAAsB,EAAE,WAAoB;QACzE,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3C,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS;YAChC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAC1B,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,oBAAoB,MAAM,EAAE,EACrD,KAAK,EACL,WAAW,CACZ,CAAC;QACF,MAAM,GAAG,GAAe,IAA8B,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACrC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC9B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;gBAC1C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAyC;gBACnE,gBAAgB,EAAE,IAAI,CAAC,gBAAsC;gBAC7D,YAAY,EAAE,IAAI,CAAC,YAAkC;gBACrD,aAAa,EAAE,IAAI,CAAC,aAAmC;aACxD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAgB;QAC3B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,gDAAgD;QAC3E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;YAC5C,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;YAClD,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG;YACzB,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,cAAc;SAChD,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,qBAAS,CACjB,kCAAkC,GAAG,CAAC,MAAM,EAAE,EAC9C,QAAQ,EACR,EAAE,SAAS,EAAE,WAAW,EAAE,CAC3B,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,IAAA,wBAAU,GAAE,CAAC;QAC3C,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;SACnC,CAAC;QAEF,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxD,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,OAA8B,CAAC;QACnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAC3B,GAAG,IAAI,CAAC,QAAQ,UAAU,EAC1B,IAAI,EACJ,GAAG,CAAC,WAAW,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAClD,OAAO,EACP,EAAE,CACH,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,MAAM;oBACf,MAAM,EAAG,IAAgC,CAAC,MAAM;oBAChD,MAAM,EAAE,MAAM,CAAE,IAAgC,CAAC,MAAM,IAAI,IAAI,CAAC;oBAChE,OAAO,EAAG,IAAgC,CAAC,OAE9B;iBACd,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IACE,GAAG,YAAY,qBAAS;oBACxB,GAAG,CAAC,WAAW,KAAK,SAAS;oBAC7B,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EACvC,CAAC;oBACD,OAAO,GAAG,GAAG,CAAC;oBACd,mDAAmD;oBACnD,MAAM,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;oBACjC,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,MAAM,OAAQ,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,IAAkB;QACpD,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,6BAA6B,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;YAC7B,MAAM;YACN,OAAO,EAAE;gBACP,QAAQ;gBACR,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE;YACD,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU;gBAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChF;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QAC9D,MAAM,UAAU,GAAI,MAAM,CAAC,OAAqB,IAAI,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,EAAE,GAAG,CAA4B,CAAC;YACxC,MAAM,GAAG,GAAG,EAAE,CAAC,OAA6C,CAAC;YAC7D,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE;oBACP,IAAI,EAAG,GAAG,EAAE,IAA4B,IAAI,WAAW;oBACvD,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,EAAE;iBAC5B;gBACD,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa,IAAI,MAAM,CAAC;aAClD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,KAA2C,CAAC;QACpE,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC;gBACE,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,CAAC;gBAC1C,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,CAAC;gBAClD,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,CAAC;aACzC;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,OAAO;YACP,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,kBAAkB;IAClB,qEAAqE;IAE7D,eAAe,CAAC,MAAc;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,qBAAS,CACjB,wBAAwB,MAAM,kCAAkC,EAChE,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,SAAiB,EAAE,WAAoB;QACrE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,IAAI,YAAY,EAAE,EAAE;gBACnF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,qBAAS,CACjB,OAAO,GAAG,aAAa,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC1D,QAAQ,EACR,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CACpD,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,qBAAS;gBAAE,MAAM,GAAG,CAAC;YACxC,IAAK,GAAyB,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACrD,MAAM,IAAI,qBAAS,CACjB,2BAA2B,SAAS,IAAI,EACxC,QAAQ,EACR,EAAE,SAAS,EAAE,WAAW,EAAE,CAC3B,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,qBAAS,CACjB,kBAAmB,GAAa,CAAC,OAAO,EAAE,EAC1C,QAAQ,EACR,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CACvC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAK,CACjB,GAAW,EACX,IAAa,EACb,SAAiB,EACjB,YAAqC,EACrC,WAAoB;QAEpB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;oBAC1B,WAAW,EAAE,WAAW,IAAI,YAAY,EAAE;oBAC1C,GAAG,YAAY;iBAChB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;oBACjD,IAAI,CAAC,CAAC,KAAK;wBAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBACxB,MAAM,IAAI,qBAAS,CACjB,QAAQ,GAAG,aAAa,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC3D,IAAI,EACJ,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAClD,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,qBAAS;gBAAE,MAAM,GAAG,CAAC;YACxC,IAAK,GAAyB,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACrD,MAAM,IAAI,qBAAS,CACjB,2BAA2B,SAAS,IAAI,EACxC,QAAQ,EACR,EAAE,SAAS,EAAE,SAAS,EAAE,CACzB,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,qBAAS,CACjB,kBAAmB,GAAa,CAAC,OAAO,EAAE,EAC1C,QAAQ,EACR,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CACrC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AA3RD,gCA2RC;AAED,SAAS,MAAM,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,wDAAwD;AACxD,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,IAAA,wBAAU,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAA,wBAAU,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,MAAM,OAAO,IAAI,QAAQ,KAAK,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * IICP-CX S.16 Tier-1 confidentiality: X25519-HKDF-SHA256 + AES-256-GCM.
3
+ * CX-Consumer side — encrypts task payloads for nodes advertising cx_public_key.
4
+ * Uses Node.js built-in crypto only (no external dependencies).
5
+ */
6
+ import type { CxPublicKey } from "./types.js";
7
+ /** Encrypt a task payload using the node's X25519 public key (CX-Consumer). */
8
+ export declare function encryptPayload(payload: unknown, cxPublicKey: CxPublicKey, taskId: string, intent: string): Record<string, unknown>;
9
+ /**
10
+ * Decrypt an iicp_conf envelope (CX-Provider side — for testing/adapter use).
11
+ * privKeyBytes: raw 32-byte X25519 private key; pubKeyBytes: corresponding public key.
12
+ */
13
+ export declare function decryptPayload(iicpConf: Record<string, unknown>, privKeyBytes: Buffer, pubKeyBytes: Buffer): unknown;
14
+ //# sourceMappingURL=confidentiality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidentiality.d.ts","sourceRoot":"","sources":["../src/confidentiality.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0B9C,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0CzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAmCT"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * IICP-CX S.16 Tier-1 confidentiality: X25519-HKDF-SHA256 + AES-256-GCM.
4
+ * CX-Consumer side — encrypts task payloads for nodes advertising cx_public_key.
5
+ * Uses Node.js built-in crypto only (no external dependencies).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.encryptPayload = encryptPayload;
9
+ exports.decryptPayload = decryptPayload;
10
+ const node_crypto_1 = require("node:crypto");
11
+ function b64urlEncode(buf) {
12
+ return buf.toString("base64url");
13
+ }
14
+ function b64urlDecode(s) {
15
+ return Buffer.from(s, "base64url");
16
+ }
17
+ /** HKDF-SHA256 with HMAC-based extract+expand (RFC 5869). */
18
+ function hkdfSha256(ikm, salt, info, length) {
19
+ const prk = (0, node_crypto_1.createHmac)("sha256", salt).update(ikm).digest();
20
+ let t = Buffer.alloc(0);
21
+ let output = Buffer.alloc(0);
22
+ for (let i = 1; output.length < length; i++) {
23
+ t = (0, node_crypto_1.createHmac)("sha256", prk)
24
+ .update(t)
25
+ .update(info)
26
+ .update(Buffer.from([i]))
27
+ .digest();
28
+ output = Buffer.concat([output, t]);
29
+ }
30
+ return output.slice(0, length);
31
+ }
32
+ /** Encrypt a task payload using the node's X25519 public key (CX-Consumer). */
33
+ function encryptPayload(payload, cxPublicKey, taskId, intent) {
34
+ if (cxPublicKey.algorithm !== "X25519") {
35
+ throw new Error(`Unsupported cx_public_key algorithm: ${cxPublicKey.algorithm}`);
36
+ }
37
+ // Import node's static public key from base64url-encoded raw bytes (JWK format)
38
+ const nodeX = cxPublicKey.key; // already base64url
39
+ const nodePub = (0, node_crypto_1.createPublicKey)({
40
+ key: { kty: "OKP", crv: "X25519", x: nodeX },
41
+ format: "jwk",
42
+ });
43
+ // Generate ephemeral X25519 keypair
44
+ const { privateKey: ephemPriv, publicKey: ephemPub } = (0, node_crypto_1.generateKeyPairSync)("x25519");
45
+ const ephemPubJwk = ephemPub.export({ format: "jwk" });
46
+ const ephemPubBytes = b64urlDecode(ephemPubJwk.x);
47
+ // ECDH shared secret
48
+ const sharedSecret = (0, node_crypto_1.diffieHellman)({ privateKey: ephemPriv, publicKey: nodePub });
49
+ // HKDF-SHA256
50
+ const nonce = (0, node_crypto_1.randomBytes)(12);
51
+ const info = Buffer.from(`IICP-CX-v1${taskId}${intent}`);
52
+ const keyMaterial = hkdfSha256(sharedSecret, nonce, info, 32);
53
+ // AES-256-GCM encrypt
54
+ const payloadJson = Buffer.from(JSON.stringify(payload));
55
+ const aad = Buffer.from(`${taskId}|${intent}`);
56
+ const cipher = (0, node_crypto_1.createCipheriv)("aes-256-gcm", keyMaterial, nonce);
57
+ cipher.setAAD(aad);
58
+ const ciphertext = Buffer.concat([cipher.update(payloadJson), cipher.final()]);
59
+ const tag = cipher.getAuthTag();
60
+ return {
61
+ version: 1,
62
+ recipient_key_id: cxPublicKey.key_id,
63
+ kem_ciphertext: b64urlEncode(ephemPubBytes),
64
+ encrypted_body: b64urlEncode(Buffer.concat([ciphertext, tag])),
65
+ nonce: b64urlEncode(nonce),
66
+ aad: b64urlEncode(aad),
67
+ plaintext_size: payloadJson.length,
68
+ };
69
+ }
70
+ /**
71
+ * Decrypt an iicp_conf envelope (CX-Provider side — for testing/adapter use).
72
+ * privKeyBytes: raw 32-byte X25519 private key; pubKeyBytes: corresponding public key.
73
+ */
74
+ function decryptPayload(iicpConf, privKeyBytes, pubKeyBytes) {
75
+ const privX = b64urlEncode(privKeyBytes);
76
+ const pubX = b64urlEncode(pubKeyBytes);
77
+ const nodePriv = (0, node_crypto_1.createPrivateKey)({
78
+ key: { kty: "OKP", crv: "X25519", x: pubX, d: privX },
79
+ format: "jwk",
80
+ });
81
+ const ephemPubBytes = b64urlDecode(String(iicpConf["kem_ciphertext"]));
82
+ const ephemPub = (0, node_crypto_1.createPublicKey)({
83
+ key: { kty: "OKP", crv: "X25519", x: b64urlEncode(ephemPubBytes) },
84
+ format: "jwk",
85
+ });
86
+ const sharedSecret = (0, node_crypto_1.diffieHellman)({ privateKey: nodePriv, publicKey: ephemPub });
87
+ const nonce = b64urlDecode(String(iicpConf["nonce"]));
88
+ const aadBytes = b64urlDecode(String(iicpConf["aad"]));
89
+ const aadStr = aadBytes.toString();
90
+ const pipeIdx = aadStr.indexOf("|");
91
+ const taskId = aadStr.slice(0, pipeIdx);
92
+ const intent = aadStr.slice(pipeIdx + 1);
93
+ const info = Buffer.from(`IICP-CX-v1${taskId}${intent}`);
94
+ const keyMaterial = hkdfSha256(sharedSecret, nonce, info, 32);
95
+ const encBody = b64urlDecode(String(iicpConf["encrypted_body"]));
96
+ const ciphertext = encBody.slice(0, -16);
97
+ const tag = encBody.slice(-16);
98
+ const decipher = (0, node_crypto_1.createDecipheriv)("aes-256-gcm", keyMaterial, nonce);
99
+ decipher.setAAD(aadBytes);
100
+ decipher.setAuthTag(tag);
101
+ const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
102
+ return JSON.parse(plaintext.toString());
103
+ }
104
+ //# sourceMappingURL=confidentiality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidentiality.js","sourceRoot":"","sources":["../src/confidentiality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ADR-045 Phase A — operator→node delegation (#407 / #2).
3
+ *
4
+ * A fleet operator holds an ed25519 keypair and issues a compact,
5
+ * offline-verifiable token asserting `node:<id>` is operated by
6
+ * `<operator_pubkey>` until `<not_after>`. The node attaches it at REGISTER;
7
+ * any federated directory verifies it locally (no phone-home). Proven in #406.
8
+ *
9
+ * Uses the built-in `node:crypto` ed25519 (no new dependency). The CANONICAL
10
+ * signing bytes MUST be byte-identical to the PHP directory verifier
11
+ * (`OperatorDelegationVerifier::canonicalBytes`) and the Python signer — pinned
12
+ * by a cross-language known-answer test (KAT). A mismatch silently breaks all
13
+ * verification.
14
+ */
15
+ import { type KeyObject } from "node:crypto";
16
+ export interface Delegation {
17
+ node_id: string;
18
+ operator_pub: string;
19
+ not_after: number;
20
+ sig: string;
21
+ }
22
+ /**
23
+ * Exact bytes the operator signs / the directory verifies. Field order is
24
+ * alphabetical (node_id < not_after < operator_pub); JSON.stringify preserves
25
+ * insertion order, yielding the spec/PHP byte form. Do NOT reorder.
26
+ */
27
+ export declare function canonicalBytes(nodeId: string, operatorPubB64: string, notAfter: number): Buffer;
28
+ /** Base64 of the operator's raw 32-byte ed25519 public key (as the directory stores). */
29
+ export declare function operatorPubB64(privateKey: KeyObject): string;
30
+ /** Operator (offline) signs a delegation for one node. Short TTL = revocation baseline (OPEN-3 C). */
31
+ export declare function issueDelegation(privateKey: KeyObject, nodeId: string, ttlSeconds?: number): Delegation;
32
+ /**
33
+ * Local self-consistency check (signature + node binding + expiry). The
34
+ * DIRECTORY is the authority on operator trust; this lets a node sanity-check
35
+ * its own token before sending. Returns true only if all checks pass.
36
+ */
37
+ export declare function verifyDelegation(token: Delegation, claimedNodeId: string, now?: number): boolean;
38
+ /** Convenience for tests/tools: generate an operator ed25519 keypair. */
39
+ export declare function generateOperatorKey(): KeyObject;
40
+ //# sourceMappingURL=delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../src/delegation.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAwC,KAAK,SAAS,EAAgB,MAAM,aAAa,CAAC;AAKjG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK/F;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,UAAU,EAAE,SAAS,GAAG,MAAM,CAG5D;AAED,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,SAAO,GAAG,UAAU,CAKpG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBhG;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * ADR-045 Phase A — operator→node delegation (#407 / #2).
5
+ *
6
+ * A fleet operator holds an ed25519 keypair and issues a compact,
7
+ * offline-verifiable token asserting `node:<id>` is operated by
8
+ * `<operator_pubkey>` until `<not_after>`. The node attaches it at REGISTER;
9
+ * any federated directory verifies it locally (no phone-home). Proven in #406.
10
+ *
11
+ * Uses the built-in `node:crypto` ed25519 (no new dependency). The CANONICAL
12
+ * signing bytes MUST be byte-identical to the PHP directory verifier
13
+ * (`OperatorDelegationVerifier::canonicalBytes`) and the Python signer — pinned
14
+ * by a cross-language known-answer test (KAT). A mismatch silently breaks all
15
+ * verification.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.canonicalBytes = canonicalBytes;
19
+ exports.operatorPubB64 = operatorPubB64;
20
+ exports.issueDelegation = issueDelegation;
21
+ exports.verifyDelegation = verifyDelegation;
22
+ exports.generateOperatorKey = generateOperatorKey;
23
+ const node_crypto_1 = require("node:crypto");
24
+ /** SPKI DER prefix for an ed25519 public key (12 bytes); + 32 raw key bytes = 44. */
25
+ const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
26
+ /**
27
+ * Exact bytes the operator signs / the directory verifies. Field order is
28
+ * alphabetical (node_id < not_after < operator_pub); JSON.stringify preserves
29
+ * insertion order, yielding the spec/PHP byte form. Do NOT reorder.
30
+ */
31
+ function canonicalBytes(nodeId, operatorPubB64, notAfter) {
32
+ return Buffer.from(JSON.stringify({ node_id: nodeId, not_after: notAfter, operator_pub: operatorPubB64 }), "utf8");
33
+ }
34
+ /** Base64 of the operator's raw 32-byte ed25519 public key (as the directory stores). */
35
+ function operatorPubB64(privateKey) {
36
+ const der = (0, node_crypto_1.createPublicKey)(privateKey).export({ type: "spki", format: "der" });
37
+ return Buffer.from(der.subarray(der.length - 32)).toString("base64");
38
+ }
39
+ /** Operator (offline) signs a delegation for one node. Short TTL = revocation baseline (OPEN-3 C). */
40
+ function issueDelegation(privateKey, nodeId, ttlSeconds = 3600) {
41
+ const pub = operatorPubB64(privateKey);
42
+ const notAfter = Math.floor(Date.now() / 1000) + ttlSeconds;
43
+ const sig = (0, node_crypto_1.sign)(null, canonicalBytes(nodeId, pub, notAfter), privateKey);
44
+ return { node_id: nodeId, operator_pub: pub, not_after: notAfter, sig: sig.toString("base64") };
45
+ }
46
+ /**
47
+ * Local self-consistency check (signature + node binding + expiry). The
48
+ * DIRECTORY is the authority on operator trust; this lets a node sanity-check
49
+ * its own token before sending. Returns true only if all checks pass.
50
+ */
51
+ function verifyDelegation(token, claimedNodeId, now) {
52
+ const ts = now ?? Math.floor(Date.now() / 1000);
53
+ try {
54
+ if (token.node_id !== claimedNodeId)
55
+ return false;
56
+ if (ts >= token.not_after)
57
+ return false;
58
+ const raw = Buffer.from(token.operator_pub, "base64");
59
+ if (raw.length !== 32)
60
+ return false;
61
+ const pub = (0, node_crypto_1.createPublicKey)({
62
+ key: Buffer.concat([ED25519_SPKI_PREFIX, raw]),
63
+ format: "der",
64
+ type: "spki",
65
+ });
66
+ return (0, node_crypto_1.verify)(null, canonicalBytes(token.node_id, token.operator_pub, token.not_after), pub, Buffer.from(token.sig, "base64"));
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ }
72
+ /** Convenience for tests/tools: generate an operator ed25519 keypair. */
73
+ function generateOperatorKey() {
74
+ return (0, node_crypto_1.generateKeyPairSync)("ed25519").privateKey;
75
+ }
76
+ //# sourceMappingURL=delegation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.js","sourceRoot":"","sources":["../src/delegation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,6 +14,8 @@ export { vllmHandler } from "./backends/vllm.js";
14
14
  export type { VllmOptions } from "./backends/vllm.js";
15
15
  export { llamacppHandler } from "./backends/llamacpp.js";
16
16
  export type { LlamaCppOptions } from "./backends/llamacpp.js";
17
+ export { anthropicHandler } from "./backends/anthropic.js";
18
+ export type { AnthropicOptions } from "./backends/anthropic.js";
17
19
  export { getBackendHandler, BACKEND_TYPES } from "./backends/index.js";
18
20
  export type { BackendType } from "./backends/index.js";
19
21
  export type { BackendHandler, BackendOptions } from "./backends/base.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConcurrencyGate = exports.CapacityExceededError = exports.runConformanceChecks = exports.verifySignature = exports.signBody = exports.phpCanonicalSignBody = exports.buildPricingBlock = exports.getCipPolicy = exports.configureCipPolicy = exports.CooperativeInferencePolicy = exports.PeerManager = exports.modelsDiverge = exports.runAuditPass = exports.IdempotencyGuard = exports.TokenValidator = exports.AvailabilityEvaluator = exports.QUEUE_WAIT_MS = exports.QUEUE_ELIGIBLE = exports.QOS_PRIORITY = exports.isQueueEligible = exports.qosPriority = exports.BACKEND_TYPES = exports.getBackendHandler = exports.llamacppHandler = exports.vllmHandler = exports.openaiCompatHandler = exports.qualifyServiceAsync = exports.qualifyService = exports.EXPOSURE_MODES = exports.tryUpnpMapping = exports.probeExternalIp = exports.detectCgnat = exports.looksRoutable = exports.detectNat = exports.decodeFrame = exports.encodeFrame = exports.IICP_MAGIC = exports.FRAME_HEADER_LEN = exports.FRAMING_VERSION = exports.MsgType = exports.IicpTcpClientError = exports.IicpTcpClient = exports.IicpTcpServer = exports.IicpNode = exports.IicpError = exports.IicpClient = void 0;
3
+ exports.ConcurrencyGate = exports.CapacityExceededError = exports.runConformanceChecks = exports.verifySignature = exports.signBody = exports.phpCanonicalSignBody = exports.buildPricingBlock = exports.getCipPolicy = exports.configureCipPolicy = exports.CooperativeInferencePolicy = exports.PeerManager = exports.modelsDiverge = exports.runAuditPass = exports.IdempotencyGuard = exports.TokenValidator = exports.AvailabilityEvaluator = exports.QUEUE_WAIT_MS = exports.QUEUE_ELIGIBLE = exports.QOS_PRIORITY = exports.isQueueEligible = exports.qosPriority = exports.BACKEND_TYPES = exports.getBackendHandler = exports.anthropicHandler = exports.llamacppHandler = exports.vllmHandler = exports.openaiCompatHandler = exports.qualifyServiceAsync = exports.qualifyService = exports.EXPOSURE_MODES = exports.tryUpnpMapping = exports.probeExternalIp = exports.detectCgnat = exports.looksRoutable = exports.detectNat = exports.decodeFrame = exports.encodeFrame = exports.IICP_MAGIC = exports.FRAME_HEADER_LEN = exports.FRAMING_VERSION = exports.MsgType = exports.IicpTcpClientError = exports.IicpTcpClient = exports.IicpTcpServer = exports.IicpNode = exports.IicpError = exports.IicpClient = void 0;
4
4
  var client_js_1 = require("./client.js");
5
5
  Object.defineProperty(exports, "IicpClient", { enumerable: true, get: function () { return client_js_1.IicpClient; } });
6
6
  var errors_js_1 = require("./errors.js");
@@ -33,6 +33,8 @@ var vllm_js_1 = require("./backends/vllm.js");
33
33
  Object.defineProperty(exports, "vllmHandler", { enumerable: true, get: function () { return vllm_js_1.vllmHandler; } });
34
34
  var llamacpp_js_1 = require("./backends/llamacpp.js");
35
35
  Object.defineProperty(exports, "llamacppHandler", { enumerable: true, get: function () { return llamacpp_js_1.llamacppHandler; } });
36
+ var anthropic_js_1 = require("./backends/anthropic.js");
37
+ Object.defineProperty(exports, "anthropicHandler", { enumerable: true, get: function () { return anthropic_js_1.anthropicHandler; } });
36
38
  var index_js_1 = require("./backends/index.js");
37
39
  Object.defineProperty(exports, "getBackendHandler", { enumerable: true, get: function () { return index_js_1.getBackendHandler; } });
38
40
  Object.defineProperty(exports, "BACKEND_TYPES", { enumerable: true, get: function () { return index_js_1.BACKEND_TYPES; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AACnB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAqC;AAA5B,mGAAA,QAAQ,OAAA;AAEjB,6CAUuB;AATrB,4GAAA,aAAa,OAAA;AACb,4GAAA,aAAa,OAAA;AACb,iHAAA,kBAAkB,OAAA;AAClB,sGAAA,OAAO,OAAA;AACP,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,yGAAA,UAAU,OAAA;AACV,0GAAA,WAAW,OAAA;AACX,0GAAA,WAAW,OAAA;AASb,uDAM4B;AAL1B,6GAAA,SAAS,OAAA;AACT,iHAAA,aAAa,OAAA;AACb,+GAAA,WAAW,OAAA;AACX,mHAAA,eAAe,OAAA;AACf,kHAAA,cAAc,OAAA;AAGhB,2CAIsB;AAHpB,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AASrB,gEAAkE;AAAzD,uHAAA,mBAAmB,OAAA;AAM5B,8CAAiD;AAAxC,sGAAA,WAAW,OAAA;AAEpB,sDAAyD;AAAhD,8GAAA,eAAe,OAAA;AAExB,gDAAuE;AAA9D,6GAAA,iBAAiB,OAAA;AAAE,yGAAA,aAAa,OAAA;AAGzC,+CAA2G;AAAlG,2GAAA,WAAW,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAClF,qDAA0D;AAAjD,wHAAA,qBAAqB,OAAA;AAE9B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA;AACzB,uDAAiE;AAAxD,gHAAA,YAAY,OAAA;AAAE,iHAAA,aAAa,OAAA;AAEpC,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AAEpB,iDAIyB;AAHvB,2HAAA,0BAA0B,OAAA;AAC1B,mHAAA,kBAAkB,OAAA;AAClB,6GAAA,YAAY,OAAA;AAGd,2CAKsB;AAJpB,+GAAA,iBAAiB,OAAA;AACjB,kHAAA,oBAAoB,OAAA;AACpB,sGAAA,QAAQ,OAAA;AACR,6GAAA,eAAe,OAAA;AAGjB,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA;AAE7B,mDAA0E;AAAjE,uHAAA,qBAAqB,OAAA;AAAE,iHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AACnB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAqC;AAA5B,mGAAA,QAAQ,OAAA;AAEjB,6CAUuB;AATrB,4GAAA,aAAa,OAAA;AACb,4GAAA,aAAa,OAAA;AACb,iHAAA,kBAAkB,OAAA;AAClB,sGAAA,OAAO,OAAA;AACP,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,yGAAA,UAAU,OAAA;AACV,0GAAA,WAAW,OAAA;AACX,0GAAA,WAAW,OAAA;AASb,uDAM4B;AAL1B,6GAAA,SAAS,OAAA;AACT,iHAAA,aAAa,OAAA;AACb,+GAAA,WAAW,OAAA;AACX,mHAAA,eAAe,OAAA;AACf,kHAAA,cAAc,OAAA;AAGhB,2CAIsB;AAHpB,4GAAA,cAAc,OAAA;AACd,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AASrB,gEAAkE;AAAzD,uHAAA,mBAAmB,OAAA;AAM5B,8CAAiD;AAAxC,sGAAA,WAAW,OAAA;AAEpB,sDAAyD;AAAhD,8GAAA,eAAe,OAAA;AAExB,wDAA2D;AAAlD,gHAAA,gBAAgB,OAAA;AAEzB,gDAAuE;AAA9D,6GAAA,iBAAiB,OAAA;AAAE,yGAAA,aAAa,OAAA;AAGzC,+CAA2G;AAAlG,2GAAA,WAAW,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,8GAAA,cAAc,OAAA;AAAE,6GAAA,aAAa,OAAA;AAClF,qDAA0D;AAAjD,wHAAA,qBAAqB,OAAA;AAE9B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA;AACzB,uDAAiE;AAAxD,gHAAA,YAAY,OAAA;AAAE,iHAAA,aAAa,OAAA;AAEpC,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AAEpB,iDAIyB;AAHvB,2HAAA,0BAA0B,OAAA;AAC1B,mHAAA,kBAAkB,OAAA;AAClB,6GAAA,YAAY,OAAA;AAGd,2CAKsB;AAJpB,+GAAA,iBAAiB,OAAA;AACjB,kHAAA,oBAAoB,OAAA;AACpB,sGAAA,QAAQ,OAAA;AACR,6GAAA,eAAe,OAAA;AAGjB,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA;AAE7B,mDAA0E;AAAjE,uHAAA,qBAAqB,OAAA;AAAE,iHAAA,eAAe,OAAA"}
@@ -0,0 +1,11 @@
1
+ export declare class NodeAlreadyServingError extends Error {
2
+ }
3
+ export declare class InstanceLock {
4
+ private _path;
5
+ private constructor();
6
+ /** Acquire the per-node_id lock. Throws NodeAlreadyServingError if another LIVE
7
+ * process holds it and `force` is false. Fails open on I/O error. */
8
+ static acquire(nodeId: string, force?: boolean): InstanceLock;
9
+ release(): void;
10
+ }
11
+ //# sourceMappingURL=instance_lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance_lock.d.ts","sourceRoot":"","sources":["../src/instance_lock.ts"],"names":[],"mappings":"AAgCA,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,qBAAa,YAAY;IACH,OAAO,CAAC,KAAK;IAAjC,OAAO;IAEP;yEACqE;IACrE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,YAAY;IA+B3D,OAAO,IAAI,IAAI;CAShB"}