@paylobster/mcp-server 1.1.0 → 1.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/tools/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bridgeChainsSchema = exports.bridgeStatusSchema = exports.bridgeExecuteSchema = exports.bridgeQuoteSchema = void 0;
4
+ exports.bridgeQuote = bridgeQuote;
5
+ exports.bridgeExecute = bridgeExecute;
6
+ exports.bridgeStatus = bridgeStatus;
7
+ exports.bridgeChains = bridgeChains;
8
+ const zod_1 = require("zod");
9
+ // Schema for bridge_quote
10
+ exports.bridgeQuoteSchema = zod_1.z.object({
11
+ fromChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).describe('Source chain ID or name'),
12
+ toChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).describe('Destination chain ID or name'),
13
+ fromToken: zod_1.z.string().describe('Source token address'),
14
+ toToken: zod_1.z.string().describe('Destination token address'),
15
+ fromAmount: zod_1.z.string().describe('Amount to bridge (in token units)'),
16
+ fromAddress: zod_1.z.string().optional().describe('Sender address'),
17
+ toAddress: zod_1.z.string().optional().describe('Recipient address (defaults to fromAddress)'),
18
+ });
19
+ // Schema for bridge_execute
20
+ exports.bridgeExecuteSchema = zod_1.z.object({
21
+ fromChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).describe('Source chain ID or name'),
22
+ toChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).describe('Destination chain ID or name'),
23
+ fromToken: zod_1.z.string().describe('Source token address'),
24
+ toToken: zod_1.z.string().describe('Destination token address'),
25
+ fromAmount: zod_1.z.string().describe('Amount to bridge (in token units)'),
26
+ toAddress: zod_1.z.string().optional().describe('Recipient address'),
27
+ });
28
+ // Schema for bridge_status
29
+ exports.bridgeStatusSchema = zod_1.z.object({
30
+ txHash: zod_1.z.string().describe('Transaction hash to check'),
31
+ fromChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).optional().describe('Source chain ID'),
32
+ toChain: zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).optional().describe('Destination chain ID'),
33
+ });
34
+ // Schema for bridge_chains
35
+ exports.bridgeChainsSchema = zod_1.z.object({
36
+ query: zod_1.z.string().optional().describe('Filter chains by name'),
37
+ });
38
+ async function bridgeQuote(params, client) {
39
+ const fromAddress = params.fromAddress || client.getAccount().address;
40
+ const toAddress = params.toAddress || fromAddress;
41
+ const queryParams = new URLSearchParams({
42
+ fromChain: params.fromChain.toString(),
43
+ toChain: params.toChain.toString(),
44
+ fromToken: params.fromToken,
45
+ toToken: params.toToken,
46
+ fromAmount: params.fromAmount,
47
+ fromAddress,
48
+ toAddress,
49
+ });
50
+ try {
51
+ const response = await fetch(`https://li.quest/v1/quote?${queryParams}`);
52
+ if (!response.ok) {
53
+ const errorText = await response.text();
54
+ throw new Error(`Li.Fi API error: ${response.status} - ${errorText}`);
55
+ }
56
+ const data = await response.json();
57
+ return data;
58
+ }
59
+ catch (error) {
60
+ throw new Error(`Failed to get bridge quote: ${error.message}`);
61
+ }
62
+ }
63
+ async function bridgeExecute(params, client) {
64
+ const fromAddress = client.getAccount().address;
65
+ const toAddress = params.toAddress || fromAddress;
66
+ // Get quote first
67
+ const quote = await bridgeQuote({
68
+ ...params,
69
+ fromAddress,
70
+ toAddress,
71
+ }, client);
72
+ if (!quote.transactionRequest) {
73
+ throw new Error('No transaction data in quote response');
74
+ }
75
+ return {
76
+ transaction: quote.transactionRequest,
77
+ quote,
78
+ };
79
+ }
80
+ async function bridgeStatus(params, client) {
81
+ const queryParams = new URLSearchParams({
82
+ txHash: params.txHash,
83
+ ...(params.fromChain && { fromChain: params.fromChain.toString() }),
84
+ ...(params.toChain && { toChain: params.toChain.toString() }),
85
+ });
86
+ try {
87
+ const response = await fetch(`https://li.quest/v1/status?${queryParams}`);
88
+ if (!response.ok) {
89
+ const errorText = await response.text();
90
+ throw new Error(`Li.Fi API error: ${response.status} - ${errorText}`);
91
+ }
92
+ const data = await response.json();
93
+ return data;
94
+ }
95
+ catch (error) {
96
+ throw new Error(`Failed to get bridge status: ${error.message}`);
97
+ }
98
+ }
99
+ async function bridgeChains(params, client) {
100
+ try {
101
+ const response = await fetch('https://li.quest/v1/chains');
102
+ if (!response.ok) {
103
+ const errorText = await response.text();
104
+ throw new Error(`Li.Fi API error: ${response.status} - ${errorText}`);
105
+ }
106
+ const data = await response.json();
107
+ let chains = data.chains || [];
108
+ // Filter by query if provided
109
+ if (params.query) {
110
+ const query = params.query.toLowerCase();
111
+ chains = chains.filter((chain) => chain.name.toLowerCase().includes(query) ||
112
+ chain.key.toLowerCase().includes(query) ||
113
+ chain.id.toString().includes(query));
114
+ }
115
+ return { chains };
116
+ }
117
+ catch (error) {
118
+ throw new Error(`Failed to fetch chains: ${error.message}`);
119
+ }
120
+ }
121
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/tools/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ import { ContractClient } from '../utils/contracts';
3
+ export declare const getPortfolioSchema: z.ZodObject<{
4
+ address: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ address: string;
7
+ }, {
8
+ address: string;
9
+ }>;
10
+ export declare const getTokenPriceSchema: z.ZodObject<{
11
+ tokenAddress: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ tokenAddress: string;
14
+ }, {
15
+ tokenAddress: string;
16
+ }>;
17
+ interface TokenBalance {
18
+ token: string;
19
+ symbol: string;
20
+ name: string;
21
+ decimals: number;
22
+ balance: string;
23
+ balanceRaw: string;
24
+ priceUSD?: string;
25
+ valueUSD?: string;
26
+ }
27
+ interface PortfolioResponse {
28
+ address: string;
29
+ chainId: number;
30
+ totalValueUSD: string;
31
+ tokens: TokenBalance[];
32
+ lastUpdated: number;
33
+ }
34
+ interface TokenPriceResponse {
35
+ tokenAddress: string;
36
+ symbol: string;
37
+ priceUSD: string;
38
+ source: string;
39
+ lastUpdated: number;
40
+ }
41
+ export declare function getPortfolio(params: z.infer<typeof getPortfolioSchema>, client: ContractClient): Promise<PortfolioResponse>;
42
+ export declare function getTokenPrice(params: z.infer<typeof getTokenPriceSchema>, client: ContractClient): Promise<TokenPriceResponse>;
43
+ export {};
44
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAsB,YAAY,CAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,EAC1C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,iBAAiB,CAAC,CA6F5B;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,EAC3C,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAgE7B"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTokenPriceSchema = exports.getPortfolioSchema = void 0;
4
+ exports.getPortfolio = getPortfolio;
5
+ exports.getTokenPrice = getTokenPrice;
6
+ const zod_1 = require("zod");
7
+ // Schema for get_portfolio
8
+ exports.getPortfolioSchema = zod_1.z.object({
9
+ address: zod_1.z.string().describe('Ethereum address to get portfolio for'),
10
+ });
11
+ // Schema for get_token_price
12
+ exports.getTokenPriceSchema = zod_1.z.object({
13
+ tokenAddress: zod_1.z.string().describe('Token contract address on Base'),
14
+ });
15
+ // Base chain native token (ETH) and common tokens
16
+ const BASE_TOKENS = {
17
+ '0x0000000000000000000000000000000000000000': { symbol: 'ETH', decimals: 18, address: '0x0000000000000000000000000000000000000000' },
18
+ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913': { symbol: 'USDC', decimals: 6, address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' },
19
+ };
20
+ async function getPortfolio(params, client) {
21
+ const publicClient = client.getPublicClient();
22
+ const address = params.address;
23
+ try {
24
+ const tokens = [];
25
+ let totalValueUSD = 0;
26
+ // ERC20 ABI for balance and metadata
27
+ const ERC20_ABI = [
28
+ {
29
+ inputs: [{ name: 'account', type: 'address' }],
30
+ name: 'balanceOf',
31
+ outputs: [{ name: '', type: 'uint256' }],
32
+ stateMutability: 'view',
33
+ type: 'function',
34
+ },
35
+ {
36
+ inputs: [],
37
+ name: 'symbol',
38
+ outputs: [{ name: '', type: 'string' }],
39
+ stateMutability: 'view',
40
+ type: 'function',
41
+ },
42
+ {
43
+ inputs: [],
44
+ name: 'name',
45
+ outputs: [{ name: '', type: 'string' }],
46
+ stateMutability: 'view',
47
+ type: 'function',
48
+ },
49
+ {
50
+ inputs: [],
51
+ name: 'decimals',
52
+ outputs: [{ name: '', type: 'uint8' }],
53
+ stateMutability: 'view',
54
+ type: 'function',
55
+ },
56
+ ];
57
+ // Get native ETH balance
58
+ const ethBalance = await publicClient.getBalance({ address });
59
+ const ethFormatted = (Number(ethBalance) / 1e18).toFixed(6);
60
+ tokens.push({
61
+ token: '0x0000000000000000000000000000000000000000',
62
+ symbol: 'ETH',
63
+ name: 'Ethereum',
64
+ decimals: 18,
65
+ balance: ethFormatted,
66
+ balanceRaw: ethBalance.toString(),
67
+ });
68
+ // Get common token balances
69
+ for (const [tokenAddress, tokenInfo] of Object.entries(BASE_TOKENS)) {
70
+ if (tokenAddress === '0x0000000000000000000000000000000000000000')
71
+ continue;
72
+ try {
73
+ const balance = await publicClient.readContract({
74
+ address: tokenAddress,
75
+ abi: ERC20_ABI,
76
+ functionName: 'balanceOf',
77
+ args: [address],
78
+ });
79
+ if (balance > 0n) {
80
+ const balanceFormatted = (Number(balance) / Math.pow(10, tokenInfo.decimals)).toFixed(tokenInfo.decimals);
81
+ tokens.push({
82
+ token: tokenAddress,
83
+ symbol: tokenInfo.symbol,
84
+ name: tokenInfo.symbol,
85
+ decimals: tokenInfo.decimals,
86
+ balance: balanceFormatted,
87
+ balanceRaw: balance.toString(),
88
+ });
89
+ }
90
+ }
91
+ catch (err) {
92
+ // Skip tokens that fail to load
93
+ console.error(`Failed to load balance for ${tokenInfo.symbol}:`, err);
94
+ }
95
+ }
96
+ return {
97
+ address: params.address,
98
+ chainId: 8453, // Base
99
+ totalValueUSD: totalValueUSD.toFixed(2),
100
+ tokens,
101
+ lastUpdated: Date.now(),
102
+ };
103
+ }
104
+ catch (error) {
105
+ throw new Error(`Failed to fetch portfolio: ${error.message}`);
106
+ }
107
+ }
108
+ async function getTokenPrice(params, client) {
109
+ const apiKey = process.env.ZEROX_API_KEY;
110
+ if (!apiKey) {
111
+ throw new Error('0x API key not configured (ZEROX_API_KEY)');
112
+ }
113
+ try {
114
+ // Get price via 0x API by quoting 1 token -> USDC
115
+ const queryParams = new URLSearchParams({
116
+ chainId: '8453',
117
+ sellToken: params.tokenAddress,
118
+ buyToken: 'USDC',
119
+ sellAmount: '1000000000000000000', // 1 token (18 decimals)
120
+ });
121
+ const response = await fetch(`https://api.0x.org/swap/permit2/price?${queryParams}`, {
122
+ headers: {
123
+ '0x-api-key': apiKey,
124
+ '0x-version': 'v2',
125
+ },
126
+ });
127
+ if (!response.ok) {
128
+ const errorText = await response.text();
129
+ throw new Error(`0x API error: ${response.status} - ${errorText}`);
130
+ }
131
+ const data = await response.json();
132
+ // Get token symbol
133
+ let symbol = 'UNKNOWN';
134
+ try {
135
+ const publicClient = client.getPublicClient();
136
+ const tokenSymbol = await publicClient.readContract({
137
+ address: params.tokenAddress,
138
+ abi: [
139
+ {
140
+ inputs: [],
141
+ name: 'symbol',
142
+ outputs: [{ name: '', type: 'string' }],
143
+ stateMutability: 'view',
144
+ type: 'function',
145
+ },
146
+ ],
147
+ functionName: 'symbol',
148
+ });
149
+ symbol = tokenSymbol;
150
+ }
151
+ catch {
152
+ // Fallback to address if symbol read fails
153
+ }
154
+ return {
155
+ tokenAddress: params.tokenAddress,
156
+ symbol,
157
+ priceUSD: data.price || data.buyAmount,
158
+ source: '0x',
159
+ lastUpdated: Date.now(),
160
+ };
161
+ }
162
+ catch (error) {
163
+ throw new Error(`Failed to get token price: ${error.message}`);
164
+ }
165
+ }
166
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/tools/portfolio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { z } from 'zod';
2
+ import { ContractClient } from '../utils/contracts';
3
+ export declare const swapQuoteSchema: z.ZodObject<{
4
+ sellToken: z.ZodString;
5
+ buyToken: z.ZodString;
6
+ sellAmount: z.ZodOptional<z.ZodString>;
7
+ buyAmount: z.ZodOptional<z.ZodString>;
8
+ slippagePercentage: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ takerAddress: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ sellToken: string;
12
+ buyToken: string;
13
+ slippagePercentage: number;
14
+ sellAmount?: string | undefined;
15
+ buyAmount?: string | undefined;
16
+ takerAddress?: string | undefined;
17
+ }, {
18
+ sellToken: string;
19
+ buyToken: string;
20
+ sellAmount?: string | undefined;
21
+ buyAmount?: string | undefined;
22
+ slippagePercentage?: number | undefined;
23
+ takerAddress?: string | undefined;
24
+ }>;
25
+ export declare const swapExecuteSchema: z.ZodObject<{
26
+ sellToken: z.ZodString;
27
+ buyToken: z.ZodString;
28
+ sellAmount: z.ZodOptional<z.ZodString>;
29
+ buyAmount: z.ZodOptional<z.ZodString>;
30
+ slippagePercentage: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ sellToken: string;
33
+ buyToken: string;
34
+ slippagePercentage: number;
35
+ sellAmount?: string | undefined;
36
+ buyAmount?: string | undefined;
37
+ }, {
38
+ sellToken: string;
39
+ buyToken: string;
40
+ sellAmount?: string | undefined;
41
+ buyAmount?: string | undefined;
42
+ slippagePercentage?: number | undefined;
43
+ }>;
44
+ export declare const swapTokensSchema: z.ZodObject<{
45
+ query: z.ZodOptional<z.ZodString>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ query?: string | undefined;
48
+ }, {
49
+ query?: string | undefined;
50
+ }>;
51
+ export declare const swapPriceSchema: z.ZodObject<{
52
+ token: z.ZodString;
53
+ }, "strip", z.ZodTypeAny, {
54
+ token: string;
55
+ }, {
56
+ token: string;
57
+ }>;
58
+ interface SwapQuoteResponse {
59
+ chainId: number;
60
+ price: string;
61
+ estimatedPriceImpact: string;
62
+ sellTokenAddress: string;
63
+ buyTokenAddress: string;
64
+ sellAmount: string;
65
+ buyAmount: string;
66
+ allowanceTarget: string;
67
+ to: string;
68
+ data: string;
69
+ value: string;
70
+ gas: string;
71
+ gasPrice: string;
72
+ }
73
+ interface TokenInfo {
74
+ address: string;
75
+ symbol: string;
76
+ name: string;
77
+ decimals: number;
78
+ }
79
+ export declare function swapQuote(params: z.infer<typeof swapQuoteSchema>, client: ContractClient): Promise<SwapQuoteResponse>;
80
+ export declare function swapExecute(params: z.infer<typeof swapExecuteSchema>, client: ContractClient): Promise<{
81
+ transaction: any;
82
+ quote: SwapQuoteResponse;
83
+ }>;
84
+ export declare function swapTokens(params: z.infer<typeof swapTokensSchema>, client: ContractClient): Promise<{
85
+ tokens: TokenInfo[];
86
+ }>;
87
+ export declare function swapPrice(params: z.infer<typeof swapPriceSchema>, client: ContractClient): Promise<{
88
+ token: string;
89
+ priceInUSDC: string;
90
+ source: string;
91
+ }>;
92
+ export {};
93
+ //# sourceMappingURL=swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;EAO1B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,EACvC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,EACzC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAsBzD;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,EACxC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CAuClC;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,EACvC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwCjE"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.swapPriceSchema = exports.swapTokensSchema = exports.swapExecuteSchema = exports.swapQuoteSchema = void 0;
4
+ exports.swapQuote = swapQuote;
5
+ exports.swapExecute = swapExecute;
6
+ exports.swapTokens = swapTokens;
7
+ exports.swapPrice = swapPrice;
8
+ const zod_1 = require("zod");
9
+ // Schema for swap_quote
10
+ exports.swapQuoteSchema = zod_1.z.object({
11
+ sellToken: zod_1.z.string().describe('Token address or symbol to sell'),
12
+ buyToken: zod_1.z.string().describe('Token address or symbol to buy'),
13
+ sellAmount: zod_1.z.string().optional().describe('Amount to sell (in token units)'),
14
+ buyAmount: zod_1.z.string().optional().describe('Amount to buy (in token units)'),
15
+ slippagePercentage: zod_1.z.number().optional().default(0.01).describe('Slippage tolerance (0.01 = 1%)'),
16
+ takerAddress: zod_1.z.string().optional().describe('Address that will submit the transaction'),
17
+ });
18
+ // Schema for swap_execute
19
+ exports.swapExecuteSchema = zod_1.z.object({
20
+ sellToken: zod_1.z.string().describe('Token address or symbol to sell'),
21
+ buyToken: zod_1.z.string().describe('Token address or symbol to buy'),
22
+ sellAmount: zod_1.z.string().optional().describe('Amount to sell (in token units)'),
23
+ buyAmount: zod_1.z.string().optional().describe('Amount to buy (in token units)'),
24
+ slippagePercentage: zod_1.z.number().optional().default(0.01).describe('Slippage tolerance (0.01 = 1%)'),
25
+ });
26
+ // Schema for swap_tokens
27
+ exports.swapTokensSchema = zod_1.z.object({
28
+ query: zod_1.z.string().optional().describe('Search query to filter tokens'),
29
+ });
30
+ // Schema for swap_price
31
+ exports.swapPriceSchema = zod_1.z.object({
32
+ token: zod_1.z.string().describe('Token address or symbol'),
33
+ });
34
+ async function swapQuote(params, client) {
35
+ const apiKey = process.env.ZEROX_API_KEY;
36
+ if (!apiKey) {
37
+ throw new Error('0x API key not configured (ZEROX_API_KEY)');
38
+ }
39
+ const takerAddress = params.takerAddress || client.getAccount().address;
40
+ const queryParams = new URLSearchParams({
41
+ chainId: '8453', // Base
42
+ sellToken: params.sellToken,
43
+ buyToken: params.buyToken,
44
+ ...(params.sellAmount && { sellAmount: params.sellAmount }),
45
+ ...(params.buyAmount && { buyAmount: params.buyAmount }),
46
+ slippagePercentage: params.slippagePercentage.toString(),
47
+ takerAddress,
48
+ });
49
+ try {
50
+ const response = await fetch(`https://api.0x.org/swap/permit2/quote?${queryParams}`, {
51
+ headers: {
52
+ '0x-api-key': apiKey,
53
+ '0x-version': 'v2',
54
+ },
55
+ });
56
+ if (!response.ok) {
57
+ const errorText = await response.text();
58
+ throw new Error(`0x API error: ${response.status} - ${errorText}`);
59
+ }
60
+ const data = await response.json();
61
+ return data;
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Failed to get swap quote: ${error.message}`);
65
+ }
66
+ }
67
+ async function swapExecute(params, client) {
68
+ const takerAddress = client.getAccount().address;
69
+ // Get the quote with transaction data
70
+ const quote = await swapQuote({
71
+ ...params,
72
+ takerAddress,
73
+ }, client);
74
+ return {
75
+ transaction: {
76
+ to: quote.to,
77
+ data: quote.data,
78
+ value: quote.value,
79
+ gas: quote.gas,
80
+ gasPrice: quote.gasPrice,
81
+ },
82
+ quote,
83
+ };
84
+ }
85
+ async function swapTokens(params, client) {
86
+ const apiKey = process.env.ZEROX_API_KEY;
87
+ if (!apiKey) {
88
+ throw new Error('0x API key not configured (ZEROX_API_KEY)');
89
+ }
90
+ try {
91
+ const response = await fetch(`https://api.0x.org/swap/permit2/tokens?chainId=8453`, {
92
+ headers: {
93
+ '0x-api-key': apiKey,
94
+ '0x-version': 'v2',
95
+ },
96
+ });
97
+ if (!response.ok) {
98
+ const errorText = await response.text();
99
+ throw new Error(`0x API error: ${response.status} - ${errorText}`);
100
+ }
101
+ const data = await response.json();
102
+ let tokens = data.tokens || [];
103
+ // Filter by query if provided
104
+ if (params.query) {
105
+ const query = params.query.toLowerCase();
106
+ tokens = tokens.filter((token) => token.symbol.toLowerCase().includes(query) ||
107
+ token.name.toLowerCase().includes(query) ||
108
+ token.address.toLowerCase().includes(query));
109
+ }
110
+ return { tokens };
111
+ }
112
+ catch (error) {
113
+ throw new Error(`Failed to fetch tokens: ${error.message}`);
114
+ }
115
+ }
116
+ async function swapPrice(params, client) {
117
+ const apiKey = process.env.ZEROX_API_KEY;
118
+ if (!apiKey) {
119
+ throw new Error('0x API key not configured (ZEROX_API_KEY)');
120
+ }
121
+ try {
122
+ // Get price by requesting a quote for 1 token -> USDC
123
+ const queryParams = new URLSearchParams({
124
+ chainId: '8453',
125
+ sellToken: params.token,
126
+ buyToken: 'USDC',
127
+ sellAmount: '1000000000000000000', // 1 token (assuming 18 decimals)
128
+ });
129
+ const response = await fetch(`https://api.0x.org/swap/permit2/price?${queryParams}`, {
130
+ headers: {
131
+ '0x-api-key': apiKey,
132
+ '0x-version': 'v2',
133
+ },
134
+ });
135
+ if (!response.ok) {
136
+ const errorText = await response.text();
137
+ throw new Error(`0x API error: ${response.status} - ${errorText}`);
138
+ }
139
+ const data = await response.json();
140
+ return {
141
+ token: params.token,
142
+ priceInUSDC: data.price || data.buyAmount,
143
+ source: '0x',
144
+ };
145
+ }
146
+ catch (error) {
147
+ throw new Error(`Failed to get token price: ${error.message}`);
148
+ }
149
+ }
150
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"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"}