agentcash 0.14.3 → 0.15.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 (93) hide show
  1. package/dist/cjs/run-server.cjs +41485 -17862
  2. package/dist/esm/{add-skill-CDIK57A3.js → add-skill-5HFBHQTQ.js} +10 -10
  3. package/dist/esm/{bridge-6WMUV3ML.js → bridge-BOLVXKCD.js} +7 -7
  4. package/dist/esm/{check-D5DZ6Y3T.js → check-FEWY37RD.js} +7 -7
  5. package/dist/esm/{chunk-SCBLFGL2.js → chunk-2C7X7XIG.js} +3 -3
  6. package/dist/esm/{chunk-UCADMHNP.js → chunk-2E4ZDG2M.js} +2 -2
  7. package/dist/esm/{chunk-YUPRVVFP.js → chunk-4MCPQDKM.js} +3 -3
  8. package/dist/esm/{chunk-JX2XE6FD.js → chunk-4TIYIVZF.js} +1 -1
  9. package/dist/esm/chunk-4TIYIVZF.js.map +1 -0
  10. package/dist/esm/{chunk-IL2CNAJY.js → chunk-5MITNOWT.js} +2 -2
  11. package/dist/esm/{chunk-MSNAPI5G.js → chunk-BIO4Y27B.js} +3 -3
  12. package/dist/esm/{chunk-BNFMFAEF.js → chunk-C7B6LEPE.js} +3 -3
  13. package/dist/esm/{chunk-KJCWPVQE.js → chunk-EM6OE6WL.js} +3 -3
  14. package/dist/esm/chunk-FBGNOXFP.js +102 -0
  15. package/dist/esm/chunk-FBGNOXFP.js.map +1 -0
  16. package/dist/esm/{chunk-G5FHPXQL.js → chunk-HNDMHX4B.js} +271 -98
  17. package/dist/esm/chunk-HNDMHX4B.js.map +1 -0
  18. package/dist/esm/{chunk-NPJV7AMV.js → chunk-HTGTKVXB.js} +6 -2
  19. package/dist/esm/chunk-HTGTKVXB.js.map +1 -0
  20. package/dist/esm/{chunk-CFSSHSBN.js → chunk-K3WB4R2P.js} +3 -2
  21. package/dist/esm/{chunk-CFSSHSBN.js.map → chunk-K3WB4R2P.js.map} +1 -1
  22. package/dist/esm/{chunk-FV6DADHO.js → chunk-MKA2PTOE.js} +5 -7
  23. package/dist/esm/chunk-MKA2PTOE.js.map +1 -0
  24. package/dist/esm/{chunk-KSW2MGQR.js → chunk-MZPHS3IS.js} +4 -4
  25. package/dist/esm/{chunk-K627XZI4.js → chunk-O57QVTLM.js} +2 -2
  26. package/dist/esm/{chunk-BFOYXXLG.js → chunk-RAS5DZPQ.js} +15 -1
  27. package/dist/esm/chunk-RAS5DZPQ.js.map +1 -0
  28. package/dist/esm/{chunk-KMS4TVJY.js → chunk-SLTRGQ7W.js} +8 -3
  29. package/dist/esm/{chunk-KMS4TVJY.js.map → chunk-SLTRGQ7W.js.map} +1 -1
  30. package/dist/esm/chunk-TX7S7QGG.js +146 -0
  31. package/dist/esm/chunk-TX7S7QGG.js.map +1 -0
  32. package/dist/esm/{chunk-NP7CKLI4.js → chunk-ULB5PPKW.js} +2 -2
  33. package/dist/esm/{chunk-LGFUHPDL.js → chunk-VGKAPM5S.js} +3 -3
  34. package/dist/esm/{chunk-SFESERJN.js → chunk-W37JKCLN.js} +42 -4
  35. package/dist/esm/chunk-W37JKCLN.js.map +1 -0
  36. package/dist/esm/{chunk-TTAO2EJK.js → chunk-YPFBBTA2.js} +1 -1
  37. package/dist/esm/chunk-YPFBBTA2.js.map +1 -0
  38. package/dist/esm/{discover-X557BWGS.js → discover-TXEJNB5A.js} +5 -5
  39. package/dist/esm/{fetch-45YPD37H.js → fetch-QAVIWIRX.js} +12 -11
  40. package/dist/esm/{fetch-45YPD37H.js.map → fetch-QAVIWIRX.js.map} +1 -1
  41. package/dist/esm/{fund-HHL4QEU5.js → fund-FCOUEG7T.js} +5 -5
  42. package/dist/esm/index.js +70 -34
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/{install-KJOAEIZF.js → install-NJJZYBZU.js} +8 -8
  45. package/dist/esm/{onboard-M5C6TFWE.js → onboard-TYB4QZE4.js} +12 -12
  46. package/dist/esm/{origins-XG6O5K27.js → origins-EVVF3N4G.js} +6 -6
  47. package/dist/esm/{register-AD43YD5O.js → register-T6M2US4B.js} +62 -21
  48. package/dist/esm/register-T6M2US4B.js.map +1 -0
  49. package/dist/esm/{report-error-FDDNOZAD.js → report-error-BR7ETMF7.js} +5 -5
  50. package/dist/esm/{search-VYYPNNIU.js → search-KIPT62MB.js} +11 -10
  51. package/dist/esm/{search-VYYPNNIU.js.map → search-KIPT62MB.js.map} +1 -1
  52. package/dist/esm/{server-6FQ4UZMS.js → server-MO3YMDHB.js} +83 -18
  53. package/dist/esm/server-MO3YMDHB.js.map +1 -0
  54. package/dist/esm/{server-Q4W2J7OE.js → server-WJH536CN.js} +2 -2
  55. package/dist/esm/sessions-NUOSJC6M.js +74 -0
  56. package/dist/esm/sessions-NUOSJC6M.js.map +1 -0
  57. package/dist/esm/{settings-RLSKK5RM.js → settings-SBL7WIBQ.js} +2 -2
  58. package/dist/esm/{try-UYLQPTBJ.js → try-2P5ZRXRT.js} +9 -9
  59. package/dist/esm/{wallet-QOS3FPSF.js → wallet-PY4ZDHNZ.js} +12 -12
  60. package/package.json +7 -7
  61. package/dist/esm/chunk-BFOYXXLG.js.map +0 -1
  62. package/dist/esm/chunk-FV6DADHO.js.map +0 -1
  63. package/dist/esm/chunk-G5FHPXQL.js.map +0 -1
  64. package/dist/esm/chunk-JX2XE6FD.js.map +0 -1
  65. package/dist/esm/chunk-NPJV7AMV.js.map +0 -1
  66. package/dist/esm/chunk-SFESERJN.js.map +0 -1
  67. package/dist/esm/chunk-TTAO2EJK.js.map +0 -1
  68. package/dist/esm/register-AD43YD5O.js.map +0 -1
  69. package/dist/esm/server-6FQ4UZMS.js.map +0 -1
  70. /package/dist/esm/{add-skill-CDIK57A3.js.map → add-skill-5HFBHQTQ.js.map} +0 -0
  71. /package/dist/esm/{bridge-6WMUV3ML.js.map → bridge-BOLVXKCD.js.map} +0 -0
  72. /package/dist/esm/{check-D5DZ6Y3T.js.map → check-FEWY37RD.js.map} +0 -0
  73. /package/dist/esm/{chunk-SCBLFGL2.js.map → chunk-2C7X7XIG.js.map} +0 -0
  74. /package/dist/esm/{chunk-UCADMHNP.js.map → chunk-2E4ZDG2M.js.map} +0 -0
  75. /package/dist/esm/{chunk-YUPRVVFP.js.map → chunk-4MCPQDKM.js.map} +0 -0
  76. /package/dist/esm/{chunk-IL2CNAJY.js.map → chunk-5MITNOWT.js.map} +0 -0
  77. /package/dist/esm/{chunk-MSNAPI5G.js.map → chunk-BIO4Y27B.js.map} +0 -0
  78. /package/dist/esm/{chunk-BNFMFAEF.js.map → chunk-C7B6LEPE.js.map} +0 -0
  79. /package/dist/esm/{chunk-KJCWPVQE.js.map → chunk-EM6OE6WL.js.map} +0 -0
  80. /package/dist/esm/{chunk-KSW2MGQR.js.map → chunk-MZPHS3IS.js.map} +0 -0
  81. /package/dist/esm/{chunk-K627XZI4.js.map → chunk-O57QVTLM.js.map} +0 -0
  82. /package/dist/esm/{chunk-NP7CKLI4.js.map → chunk-ULB5PPKW.js.map} +0 -0
  83. /package/dist/esm/{chunk-LGFUHPDL.js.map → chunk-VGKAPM5S.js.map} +0 -0
  84. /package/dist/esm/{discover-X557BWGS.js.map → discover-TXEJNB5A.js.map} +0 -0
  85. /package/dist/esm/{fund-HHL4QEU5.js.map → fund-FCOUEG7T.js.map} +0 -0
  86. /package/dist/esm/{install-KJOAEIZF.js.map → install-NJJZYBZU.js.map} +0 -0
  87. /package/dist/esm/{onboard-M5C6TFWE.js.map → onboard-TYB4QZE4.js.map} +0 -0
  88. /package/dist/esm/{origins-XG6O5K27.js.map → origins-EVVF3N4G.js.map} +0 -0
  89. /package/dist/esm/{report-error-FDDNOZAD.js.map → report-error-BR7ETMF7.js.map} +0 -0
  90. /package/dist/esm/{server-Q4W2J7OE.js.map → server-WJH536CN.js.map} +0 -0
  91. /package/dist/esm/{settings-RLSKK5RM.js.map → settings-SBL7WIBQ.js.map} +0 -0
  92. /package/dist/esm/{try-UYLQPTBJ.js.map → try-2P5ZRXRT.js.map} +0 -0
  93. /package/dist/esm/{wallet-QOS3FPSF.js.map → wallet-PY4ZDHNZ.js.map} +0 -0
