@iicp/client 0.7.36 → 0.7.38
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/README.md +24 -0
- package/dist/backends/base.d.ts +8 -0
- package/dist/backends/base.d.ts.map +1 -1
- package/dist/backends/base.js +144 -2
- package/dist/backends/base.js.map +1 -1
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +518 -2
- package/dist/cli.js.map +1 -1
- package/dist/delegation.d.ts +13 -0
- package/dist/delegation.d.ts.map +1 -1
- package/dist/delegation.js +19 -0
- package/dist/delegation.js.map +1 -1
- package/dist/identity.d.ts +34 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +79 -2
- package/dist/identity.js.map +1 -1
- package/dist/iicp_tcp.d.ts +8 -0
- package/dist/iicp_tcp.d.ts.map +1 -1
- package/dist/iicp_tcp.js +9 -0
- package/dist/iicp_tcp.js.map +1 -1
- package/dist/nat_detection.d.ts.map +1 -1
- package/dist/nat_detection.js +24 -0
- package/dist/nat_detection.js.map +1 -1
- package/dist/node.d.ts +14 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +0 -0
- package/dist/node.js.map +1 -1
- package/dist/operator_crypto.d.ts +32 -0
- package/dist/operator_crypto.d.ts.map +1 -0
- package/dist/operator_crypto.js +78 -0
- package/dist/operator_crypto.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -308,6 +308,30 @@ IICP_RELAY_WORKER_ENDPOINT=host:9485 # specific relay instead of auto-elect
|
|
|
308
308
|
|
|
309
309
|
---
|
|
310
310
|
|
|
311
|
+
## Operator identity
|
|
312
|
+
|
|
313
|
+
Your **operator identity** is an ed25519 keypair — its public key *is* your `operator_id` (the
|
|
314
|
+
directory stores it as `operator_pubkey`). One identity spans every node you run: it binds them to
|
|
315
|
+
you (nodes show **`Operated by <your name>` ✓**), earns a
|
|
316
|
+
[founder ordinal](https://iicp.network/founders), and rolls each node's credits into one operator
|
|
317
|
+
wallet. Your `display_name` is the public, mutable handle; your contact stays local.
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
iicp-node init # create your key-backed identity (~/.iicp/operator.json)
|
|
321
|
+
iicp-node serve --node mynode # signs an operator→node delegation; binds the node to you
|
|
322
|
+
iicp-node operator rename "NewName" # change your public display_name (signed)
|
|
323
|
+
iicp-node operator encrypt # password-encrypt the secret at rest ($IICP_OPERATOR_PASSPHRASE)
|
|
324
|
+
iicp-node operator decrypt # remove at-rest encryption
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**The key is the identity** — whoever holds `~/.iicp/operator.json` controls it (its nodes, ordinal,
|
|
328
|
+
and wallet); there is no central recovery. Back it up (encrypted), never commit or share it; lose it
|
|
329
|
+
and the identity, with its founder ordinal, is gone.
|
|
330
|
+
|
|
331
|
+
Full guide: **[iicp.network/docs/operator-identity](https://iicp.network/docs/operator-identity)**
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
311
335
|
## SDK conformance
|
|
312
336
|
|
|
313
337
|
| Rule | Description | Status |
|
package/dist/backends/base.d.ts
CHANGED
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
* Port of iicp-adapter backends/{base,vllm,llamacpp,openai_compat} into the SDK's
|
|
10
10
|
* handler-factory style (tracker iicp.network#340; parity Block B).
|
|
11
11
|
*/
|
|
12
|
+
/** #414 — speech-to-text. Multipart file upload (distinct path below), not JSON. */
|
|
13
|
+
export declare const AUDIO_TRANSCRIBE_INTENT = "urn:iicp:intent:audio:transcribe:v1";
|
|
14
|
+
/** #414 — text-to-speech. JSON request but a *binary* audio response (distinct path). */
|
|
15
|
+
export declare const AUDIO_SPEECH_INTENT = "urn:iicp:intent:audio:speech:v1";
|
|
16
|
+
/** #414 — content moderation. Plain JSON in/out (shared path), but model-OPTIONAL. */
|
|
17
|
+
export declare const SAFETY_MODERATE_INTENT = "urn:iicp:intent:safety:moderate:v1";
|
|
18
|
+
/** Intents whose request body does NOT require a model (the backend supplies it). */
|
|
19
|
+
export declare const MODEL_OPTIONAL_INTENTS: Set<string>;
|
|
12
20
|
export declare const INTENT_TO_PATH: Record<string, string>;
|
|
13
21
|
export interface BackendOptions {
|
|
14
22
|
/** Provider HTTP root (no trailing slash needed). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/backends/base.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/backends/base.ts"],"names":[],"mappings":"AACA;;;;;;;;;;GAUG;AAEH,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,wCAAwC,CAAC;AAC7E,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,oCAAoC,CAAC;AACrE,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,aAA4C,CAAC;AAEhF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,cAAc,CAyMhB"}
|
package/dist/backends/base.js
CHANGED
|
@@ -12,12 +12,23 @@
|
|
|
12
12
|
* handler-factory style (tracker iicp.network#340; parity Block B).
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.INTENT_TO_PATH = void 0;
|
|
15
|
+
exports.INTENT_TO_PATH = exports.MODEL_OPTIONAL_INTENTS = exports.SAFETY_MODERATE_INTENT = exports.AUDIO_SPEECH_INTENT = exports.AUDIO_TRANSCRIBE_INTENT = void 0;
|
|
16
16
|
exports.buildOpenAiDialectHandler = buildOpenAiDialectHandler;
|
|
17
|
+
/** #414 — speech-to-text. Multipart file upload (distinct path below), not JSON. */
|
|
18
|
+
exports.AUDIO_TRANSCRIBE_INTENT = "urn:iicp:intent:audio:transcribe:v1";
|
|
19
|
+
/** #414 — text-to-speech. JSON request but a *binary* audio response (distinct path). */
|
|
20
|
+
exports.AUDIO_SPEECH_INTENT = "urn:iicp:intent:audio:speech:v1";
|
|
21
|
+
/** #414 — content moderation. Plain JSON in/out (shared path), but model-OPTIONAL. */
|
|
22
|
+
exports.SAFETY_MODERATE_INTENT = "urn:iicp:intent:safety:moderate:v1";
|
|
23
|
+
/** Intents whose request body does NOT require a model (the backend supplies it). */
|
|
24
|
+
exports.MODEL_OPTIONAL_INTENTS = new Set([exports.SAFETY_MODERATE_INTENT]);
|
|
17
25
|
exports.INTENT_TO_PATH = {
|
|
18
26
|
"urn:iicp:intent:llm:chat:v1": "/chat/completions",
|
|
19
27
|
"urn:iicp:intent:llm:completion:v1": "/completions",
|
|
20
28
|
"urn:iicp:intent:llm:embedding:v1": "/embeddings",
|
|
29
|
+
[exports.AUDIO_TRANSCRIBE_INTENT]: "/audio/transcriptions",
|
|
30
|
+
[exports.AUDIO_SPEECH_INTENT]: "/audio/speech",
|
|
31
|
+
[exports.SAFETY_MODERATE_INTENT]: "/moderations",
|
|
21
32
|
};
|
|
22
33
|
/**
|
|
23
34
|
* Build a TaskHandler that proxies CALLs to an OpenAI-dialect server. `engine` is the
|
|
@@ -43,10 +54,141 @@ function buildOpenAiDialectHandler(engine, baseUrlRaw, model, apiKey, timeoutMs)
|
|
|
43
54
|
error_message: `${engine}: unsupported intent ${JSON.stringify(intent)}; supported: ${JSON.stringify(Object.keys(exports.INTENT_TO_PATH).sort())}`,
|
|
44
55
|
};
|
|
45
56
|
}
|
|
57
|
+
// #414 — audio:transcribe is a multipart file upload (OpenAI
|
|
58
|
+
// /v1/audio/transcriptions). Audio rides as base64 in payload.audio; model is
|
|
59
|
+
// OPTIONAL (whisper.cpp ignores it, vLLM/OpenAI use it). Native FormData/Blob —
|
|
60
|
+
// no new dependency.
|
|
61
|
+
if (intent === exports.AUDIO_TRANSCRIBE_INTENT) {
|
|
62
|
+
const p = payload ?? {};
|
|
63
|
+
const audioB64 = (p.audio ?? p.audio_b64);
|
|
64
|
+
if (typeof audioB64 !== "string" || !audioB64) {
|
|
65
|
+
return {
|
|
66
|
+
error_code: 400,
|
|
67
|
+
error_message: `${engine}: audio:transcribe requires payload.audio (base64-encoded audio bytes)`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const cleaned = audioB64.trim();
|
|
71
|
+
if (!/^[A-Za-z0-9+/]+={0,2}$/.test(cleaned) || cleaned.length % 4 !== 0) {
|
|
72
|
+
return { error_code: 400, error_message: `${engine}: payload.audio is not valid base64` };
|
|
73
|
+
}
|
|
74
|
+
const audioBytes = Buffer.from(cleaned, "base64");
|
|
75
|
+
const filename = typeof p.filename === "string" ? p.filename : "audio.wav";
|
|
76
|
+
const form = new FormData();
|
|
77
|
+
form.append("file", new Blob([audioBytes]), filename);
|
|
78
|
+
const reqModel = (typeof p.model === "string" ? p.model : undefined) ?? model;
|
|
79
|
+
if (reqModel)
|
|
80
|
+
form.append("model", reqModel);
|
|
81
|
+
let haveRf = false;
|
|
82
|
+
for (const k of ["language", "response_format", "prompt", "temperature"]) {
|
|
83
|
+
if (p[k] !== undefined && p[k] !== null) {
|
|
84
|
+
if (k === "response_format")
|
|
85
|
+
haveRf = true;
|
|
86
|
+
form.append(k, String(p[k]));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!haveRf)
|
|
90
|
+
form.append("response_format", "json");
|
|
91
|
+
const mpHeaders = {};
|
|
92
|
+
if (apiKey)
|
|
93
|
+
mpHeaders["Authorization"] = `Bearer ${apiKey}`;
|
|
94
|
+
const ctrlA = new AbortController();
|
|
95
|
+
const tA = setTimeout(() => ctrlA.abort(), timeoutMs);
|
|
96
|
+
let respA;
|
|
97
|
+
try {
|
|
98
|
+
respA = await fetch(`${baseUrl}${path}`, {
|
|
99
|
+
method: "POST",
|
|
100
|
+
headers: mpHeaders,
|
|
101
|
+
body: form,
|
|
102
|
+
signal: ctrlA.signal,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (exc) {
|
|
106
|
+
clearTimeout(tA);
|
|
107
|
+
const msg = exc instanceof Error ? exc.message : String(exc);
|
|
108
|
+
if (ctrlA.signal.aborted)
|
|
109
|
+
return { error_code: 408, error_message: `${engine}: backend timed out` };
|
|
110
|
+
return { error_code: 502, error_message: `${engine}: HTTP transport error: ${msg}` };
|
|
111
|
+
}
|
|
112
|
+
clearTimeout(tA);
|
|
113
|
+
if (!respA.ok) {
|
|
114
|
+
const text = await respA.text().catch(() => "");
|
|
115
|
+
return {
|
|
116
|
+
error_code: respA.status,
|
|
117
|
+
error_message: `${engine}: upstream ${respA.status}: ${text.slice(0, 512)}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const text = await respA.text();
|
|
121
|
+
try {
|
|
122
|
+
return { result: JSON.parse(text) };
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return { result: { text } }; // response_format=text → plain body
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// #414 — audio:speech (TTS): JSON request, but the response is BINARY audio. We
|
|
129
|
+
// base64-encode the bytes into result.audio so it rides the JSON task pipe.
|
|
130
|
+
if (intent === exports.AUDIO_SPEECH_INTENT) {
|
|
131
|
+
const p = payload ?? {};
|
|
132
|
+
const text = p.input;
|
|
133
|
+
if (typeof text !== "string" || !text) {
|
|
134
|
+
return {
|
|
135
|
+
error_code: 400,
|
|
136
|
+
error_message: `${engine}: audio:speech requires payload.input (text to synthesize)`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const speechBody = { input: text };
|
|
140
|
+
const reqModel = (typeof p.model === "string" ? p.model : undefined) ?? model;
|
|
141
|
+
if (reqModel)
|
|
142
|
+
speechBody.model = reqModel;
|
|
143
|
+
for (const k of ["voice", "response_format", "speed"]) {
|
|
144
|
+
if (p[k] !== undefined && p[k] !== null)
|
|
145
|
+
speechBody[k] = p[k];
|
|
146
|
+
}
|
|
147
|
+
if (speechBody.voice === undefined)
|
|
148
|
+
speechBody.voice = "alloy";
|
|
149
|
+
const headersS = { "Content-Type": "application/json" };
|
|
150
|
+
if (apiKey)
|
|
151
|
+
headersS["Authorization"] = `Bearer ${apiKey}`;
|
|
152
|
+
const ctrlS = new AbortController();
|
|
153
|
+
const tS = setTimeout(() => ctrlS.abort(), timeoutMs);
|
|
154
|
+
let respS;
|
|
155
|
+
try {
|
|
156
|
+
respS = await fetch(`${baseUrl}${path}`, {
|
|
157
|
+
method: "POST",
|
|
158
|
+
headers: headersS,
|
|
159
|
+
body: JSON.stringify(speechBody),
|
|
160
|
+
signal: ctrlS.signal,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (exc) {
|
|
164
|
+
clearTimeout(tS);
|
|
165
|
+
const msg = exc instanceof Error ? exc.message : String(exc);
|
|
166
|
+
if (ctrlS.signal.aborted)
|
|
167
|
+
return { error_code: 408, error_message: `${engine}: backend timed out` };
|
|
168
|
+
return { error_code: 502, error_message: `${engine}: HTTP transport error: ${msg}` };
|
|
169
|
+
}
|
|
170
|
+
clearTimeout(tS);
|
|
171
|
+
if (!respS.ok) {
|
|
172
|
+
const errText = await respS.text().catch(() => "");
|
|
173
|
+
return {
|
|
174
|
+
error_code: respS.status,
|
|
175
|
+
error_message: `${engine}: upstream ${respS.status}: ${errText.slice(0, 512)}`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const contentType = respS.headers.get("content-type") ?? "audio/mpeg";
|
|
179
|
+
const buf = Buffer.from(await respS.arrayBuffer());
|
|
180
|
+
return {
|
|
181
|
+
result: {
|
|
182
|
+
audio: buf.toString("base64"),
|
|
183
|
+
content_type: contentType,
|
|
184
|
+
format: speechBody.response_format ?? contentType.split("/").pop(),
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
46
188
|
const body = { ...(payload ?? {}) };
|
|
47
189
|
if (body.model === undefined && model !== undefined)
|
|
48
190
|
body.model = model;
|
|
49
|
-
if (!body.model) {
|
|
191
|
+
if (!body.model && !exports.MODEL_OPTIONAL_INTENTS.has(intent)) {
|
|
50
192
|
return {
|
|
51
193
|
error_code: 400,
|
|
52
194
|
error_message: `${engine}: no model — either pass \`model\` to the backend factory ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/backends/base.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/backends/base.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -23,5 +23,16 @@ export interface ServeOpts {
|
|
|
23
23
|
logDir?: string;
|
|
24
24
|
}
|
|
25
25
|
export declare function applySavedNode(opts: ServeOpts, saved: NodeIdentity): ServeOpts;
|
|
26
|
+
/**
|
|
27
|
+
* #456 --verify: cryptographically confirm this node's CREDIT_AWARD income against the
|
|
28
|
+
* directory's signed event log (defends against a lying directory). Resolves the directory's
|
|
29
|
+
* Ed25519 key from /.well-known/did.json and re-derives + verifies each award signature.
|
|
30
|
+
* Free-tier CREDIT_ALLOCATION is unsigned by design, so it is not counted here (no cry-wolf).
|
|
31
|
+
*/
|
|
32
|
+
export declare function verifyCreditAwards(directoryUrl: string, nodeId: string): Promise<{
|
|
33
|
+
sum: number;
|
|
34
|
+
verified: number;
|
|
35
|
+
failed: number;
|
|
36
|
+
}>;
|
|
26
37
|
export declare function main(argv?: string[]): Promise<number>;
|
|
27
38
|
//# sourceMappingURL=cli.d.ts.map
|
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":";AAuCA,OAAO,EAcL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,qGAAqG;IACrG,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsXD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,SAAS,CAqB9E;AA6lBD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+D5D;AA6RD,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgGlF"}
|