@iicp/client 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA8HA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDlF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgeA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElF"}
package/dist/cli.js CHANGED
@@ -8,18 +8,26 @@ exports.main = main;
8
8
  *
9
9
  * Usage:
10
10
  * iicp-node serve --model qwen2.5:0.5b --backend-url http://localhost:11434
11
+ * iicp-node init # interactive wizard
12
+ * iicp-node list # list saved node configs
11
13
  *
12
14
  * All flags also read from env (IICP_BACKEND_URL, IICP_BACKEND_MODEL,
13
15
  * IICP_PUBLIC_ENDPOINT, IICP_DIRECTORY_URL, IICP_REGION,
14
- * IICP_MAX_CONCURRENT, IICP_NODE_ID, IICP_INTENT, IICP_PORT, IICP_HOST).
16
+ * IICP_MAX_CONCURRENT, IICP_NODE_ID, IICP_INTENT, IICP_PORT, IICP_HOST,
17
+ * IICP_NODE_NAME, IICP_AUTO_DETECT_NAT, IICP_EXTERNAL_IP_PROBE_URL).
15
18
  *
16
19
  * Mirrors iicp_client.cli (Python) so operators choosing TypeScript get the
17
20
  * same one-liner setup path.
18
21
  */
19
22
  const node_util_1 = require("node:util");
20
23
  const node_crypto_1 = require("node:crypto");
24
+ const node_child_process_1 = require("node:child_process");
25
+ const readline = require("node:readline/promises");
26
+ const node_process_1 = require("node:process");
21
27
  const node_js_1 = require("./node.js");
28
+ const cip_policy_js_1 = require("./cip_policy.js");
22
29
  const openai_compat_js_1 = require("./backends/openai_compat.js");