@@ -1,73 +1,79 @@
1
+ import {
2
+ closeMppSession
3
+ } from "./chunk-TX7S7QGG.js";
1
4
  import {
2
5
  redeemInviteCode
3
- } from "./chunk-MSNAPI5G.js";
6
+ } from "./chunk-BIO4Y27B.js";
4
7
  import {
5
8
  submitErrorReport
6
- } from "./chunk-LGFUHPDL.js";
9
+ } from "./chunk-VGKAPM5S.js";
7
10
  import {
8
11
  bridge,
9
12
  bridgeSchema
10
- } from "./chunk-FV6DADHO.js";
13
+ } from "./chunk-MKA2PTOE.js";
11
14
  import {
12
15
  loadUserOrigins
13
16
  } from "./chunk-YIU364NZ.js";
14
- import "./chunk-NP7CKLI4.js";
17
+ import "./chunk-ULB5PPKW.js";
15
18
  import {
16
19
  checkEndpoint
17
20
  } from "./chunk-5CMVFNXO.js";
18
21
  import {
19
22
  coreRequestSchema,
20
23
  fetchShape
21
- } from "./chunk-KMS4TVJY.js";
24
+ } from "./chunk-SLTRGQ7W.js";
22
25
  import {
23
26
  getBalances,
24
27
  listAccountsWithBalances
25
- } from "./chunk-YUPRVVFP.js";
28
+ } from "./chunk-4MCPQDKM.js";
26
29
  import "./chunk-ISF2WVEZ.js";
27
30
  import {
28
31
  search,
29
32
  searchSchema
30
- } from "./chunk-KSW2MGQR.js";
33
+ } from "./chunk-MZPHS3IS.js";
31
34
  import {
32
35
  discoverResources,
33
36
  discoverResourcesSchema
34
- } from "./chunk-CFSSHSBN.js";
37
+ } from "./chunk-K3WB4R2P.js";
35
38
  import {
36
39
  DESCRIPTIONS,
37
40
  TOOL_PARAMS,
38
41
  buildServerInstructions
39
- } from "./chunk-SFESERJN.js";
42
+ } from "./chunk-W37JKCLN.js";
40
43
  import {
41
44
  executeFetch
42
- } from "./chunk-G5FHPXQL.js";
45
+ } from "./chunk-HNDMHX4B.js";
46
+ import "./chunk-FBGNOXFP.js";
43
47
  import {
44
48
  DEFAULT_MAX_AMOUNT,
45
49
  getSettings,
46
50
  setSettings
47
- } from "./chunk-JX2XE6FD.js";
51
+ } from "./chunk-4TIYIVZF.js";
48
52
  import "./chunk-IKPLMFAK.js";
49
53
  import {
50
54
  RequestMethod
51
55
  } from "./chunk-LNJIXYCU.js";
52
- import "./chunk-KJCWPVQE.js";
56
+ import "./chunk-EM6OE6WL.js";
53
57
  import {
54
58
  fetchHttpErr,
55
59
  isFetchError,
56
60
  safeParseResponse
57
- } from "./chunk-BFOYXXLG.js";
61
+ } from "./chunk-RAS5DZPQ.js";
58
62
  import {
59
63
  getWallet
60
64
  } from "./chunk-F3KGAMIA.js";
61
- import "./chunk-NPJV7AMV.js";
65
+ import "./chunk-HTGTKVXB.js";
62
66
  import {
63
67
  safeStringifyJson
64
68
  } from "./chunk-KVSTJRSJ.js";
65
- import "./chunk-FB5CMO3J.js";
69
+ import {
70
+ zodUrl
71
+ } from "./chunk-FB5CMO3J.js";
66
72
  import "./chunk-U6FRXL3X.js";
67
73
  import {
68
74
  log
69
75
  } from "./chunk-QZCSZB7E.js";
70
- import "./chunk-TTAO2EJK.js";
76
+ import "./chunk-YPFBBTA2.js";
71
77
  import {
72
78
  resultFromPromise
73
79
  } from "./chunk-YWNBUUBR.js";
@@ -667,13 +673,71 @@ var registerSearchTool = ({
667
673
  );
668
674
  };
669
675
 
676
+ // src/server/tools/sessions.ts
677
+ import z6 from "zod";
678
+ var SURFACE2 = "server:sessions_close";
679
+ var registerSessionsTools = ({
680
+ server,
681
+ wallets,
682
+ flags
683
+ }) => {
684
+ server.registerTool(
685
+ "sessions_close",
686
+ {
687
+ title: "Close MPP Session",
688
+ description: DESCRIPTIONS.closeSession.mcp,
689
+ inputSchema: z6.object({
690
+ channelId: z6.string().regex(
691
+ /^0x[0-9a-fA-F]{64}$/,
692
+ "channelId must be a 0x-prefixed 32-byte hex string"
693
+ ).describe(TOOL_PARAMS.closeSession.channelId),
694
+ url: zodUrl.describe(TOOL_PARAMS.closeSession.url),
695
+ cumulativeAmountRaw: z6.string().regex(
696
+ /^[0-9]+$/,
697
+ "cumulativeAmountRaw must be a non-negative integer string"
698
+ ).optional().describe(TOOL_PARAMS.closeSession.cumulativeAmountRaw)
699
+ }),
700
+ outputSchema: z6.object({
701
+ channelId: z6.string().describe(TOOL_PARAMS.closeSession.output.channelId),
702
+ cumulativeAmount: z6.string().describe(TOOL_PARAMS.closeSession.output.cumulativeAmount),
703
+ transactionHash: z6.string().optional().describe(TOOL_PARAMS.closeSession.output.transactionHash)
704
+ }),
705
+ annotations: {
706
+ readOnlyHint: false,
707
+ destructiveHint: true,
708
+ idempotentHint: true,
709
+ openWorldHint: true
710
+ }
711
+ },
712
+ async (args) => {
713
+ const result = await closeMppSession(
714
+ {
715
+ channelId: args.channelId,
716
+ url: args.url,
717
+ cumulativeAmountRaw: args.cumulativeAmountRaw
718
+ },
719
+ { surface: SURFACE2, wallets, flags }
720
+ );
721
+ if (result.isErr()) {
722
+ return mcpError(result, { isError: true });
723
+ }
724
+ const { channelId, cumulativeAmount, transactionHash } = result.value;
725
+ return mcpSuccessStructuredJson({
726
+ channelId,
727
+ cumulativeAmount,
728
+ ...transactionHash ? { transactionHash } : {}
729
+ });
730
+ }
731
+ );
732
+ };
733
+
670
734
  // src/server/lib/version.ts
671
735
  import { readFileSync } from "fs";
672
736
  import { dirname, join } from "path";
673
737
  import { fileURLToPath } from "url";
