@t402/mcp 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +302 -26
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/index.d.ts +12 -0
- package/dist/cjs/server/index.js +302 -26
- package/dist/cjs/server/index.js.map +1 -1
- package/dist/cjs/tools/index.d.ts +179 -1
- package/dist/cjs/tools/index.js +283 -25
- package/dist/cjs/tools/index.js.map +1 -1
- package/dist/esm/{chunk-3FGPOVUZ.mjs → chunk-3PMBXSJ3.mjs} +51 -3
- package/dist/esm/chunk-3PMBXSJ3.mjs.map +1 -0
- package/dist/esm/{chunk-RDQ7AMR4.mjs → chunk-B7X7H6NV.mjs} +275 -27
- package/dist/esm/chunk-B7X7H6NV.mjs.map +1 -0
- package/dist/esm/index.d.mts +1 -0
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/server/index.d.mts +12 -0
- package/dist/esm/server/index.mjs +2 -2
- package/dist/esm/tools/index.d.mts +179 -1
- package/dist/esm/tools/index.mjs +21 -1
- package/package.json +4 -5
- package/dist/esm/chunk-3FGPOVUZ.mjs.map +0 -1
- package/dist/esm/chunk-RDQ7AMR4.mjs.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ERC8004_TOOL_DEFINITIONS,
|
|
2
3
|
TON_BRIDGE_TOOLS,
|
|
3
4
|
TOOL_DEFINITIONS,
|
|
4
5
|
UNIFIED_TOOL_DEFINITIONS,
|
|
@@ -6,9 +7,15 @@ import {
|
|
|
6
7
|
__publicField,
|
|
7
8
|
autoPayInputSchema,
|
|
8
9
|
bridgeInputSchema,
|
|
10
|
+
erc8004CheckReputationInputSchema,
|
|
11
|
+
erc8004ResolveAgentInputSchema,
|
|
12
|
+
erc8004VerifyWalletInputSchema,
|
|
9
13
|
executeAutoPay,
|
|
10
14
|
executeAutoPayDemo,
|
|
11
15
|
executeBridge,
|
|
16
|
+
executeErc8004CheckReputation,
|
|
17
|
+
executeErc8004ResolveAgent,
|
|
18
|
+
executeErc8004VerifyWallet,
|
|
12
19
|
executeGetAllBalances,
|
|
13
20
|
executeGetBalance,
|
|
14
21
|
executeGetBridgeFee,
|
|
@@ -32,6 +39,9 @@ import {
|
|
|
32
39
|
formatBalanceResult,
|
|
33
40
|
formatBridgeFeeResult,
|
|
34
41
|
formatBridgeResult,
|
|
42
|
+
formatErc8004CheckReputationResult,
|
|
43
|
+
formatErc8004ResolveAgentResult,
|
|
44
|
+
formatErc8004VerifyWalletResult,
|
|
35
45
|
formatGaslessPaymentResult,
|
|
36
46
|
formatPaymentPlanResult,
|
|
37
47
|
formatPaymentResult,
|
|
@@ -51,7 +61,7 @@ import {
|
|
|
51
61
|
wdkGetWalletInputSchema,
|
|
52
62
|
wdkSwapInputSchema,
|
|
53
63
|
wdkTransferInputSchema
|
|
54
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-B7X7H6NV.mjs";
|
|
55
65
|
|
|
56
66
|
// src/server/t402Server.ts
|
|
57
67
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -108,7 +118,7 @@ var T402McpServer = class {
|
|
|
108
118
|
* Get all tool definitions (base + WDK if configured + unified if enabled + TON bridge if registered)
|
|
109
119
|
*/
|
|
110
120
|
getToolDefinitions() {
|
|
111
|
-
const tools = { ...TOOL_DEFINITIONS };
|
|
121
|
+
const tools = { ...TOOL_DEFINITIONS, ...ERC8004_TOOL_DEFINITIONS };
|
|
112
122
|
if (this.wdk || this.config.demoMode) {
|
|
113
123
|
Object.assign(tools, WDK_TOOL_DEFINITIONS);
|
|
114
124
|
}
|
|
@@ -161,6 +171,13 @@ var T402McpServer = class {
|
|
|
161
171
|
return await this.handleSmartPay(args);
|
|
162
172
|
case "t402/paymentPlan":
|
|
163
173
|
return await this.handlePaymentPlan(args);
|
|
174
|
+
// ERC-8004 tools
|
|
175
|
+
case "erc8004/resolveAgent":
|
|
176
|
+
return await this.handleErc8004ResolveAgent(args);
|
|
177
|
+
case "erc8004/checkReputation":
|
|
178
|
+
return await this.handleErc8004CheckReputation(args);
|
|
179
|
+
case "erc8004/verifyWallet":
|
|
180
|
+
return await this.handleErc8004VerifyWallet(args);
|
|
164
181
|
// TON bridge tools
|
|
165
182
|
case "ton/getBalance":
|
|
166
183
|
case "ton/transfer":
|
|
@@ -386,6 +403,37 @@ var T402McpServer = class {
|
|
|
386
403
|
content: [{ type: "text", text: formatPaymentPlanResult(result) }]
|
|
387
404
|
};
|
|
388
405
|
}
|
|
406
|
+
// ---- ERC-8004 Tool Handlers ----
|
|
407
|
+
/**
|
|
408
|
+
* Handle erc8004/resolveAgent
|
|
409
|
+
*/
|
|
410
|
+
async handleErc8004ResolveAgent(args) {
|
|
411
|
+
const input = erc8004ResolveAgentInputSchema.parse(args);
|
|
412
|
+
const result = await executeErc8004ResolveAgent(input, this.config.rpcUrls);
|
|
413
|
+
return {
|
|
414
|
+
content: [{ type: "text", text: formatErc8004ResolveAgentResult(result) }]
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Handle erc8004/checkReputation
|
|
419
|
+
*/
|
|
420
|
+
async handleErc8004CheckReputation(args) {
|
|
421
|
+
const input = erc8004CheckReputationInputSchema.parse(args);
|
|
422
|
+
const result = await executeErc8004CheckReputation(input, this.config.rpcUrls);
|
|
423
|
+
return {
|
|
424
|
+
content: [{ type: "text", text: formatErc8004CheckReputationResult(result) }]
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Handle erc8004/verifyWallet
|
|
429
|
+
*/
|
|
430
|
+
async handleErc8004VerifyWallet(args) {
|
|
431
|
+
const input = erc8004VerifyWalletInputSchema.parse(args);
|
|
432
|
+
const result = await executeErc8004VerifyWallet(input, this.config.rpcUrls);
|
|
433
|
+
return {
|
|
434
|
+
content: [{ type: "text", text: formatErc8004VerifyWalletResult(result) }]
|
|
435
|
+
};
|
|
436
|
+
}
|
|
389
437
|
// ---- TON Bridge Tool Handler ----
|
|
390
438
|
/**
|
|
391
439
|
* Handle TON bridge tool calls
|
|
@@ -467,4 +515,4 @@ export {
|
|
|
467
515
|
createT402McpServer,
|
|
468
516
|
loadConfigFromEnv
|
|
469
517
|
};
|
|
470
|
-
//# sourceMappingURL=chunk-
|
|
518
|
+
//# sourceMappingURL=chunk-3PMBXSJ3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/t402Server.ts"],"sourcesContent":["/**\n * t402 MCP Server - Main server implementation\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'\nimport type { McpServerConfig, SupportedNetwork } from '../types.js'\nimport {\n TOOL_DEFINITIONS,\n WDK_TOOL_DEFINITIONS,\n UNIFIED_TOOL_DEFINITIONS,\n executeGetBalance,\n formatBalanceResult,\n getBalanceInputSchema,\n executeGetAllBalances,\n formatAllBalancesResult,\n getAllBalancesInputSchema,\n executePay,\n formatPaymentResult,\n payInputSchema,\n executePayGasless,\n formatGaslessPaymentResult,\n payGaslessInputSchema,\n executeGetBridgeFee,\n formatBridgeFeeResult,\n getBridgeFeeInputSchema,\n executeBridge,\n formatBridgeResult,\n bridgeInputSchema,\n // WDK tools\n wdkGetWalletInputSchema,\n executeWdkGetWallet,\n executeWdkGetWalletDemo,\n formatWdkWalletResult,\n wdkGetBalancesInputSchema,\n executeWdkGetBalances,\n executeWdkGetBalancesDemo,\n formatWdkBalancesResult,\n wdkTransferInputSchema,\n executeWdkTransfer,\n executeWdkTransferDemo,\n formatWdkTransferResult,\n wdkSwapInputSchema,\n executeWdkSwap,\n executeWdkSwapDemo,\n formatWdkSwapResult,\n autoPayInputSchema,\n executeAutoPay,\n executeAutoPayDemo,\n formatAutoPayResult,\n // Unified tools\n smartPayInputSchema,\n executeSmartPay,\n executeSmartPayDemo,\n formatSmartPayResult,\n paymentPlanInputSchema,\n executePaymentPlan,\n executePaymentPlanDemo,\n formatPaymentPlanResult,\n // TON bridge tools\n TON_BRIDGE_TOOLS,\n executeTonBridgeTool,\n type TonMcpBridgeConfig,\n // ERC-8004 tools\n ERC8004_TOOL_DEFINITIONS,\n erc8004ResolveAgentInputSchema,\n executeErc8004ResolveAgent,\n formatErc8004ResolveAgentResult,\n erc8004CheckReputationInputSchema,\n executeErc8004CheckReputation,\n formatErc8004CheckReputationResult,\n erc8004VerifyWalletInputSchema,\n executeErc8004VerifyWallet,\n formatErc8004VerifyWalletResult,\n} from '../tools/index.js'\nimport type { T402WDK } from '@t402/wdk'\n\n/**\n * t402 MCP Server\n *\n * Provides payment tools for AI agents via the Model Context Protocol.\n * When a WDK seed phrase is configured, additional wallet management tools are available.\n */\nexport class T402McpServer {\n private server: Server\n private config: McpServerConfig\n private wdk: T402WDK | null = null\n\n constructor(config: McpServerConfig = {}) {\n this.config = config\n this.server = new Server(\n {\n name: 't402',\n version: '1.0.0',\n },\n {\n capabilities: {\n tools: {},\n },\n },\n )\n\n this.setupHandlers()\n }\n\n /**\n * Initialize the WDK instance from seed phrase\n */\n async initWdk(): Promise<void> {\n if (!this.config.seedPhrase) return\n\n try {\n const { T402WDK } = await import('@t402/wdk')\n const rpcUrls: Record<string, string> = {}\n\n if (this.config.rpcUrls) {\n for (const [network, url] of Object.entries(this.config.rpcUrls)) {\n if (url) rpcUrls[network] = url\n }\n }\n\n this.wdk = new T402WDK(this.config.seedPhrase, rpcUrls)\n } catch {\n console.error('Warning: Failed to initialize WDK. WDK tools will not be available.')\n }\n }\n\n /** TON MCP bridge configuration */\n private tonBridgeConfig: TonMcpBridgeConfig | null = null\n\n /**\n * Register TON bridge tools\n *\n * Enables AI agents to use @ton/mcp tools through the t402 MCP server.\n */\n registerTonBridge(config: TonMcpBridgeConfig): void {\n this.tonBridgeConfig = config\n }\n\n /**\n * Get all tool definitions (base + WDK if configured + unified if enabled + TON bridge if registered)\n */\n private getToolDefinitions() {\n const tools = { ...TOOL_DEFINITIONS, ...ERC8004_TOOL_DEFINITIONS }\n if (this.wdk || this.config.demoMode) {\n Object.assign(tools, WDK_TOOL_DEFINITIONS)\n }\n if (this.config.unifiedMode && (this.wdk || this.config.demoMode)) {\n Object.assign(tools, UNIFIED_TOOL_DEFINITIONS)\n }\n if (this.tonBridgeConfig) {\n Object.assign(tools, TON_BRIDGE_TOOLS)\n }\n return tools\n }\n\n /**\n * Set up MCP request handlers\n */\n private setupHandlers(): void {\n // List available tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: Object.values(this.getToolDefinitions()),\n }\n })\n\n // Handle tool calls\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params\n\n try {\n switch (name) {\n case 't402/getBalance':\n return await this.handleGetBalance(args)\n\n case 't402/getAllBalances':\n return await this.handleGetAllBalances(args)\n\n case 't402/pay':\n return await this.handlePay(args)\n\n case 't402/payGasless':\n return await this.handlePayGasless(args)\n\n case 't402/getBridgeFee':\n return await this.handleGetBridgeFee(args)\n\n case 't402/bridge':\n return await this.handleBridge(args)\n\n // WDK tools\n case 'wdk/getWallet':\n return await this.handleWdkGetWallet(args)\n\n case 'wdk/getBalances':\n return await this.handleWdkGetBalances(args)\n\n case 'wdk/transfer':\n return await this.handleWdkTransfer(args)\n\n case 'wdk/swap':\n return await this.handleWdkSwap(args)\n\n case 't402/autoPay':\n return await this.handleAutoPay(args)\n\n // Unified tools\n case 't402/smartPay':\n return await this.handleSmartPay(args)\n\n case 't402/paymentPlan':\n return await this.handlePaymentPlan(args)\n\n // ERC-8004 tools\n case 'erc8004/resolveAgent':\n return await this.handleErc8004ResolveAgent(args)\n\n case 'erc8004/checkReputation':\n return await this.handleErc8004CheckReputation(args)\n\n case 'erc8004/verifyWallet':\n return await this.handleErc8004VerifyWallet(args)\n\n // TON bridge tools\n case 'ton/getBalance':\n case 'ton/transfer':\n case 'ton/getJettonBalance':\n case 'ton/swapJettons':\n case 'ton/getTransactionStatus':\n return await this.handleTonBridgeTool(name, args)\n\n default:\n throw new Error(`Unknown tool: ${name}`)\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: 'text' as const,\n text: `Error: ${message}`,\n },\n ],\n isError: true,\n }\n }\n })\n }\n\n /**\n * Handle t402/getBalance\n */\n private async handleGetBalance(args: unknown) {\n const input = getBalanceInputSchema.parse(args)\n const result = await executeGetBalance(input, this.config.rpcUrls)\n return {\n content: [\n {\n type: 'text' as const,\n text: formatBalanceResult(result),\n },\n ],\n }\n }\n\n /**\n * Handle t402/getAllBalances\n */\n private async handleGetAllBalances(args: unknown) {\n const input = getAllBalancesInputSchema.parse(args)\n const result = await executeGetAllBalances(input, this.config.rpcUrls)\n return {\n content: [\n {\n type: 'text' as const,\n text: formatAllBalancesResult(result),\n },\n ],\n }\n }\n\n /**\n * Handle t402/pay\n */\n private async handlePay(args: unknown) {\n if (!this.config.privateKey && !this.config.demoMode) {\n throw new Error(\n 'Private key not configured. Set T402_PRIVATE_KEY environment variable or enable demo mode.',\n )\n }\n\n const input = payInputSchema.parse(args)\n const result = await executePay(input, {\n privateKey: this.config.privateKey || '0x',\n rpcUrl: this.config.rpcUrls?.[input.network as SupportedNetwork],\n demoMode: this.config.demoMode,\n })\n\n return {\n content: [\n {\n type: 'text' as const,\n text: formatPaymentResult(result),\n },\n ],\n }\n }\n\n /**\n * Handle t402/payGasless\n */\n private async handlePayGasless(args: unknown) {\n if (!this.config.privateKey && !this.config.demoMode) {\n throw new Error(\n 'Private key not configured. Set T402_PRIVATE_KEY environment variable or enable demo mode.',\n )\n }\n\n if (!this.config.bundlerUrl && !this.config.demoMode) {\n throw new Error(\n 'Bundler URL not configured. Set T402_BUNDLER_URL environment variable or enable demo mode.',\n )\n }\n\n if (!this.config.paymasterUrl && !this.config.demoMode) {\n throw new Error(\n 'Paymaster URL not configured. Set T402_PAYMASTER_URL environment variable or enable demo mode.',\n )\n }\n\n const input = payGaslessInputSchema.parse(args)\n const result = await executePayGasless(input, {\n privateKey: this.config.privateKey || '0x',\n bundlerUrl: this.config.bundlerUrl || '',\n paymasterUrl: this.config.paymasterUrl || '',\n rpcUrl: this.config.rpcUrls?.[input.network as SupportedNetwork],\n demoMode: this.config.demoMode,\n })\n\n return {\n content: [\n {\n type: 'text' as const,\n text: formatGaslessPaymentResult(result),\n },\n ],\n }\n }\n\n /**\n * Handle t402/getBridgeFee\n */\n private async handleGetBridgeFee(args: unknown) {\n const input = getBridgeFeeInputSchema.parse(args)\n const result = await executeGetBridgeFee(input, this.config.rpcUrls)\n return {\n content: [\n {\n type: 'text' as const,\n text: formatBridgeFeeResult(result),\n },\n ],\n }\n }\n\n /**\n * Handle t402/bridge\n */\n private async handleBridge(args: unknown) {\n if (!this.config.privateKey && !this.config.demoMode) {\n throw new Error(\n 'Private key not configured. Set T402_PRIVATE_KEY environment variable or enable demo mode.',\n )\n }\n\n const input = bridgeInputSchema.parse(args)\n const result = await executeBridge(input, {\n privateKey: this.config.privateKey || '0x',\n rpcUrl: this.config.rpcUrls?.[input.fromChain as SupportedNetwork],\n demoMode: this.config.demoMode,\n })\n\n return {\n content: [\n {\n type: 'text' as const,\n text: formatBridgeResult(result),\n },\n ],\n }\n }\n\n // ---- WDK Tool Handlers ----\n\n /**\n * Handle wdk/getWallet\n */\n private async handleWdkGetWallet(args: unknown) {\n wdkGetWalletInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeWdkGetWalletDemo()\n : await executeWdkGetWallet({}, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatWdkWalletResult(result) }],\n }\n }\n\n /**\n * Handle wdk/getBalances\n */\n private async handleWdkGetBalances(args: unknown) {\n const input = wdkGetBalancesInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeWdkGetBalancesDemo()\n : await executeWdkGetBalances(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatWdkBalancesResult(result) }],\n }\n }\n\n /**\n * Handle wdk/transfer\n */\n private async handleWdkTransfer(args: unknown) {\n const input = wdkTransferInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeWdkTransferDemo(input)\n : await executeWdkTransfer(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatWdkTransferResult(result) }],\n }\n }\n\n /**\n * Handle wdk/swap\n */\n private async handleWdkSwap(args: unknown) {\n const input = wdkSwapInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeWdkSwapDemo(input)\n : await executeWdkSwap(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatWdkSwapResult(result) }],\n }\n }\n\n /**\n * Handle t402/autoPay\n */\n private async handleAutoPay(args: unknown) {\n const input = autoPayInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeAutoPayDemo(input)\n : await executeAutoPay(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatAutoPayResult(result) }],\n }\n }\n\n // ---- Unified Tool Handlers ----\n\n /**\n * Handle t402/smartPay\n */\n private async handleSmartPay(args: unknown) {\n const input = smartPayInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executeSmartPayDemo(input)\n : await executeSmartPay(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatSmartPayResult(result) }],\n }\n }\n\n /**\n * Handle t402/paymentPlan\n */\n private async handlePaymentPlan(args: unknown) {\n const input = paymentPlanInputSchema.parse(args)\n\n const result =\n this.config.demoMode || !this.wdk\n ? executePaymentPlanDemo(input)\n : await executePaymentPlan(input, this.wdk)\n\n return {\n content: [{ type: 'text' as const, text: formatPaymentPlanResult(result) }],\n }\n }\n\n // ---- ERC-8004 Tool Handlers ----\n\n /**\n * Handle erc8004/resolveAgent\n */\n private async handleErc8004ResolveAgent(args: unknown) {\n const input = erc8004ResolveAgentInputSchema.parse(args)\n const result = await executeErc8004ResolveAgent(input, this.config.rpcUrls)\n return {\n content: [{ type: 'text' as const, text: formatErc8004ResolveAgentResult(result) }],\n }\n }\n\n /**\n * Handle erc8004/checkReputation\n */\n private async handleErc8004CheckReputation(args: unknown) {\n const input = erc8004CheckReputationInputSchema.parse(args)\n const result = await executeErc8004CheckReputation(input, this.config.rpcUrls)\n return {\n content: [{ type: 'text' as const, text: formatErc8004CheckReputationResult(result) }],\n }\n }\n\n /**\n * Handle erc8004/verifyWallet\n */\n private async handleErc8004VerifyWallet(args: unknown) {\n const input = erc8004VerifyWalletInputSchema.parse(args)\n const result = await executeErc8004VerifyWallet(input, this.config.rpcUrls)\n return {\n content: [{ type: 'text' as const, text: formatErc8004VerifyWalletResult(result) }],\n }\n }\n\n // ---- TON Bridge Tool Handler ----\n\n /**\n * Handle TON bridge tool calls\n */\n private async handleTonBridgeTool(name: string, args: unknown) {\n if (!this.tonBridgeConfig) {\n throw new Error('TON bridge not configured. Call registerTonBridge() to enable TON tools.')\n }\n\n return executeTonBridgeTool(name, (args ?? {}) as Record<string, unknown>, this.tonBridgeConfig)\n }\n\n /**\n * Start the server using stdio transport\n */\n async run(): Promise<void> {\n // Initialize WDK if seed phrase is configured\n await this.initWdk()\n\n const transport = new StdioServerTransport()\n await this.server.connect(transport)\n console.error('t402 MCP Server running on stdio')\n }\n}\n\n/**\n * Create a new t402 MCP server instance\n */\nexport function createT402McpServer(config?: McpServerConfig): T402McpServer {\n return new T402McpServer(config)\n}\n\n/**\n * Load configuration from environment variables\n */\nexport function loadConfigFromEnv(): McpServerConfig {\n const config: McpServerConfig = {}\n\n // Private key\n if (process.env.T402_PRIVATE_KEY) {\n config.privateKey = process.env.T402_PRIVATE_KEY\n }\n\n // Demo mode\n if (process.env.T402_DEMO_MODE === 'true') {\n config.demoMode = true\n }\n\n // ERC-4337 configuration\n if (process.env.T402_BUNDLER_URL) {\n config.bundlerUrl = process.env.T402_BUNDLER_URL\n }\n if (process.env.T402_PAYMASTER_URL) {\n config.paymasterUrl = process.env.T402_PAYMASTER_URL\n }\n\n // WDK configuration\n if (process.env.T402_WDK_SEED_PHRASE) {\n config.seedPhrase = process.env.T402_WDK_SEED_PHRASE\n }\n if (process.env.T402_WDK_CHAINS) {\n config.wdkChains = process.env.T402_WDK_CHAINS.split(',').map((c) => c.trim())\n }\n\n // Unified mode\n if (process.env.T402_UNIFIED_MODE === 'true') {\n config.unifiedMode = true\n }\n\n // Custom RPC URLs\n const rpcUrls: Partial<Record<SupportedNetwork, string>> = {}\n const networks: SupportedNetwork[] = [\n 'ethereum',\n 'base',\n 'arbitrum',\n 'optimism',\n 'polygon',\n 'avalanche',\n 'ink',\n 'berachain',\n 'unichain',\n ]\n\n for (const network of networks) {\n const envVar = `T402_RPC_${network.toUpperCase()}`\n if (process.env[envVar]) {\n rpcUrls[network] = process.env[envVar]\n }\n }\n\n if (Object.keys(rpcUrls).length > 0) {\n config.rpcUrls = rpcUrls\n }\n\n // TON MCP bridge configuration\n if (process.env.T402_TON_MCP_ENDPOINT) {\n config.tonMcpEndpoint = process.env.T402_TON_MCP_ENDPOINT\n }\n if (process.env.T402_TON_API_KEY) {\n config.tonApiKey = process.env.T402_TON_API_KEY\n }\n\n return config\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1132,10 +1132,10 @@ import { z as z7 } from "zod";
|
|
|
1132
1132
|
var wdkGetWalletInputSchema = z7.object({});
|
|
1133
1133
|
async function executeWdkGetWallet(_input, wdk) {
|
|
1134
1134
|
const signer = await wdk.getSigner("ethereum");
|
|
1135
|
-
const
|
|
1135
|
+
const chains7 = wdk.getConfiguredChains();
|
|
1136
1136
|
return {
|
|
1137
1137
|
evmAddress: signer.address,
|
|
1138
|
-
chains:
|
|
1138
|
+
chains: chains7.length > 0 ? chains7 : ["ethereum"]
|
|
1139
1139
|
};
|
|
1140
1140
|
}
|
|
1141
1141
|
function executeWdkGetWalletDemo() {
|
|
@@ -1167,14 +1167,14 @@ function findTokenFormatted(tokens, symbol) {
|
|
|
1167
1167
|
}
|
|
1168
1168
|
async function executeWdkGetBalances(input, wdk) {
|
|
1169
1169
|
const balances = await wdk.getAggregatedBalances();
|
|
1170
|
-
const
|
|
1170
|
+
const chains7 = balances.chains.filter((c) => !input.chains || input.chains.includes(c.chain)).map((c) => ({
|
|
1171
1171
|
chain: c.chain,
|
|
1172
1172
|
usdt0: findTokenFormatted(c.tokens, "USDT0"),
|
|
1173
1173
|
usdc: findTokenFormatted(c.tokens, "USDC"),
|
|
1174
1174
|
native: formatUnits2(c.native, 18)
|
|
1175
1175
|
}));
|
|
1176
1176
|
return {
|
|
1177
|
-
chains:
|
|
1177
|
+
chains: chains7,
|
|
1178
1178
|
totalUsdt0: formatUnits2(balances.totalUsdt0, 6),
|
|
1179
1179
|
totalUsdc: formatUnits2(balances.totalUsdc, 6)
|
|
1180
1180
|
};
|
|
@@ -1314,7 +1314,6 @@ function formatWdkSwapResult(result) {
|
|
|
1314
1314
|
|
|
1315
1315
|
// src/tools/autoPay.ts
|
|
1316
1316
|
import { z as z11 } from "zod";
|
|
1317
|
-
import { T402Protocol } from "@t402/wdk-protocol";
|
|
1318
1317
|
var autoPayInputSchema = z11.object({
|
|
1319
1318
|
url: z11.string().url().describe("URL to fetch (may return 402 Payment Required)"),
|
|
1320
1319
|
maxAmount: z11.string().regex(/^\d+(\.\d+)?$/).optional().describe('Maximum amount willing to pay (e.g., "10.00"). If not set, pays any amount.'),
|
|
@@ -1323,8 +1322,9 @@ var autoPayInputSchema = z11.object({
|
|
|
1323
1322
|
)
|
|
1324
1323
|
});
|
|
1325
1324
|
async function executeAutoPay(input, wdk) {
|
|
1326
|
-
const
|
|
1327
|
-
const
|
|
1325
|
+
const chains7 = input.preferredChain ? [input.preferredChain] : ["ethereum", "arbitrum", "base"];
|
|
1326
|
+
const { T402Protocol } = await import("@t402/wdk-protocol");
|
|
1327
|
+
const protocol = await T402Protocol.create(wdk, { chains: chains7 });
|
|
1328
1328
|
const { response, receipt } = await protocol.fetch(input.url);
|
|
1329
1329
|
if (receipt && input.maxAmount) {
|
|
1330
1330
|
const paidAmount = parseFloat(receipt.amount) / 1e6;
|
|
@@ -1650,23 +1650,185 @@ function createTonBridgeToolSet(config) {
|
|
|
1650
1650
|
};
|
|
1651
1651
|
}
|
|
1652
1652
|
|
|
1653
|
-
// src/tools/
|
|
1653
|
+
// src/tools/erc8004ResolveAgent.ts
|
|
1654
1654
|
import { z as z12 } from "zod";
|
|
1655
|
-
import {
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1655
|
+
import { resolveAgent } from "@t402/erc8004";
|
|
1656
|
+
|
|
1657
|
+
// src/tools/erc8004Shared.ts
|
|
1658
|
+
import { createPublicClient as createPublicClient6, http as http6 } from "viem";
|
|
1659
|
+
import * as chains6 from "viem/chains";
|
|
1660
|
+
import { parseAgentRegistry } from "@t402/erc8004";
|
|
1661
|
+
var CHAIN_ID_TO_VIEM = {
|
|
1662
|
+
1: chains6.mainnet,
|
|
1663
|
+
8453: chains6.base,
|
|
1664
|
+
42161: chains6.arbitrum,
|
|
1665
|
+
10: chains6.optimism,
|
|
1666
|
+
137: chains6.polygon,
|
|
1667
|
+
43114: chains6.avalanche,
|
|
1668
|
+
57073: chains6.ink,
|
|
1669
|
+
80094: chains6.berachain,
|
|
1670
|
+
130: chains6.unichain
|
|
1671
|
+
};
|
|
1672
|
+
var CHAIN_ID_TO_NETWORK = Object.fromEntries(
|
|
1673
|
+
Object.entries(CHAIN_IDS).map(([name, id]) => [id, name])
|
|
1674
|
+
);
|
|
1675
|
+
function createErc8004Client(agentRegistry, rpcUrls) {
|
|
1676
|
+
const parsed = parseAgentRegistry(agentRegistry);
|
|
1677
|
+
const chainId = parseInt(parsed.chainId, 10);
|
|
1678
|
+
const viemChain = CHAIN_ID_TO_VIEM[chainId];
|
|
1679
|
+
if (!viemChain) {
|
|
1680
|
+
throw new Error(
|
|
1681
|
+
`Unsupported chain ID ${chainId} from registry ${agentRegistry}. Supported: ${Object.keys(CHAIN_ID_TO_VIEM).join(", ")}`
|
|
1682
|
+
);
|
|
1683
|
+
}
|
|
1684
|
+
const network = CHAIN_ID_TO_NETWORK[chainId];
|
|
1685
|
+
const rpcUrl = network && rpcUrls?.[network] || network && DEFAULT_RPC_URLS[network];
|
|
1686
|
+
const client = createPublicClient6({
|
|
1687
|
+
chain: viemChain,
|
|
1688
|
+
transport: http6(rpcUrl)
|
|
1689
|
+
});
|
|
1690
|
+
return { client, registryAddress: parsed.address };
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
// src/tools/erc8004ResolveAgent.ts
|
|
1694
|
+
var erc8004ResolveAgentInputSchema = z12.object({
|
|
1695
|
+
agentId: z12.number().int().nonnegative().describe("Agent NFT token ID on the Identity Registry"),
|
|
1696
|
+
agentRegistry: z12.string().regex(/^eip155:\d+:0x[a-fA-F0-9]+$/).describe('Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")')
|
|
1697
|
+
});
|
|
1698
|
+
async function executeErc8004ResolveAgent(input, rpcUrls) {
|
|
1699
|
+
const { client, registryAddress } = createErc8004Client(input.agentRegistry, rpcUrls);
|
|
1700
|
+
return resolveAgent(
|
|
1701
|
+
client,
|
|
1702
|
+
registryAddress,
|
|
1703
|
+
BigInt(input.agentId),
|
|
1704
|
+
input.agentRegistry
|
|
1705
|
+
);
|
|
1706
|
+
}
|
|
1707
|
+
function formatErc8004ResolveAgentResult(agent) {
|
|
1708
|
+
const lines = [
|
|
1709
|
+
`## Agent Identity (ID: ${agent.agentId})`,
|
|
1710
|
+
"",
|
|
1711
|
+
`**Registry:** ${agent.registry.id}`,
|
|
1712
|
+
`**Wallet:** \`${agent.agentWallet}\``,
|
|
1713
|
+
`**Owner:** \`${agent.owner}\``,
|
|
1714
|
+
`**Registration URI:** ${agent.agentURI}`,
|
|
1715
|
+
""
|
|
1716
|
+
];
|
|
1717
|
+
if (agent.registration) {
|
|
1718
|
+
const reg = agent.registration;
|
|
1719
|
+
lines.push("### Registration File");
|
|
1720
|
+
if (reg.name) lines.push(`- **Name:** ${reg.name}`);
|
|
1721
|
+
if (reg.description) lines.push(`- **Description:** ${reg.description}`);
|
|
1722
|
+
if (reg.image) lines.push(`- **Image:** ${reg.image}`);
|
|
1723
|
+
if (reg.x402Support !== void 0) lines.push(`- **x402 Support:** ${reg.x402Support}`);
|
|
1724
|
+
if (reg.services?.length) {
|
|
1725
|
+
lines.push("");
|
|
1726
|
+
lines.push("### Services");
|
|
1727
|
+
for (const svc of reg.services) {
|
|
1728
|
+
lines.push(`- **${svc.name}:** ${svc.endpoint}`);
|
|
1729
|
+
}
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
return lines.join("\n");
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
// src/tools/erc8004CheckReputation.ts
|
|
1736
|
+
import { z as z13 } from "zod";
|
|
1737
|
+
import { getReputationSummary } from "@t402/erc8004";
|
|
1738
|
+
var erc8004CheckReputationInputSchema = z13.object({
|
|
1739
|
+
agentId: z13.number().int().nonnegative().describe("Agent NFT token ID"),
|
|
1740
|
+
agentRegistry: z13.string().regex(/^eip155:\d+:0x[a-fA-F0-9]+$/).describe('Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")'),
|
|
1741
|
+
reputationRegistry: z13.string().regex(/^0x[a-fA-F0-9]{40}$/).describe("Reputation Registry contract address on the same chain"),
|
|
1742
|
+
trustedReviewers: z13.array(z13.string().regex(/^0x[a-fA-F0-9]{40}$/)).min(1).describe("Addresses whose feedback is trusted (required for Sybil resistance)")
|
|
1743
|
+
});
|
|
1744
|
+
async function executeErc8004CheckReputation(input, rpcUrls) {
|
|
1745
|
+
const { client } = createErc8004Client(input.agentRegistry, rpcUrls);
|
|
1746
|
+
return getReputationSummary(
|
|
1747
|
+
client,
|
|
1748
|
+
input.reputationRegistry,
|
|
1749
|
+
BigInt(input.agentId),
|
|
1750
|
+
input.trustedReviewers
|
|
1751
|
+
);
|
|
1752
|
+
}
|
|
1753
|
+
function formatErc8004CheckReputationResult(summary) {
|
|
1754
|
+
const lines = [
|
|
1755
|
+
`## Agent Reputation (ID: ${summary.agentId})`,
|
|
1756
|
+
"",
|
|
1757
|
+
`| Metric | Value |`,
|
|
1758
|
+
`|--------|-------|`,
|
|
1759
|
+
`| Feedback Count | ${summary.count} |`,
|
|
1760
|
+
`| Raw Score | ${summary.summaryValue} |`,
|
|
1761
|
+
`| Score Decimals | ${summary.summaryValueDecimals} |`,
|
|
1762
|
+
`| **Normalized Score** | **${summary.normalizedScore}/100** |`,
|
|
1763
|
+
""
|
|
1764
|
+
];
|
|
1765
|
+
if (summary.normalizedScore >= 80) {
|
|
1766
|
+
lines.push("_High reputation \u2014 trusted agent_");
|
|
1767
|
+
} else if (summary.normalizedScore >= 50) {
|
|
1768
|
+
lines.push("_Moderate reputation_");
|
|
1769
|
+
} else if (summary.count > 0n) {
|
|
1770
|
+
lines.push("_Low reputation \u2014 exercise caution_");
|
|
1771
|
+
} else {
|
|
1772
|
+
lines.push("_No feedback recorded from trusted reviewers_");
|
|
1773
|
+
}
|
|
1774
|
+
return lines.join("\n");
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1777
|
+
// src/tools/erc8004VerifyWallet.ts
|
|
1778
|
+
import { z as z14 } from "zod";
|
|
1779
|
+
import { verifyPayToMatchesAgent } from "@t402/erc8004";
|
|
1780
|
+
var erc8004VerifyWalletInputSchema = z14.object({
|
|
1781
|
+
agentId: z14.number().int().nonnegative().describe("Agent NFT token ID"),
|
|
1782
|
+
agentRegistry: z14.string().regex(/^eip155:\d+:0x[a-fA-F0-9]+$/).describe('Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")'),
|
|
1783
|
+
walletAddress: z14.string().regex(/^0x[a-fA-F0-9]{40}$/).describe("Wallet address to verify (typically the payTo from PaymentRequirements)")
|
|
1784
|
+
});
|
|
1785
|
+
async function executeErc8004VerifyWallet(input, rpcUrls) {
|
|
1786
|
+
const { client, registryAddress } = createErc8004Client(input.agentRegistry, rpcUrls);
|
|
1787
|
+
const matches = await verifyPayToMatchesAgent(
|
|
1788
|
+
client,
|
|
1789
|
+
registryAddress,
|
|
1790
|
+
BigInt(input.agentId),
|
|
1791
|
+
input.walletAddress
|
|
1792
|
+
);
|
|
1793
|
+
return {
|
|
1794
|
+
matches,
|
|
1795
|
+
agentId: input.agentId,
|
|
1796
|
+
walletAddress: input.walletAddress,
|
|
1797
|
+
registryAddress
|
|
1798
|
+
};
|
|
1799
|
+
}
|
|
1800
|
+
function formatErc8004VerifyWalletResult(result) {
|
|
1801
|
+
const status = result.matches ? "VERIFIED" : "MISMATCH";
|
|
1802
|
+
const icon = result.matches ? "[PASS]" : "[FAIL]";
|
|
1803
|
+
const lines = [
|
|
1804
|
+
`## Wallet Verification: ${icon} ${status}`,
|
|
1805
|
+
"",
|
|
1806
|
+
`| Field | Value |`,
|
|
1807
|
+
`|-------|-------|`,
|
|
1808
|
+
`| Agent ID | ${result.agentId} |`,
|
|
1809
|
+
`| Wallet Address | \`${result.walletAddress}\` |`,
|
|
1810
|
+
`| Registry | \`${result.registryAddress}\` |`,
|
|
1811
|
+
`| **Result** | **${result.matches ? "Address matches on-chain agentWallet" : "Address does NOT match on-chain agentWallet"}** |`
|
|
1812
|
+
];
|
|
1813
|
+
return lines.join("\n");
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
// src/tools/unified.ts
|
|
1817
|
+
import { z as z15 } from "zod";
|
|
1818
|
+
var smartPayInputSchema = z15.object({
|
|
1819
|
+
url: z15.string().url().describe("URL of the 402-protected resource"),
|
|
1820
|
+
maxBridgeFee: z15.string().regex(/^\d+(\.\d+)?$/).optional().describe("Maximum acceptable bridge fee in native token (optional)"),
|
|
1821
|
+
preferredNetwork: z15.string().optional().describe("Preferred network for payment (optional)")
|
|
1660
1822
|
});
|
|
1661
|
-
var paymentPlanInputSchema =
|
|
1662
|
-
paymentRequired:
|
|
1663
|
-
scheme:
|
|
1664
|
-
network:
|
|
1665
|
-
maxAmountRequired:
|
|
1666
|
-
resource:
|
|
1667
|
-
description:
|
|
1668
|
-
payTo:
|
|
1669
|
-
maxDeadline:
|
|
1823
|
+
var paymentPlanInputSchema = z15.object({
|
|
1824
|
+
paymentRequired: z15.object({
|
|
1825
|
+
scheme: z15.string().optional(),
|
|
1826
|
+
network: z15.string().optional(),
|
|
1827
|
+
maxAmountRequired: z15.string().optional(),
|
|
1828
|
+
resource: z15.string().optional(),
|
|
1829
|
+
description: z15.string().optional(),
|
|
1830
|
+
payTo: z15.string().optional(),
|
|
1831
|
+
maxDeadline: z15.number().optional()
|
|
1670
1832
|
}).passthrough().describe("The 402 PaymentRequired response")
|
|
1671
1833
|
});
|
|
1672
1834
|
var UNIFIED_TOOL_DEFINITIONS = {
|
|
@@ -1706,13 +1868,14 @@ var UNIFIED_TOOL_DEFINITIONS = {
|
|
|
1706
1868
|
};
|
|
1707
1869
|
async function executeSmartPay(input, wdk) {
|
|
1708
1870
|
const steps = [];
|
|
1709
|
-
const
|
|
1871
|
+
const chains7 = input.preferredNetwork ? [input.preferredNetwork] : ["ethereum", "arbitrum", "base"];
|
|
1710
1872
|
steps.push({
|
|
1711
1873
|
action: "check_balance",
|
|
1712
1874
|
status: "success",
|
|
1713
|
-
detail: `Checking balances on ${
|
|
1875
|
+
detail: `Checking balances on ${chains7.join(", ")}`
|
|
1714
1876
|
});
|
|
1715
|
-
const
|
|
1877
|
+
const { T402Protocol } = await import("@t402/wdk-protocol");
|
|
1878
|
+
const protocol = await T402Protocol.create(wdk, { chains: chains7 });
|
|
1716
1879
|
steps.push({
|
|
1717
1880
|
action: "fetch",
|
|
1718
1881
|
status: "success",
|
|
@@ -2204,6 +2367,81 @@ var WDK_TOOL_DEFINITIONS = {
|
|
|
2204
2367
|
}
|
|
2205
2368
|
}
|
|
2206
2369
|
};
|
|
2370
|
+
var ERC8004_TOOL_DEFINITIONS = {
|
|
2371
|
+
"erc8004/resolveAgent": {
|
|
2372
|
+
name: "erc8004/resolveAgent",
|
|
2373
|
+
description: "Look up an agent's on-chain ERC-8004 identity. Returns the agent's registered wallet address, owner, registration file (name, description, services), and verification URI. Use this to verify an agent before making a payment.",
|
|
2374
|
+
inputSchema: {
|
|
2375
|
+
type: "object",
|
|
2376
|
+
properties: {
|
|
2377
|
+
agentId: {
|
|
2378
|
+
type: "number",
|
|
2379
|
+
description: "Agent NFT token ID on the Identity Registry"
|
|
2380
|
+
},
|
|
2381
|
+
agentRegistry: {
|
|
2382
|
+
type: "string",
|
|
2383
|
+
pattern: "^eip155:\\d+:0x[a-fA-F0-9]+$",
|
|
2384
|
+
description: 'Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")'
|
|
2385
|
+
}
|
|
2386
|
+
},
|
|
2387
|
+
required: ["agentId", "agentRegistry"]
|
|
2388
|
+
}
|
|
2389
|
+
},
|
|
2390
|
+
"erc8004/checkReputation": {
|
|
2391
|
+
name: "erc8004/checkReputation",
|
|
2392
|
+
description: "Query an agent's reputation score from the on-chain Reputation Registry. Returns a normalized 0-100 score based on feedback from trusted reviewers. Requires explicit trusted reviewer addresses for Sybil resistance.",
|
|
2393
|
+
inputSchema: {
|
|
2394
|
+
type: "object",
|
|
2395
|
+
properties: {
|
|
2396
|
+
agentId: {
|
|
2397
|
+
type: "number",
|
|
2398
|
+
description: "Agent NFT token ID"
|
|
2399
|
+
},
|
|
2400
|
+
agentRegistry: {
|
|
2401
|
+
type: "string",
|
|
2402
|
+
pattern: "^eip155:\\d+:0x[a-fA-F0-9]+$",
|
|
2403
|
+
description: 'Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")'
|
|
2404
|
+
},
|
|
2405
|
+
reputationRegistry: {
|
|
2406
|
+
type: "string",
|
|
2407
|
+
pattern: "^0x[a-fA-F0-9]{40}$",
|
|
2408
|
+
description: "Reputation Registry contract address on the same chain"
|
|
2409
|
+
},
|
|
2410
|
+
trustedReviewers: {
|
|
2411
|
+
type: "array",
|
|
2412
|
+
items: { type: "string", pattern: "^0x[a-fA-F0-9]{40}$" },
|
|
2413
|
+
minItems: 1,
|
|
2414
|
+
description: "Addresses whose feedback is trusted (required for Sybil resistance)"
|
|
2415
|
+
}
|
|
2416
|
+
},
|
|
2417
|
+
required: ["agentId", "agentRegistry", "reputationRegistry", "trustedReviewers"]
|
|
2418
|
+
}
|
|
2419
|
+
},
|
|
2420
|
+
"erc8004/verifyWallet": {
|
|
2421
|
+
name: "erc8004/verifyWallet",
|
|
2422
|
+
description: "Verify that a payment address (payTo) matches an agent's on-chain registered wallet. Use this before paying to confirm the recipient address is legitimate and owned by the declared agent.",
|
|
2423
|
+
inputSchema: {
|
|
2424
|
+
type: "object",
|
|
2425
|
+
properties: {
|
|
2426
|
+
agentId: {
|
|
2427
|
+
type: "number",
|
|
2428
|
+
description: "Agent NFT token ID"
|
|
2429
|
+
},
|
|
2430
|
+
agentRegistry: {
|
|
2431
|
+
type: "string",
|
|
2432
|
+
pattern: "^eip155:\\d+:0x[a-fA-F0-9]+$",
|
|
2433
|
+
description: 'Agent registry identifier (e.g., "eip155:8453:0xRegistryAddress")'
|
|
2434
|
+
},
|
|
2435
|
+
walletAddress: {
|
|
2436
|
+
type: "string",
|
|
2437
|
+
pattern: "^0x[a-fA-F0-9]{40}$",
|
|
2438
|
+
description: "Wallet address to verify (typically the payTo from payment requirements)"
|
|
2439
|
+
}
|
|
2440
|
+
},
|
|
2441
|
+
required: ["agentId", "agentRegistry", "walletAddress"]
|
|
2442
|
+
}
|
|
2443
|
+
}
|
|
2444
|
+
};
|
|
2207
2445
|
|
|
2208
2446
|
export {
|
|
2209
2447
|
__publicField,
|
|
@@ -2263,6 +2501,15 @@ export {
|
|
|
2263
2501
|
TON_BRIDGE_TOOLS,
|
|
2264
2502
|
executeTonBridgeTool,
|
|
2265
2503
|
createTonBridgeToolSet,
|
|
2504
|
+
erc8004ResolveAgentInputSchema,
|
|
2505
|
+
executeErc8004ResolveAgent,
|
|
2506
|
+
formatErc8004ResolveAgentResult,
|
|
2507
|
+
erc8004CheckReputationInputSchema,
|
|
2508
|
+
executeErc8004CheckReputation,
|
|
2509
|
+
formatErc8004CheckReputationResult,
|
|
2510
|
+
erc8004VerifyWalletInputSchema,
|
|
2511
|
+
executeErc8004VerifyWallet,
|
|
2512
|
+
formatErc8004VerifyWalletResult,
|
|
2266
2513
|
smartPayInputSchema,
|
|
2267
2514
|
paymentPlanInputSchema,
|
|
2268
2515
|
UNIFIED_TOOL_DEFINITIONS,
|
|
@@ -2273,6 +2520,7 @@ export {
|
|
|
2273
2520
|
formatSmartPayResult,
|
|
2274
2521
|
formatPaymentPlanResult,
|
|
2275
2522
|
TOOL_DEFINITIONS,
|
|
2276
|
-
WDK_TOOL_DEFINITIONS
|
|
2523
|
+
WDK_TOOL_DEFINITIONS,
|
|
2524
|
+
ERC8004_TOOL_DEFINITIONS
|
|
2277
2525
|
};
|
|
2278
|
-
//# sourceMappingURL=chunk-
|
|
2526
|
+
//# sourceMappingURL=chunk-B7X7H6NV.mjs.map
|