30
+ const identity_js_1 = require("./identity.js");
23
31
  function envOr(name, fallback) {
24
32
  const v = process.env[name];
25
33
  return v ?? fallback;
@@ -31,31 +39,278 @@ function envInt(name, fallback) {
31
39
  const n = parseInt(v, 10);
32
40
  return Number.isFinite(n) ? n : fallback;
33
41
  }
42
+ function envBool(name, fallback = false) {
43
+ const v = process.env[name];
44
+ if (v === undefined)
45
+ return fallback;
46
+ return v.toLowerCase() === "true" || v === "1";
47
+ }
34
48
  function printHelp() {
35
- process.stdout.write(`usage: iicp-node serve [options]\n\n` +
49
+ process.stdout.write(`usage: iicp-node <command> [options]\n\n` +
50
+ `Commands:\n` +
51
+ ` init Interactive wizard — set up operator + first node config\n` +
52
+ ` list List node configs saved under ~/.iicp/nodes/\n` +
53
+ ` serve Register and serve a node\n\n` +
36
54
  `Run an IICP provider node backed by an OpenAI-compatible server.\n\n` +
37
- `Required (flag or env):\n` +
38
- ` --backend-url URL IICP_BACKEND_URL — Ollama / vLLM / LM Studio endpoint\n` +
39
- ` --model NAME IICP_BACKEND_MODEL — model name (e.g. qwen2.5:0.5b)\n\n` +
40
- `Optional:\n` +
41
- ` --public-endpoint URL IICP_PUBLIC_ENDPOINT — externally reachable URL of this node\n` +
42
- ` --directory-url URL IICP_DIRECTORY_URL (default https://iicp.network/api)\n` +
43
- ` --region REGION IICP_REGION (default eu-central)\n` +
44
- ` --intent URN IICP_INTENT (default urn:iicp:intent:llm:chat:v1)\n` +
45
- ` --max-concurrent N IICP_MAX_CONCURRENT (default 4)\n` +
46
- ` --node-id ID IICP_NODE_ID (auto-generated if absent)\n` +
47
- ` --port N IICP_PORT (default 8020)\n` +
48
- ` --host HOST IICP_HOST (default 0.0.0.0)\n` +
49
- ` --skip-registration IICP_SKIP_REGISTRATION register-free dev mode\n`);
55
+ `serve required (flag or env):\n` +
56
+ ` --backend-url URL IICP_BACKEND_URL — Ollama / vLLM / LM Studio endpoint\n` +
57
+ ` --model NAME IICP_BACKEND_MODEL — model name (e.g. qwen2.5:0.5b)\n` +
58
+ ` (or --node NAME load both from ~/.iicp/nodes/<NAME>.json after \`iicp-node init\`)\n\n` +
59
+ `serve optional:\n` +
60
+ ` --public-endpoint URL IICP_PUBLIC_ENDPOINT externally reachable URL of this node\n` +
61
+ ` --directory-url URL IICP_DIRECTORY_URL (default https://iicp.network/api)\n` +
62
+ ` --region REGION IICP_REGION (default eu-central)\n` +
63
+ ` --intent URN IICP_INTENT (default urn:iicp:intent:llm:chat:v1)\n` +
64
+ ` --max-concurrent N IICP_MAX_CONCURRENT (default 4)\n` +
65
+ ` --node-id ID IICP_NODE_ID (auto-generated if absent)\n` +
66
+ ` --port N IICP_PORT (default 8020)\n` +
67
+ ` --host HOST IICP_HOST (default 0.0.0.0)\n` +
68
+ ` --skip-registration IICP_SKIP_REGISTRATION — register-free dev mode\n` +
69
+ ` --auto-detect-nat IICP_AUTO_DETECT_NAT — run NAT detection at startup\n` +
70
+ ` --external-ip-probe-url U IICP_EXTERNAL_IP_PROBE_URL — fallback IPv4 probe\n`);
71
+ }
72
+ async function checkDependencies(backendUrl) {
73
+ const out = [];
74
+ // 1) Backend reachability
75
+ try {
76
+ const u = backendUrl.replace(/\/$/, "") + "/api/tags";
77
+ const r = await fetch(u, { signal: AbortSignal.timeout(2000) });
78
+ if (r.ok) {
79
+ out.push({ name: "backend", severity: "ok", message: `reachable at ${backendUrl}`, installable: false, npmExtra: "" });
80
+ }
81
+ else {
82
+ out.push({ name: "backend", severity: "warn", message: `backend HTTP ${r.status}`, installable: false, npmExtra: "" });
83
+ }
84
+ }
85
+ catch (exc) {
86
+ const msg = exc instanceof Error ? exc.message : String(exc);
87
+ out.push({ name: "backend", severity: "warn", message: `${backendUrl} unreachable: ${msg}`, installable: false, npmExtra: "" });
88
+ }
89
+ // 2) Optional Node deps mapped to npm peerDependencies
90
+ const optional = [
91
+ ["cbor-x", "cbor-x", "native IICP TCP transport (port 9484)"],
92
+ ["nat-upnp", "nat-upnp", "UPnP NAT detection + IPv6 firewall pinhole"],
93
+ ["prom-client", "prom-client", "/metrics endpoint"],
94
+ ];
95
+ for (const [mod, npmName, purpose] of optional) {
96
+ try {
97
+ // dynamic import — failure throws ERR_MODULE_NOT_FOUND
98
+ await import(mod);
99
+ out.push({ name: mod, severity: "ok", message: purpose, installable: false, npmExtra: "" });
100
+ }
101
+ catch {
102
+ out.push({ name: mod, severity: "missing", message: `${purpose} (not installed)`, installable: true, npmExtra: npmName });
103
+ }
104
+ }
105
+ // 3) IPv6 routing surface (advisory)
106
+ try {
107
+ const { detectIpv6 } = await import("./nat_detection.js");
108
+ const v6 = await detectIpv6(0, { timeoutMs: 1500 });
109
+ if (v6.globalV6Available) {
110
+ let msg = `${v6.addresses.length} global IPv6 address(es)`;
111
+ if (v6.externalV6Reachable)
112
+ msg += "; outbound v6 reachable";
113
+ out.push({ name: "ipv6", severity: "ok", message: msg, installable: false, npmExtra: "" });
114
+ }
115
+ else {
116
+ out.push({ name: "ipv6", severity: "warn", message: "no global IPv6 — direct hosting will require IPv4 + tunnel", installable: false, npmExtra: "" });
117
+ }
118
+ }
119
+ catch {
120
+ // detect_ipv6 not yet available — skip silently
121
+ }
122
+ return out;
123
+ }
124
+ function printDepStatus(issues) {
125
+ const glyph = { ok: " ✓", warn: " !", missing: " ✗" };
126
+ for (const i of issues) {
127
+ process.stdout.write(`${glyph[i.severity] ?? " ?"} ${i.name.padEnd(18)} ${i.message}\n`);
128
+ }
129
+ }
130
+ function installMissing(issues) {
131
+ const extras = Array.from(new Set(issues
132
+ .filter((i) => i.severity === "missing" && i.installable && i.npmExtra)
133
+ .map((i) => i.npmExtra))).sort();
134
+ if (extras.length === 0)
135
+ return;
136
+ process.stdout.write(`\n → npm install --no-save ${extras.join(" ")}\n`);
137
+ try {
138
+ (0, node_child_process_1.execSync)(`npm install --no-save ${extras.join(" ")}`, { stdio: "inherit" });
139
+ process.stdout.write(" ✓ done\n");
140
+ }
141
+ catch (exc) {
142
+ process.stderr.write(` ✗ npm install failed: ${exc instanceof Error ? exc.message : exc}\n`);
143
+ }
144
+ }
145
+ // ── init / list subcommands ─────────────────────────────────────────────────
146
+ async function ask(rl, prompt, fallback = "") {
147
+ const suffix = fallback ? ` [${fallback}]` : "";
148
+ const a = (await rl.question(`${prompt}${suffix}: `)).trim();
149
+ return a || fallback;
150
+ }
151
+ async function runInit() {
152
+ const rl = readline.createInterface({ input: node_process_1.stdin, output: node_process_1.stdout });
153
+ try {
154
+ process.stdout.write(`iicp-node init — IICP TypeScript SDK\n`);
155
+ process.stdout.write(`Config dir: ${(0, identity_js_1.configDir)()}\n\n`);
156
+ // Operator
157
+ let op = (0, identity_js_1.loadOperator)();
158
+ if (op) {
159
+ process.stdout.write(`Found existing operator: ${op.operator_id} (created ${op.created_at})\n`);
160
+ }
161
+ else {
162
+ process.stdout.write(`No operator identity yet — creating one.\n`);
163
+ const display = await ask(rl, "Display name (optional)");
164
+ const contact = await ask(rl, "Contact email or @handle (optional)");
165
+ op = (0, identity_js_1.generateOperator)({ display_name: display, contact });
166
+ const p = (0, identity_js_1.saveOperator)(op);
167
+ process.stdout.write(` ✓ saved ${p}\n`);
168
+ }
169
+ process.stdout.write("\n");
170
+ // Node
171
+ const name = await ask(rl, "Node name (used as filename stem, lowercase)", "default");
172
+ const existing = (0, identity_js_1.loadNode)(name);
173
+ if (existing) {
174
+ process.stdout.write(` ! ~/.iicp/nodes/${name}.json already exists. `);
175
+ const yn = (await ask(rl, "Overwrite? [y/N]", "n")).toLowerCase();
176
+ if (yn !== "y" && yn !== "yes")
177
+ return 1;
178
+ }
179
+ const backend = await ask(rl, "Backend URL (Ollama / vLLM / LM Studio)", "http://localhost:11434");
180
+ const model = await ask(rl, "Backend model", "qwen2.5:0.5b");
181
+ const directory = await ask(rl, "IICP directory URL", "https://iicp.network/api");
182
+ const region = await ask(rl, "Region tag", "eu-central");
183
+ const intent = await ask(rl, "Intent URN", "urn:iicp:intent:llm:chat:v1");
184
+ const portStr = await ask(rl, "Listen port", "8020");
185
+ const port = parseInt(portStr, 10) || 8020;
186
+ const host = await ask(rl, "Bind host", "0.0.0.0");
187
+ const publicEndpoint = await ask(rl, "Public endpoint URL (blank = dev mode)");
188
+ const autoDetectNatStr = (await ask(rl, "Auto-detect NAT via UPnP/STUN? [y/N]", "n")).toLowerCase();
189
+ const autoDetectNat = autoDetectNatStr === "y" || autoDetectNatStr === "yes";
190
+ const externalIpProbeUrl = autoDetectNat
191
+ ? await ask(rl, "External IPv4 probe URL (optional fallback)", "https://api.ipify.org")
192
+ : "";
193
+ const node = (0, identity_js_1.generateNode)({
194
+ operator_id: op.operator_id,
195
+ name,
196
+ backend_url: backend,
197
+ model,
198
+ directory_url: directory,
199
+ region,
200
+ intent,
201
+ port,
202
+ host,
203
+ public_endpoint: publicEndpoint,
204
+ auto_detect_nat: autoDetectNat,
205
+ external_ip_probe_url: externalIpProbeUrl,
206
+ });
207
+ const p = (0, identity_js_1.saveNode)(node);
208
+ process.stdout.write(`\n ✓ saved ${p} (node_id=${node.node_id})\n\n`);
209
+ // Dependency check + optional auto-install (#346 parity with Python)
210
+ process.stdout.write(`Checking dependencies …\n`);
211
+ const issues = await checkDependencies(backend);
212
+ printDepStatus(issues);
213
+ const missingCount = issues.filter((i) => i.severity === "missing" && i.installable).length;
214
+ if (missingCount > 0) {
215
+ const yn = (await ask(rl, `\nInstall ${missingCount} missing optional package(s)? [Y/n]`, "y")).toLowerCase();
216
+ if (yn === "" || yn === "y" || yn === "yes") {
217
+ installMissing(issues);
218
+ }
219
+ else {
220
+ process.stdout.write(` ! skipping — install later with: npm install <pkg>\n`);
221
+ }
222
+ }
223
+ process.stdout.write(`\nDocumentation:\n`);
224
+ process.stdout.write(` Docs: https://iicp.network/docs/sdk-quickstart-docker\n`);
225
+ process.stdout.write(` Reference: iicp-node --help\n`);
226
+ process.stdout.write(` Spec: https://iicp.network/spec\n`);
227
+ process.stdout.write(`\nRun: iicp-node serve --node ${name}\n`);
228
+ return 0;
229
+ }
230
+ finally {
231
+ rl.close();
232
+ }
233
+ }
234
+ function runList() {
235
+ const nodes = (0, identity_js_1.listNodes)();
236
+ if (nodes.length === 0) {
237
+ process.stdout.write(`No saved node configs. Run \`iicp-node init\` first.\n`);
238
+ return 0;
239
+ }
240
+ process.stdout.write(`Saved nodes (${(0, identity_js_1.configDir)()}/nodes):\n`);
241
+ for (const n of nodes) {
242
+ process.stdout.write(` - ${n.name.padEnd(20)} ${n.model.padEnd(24)} ${n.public_endpoint || "(dev)"}\n`);
243
+ }
244
+ return 0;
245
+ }
246
+ // ── serve ───────────────────────────────────────────────────────────────────
247
+ function applySavedNode(opts, saved) {
248
+ return {
249
+ ...opts,
250
+ backendUrl: opts.backendUrl || saved.backend_url,
251
+ model: opts.model || saved.model,
252
+ publicEndpoint: opts.publicEndpoint || saved.public_endpoint,
253
+ directoryUrl: opts.directoryUrl || saved.directory_url,
254
+ region: opts.region || saved.region,
255
+ intent: opts.intent || saved.intent,
256
+ nodeId: opts.nodeId || saved.node_id,
257
+ maxConcurrent: opts.maxConcurrent === 4 ? saved.max_concurrent : opts.maxConcurrent,
258
+ port: opts.port === 8020 ? saved.port : opts.port,
259
+ host: opts.host === "0.0.0.0" ? saved.host : opts.host,
260
+ autoDetectNat: opts.autoDetectNat || saved.auto_detect_nat,
261
+ externalIpProbeUrl: opts.externalIpProbeUrl || saved.external_ip_probe_url,
262
+ };
50
263
  }
51
264
  async function runServe(opts) {
265
+ // CIP toggle via env var — keeps the SDK opt-out by default (safe) but
266
+ // lets operators advertise as a CIP worker by exporting one env var.
267
+ if (envBool("IICP_CIP_ALLOW_WORKER")) {
268
+ (0, cip_policy_js_1.configureCipPolicy)({
269
+ enabled: true,
270
+ allowWorker: true,
271
+ allowCoordinator: true,
272
+ });
273
+ }
274
+ if (opts.node) {
275
+ const saved = (0, identity_js_1.loadNode)(opts.node);
276
+ if (!saved) {
277
+ process.stderr.write(`ERROR: no saved config at ~/.iicp/nodes/${opts.node}.json. Run \`iicp-node init\` first.\n`);
278
+ return 2;
279
+ }
280
+ opts = applySavedNode(opts, saved);
281
+ }
52
282
  if (!opts.backendUrl || !opts.model) {
53
- process.stderr.write("ERROR: --backend-url and --model are required (or IICP_BACKEND_URL / IICP_BACKEND_MODEL).\n");
283
+ process.stderr.write("ERROR: --backend-url and --model are required (or IICP_BACKEND_URL / IICP_BACKEND_MODEL, or --node NAME).\n");
54
284
  return 2;
55
285
  }
56
286
  const nodeId = opts.nodeId ||
57
287
  `sdk-${opts.model.replace(/:/g, "-")}-${(0, node_crypto_1.randomBytes)(4).toString("hex")}`;
58
- const publicEndpoint = opts.publicEndpoint || `http://localhost:${opts.port}`;
288
+ let publicEndpoint = opts.publicEndpoint || `http://localhost:${opts.port}`;
289
+ // ADR-043 §5 / #343 — Tier-0 IPv6 pinhole attempt. Runs unconditionally
290
+ // when the operator's public_endpoint is bracketed-IPv6, even without
291
+ // --auto-detect-nat. Mirrors Python's cli.py path: try AddPinhole on
292
+ // each local GUA (ranked: current-temp → secured → deprecated), rewrite
293
+ // the endpoint URL if a different GUA was the one the router accepted.
294
+ let tier0Pinhole = null;
295
+ if (!opts.autoDetectNat && publicEndpoint.includes("[")) {
296
+ try {
297
+ const { tryOpenV6PinholeForEndpoint } = await import("./nat_detection.js");
298
+ const r = await tryOpenV6PinholeForEndpoint(publicEndpoint, opts.port);
299
+ for (const line of r.detectionLog) {
300
+ // eslint-disable-next-line no-console
301
+ console.log(`[iicp-node] v6: ${line}`);
302
+ }
303
+ if (r.rewrittenEndpoint) {
304
+ publicEndpoint = r.rewrittenEndpoint;
305
+ }
306
+ tier0Pinhole = r;
307
+ }
308
+ catch (exc) {
309
+ const msg = exc instanceof Error ? exc.message : String(exc);
310
+ // eslint-disable-next-line no-console
311
+ console.warn(`[iicp-node] v6 pinhole attempt failed: ${msg}`);
312
+ }
313
+ }
59
314
  const node = new node_js_1.IicpNode({
60
315
  nodeId,
61
316
  endpoint: publicEndpoint,
@@ -65,6 +320,41 @@ async function runServe(opts) {
65
320
  directoryUrl: opts.directoryUrl,
66
321
  maxConcurrent: opts.maxConcurrent,
67
322
  });
323
+ // Surface tier-0 declaration to the directory so it doesn't run dial-back.
324
+ if (tier0Pinhole && !opts.autoDetectNat) {
325
+ node.applyNatProfile({
326
+ tier: 0,
327
+ transportMethod: "direct",
328
+ publicEndpoint,
329
+ detectionLog: tier0Pinhole.detectionLog,
330
+ isReachable: () => true,
331
+ ipv6: {
332
+ pinholeActive: tier0Pinhole.pinholeActive,
333
+ pinholeUniqueId: tier0Pinhole.pinholeUniqueId,
334
+ },
335
+ });
336
+ }
337
+ // ADR-041 / #343 — optional NAT auto-detection prior to register
338
+ if (opts.autoDetectNat) {
339
+ try {
340
+ const { detectNat } = await import("./nat_detection.js");
341
+ const profile = await detectNat({
342
+ bindHost: opts.host,
343
+ bindPort: opts.port,
344
+ operatorPublicEndpoint: opts.publicEndpoint || undefined,
345
+ externalIpProbeUrl: opts.externalIpProbeUrl || undefined,
346
+ });
347
+ node.applyNatProfile(profile);
348
+ // eslint-disable-next-line no-console
349
+ console.log(`[iicp-node] NAT auto-detect: tier=${profile.tier} method=${profile.transportMethod} ` +
350
+ `public=${profile.publicEndpoint ?? "<none>"} ipv6_pinhole=${profile.ipv6?.pinholeActive ?? false}`);
351
+ }
352
+ catch (exc) {
353
+ const msg = exc instanceof Error ? exc.message : String(exc);
354
+ // eslint-disable-next-line no-console
355
+ console.warn(`[iicp-node] NAT auto-detect failed: ${msg} — continuing with configured endpoint`);
356
+ }
357
+ }
68
358
  const handler = (0, openai_compat_js_1.openaiCompatHandler)({
69
359
  baseUrl: opts.backendUrl,
70
360
  model: opts.model,
@@ -89,15 +379,33 @@ async function runServe(opts) {
89
379
  // SIGINT/SIGTERM to terminate.
90
380
  const stop = node.serve(handler, { host: opts.host, port: opts.port, nodeToken: token });
91
381
  await new Promise((resolve) => {
92
- const shutdown = (sig) => {
382
+ const shutdown = async (sig) => {
93
383
  // eslint-disable-next-line no-console
94
384
  console.log(`[iicp-node] ${sig} received — shutting down`);
385
+ try {
386
+ await node.revokePinhole();
387
+ }
388
+ catch (exc) {
389
+ // eslint-disable-next-line no-console
390
+ console.warn(`[iicp-node] pinhole revoke failed: ${exc instanceof Error ? exc.message : exc}`);
391
+ }
392
+ try {
393
+ if (token) {
394
+ await node.deregister(token);
395
+ }
396
+ }
397
+ catch (exc) {
398
+ // eslint-disable-next-line no-console
399
+ console.warn(`[iicp-node] deregister failed: ${exc instanceof Error ? exc.message : exc}`);
400
+ }
95
401
  stop();
96
402
  resolve();
97
403
  };
98
- process.once("SIGINT", () => shutdown("SIGINT"));
99
- process.once("SIGTERM", () => shutdown("SIGTERM"));
404
+ process.once("SIGINT", () => void shutdown("SIGINT"));
405
+ process.once("SIGTERM", () => void shutdown("SIGTERM"));
100
406
  });
407
+ // generate unused nodeId silently to keep the helper imported in --help-only paths
408
+ void node_crypto_1.randomUUID;
101
409
  return 0;
102
410
  }
103
411
  async function main(argv = process.argv.slice(2)) {
@@ -105,14 +413,20 @@ async function main(argv = process.argv.slice(2)) {
105
413
  printHelp();
106
414
  return argv.length === 0 ? 2 : 0;
107
415
  }
108
- if (argv[0] !== "serve") {
109
- process.stderr.write(`unknown command: ${argv[0]}\n`);
416
+ const cmd = argv[0];
417
+ if (cmd === "init")
418
+ return runInit();
419
+ if (cmd === "list")
420
+ return runList();
421
+ if (cmd !== "serve") {
422
+ process.stderr.write(`unknown command: ${cmd}\n`);
110
423
  printHelp();
111
424
  return 2;
112
425
  }
113
426
  const { values } = (0, node_util_1.parseArgs)({
114
427
  args: argv.slice(1),
115
428
  options: {
429
+ node: { type: "string" },
116
430
  "backend-url": { type: "string" },
117
431
  model: { type: "string" },
118
432
  "public-endpoint": { type: "string" },
@@ -124,6 +438,8 @@ async function main(argv = process.argv.slice(2)) {
124
438
  port: { type: "string" },
125
439
  host: { type: "string" },
126
440
  "skip-registration": { type: "boolean" },
441
+ "auto-detect-nat": { type: "boolean" },
442
+ "external-ip-probe-url": { type: "string" },
127
443
  help: { type: "boolean", short: "h" },
128
444
  },
129
445
  allowPositionals: false,
@@ -133,6 +449,7 @@ async function main(argv = process.argv.slice(2)) {
133
449
  return 0;
134
450
  }
135
451
  const opts = {
452
+ node: values.node ?? envOr("IICP_NODE_NAME") ?? "",
136
453
  backendUrl: values["backend-url"] ?? envOr("IICP_BACKEND_URL") ?? "",
137
454
  model: values.model ?? envOr("IICP_BACKEND_MODEL") ?? "",
138
455
  publicEndpoint: values["public-endpoint"] ?? envOr("IICP_PUBLIC_ENDPOINT") ?? "",
@@ -148,8 +465,9 @@ async function main(argv = process.argv.slice(2)) {
148
465
  ? parseInt(values.port, 10)
149
466
  : envInt("IICP_PORT", 8020),
150
467
  host: values.host ?? envOr("IICP_HOST", "0.0.0.0"),
151
- skipRegistration: Boolean(values["skip-registration"]) ||
152
- (envOr("IICP_SKIP_REGISTRATION", "false") ?? "").toLowerCase() === "true",
468
+ skipRegistration: Boolean(values["skip-registration"]) || envBool("IICP_SKIP_REGISTRATION"),
469
+ autoDetectNat: Boolean(values["auto-detect-nat"]) || envBool("IICP_AUTO_DETECT_NAT"),
470
+ externalIpProbeUrl: values["external-ip-probe-url"] ?? envOr("IICP_EXTERNAL_IP_PROBE_URL") ?? "",
153
471
  };
154
472
  return runServe(opts);
155
473
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AA8HA,oBAyDC;AAtLD,sCAAsC;AACtC;;;;;;;;;;;;GAYG;AACH,yCAAsC;AACtC,6CAA0C;AAC1C,uCAAqC;AACrC,kEAAkE;AAgBlE,SAAS,KAAK,CAAC,IAAY,EAAE,QAAiB;IAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,IAAI,QAAQ,CAAC;AACvB,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB;IAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC;QACpC,sEAAsE;QACtE,2BAA2B;QAC3B,qFAAqF;QACrF,qFAAqF;QACrF,aAAa;QACb,4FAA4F;QAC5F,qFAAqF;QACrF,gEAAgE;QAChE,iFAAiF;QACjF,+DAA+D;QAC/D,uEAAuE;QACvE,wDAAwD;QACxD,2DAA2D;QAC3D,+EAA+E,CAClF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAe;IACrC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6FAA6F,CAC9F,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GACV,IAAI,CAAC,MAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IAE9E,MAAM,IAAI,GAAG,IAAI,kBAAQ,CAAC;QACxB,MAAM;QACN,QAAQ,EAAE,cAAc;QACxB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAA,sCAAmB,EAAC;QAClC,OAAO,EAAE,IAAI,CAAC,UAAU;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IAEH,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,oCAAoC,GAAG,iCAAiC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,OAAO,CAAC,GAAG,CACT,uBAAuB,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK;QAClE,WAAW,IAAI,CAAC,UAAU,WAAW,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,aAAa,GAAG,CAC3F,CAAC;IACF,6EAA6E;IAC7E,+BAA+B;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;YAC/B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,SAAS,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtD,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC;QAC3B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnB,OAAO,EAAE;YACP,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACrC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACnC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACpC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACxC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SACtC;QACD,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,IAAI,GAAc;QACtB,UAAU,EAAG,MAAM,CAAC,aAAa,CAAwB,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE;QAC5F,KAAK,EAAG,MAAM,CAAC,KAA4B,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAChF,cAAc,EACX,MAAM,CAAC,iBAAiB,CAAwB,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE;QAC1F,YAAY,EACT,MAAM,CAAC,eAAe,CAAwB;YAC/C,KAAK,CAAC,oBAAoB,EAAE,0BAA0B,CAAE;QAC1D,MAAM,EAAG,MAAM,CAAC,MAA6B,IAAI,KAAK,CAAC,aAAa,EAAE,YAAY,CAAE;QACpF,MAAM,EAAG,MAAM,CAAC,MAA6B,IAAI,KAAK,CAAC,aAAa,EAAE,6BAA6B,CAAE;QACrG,aAAa,EACX,MAAM,CAAC,gBAAgB,CAAC,KAAK,SAAS;YACpC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAW,EAAE,EAAE,CAAC;YAClD,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;QACtC,MAAM,EAAG,MAAM,CAAC,SAAS,CAAwB,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;QAChF,IAAI,EACF,MAAM,CAAC,IAAI,KAAK,SAAS;YACvB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAc,EAAE,EAAE,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/B,IAAI,EAAG,MAAM,CAAC,IAA2B,IAAI,KAAK,CAAC,WAAW,EAAE,SAAS,CAAE;QAC3E,gBAAgB,EACd,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACpC,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;KAC5E,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,2DAA2D;AAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE;SACH,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export declare function configDir(): string;
2
+ export interface OperatorIdentity {
3
+ operator_id: string;
4
+ created_at: string;
5
+ display_name: string;
6
+ contact: string;
7
+ }
8
+ export declare function generateOperator(opts?: {
9
+ display_name?: string;
10
+ contact?: string;
11
+ }): OperatorIdentity;
12
+ export declare function operatorPath(): string;
13
+ export declare function loadOperator(): OperatorIdentity | null;
14
+ export declare function saveOperator(op: OperatorIdentity): string;
15
+ export interface NodeIdentity {
16
+ node_id: string;
17
+ operator_id: string;
18
+ name: string;
19
+ backend_url: string;
20
+ model: string;
21
+ intent: string;
22
+ region: string;
23
+ directory_url: string;
24
+ max_concurrent: number;
25
+ port: number;
26
+ host: string;
27
+ public_endpoint: string;
28
+ auto_detect_nat: boolean;
29
+ external_ip_probe_url: string;
30
+ created_at: string;
31
+ }
32
+ export declare function generateNode(opts: {
33
+ operator_id: string;
34
+ name: string;
35
+ backend_url: string;
36
+ model: string;
37
+ intent?: string;
38
+ region?: string;
39
+ directory_url?: string;
40
+ max_concurrent?: number;
41
+ port?: number;
42
+ host?: string;
43
+ public_endpoint?: string;
44
+ auto_detect_nat?: boolean;
45
+ external_ip_probe_url?: string;
46
+ }): NodeIdentity;
47
+ export declare function nodePath(name: string): string;
48
+ export declare function loadNode(name: string): NodeIdentity | null;
49
+ export declare function saveNode(node: NodeIdentity): string;
50
+ export declare function listNodes(): NodeIdentity[];
51
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAgCA,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,gBAAgB,CAOzG;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY,IAAI,gBAAgB,GAAG,IAAI,CAUtD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAKzD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,GAAG,YAAY,CAkBf;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAI1D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAKnD;AAED,wBAAgB,SAAS,IAAI,YAAY,EAAE,CAa1C"}