674
738
  function getVersion() {
675
739
  if (true) {
676
- return "0.14.3";
740
+ return "0.15.0";
677
741
  }
678
742
  const __dirname2 = dirname(fileURLToPath(import.meta.url));
679
743
  const pkg = JSON.parse(
@@ -726,6 +790,7 @@ var startServer = async (flags) => {
726
790
  registerSettingsTools(props);
727
791
  registerBridgeTool(props);
728
792
  registerSearchTool(props);
793
+ registerSessionsTools(props);
729
794
  const transport = new StdioServerTransport();
730
795
  await server.connect(transport);
731
796
  const shutdown = async () => {
@@ -739,4 +804,4 @@ var startServer = async (flags) => {
739
804
  export {
740
805
  startServer
741
806
  };
742
- //# sourceMappingURL=server-6FQ4UZMS.js.map
807
+ //# sourceMappingURL=server-MO3YMDHB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/index.ts","../../src/server/tools/response/lib.ts","../../src/server/tools/response/error.ts","../../src/server/tools/response/success.ts","../../src/server/tools/response/safe-handler.ts","../../src/shared/request/schemas/mcp.ts","../../src/server/tools/fetch.ts","../../src/server/tools/wallet.ts","../../src/server/tools/check-endpoint.ts","../../src/server/tools/redeem-invite.ts","../../src/server/tools/telemetry.ts","../../src/server/tools/discover-resources.ts","../../src/server/tools/settings.ts","../../src/server/tools/bridge.ts","../../src/server/tools/search.ts","../../src/server/tools/sessions.ts","../../src/server/lib/version.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\nimport { registerFetchTool } from './tools/fetch';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckEndpointTool } from './tools/check-endpoint';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\nimport { registerDiscoveryTools } from './tools/discover-resources';\nimport { registerSettingsTools } from './tools/settings';\nimport { registerBridgeTool } from './tools/bridge';\nimport { registerSearchTool } from './tools/search';\nimport { registerSessionsTools } from './tools/sessions';\n\nimport { MCP_VERSION } from './lib/version';\n\nimport { log } from '@/shared/log';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport { buildServerInstructions } from '@/shared/descriptions';\nimport { loadUserOrigins } from '@/shared/user-origins';\nimport { getWallet } from '@/wallet';\n\nimport type { Command } from '@/types';\n\nexport const startServer: Command = async flags => {\n log.info('Starting agentcash...');\n\n const { invite, sessionId } = flags;\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(JSON.stringify(walletResult.error, null, 2));\n process.exit(1);\n }\n\n const wallets = walletResult.value;\n\n const code = invite ?? process.env.INVITE_CODE;\n\n if (code) {\n await redeemInviteCode('startServer', { code }, flags, wallets);\n }\n\n const serverInstructions = buildServerInstructions(loadUserOrigins());\n\n const server = new McpServer(\n {\n name: 'agentcash',\n title: 'AgentCash',\n version: MCP_VERSION,\n websiteUrl: 'https://agentcash.dev',\n icons: [{ src: 'https://agentcash.dev/favicon.svg' }],\n description: serverInstructions,\n },\n {\n instructions: serverInstructions,\n }\n );\n\n const props = {\n server,\n wallets,\n flags,\n sessionId,\n };\n\n registerFetchTool(props);\n registerWalletTools(props);\n registerCheckEndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(props);\n registerTelemetryTools(props);\n registerSettingsTools(props);\n registerBridgeTool(props);\n registerSearchTool(props);\n registerSessionsTools(props);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n log.info('Shutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n};\n","import type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport const parsedResponseToToolContentPart = (\n data: ParsedResponse\n): CallToolResult['content'][number] => {\n switch (data.type) {\n case 'json':\n return {\n type: 'text' as const,\n text: JSON.stringify(data.data),\n };\n case 'image':\n return {\n type: 'image' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'audio':\n return {\n type: 'audio' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'text':\n return { type: 'text' as const, text: data.data };\n default:\n return {\n type: 'text' as const,\n text: `Unsupported response type: ${data.type}`,\n };\n }\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { parsedResponseToToolContentPart } from './lib';\nimport {\n fetchHttpErr,\n isFetchError,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\n\nimport type { JsonStringifyValue } from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { BaseError, Err } from '@agentcash/neverthrow/types';\nimport type { BaseX402Error } from '@/shared/protocols/x402/types';\nimport type { BaseMppError } from '@/shared/protocols/mpp/types';\nimport type { BaseFetchError } from '@/shared/neverthrow/fetch/types';\n\nconst buildMcpError = (\n content: CallToolResult['content'],\n options?: { isError?: boolean }\n): CallToolResult => {\n return {\n content,\n // Default: omit isError so siblings survive parallel calls.\n // Tools with outputSchema MUST pass isError: true so the SDK\n // skips output validation on error paths.\n ...(options?.isError ? { isError: true as const } : {}),\n };\n};\n\nexport const mcpErrorJson = (\n error: JsonStringifyValue,\n options?: { isError?: boolean }\n): CallToolResult => {\n return safeStringifyJson('mcp-error-json', error).match(\n success =>\n buildMcpError([{ type: 'text' as const, text: success }], options),\n error =>\n buildMcpError(\n [{ type: 'text' as const, text: JSON.stringify(error, null, 2) }],\n options\n )\n );\n};\n\nexport const mcpError = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err: Err<any, BaseX402Error | BaseMppError | BaseFetchError | BaseError>,\n options?: { isError?: boolean }\n) => {\n const { error } = err;\n if (isFetchError(error)) {\n switch (error.cause) {\n case 'network':\n case 'parse':\n return mcpErrorJson({ ...error }, options);\n case 'http':\n const { response, ...rest } = error;\n const parseResponseResult = await safeParseResponse(\n 'mcp-error-fetch-parse-response',\n response\n );\n const httpContent: CallToolResult['content'] = [\n { type: 'text' as const, text: JSON.stringify(rest, null, 2) },\n ...parseResponseResult.match(\n success => [parsedResponseToToolContentPart(success)],\n () => []\n ),\n ];\n return buildMcpError(httpContent, options);\n }\n }\n return mcpErrorJson({ ...error }, options);\n};\n\nexport const mcpErrorFetch = async (surface: string, response: Response) => {\n return mcpError(fetchHttpErr(surface, response));\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { mcpErrorJson } from './error';\n\nimport type {\n JsonStringifyObject,\n JsonStringifyValue,\n} from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport { parsedResponseToToolContentPart } from './lib';\n\nconst buildMcpSuccess = (\n content: CallToolResult['content']\n): CallToolResult => {\n return {\n content,\n };\n};\n\nexport const mcpSuccessJson = (data: JsonStringifyValue): CallToolResult => {\n return safeStringifyJson('mcp-success-text', data).match(\n success => buildMcpSuccess([{ type: 'text' as const, text: success }]),\n error => mcpErrorJson(error)\n );\n};\n\nexport const mcpSuccessStructuredJson = (\n data: JsonStringifyObject\n): CallToolResult => {\n return safeStringifyJson('mcp-success-structured', data).match(\n success => ({\n content: [{ type: 'text' as const, text: success }],\n structuredContent: data,\n }),\n error => mcpErrorJson(error)\n );\n};\n\nexport const mcpSuccessResponse = (\n data: ParsedResponse,\n extra?: JsonStringifyValue\n): CallToolResult => {\n const parsedExtra = extra\n ? safeStringifyJson('mcp-success-extra', extra).match(\n success => success,\n () => undefined\n )\n : undefined;\n\n return buildMcpSuccess([\n parsedResponseToToolContentPart(data),\n ...(parsedExtra ? [{ type: 'text' as const, text: parsedExtra }] : []),\n ]);\n};\n","import { log } from '@/shared/log';\nimport { mcpErrorJson } from './error';\n\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Wraps an MCP tool handler so uncaught exceptions never propagate.\n * Returns error info as normal content (isError omitted) for any unhandled throw.\n *\n * This prevents sibling parallel tool calls from failing when one\n * tool encounters an unexpected error.\n */\nexport function safeHandler<T>(\n handler: (input: T) => Promise<CallToolResult>\n): (input: T) => Promise<CallToolResult> {\n return async (input: T) => {\n // eslint-disable-next-line no-restricted-syntax -- intentional last-resort catch to prevent sibling tool call failures\n try {\n return await handler(input);\n } catch (e) {\n log.error('Unhandled tool error', e);\n return mcpErrorJson({\n error: e instanceof Error ? e.message : String(e),\n cause: 'unhandled_exception',\n });\n }\n };\n}\n","import z from 'zod';\n\nimport { coreRequestSchema, fetchShape } from './core';\n\nexport const mcpBodySchema = z\n .union([\n z\n .string()\n .describe(\n 'Raw request body string. Passed through to the underlying fetch call as-is.'\n ),\n z\n .record(z.string(), z.unknown())\n .transform(json => JSON.stringify(json))\n .describe('JSON object to be sent as the request body'),\n ])\n .optional()\n .describe(\n 'Request body. Can be a string or an object that will be stringified.'\n );\n\nexport const mcpRequestSchema = coreRequestSchema.extend({\n body: mcpBodySchema,\n headers: z\n .record(z.string(), z.string())\n .optional()\n .default({})\n .transform(headers =>\n Object.fromEntries(\n Object.entries(headers).map(([key, value]) => [key, value.trim()])\n )\n )\n .describe('Additional headers to include as a key-value pair'),\n});\n\nexport const mcpFetchRequestSchema = mcpRequestSchema.extend(fetchShape);\n","import { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { executeFetch } from '@/operations/fetch';\n\nimport {\n mcpError,\n mcpErrorFetch,\n mcpSuccessResponse,\n safeHandler,\n} from './response';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport { mcpFetchRequestSchema } from '@/shared/request/schemas/mcp';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst TOOL_NAME = 'fetch';\n\nexport const registerFetchTool: RegisterTools = props => {\n const { server, wallets, flags } = props;\n\n server.registerTool(\n TOOL_NAME,\n {\n title: DESCRIPTIONS.fetch.mcp,\n description: DESCRIPTIONS.fetch.mcp,\n inputSchema: mcpFetchRequestSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n const fetchResult = await executeFetch(input, {\n surface: TOOL_NAME,\n wallets,\n flags,\n params: input,\n });\n\n if (fetchResult.isErr()) {\n return mcpError(fetchResult);\n }\n\n const { response, paymentInfo } = fetchResult.value;\n\n if (!response.ok) {\n return mcpErrorFetch(TOOL_NAME, response);\n }\n\n const parseResponseResult = await safeParseResponse(TOOL_NAME, response);\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n return mcpSuccessResponse(\n parseResponseResult.value,\n paymentInfo ?? undefined\n );\n })\n );\n};\n","import { getBalances, listAccountsWithBalances } from '@/operations/wallet';\n\nimport { mcpSuccessStructuredJson } from './response';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n const getBalanceToolName = 'get_balance';\n server.registerTool(\n getBalanceToolName,\n {\n title: 'Get Balance',\n description: DESCRIPTIONS.getBalance.mcp,\n },\n async () => {\n const result = await getBalances(getBalanceToolName, wallets, flags);\n return mcpSuccessStructuredJson({\n balance: result.totalBalance,\n });\n }\n );\n\n const listAccountsToolName = 'list_accounts';\n\n server.registerTool(\n listAccountsToolName,\n {\n title: 'Get Accounts',\n description: DESCRIPTIONS.listAccounts.mcp,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async () => {\n const result = await listAccountsWithBalances(\n listAccountsToolName,\n wallets,\n flags\n );\n return mcpSuccessStructuredJson(result);\n }\n );\n};\n","import { mcpSuccessJson, safeHandler } from './response';\n\nimport { log } from '@/shared/log';\nimport { checkEndpoint } from '@/operations/check-endpoint';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport { mcpRequestSchema, mcpBodySchema } from '@/shared/request/schemas/mcp';\n\nimport type { RegisterTools } from '@/server/types';\nimport { RequestMethod } from '@/shared/request/types';\nimport z from 'zod';\n\nconst toolName = 'check_endpoint_schema';\n\nexport const registerCheckEndpointTool: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Check Endpoint Schema',\n description: DESCRIPTIONS.checkEndpointSchema.mcp,\n inputSchema: mcpRequestSchema.extend({\n method: z\n .enum(RequestMethod)\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.method),\n body: mcpBodySchema.describe(TOOL_PARAMS.checkEndpointSchema.body),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n log.info('Querying endpoint', {\n url: input.url,\n method: input.method,\n hasSampleInputBody: !!input.body,\n });\n\n const result = await checkEndpoint(toolName, input, { wallets, flags });\n\n if (!result.found) {\n log.error('[checkEndpoint] failed', {\n surface: toolName,\n url: input.url,\n cause: result.cause,\n message: result.message,\n });\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n if (result.advisories.length === 0) {\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n return mcpSuccessJson({\n url: input.url,\n results: result.advisories,\n });\n })\n );\n};\n","import z from 'zod';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\n\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\nimport { Network } from '@agentcash/networks';\n\nconst SURFACE = 'server:redeem-invite';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n 'redeem_invite',\n {\n title: 'Redeem Invite',\n description: DESCRIPTIONS.redeemInvite.mcp,\n inputSchema: z.object({\n code: z.string().min(1).describe(TOOL_PARAMS.redeemInvite.code),\n }),\n outputSchema: z.object({\n redeemed: z.literal(true),\n amount: z.string().describe(TOOL_PARAMS.redeemInvite.output.amount),\n txHash: z.string().describe(TOOL_PARAMS.redeemInvite.output.txHash),\n }),\n annotations: {\n readOnlyHint: false, // Modifies wallet balance\n destructiveHint: false, // Additive (adds funds), not destructive\n idempotentHint: false, // Same code can't be redeemed twice - second attempt fails\n openWorldHint: true,\n },\n },\n async args => {\n const result = await redeemInviteCode(\n SURFACE,\n { code: args.code },\n flags,\n wallets\n );\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n const { amount, txHash, solanaTxHash, network } = result.value;\n const effectiveTxHash = solanaTxHash ?? txHash;\n const explorerUrl =\n solanaTxHash || network === Network.SOLANA\n ? `https://solscan.io/tx/${effectiveTxHash}`\n : `https://basescan.org/tx/${effectiveTxHash}`;\n\n return mcpSuccessStructuredJson({\n redeemed: true,\n amount: `${amount} USDC`,\n txHash: effectiveTxHash,\n explorerUrl,\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { log } from '@/shared/log';\nimport { submitErrorReport } from '@/operations/report-error';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'report_error';\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Report Error',\n description: DESCRIPTIONS.reportError.mcp,\n inputSchema: z.object({\n tool: z.string().describe(TOOL_PARAMS.reportError.tool),\n resource: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.resource),\n summary: z.string().describe(TOOL_PARAMS.reportError.summary),\n errorMessage: z.string().describe(TOOL_PARAMS.reportError.errorMessage),\n stack: z.string().optional().describe(TOOL_PARAMS.reportError.stack),\n fullReport: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.fullReport),\n }),\n outputSchema: z.object({\n submitted: z.literal(true),\n reportId: z.string().describe(TOOL_PARAMS.reportError.output.reportId),\n message: z.string().describe(TOOL_PARAMS.reportError.output.message),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async input => {\n log.info('Submitting error report', {\n tool: input.tool,\n resource: input.resource,\n summary: input.summary,\n });\n\n const result = await submitErrorReport(\n toolName,\n {\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\n },\n wallets.evm.address,\n flags.dev\n );\n\n if (result.isErr()) {\n log.error('Failed to submit error report', result.error);\n return mcpError(result, { isError: true });\n }\n\n log.info('Error report submitted successfully', {\n reportId: result.value.reportId,\n });\n\n return mcpSuccessStructuredJson(result.value);\n }\n );\n};\n","import { resultFromPromise } from '@agentcash/neverthrow';\n\nimport { log } from '@/shared/log';\nimport {\n discoverResources,\n discoverResourcesSchema,\n} from '@/operations/discover';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport { mcpError, mcpSuccessJson, safeHandler } from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'discover_api_endpoints';\nconst OPENAPI_TRIED_PATHS = '/openapi.json, /.well-known/x402';\n\nexport const registerDiscoveryTools: RegisterTools = ({ server, flags }) => {\n server.registerTool(\n toolName,\n {\n title: 'Discover API Endpoints',\n description: DESCRIPTIONS.discoverApiEndpoints.mcp,\n inputSchema: discoverResourcesSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async args => {\n log.info(`Discovering resources for: ${args.url}`);\n\n const discoverResult = await resultFromPromise(\n 'discover',\n toolName,\n discoverResources(toolName, args, { flags }),\n e => ({\n cause: 'discover' as const,\n message: e instanceof Error ? e.message : String(e),\n })\n );\n\n if (discoverResult.isErr()) {\n return mcpError(discoverResult);\n }\n\n const result = discoverResult.value;\n\n if (result.found) {\n return mcpSuccessJson(result);\n }\n\n if (result.cause === 'not_found') {\n return mcpSuccessJson({\n found: false,\n origin: result.origin,\n error: `No OpenAPI spec found. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n }\n\n return mcpSuccessJson({\n found: false,\n cause: result.cause,\n error: result.message ?? `Failed to fetch OpenAPI spec`,\n hint:\n hintMap[result.cause] ??\n `The server returned an unparseable response. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n })\n );\n};\n\nconst hintMap = {\n timeout: 'The server may be slow or unreachable. Try again later.',\n network:\n 'Could not reach the server. Check the network connection and try again.',\n invalid_input: 'Invalid input. Please check the input and try again.',\n};\n","import { z } from 'zod';\n\nimport { getSettings, setSettings } from '@/shared/settings';\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch/types';\n\nimport { mcpSuccessStructuredJson, safeHandler } from './response';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerSettingsTools: RegisterTools = ({ server }) => {\n server.registerTool(\n 'update_settings',\n {\n title: 'Update Settings',\n description: DESCRIPTIONS.updateSettings.mcp,\n inputSchema: z.object({\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe(\n `Maximum amount (USD) to pay per fetch request. Current default: $${DEFAULT_MAX_AMOUNT}.`\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(input => {\n if (input.maxAmount !== undefined) {\n setSettings({ maxAmount: input.maxAmount });\n }\n\n const settings = getSettings();\n\n return Promise.resolve(mcpSuccessStructuredJson(settings));\n })\n );\n\n server.registerTool(\n 'get_settings',\n {\n title: 'Get Settings',\n description: DESCRIPTIONS.getSettings.mcp,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(() => {\n const settings = getSettings();\n\n return Promise.resolve(mcpSuccessStructuredJson(settings));\n })\n );\n};\n","import { mcpError, mcpSuccessJson, safeHandler } from './response';\n\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport type { RegisterTools } from '@/server/types';\nimport { bridge, bridgeSchema } from '@/operations/bridge';\n\nconst toolName = DESCRIPTIONS.bridge.toolNames.mcp;\n\nexport const registerBridgeTool: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n title: DESCRIPTIONS.bridge.title,\n description: DESCRIPTIONS.bridge.mcp,\n inputSchema: bridgeSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n },\n },\n safeHandler(async input => {\n const result = await bridge({ ...input, ...flags }, wallets);\n\n if (result.isErr()) {\n return mcpError(result);\n }\n\n return mcpSuccessJson(result.value);\n })\n );\n};\n","import { resultFromPromise } from '@agentcash/neverthrow';\n\nimport { log } from '@/shared/log';\nimport { search, searchSchema } from '@/operations/search';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport {\n mcpError,\n mcpErrorJson,\n mcpSuccessJson,\n safeHandler,\n} from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst TOOL_NAME = 'search';\n\nexport const registerSearchTool: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n TOOL_NAME,\n {\n title: 'Search APIs',\n description: DESCRIPTIONS.search.mcp,\n inputSchema: searchSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async args => {\n log.info(`[search] query: ${args.query}`);\n\n const searchResult = await resultFromPromise(\n 'search',\n TOOL_NAME,\n search(args, { surface: TOOL_NAME, wallets, flags }),\n e => ({\n cause: 'search' as const,\n message: e instanceof Error ? e.message : String(e),\n })\n );\n\n if (searchResult.isErr()) {\n return mcpError(searchResult);\n }\n\n const result = searchResult.value;\n\n if (!result.success) {\n return mcpErrorJson({\n error: result.message,\n cause: result.cause,\n details: result.details,\n });\n }\n\n return mcpSuccessJson({\n success: result.success,\n results: result.results,\n });\n })\n );\n};\n","import z from 'zod';\n\nimport { closeMppSession } from '@/operations/sessions/close';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\nimport { zodUrl } from '@/shared/url';\n\nimport { mcpError, mcpSuccessStructuredJson } from './response';\n\nimport type { Hex } from 'viem';\nimport type { RegisterTools } from '@/server/types';\n\nconst SURFACE = 'server:sessions_close';\n\nexport const registerSessionsTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n 'sessions_close',\n {\n title: 'Close MPP Session',\n description: DESCRIPTIONS.closeSession.mcp,\n inputSchema: z.object({\n channelId: z\n .string()\n .regex(\n /^0x[0-9a-fA-F]{64}$/,\n 'channelId must be a 0x-prefixed 32-byte hex string'\n )\n .describe(TOOL_PARAMS.closeSession.channelId),\n url: zodUrl.describe(TOOL_PARAMS.closeSession.url),\n cumulativeAmountRaw: z\n .string()\n .regex(\n /^[0-9]+$/,\n 'cumulativeAmountRaw must be a non-negative integer string'\n )\n .optional()\n .describe(TOOL_PARAMS.closeSession.cumulativeAmountRaw),\n }),\n outputSchema: z.object({\n channelId: z\n .string()\n .describe(TOOL_PARAMS.closeSession.output.channelId),\n cumulativeAmount: z\n .string()\n .describe(TOOL_PARAMS.closeSession.output.cumulativeAmount),\n transactionHash: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.closeSession.output.transactionHash),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async args => {\n const result = await closeMppSession(\n {\n channelId: args.channelId as Hex,\n url: args.url,\n cumulativeAmountRaw: args.cumulativeAmountRaw,\n },\n { surface: SURFACE, wallets, flags }\n );\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n const { channelId, cumulativeAmount, transactionHash } = result.value;\n return mcpSuccessStructuredJson({\n channelId,\n cumulativeAmount,\n ...(transactionHash ? { transactionHash } : {}),\n });\n }\n );\n};\n","import { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\n\ndeclare const __MCP_VERSION__: string | undefined;\n\nfunction getVersion(): string {\n if (typeof __MCP_VERSION__ !== 'undefined') {\n return __MCP_VERSION__;\n }\n // Fallback for dev mode (tsx)\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, '../../../package.json'), 'utf-8')\n ) as { version: string };\n return pkg.version;\n}\n\nexport const MCP_VERSION = getVersion();\n"],"mappings":"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","names":["error","z","z","z","z","toolName","z","toolName","z","z","toolName","TOOL_NAME","z","SURFACE","z","__dirname"]}
@@ -5,10 +5,10 @@ var serverCommand = async (args) => {
5
5
  "MCP server started. If you meant to explore the CLI, run: npx agentcash --help\n"
6
6
  );
7
7
  }
8
- const { startServer } = await import("./server-6FQ4UZMS.js");
8
+ const { startServer } = await import("./server-MO3YMDHB.js");
9
9
  await startServer(args);
10
10
  };
11
11
  export {
12
12
  serverCommand
13
13
  };
14
- //# sourceMappingURL=server-Q4W2J7OE.js.map
14
+ //# sourceMappingURL=server-WJH536CN.js.map
@@ -0,0 +1,74 @@
1
+ import {
2
+ closeMppSession
3
+ } from "./chunk-TX7S7QGG.js";
4
+ import "./chunk-FBGNOXFP.js";
5
+ import "./chunk-RAS5DZPQ.js";
6
+ import {
7
+ getWalletOrExit
8
+ } from "./chunk-7AT3NXJ2.js";
9
+ import "./chunk-F3KGAMIA.js";
10
+ import "./chunk-HTGTKVXB.js";
11
+ import "./chunk-KVSTJRSJ.js";
12
+ import "./chunk-QZCSZB7E.js";
13
+ import {
14
+ errorResponse,
15
+ fromNeverthrowError,
16
+ outputAndExit,
17
+ successResponse
18
+ } from "./chunk-7EBJ4BCH.js";
19
+ import "./chunk-YWNBUUBR.js";
20
+ import "./chunk-ITCDZXBZ.js";
21
+
22
+ // src/cli/commands/sessions.ts
23
+ var SURFACE = "cli:sessions-close";
24
+ var CHANNEL_ID_PATTERN = /^0x[0-9a-fA-F]{64}$/;
25
+ var CUMULATIVE_PATTERN = /^[0-9]+$/;
26
+ var sessionsCloseCommand = async (args) => {
27
+ if (!CHANNEL_ID_PATTERN.test(args.channelId)) {
28
+ return outputAndExit(
29
+ errorResponse({
30
+ code: "INVALID_INPUT",
31
+ message: "channelId must be a 0x-prefixed 32-byte hex string",
32
+ surface: SURFACE,
33
+ cause: "validation"
34
+ }),
35
+ args
36
+ );
37
+ }
38
+ if (args.cumulativeAmountRaw !== void 0 && !CUMULATIVE_PATTERN.test(args.cumulativeAmountRaw)) {
39
+ return outputAndExit(
40
+ errorResponse({
41
+ code: "INVALID_INPUT",
42
+ message: "--cumulative-amount-raw must be a non-negative integer (raw atomic units)",
43
+ surface: SURFACE,
44
+ cause: "validation"
45
+ }),
46
+ args
47
+ );
48
+ }
49
+ const wallets = await getWalletOrExit(args);
50
+ const result = await closeMppSession(
51
+ {
52
+ channelId: args.channelId,
53
+ url: args.url,
54
+ cumulativeAmountRaw: args.cumulativeAmountRaw
55
+ },
56
+ { surface: SURFACE, wallets, flags: args }
57
+ );
58
+ if (result.isErr()) {
59
+ return outputAndExit(fromNeverthrowError(result), args);
60
+ }
61
+ const { channelId, cumulativeAmount, transactionHash } = result.value;
62
+ return outputAndExit(
63
+ successResponse({
64
+ channelId,
65
+ cumulativeAmount,
66
+ ...transactionHash ? { transactionHash } : {}
67
+ }),
68
+ args
69
+ );
70
+ };
71
+ export {
72
+ sessionsCloseCommand
73
+ };
74
+ //# sourceMappingURL=sessions-NUOSJC6M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/commands/sessions.ts"],"sourcesContent":["import {\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n successResponse,\n} from '@/cli/output';\n\nimport { closeMppSession } from '@/operations/sessions/close';\n\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nimport type { Hex } from 'viem';\nimport type { Command } from '@/types';\n\nconst SURFACE = 'cli:sessions-close';\n\nconst CHANNEL_ID_PATTERN = /^0x[0-9a-fA-F]{64}$/;\nconst CUMULATIVE_PATTERN = /^[0-9]+$/;\n\ninterface SessionsCloseArgs {\n channelId: string;\n url: string;\n cumulativeAmountRaw?: string;\n}\n\nexport const sessionsCloseCommand: Command<SessionsCloseArgs> = async args => {\n if (!CHANNEL_ID_PATTERN.test(args.channelId)) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: 'channelId must be a 0x-prefixed 32-byte hex string',\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n if (\n args.cumulativeAmountRaw !== undefined &&\n !CUMULATIVE_PATTERN.test(args.cumulativeAmountRaw)\n ) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message:\n '--cumulative-amount-raw must be a non-negative integer (raw atomic units)',\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n const wallets = await getWalletOrExit(args);\n\n const result = await closeMppSession(\n {\n channelId: args.channelId as Hex,\n url: args.url,\n cumulativeAmountRaw: args.cumulativeAmountRaw,\n },\n { surface: SURFACE, wallets, flags: args }\n );\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), args);\n }\n\n const { channelId, cumulativeAmount, transactionHash } = result.value;\n return outputAndExit(\n successResponse({\n channelId,\n cumulativeAmount,\n ...(transactionHash ? { transactionHash } : {}),\n }),\n args\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcA,IAAM,UAAU;AAEhB,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAQpB,IAAM,uBAAmD,OAAM,SAAQ;AAC5E,MAAI,CAAC,mBAAmB,KAAK,KAAK,SAAS,GAAG;AAC5C,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,MACE,KAAK,wBAAwB,UAC7B,CAAC,mBAAmB,KAAK,KAAK,mBAAmB,GACjD;AACA,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAE1C,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,MACE,WAAW,KAAK;AAAA,MAChB,KAAK,KAAK;AAAA,MACV,qBAAqB,KAAK;AAAA,IAC5B;AAAA,IACA,EAAE,SAAS,SAAS,SAAS,OAAO,KAAK;AAAA,EAC3C;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,IAAI;AAAA,EACxD;AAEA,QAAM,EAAE,WAAW,kBAAkB,gBAAgB,IAAI,OAAO;AAChE,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,MACA,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,IAC/C,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  DEFAULT_MAX_AMOUNT,
3
3
  getSettings,
4
4
  setSettings
5
- } from "./chunk-JX2XE6FD.js";
5
+ } from "./chunk-4TIYIVZF.js";
6
6
  import {
7
7
  outputAndExit,
8
8
  successResponse
@@ -43,4 +43,4 @@ export {
43
43
  settingsGetCommand,
44
44
  settingsSetCommand
45
45
  };
46
- //# sourceMappingURL=settings-RLSKK5RM.js.map
46
+ //# sourceMappingURL=settings-SBL7WIBQ.js.map
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  getWalletInfo
3
- } from "./chunk-YUPRVVFP.js";
3
+ } from "./chunk-4MCPQDKM.js";
4
4
  import "./chunk-ISF2WVEZ.js";
