@mcsherrylabs/evolver-mcp 0.12.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.
Files changed (163) hide show
  1. package/dist/application-signer.d.ts +16 -0
  2. package/dist/application-signer.d.ts.map +1 -0
  3. package/dist/application-signer.js +55 -0
  4. package/dist/application-signer.js.map +1 -0
  5. package/dist/approved-request.d.ts +30 -0
  6. package/dist/approved-request.d.ts.map +1 -0
  7. package/dist/approved-request.js +167 -0
  8. package/dist/approved-request.js.map +1 -0
  9. package/dist/attachment-tools.d.ts +3 -0
  10. package/dist/attachment-tools.d.ts.map +1 -0
  11. package/dist/attachment-tools.js +32 -0
  12. package/dist/attachment-tools.js.map +1 -0
  13. package/dist/attachments.d.ts +41 -0
  14. package/dist/attachments.d.ts.map +1 -0
  15. package/dist/attachments.js +458 -0
  16. package/dist/attachments.js.map +1 -0
  17. package/dist/content-file-tools.d.ts +3 -0
  18. package/dist/content-file-tools.d.ts.map +1 -0
  19. package/dist/content-file-tools.js +67 -0
  20. package/dist/content-file-tools.js.map +1 -0
  21. package/dist/content-files.d.ts +32 -0
  22. package/dist/content-files.d.ts.map +1 -0
  23. package/dist/content-files.js +79 -0
  24. package/dist/content-files.js.map +1 -0
  25. package/dist/content-ranges.d.ts +41 -0
  26. package/dist/content-ranges.d.ts.map +1 -0
  27. package/dist/content-ranges.js +75 -0
  28. package/dist/content-ranges.js.map +1 -0
  29. package/dist/files.d.ts +60 -0
  30. package/dist/files.d.ts.map +1 -0
  31. package/dist/files.js +355 -0
  32. package/dist/files.js.map +1 -0
  33. package/dist/group-crypto-tools.d.ts +3 -0
  34. package/dist/group-crypto-tools.d.ts.map +1 -0
  35. package/dist/group-crypto-tools.js +47 -0
  36. package/dist/group-crypto-tools.js.map +1 -0
  37. package/dist/group-crypto.d.ts +24 -0
  38. package/dist/group-crypto.d.ts.map +1 -0
  39. package/dist/group-crypto.js +135 -0
  40. package/dist/group-crypto.js.map +1 -0
  41. package/dist/group-key-provider.d.ts +30 -0
  42. package/dist/group-key-provider.d.ts.map +1 -0
  43. package/dist/group-key-provider.js +72 -0
  44. package/dist/group-key-provider.js.map +1 -0
  45. package/dist/group-keys.d.ts +34 -0
  46. package/dist/group-keys.d.ts.map +1 -0
  47. package/dist/group-keys.js +88 -0
  48. package/dist/group-keys.js.map +1 -0
  49. package/dist/http-profiles.d.ts +47 -0
  50. package/dist/http-profiles.d.ts.map +1 -0
  51. package/dist/http-profiles.js +161 -0
  52. package/dist/http-profiles.js.map +1 -0
  53. package/dist/human-approval.d.ts +14 -0
  54. package/dist/human-approval.d.ts.map +1 -0
  55. package/dist/human-approval.js +34 -0
  56. package/dist/human-approval.js.map +1 -0
  57. package/dist/inbox.d.ts +1 -1
  58. package/dist/inbox.d.ts.map +1 -1
  59. package/dist/inbox.js +1 -1
  60. package/dist/inbox.js.map +1 -1
  61. package/dist/index.d.ts +11 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +94 -41
  64. package/dist/index.js.map +1 -1
  65. package/dist/login-profiles.d.ts +25 -0
  66. package/dist/login-profiles.d.ts.map +1 -0
  67. package/dist/login-profiles.js +77 -0
  68. package/dist/login-profiles.js.map +1 -0
  69. package/dist/login-tools.d.ts +3 -0
  70. package/dist/login-tools.d.ts.map +1 -0
  71. package/dist/login-tools.js +27 -0
  72. package/dist/login-tools.js.map +1 -0
  73. package/dist/login.d.ts +36 -0
  74. package/dist/login.d.ts.map +1 -0
  75. package/dist/login.js +144 -0
  76. package/dist/login.js.map +1 -0
  77. package/dist/mcp.d.ts +2 -2
  78. package/dist/mcp.d.ts.map +1 -1
  79. package/dist/p2p-tools.d.ts +3 -0
  80. package/dist/p2p-tools.d.ts.map +1 -0
  81. package/dist/p2p-tools.js +52 -0
  82. package/dist/p2p-tools.js.map +1 -0
  83. package/dist/p2p.d.ts +67 -0
  84. package/dist/p2p.d.ts.map +1 -0
  85. package/dist/p2p.js +326 -0
  86. package/dist/p2p.js.map +1 -0
  87. package/dist/processor.d.ts +1 -1
  88. package/dist/processor.d.ts.map +1 -1
  89. package/dist/processor.js +1 -1
  90. package/dist/processor.js.map +1 -1
  91. package/dist/proof-attempts.d.ts +19 -0
  92. package/dist/proof-attempts.d.ts.map +1 -0
  93. package/dist/proof-attempts.js +30 -0
  94. package/dist/proof-attempts.js.map +1 -0
  95. package/dist/signed-http-tools.d.ts +3 -0
  96. package/dist/signed-http-tools.d.ts.map +1 -0
  97. package/dist/signed-http-tools.js +33 -0
  98. package/dist/signed-http-tools.js.map +1 -0
  99. package/dist/signed-http.d.ts +30 -0
  100. package/dist/signed-http.d.ts.map +1 -0
  101. package/dist/signed-http.js +114 -0
  102. package/dist/signed-http.js.map +1 -0
  103. package/dist/tools.d.ts +29 -4
  104. package/dist/tools.d.ts.map +1 -1
  105. package/dist/tools.js +24 -10
  106. package/dist/tools.js.map +1 -1
  107. package/dist/transaction-interchange-tools.d.ts +3 -0
  108. package/dist/transaction-interchange-tools.d.ts.map +1 -0
  109. package/dist/transaction-interchange-tools.js +41 -0
  110. package/dist/transaction-interchange-tools.js.map +1 -0
  111. package/dist/transaction-interchange.d.ts +141 -0
  112. package/dist/transaction-interchange.d.ts.map +1 -0
  113. package/dist/transaction-interchange.js +502 -0
  114. package/dist/transaction-interchange.js.map +1 -0
  115. package/dist/transaction-policy.d.ts +32 -0
  116. package/dist/transaction-policy.d.ts.map +1 -0
  117. package/dist/transaction-policy.js +89 -0
  118. package/dist/transaction-policy.js.map +1 -0
  119. package/package.json +7 -18
  120. package/dist/amount.d.ts +0 -23
  121. package/dist/amount.d.ts.map +0 -1
  122. package/dist/amount.js +0 -53
  123. package/dist/amount.js.map +0 -1
  124. package/dist/channel.d.ts +0 -77
  125. package/dist/channel.d.ts.map +0 -1
  126. package/dist/channel.js +0 -287
  127. package/dist/channel.js.map +0 -1
  128. package/dist/claim.d.ts +0 -48
  129. package/dist/claim.d.ts.map +0 -1
  130. package/dist/claim.js +0 -81
  131. package/dist/claim.js.map +0 -1
  132. package/dist/content.d.ts +0 -81
  133. package/dist/content.d.ts.map +0 -1
  134. package/dist/content.js +0 -215
  135. package/dist/content.js.map +0 -1
  136. package/dist/group-ownership.d.ts +0 -78
  137. package/dist/group-ownership.d.ts.map +0 -1
  138. package/dist/group-ownership.js +0 -325
  139. package/dist/group-ownership.js.map +0 -1
  140. package/dist/group.d.ts +0 -60
  141. package/dist/group.d.ts.map +0 -1
  142. package/dist/group.js +0 -204
  143. package/dist/group.js.map +0 -1
  144. package/dist/identity.d.ts +0 -87
  145. package/dist/identity.d.ts.map +0 -1
  146. package/dist/identity.js +0 -236
  147. package/dist/identity.js.map +0 -1
  148. package/dist/read.d.ts +0 -252
  149. package/dist/read.d.ts.map +0 -1
  150. package/dist/read.js +0 -320
  151. package/dist/read.js.map +0 -1
  152. package/dist/result.d.ts +0 -110
  153. package/dist/result.d.ts.map +0 -1
  154. package/dist/result.js +0 -97
  155. package/dist/result.js.map +0 -1
  156. package/dist/signer.d.ts +0 -37
  157. package/dist/signer.d.ts.map +0 -1
  158. package/dist/signer.js +0 -76
  159. package/dist/signer.js.map +0 -1
  160. package/dist/write.d.ts +0 -208
  161. package/dist/write.d.ts.map +0 -1
  162. package/dist/write.js +0 -385
  163. package/dist/write.js.map +0 -1
