dero-mcp-server 0.4.2 → 0.4.4
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/data/docs-index.json +125 -125
- package/dist/composites/audit-chain-artifact-claim.d.ts.map +1 -1
- package/dist/composites/audit-chain-artifact-claim.js +6 -1
- package/dist/composites/audit-chain-artifact-claim.js.map +1 -1
- package/dist/composites/diagnose-chain-health.d.ts.map +1 -1
- package/dist/composites/diagnose-chain-health.js +19 -4
- package/dist/composites/diagnose-chain-health.js.map +1 -1
- package/dist/composites/forge-demo-proof.d.ts.map +1 -1
- package/dist/composites/forge-demo-proof.js +1 -0
- package/dist/composites/forge-demo-proof.js.map +1 -1
- package/dist/docs-parse.d.ts.map +1 -1
- package/dist/docs-parse.js +11 -3
- package/dist/docs-parse.js.map +1 -1
- package/dist/docs.d.ts +10 -0
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.js +22 -0
- package/dist/docs.js.map +1 -1
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +5 -1
- package/dist/http-server.js.map +1 -1
- package/dist/proof-decode.d.ts.map +1 -1
- package/dist/proof-decode.js +4 -1
- package/dist/proof-decode.js.map +1 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +12 -5
- package/dist/rpc.js.map +1 -1
- package/dist/server.js +2 -2
- package/dist/tx-parse.d.ts.map +1 -1
- package/dist/tx-parse.js +5 -0
- package/dist/tx-parse.js.map +1 -1
- package/package.json +2 -2
- package/dist/rpc-xswd.d.ts +0 -26
- package/dist/rpc-xswd.d.ts.map +0 -1
- package/dist/rpc-xswd.js +0 -232
- package/dist/rpc-xswd.js.map +0 -1
package/dist/rpc.js
CHANGED
|
@@ -21,19 +21,26 @@ export async function deroJsonRpc(jsonRpcUrl, method, params, options) {
|
|
|
21
21
|
signal: controller.signal,
|
|
22
22
|
});
|
|
23
23
|
const text = await res.text();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
// Parse the body before honoring the HTTP status: a daemon (or proxy) can
|
|
25
|
+
// return a JSON-RPC error with a non-2xx status, and that body carries the
|
|
26
|
+
// specific error code (e.g. -32098 DVM compile) we want to surface. Fall
|
|
27
|
+
// back to a raw HTTP error only when the body is not a usable JSON-RPC error.
|
|
27
28
|
let json;
|
|
28
29
|
try {
|
|
29
30
|
json = JSON.parse(text);
|
|
30
31
|
}
|
|
31
32
|
catch {
|
|
32
|
-
|
|
33
|
+
json = undefined;
|
|
33
34
|
}
|
|
34
|
-
if (json
|
|
35
|
+
if (json?.error) {
|
|
35
36
|
throw new Error(`RPC error ${json.error.code}: ${json.error.message}${json.error.data != null ? ` ${JSON.stringify(json.error.data)}` : ''}`);
|
|
36
37
|
}
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
throw new Error(`HTTP ${res.status}: ${text.slice(0, 500)}`);
|
|
40
|
+
}
|
|
41
|
+
if (json === undefined) {
|
|
42
|
+
throw new Error(`Invalid JSON from node: ${text.slice(0, 200)}`);
|
|
43
|
+
}
|
|
37
44
|
return json.result;
|
|
38
45
|
}
|
|
39
46
|
finally {
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,MAAM,CAAA;AASjC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,MAAc,EACd,MAAgB,EAChB,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAA;IAC1D,MAAM,IAAI,GAA4B;QACpC,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,UAAU;QACd,MAAM;KACP,CAAA;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IAE9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,MAAM,CAAA;AASjC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,MAAc,EACd,MAAgB,EAChB,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAA;IAC1D,MAAM,IAAI,GAA4B;QACpC,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,UAAU;QACd,MAAM;KACP,CAAA;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IAE9C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,0EAA0E;QAC1E,2EAA2E;QAC3E,yEAAyE;QACzE,8EAA8E;QAC9E,IAAI,IAAoC,CAAA;QACxC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAA;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7H,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAW,CAAA;IACzB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,WAAW,CAAA;AACxE,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -230,7 +230,7 @@ export function createDeroMcpServer(daemonBaseUrl) {
|
|
|
230
230
|
const rpc = async (method, params) => deroJsonRpc(endpoint, method, params);
|
|
231
231
|
const server = new McpServer({
|
|
232
232
|
name: 'dero-daemon-mcp',
|
|
233
|
-
version: '0.4.
|
|
233
|
+
version: '0.4.4',
|
|
234
234
|
});
|
|
235
235
|
server.registerTool('dero_daemon_ping', readOnly({
|
|
236
236
|
description: TOOL_DESCRIPTIONS.dero_daemon_ping,
|
|
@@ -590,7 +590,7 @@ export function createDeroMcpServer(daemonBaseUrl) {
|
|
|
590
590
|
mimeType: 'application/json',
|
|
591
591
|
text: JSON.stringify({
|
|
592
592
|
name: 'dero-daemon-mcp',
|
|
593
|
-
version: '0.4.
|
|
593
|
+
version: '0.4.4',
|
|
594
594
|
mode: 'read-only',
|
|
595
595
|
endpoint: endpoint,
|
|
596
596
|
docs_products: DERO_DOC_PRODUCTS,
|
package/dist/tx-parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-parse.d.ts","sourceRoot":"","sources":["../src/tx-parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3D,oBAAY,eAAe;IACzB,OAAO,IAAI;IACX,YAAY,IAAI;IAChB,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAgDD,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,CAAC,EAAE,SAAS,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,8FAA8F;IAC9F,kBAAkB,EAAE,UAAU,CAAA;IAC9B,gEAAgE;IAChE,CAAC,EAAE,SAAS,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,eAAe,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,sFAAsF;IACtF,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAiED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"tx-parse.d.ts","sourceRoot":"","sources":["../src/tx-parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3D,oBAAY,eAAe;IACzB,OAAO,IAAI;IACX,YAAY,IAAI;IAChB,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAgDD,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,CAAC,EAAE,SAAS,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,8FAA8F;IAC9F,kBAAkB,EAAE,UAAU,CAAA;IAC9B,gEAAgE;IAChE,CAAC,EAAE,SAAS,EAAE,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,UAAU,CAAA;IACvB,SAAS,EAAE,eAAe,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,sFAAsF;IACtF,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAiED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAiD/D;AAMD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,iBAAiB,EACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAI,GACf,SAAS,CASX"}
|
package/dist/tx-parse.js
CHANGED
|
@@ -153,6 +153,11 @@ export function parseTransaction(hex) {
|
|
|
153
153
|
const assetCount = cur.readUvarint();
|
|
154
154
|
if (assetCount < 1n)
|
|
155
155
|
throw new Error('tx-parse: asset_count < 1');
|
|
156
|
+
// Bound the payload loop by the protocol max so a corrupt/hostile uvarint
|
|
157
|
+
// gives a clear error instead of a cryptic EOF after over-reading.
|
|
158
|
+
if (assetCount > BigInt(PAYLOAD_LIMIT)) {
|
|
159
|
+
throw new Error(`tx-parse: asset_count ${assetCount} exceeds protocol maximum ${PAYLOAD_LIMIT}`);
|
|
160
|
+
}
|
|
156
161
|
const payloads = [];
|
|
157
162
|
for (let i = 0n; i < assetCount; i++)
|
|
158
163
|
payloads.push(parsePayload(cur));
|
package/dist/tx-parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-parse.js","sourceRoot":"","sources":["../src/tx-parse.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tx-parse.js","sourceRoot":"","sources":["../src/tx-parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAA;AAE3D,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,2DAAW,CAAA;IACX,qEAAgB,CAAA;IAChB,6DAAY,CAAA;IACZ,yDAAU,CAAA;IACV,2DAAW,CAAA;IACX,uDAAS,CAAA;AACX,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,aAAa,GAAG,GAAG,CAAA,CAAC,mCAAmC;AAE7D,gFAAgF;AAChF,4DAA4D;AAC5D,gFAAgF;AAEhF,MAAM,MAAM;IAEkB;IAD5B,MAAM,GAAG,CAAC,CAAA;IACV,YAA4B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAEjD,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACxC,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACjF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACrF,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM,IAAI,GAAG,CAAA;QAClB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,kDAAkD;IAClD,WAAW;QACT,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;YACzB,MAAM,IAAI,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAA;YACnC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAA;YACnC,KAAK,IAAI,EAAE,CAAA;YACX,IAAI,KAAK,GAAG,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;CACF;AAyCD,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACvD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACvF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACzF,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACnC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC5B,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,wBAAwB,CAAC,CAAA;IACrF,MAAM,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAA;IAC3B,MAAM,iBAAiB,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,iBAAiB,CAAC,CAAA;IACrE,MAAM,CAAC,GAAgB,EAAE,CAAA;IACzB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7B,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAClC,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,mBAAmB,EAAE,iBAAiB;QACtC,IAAI;QACJ,CAAC;QACD,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC;QACvB,kBAAkB,EAAE,iBAAiB;QACrC,CAAC;QACD,KAAK;QACL,QAAQ;KACT,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IACrC,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,UAAU;QACvB,SAAS;KACV,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IACjC,IAAI,OAAO,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAA;IAE/E,MAAM,aAAa,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IACvC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAoB,CAAA;IAE3D,IACE,MAAM,KAAK,eAAe,CAAC,MAAM;QACjC,MAAM,KAAK,eAAe,CAAC,OAAO;QAClC,MAAM,KAAK,eAAe,CAAC,KAAK,EAChC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0CAA0C,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,wEAAwE,CACpJ,CAAA;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC;QACrC,GAAG,CAAC,WAAW,EAAE,CAAA,CAAC,gCAAgC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IACpC,IAAI,UAAU,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IACjE,0EAA0E;IAC1E,mEAAmE;IACnE,IAAI,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,6BAA6B,aAAa,EAAE,CAAC,CAAA;IAClG,CAAC;IAED,MAAM,QAAQ,GAAoB,EAAE,CAAA;IACpC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;IAEtE,OAAO;QACL,OAAO;QACP,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;QAC1B,QAAQ;QACR,cAAc,EAAE,GAAG,CAAC,MAAM;KAC3B,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,4CAA4C;AAC5C,gFAAgF;AAEhF,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,QAAgB,EAChB,YAAY,GAAG,CAAC;IAEhB,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,uBAAuB,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IACtG,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,CAAA;IAChD,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,4BAA4B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;IAC/F,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dero-mcp-server",
|
|
3
3
|
"mcpName": "io.github.DHEBP/dero-mcp-server",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.4",
|
|
5
5
|
"description": "Model Context Protocol (MCP) server exposing DERO Stargate daemon JSON-RPC and bundled documentation to Claude and other MCP clients",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"release:docs-check": "npm run build:docs && npm run smoke:docs && npm run build",
|
|
27
27
|
"start": "node dist/index.js",
|
|
28
28
|
"dev": "node --import tsx src/index.ts",
|
|
29
|
-
"prepack": "npm run build
|
|
29
|
+
"prepack": "npm run build",
|
|
30
30
|
"doctor": "./scripts/doctor.sh",
|
|
31
31
|
"smoke:mcp": "npx tsx scripts/mcp-smoke-probes.ts",
|
|
32
32
|
"smoke:docs": "npx tsx scripts/docs-smoke-probes.ts",
|
package/dist/rpc-xswd.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export declare const XSWD_PORT = 44326;
|
|
2
|
-
export declare const XSWD_ENDPOINT = "ws://localhost:44326/xswd";
|
|
3
|
-
export declare const XSWD_BASE_APP_ID = "io.github.DHEBP/dero-mcp-server";
|
|
4
|
-
export type XswdConfig = {
|
|
5
|
-
client: string;
|
|
6
|
-
endpoint?: string;
|
|
7
|
-
};
|
|
8
|
-
export type XswdTransport = {
|
|
9
|
-
rpc<T>(method: string, params?: unknown, opts?: {
|
|
10
|
-
timeoutMs?: number;
|
|
11
|
-
}): Promise<T>;
|
|
12
|
-
appId: string;
|
|
13
|
-
close(): void;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Create an XSWD transport that proxies DERO.* JSON-RPC calls through the
|
|
17
|
-
* user's wallet on ws://localhost:44326/xswd. Per XSWD routing rules
|
|
18
|
-
* (walletapi/xswd/xswd.go:660-693), DERO.* methods bypass the permission
|
|
19
|
-
* system entirely — one handshake modal at connect, zero per-call modals.
|
|
20
|
-
*
|
|
21
|
-
* Connects lazily on the first rpc() call. Fails loud on unreachable wallet:
|
|
22
|
-
* the rejection surfaces through the existing `RPC_UNREACHABLE` classifier
|
|
23
|
-
* branch via the network-error message match.
|
|
24
|
-
*/
|
|
25
|
-
export declare function createXswdTransport(config: XswdConfig): Promise<XswdTransport>;
|
|
26
|
-
//# sourceMappingURL=rpc-xswd.d.ts.map
|
package/dist/rpc-xswd.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-xswd.d.ts","sourceRoot":"","sources":["../src/rpc-xswd.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,SAAS,QAAQ,CAAA;AAC9B,eAAO,MAAM,aAAa,8BAAqC,CAAA;AAC/D,eAAO,MAAM,gBAAgB,oCAAoC,CAAA;AAEjE,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACnF,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,IAAI,IAAI,CAAA;CACd,CAAA;AAwCD;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CA8MpF"}
|
package/dist/rpc-xswd.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
const DEFAULT_TIMEOUT_MS = 90_000;
|
|
3
|
-
const HANDSHAKE_TIMEOUT_MS = 30_000;
|
|
4
|
-
// Warm-up traverses the wallet→daemon hop once at startup under an aggressive
|
|
5
|
-
// sub-timeout. The wallet's "always permitted" branch (walletapi/xswd/xswd.go:651)
|
|
6
|
-
// is gated on IsDaemonOnlineCached() — a cached boolean, not a probe — and the
|
|
7
|
-
// forwarding RPC.Call at xswd.go:660 has no per-call deadline. A stale cache
|
|
8
|
-
// silently hangs every DERO.* call until the bridge's outer timeout fires, so
|
|
9
|
-
// surface that mismatch as a fast startup error instead of a slow first-call hang.
|
|
10
|
-
const WARMUP_TIMEOUT_MS = 7_000;
|
|
11
|
-
export const XSWD_PORT = 44326;
|
|
12
|
-
export const XSWD_ENDPOINT = `ws://localhost:${XSWD_PORT}/xswd`;
|
|
13
|
-
export const XSWD_BASE_APP_ID = 'io.github.DHEBP/dero-mcp-server';
|
|
14
|
-
function appIdForClient(client) {
|
|
15
|
-
return createHash('sha256').update(`${XSWD_BASE_APP_ID}:${client}`).digest('hex');
|
|
16
|
-
}
|
|
17
|
-
// XSWD's isASCII check (walletapi/xswd/xswd.go:856-863) is a byte-level loop:
|
|
18
|
-
// any byte > 0x7F fails. So em-dash, en-dash, curly quotes, ellipsis, NBSP,
|
|
19
|
-
// accented letters, and emoji are all rejected. Enforce 7-bit ASCII locally
|
|
20
|
-
// so a stray Unicode glyph fails loudly here instead of round-tripping to the
|
|
21
|
-
// wallet for a generic "Invalid description" / "Invalid name".
|
|
22
|
-
function assertAsciiHandshakeField(field, value) {
|
|
23
|
-
for (let i = 0; i < value.length; i++) {
|
|
24
|
-
const code = value.charCodeAt(i);
|
|
25
|
-
if (code > 0x7f) {
|
|
26
|
-
throw new Error(`XSWD handshake field "${field}" contains non-ASCII char U+${code
|
|
27
|
-
.toString(16)
|
|
28
|
-
.toUpperCase()
|
|
29
|
-
.padStart(4, '0')} at index ${i}; XSWD rejects any byte > 0x7F.`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function describeWsCloseCode(code) {
|
|
34
|
-
if (code === 1000)
|
|
35
|
-
return 'normal closure';
|
|
36
|
-
if (code === 1001)
|
|
37
|
-
return 'going away';
|
|
38
|
-
if (code === 1006)
|
|
39
|
-
return 'abnormal closure (no close frame)';
|
|
40
|
-
if (code === 1008)
|
|
41
|
-
return 'policy violation';
|
|
42
|
-
if (code === 1011)
|
|
43
|
-
return 'internal server error';
|
|
44
|
-
return `code ${code}`;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Create an XSWD transport that proxies DERO.* JSON-RPC calls through the
|
|
48
|
-
* user's wallet on ws://localhost:44326/xswd. Per XSWD routing rules
|
|
49
|
-
* (walletapi/xswd/xswd.go:660-693), DERO.* methods bypass the permission
|
|
50
|
-
* system entirely — one handshake modal at connect, zero per-call modals.
|
|
51
|
-
*
|
|
52
|
-
* Connects lazily on the first rpc() call. Fails loud on unreachable wallet:
|
|
53
|
-
* the rejection surfaces through the existing `RPC_UNREACHABLE` classifier
|
|
54
|
-
* branch via the network-error message match.
|
|
55
|
-
*/
|
|
56
|
-
export async function createXswdTransport(config) {
|
|
57
|
-
const client = config.client.trim() || 'headless';
|
|
58
|
-
const endpoint = config.endpoint ?? XSWD_ENDPOINT;
|
|
59
|
-
const appId = appIdForClient(client);
|
|
60
|
-
const appName = `dero-mcp-server.${client}`;
|
|
61
|
-
const appDescription = `dero-mcp-server (${client}) - read-only DERO.* chain access via XSWD.`;
|
|
62
|
-
const ws = new WebSocket(endpoint);
|
|
63
|
-
const pending = new Map();
|
|
64
|
-
let nextId = 1;
|
|
65
|
-
let closed = false;
|
|
66
|
-
let closeReason;
|
|
67
|
-
const failPending = (err) => {
|
|
68
|
-
for (const req of pending.values()) {
|
|
69
|
-
clearTimeout(req.timer);
|
|
70
|
-
req.reject(err);
|
|
71
|
-
}
|
|
72
|
-
pending.clear();
|
|
73
|
-
};
|
|
74
|
-
ws.addEventListener('message', (event) => {
|
|
75
|
-
const data = typeof event.data === 'string' ? event.data : '';
|
|
76
|
-
if (!data)
|
|
77
|
-
return;
|
|
78
|
-
let parsed;
|
|
79
|
-
try {
|
|
80
|
-
parsed = JSON.parse(data);
|
|
81
|
-
}
|
|
82
|
-
catch {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (typeof parsed.id !== 'number')
|
|
86
|
-
return;
|
|
87
|
-
const req = pending.get(parsed.id);
|
|
88
|
-
if (!req)
|
|
89
|
-
return;
|
|
90
|
-
pending.delete(parsed.id);
|
|
91
|
-
clearTimeout(req.timer);
|
|
92
|
-
if (parsed.error) {
|
|
93
|
-
req.reject(new Error(`RPC error ${parsed.error.code}: ${parsed.error.message}${parsed.error.data != null ? ` ${JSON.stringify(parsed.error.data)}` : ''}`));
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
req.resolve(parsed.result);
|
|
97
|
-
});
|
|
98
|
-
ws.addEventListener('close', (event) => {
|
|
99
|
-
closed = true;
|
|
100
|
-
closeReason = describeWsCloseCode(event.code);
|
|
101
|
-
failPending(new Error(`XSWD connection closed: ${closeReason}`));
|
|
102
|
-
});
|
|
103
|
-
ws.addEventListener('error', () => {
|
|
104
|
-
// The close handler runs next and carries the structured reason.
|
|
105
|
-
// Surface a network-shaped message so the existing RPC_UNREACHABLE
|
|
106
|
-
// classifier branch picks this up.
|
|
107
|
-
if (!closed) {
|
|
108
|
-
failPending(new Error('XSWD network error (fetch failed)'));
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
await new Promise((resolve, reject) => {
|
|
112
|
-
const onOpen = () => {
|
|
113
|
-
ws.removeEventListener('open', onOpen);
|
|
114
|
-
ws.removeEventListener('error', onError);
|
|
115
|
-
resolve();
|
|
116
|
-
};
|
|
117
|
-
const onError = () => {
|
|
118
|
-
ws.removeEventListener('open', onOpen);
|
|
119
|
-
ws.removeEventListener('error', onError);
|
|
120
|
-
reject(new Error(`XSWD unreachable at ${endpoint} (fetch failed — is your wallet running with XSWD enabled?)`));
|
|
121
|
-
};
|
|
122
|
-
ws.addEventListener('open', onOpen);
|
|
123
|
-
ws.addEventListener('error', onError);
|
|
124
|
-
});
|
|
125
|
-
// Handshake: the wallet replies with { accepted: bool, message: string }.
|
|
126
|
-
// Approval modal pops at this step; the user sees `appName` / `appDescription`.
|
|
127
|
-
const handshakePayload = {
|
|
128
|
-
id: appId,
|
|
129
|
-
name: appName,
|
|
130
|
-
description: appDescription,
|
|
131
|
-
url: 'https://github.com/DHEBP/dero-mcp-server',
|
|
132
|
-
permissions: {},
|
|
133
|
-
};
|
|
134
|
-
const handshakeAck = await new Promise((resolve, reject) => {
|
|
135
|
-
const timer = setTimeout(() => {
|
|
136
|
-
ws.removeEventListener('message', onMessage);
|
|
137
|
-
reject(new Error(`XSWD handshake timed out after ${HANDSHAKE_TIMEOUT_MS}ms (no approval modal acknowledged?)`));
|
|
138
|
-
}, HANDSHAKE_TIMEOUT_MS);
|
|
139
|
-
const onMessage = (event) => {
|
|
140
|
-
const data = typeof event.data === 'string' ? event.data : '';
|
|
141
|
-
if (!data)
|
|
142
|
-
return;
|
|
143
|
-
try {
|
|
144
|
-
const parsed = JSON.parse(data);
|
|
145
|
-
if (typeof parsed.accepted !== 'boolean')
|
|
146
|
-
return;
|
|
147
|
-
clearTimeout(timer);
|
|
148
|
-
ws.removeEventListener('message', onMessage);
|
|
149
|
-
resolve(parsed);
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
// Not the handshake reply — wait for the next message.
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
ws.addEventListener('message', onMessage);
|
|
156
|
-
assertAsciiHandshakeField('name', handshakePayload.name);
|
|
157
|
-
assertAsciiHandshakeField('description', handshakePayload.description);
|
|
158
|
-
assertAsciiHandshakeField('url', handshakePayload.url);
|
|
159
|
-
ws.send(JSON.stringify(handshakePayload));
|
|
160
|
-
});
|
|
161
|
-
if (!handshakeAck.accepted) {
|
|
162
|
-
ws.close();
|
|
163
|
-
throw new Error(`XSWD handshake rejected by wallet: ${handshakeAck.message}`);
|
|
164
|
-
}
|
|
165
|
-
const rpc = async (method, params, opts) => {
|
|
166
|
-
if (closed) {
|
|
167
|
-
throw new Error(`XSWD connection closed: ${closeReason ?? 'unknown'}`);
|
|
168
|
-
}
|
|
169
|
-
const timeoutMs = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
170
|
-
const id = nextId++;
|
|
171
|
-
const body = { jsonrpc: '2.0', id, method };
|
|
172
|
-
if (params !== undefined)
|
|
173
|
-
body.params = params;
|
|
174
|
-
return new Promise((resolve, reject) => {
|
|
175
|
-
const timer = setTimeout(() => {
|
|
176
|
-
pending.delete(id);
|
|
177
|
-
reject(new Error(`XSWD request timed out after ${timeoutMs}ms (method ${method})`));
|
|
178
|
-
}, timeoutMs);
|
|
179
|
-
pending.set(id, {
|
|
180
|
-
resolve: (value) => resolve(value),
|
|
181
|
-
reject,
|
|
182
|
-
timer,
|
|
183
|
-
});
|
|
184
|
-
try {
|
|
185
|
-
ws.send(JSON.stringify(body));
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
pending.delete(id);
|
|
189
|
-
clearTimeout(timer);
|
|
190
|
-
reject(new Error(`XSWD send failed (fetch failed): ${err instanceof Error ? err.message : String(err)}`));
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
};
|
|
194
|
-
const close = () => {
|
|
195
|
-
if (!closed)
|
|
196
|
-
ws.close();
|
|
197
|
-
};
|
|
198
|
-
// Warm-up ping: force one traversal of the wallet→daemon hop now, under
|
|
199
|
-
// WARMUP_TIMEOUT_MS, so a stale IsDaemonOnlineCached() reading fails fast
|
|
200
|
-
// as a startup error instead of silently eating the user's first DERO.*
|
|
201
|
-
// call for the full DEFAULT_TIMEOUT_MS budget. DERO.GetHeight is the
|
|
202
|
-
// leanest idempotent method and bypasses the permission modal via the
|
|
203
|
-
// "always permitted" branch (walletapi/xswd/xswd.go:660-693), exercising
|
|
204
|
-
// the exact code path a real call will take.
|
|
205
|
-
try {
|
|
206
|
-
await rpc('DERO.GetHeight', undefined, { timeoutMs: WARMUP_TIMEOUT_MS });
|
|
207
|
-
}
|
|
208
|
-
catch (err) {
|
|
209
|
-
close();
|
|
210
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
211
|
-
// Classify the failure so the operator sees what actually broke. Three
|
|
212
|
-
// distinct shapes, each pointing at a different layer:
|
|
213
|
-
// 1. Our 7s timer fired (no reply from wallet) → daemon link issue
|
|
214
|
-
// 2. Wallet returned a JSON-RPC error (e.g. -32003) → permission/protocol issue
|
|
215
|
-
// 3. Anything else (ws send failure, socket closed) → connection issue
|
|
216
|
-
// rpc-xswd flattens jrpc errors to "RPC error <code>: <msg>" at line 107,
|
|
217
|
-
// matching the convention classifyToolError() uses for -32601/-32602/-32098.
|
|
218
|
-
if (detail.includes('XSWD request timed out')) {
|
|
219
|
-
throw new Error(`XSWD warm-up failed: wallet's daemon link is unreachable — ` +
|
|
220
|
-
`check that the daemon is running and the wallet's daemon address is current (${detail})`);
|
|
221
|
-
}
|
|
222
|
-
if (detail.startsWith('RPC error ')) {
|
|
223
|
-
throw new Error(`XSWD warm-up failed: wallet refused the warm-up call — ` +
|
|
224
|
-
`DERO.GetHeight should be permitted for a read-only handshake. ` +
|
|
225
|
-
`This usually means the wallet is gating DERO.* methods on a wallet permission ` +
|
|
226
|
-
`(e.g. View Balance), which over-restricts public chain reads per the XSWD spec (${detail})`);
|
|
227
|
-
}
|
|
228
|
-
throw new Error(`XSWD warm-up failed: ${detail}`);
|
|
229
|
-
}
|
|
230
|
-
return { rpc, appId, close };
|
|
231
|
-
}
|
|
232
|
-
//# sourceMappingURL=rpc-xswd.js.map
|
package/dist/rpc-xswd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-xswd.js","sourceRoot":"","sources":["../src/rpc-xswd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACjC,MAAM,oBAAoB,GAAG,MAAM,CAAA;AACnC,8EAA8E;AAC9E,mFAAmF;AACnF,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,mFAAmF;AACnF,MAAM,iBAAiB,GAAG,KAAK,CAAA;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAA;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,SAAS,OAAO,CAAA;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAAiC,CAAA;AAmBjE,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,gBAAgB,IAAI,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACnF,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,+DAA+D;AAC/D,SAAS,yBAAyB,CAAC,KAAa,EAAE,KAAa;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAChC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,+BAA+B,IAAI;iBAC9D,QAAQ,CAAC,EAAE,CAAC;iBACZ,WAAW,EAAE;iBACb,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,iCAAiC,CACnE,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAA;IAC1C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,YAAY,CAAA;IACtC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,mCAAmC,CAAA;IAC7D,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,kBAAkB,CAAA;IAC5C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,uBAAuB,CAAA;IACjD,OAAO,QAAQ,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAkB;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU,CAAA;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,aAAa,CAAA;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,mBAAmB,MAAM,EAAE,CAAA;IAC3C,MAAM,cAAc,GAAG,oBAAoB,MAAM,6CAA6C,CAAA;IAE9F,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAA;IACjD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,WAA+B,CAAA;IAEnC,MAAM,WAAW,GAAG,CAAC,GAAU,EAAQ,EAAE;QACvC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACnC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAmB,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7D,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,MAAgC,CAAA;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAA;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAM;QACR,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAM;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,CACR,IAAI,KAAK,CACP,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,GACrD,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EACxE,EAAE,CACH,CACF,CAAA;YACD,OAAM;QACR,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;QACjD,MAAM,GAAG,IAAI,CAAA;QACb,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC7C,WAAW,CAAC,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QAChC,iEAAiE;QACjE,mEAAmE;QACnE,mCAAmC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,WAAW,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACtC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACxC,OAAO,EAAE,CAAA;QACX,CAAC,CAAA;QACD,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACtC,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACxC,MAAM,CACJ,IAAI,KAAK,CACP,uBAAuB,QAAQ,6DAA6D,CAC7F,CACF,CAAA;QACH,CAAC,CAAA;QACD,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACnC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,0EAA0E;IAC1E,gFAAgF;IAChF,MAAM,gBAAgB,GAAG;QACvB,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,cAAc;QAC3B,GAAG,EAAE,0CAA0C;QAC/C,WAAW,EAAE,EAAE;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CACpC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAC5C,MAAM,CACJ,IAAI,KAAK,CACP,kCAAkC,oBAAoB,sCAAsC,CAC7F,CACF,CAAA;QACH,CAAC,EAAE,oBAAoB,CAAC,CAAA;QACxB,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7D,IAAI,CAAC,IAAI;gBAAE,OAAM;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS;oBAAE,OAAM;gBAChD,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBAC5C,OAAO,CAAC,MAAM,CAAC,CAAA;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;QACH,CAAC,CAAA;QACD,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACzC,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACxD,yBAAyB,CAAC,aAAa,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACtE,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACtD,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC3C,CAAC,CACF,CAAA;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC3B,EAAE,CAAC,KAAK,EAAE,CAAA;QACV,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/E,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,EACf,MAAc,EACd,MAAgB,EAChB,IAA6B,EACjB,EAAE;QACd,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,IAAI,SAAS,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,kBAAkB,CAAA;QACvD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAA;QACpE,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAE9C,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAClB,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,SAAS,cAAc,MAAM,GAAG,CAAC,CAAC,CAAA;YACrF,CAAC,EAAE,SAAS,CAAC,CAAA;YACb,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;gBACd,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAU,CAAC;gBACvC,MAAM;gBACN,KAAK;aACN,CAAC,CAAA;YACF,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAClB,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CACJ,IAAI,KAAK,CACP,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvF,CACF,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,CAAC,MAAM;YAAE,EAAE,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC,CAAA;IAED,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,yEAAyE;IACzE,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,CAAU,gBAAgB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACnF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,EAAE,CAAA;QACP,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC/D,uEAAuE;QACvE,uDAAuD;QACvD,4EAA4E;QAC5E,oFAAoF;QACpF,2EAA2E;QAC3E,0EAA0E;QAC1E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,6DAA6D;gBAC3D,gFAAgF,MAAM,GAAG,CAC5F,CAAA;QACH,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,yDAAyD;gBACvD,gEAAgE;gBAChE,gFAAgF;gBAChF,mFAAmF,MAAM,GAAG,CAC/F,CAAA;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AAC9B,CAAC"}
|