@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 +1 -1
- package/dist/cli.js +342 -24
- package/dist/cli.js.map +1 -1
- package/dist/identity.d.ts +51 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +136 -0
- package/dist/identity.js.map +1 -0
- package/dist/nat_detection.d.ts +59 -1
- package/dist/nat_detection.d.ts.map +1 -1
- package/dist/nat_detection.js +565 -35
- package/dist/nat_detection.js.map +1 -1
- package/dist/node.d.ts +16 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +42 -1
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
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
|
|
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
|
-
`
|
|
38
|
-
` --backend-url URL
|
|
39
|
-
` --model NAME
|
|
40
|
-
`
|
|
41
|
-
`
|
|
42
|
-
` --
|
|
43
|
-
` --
|
|
44
|
-
` --
|
|
45
|
-
` --
|
|
46
|
-
` --
|
|
47
|
-
` --
|
|
48
|
-
` --
|
|
49
|
-
` --
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
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"}
|