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/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
- if (!res.ok) {
25
- throw new Error(`HTTP ${res.status}: ${text.slice(0, 500)}`);
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
- throw new Error(`Invalid JSON from node: ${text.slice(0, 200)}`);
33
+ json = undefined;
33
34
  }
34
- if (json.error) {
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,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,IAAwB,CAAA;QAC5B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAA;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,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,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"}
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.1',
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.1',
593
+ version: '0.4.4',
594
594
  mode: 'read-only',
595
595
  endpoint: endpoint,
596
596
  docs_products: DERO_DOC_PRODUCTS,
@@ -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,CA4C/D;AAMD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,iBAAiB,EACrB,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAI,GACf,SAAS,CASX"}
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));
@@ -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":"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"}
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.2",
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:docs && 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",
@@ -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
@@ -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
@@ -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"}