5
5
  import {
6
6
  discoverResources
7
- } from "./chunk-CFSSHSBN.js";
8
- import "./chunk-SFESERJN.js";
9
- import "./chunk-KJCWPVQE.js";
10
- import "./chunk-BFOYXXLG.js";
7
+ } from "./chunk-K3WB4R2P.js";
8
+ import "./chunk-W37JKCLN.js";
9
+ import "./chunk-EM6OE6WL.js";
10
+ import "./chunk-RAS5DZPQ.js";
11
11
  import {
12
12
  getWalletOrExit
13
13
  } from "./chunk-7AT3NXJ2.js";
14
14
  import "./chunk-F3KGAMIA.js";
15
- import "./chunk-NPJV7AMV.js";
15
+ import "./chunk-HTGTKVXB.js";
16
16
  import "./chunk-KVSTJRSJ.js";
17
17
  import "./chunk-FB5CMO3J.js";
18
18
  import "./chunk-U6FRXL3X.js";
19
+ import "./chunk-QZCSZB7E.js";
19
20
  import {
20
21
  outputAndExit,
21
22
  successResponse
22
23
  } from "./chunk-7EBJ4BCH.js";
23
- import "./chunk-QZCSZB7E.js";
24
- import "./chunk-TTAO2EJK.js";
24
+ import "./chunk-YPFBBTA2.js";
25
25
  import "./chunk-YWNBUUBR.js";
