@infiniteezverse/monskills-ezpath 0.1.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/.well-known/agent.json +241 -0
- package/.well-known/openapi.json +310 -0
- package/ARENA.md +551 -0
- package/DEPLOYMENT.md +460 -0
- package/LAUNCH.md +345 -0
- package/LICENSE +24 -0
- package/MANIFEST.md +356 -0
- package/MONAD.md +375 -0
- package/QUICKSTART.md +378 -0
- package/README.md +88 -0
- package/X402_IMPLEMENTATION.md +468 -0
- package/dist/agents/arena-agent.d.ts +166 -0
- package/dist/agents/arena-agent.d.ts.map +1 -0
- package/dist/agents/arena-agent.js +267 -0
- package/dist/agents/arena-agent.js.map +1 -0
- package/dist/agents/bankroll-manager.d.ts +114 -0
- package/dist/agents/bankroll-manager.d.ts.map +1 -0
- package/dist/agents/bankroll-manager.js +293 -0
- package/dist/agents/bankroll-manager.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/strategy.d.ts +48 -0
- package/dist/agents/strategy.d.ts.map +1 -0
- package/dist/agents/strategy.js +265 -0
- package/dist/agents/strategy.js.map +1 -0
- package/dist/agents/types.d.ts +197 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +7 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/config/monad.d.ts +175 -0
- package/dist/config/monad.d.ts.map +1 -0
- package/dist/config/monad.js +222 -0
- package/dist/config/monad.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +153 -0
- package/dist/index.js.map +1 -0
- package/dist/payments/eip3009.d.ts +210 -0
- package/dist/payments/eip3009.d.ts.map +1 -0
- package/dist/payments/eip3009.js +261 -0
- package/dist/payments/eip3009.js.map +1 -0
- package/dist/payments/index.d.ts +8 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +25 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/quote-execution.d.ts +76 -0
- package/dist/payments/quote-execution.d.ts.map +1 -0
- package/dist/payments/quote-execution.js +285 -0
- package/dist/payments/quote-execution.js.map +1 -0
- package/dist/types/ezpath.d.ts +65 -0
- package/dist/types/ezpath.d.ts.map +1 -0
- package/dist/types/ezpath.js +7 -0
- package/dist/types/ezpath.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monad-Specific Configuration
|
|
3
|
+
* RPC endpoints, contract addresses, and optimization settings for Monad chain
|
|
4
|
+
*/
|
|
5
|
+
export declare const MONAD_CONFIG: {
|
|
6
|
+
chainId: number;
|
|
7
|
+
name: string;
|
|
8
|
+
nativeToken: string;
|
|
9
|
+
rpc: {
|
|
10
|
+
primary: string;
|
|
11
|
+
fallbacks: string[];
|
|
12
|
+
};
|
|
13
|
+
blockExplorer: string;
|
|
14
|
+
tokens: {
|
|
15
|
+
MON: string;
|
|
16
|
+
USDC: string;
|
|
17
|
+
WMON: string;
|
|
18
|
+
WETH: string;
|
|
19
|
+
USDbC: string;
|
|
20
|
+
DAI: string;
|
|
21
|
+
USDT: string;
|
|
22
|
+
};
|
|
23
|
+
venues: {
|
|
24
|
+
aerodrome: {
|
|
25
|
+
router: string;
|
|
26
|
+
factory: string;
|
|
27
|
+
stable: boolean;
|
|
28
|
+
name: string;
|
|
29
|
+
priority: number;
|
|
30
|
+
features: string[];
|
|
31
|
+
};
|
|
32
|
+
uniswapV3: {
|
|
33
|
+
router: string;
|
|
34
|
+
factory: string;
|
|
35
|
+
name: string;
|
|
36
|
+
priority: number;
|
|
37
|
+
features: string[];
|
|
38
|
+
};
|
|
39
|
+
curve: {
|
|
40
|
+
router: string;
|
|
41
|
+
name: string;
|
|
42
|
+
priority: number;
|
|
43
|
+
features: string[];
|
|
44
|
+
};
|
|
45
|
+
balancer: {
|
|
46
|
+
vault: string;
|
|
47
|
+
name: string;
|
|
48
|
+
priority: number;
|
|
49
|
+
features: string[];
|
|
50
|
+
};
|
|
51
|
+
zerox: {
|
|
52
|
+
name: string;
|
|
53
|
+
priority: number;
|
|
54
|
+
features: string[];
|
|
55
|
+
};
|
|
56
|
+
paraswap: {
|
|
57
|
+
name: string;
|
|
58
|
+
priority: number;
|
|
59
|
+
features: string[];
|
|
60
|
+
};
|
|
61
|
+
oneInch: {
|
|
62
|
+
name: string;
|
|
63
|
+
priority: number;
|
|
64
|
+
features: string[];
|
|
65
|
+
};
|
|
66
|
+
cow: {
|
|
67
|
+
name: string;
|
|
68
|
+
priority: number;
|
|
69
|
+
features: string[];
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
gas: {
|
|
73
|
+
maxPriorityFee: bigint;
|
|
74
|
+
maxFeePerGas: bigint;
|
|
75
|
+
swapGasEstimate: {
|
|
76
|
+
simple: number;
|
|
77
|
+
multiHop: number;
|
|
78
|
+
complex: number;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
performance: {
|
|
82
|
+
maxConcurrentQuotes: number;
|
|
83
|
+
quoteTimeoutMs: number;
|
|
84
|
+
targetLatency: number;
|
|
85
|
+
priceCache: {
|
|
86
|
+
ttl: number;
|
|
87
|
+
maxSize: number;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
ecosystem: {
|
|
91
|
+
monadDAO: string;
|
|
92
|
+
staking: string;
|
|
93
|
+
governance: string;
|
|
94
|
+
};
|
|
95
|
+
settlement: {
|
|
96
|
+
confirmations: number;
|
|
97
|
+
confirmationTimeMs: number;
|
|
98
|
+
permit2: string;
|
|
99
|
+
};
|
|
100
|
+
rateLimit: {
|
|
101
|
+
requestsPerSecond: number;
|
|
102
|
+
burstSize: number;
|
|
103
|
+
retryDelayMs: number;
|
|
104
|
+
};
|
|
105
|
+
monitoring: {
|
|
106
|
+
priceDeviationAlert: number;
|
|
107
|
+
slippageWarn: number;
|
|
108
|
+
latencyWarn: number;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Get RPC endpoint with fallback support
|
|
113
|
+
*/
|
|
114
|
+
export declare function getMonadRPC(): Promise<string>;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a venue is available on Monad
|
|
117
|
+
*/
|
|
118
|
+
export declare function isVenueAvailableOnMonad(venueName: string): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Get venue by priority for Monad
|
|
121
|
+
*/
|
|
122
|
+
export declare function getVenuesByPriority(): ({
|
|
123
|
+
id: string;
|
|
124
|
+
router: string;
|
|
125
|
+
factory: string;
|
|
126
|
+
stable: boolean;
|
|
127
|
+
name: string;
|
|
128
|
+
priority: number;
|
|
129
|
+
features: string[];
|
|
130
|
+
} | {
|
|
131
|
+
id: string;
|
|
132
|
+
router: string;
|
|
133
|
+
factory: string;
|
|
134
|
+
name: string;
|
|
135
|
+
priority: number;
|
|
136
|
+
features: string[];
|
|
137
|
+
} | {
|
|
138
|
+
id: string;
|
|
139
|
+
router: string;
|
|
140
|
+
name: string;
|
|
141
|
+
priority: number;
|
|
142
|
+
features: string[];
|
|
143
|
+
} | {
|
|
144
|
+
id: string;
|
|
145
|
+
vault: string;
|
|
146
|
+
name: string;
|
|
147
|
+
priority: number;
|
|
148
|
+
features: string[];
|
|
149
|
+
} | {
|
|
150
|
+
id: string;
|
|
151
|
+
name: string;
|
|
152
|
+
priority: number;
|
|
153
|
+
features: string[];
|
|
154
|
+
} | {
|
|
155
|
+
id: string;
|
|
156
|
+
name: string;
|
|
157
|
+
priority: number;
|
|
158
|
+
features: string[];
|
|
159
|
+
} | {
|
|
160
|
+
id: string;
|
|
161
|
+
name: string;
|
|
162
|
+
priority: number;
|
|
163
|
+
features: string[];
|
|
164
|
+
} | {
|
|
165
|
+
id: string;
|
|
166
|
+
name: string;
|
|
167
|
+
priority: number;
|
|
168
|
+
features: string[];
|
|
169
|
+
})[];
|
|
170
|
+
/**
|
|
171
|
+
* Get recommended venue for specific token pair on Monad
|
|
172
|
+
*/
|
|
173
|
+
export declare function recommendMonadVenue(tokenIn: string, tokenOut: string): string;
|
|
174
|
+
export default MONAD_CONFIG;
|
|
175
|
+
//# sourceMappingURL=monad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monad.d.ts","sourceRoot":"","sources":["../../src/config/monad.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6IxB,CAAC;AAEF;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA0CnD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOlC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe7E;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Monad-Specific Configuration
|
|
4
|
+
* RPC endpoints, contract addresses, and optimization settings for Monad chain
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MONAD_CONFIG = void 0;
|
|
8
|
+
exports.getMonadRPC = getMonadRPC;
|
|
9
|
+
exports.isVenueAvailableOnMonad = isVenueAvailableOnMonad;
|
|
10
|
+
exports.getVenuesByPriority = getVenuesByPriority;
|
|
11
|
+
exports.recommendMonadVenue = recommendMonadVenue;
|
|
12
|
+
exports.MONAD_CONFIG = {
|
|
13
|
+
// Chain identification
|
|
14
|
+
chainId: 10143,
|
|
15
|
+
name: 'Monad',
|
|
16
|
+
nativeToken: 'MON',
|
|
17
|
+
// RPC Endpoints (primary + fallbacks)
|
|
18
|
+
rpc: {
|
|
19
|
+
primary: 'https://mainnet.monad.xyz/rpc',
|
|
20
|
+
fallbacks: [
|
|
21
|
+
'https://rpc-monad.monadscan.io',
|
|
22
|
+
'https://monad-rpc.publicnode.com',
|
|
23
|
+
'https://monad.drpc.org',
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
// Block explorer
|
|
27
|
+
blockExplorer: 'https://monadiscan.io',
|
|
28
|
+
// Token addresses on Monad
|
|
29
|
+
tokens: {
|
|
30
|
+
MON: '0x0000000000000000000000000000000000000001', // Native
|
|
31
|
+
USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // Bridged from Base
|
|
32
|
+
WMON: '0x0000000000000000000000000000000000000002', // Wrapped MON
|
|
33
|
+
WETH: '0x4200000000000000000000000000000000000006', // Bridged from Base
|
|
34
|
+
USDbC: '0x50c5725949A6F0c72EC20E08a6DE0146F30F1F75', // Bridged
|
|
35
|
+
DAI: '0x6B175474E89094C44Da98b954EedeAC495271d0F', // Bridged
|
|
36
|
+
USDT: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // Bridged
|
|
37
|
+
},
|
|
38
|
+
// Primary routing venues on Monad
|
|
39
|
+
venues: {
|
|
40
|
+
// DEX routers with Monad support
|
|
41
|
+
aerodrome: {
|
|
42
|
+
router: '0x16AAB61dedBad9405299340D63Ee98D1bFd052d3',
|
|
43
|
+
factory: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da',
|
|
44
|
+
stable: false, // Volatile pair routing
|
|
45
|
+
name: 'Aerodrome',
|
|
46
|
+
priority: 1, // Highest priority on Monad
|
|
47
|
+
features: ['volatile', 'stable', 'concentrated'],
|
|
48
|
+
},
|
|
49
|
+
uniswapV3: {
|
|
50
|
+
router: '0xE592427A0AEce92De3Edee1F18E0157C05861564',
|
|
51
|
+
factory: '0x1F98431c8aD98523631AE4a59f267346ea3113cD',
|
|
52
|
+
name: 'Uniswap V3',
|
|
53
|
+
priority: 2,
|
|
54
|
+
features: ['concentrated-liquidity', 'fee-tiers'],
|
|
55
|
+
},
|
|
56
|
+
curve: {
|
|
57
|
+
router: '0x99a58482BD75cbab83b27EC03ca68fF489ee5f38',
|
|
58
|
+
name: 'Curve',
|
|
59
|
+
priority: 3,
|
|
60
|
+
features: ['stable-swap', 'meta-pools'],
|
|
61
|
+
},
|
|
62
|
+
balancer: {
|
|
63
|
+
vault: '0xBA12222222228d8Ba445958a75a0704d566BF2C8',
|
|
64
|
+
name: 'Balancer',
|
|
65
|
+
priority: 4,
|
|
66
|
+
features: ['weighted-pools', 'stable-pools', 'liquidity-bootstrapping'],
|
|
67
|
+
},
|
|
68
|
+
// Aggregators
|
|
69
|
+
zerox: {
|
|
70
|
+
name: '0x',
|
|
71
|
+
priority: 5,
|
|
72
|
+
features: ['meta-aggregator'],
|
|
73
|
+
},
|
|
74
|
+
paraswap: {
|
|
75
|
+
name: 'ParaSwap',
|
|
76
|
+
priority: 6,
|
|
77
|
+
features: ['meta-aggregator'],
|
|
78
|
+
},
|
|
79
|
+
oneInch: {
|
|
80
|
+
name: '1Inch',
|
|
81
|
+
priority: 7,
|
|
82
|
+
features: ['meta-aggregator'],
|
|
83
|
+
},
|
|
84
|
+
cow: {
|
|
85
|
+
name: 'CoW',
|
|
86
|
+
priority: 8,
|
|
87
|
+
features: ['intents', 'batch-auctions'],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
// Gas optimization settings
|
|
91
|
+
gas: {
|
|
92
|
+
// Monad has high throughput, lower gas costs
|
|
93
|
+
maxPriorityFee: BigInt('1000000000'), // 1 gwei (very low)
|
|
94
|
+
maxFeePerGas: BigInt('2000000000'), // 2 gwei
|
|
95
|
+
// Typical tx costs
|
|
96
|
+
swapGasEstimate: {
|
|
97
|
+
simple: 80000, // Single hop
|
|
98
|
+
multiHop: 150000, // Multi-hop
|
|
99
|
+
complex: 250000, // Complex route
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
// Performance settings
|
|
103
|
+
performance: {
|
|
104
|
+
// Monad's high TPS allows aggressive settings
|
|
105
|
+
maxConcurrentQuotes: 50, // 50 parallel venue queries
|
|
106
|
+
quoteTimeoutMs: 1500, // Tight timeout for high throughput
|
|
107
|
+
targetLatency: 800, // Target sub-1 second
|
|
108
|
+
// Caching strategy
|
|
109
|
+
priceCache: {
|
|
110
|
+
ttl: 3000, // 3-second cache (frequent updates)
|
|
111
|
+
maxSize: 1000, // Max cached pairs
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
// Monad ecosystem integration
|
|
115
|
+
ecosystem: {
|
|
116
|
+
monadDAO: '0x0000000000000000000000000000000000000000',
|
|
117
|
+
staking: '0x0000000000000000000000000000000000000000',
|
|
118
|
+
governance: '0x0000000000000000000000000000000000000000',
|
|
119
|
+
},
|
|
120
|
+
// Settlement settings
|
|
121
|
+
settlement: {
|
|
122
|
+
// Standard ERC20 transfers
|
|
123
|
+
confirmations: 1, // Monad finality is fast
|
|
124
|
+
confirmationTimeMs: 2000, // ~2 seconds per block
|
|
125
|
+
// Permit2 support (gas optimization)
|
|
126
|
+
permit2: '0x000000000022D473030F116dDEE9F6B43aC78BA3',
|
|
127
|
+
},
|
|
128
|
+
// Rate limiting (Monad nodes are fast)
|
|
129
|
+
rateLimit: {
|
|
130
|
+
requestsPerSecond: 100,
|
|
131
|
+
burstSize: 500,
|
|
132
|
+
retryDelayMs: 100,
|
|
133
|
+
},
|
|
134
|
+
// Monitoring & alerts
|
|
135
|
+
monitoring: {
|
|
136
|
+
priceDeviationAlert: 0.5, // Alert if price deviates >0.5% from average
|
|
137
|
+
slippageWarn: 0.1, // Warn if slippage >0.1%
|
|
138
|
+
latencyWarn: 2000, // Warn if quote takes >2s
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Get RPC endpoint with fallback support
|
|
143
|
+
*/
|
|
144
|
+
async function getMonadRPC() {
|
|
145
|
+
// Try primary first
|
|
146
|
+
try {
|
|
147
|
+
const response = await fetch(exports.MONAD_CONFIG.rpc.primary, {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers: { 'Content-Type': 'application/json' },
|
|
150
|
+
body: JSON.stringify({
|
|
151
|
+
jsonrpc: '2.0',
|
|
152
|
+
method: 'eth_chainId',
|
|
153
|
+
params: [],
|
|
154
|
+
id: 1,
|
|
155
|
+
}),
|
|
156
|
+
});
|
|
157
|
+
if (response.ok)
|
|
158
|
+
return exports.MONAD_CONFIG.rpc.primary;
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
console.warn('Primary Monad RPC failed, trying fallback');
|
|
162
|
+
}
|
|
163
|
+
// Try fallbacks
|
|
164
|
+
for (const fallback of exports.MONAD_CONFIG.rpc.fallbacks) {
|
|
165
|
+
try {
|
|
166
|
+
const response = await fetch(fallback, {
|
|
167
|
+
method: 'POST',
|
|
168
|
+
headers: { 'Content-Type': 'application/json' },
|
|
169
|
+
body: JSON.stringify({
|
|
170
|
+
jsonrpc: '2.0',
|
|
171
|
+
method: 'eth_chainId',
|
|
172
|
+
params: [],
|
|
173
|
+
id: 1,
|
|
174
|
+
}),
|
|
175
|
+
});
|
|
176
|
+
if (response.ok)
|
|
177
|
+
return fallback;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// All failed, return primary anyway
|
|
184
|
+
console.error('All Monad RPC endpoints failed, using primary as fallback');
|
|
185
|
+
return exports.MONAD_CONFIG.rpc.primary;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Check if a venue is available on Monad
|
|
189
|
+
*/
|
|
190
|
+
function isVenueAvailableOnMonad(venueName) {
|
|
191
|
+
return Object.values(exports.MONAD_CONFIG.venues).some(v => v.name.toLowerCase() === venueName.toLowerCase());
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get venue by priority for Monad
|
|
195
|
+
*/
|
|
196
|
+
function getVenuesByPriority() {
|
|
197
|
+
return Object.entries(exports.MONAD_CONFIG.venues)
|
|
198
|
+
.map(([key, config]) => ({
|
|
199
|
+
...config,
|
|
200
|
+
id: key,
|
|
201
|
+
}))
|
|
202
|
+
.sort((a, b) => a.priority - b.priority);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get recommended venue for specific token pair on Monad
|
|
206
|
+
*/
|
|
207
|
+
function recommendMonadVenue(tokenIn, tokenOut) {
|
|
208
|
+
// Aerodrome is default for MON pairs (highest priority)
|
|
209
|
+
if (tokenIn === exports.MONAD_CONFIG.tokens.MON ||
|
|
210
|
+
tokenOut === exports.MONAD_CONFIG.tokens.MON) {
|
|
211
|
+
return 'aerodrome';
|
|
212
|
+
}
|
|
213
|
+
// Uniswap V3 for stables
|
|
214
|
+
if ((tokenIn === exports.MONAD_CONFIG.tokens.USDC && tokenOut === exports.MONAD_CONFIG.tokens.USDT) ||
|
|
215
|
+
(tokenIn === exports.MONAD_CONFIG.tokens.USDT && tokenOut === exports.MONAD_CONFIG.tokens.USDC)) {
|
|
216
|
+
return 'curve'; // Curve is optimal for stables
|
|
217
|
+
}
|
|
218
|
+
// Default: use top-priority venue (Aerodrome)
|
|
219
|
+
return 'aerodrome';
|
|
220
|
+
}
|
|
221
|
+
exports.default = exports.MONAD_CONFIG;
|
|
222
|
+
//# sourceMappingURL=monad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monad.js","sourceRoot":"","sources":["../../src/config/monad.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EZ-Path MONSKILLS Plugin
|
|
3
|
+
* Exposes EZ-Path DEX routing as a MONSKILLS skill for agent use
|
|
4
|
+
*/
|
|
5
|
+
import { EZPathQuoteRequest, QuoteResult } from './types/ezpath';
|
|
6
|
+
/**
|
|
7
|
+
* Get a DEX price quote from EZ-Path
|
|
8
|
+
* Races 10 venues and returns the best price
|
|
9
|
+
*
|
|
10
|
+
* @param request - Quote parameters (chain, tokens, amount)
|
|
11
|
+
* @returns Quote result with price and sources
|
|
12
|
+
*/
|
|
13
|
+
export declare function getQuote(request: EZPathQuoteRequest): Promise<QuoteResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Get price for a token pair in human-readable format
|
|
16
|
+
* Convenience wrapper around getQuote
|
|
17
|
+
*
|
|
18
|
+
* @param chain - Blockchain (base, monad, etc.)
|
|
19
|
+
* @param sellToken - Token to sell (address)
|
|
20
|
+
* @param buyToken - Token to buy (address)
|
|
21
|
+
* @param amount - Amount in atomic units
|
|
22
|
+
* @returns Price as decimal string
|
|
23
|
+
*/
|
|
24
|
+
export declare function getPrice(chain: string, sellToken: string, buyToken: string, amount: string): Promise<{
|
|
25
|
+
price: string;
|
|
26
|
+
sources: string[];
|
|
27
|
+
} | {
|
|
28
|
+
error: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Batch quote multiple pairs
|
|
32
|
+
* Useful for portfolio valuation
|
|
33
|
+
*/
|
|
34
|
+
export declare function batchQuotes(requests: EZPathQuoteRequest[]): Promise<QuoteResult[]>;
|
|
35
|
+
export * from './types/ezpath';
|
|
36
|
+
export declare const skill: {
|
|
37
|
+
name: string;
|
|
38
|
+
version: string;
|
|
39
|
+
description: string;
|
|
40
|
+
handlers: {
|
|
41
|
+
getQuote: typeof getQuote;
|
|
42
|
+
getPrice: typeof getPrice;
|
|
43
|
+
batchQuotes: typeof batchQuotes;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export default skill;
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKjF;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4EhF;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAanE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CAExB;AAGD,cAAc,gBAAgB,CAAC;AAG/B,eAAO,MAAM,KAAK;;;;;;;;;CASjB,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* EZ-Path MONSKILLS Plugin
|
|
4
|
+
* Exposes EZ-Path DEX routing as a MONSKILLS skill for agent use
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.skill = void 0;
|
|
25
|
+
exports.getQuote = getQuote;
|
|
26
|
+
exports.getPrice = getPrice;
|
|
27
|
+
exports.batchQuotes = batchQuotes;
|
|
28
|
+
const axios_1 = __importDefault(require("axios"));
|
|
29
|
+
const EZPATH_URL = process.env.EZPATH_URL || 'https://ezpath.myezverse.xyz';
|
|
30
|
+
const API_ENDPOINT = `${EZPATH_URL}/api/v1/quote`;
|
|
31
|
+
/**
|
|
32
|
+
* Get a DEX price quote from EZ-Path
|
|
33
|
+
* Races 10 venues and returns the best price
|
|
34
|
+
*
|
|
35
|
+
* @param request - Quote parameters (chain, tokens, amount)
|
|
36
|
+
* @returns Quote result with price and sources
|
|
37
|
+
*/
|
|
38
|
+
async function getQuote(request) {
|
|
39
|
+
try {
|
|
40
|
+
// Validate inputs
|
|
41
|
+
if (!request.sellToken || !request.buyToken || !request.sellAmount) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
error: 'Missing required parameters: sellToken, buyToken, sellAmount',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Build query parameters
|
|
48
|
+
const params = new URLSearchParams({
|
|
49
|
+
chain: request.chain || 'base',
|
|
50
|
+
sellToken: request.sellToken,
|
|
51
|
+
buyToken: request.buyToken,
|
|
52
|
+
sellAmount: request.sellAmount,
|
|
53
|
+
});
|
|
54
|
+
if (request.slippagePercentage !== undefined) {
|
|
55
|
+
params.append('slippagePercentage', request.slippagePercentage.toString());
|
|
56
|
+
}
|
|
57
|
+
// Call EZ-Path endpoint
|
|
58
|
+
const response = await axios_1.default.get(`${API_ENDPOINT}?${params}`, {
|
|
59
|
+
timeout: 10000,
|
|
60
|
+
validateStatus: () => true, // Accept all statuses
|
|
61
|
+
});
|
|
62
|
+
// Handle 402 Payment Required
|
|
63
|
+
if (response.status === 402) {
|
|
64
|
+
const data = response.data;
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
paymentRequired: true,
|
|
68
|
+
estimatedFee: {
|
|
69
|
+
usd: data.unlock_fee_usd,
|
|
70
|
+
atomic: data.tiers?.basic?.min_atomic || '30000',
|
|
71
|
+
token: 'USDC',
|
|
72
|
+
},
|
|
73
|
+
error: `Payment required: ${data.unlock_fee_usd} USDC via X402 EIP-3009`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Handle successful quote
|
|
77
|
+
if (response.status === 200) {
|
|
78
|
+
const data = response.data;
|
|
79
|
+
return {
|
|
80
|
+
success: true,
|
|
81
|
+
data: {
|
|
82
|
+
status: 'ok',
|
|
83
|
+
request_id: data.request_id,
|
|
84
|
+
sellToken: data.sellToken,
|
|
85
|
+
buyToken: data.buyToken,
|
|
86
|
+
sellAmount: data.sellAmount,
|
|
87
|
+
buyAmount: data.buyAmount,
|
|
88
|
+
price: data.price,
|
|
89
|
+
sources: data.sources || [],
|
|
90
|
+
routingEngine: data.routingEngine || 'unknown',
|
|
91
|
+
tier: data.tier || 'basic',
|
|
92
|
+
settlement_tx: data.settlement_tx,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Handle errors
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
error: `EZ-Path error (${response.status}): ${JSON.stringify(response.data)}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
104
|
+
return {
|
|
105
|
+
success: false,
|
|
106
|
+
error: `Request failed: ${message}`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get price for a token pair in human-readable format
|
|
112
|
+
* Convenience wrapper around getQuote
|
|
113
|
+
*
|
|
114
|
+
* @param chain - Blockchain (base, monad, etc.)
|
|
115
|
+
* @param sellToken - Token to sell (address)
|
|
116
|
+
* @param buyToken - Token to buy (address)
|
|
117
|
+
* @param amount - Amount in atomic units
|
|
118
|
+
* @returns Price as decimal string
|
|
119
|
+
*/
|
|
120
|
+
async function getPrice(chain, sellToken, buyToken, amount) {
|
|
121
|
+
const result = await getQuote({ chain: chain, sellToken, buyToken, sellAmount: amount });
|
|
122
|
+
if (result.success && result.data) {
|
|
123
|
+
return {
|
|
124
|
+
price: result.data.price,
|
|
125
|
+
sources: result.data.sources.map((s) => s.name),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
error: result.error || 'Failed to get price',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Batch quote multiple pairs
|
|
134
|
+
* Useful for portfolio valuation
|
|
135
|
+
*/
|
|
136
|
+
async function batchQuotes(requests) {
|
|
137
|
+
return Promise.all(requests.map((req) => getQuote(req)));
|
|
138
|
+
}
|
|
139
|
+
// Export types
|
|
140
|
+
__exportStar(require("./types/ezpath"), exports);
|
|
141
|
+
// MONSKILLS-compatible exports
|
|
142
|
+
exports.skill = {
|
|
143
|
+
name: 'ez-path',
|
|
144
|
+
version: '0.1.0',
|
|
145
|
+
description: 'DEX price quotes via EZ-Path (races 10 venues)',
|
|
146
|
+
handlers: {
|
|
147
|
+
getQuote,
|
|
148
|
+
getPrice,
|
|
149
|
+
batchQuotes,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
exports.default = exports.skill;
|
|
153
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|