@mcsherrylabs/evolver-mcp 0.13.0 → 0.14.0
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/application-signer.d.ts +1 -1
- package/dist/application-signer.d.ts.map +1 -1
- package/dist/attachments.d.ts +1 -1
- package/dist/attachments.d.ts.map +1 -1
- package/dist/attachments.js +2 -2
- package/dist/attachments.js.map +1 -1
- package/dist/content-file-tools.js +1 -1
- package/dist/content-file-tools.js.map +1 -1
- package/dist/content-files.d.ts +1 -1
- package/dist/content-files.d.ts.map +1 -1
- package/dist/content-files.js +1 -1
- package/dist/content-files.js.map +1 -1
- package/dist/content-ranges.d.ts +1 -1
- package/dist/content-ranges.d.ts.map +1 -1
- package/dist/group-crypto-tools.js +1 -1
- package/dist/group-crypto-tools.js.map +1 -1
- package/dist/group-crypto.d.ts +2 -2
- package/dist/group-crypto.d.ts.map +1 -1
- package/dist/group-crypto.js +1 -1
- package/dist/group-crypto.js.map +1 -1
- package/dist/inbox.d.ts +1 -1
- package/dist/inbox.d.ts.map +1 -1
- package/dist/inbox.js +1 -1
- package/dist/inbox.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/login.d.ts +1 -1
- package/dist/login.d.ts.map +1 -1
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.d.ts.map +1 -1
- package/dist/p2p.d.ts +1 -1
- package/dist/p2p.d.ts.map +1 -1
- package/dist/p2p.js +1 -1
- package/dist/p2p.js.map +1 -1
- package/dist/processor.d.ts +1 -1
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +1 -1
- package/dist/processor.js.map +1 -1
- package/dist/signed-http.d.ts +1 -1
- package/dist/signed-http.d.ts.map +1 -1
- package/dist/tools.d.ts +3 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +10 -10
- package/dist/tools.js.map +1 -1
- package/dist/transaction-interchange-tools.js +1 -1
- package/dist/transaction-interchange-tools.js.map +1 -1
- package/dist/transaction-interchange.d.ts +2 -2
- package/dist/transaction-interchange.d.ts.map +1 -1
- package/dist/transaction-interchange.js +2 -2
- package/dist/transaction-interchange.js.map +1 -1
- package/package.json +4 -16
- package/dist/amount.d.ts +0 -23
- package/dist/amount.d.ts.map +0 -1
- package/dist/amount.js +0 -53
- package/dist/amount.js.map +0 -1
- package/dist/channel.d.ts +0 -77
- package/dist/channel.d.ts.map +0 -1
- package/dist/channel.js +0 -287
- package/dist/channel.js.map +0 -1
- package/dist/claim.d.ts +0 -48
- package/dist/claim.d.ts.map +0 -1
- package/dist/claim.js +0 -81
- package/dist/claim.js.map +0 -1
- package/dist/content.d.ts +0 -94
- package/dist/content.d.ts.map +0 -1
- package/dist/content.js +0 -215
- package/dist/content.js.map +0 -1
- package/dist/group-ownership.d.ts +0 -78
- package/dist/group-ownership.d.ts.map +0 -1
- package/dist/group-ownership.js +0 -324
- package/dist/group-ownership.js.map +0 -1
- package/dist/group.d.ts +0 -60
- package/dist/group.d.ts.map +0 -1
- package/dist/group.js +0 -204
- package/dist/group.js.map +0 -1
- package/dist/identity.d.ts +0 -87
- package/dist/identity.d.ts.map +0 -1
- package/dist/identity.js +0 -236
- package/dist/identity.js.map +0 -1
- package/dist/node-transport.d.ts +0 -14
- package/dist/node-transport.d.ts.map +0 -1
- package/dist/node-transport.js +0 -54
- package/dist/node-transport.js.map +0 -1
- package/dist/read.d.ts +0 -252
- package/dist/read.d.ts.map +0 -1
- package/dist/read.js +0 -320
- package/dist/read.js.map +0 -1
- package/dist/result.d.ts +0 -110
- package/dist/result.d.ts.map +0 -1
- package/dist/result.js +0 -97
- package/dist/result.js.map +0 -1
- package/dist/signer.d.ts +0 -37
- package/dist/signer.d.ts.map +0 -1
- package/dist/signer.js +0 -76
- package/dist/signer.js.map +0 -1
- package/dist/write.d.ts +0 -214
- package/dist/write.d.ts.map +0 -1
- package/dist/write.js +0 -399
- package/dist/write.js.map +0 -1
package/dist/channel.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
// Channel-ledger signing verbs (SIGN-13..18): sign claim/unclaim/write/set-toll/set-write-policy/
|
|
2
|
-
// set-DA-policy. Each is a compose→sign→record→return-txId operation with ZERO submit, mirroring the
|
|
3
|
-
// identity verbs in `src/identity.ts` and the group verbs in `src/group.ts`, and resolving in the
|
|
4
|
-
// SAME `submitSigned`/`inspectSigned` path.
|
|
5
|
-
//
|
|
6
|
-
// A channel is any non-core ledger id outside the reserved `ce.evolver.` namespace. The caller
|
|
7
|
-
// chooses that TARGET, validated by `writableChannelId` (shared with `write.ts`) before signing.
|
|
8
|
-
// Administration uses typed SDK operation bodies on the fixed LEDGER.owners outer envelope; the
|
|
9
|
-
// validated channel stays inside the body. Only payload writes use the channel as the outer ledger.
|
|
10
|
-
// Never let this dedicated admin route bypass validation or enable arbitrary core-ledger bodies.
|
|
11
|
-
//
|
|
12
|
-
// The one new mechanism over the group/identity verbs is toll-consent: `signChannelWrite` threads
|
|
13
|
-
// `maxToll` through `composeAndSign` → `buildSignedTx`/`txIdHex`, so the signed ceiling is folded
|
|
14
|
-
// into the digest and carried on the wire (field 6). A write to a tolled channel MUST sign a
|
|
15
|
-
// `maxToll >= toll.amount` or the node refuses `toll_ceiling_too_low`.
|
|
16
|
-
//
|
|
17
|
-
// ⚠️ KEY MATERIAL NEVER REACHES A RECORD OR A REFUSAL. Records carry the channel id, write policy,
|
|
18
|
-
// toll-as-decimal-string and DA metadata only; refusals name the FIELD/PATH, never the bytes.
|
|
19
|
-
import { LEDGER, claimBody, removeOwnerBody, updateChannelDaBody, updateChannelWritePolicyBody, updateChannelTollBody, channelBody, } from "@mcsherrylabs/evolver-client";
|
|
20
|
-
import { DEFAULT_TTL_OFFSET, composeAndSign, hexToBytes, writableChannelId } from "./write.js";
|
|
21
|
-
import { parseTollAmount, formatAmount } from "./amount.js";
|
|
22
|
-
/** Read the chain tip to bound a transaction's life; an unreachable chain is `unreachable`, never a
|
|
23
|
-
* submit. */
|
|
24
|
-
async function tipOrUnreachable(deps) {
|
|
25
|
-
try {
|
|
26
|
-
return await deps.reads.currentRound();
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
return { kind: "unreachable", chain: "", cause: e instanceof Error ? e.message : String(e) };
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/** The largest body a channel write will sign, in bytes (mirrors `signOpaque`'s bound). */
|
|
33
|
-
const MAX_BODY_BYTES = 65536 - 1024;
|
|
34
|
-
/** The two write policies the wire carries. `writePolicyWire` narrows anything-but-"open" to proto
|
|
35
|
-
* zero (default `owner_or_group`), so a typo is silently widened to the default — enumerated and
|
|
36
|
-
* refused here (Pitfall 5). */
|
|
37
|
-
const WRITE_POLICIES = ["owner_or_group", "open"];
|
|
38
|
-
/** Enumerate a caller-supplied `writePolicy` against the wire's two values; refuse anything else
|
|
39
|
-
* (a typo here would silently widen to `owner_or_group`, a data-integrity risk). */
|
|
40
|
-
function policyOrRefusal(raw) {
|
|
41
|
-
const p = String(raw ?? "").trim();
|
|
42
|
-
if (WRITE_POLICIES.includes(p))
|
|
43
|
-
return p;
|
|
44
|
-
return {
|
|
45
|
-
kind: "partial",
|
|
46
|
-
what: "writePolicy",
|
|
47
|
-
cause: `"${p}" is not a write policy — it must be "owner_or_group" or "open". Anything else is ` +
|
|
48
|
-
`narrowed to the default and silently loses the intended policy, so it is refused here.`,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Claim a channel (SIGN-14): become its owner and set its terms. Signed for `deps.identity` on
|
|
53
|
-
* LEDGER.owners, targeting the caller's validated non-core/non-reserved channel. Does NOT submit.
|
|
54
|
-
*/
|
|
55
|
-
export async function signChannelClaim(deps, params) {
|
|
56
|
-
// 1. the channel — the refusal that pays for the caller-chosen-ledger exemption.
|
|
57
|
-
const channel = writableChannelId(params.channel);
|
|
58
|
-
if (typeof channel !== "string")
|
|
59
|
-
return channel;
|
|
60
|
-
// 2. an optional write policy, enumerated (Pitfall 5) BEFORE anything reaches the wire.
|
|
61
|
-
let writePolicy;
|
|
62
|
-
if (params.writePolicy !== undefined && String(params.writePolicy ?? "").trim().length > 0) {
|
|
63
|
-
const p = policyOrRefusal(params.writePolicy);
|
|
64
|
-
if (typeof p !== "string")
|
|
65
|
-
return p;
|
|
66
|
-
writePolicy = p;
|
|
67
|
-
}
|
|
68
|
-
// 3. an optional toll, refused locally when negative (a negative amount would not fail to encode —
|
|
69
|
-
// it would encode as a different positive number).
|
|
70
|
-
let tollAmount;
|
|
71
|
-
if (params.tollAmount !== undefined) {
|
|
72
|
-
const a = parseTollAmount(params.tollAmount);
|
|
73
|
-
if (!a.ok)
|
|
74
|
-
return { kind: "partial", what: "tollAmount", cause: a.error };
|
|
75
|
-
tollAmount = a.value;
|
|
76
|
-
}
|
|
77
|
-
const tip = await tipOrUnreachable(deps);
|
|
78
|
-
if (typeof tip !== "number")
|
|
79
|
-
return tip;
|
|
80
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
81
|
-
const fields = { channel };
|
|
82
|
-
if (params.groupOwner)
|
|
83
|
-
fields.groupOwner = String(params.groupOwner);
|
|
84
|
-
if (writePolicy)
|
|
85
|
-
fields.writePolicy = writePolicy;
|
|
86
|
-
if (params.daGroup)
|
|
87
|
-
fields.daGroup = String(params.daGroup);
|
|
88
|
-
if (params.daThresholdM !== undefined)
|
|
89
|
-
fields.daThresholdM = String(params.daThresholdM);
|
|
90
|
-
if (tollAmount !== undefined)
|
|
91
|
-
fields.tollAmount = formatAmount(tollAmount);
|
|
92
|
-
if (tollAmount !== 0n && params.tollRecipient)
|
|
93
|
-
fields.tollRecipient = String(params.tollRecipient);
|
|
94
|
-
return composeAndSign(deps, {
|
|
95
|
-
ledgerId: LEDGER.owners,
|
|
96
|
-
body: claimBody({
|
|
97
|
-
ledgerId: channel,
|
|
98
|
-
groupOwner: params.groupOwner ? String(params.groupOwner) : undefined,
|
|
99
|
-
daGroup: params.daGroup ? String(params.daGroup) : undefined,
|
|
100
|
-
daThresholdM: params.daThresholdM,
|
|
101
|
-
tollAmount: tollAmount === 0n ? undefined : tollAmount,
|
|
102
|
-
tollRecipient: tollAmount !== 0n && params.tollRecipient ? String(params.tollRecipient) : undefined,
|
|
103
|
-
writePolicy,
|
|
104
|
-
}),
|
|
105
|
-
ttlRound: expiresAtRound,
|
|
106
|
-
signedAtRound: tip,
|
|
107
|
-
verb: "channel_claim",
|
|
108
|
-
fields,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Write an opaque payload to a channel (SIGN-13), carrying the toll-consent `maxToll`. The caller
|
|
113
|
-
* chooses the bytes and the channel (never a core/reserved ledger — `writableChannelId` refuses those
|
|
114
|
-
* FIRST); the MCP signs the ceiling the write consents to. `maxToll` is optional: omitted it signs
|
|
115
|
-
* "consents to no toll" (0), which the node refuses with `toll_ceiling_too_low` on a tolled channel.
|
|
116
|
-
*/
|
|
117
|
-
export async function signChannelWrite(deps, params) {
|
|
118
|
-
// 1. the channel — the refusal that pays for the caller-chosen-ledger exemption.
|
|
119
|
-
const channel = writableChannelId(params.channel);
|
|
120
|
-
if (typeof channel !== "string")
|
|
121
|
-
return channel;
|
|
122
|
-
// 2. the body, hex — decoded by the ONE decoder (`hexToBytes`, imported from write.ts, never a
|
|
123
|
-
// hand-rolled second), with empty/oversized refusals before anything is signed.
|
|
124
|
-
let body;
|
|
125
|
-
try {
|
|
126
|
-
body = hexToBytes(String(params.bodyHex ?? "").trim());
|
|
127
|
-
}
|
|
128
|
-
catch (e) {
|
|
129
|
-
return { kind: "partial", what: "bodyHex", cause: e instanceof Error ? e.message : String(e) };
|
|
130
|
-
}
|
|
131
|
-
if (body.length === 0)
|
|
132
|
-
return {
|
|
133
|
-
kind: "partial",
|
|
134
|
-
what: "bodyHex",
|
|
135
|
-
cause: "no body given — a channel write carries the bytes you supply, and an empty one costs the same while conveying nothing",
|
|
136
|
-
};
|
|
137
|
-
if (body.length > MAX_BODY_BYTES)
|
|
138
|
-
return {
|
|
139
|
-
kind: "partial",
|
|
140
|
-
what: "bodyHex",
|
|
141
|
-
cause: `${body.length} bytes is over the ${MAX_BODY_BYTES}-byte limit this verb will sign`,
|
|
142
|
-
};
|
|
143
|
-
// 3. a canonical nonnegative ceiling when supplied; only omission defaults to no consent.
|
|
144
|
-
let maxToll = 0n;
|
|
145
|
-
if (params.maxToll !== undefined) {
|
|
146
|
-
const m = parseTollAmount(params.maxToll);
|
|
147
|
-
if (!m.ok)
|
|
148
|
-
return { kind: "partial", what: "maxToll", cause: m.error };
|
|
149
|
-
maxToll = m.value;
|
|
150
|
-
}
|
|
151
|
-
const tip = await tipOrUnreachable(deps);
|
|
152
|
-
if (typeof tip !== "number")
|
|
153
|
-
return tip;
|
|
154
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
155
|
-
return composeAndSign(deps, {
|
|
156
|
-
ledgerId: channel,
|
|
157
|
-
body: channelBody(body),
|
|
158
|
-
ttlRound: expiresAtRound,
|
|
159
|
-
signedAtRound: tip,
|
|
160
|
-
verb: "channel_write",
|
|
161
|
-
fields: { channel, bodyBytes: String(body.length) },
|
|
162
|
-
maxToll,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Unclaim a channel (SIGN-15): `removeOwnerBody(ledgerId)` is the unclaim — it gives up ownership.
|
|
167
|
-
* Signed on LEDGER.owners; the inner channel target is refused if core/reserved. Does NOT submit.
|
|
168
|
-
*/
|
|
169
|
-
export async function signChannelUnclaim(deps, params) {
|
|
170
|
-
const channel = writableChannelId(params.channel);
|
|
171
|
-
if (typeof channel !== "string")
|
|
172
|
-
return channel;
|
|
173
|
-
const tip = await tipOrUnreachable(deps);
|
|
174
|
-
if (typeof tip !== "number")
|
|
175
|
-
return tip;
|
|
176
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
177
|
-
return composeAndSign(deps, {
|
|
178
|
-
ledgerId: LEDGER.owners,
|
|
179
|
-
body: removeOwnerBody(channel),
|
|
180
|
-
ttlRound: expiresAtRound,
|
|
181
|
-
signedAtRound: tip,
|
|
182
|
-
verb: "channel_unclaim",
|
|
183
|
-
fields: { channel },
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Set a channel's write policy (SIGN-18): `"owner_or_group"` or `"open"`. The policy is ENUMERATED
|
|
188
|
-
* locally (Pitfall 5 — `writePolicyWire` narrows a typo to the default, silently) and refused
|
|
189
|
-
* otherwise. Does NOT submit.
|
|
190
|
-
*/
|
|
191
|
-
export async function signChannelWritePolicy(deps, params) {
|
|
192
|
-
const channel = writableChannelId(params.channel);
|
|
193
|
-
if (typeof channel !== "string")
|
|
194
|
-
return channel;
|
|
195
|
-
const writePolicy = policyOrRefusal(params.writePolicy);
|
|
196
|
-
if (typeof writePolicy !== "string")
|
|
197
|
-
return writePolicy;
|
|
198
|
-
const tip = await tipOrUnreachable(deps);
|
|
199
|
-
if (typeof tip !== "number")
|
|
200
|
-
return tip;
|
|
201
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
202
|
-
return composeAndSign(deps, {
|
|
203
|
-
ledgerId: LEDGER.owners,
|
|
204
|
-
body: updateChannelWritePolicyBody({ ledgerId: channel, writePolicy }),
|
|
205
|
-
ttlRound: expiresAtRound,
|
|
206
|
-
signedAtRound: tip,
|
|
207
|
-
verb: "channel_write_policy",
|
|
208
|
-
fields: { channel, writePolicy },
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Set a channel's toll (SIGN-17). A positive `tollAmount` sets the toll; `"0"`/omitted removes it
|
|
213
|
-
* (composes `updateChannelTollBody({ ledgerId })` with no `tollAmount`, clearing the toll). A
|
|
214
|
-
* NEGATIVE `tollAmount` is refused locally — it would encode as a different positive number, not fail.
|
|
215
|
-
* Does NOT submit.
|
|
216
|
-
*/
|
|
217
|
-
export async function signChannelToll(deps, params) {
|
|
218
|
-
const channel = writableChannelId(params.channel);
|
|
219
|
-
if (typeof channel !== "string")
|
|
220
|
-
return channel;
|
|
221
|
-
let tollAmount;
|
|
222
|
-
if (params.tollAmount !== undefined) {
|
|
223
|
-
const a = parseTollAmount(params.tollAmount);
|
|
224
|
-
if (!a.ok)
|
|
225
|
-
return { kind: "partial", what: "tollAmount", cause: a.error };
|
|
226
|
-
tollAmount = a.value;
|
|
227
|
-
}
|
|
228
|
-
const tip = await tipOrUnreachable(deps);
|
|
229
|
-
if (typeof tip !== "number")
|
|
230
|
-
return tip;
|
|
231
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
232
|
-
const fields = { channel };
|
|
233
|
-
if (tollAmount !== undefined)
|
|
234
|
-
fields.tollAmount = formatAmount(tollAmount);
|
|
235
|
-
if (tollAmount !== 0n && params.tollRecipient)
|
|
236
|
-
fields.tollRecipient = String(params.tollRecipient);
|
|
237
|
-
return composeAndSign(deps, {
|
|
238
|
-
ledgerId: LEDGER.owners,
|
|
239
|
-
body: updateChannelTollBody({
|
|
240
|
-
ledgerId: channel,
|
|
241
|
-
tollAmount: tollAmount === 0n ? undefined : tollAmount,
|
|
242
|
-
tollRecipient: tollAmount !== 0n && params.tollRecipient ? String(params.tollRecipient) : undefined,
|
|
243
|
-
}),
|
|
244
|
-
ttlRound: expiresAtRound,
|
|
245
|
-
signedAtRound: tip,
|
|
246
|
-
verb: "channel_toll",
|
|
247
|
-
fields,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Set a channel's data-availability policy (SIGN-16): the group that must hold (and attest for) its
|
|
252
|
-
* bodies, and the M-of-N threshold. The SDK THROWS when `daThresholdM` is set but `daGroup` is empty,
|
|
253
|
-
* so the encoder call is wrapped and the throw surfaced as `partial daGroup` rather than escaping.
|
|
254
|
-
* Does NOT submit.
|
|
255
|
-
*/
|
|
256
|
-
export async function signChannelDa(deps, params) {
|
|
257
|
-
const channel = writableChannelId(params.channel);
|
|
258
|
-
if (typeof channel !== "string")
|
|
259
|
-
return channel;
|
|
260
|
-
const daGroup = params.daGroup !== undefined ? String(params.daGroup ?? "").trim() : undefined;
|
|
261
|
-
const daThresholdM = params.daThresholdM;
|
|
262
|
-
let body;
|
|
263
|
-
try {
|
|
264
|
-
body = updateChannelDaBody({ ledgerId: channel, daGroup, daThresholdM });
|
|
265
|
-
}
|
|
266
|
-
catch (e) {
|
|
267
|
-
return { kind: "partial", what: "daGroup", cause: e instanceof Error ? e.message : String(e) };
|
|
268
|
-
}
|
|
269
|
-
const tip = await tipOrUnreachable(deps);
|
|
270
|
-
if (typeof tip !== "number")
|
|
271
|
-
return tip;
|
|
272
|
-
const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
|
|
273
|
-
const fields = { channel };
|
|
274
|
-
if (daGroup)
|
|
275
|
-
fields.daGroup = daGroup;
|
|
276
|
-
if (daThresholdM !== undefined)
|
|
277
|
-
fields.daThresholdM = String(daThresholdM);
|
|
278
|
-
return composeAndSign(deps, {
|
|
279
|
-
ledgerId: LEDGER.owners,
|
|
280
|
-
body,
|
|
281
|
-
ttlRound: expiresAtRound,
|
|
282
|
-
signedAtRound: tip,
|
|
283
|
-
verb: "channel_da",
|
|
284
|
-
fields,
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=channel.js.map
|
package/dist/channel.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/claim.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { ClaimResult } from "@mcsherrylabs/evolver-client";
|
|
2
|
-
import type { ToolResult } from "./result.js";
|
|
3
|
-
/** What `claimIdentity` needs from the world: exactly the SDK's claim affordance, injected so the
|
|
4
|
-
* whole flow is exercisable against a structural fake rather than a live node. */
|
|
5
|
-
export interface ClaimFn {
|
|
6
|
-
(args: {
|
|
7
|
-
nodeId: string;
|
|
8
|
-
blsPublicKey: Uint8Array;
|
|
9
|
-
blsPop: Uint8Array;
|
|
10
|
-
ed25519PublicKey: Uint8Array;
|
|
11
|
-
ed25519Pop: Uint8Array;
|
|
12
|
-
}): Promise<ClaimResult>;
|
|
13
|
-
}
|
|
14
|
-
/** What a successful claim answers. `committed` carries the block height it committed at; `exists`
|
|
15
|
-
* means the identity was already on-chain (an idempotent rerun). No key bytes, no proofs, no
|
|
16
|
-
* `txId` — the claim has nothing to submit later. */
|
|
17
|
-
export type ClaimSummary = {
|
|
18
|
-
name: string;
|
|
19
|
-
outcome: "committed";
|
|
20
|
-
blockHeight: number;
|
|
21
|
-
} | {
|
|
22
|
-
name: string;
|
|
23
|
-
outcome: "exists";
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Claim a FRESH identity via the node-sponsored faucet (SIGN-08).
|
|
27
|
-
*
|
|
28
|
-
* ⚠️ NOT A SIGNING VERB. The holder produced both proofs elsewhere; this MCP holds neither key, so
|
|
29
|
-
* it forwards the holder's proofs to the SDK and the node sponsors + pays. Nothing is recorded in
|
|
30
|
-
* the session stores, no `txId` is returned, and nothing reaches `evolver_submit`.
|
|
31
|
-
*
|
|
32
|
-
* ⚠️ THE DIGEST IS NEVER RECOMPUTED HERE. The SDK's `claimIdentityWithProofs` recomputes the claim
|
|
33
|
-
* digest locally and refuses `digest_mismatch` before the sponsored `create`, so a claim whose
|
|
34
|
-
* proofs cover the wrong bytes aborts rather than signing server-chosen bytes.
|
|
35
|
-
*
|
|
36
|
-
* An empty `blsPop`/`ed25519Pop` (hex-decodes to zero bytes) is refused BEFORE any `claim` call:
|
|
37
|
-
* the holder must prove possession, and this MCP forwards for no key it does not hold (T-03-10).
|
|
38
|
-
*/
|
|
39
|
-
export declare function claimIdentity(deps: {
|
|
40
|
-
claim: ClaimFn;
|
|
41
|
-
}, params: {
|
|
42
|
-
nodeId: string;
|
|
43
|
-
blsPublicKey: string;
|
|
44
|
-
blsPop: string;
|
|
45
|
-
ed25519PublicKey: string;
|
|
46
|
-
ed25519Pop: string;
|
|
47
|
-
}): Promise<ToolResult<ClaimSummary>>;
|
|
48
|
-
//# sourceMappingURL=claim.d.ts.map
|
package/dist/claim.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;mFACmF;AACnF,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,UAAU,CAAC;QACzB,MAAM,EAAE,UAAU,CAAC;QACnB,gBAAgB,EAAE,UAAU,CAAC;QAC7B,UAAU,EAAE,UAAU,CAAC;KACxB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC1B;AAED;;sDAEsD;AACtD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAaxC;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,EACxB,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CA8CnC"}
|
package/dist/claim.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// The faucet identity claim (SIGN-08) — the ONE deliberate asymmetry from the "every verb signs
|
|
2
|
-
// and returns a txId" rule. It is NOT a signing verb: it is a DIRECT node call through
|
|
3
|
-
// `NodeClient.claimIdentityWithProofs`, because the MCP holds NEITHER key of the identity being
|
|
4
|
-
// claimed (both proofs are produced by the holder), the node sponsors and pays a fixed credit, and
|
|
5
|
-
// the SDK already recomputes the proof-of-possession digest locally and refuses on mismatch.
|
|
6
|
-
import { hexToBytes } from "@mcsherrylabs/evolver-client";
|
|
7
|
-
/** Decode one hex field, refusing on non-hex/odd-length input. The refusal names the FIELD, never
|
|
8
|
-
* the bytes (T-03-09). The SDK's `hexToBytes` throws a precise reason on bad input, which is what
|
|
9
|
-
* the `partial` cause carries. */
|
|
10
|
-
function parseHex(field, raw) {
|
|
11
|
-
try {
|
|
12
|
-
return hexToBytes(String(raw ?? "").trim());
|
|
13
|
-
}
|
|
14
|
-
catch (e) {
|
|
15
|
-
return { field, cause: e instanceof Error ? e.message : String(e) };
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Claim a FRESH identity via the node-sponsored faucet (SIGN-08).
|
|
20
|
-
*
|
|
21
|
-
* ⚠️ NOT A SIGNING VERB. The holder produced both proofs elsewhere; this MCP holds neither key, so
|
|
22
|
-
* it forwards the holder's proofs to the SDK and the node sponsors + pays. Nothing is recorded in
|
|
23
|
-
* the session stores, no `txId` is returned, and nothing reaches `evolver_submit`.
|
|
24
|
-
*
|
|
25
|
-
* ⚠️ THE DIGEST IS NEVER RECOMPUTED HERE. The SDK's `claimIdentityWithProofs` recomputes the claim
|
|
26
|
-
* digest locally and refuses `digest_mismatch` before the sponsored `create`, so a claim whose
|
|
27
|
-
* proofs cover the wrong bytes aborts rather than signing server-chosen bytes.
|
|
28
|
-
*
|
|
29
|
-
* An empty `blsPop`/`ed25519Pop` (hex-decodes to zero bytes) is refused BEFORE any `claim` call:
|
|
30
|
-
* the holder must prove possession, and this MCP forwards for no key it does not hold (T-03-10).
|
|
31
|
-
*/
|
|
32
|
-
export async function claimIdentity(deps, params) {
|
|
33
|
-
const name = String(params.nodeId ?? "").trim();
|
|
34
|
-
if (name.length === 0)
|
|
35
|
-
return { kind: "partial", what: "nodeId", cause: "the new identity needs a name" };
|
|
36
|
-
const blsPublicKey = parseHex("blsPublicKey", params.blsPublicKey);
|
|
37
|
-
if ("field" in blsPublicKey)
|
|
38
|
-
return { kind: "partial", what: blsPublicKey.field, cause: blsPublicKey.cause };
|
|
39
|
-
const blsPop = parseHex("blsPop", params.blsPop);
|
|
40
|
-
if ("field" in blsPop)
|
|
41
|
-
return { kind: "partial", what: blsPop.field, cause: blsPop.cause };
|
|
42
|
-
const ed25519PublicKey = parseHex("ed25519PublicKey", params.ed25519PublicKey);
|
|
43
|
-
if ("field" in ed25519PublicKey)
|
|
44
|
-
return { kind: "partial", what: ed25519PublicKey.field, cause: ed25519PublicKey.cause };
|
|
45
|
-
const ed25519Pop = parseHex("ed25519Pop", params.ed25519Pop);
|
|
46
|
-
if ("field" in ed25519Pop)
|
|
47
|
-
return { kind: "partial", what: ed25519Pop.field, cause: ed25519Pop.cause };
|
|
48
|
-
// Empty-PoP refusal: the holder must prove possession, and this MCP signs/forwards for no key it
|
|
49
|
-
// does not hold. Named by FIELD, never by bytes.
|
|
50
|
-
if (blsPop.length === 0)
|
|
51
|
-
return {
|
|
52
|
-
kind: "partial",
|
|
53
|
-
what: "blsPop",
|
|
54
|
-
cause: "both keys need a proof of possession from their holder — this agent holds neither key",
|
|
55
|
-
};
|
|
56
|
-
if (ed25519Pop.length === 0)
|
|
57
|
-
return {
|
|
58
|
-
kind: "partial",
|
|
59
|
-
what: "ed25519Pop",
|
|
60
|
-
cause: "both keys need a proof of possession from their holder — this agent holds neither key",
|
|
61
|
-
};
|
|
62
|
-
try {
|
|
63
|
-
const r = await deps.claim({ nodeId: name, blsPublicKey, blsPop, ed25519PublicKey, ed25519Pop });
|
|
64
|
-
if (r.kind === "committed")
|
|
65
|
-
return { kind: "ok", value: { name, outcome: "committed", blockHeight: r.blockHeight } };
|
|
66
|
-
if (r.kind === "exists")
|
|
67
|
-
return { kind: "ok", value: { name, outcome: "exists" } };
|
|
68
|
-
// ⚠️ A refusal from the node is an ANSWER, not a transport failure, and names the node's own
|
|
69
|
-
// reason — including `digest_mismatch`, which means the bytes those proofs cover are not the
|
|
70
|
-
// bytes this chain wants signed. `error`/`message` surface verbatim.
|
|
71
|
-
return {
|
|
72
|
-
kind: "partial",
|
|
73
|
-
what: "claim",
|
|
74
|
-
cause: `${r.error ?? "refused"}: ${r.message ?? ""}`,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
catch (e) {
|
|
78
|
-
return { kind: "unreachable", chain: "", cause: e instanceof Error ? e.message : String(e) };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=claim.js.map
|
package/dist/claim.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../src/claim.ts"],"names":[],"mappings":"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"}
|
package/dist/content.d.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import type { ToolResult } from "./result.js";
|
|
2
|
-
/** Inline bound on ORIGINAL (decoded) bytes, for both PUT and GET: 256 KiB. */
|
|
3
|
-
export declare const CONTENT_MAX_BYTES = 262144;
|
|
4
|
-
/** Longest canonical base64 accepted/returned for `CONTENT_MAX_BYTES` bytes (349 528 chars). */
|
|
5
|
-
export declare const CONTENT_MAX_BASE64_CHARS: number;
|
|
6
|
-
/** Most principal names one restricted publication may grant. */
|
|
7
|
-
export declare const CONTENT_MAX_PRINCIPALS = 32;
|
|
8
|
-
/** Only what the content verbs need from a client. `NodeClient` satisfies it structurally, which
|
|
9
|
-
* is what lets the rules be exercised against a fake — a rule only checked against a live node
|
|
10
|
-
* is a rule that drifts. The GET goes through the stream so the declared size is checked BEFORE
|
|
11
|
-
* any body is buffered (the SDK's `getContent` buffers an object of any size). */
|
|
12
|
-
export interface ContentClient {
|
|
13
|
-
postContent(bytes: Uint8Array, opts?: {
|
|
14
|
-
authorizedPrincipals?: string[];
|
|
15
|
-
}): Promise<{
|
|
16
|
-
key: string;
|
|
17
|
-
size: number;
|
|
18
|
-
}>;
|
|
19
|
-
getContentStream(key: string): Promise<{
|
|
20
|
-
stream: ReadableStream<Uint8Array>;
|
|
21
|
-
size: number;
|
|
22
|
-
} | null>;
|
|
23
|
-
}
|
|
24
|
-
/** What the content verbs need from the world: the SEPARATE content client (built against
|
|
25
|
-
* `contentBaseUrl`, never the chain client) plus that content endpoint name for refusals.
|
|
26
|
-
* Injected so the whole flow is exercisable against a structural fake, exactly like `ChainReads`
|
|
27
|
-
* (read.ts) and `ClaimFn` (claim.ts). */
|
|
28
|
-
export interface ContentDeps {
|
|
29
|
-
readonly client: ContentClient;
|
|
30
|
-
readonly contentUrl: string;
|
|
31
|
-
}
|
|
32
|
-
/** What a publish is asked to do. Raw tool parameters: every field is validated here, never coerced. */
|
|
33
|
-
export interface PublishRequest {
|
|
34
|
-
readonly access?: unknown;
|
|
35
|
-
readonly authorizedPrincipals?: unknown;
|
|
36
|
-
readonly text?: unknown;
|
|
37
|
-
readonly base64?: unknown;
|
|
38
|
-
}
|
|
39
|
-
/** What a successful publish answers: the node's key, the ORIGINAL byte size, a locally-computed
|
|
40
|
-
* sha256 over those bytes, and the access actually requested. No `txId` — content has nothing to
|
|
41
|
-
* submit later. */
|
|
42
|
-
export interface Published {
|
|
43
|
-
readonly key: string;
|
|
44
|
-
readonly size: number;
|
|
45
|
-
readonly sha256: string;
|
|
46
|
-
readonly encoding: "text" | "base64";
|
|
47
|
-
readonly access: "open" | "restricted";
|
|
48
|
-
readonly authorizedPrincipals?: readonly string[];
|
|
49
|
-
readonly note: string;
|
|
50
|
-
}
|
|
51
|
-
/** What a successful fetch answers: always the COMPLETE object (`complete: true`), its size and
|
|
52
|
-
* locally-recomputed sha256, and EXACTLY ONE of `text` (strict, lossless UTF-8) or `base64` (the
|
|
53
|
-
* actual fetched bytes). `null` is the DEFINITIVE "no reachable holder" negative (Pitfall 3). */
|
|
54
|
-
export type Fetched = {
|
|
55
|
-
readonly key: string;
|
|
56
|
-
readonly size: number;
|
|
57
|
-
readonly sha256: string;
|
|
58
|
-
readonly complete: true;
|
|
59
|
-
} & ({
|
|
60
|
-
readonly encoding: "text";
|
|
61
|
-
readonly text: string;
|
|
62
|
-
} | {
|
|
63
|
-
readonly encoding: "base64";
|
|
64
|
-
readonly base64: string;
|
|
65
|
-
});
|
|
66
|
-
/** SHA-256 of the given bytes, hex-encoded. Computed locally via Web Crypto — never trusted from
|
|
67
|
-
* the node (T-5-04). */
|
|
68
|
-
export declare function sha256Hex(bytes: Uint8Array): Promise<string>;
|
|
69
|
-
export declare const OPEN_NOTE: string;
|
|
70
|
-
export declare const RESTRICTED_NOTE: string;
|
|
71
|
-
type Access = {
|
|
72
|
-
readonly mode: "open";
|
|
73
|
-
} | {
|
|
74
|
-
readonly mode: "restricted";
|
|
75
|
-
readonly principals: string[];
|
|
76
|
-
};
|
|
77
|
-
/** The access the caller DELIBERATELY asked for, or a refusal. Nothing is trimmed, filtered or
|
|
78
|
-
* defaulted: an entry the node would reinterpret (blank, whitespace, comma-joined) is refused,
|
|
79
|
-
* because the alternative is publishing to a set the caller did not name. */
|
|
80
|
-
export declare function parseAccess(access: unknown, grants: unknown): Access | ToolResult<never>;
|
|
81
|
-
/** Publish text or binary to the content cache (READ-11, #8). `access` must be stated; a
|
|
82
|
-
* restricted publication forwards its grants through the SDK's `authorizedPrincipals`. Every
|
|
83
|
-
* refusal happens BEFORE any call. A node answer that is not 201 (e.g. HTTP 400 for an unknown
|
|
84
|
-
* principal) is `partial publish` naming the node's answer — never `ok`, and never retried open;
|
|
85
|
-
* a transport throw is `unreachable`. */
|
|
86
|
-
export declare function publishBytes(deps: ContentDeps, req: PublishRequest): Promise<ToolResult<Published>>;
|
|
87
|
-
/** Fetch content from the cache by key (READ-10, #8), returning the COMPLETE object as strict
|
|
88
|
-
* UTF-8 `text` (default) or `base64` of the actual bytes. Empty/blank key or unknown encoding is
|
|
89
|
-
* refused locally BEFORE any call. `null` is the DEFINITIVE negative (Pitfall 3); a throw or a
|
|
90
|
-
* short/overlong transfer is `unreachable`. Over `CONTENT_MAX_BYTES`, or not valid UTF-8 in text
|
|
91
|
-
* mode, answers `partial` with NO content — never a preview, never a lossy decode. */
|
|
92
|
-
export declare function fetchBytes(deps: ContentDeps, key: string, encoding?: unknown): Promise<ToolResult<Fetched | null>>;
|
|
93
|
-
export {};
|
|
94
|
-
//# sourceMappingURL=content.d.ts.map
|
package/dist/content.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
|