26
26
  import "./chunk-ITCDZXBZ.js";
27
27
 
@@ -101,4 +101,4 @@ var tryCommand = async (args) => {
101
101
  export {
102
102
  tryCommand
103
103
  };
104
- //# sourceMappingURL=try-UYLQPTBJ.js.map
104
+ //# sourceMappingURL=try-2P5ZRXRT.js.map
@@ -1,34 +1,34 @@
1
1
  import {
2
2
  installGitHubSkill
3
- } from "./chunk-UCADMHNP.js";
4
- import "./chunk-FVVSNDQR.js";
3
+ } from "./chunk-2E4ZDG2M.js";
5
4
  import {
6
5
  redeemInviteCode
7
- } from "./chunk-MSNAPI5G.js";
6
+ } from "./chunk-BIO4Y27B.js";
7
+ import "./chunk-FVVSNDQR.js";
8
8
  import {
9
9
  getBalances,
10
10
  listAccountsWithAddresses,
11
11
  listAccountsWithBalances
12
- } from "./chunk-YUPRVVFP.js";
12
+ } from "./chunk-4MCPQDKM.js";
13
13
  import "./chunk-ISF2WVEZ.js";
14
- import "./chunk-KJCWPVQE.js";
15
- import "./chunk-BFOYXXLG.js";
14
+ import "./chunk-EM6OE6WL.js";
15
+ import "./chunk-RAS5DZPQ.js";
16
16
  import {
17
17
  getWalletOrExit
18
18
  } from "./chunk-7AT3NXJ2.js";