package/dist/write.js DELETED
@@ -1,385 +0,0 @@
1
- // Signing and submitting, as two capabilities that never fuse.
2
- //
3
- // `signTransfer` produces a transaction that has gone nowhere (SIGN-20: a `txId`, NO submit).
4
- // `submitSigned` sends one this session already signed, refusing anything else (SUBM-08) and
5
- // refusing a repeat (SAFE-01). The ledger is pinned (LEDGER.identity) so no caller-chosen ledger
6
- // ever reaches the signed bytes — a signing tool composes what it signs from named, typed fields
7
- // and chooses the ledger itself.
8
- //
9
- // The two-step contract is STRUCTURAL, not advisory: an in-memory record of what THIS session
10
- // signed is what `submitSigned` resolves a `txId` against, and what `inspectSigned` (READ-05)
11
- // answers from. A description telling the model "don't re-sign" competes with chain text the
12
- // model reads by design, so the guards are here, in code.
13
- import { LEDGER, buildSignedTx, transferBody, txIdHex, channelBody, hexToBytes, CORE_LEDGER_IDS, RESERVED_LEDGER_PREFIX, } from "@mcsherrylabs/evolver-client";
14
- // ONE hex decoder, re-exported: the SDK's `hexToBytes` (which refuses non-hex rather than coercing).
15
- // `signOpaque` and the identity verbs both use it — a second hand-rolled decoder is the bug class.
16
- export { hexToBytes };
17
- import { formatAmount, parseAmount } from "./amount.js";
18
- import { classifySubmit } from "./result.js";
19
- /** Rounds of life given to a signed transaction.
20
- *
21
- * ⚠️ SHORT ON PURPOSE. A signed transaction is a bearer artefact: valid until it expires,
22
- * submission unauthenticated, no cancel. Nothing here waits on a human between signing and
23
- * submitting, so a long window buys nothing and leaves a live artefact in a transcript. */
24
- export const DEFAULT_TTL_OFFSET = 50;
25
- /** The largest body `signOpaque` will sign, in bytes: the node's HTTP request cap (65536) less
26
- * room for the transaction envelope. An oversized POST is refused by the listener before the
27
- * node reads it, unreadably, so the outcome would arrive as `unknown` after submit already marked
28
- * the id sent — a dead end. Refusing here is free and names the bound. */
29
- const MAX_BODY_BYTES = 65536 - 1024;
30
- /** A channel id a caller may write to — NOT a core ledger, NOT the reserved namespace.
31
- *
32
- * ⚠️ CASE-INSENSITIVE ON PURPOSE, AND NOT BECAUSE THE NODE IS. The node compares ledger ids
33
- * exactly, but refusing every casing costs nothing and removes a whole class of bypass that opens
34
- * the moment anything in the path normalises case. This refusal is the only thing between a
35
- * caller and the node's own interpreters. This single refusal is EXPORTED so `src/channel.ts`
36
- * imports and REUSES it verbatim — never re-implements it (single dispatch-safety rule). */
37
- export function writableChannelId(raw) {
38
- const id = String(raw ?? "").trim();
39
- if (id.length === 0)
40
- return { kind: "partial", what: "channel", cause: "no channel given" };
41
- const lower = id.toLowerCase();
42
- if (CORE_LEDGER_IDS.some((c) => c.toLowerCase() === lower))
43
- return {
44
- kind: "partial",
45
- what: "channel",
46
- cause: `"${id}" is a CORE ledger, not a channel. Writing to it would not be an opaque message — ` +
47
- `the node parses that ledger's bodies and applies what it finds, so these bytes could be a ` +
48
- `transfer or key registration signed as this identity. Refused before anything was signed.`,
49
- };
50
- if (lower.startsWith(RESERVED_LEDGER_PREFIX))
51
- return {
52
- kind: "partial",
53
- what: "channel",
54
- cause: `"${id}" is in the reserved "${RESERVED_LEDGER_PREFIX}" namespace, which belongs to the node's own ledgers. A channel lives outside it.`,
55
- };
56
- return id;
57
- }
58
- // ── session stores ────────────────────────────────────────────────────────────
59
- //
60
- // Three maps, two audiences. The RECORD (`signedThisSession`) is intent: what `inspectSigned`
61
- // answers from. The BYTES (`bytesThisSession`, base64) are the bearer artefact submitted to the
62
- // chain. They are deliberately separate so the transaction id is the only lookup key and the
63
- // base64 never reaches a signing or inspection result (~86 KB each otherwise). `alreadySubmitted`
64
- // is the "never twice" guard.
65
- const signedThisSession = new Map();
66
- const alreadySubmitted = new Set();
67
- const bytesThisSession = new Map();
68
- /** A transaction id as a lookup key. Ids are lowercase hex, but a model retyping one should not
69
- * fail on case or a stray space. */
70
- const asKey = (txId) => String(txId ?? "").trim().toLowerCase();
71
- /** A caller-supplied id, safe to name in a refusal. Echoing it verbatim gifts an attacker content
72
- * AND size in the transcript; the id is named only when it LOOKS like one. */
73
- export const namedInRefusal = (txId) => {
74
- const k = asKey(txId);
75
- if (k.length === 0)
76
- return "(empty)";
77
- return /^[0-9a-f]{64}$/.test(k) ? k : `(not a transaction id: ${k.length} characters)`;
78
- };
79
- /** Everything this session signed, by id. */
80
- export function recordedById(txId) {
81
- return signedThisSession.get(asKey(txId));
82
- }
83
- /** Record a signed operation into BOTH session stores — the intent record AND the base64 bearer
84
- * bytes. This is the single record path shared by `signTransfer` and `composeIdentityTx` (via
85
- * `src/identity.ts`); composing and recording in one call is what keeps inspect/submit from ever
86
- * seeing a signed transaction whose record is missing. */
87
- export function recordSigned(signed, bytes) {
88
- const k = asKey(signed.txId);
89
- signedThisSession.set(k, signed);
90
- if (!bytesThisSession.has(k))
91
- bytesThisSession.set(k, Buffer.from(bytes).toString("base64"));
92
- }
93
- /** Record an operation whose envelope carries auths assembled from MORE than this session's signer
94
- * (the group ownership transfer). Strict where `recordSigned` is lenient: it never replaces or
95
- * merges an existing id, so a verified multi-auth envelope cannot be shadowed by, or shadow, an
96
- * earlier record. Returns false (recording nothing) when the id is already known. */
97
- export function recordAssembledOnce(signed, bytes) {
98
- const k = asKey(signed.txId);
99
- if (signedThisSession.has(k) || bytesThisSession.has(k))
100
- return false;
101
- signedThisSession.set(k, signed);
102
- bytesThisSession.set(k, Buffer.from(bytes).toString("base64"));
103
- return true;
104
- }
105
- // Prepared-but-unconsented ownership transfers. Bounded so a looping caller cannot grow it.
106
- export const MAX_PENDING_OWNERSHIP = 16;
107
- const pendingOwnershipThisSession = new Map();
108
- /** Remember a prepared transfer. False when the bound is reached or the id is already known. */
109
- export function recordPendingOwnership(p) {
110
- const k = asKey(p.txId);
111
- if (pendingOwnershipThisSession.has(k) || signedThisSession.has(k))
112
- return false;
113
- if (pendingOwnershipThisSession.size >= MAX_PENDING_OWNERSHIP)
114
- return false;
115
- pendingOwnershipThisSession.set(k, p);
116
- return true;
117
- }
118
- export function pendingOwnershipById(txId) {
119
- return pendingOwnershipThisSession.get(asKey(txId));
120
- }
121
- export function dropPendingOwnership(txId) {
122
- pendingOwnershipThisSession.delete(asKey(txId));
123
- }
124
- /** Forget prepared transfers that can no longer be admitted (expiry <= round). They were never
125
- * signed, so nothing submittable is lost; this keeps the bound from filling with dead entries. */
126
- export function pruneExpiredPendingOwnership(round) {
127
- for (const [k, p] of pendingOwnershipThisSession)
128
- if (p.expiresAtRound <= round)
129
- pendingOwnershipThisSession.delete(k);
130
- }
131
- /** The signed bytes for one recorded transaction, base64. Undefined for anything this session
132
- * did not sign. */
133
- export function peekBytes(txId) {
134
- return bytesThisSession.get(asKey(txId));
135
- }
136
- /**
137
- * Sign a credit transfer to a `txId` and record it — no network submit (SIGN-20).
138
- *
139
- * Reads the chain tip to bound the TTL (the read is mandatory: a transaction's life is relative
140
- * to the current round, and a guessed round is refused). If the chain is unreachable, signing
141
- * fails as `unreachable` — but it still does NOT submit.
142
- */
143
- export async function signTransfer(deps, params) {
144
- const recipient = String(params.recipient ?? "").trim();
145
- if (recipient.length === 0)
146
- return { kind: "partial", what: "recipient", cause: "no recipient given" };
147
- // Validate BEFORE anything touches the chain: a refusal here costs nothing, while a bad amount
148
- // that reaches the wire becomes a transaction that does the wrong thing.
149
- const amount = parseAmount(String(params.amount ?? ""));
150
- if (!amount.ok)
151
- return { kind: "partial", what: "amount", cause: amount.error };
152
- let tip;
153
- try {
154
- tip = await deps.reads.currentRound();
155
- }
156
- catch (e) {
157
- return { kind: "unreachable", chain: "", cause: e instanceof Error ? e.message : String(e) };
158
- }
159
- const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
160
- const body = transferBody([{ recipient, amount: amount.value }]);
161
- const bytes = buildSignedTx({
162
- ledgerId: LEDGER.identity,
163
- senderNodeId: deps.identity,
164
- body,
165
- ttlRound: expiresAtRound,
166
- signers: [deps.signer],
167
- });
168
- const signed = {
169
- txId: txIdHex(LEDGER.identity, deps.identity, expiresAtRound, body),
170
- expiresAtRound,
171
- signedAtRound: tip,
172
- summary: { sender: deps.identity, recipient, amount: formatAmount(amount.value) },
173
- };
174
- signedThisSession.set(asKey(signed.txId), signed);
175
- bytesThisSession.set(asKey(signed.txId), Buffer.from(bytes).toString("base64"));
176
- return { kind: "ok", value: signed };
177
- }
178
- /**
179
- * Sign a write to a channel — the generic escape hatch (SUBM-07). Signs only; a separate
180
- * `evolver_submit` or `evolver_submit_da` call is what reaches a chain.
181
- *
182
- * ⚠️ WHAT THE CALLER IS TRUSTED WITH, AND WHAT IT IS NOT. The caller chooses the bytes and the
183
- * channel. It does NOT choose the interpreter: `writableChannelId` below refuses every CORE ledger
184
- * id and the whole reserved `ce.evolver.` namespace, so the bytes reach a ledger the core never
185
- * parses. That is the whole safety argument — a caller who could name `ce.evolver.ledger.identity`
186
- * with a crafted body would be handing the node a transfer or key registration signed as this
187
- * identity. The sign DIGEST was never the weak point; DISPATCH was.
188
- *
189
- * ⚠️ NOT THE 157 LOGIN. The `signedRequest` SDK path is a challenge-response login proof that sends
190
- * its own HTTP and carries no commit interval; it is a DIFFERENT affordance and is not wired here.
191
- */
192
- export async function signOpaque(deps, params) {
193
- // 1. the channel — the refusal that pays for the caller-chosen-ledger exemption.
194
- const channel = writableChannelId(params.channel);
195
- if (typeof channel !== "string")
196
- return channel;
197
- // 2. the body, hex. Decoded by a parser that refuses a non-hex / odd-length input rather than
198
- // silently producing a wrong-length run of bytes.
199
- let body;
200
- try {
201
- body = hexToBytes(String(params.bodyHex ?? "").trim());
202
- }
203
- catch (e) {
204
- return { kind: "partial", what: "bodyHex", cause: e instanceof Error ? e.message : String(e) };
205
- }
206
- if (body.length === 0)
207
- return {
208
- kind: "partial",
209
- what: "bodyHex",
210
- cause: "no body given — a channel write carries the bytes you supply, and an empty one costs the same while conveying nothing",
211
- };
212
- if (body.length > MAX_BODY_BYTES)
213
- return {
214
- kind: "partial",
215
- what: "bodyHex",
216
- cause: `${body.length} bytes is over the ${MAX_BODY_BYTES}-byte limit this verb will sign ` +
217
- `(the node's HTTP request cap, less the transaction envelope). A larger body is rejected ` +
218
- `by the listener before the node sees it, unreadably. Split the payload, or put it in ` +
219
- `content storage and write the digest.`,
220
- };
221
- // 3. the chain tip, to bound the life. A guessed expiry round is refused outright.
222
- let tip;
223
- try {
224
- tip = await deps.reads.currentRound();
225
- }
226
- catch (e) {
227
- return { kind: "unreachable", chain: "", cause: e instanceof Error ? e.message : String(e) };
228
- }
229
- const expiresAtRound = tip + (deps.ttlOffset ?? DEFAULT_TTL_OFFSET);
230
- const bodyBytes = channelBody(body);
231
- // This escape hatch grants no toll consent; disclose the same fixed zero it signs.
232
- const maxToll = 0n;
233
- const fields = { channel, bodyBytes: body.length, maxToll: maxToll.toString() };
234
- const bytes = buildSignedTx({
235
- ledgerId: channel,
236
- senderNodeId: deps.identity,
237
- body: bodyBytes,
238
- ttlRound: expiresAtRound,
239
- signers: [deps.signer],
240
- maxToll,
241
- });
242
- const signed = {
243
- txId: txIdHex(channel, deps.identity, expiresAtRound, bodyBytes, maxToll),
244
- expiresAtRound,
245
- signedAtRound: tip,
246
- verb: "opaque",
247
- fields,
248
- summary: { sender: deps.identity, ...fields },
249
- };
250
- signedThisSession.set(asKey(signed.txId), signed);
251
- bytesThisSession.set(asKey(signed.txId), Buffer.from(bytes).toString("base64"));
252
- return { kind: "ok", value: signed };
253
- }
254
- /**
255
- * Submit a transaction this session signed, by its `txId` (SIGN-19). Never signs, never does
256
- * network work before the guards clear:
257
- *
258
- * Rule 1 (SUBM-08) — only what this session signed: otherwise this agent is a submission relay.
259
- * Rule 2 (SAFE-01) — never twice: a repeat is a no-op the chain refuses, and re-signing is the
260
- * loop that pays twice. Here the refusal names "look it up", never re-sign.
261
- *
262
- * The `txId` resolves the signed record and the exact stored bytes. Both routes share these guards
263
- * and mark the id before awaiting the network, including when the result is unknown. DA permits
264
- * only channel-write intent, never a core-ledger operation or owners-ledger administration.
265
- */
266
- export async function submitSigned(deps, txId, mode = "ordinary") {
267
- const signed = recordedById(txId);
268
- if (signed === undefined)
269
- return {
270
- kind: "refused",
271
- reason: "not_signed_here",
272
- message: `no transaction with id ${namedInRefusal(txId)} was signed by this agent in this ` +
273
- `session, so nothing will be submitted. Sign it first, and submit the id the signing ` +
274
- `step returned.`,
275
- };
276
- if (alreadySubmitted.has(signed.txId))
277
- return {
278
- kind: "refused",
279
- reason: "already_submitted",
280
- message: `this transaction (${signed.txId}) has already been submitted in this session. Do NOT ` +
281
- `sign the payment again — that makes a DIFFERENT transaction that nothing deduplicates, ` +
282
- `and both may commit. Look it up instead.`,
283
- txId: signed.txId,
284
- };
285
- if (mode === "da") {
286
- if (!("verb" in signed) || (signed.verb !== "opaque" && signed.verb !== "channel_write"))
287
- return { kind: "refused", reason: "not_channel_write", txId: signed.txId,
288
- message: "DA submission accepts only session-signed opaque/channel_write intent. Use evolver_submit for transfers and administration; nothing was sent." };
289
- const channel = writableChannelId(signed.fields.channel);
290
- if (typeof channel !== "string")
291
- return { kind: "refused", reason: "not_channel_write", txId: signed.txId,
292
- message: "DA submission refuses core/reserved or missing channel targets; nothing was sent." };
293
- if (!deps.submitTxWithDa)
294
- return { kind: "refused", reason: "da_not_configured", txId: signed.txId,
295
- message: "DA gateway submission is not configured; nothing was sent. No ordinary-submit fallback was attempted." };
296
- }
297
- const bytes = peekBytes(signed.txId);
298
- if (bytes === undefined)
299
- return {
300
- kind: "refused",
301
- reason: "not_signed_here",
302
- message: `this session recorded transaction ${signed.txId} but holds no bytes for it, so there is ` +
303
- `nothing to submit. Sign it again.`,
304
- txId: signed.txId,
305
- };
306
- alreadySubmitted.add(signed.txId);
307
- const raw = Uint8Array.from(Buffer.from(bytes, "base64"));
308
- // Monotonic timestamps bracket exactly ONE SDK call, after all local guards. The DA call
309
- // includes collection/assembly: elapsed time is not commit-only latency, even when committed.
310
- const t0 = performance.now();
311
- let result;
312
- try {
313
- result = mode === "da" ? await deps.submitTxWithDa(raw) : await deps.submitTx(raw);
314
- }
315
- catch (e) {
316
- return {
317
- kind: "unknown",
318
- why: `the submission could not be completed: ${e instanceof Error ? e.message : String(e)}`,
319
- txId: signed.txId,
320
- ...(mode === "da" ? { daSubmitDurationMs: Math.round(performance.now() - t0) } : {}),
321
- submitted: { ...signed.summary, expiresAtRound: signed.expiresAtRound },
322
- };
323
- }
324
- const durationMs = Math.round(performance.now() - t0);
325
- const daTiming = mode === "da" ? { daSubmitDurationMs: durationMs } : {};
326
- let outcome = classifySubmit(result);
327
- if (mode === "da" && outcome.kind === "unknown") {
328
- // SDK 0.21.0 parseSubmit drops reason/message on `timeout`, including the node's
329
- // da_collection_in_progress response. Do not infer which phase is pending from that shape.
330
- const detail = result.kind === "timeout" ? "the gateway returned a pending/timeout outcome" : outcome.why;
331
- outcome = { ...outcome, why: `${detail}. DA collection may still be in progress or submission may be uncertain; the SDK does not distinguish these phases. This is not da_unavailable or a final refusal` };
332
- }
333
- // An EXACT, FREE version-skew detector. The id is computed independently on both ends over the
334
- // same fields, so a disagreement is unambiguous evidence the two ends encode differently. A
335
- // mismatch is `unknown` with NO interval: the wrong id means the commit was never identified, so
336
- // there is no coherent "time to commit" to report.
337
- if (outcome.kind === "committed" && outcome.txId && outcome.txId.toLowerCase() !== signed.txId.toLowerCase())
338
- return {
339
- kind: "unknown",
340
- why: `the node computed a different transaction id (${outcome.txId}) than this client did ` +
341
- `(${signed.txId}). Treat the outcome as unknown and look the transaction up.`,
342
- txId: signed.txId,
343
- ...daTiming,
344
- submitted: { ...signed.summary, expiresAtRound: signed.expiresAtRound },
345
- };
346
- if (outcome.kind === "committed") {
347
- return {
348
- ...outcome,
349
- txId: signed.txId,
350
- ...(mode === "ordinary" ? { commitIntervalMs: durationMs } : daTiming),
351
- submitted: { ...signed.summary, expiresAtRound: signed.expiresAtRound },
352
- };
353
- }
354
- // Reconciliation always uses the original signed-intent ID, even when the gateway omits or
355
- // echoes a different ID. Adding gateway DA auths does not change that intent.
356
- return { ...outcome, txId: signed.txId, ...daTiming,
357
- submitted: { ...signed.summary, expiresAtRound: signed.expiresAtRound } };
358
- }
359
- /**
360
- * Read back what a signed transaction would do (READ-05). Answers from the session RECORD, not
361
- * by decoding — and not from any other transaction. Contacts no chain.
362
- */
363
- export function inspectSigned(txId) {
364
- const rec = recordedById(txId);
365
- if (rec !== undefined)
366
- return { kind: "ok", value: rec };
367
- const pending = pendingOwnershipById(txId);
368
- if (pending !== undefined)
369
- return { kind: "ok", value: pending };
370
- return {
371
- kind: "not_found",
372
- what: `transaction ${namedInRefusal(txId)} was not signed in this session — this tool contacts no chain; this is not evidence of on-chain absence`,
373
- };
374
- }
375
- /** Test seam only: forget this session's signing history (all three stores). */
376
- export function __resetSession() {
377
- signedThisSession.clear();
378
- alreadySubmitted.clear();
379
- bytesThisSession.clear();
380
- pendingOwnershipThisSession.clear();
381
- }
382
- /** The single compose→sign→record helper, re-exported from `src/identity.ts` so every identity verb
383
- * and any future signing verb shares ONE compose implementation (never two). */
384
- export { composeIdentityTx as composeAndSign } from "./identity.js";
385
- //# sourceMappingURL=write.js.map
package/dist/write.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"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"}