19
19
  import "./chunk-F3KGAMIA.js";
20
- import "./chunk-NPJV7AMV.js";
20
+ import "./chunk-HTGTKVXB.js";
21
21
  import "./chunk-KVSTJRSJ.js";
22
22
  import "./chunk-U6FRXL3X.js";
23
+ import {
24
+ log,
25
+ safeReadFile
26
+ } from "./chunk-QZCSZB7E.js";
23
27
  import {
24
28
  fromNeverthrowError,
25
29
  outputAndExit,
26
30
  successResponse
27
31
  } from "./chunk-7EBJ4BCH.js";
28
- import {
29
- log,
30
- safeReadFile
31
- } from "./chunk-QZCSZB7E.js";
32
32
  import "./chunk-YWNBUUBR.js";
33
33
  import "./chunk-ITCDZXBZ.js";
34
34
 
@@ -215,4 +215,4 @@ export {
215
215
  listAccountsCommand,
216
216
  walletRedeemCommand
217
217
  };
218
- //# sourceMappingURL=wallet-QOS3FPSF.js.map
218
+ //# sourceMappingURL=wallet-PY4ZDHNZ.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentcash",
3
- "version": "0.14.3",
3
+ "version": "0.15.0",
4
4
  "mcpName": "io.github.Merit-Systems/agentcash",
5
5
  "description": "Generic MCP server for calling x402-protected APIs with automatic payment handling",
6
6
  "type": "module",
@@ -13,7 +13,7 @@
13
13
  "dist"
14
14
  ],
15
15
  "dependencies": {
16
- "@agentcash/discovery": "1.6.3",
16
+ "@agentcash/discovery": "1.7.2",
17
17
  "@clack/prompts": "^0.11.0",
18
18
  "@iarna/toml": "^2.2.5",
19
19
  "@modelcontextprotocol/sdk": "^1.27.0",
@@ -31,9 +31,9 @@
31
31
  "content-type": "^1.0.5",
32
32
  "js-yaml": "^4.1.1",
33
33
  "jsonc-parser": "^3.3.1",
34
- "mppx": "^0.5.10",
34
+ "mppx": "^0.6.27",
35
35
  "open": "^11.0.0",
36
- "viem": "^2.47.6",
36
+ "viem": "^2.50.4",
37
37
  "yargs": "^18.0.0",
38
38
  "zod": "^4.3.6"
39
39
  },
@@ -47,8 +47,8 @@
47
47
  "tsx": "^4.21.0",
48
48
  "typescript": "^5.9.3",
49
49
  "vitest": "^4.0.18",
50
- "@agentcash/bridge": "0.0.2",
51
50
  "@agentcash/balance": "0.0.3",
51
+ "@agentcash/bridge": "0.0.2",
52
52
  "@agentcash/eslint-config": "0.0.1",
53
53
  "@agentcash/networks": "0.0.3",
54
54
  "@agentcash/neverthrow": "1.0.1",
@@ -71,10 +71,10 @@
71
71
  "license": "MIT",
72
72
  "repository": {
73
73
  "type": "git",
74
- "url": "https://github.com/Merit-Systems/agent-cash.git",
74
+ "url": "https://github.com/Merit-Systems/agentcash.git",
75
75
  "directory": "packages/external/mcp"
76
76
  },
77
- "homepage": "https://github.com/Merit-Systems/agent-cash/tree/master/packages/external/mcp",
77
+ "homepage": "https://github.com/Merit-Systems/agentcash/tree/master/packages/external/mcp",
78
78
  "scripts": {
79
79
  "dev": "tsx src/index.ts",
80
80
  "dev:onboard": "tsx src/index.ts onboard",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/neverthrow/fetch/index.ts"],"sourcesContent":["import contentType from 'content-type';\nimport { err, ok, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type z from 'zod';\n\nimport type { BaseError, Error } from '@agentcash/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\nimport { safeParse } from '../parse';\n\nconst DEFAULT_USER_FETCH_TIMEOUT = 30_000;\n\nconst IMAGE_TYPES = new Set([\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'image/tiff',\n 'image/bmp',\n 'image/ico',\n]);\n\nconst errorType = 'fetch';\n\nexport const fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchOk = <T>(value: T) => ok(value);\n\nexport const fetchHttpErr = (surface: string, response: Response) =>\n fetchErr(surface, {\n cause: 'http' as const,\n statusCode: response.status,\n message: response.statusText,\n response,\n });\n\nexport const safeFetch = (\n surface: string,\n request: Request,\n timeout = DEFAULT_USER_FETCH_TIMEOUT\n) => {\n const signal = AbortSignal.timeout(timeout);\n\n return resultFromPromise(\n errorType,\n surface,\n fetch(request, ...(signal ? [{ signal }] : [])),\n error => {\n if (\n error instanceof DOMException &&\n (error.name === 'TimeoutError' || error.name === 'AbortError')\n ) {\n return {\n cause: 'timeout',\n message: timeout\n ? `Request timed out after ${timeout}ms. You can increase the timeout by passing a larger value in the 'timeout' parameter.`\n : 'Request was aborted',\n } as BaseFetchError;\n }\n\n return {\n cause: 'network',\n message: error instanceof Error ? error.message : 'Network error',\n } as BaseFetchError;\n }\n );\n};\n\nexport const safeFetchJson = <T>(\n surface: string,\n request: Request,\n schema: z.ZodSchema<T>,\n timeout?: number\n) => {\n return safeFetch(surface, request, timeout)\n .andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(errorType, surface, response.json(), () => ({\n cause: 'parse' as const,\n message: 'Could not parse JSON from response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n }));\n })\n .andThen(data => safeParse(surface, schema, data));\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const header = response.headers.get('content-type');\n const { type: mimeType } = header\n ? contentType.parse(header)\n : { type: 'application/octet-stream' };\n\n switch (mimeType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n }\n\n if (IMAGE_TYPES.has(mimeType)) {\n return {\n type: 'image' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('audio/')) {\n return {\n type: 'audio' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('video/')) {\n return {\n type: 'video' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('text/')) {\n return { type: 'text' as const, data: await response.text() };\n }\n\n throw new Error(`Unsupported content type: ${header}`);\n })(),\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n};\n\nexport const isFetchError = (error: Error<BaseError>): error is FetchError => {\n return error.type === errorType;\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/operations/bridge.ts","../../src/shared/network.ts","../../../../internal/bridge/src/quote.ts","../../../../internal/bridge/src/client.ts","../../../../internal/bridge/src/execute.ts","../../../../internal/bridge/src/relay-svm-wallet-adapter.ts","../../src/shared/neverthrow/bridge/index.ts"],"sourcesContent":["import z from 'zod';\n\nimport { createWalletClient, http } from 'viem';\n\nimport { EVM_CONFIGS, Network, networkSchema } from '@agentcash/networks';\n\nimport { toTypedNetworkAddress } from '@/shared/network';\nimport { TOOL_PARAMS } from '@/shared/descriptions';\nimport {\n safeExecuteQuote,\n safeExecuteSolana,\n safeGetBridgeDepositQuote,\n} from '@/shared/neverthrow/bridge';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\n\nimport type { Wallets } from '@/wallet';\nimport type { Execute } from '@agentcash/bridge';\nimport type { GlobalFlags } from '@/types';\n\nexport const bridgeSchema = z\n .object({\n from: networkSchema.describe(TOOL_PARAMS.bridge.from),\n to: networkSchema.describe(TOOL_PARAMS.bridge.to),\n amount: z.number().positive().describe(TOOL_PARAMS.bridge.amount),\n })\n .refine(({ from, to }) => from !== to, {\n message: 'From and to networks cannot be the same',\n });\n\nexport type BridgeInput = z.input<typeof bridgeSchema>;\n\nexport const bridge = async (\n args: GlobalFlags<z.infer<typeof bridgeSchema>>,\n wallets: Wallets\n) => {\n const { from, to, amount } = args;\n\n if (from === Network.SOLANA) {\n const request = new Request(`${getBaseUrl(args.dev)}/api/bridge/solana`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n fromAddress: wallets.svm.address,\n to: toTypedNetworkAddress(to, wallets),\n amount,\n }),\n });\n const response = await safeFetchJson(\n 'bridge',\n request,\n z.object({\n success: z.literal(true),\n partiallySignedTransaction: z.string(),\n quote: z.custom<Execute>(),\n })\n );\n\n if (response.isErr()) {\n return response;\n }\n\n const { partiallySignedTransaction, quote } = response.value;\n\n const executeResult = await safeExecuteSolana('bridge', {\n quote,\n signer: wallets.svm,\n partiallySignedTransaction,\n });\n\n return executeResult.map(\n result => result.data.details ?? { success: true }\n );\n } else {\n const quote = await safeGetBridgeDepositQuote('bridge', {\n from: toTypedNetworkAddress(from, wallets),\n to: toTypedNetworkAddress(to, wallets),\n amount,\n });\n\n if (quote.isErr()) {\n return quote;\n }\n\n const executeResult = await safeExecuteQuote(\n 'bridge',\n quote.value,\n createWalletClient({\n account: wallets.evm,\n chain: EVM_CONFIGS[from].chain,\n transport: http(\n from === Network.TEMPO\n ? 'https://eng:acard-melody-fashion-finish@rpc.mainnet.tempo.xyz'\n : undefined\n ),\n })\n );\n\n return executeResult.map(\n result => result.data.details ?? { success: true }\n );\n }\n};\n","import { Network } from '@agentcash/networks';\n\nimport type { TypedNetworkAddress } from '@agentcash/networks';\nimport type { Wallets } from '@/wallet';\n\nexport const toTypedNetworkAddress = (\n network: Network,\n wallets: Wallets\n): TypedNetworkAddress => {\n if (network === Network.SOLANA) {\n return {\n address: wallets.svm.address,\n network: Network.SOLANA,\n };\n }\n return {\n address: wallets.evm.address,\n network: network,\n };\n};\n","import {\n Network,\n solanaAddressSchema,\n typedAddressSchema,\n usdc,\n} from '@agentcash/networks';\nimport z from 'zod';\n\nimport { relayClient, relayChainId } from './client';\n\nexport const getBridgeDepositQuoteSchema = z.object({\n from: typedAddressSchema,\n to: typedAddressSchema,\n amount: z.number(),\n depositFeePayer: solanaAddressSchema.optional(),\n});\n\nexport const getBridgeDepositQuote = async (\n input: z.input<typeof getBridgeDepositQuoteSchema>\n) => {\n const parseResult = getBridgeDepositQuoteSchema.safeParse(input);\n if (!parseResult.success) {\n throw new Error('Invalid input');\n }\n\n const { from, to, amount, depositFeePayer } = parseResult.data;\n\n const fromCurrency = usdc(from.network);\n const toCurrency = usdc(to.network);\n\n return await relayClient.actions.getQuote({\n chainId: relayChainId(from.network),\n toChainId: relayChainId(to.network),\n currency: fromCurrency.address,\n toCurrency: toCurrency.address,\n tradeType: 'EXACT_INPUT',\n user: from.address,\n recipient: to.address,\n amount: (amount * 10 ** fromCurrency.decimals).toString(),\n options: {\n refundTo: from.address,\n depositFeePayer:\n from.network === Network.SOLANA ? depositFeePayer : undefined,\n usePermit: from.network !== Network.SOLANA,\n },\n });\n};\n","import {\n createClient,\n convertViemChainToRelayChain,\n MAINNET_RELAY_API,\n} from '@relayprotocol/relay-sdk';\n\nimport { Network, chainId, EVM_CONFIGS } from '@agentcash/networks';\n\nimport type { RelayChain } from '@relayprotocol/relay-sdk';\n\nexport const SOLANA_RELAY_CHAIN: RelayChain = {\n id: 792703809,\n name: 'solana',\n displayName: 'Solana',\n httpRpcUrl: 'https://api.mainnet-beta.solana.com',\n wsRpcUrl: '',\n explorerUrl: 'https://solscan.io',\n depositEnabled: true,\n tokenSupport: 'All',\n currency: {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n supportsBridging: true,\n },\n featuredTokens: [\n {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://upload.wikimedia.org/wikipedia/en/b/b9/Solana_logo.png',\n },\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694',\n },\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://coin-images.coingecko.com/coins/images/325/large/Tether.png?1696501661',\n },\n },\n ],\n erc20Currencies: [\n {\n id: 'pengu',\n symbol: 'PENGU',\n name: 'Pudgy Penguins',\n address: '2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n supportsBridging: true,\n supportsPermit: true,\n withdrawalFee: 2.25,\n depositFee: 2,\n surgeEnabled: false,\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 5,\n depositFee: 2,\n surgeEnabled: false,\n },\n {\n id: 'cash',\n symbol: 'CASH',\n name: 'CASH',\n address: 'CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n {\n id: 'pyusd',\n symbol: 'PYUSD',\n name: 'PayPal USD',\n address: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n ],\n solverCurrencies: [\n {\n id: 'pengu',\n symbol: 'PENGU',\n name: 'Pudgy Penguins',\n address: '2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv',\n decimals: 6,\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n },\n {\n id: 'cash',\n symbol: 'CASH',\n name: 'CASH',\n address: 'CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH',\n decimals: 6,\n },\n {\n id: 'pyusd',\n symbol: 'PYUSD',\n name: 'PayPal USD',\n address: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo',\n decimals: 6,\n },\n {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n },\n ],\n iconUrl: 'https://assets.relay.link/icons/792703809/light.png',\n vmType: 'svm',\n baseChainId: 1,\n tags: [],\n protocol: {\n v2: {\n chainId: 'solana',\n depository: '99vQwtBwYtrqqD9YSXbdum3KBdxPAVxYTaQ3cfnJSrN2',\n },\n },\n};\n\nexport const relayChainId = (network: Network) => {\n switch (network) {\n case Network.BASE:\n case Network.TEMPO:\n return chainId(network);\n case Network.SOLANA:\n return SOLANA_RELAY_CHAIN.id;\n }\n};\n\nexport const relayClient = createClient({\n baseApiUrl: MAINNET_RELAY_API,\n source: 'https://agentcash.dev',\n chains: [\n ...Object.values(EVM_CONFIGS).map(config =>\n convertViemChainToRelayChain(config.chain)\n ),\n SOLANA_RELAY_CHAIN,\n ],\n});\n","import { adaptViemWallet } from '@relayprotocol/relay-sdk';\n\nimport { relayClient } from './client';\nimport type { AdaptSolanaKitWalletParams } from './relay-svm-wallet-adapter';\nimport { adaptSolanaKitWallet } from './relay-svm-wallet-adapter';\n\nimport type { WalletClient } from 'viem';\nimport type { Execute } from '@relayprotocol/relay-sdk';\n\nexport const executeQuote = async (quote: Execute, account: WalletClient) => {\n return await relayClient.actions.execute({\n wallet: adaptViemWallet(account),\n quote,\n });\n};\n\nexport interface ExecuteSolanaParams extends AdaptSolanaKitWalletParams {\n quote: Execute;\n}\n\nexport const executeSolana = async ({\n quote,\n ...rest\n}: ExecuteSolanaParams) => {\n return await relayClient.actions.execute({\n wallet: adaptSolanaKitWallet(rest),\n quote,\n });\n};\n","import {\n assertIsSendableTransaction,\n assertIsTransactionWithinSizeLimit,\n createSolanaRpc,\n getBase64EncodedWireTransaction,\n getCompiledTransactionMessageDecoder,\n getSignatureFromTransaction,\n getTransactionDecoder,\n getTransactionLifetimeConstraintFromCompiledTransactionMessage,\n isTransactionModifyingSigner,\n isTransactionPartialSigner,\n isTransactionSendingSigner,\n} from '@solana/kit';\nimport { LogLevel, getClient } from '@relayprotocol/relay-sdk';\n\nimport { SOLANA_RELAY_CHAIN } from './client';\n\nimport type { AdaptedWallet } from '@relayprotocol/relay-sdk';\nimport type {\n ClusterUrl,\n Signature,\n Transaction,\n TransactionSigner,\n TransactionWithLifetime,\n TransactionWithinSizeLimit,\n} from '@solana/kit';\n\nconst BASE58_SIGNATURE_REGEX = /^[1-9A-HJ-NP-Za-km-z]+$/;\nconst DEFAULT_CONFIRM_TIMEOUT_MS = 120_000;\nconst DEFAULT_CONFIRM_POLL_MS = 2_000;\n\nexport interface AdaptSolanaKitWalletParams {\n signer: TransactionSigner;\n partiallySignedTransaction: string;\n rpcUrl?: ClusterUrl;\n}\n\ntype SignableTransaction = Transaction &\n TransactionWithLifetime &\n TransactionWithinSizeLimit;\n\nconst assertBase58TransactionSignature = (signature: string | undefined) => {\n if (\n typeof signature !== 'string' ||\n signature.length === 0 ||\n !BASE58_SIGNATURE_REGEX.test(signature)\n ) {\n throw new Error('Invalid Solana signature: expected base58.');\n }\n};\n\nconst sleep = async (ms: number) =>\n await new Promise(resolve => setTimeout(resolve, ms));\n\nasync function decodePartiallySignedTransaction(\n partiallySignedTransaction: string\n): Promise<SignableTransaction> {\n const decodedTransaction = getTransactionDecoder().decode(\n Uint8Array.from(Buffer.from(partiallySignedTransaction, 'base64'))\n );\n const compiledTransactionMessage =\n getCompiledTransactionMessageDecoder().decode(\n decodedTransaction.messageBytes\n );\n const lifetimeConstraint =\n await getTransactionLifetimeConstraintFromCompiledTransactionMessage(\n compiledTransactionMessage\n );\n const transactionWithLifetime = {\n ...decodedTransaction,\n lifetimeConstraint,\n };\n\n assertIsTransactionWithinSizeLimit(transactionWithLifetime);\n\n return transactionWithLifetime;\n}\n\nasync function signTransactionWithSigner(\n transaction: SignableTransaction,\n signer: TransactionSigner\n): Promise<SignableTransaction> {\n if (isTransactionModifyingSigner(signer)) {\n const [signedTransaction] = await signer.modifyAndSignTransactions([\n transaction,\n ]);\n\n if (!signedTransaction) {\n throw new Error('Modifying signer did not return a signed transaction');\n }\n\n return signedTransaction;\n }\n\n if (isTransactionPartialSigner(signer)) {\n const [signatureDictionary] = await signer.signTransactions([transaction]);\n\n if (!signatureDictionary) {\n throw new Error('Transaction signer did not return signatures');\n }\n\n return {\n ...transaction,\n signatures: Object.freeze({\n ...transaction.signatures,\n ...signatureDictionary,\n }),\n };\n }\n\n if (isTransactionSendingSigner(signer)) {\n throw new Error(\n 'TransactionSendingSigner is not supported by Relay Solana adapter'\n );\n }\n\n throw new Error(\n 'Unsupported Solana transaction signer provided to Relay adapter'\n );\n}\n\nexport const adaptSolanaKitWallet = ({\n rpcUrl = SOLANA_RELAY_CHAIN.httpRpcUrl as ClusterUrl,\n signer,\n partiallySignedTransaction,\n}: AdaptSolanaKitWalletParams): AdaptedWallet => {\n const rpc = createSolanaRpc(rpcUrl);\n return {\n vmType: 'svm',\n getChainId: () => Promise.resolve(SOLANA_RELAY_CHAIN.id),\n address: () => Promise.resolve(signer.address),\n handleSignMessageStep: () => {\n throw new Error('Message signing not implemented for Solana');\n },\n handleSendTransactionStep: async () => {\n const client = getClient();\n const decodedTransaction = await decodePartiallySignedTransaction(\n partiallySignedTransaction\n );\n const signedTransaction = await signTransactionWithSigner(\n decodedTransaction,\n signer\n );\n\n assertIsSendableTransaction(signedTransaction);\n const wireTransaction =\n getBase64EncodedWireTransaction(signedTransaction);\n const signature = getSignatureFromTransaction(signedTransaction);\n\n await rpc\n .sendTransaction(wireTransaction, {\n encoding: 'base64',\n skipPreflight: false,\n preflightCommitment: 'confirmed',\n })\n .send();\n\n assertBase58TransactionSignature(signature);\n\n client.log(\n ['Transaction Signature obtained', { signature }],\n LogLevel.Verbose\n );\n\n return signature;\n },\n handleConfirmTransactionStep: async txHash => {\n assertBase58TransactionSignature(txHash);\n\n const deadline = Date.now() + DEFAULT_CONFIRM_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const { value: statuses } = await rpc\n .getSignatureStatuses([txHash as Signature])\n .send();\n\n const status = statuses[0];\n\n if (status) {\n if (status.err) {\n throw new Error(\n `Transaction failed: ${JSON.stringify(status.err)}`\n );\n }\n\n if (\n status.confirmationStatus === 'confirmed' ||\n status.confirmationStatus === 'finalized'\n ) {\n return {\n blockHash: status.slot.toString(),\n blockNumber: Number(status.slot),\n txHash,\n };\n }\n }\n\n await sleep(DEFAULT_CONFIRM_POLL_MS);\n }\n\n throw new Error(\n `Transaction not confirmed within ${DEFAULT_CONFIRM_TIMEOUT_MS}ms: ${txHash}`\n );\n },\n switchChain: () => {\n throw new Error('Switching chains not implemented for Solana');\n },\n };\n};\n","import {\n executeQuote,\n executeSolana,\n getBridgeDepositQuote,\n} from '@agentcash/bridge';\nimport { err, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { BaseBridgeError } from './types';\n\nconst errorType = 'bridge';\n\nexport const bridgeErr = (surface: string, error: BaseBridgeError) =>\n err(errorType, surface, error);\n\nconst bridgeResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseBridgeError\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst getErrorMessage = (error: unknown, fallback: string) => {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.length > 0) {\n return error;\n }\n\n return fallback;\n};\n\nexport const safeGetBridgeDepositQuote = (\n surface: string,\n ...args: Parameters<typeof getBridgeDepositQuote>\n) =>\n bridgeResultFromPromise(surface, getBridgeDepositQuote(...args), error => {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to get bridge deposit quote'\n );\n\n return {\n cause: 'get_bridge_deposit_quote',\n errorMessage,\n message: `Failed to get bridge deposit quote: ${errorMessage}`,\n };\n });\n\nexport const safeExecuteQuote = (\n surface: string,\n ...args: Parameters<typeof executeQuote>\n) =>\n bridgeResultFromPromise(surface, executeQuote(...args), error => {\n const errorMessage = getErrorMessage(error, 'Failed to execute quote');\n\n return {\n cause: 'execute_quote',\n errorMessage,\n message: `Failed to execute quote: ${errorMessage}`,\n };\n });\n\nexport const safeExecuteSolana = (\n surface: string,\n ...args: Parameters<typeof executeSolana>\n) =>\n bridgeResultFromPromise(surface, executeSolana(...args), error => {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to execute Solana bridge transaction'\n );\n\n return {\n cause: 'execute_solana',\n errorMessage,\n message: `Failed to execute Solana bridge transaction: ${errorMessage}`,\n };\n });\n"],"mappings":"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","names":["z","z"]}