agentwallet-sdk 5.0.0 → 5.0.1

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 (371) hide show
  1. package/README.md +221 -0
  2. package/dist/abi.d.ts +397 -0
  3. package/dist/abi.d.ts.map +1 -0
  4. package/dist/abi.js +255 -0
  5. package/dist/abi.js.map +1 -0
  6. package/dist/ap2/index.d.ts +185 -0
  7. package/dist/ap2/index.d.ts.map +1 -0
  8. package/dist/ap2/index.js +255 -0
  9. package/dist/ap2/index.js.map +1 -0
  10. package/dist/bridge/abis.d.ts +64 -0
  11. package/dist/bridge/abis.d.ts.map +1 -0
  12. package/dist/bridge/abis.js +129 -0
  13. package/dist/bridge/abis.js.map +1 -0
  14. package/dist/bridge/client.d.ts +35 -0
  15. package/dist/bridge/client.d.ts.map +1 -0
  16. package/dist/bridge/client.js +230 -0
  17. package/dist/bridge/client.js.map +1 -0
  18. package/dist/bridge/index.d.ts +4 -0
  19. package/dist/bridge/index.d.ts.map +1 -0
  20. package/dist/bridge/index.js +3 -0
  21. package/dist/bridge/index.js.map +1 -0
  22. package/dist/bridge/types.d.ts +69 -0
  23. package/dist/bridge/types.d.ts.map +1 -0
  24. package/dist/bridge/types.js +53 -0
  25. package/dist/bridge/types.js.map +1 -0
  26. package/dist/bridge/unified.d.ts +101 -0
  27. package/dist/bridge/unified.d.ts.map +1 -0
  28. package/dist/bridge/unified.js +284 -0
  29. package/dist/bridge/unified.js.map +1 -0
  30. package/dist/chains.d.ts +62 -0
  31. package/dist/chains.d.ts.map +1 -0
  32. package/dist/chains.js +108 -0
  33. package/dist/chains.js.map +1 -0
  34. package/dist/escrow/MutualStakeEscrow.d.ts +75 -0
  35. package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -0
  36. package/dist/escrow/MutualStakeEscrow.js +339 -0
  37. package/dist/escrow/MutualStakeEscrow.js.map +1 -0
  38. package/dist/escrow/types.d.ts +59 -0
  39. package/dist/escrow/types.d.ts.map +1 -0
  40. package/dist/escrow/types.js +11 -0
  41. package/dist/escrow/types.js.map +1 -0
  42. package/dist/escrow/verifiers.d.ts +26 -0
  43. package/dist/escrow/verifiers.d.ts.map +1 -0
  44. package/dist/escrow/verifiers.js +53 -0
  45. package/dist/escrow/verifiers.js.map +1 -0
  46. package/dist/fiat/index.d.ts +10 -0
  47. package/dist/fiat/index.d.ts.map +1 -0
  48. package/dist/fiat/index.js +9 -0
  49. package/dist/fiat/index.js.map +1 -0
  50. package/dist/fiat/onramp.d.ts +101 -0
  51. package/dist/fiat/onramp.d.ts.map +1 -0
  52. package/dist/fiat/onramp.js +155 -0
  53. package/dist/fiat/onramp.js.map +1 -0
  54. package/dist/fiat/providers/index.d.ts +16 -0
  55. package/dist/fiat/providers/index.d.ts.map +1 -0
  56. package/dist/fiat/providers/index.js +30 -0
  57. package/dist/fiat/providers/index.js.map +1 -0
  58. package/dist/fiat/providers/moonpay.d.ts +22 -0
  59. package/dist/fiat/providers/moonpay.d.ts.map +1 -0
  60. package/dist/fiat/providers/moonpay.js +107 -0
  61. package/dist/fiat/providers/moonpay.js.map +1 -0
  62. package/dist/fiat/providers/stripe.d.ts +26 -0
  63. package/dist/fiat/providers/stripe.d.ts.map +1 -0
  64. package/dist/fiat/providers/stripe.js +135 -0
  65. package/dist/fiat/providers/stripe.js.map +1 -0
  66. package/dist/fiat/providers/transak.d.ts +26 -0
  67. package/dist/fiat/providers/transak.d.ts.map +1 -0
  68. package/dist/fiat/providers/transak.js +119 -0
  69. package/dist/fiat/providers/transak.js.map +1 -0
  70. package/dist/fiat/types.d.ts +106 -0
  71. package/dist/fiat/types.d.ts.map +1 -0
  72. package/dist/fiat/types.js +13 -0
  73. package/dist/fiat/types.js.map +1 -0
  74. package/dist/flash/executor.d.ts +119 -0
  75. package/dist/flash/executor.d.ts.map +1 -0
  76. package/dist/flash/executor.js +195 -0
  77. package/dist/flash/executor.js.map +1 -0
  78. package/dist/flash/index.d.ts +28 -0
  79. package/dist/flash/index.d.ts.map +1 -0
  80. package/dist/flash/index.js +29 -0
  81. package/dist/flash/index.js.map +1 -0
  82. package/dist/flash/scanner.d.ts +133 -0
  83. package/dist/flash/scanner.d.ts.map +1 -0
  84. package/dist/flash/scanner.js +212 -0
  85. package/dist/flash/scanner.js.map +1 -0
  86. package/dist/flash/types.d.ts +136 -0
  87. package/dist/flash/types.d.ts.map +1 -0
  88. package/dist/flash/types.js +23 -0
  89. package/dist/flash/types.js.map +1 -0
  90. package/dist/gas/index.d.ts +4 -0
  91. package/dist/gas/index.d.ts.map +1 -0
  92. package/dist/gas/index.js +3 -0
  93. package/dist/gas/index.js.map +1 -0
  94. package/dist/gas/sponsor.d.ts +70 -0
  95. package/dist/gas/sponsor.d.ts.map +1 -0
  96. package/dist/gas/sponsor.js +193 -0
  97. package/dist/gas/sponsor.js.map +1 -0
  98. package/dist/gas/types.d.ts +76 -0
  99. package/dist/gas/types.d.ts.map +1 -0
  100. package/dist/gas/types.js +21 -0
  101. package/dist/gas/types.js.map +1 -0
  102. package/dist/identity/agent-identity.d.ts +276 -0
  103. package/dist/identity/agent-identity.d.ts.map +1 -0
  104. package/dist/identity/agent-identity.js +300 -0
  105. package/dist/identity/agent-identity.js.map +1 -0
  106. package/dist/identity/erc6551.d.ts +441 -0
  107. package/dist/identity/erc6551.d.ts.map +1 -0
  108. package/dist/identity/erc6551.js +517 -0
  109. package/dist/identity/erc6551.js.map +1 -0
  110. package/dist/identity/erc8004.d.ts +305 -0
  111. package/dist/identity/erc8004.d.ts.map +1 -0
  112. package/dist/identity/erc8004.js +413 -0
  113. package/dist/identity/erc8004.js.map +1 -0
  114. package/dist/identity/index.d.ts +7 -0
  115. package/dist/identity/index.d.ts.map +1 -0
  116. package/dist/identity/index.js +4 -0
  117. package/dist/identity/index.js.map +1 -0
  118. package/dist/identity/reputation.d.ts +318 -0
  119. package/dist/identity/reputation.d.ts.map +1 -0
  120. package/dist/identity/reputation.js +272 -0
  121. package/dist/identity/reputation.js.map +1 -0
  122. package/dist/identity/validation.d.ts +284 -0
  123. package/dist/identity/validation.d.ts.map +1 -0
  124. package/dist/identity/validation.js +226 -0
  125. package/dist/identity/validation.js.map +1 -0
  126. package/dist/index.d.ts +38803 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +376 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/mev/index.d.ts +4 -0
  131. package/dist/mev/index.d.ts.map +1 -0
  132. package/dist/mev/index.js +8 -0
  133. package/dist/mev/index.js.map +1 -0
  134. package/dist/mev/protection.d.ts +54 -0
  135. package/dist/mev/protection.d.ts.map +1 -0
  136. package/dist/mev/protection.js +185 -0
  137. package/dist/mev/protection.js.map +1 -0
  138. package/dist/mev/risk.d.ts +19 -0
  139. package/dist/mev/risk.d.ts.map +1 -0
  140. package/dist/mev/risk.js +95 -0
  141. package/dist/mev/risk.js.map +1 -0
  142. package/dist/mev/types.d.ts +49 -0
  143. package/dist/mev/types.d.ts.map +1 -0
  144. package/dist/mev/types.js +2 -0
  145. package/dist/mev/types.js.map +1 -0
  146. package/dist/plugins/elizaos.d.ts +52 -0
  147. package/dist/plugins/elizaos.d.ts.map +1 -0
  148. package/dist/plugins/elizaos.js +89 -0
  149. package/dist/plugins/elizaos.js.map +1 -0
  150. package/dist/policy/SpendingPolicy.d.ts +106 -0
  151. package/dist/policy/SpendingPolicy.d.ts.map +1 -0
  152. package/dist/policy/SpendingPolicy.js +155 -0
  153. package/dist/policy/SpendingPolicy.js.map +1 -0
  154. package/dist/policy/SpendingPolicy.test.d.ts +2 -0
  155. package/dist/policy/SpendingPolicy.test.d.ts.map +1 -0
  156. package/dist/policy/SpendingPolicy.test.js +143 -0
  157. package/dist/policy/SpendingPolicy.test.js.map +1 -0
  158. package/dist/settlement/index.d.ts +4 -0
  159. package/dist/settlement/index.d.ts.map +1 -0
  160. package/dist/settlement/index.js +3 -0
  161. package/dist/settlement/index.js.map +1 -0
  162. package/dist/settlement/types.d.ts +66 -0
  163. package/dist/settlement/types.d.ts.map +1 -0
  164. package/dist/settlement/types.js +37 -0
  165. package/dist/settlement/types.js.map +1 -0
  166. package/dist/settlement/verifier.d.ts +75 -0
  167. package/dist/settlement/verifier.d.ts.map +1 -0
  168. package/dist/settlement/verifier.js +354 -0
  169. package/dist/settlement/verifier.js.map +1 -0
  170. package/dist/solana/bridge.d.ts +144 -0
  171. package/dist/solana/bridge.d.ts.map +1 -0
  172. package/dist/solana/bridge.js +352 -0
  173. package/dist/solana/bridge.js.map +1 -0
  174. package/dist/solana/index.d.ts +8 -0
  175. package/dist/solana/index.d.ts.map +1 -0
  176. package/dist/solana/index.js +6 -0
  177. package/dist/solana/index.js.map +1 -0
  178. package/dist/solana/swap.d.ts +85 -0
  179. package/dist/solana/swap.d.ts.map +1 -0
  180. package/dist/solana/swap.js +173 -0
  181. package/dist/solana/swap.js.map +1 -0
  182. package/dist/solana/types.d.ts +126 -0
  183. package/dist/solana/types.d.ts.map +1 -0
  184. package/dist/solana/types.js +10 -0
  185. package/dist/solana/types.js.map +1 -0
  186. package/dist/solana/wallet.d.ts +83 -0
  187. package/dist/solana/wallet.d.ts.map +1 -0
  188. package/dist/solana/wallet.js +164 -0
  189. package/dist/solana/wallet.js.map +1 -0
  190. package/dist/solana/x402.d.ts +69 -0
  191. package/dist/solana/x402.d.ts.map +1 -0
  192. package/dist/solana/x402.js +154 -0
  193. package/dist/solana/x402.js.map +1 -0
  194. package/dist/solver/adapter.d.ts +47 -0
  195. package/dist/solver/adapter.d.ts.map +1 -0
  196. package/dist/solver/adapter.js +146 -0
  197. package/dist/solver/adapter.js.map +1 -0
  198. package/dist/solver/analyzer.d.ts +48 -0
  199. package/dist/solver/analyzer.d.ts.map +1 -0
  200. package/dist/solver/analyzer.js +171 -0
  201. package/dist/solver/analyzer.js.map +1 -0
  202. package/dist/solver/builder.d.ts +31 -0
  203. package/dist/solver/builder.d.ts.map +1 -0
  204. package/dist/solver/builder.js +60 -0
  205. package/dist/solver/builder.js.map +1 -0
  206. package/dist/solver/index.d.ts +22 -0
  207. package/dist/solver/index.d.ts.map +1 -0
  208. package/dist/solver/index.js +25 -0
  209. package/dist/solver/index.js.map +1 -0
  210. package/dist/solver/types.d.ts +115 -0
  211. package/dist/solver/types.d.ts.map +1 -0
  212. package/dist/solver/types.js +10 -0
  213. package/dist/solver/types.js.map +1 -0
  214. package/dist/spend-guard/index.d.ts +125 -0
  215. package/dist/spend-guard/index.d.ts.map +1 -0
  216. package/dist/spend-guard/index.js +150 -0
  217. package/dist/spend-guard/index.js.map +1 -0
  218. package/dist/swap/SwapModule.d.ts +34 -0
  219. package/dist/swap/SwapModule.d.ts.map +1 -0
  220. package/dist/swap/SwapModule.js +144 -0
  221. package/dist/swap/SwapModule.js.map +1 -0
  222. package/dist/swap/abi.d.ts +51 -0
  223. package/dist/swap/abi.d.ts.map +1 -0
  224. package/dist/swap/abi.js +118 -0
  225. package/dist/swap/abi.js.map +1 -0
  226. package/dist/swap/index.d.ts +5 -0
  227. package/dist/swap/index.d.ts.map +1 -0
  228. package/dist/swap/index.js +4 -0
  229. package/dist/swap/index.js.map +1 -0
  230. package/dist/swap/router/cache.d.ts +13 -0
  231. package/dist/swap/router/cache.d.ts.map +1 -0
  232. package/dist/swap/router/cache.js +30 -0
  233. package/dist/swap/router/cache.js.map +1 -0
  234. package/dist/swap/router/flashbots.d.ts +10 -0
  235. package/dist/swap/router/flashbots.d.ts.map +1 -0
  236. package/dist/swap/router/flashbots.js +43 -0
  237. package/dist/swap/router/flashbots.js.map +1 -0
  238. package/dist/swap/router/health.d.ts +17 -0
  239. package/dist/swap/router/health.d.ts.map +1 -0
  240. package/dist/swap/router/health.js +38 -0
  241. package/dist/swap/router/health.js.map +1 -0
  242. package/dist/swap/router/index.d.ts +10 -0
  243. package/dist/swap/router/index.d.ts.map +1 -0
  244. package/dist/swap/router/index.js +10 -0
  245. package/dist/swap/router/index.js.map +1 -0
  246. package/dist/swap/router/providers/cowswap.d.ts +11 -0
  247. package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
  248. package/dist/swap/router/providers/cowswap.js +79 -0
  249. package/dist/swap/router/providers/cowswap.js.map +1 -0
  250. package/dist/swap/router/providers/index.d.ts +20 -0
  251. package/dist/swap/router/providers/index.d.ts.map +1 -0
  252. package/dist/swap/router/providers/index.js +32 -0
  253. package/dist/swap/router/providers/index.js.map +1 -0
  254. package/dist/swap/router/providers/jupiter.d.ts +12 -0
  255. package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
  256. package/dist/swap/router/providers/jupiter.js +73 -0
  257. package/dist/swap/router/providers/jupiter.js.map +1 -0
  258. package/dist/swap/router/providers/lifi.d.ts +11 -0
  259. package/dist/swap/router/providers/lifi.d.ts.map +1 -0
  260. package/dist/swap/router/providers/lifi.js +123 -0
  261. package/dist/swap/router/providers/lifi.js.map +1 -0
  262. package/dist/swap/router/providers/oneinch.d.ts +13 -0
  263. package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
  264. package/dist/swap/router/providers/oneinch.js +71 -0
  265. package/dist/swap/router/providers/oneinch.js.map +1 -0
  266. package/dist/swap/router/providers/paraswap.d.ts +11 -0
  267. package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
  268. package/dist/swap/router/providers/paraswap.js +73 -0
  269. package/dist/swap/router/providers/paraswap.js.map +1 -0
  270. package/dist/swap/router/providers/uniswap.d.ts +31 -0
  271. package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
  272. package/dist/swap/router/providers/uniswap.js +237 -0
  273. package/dist/swap/router/providers/uniswap.js.map +1 -0
  274. package/dist/swap/router/providers/zerox.d.ts +13 -0
  275. package/dist/swap/router/providers/zerox.d.ts.map +1 -0
  276. package/dist/swap/router/providers/zerox.js +94 -0
  277. package/dist/swap/router/providers/zerox.js.map +1 -0
  278. package/dist/swap/router/router.d.ts +86 -0
  279. package/dist/swap/router/router.d.ts.map +1 -0
  280. package/dist/swap/router/router.js +224 -0
  281. package/dist/swap/router/router.js.map +1 -0
  282. package/dist/swap/router/rsi/engine.d.ts +60 -0
  283. package/dist/swap/router/rsi/engine.d.ts.map +1 -0
  284. package/dist/swap/router/rsi/engine.js +483 -0
  285. package/dist/swap/router/rsi/engine.js.map +1 -0
  286. package/dist/swap/router/rsi/index.d.ts +3 -0
  287. package/dist/swap/router/rsi/index.d.ts.map +1 -0
  288. package/dist/swap/router/rsi/index.js +3 -0
  289. package/dist/swap/router/rsi/index.js.map +1 -0
  290. package/dist/swap/router/rsi/types.d.ts +106 -0
  291. package/dist/swap/router/rsi/types.d.ts.map +1 -0
  292. package/dist/swap/router/rsi/types.js +3 -0
  293. package/dist/swap/router/rsi/types.js.map +1 -0
  294. package/dist/swap/router/types.d.ts +120 -0
  295. package/dist/swap/router/types.d.ts.map +1 -0
  296. package/dist/swap/router/types.js +16 -0
  297. package/dist/swap/router/types.js.map +1 -0
  298. package/dist/swap/types.d.ts +51 -0
  299. package/dist/swap/types.d.ts.map +1 -0
  300. package/dist/swap/types.js +17 -0
  301. package/dist/swap/types.js.map +1 -0
  302. package/dist/tax/engine.d.ts +131 -0
  303. package/dist/tax/engine.d.ts.map +1 -0
  304. package/dist/tax/engine.js +307 -0
  305. package/dist/tax/engine.js.map +1 -0
  306. package/dist/tax/index.d.ts +9 -0
  307. package/dist/tax/index.d.ts.map +1 -0
  308. package/dist/tax/index.js +12 -0
  309. package/dist/tax/index.js.map +1 -0
  310. package/dist/tax/lots.d.ts +60 -0
  311. package/dist/tax/lots.d.ts.map +1 -0
  312. package/dist/tax/lots.js +129 -0
  313. package/dist/tax/lots.js.map +1 -0
  314. package/dist/tax/types.d.ts +113 -0
  315. package/dist/tax/types.d.ts.map +1 -0
  316. package/dist/tax/types.js +18 -0
  317. package/dist/tax/types.js.map +1 -0
  318. package/dist/types.d.ts +110 -0
  319. package/dist/types.d.ts.map +1 -0
  320. package/dist/types.js +9 -0
  321. package/dist/types.js.map +1 -0
  322. package/dist/x402/__tests__/budget.test.d.ts +2 -0
  323. package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
  324. package/dist/x402/__tests__/budget.test.js +114 -0
  325. package/dist/x402/__tests__/budget.test.js.map +1 -0
  326. package/dist/x402/__tests__/client.test.d.ts +2 -0
  327. package/dist/x402/__tests__/client.test.d.ts.map +1 -0
  328. package/dist/x402/__tests__/client.test.js +107 -0
  329. package/dist/x402/__tests__/client.test.js.map +1 -0
  330. package/dist/x402/budget.d.ts +52 -0
  331. package/dist/x402/budget.d.ts.map +1 -0
  332. package/dist/x402/budget.js +113 -0
  333. package/dist/x402/budget.js.map +1 -0
  334. package/dist/x402/chains/abstract/index.d.ts +135 -0
  335. package/dist/x402/chains/abstract/index.d.ts.map +1 -0
  336. package/dist/x402/chains/abstract/index.js +190 -0
  337. package/dist/x402/chains/abstract/index.js.map +1 -0
  338. package/dist/x402/client.d.ts +60 -0
  339. package/dist/x402/client.d.ts.map +1 -0
  340. package/dist/x402/client.js +205 -0
  341. package/dist/x402/client.js.map +1 -0
  342. package/dist/x402/index.d.ts +8 -0
  343. package/dist/x402/index.d.ts.map +1 -0
  344. package/dist/x402/index.js +8 -0
  345. package/dist/x402/index.js.map +1 -0
  346. package/dist/x402/middleware.d.ts +37 -0
  347. package/dist/x402/middleware.d.ts.map +1 -0
  348. package/dist/x402/middleware.js +65 -0
  349. package/dist/x402/middleware.js.map +1 -0
  350. package/dist/x402/types.d.ts +91 -0
  351. package/dist/x402/types.d.ts.map +1 -0
  352. package/dist/x402/types.js +9 -0
  353. package/dist/x402/types.js.map +1 -0
  354. package/dist/yield/index.d.ts +26 -0
  355. package/dist/yield/index.d.ts.map +1 -0
  356. package/dist/yield/index.js +29 -0
  357. package/dist/yield/index.js.map +1 -0
  358. package/dist/yield/rates.d.ts +114 -0
  359. package/dist/yield/rates.d.ts.map +1 -0
  360. package/dist/yield/rates.js +351 -0
  361. package/dist/yield/rates.js.map +1 -0
  362. package/dist/yield/types.d.ts +134 -0
  363. package/dist/yield/types.d.ts.map +1 -0
  364. package/dist/yield/types.js +24 -0
  365. package/dist/yield/types.js.map +1 -0
  366. package/dist/yield/vault.d.ts +112 -0
  367. package/dist/yield/vault.d.ts.map +1 -0
  368. package/dist/yield/vault.js +264 -0
  369. package/dist/yield/vault.js.map +1 -0
  370. package/package.json +46 -7
  371. package/index.js +0 -2
@@ -0,0 +1,224 @@
1
+ import { buildDefaultProviders } from './providers/index.js';
2
+ import { QuoteCache } from './cache.js';
3
+ import { ProviderHealthTracker } from './health.js';
4
+ import { FlashbotsProtectRpc } from './flashbots.js';
5
+ import { SwapRSIEngine } from './rsi/engine.js';
6
+ const DEFAULT_TIMEOUT_MS = 5000;
7
+ const DEFAULT_STRATEGY = 'best-net-output';
8
+ const DEFAULT_SLIPPAGE_BPS = 50;
9
+ const DEFAULT_CACHE_TTL_MS = 3000;
10
+ // ─── Strategy Scoring ────────────────────────────────────────────────────────
11
+ export function scoreQuote(quote, strategy) {
12
+ // If we have USD pricing info, use normalized scoring
13
+ if (quote.toTokenDecimals !== undefined && quote.toTokenPriceUsd !== undefined) {
14
+ const outputUsd = (Number(quote.toAmount) / Math.pow(10, quote.toTokenDecimals)) * quote.toTokenPriceUsd;
15
+ const slippageCostUsd = outputUsd * (quote.priceImpact / 100);
16
+ switch (strategy) {
17
+ case 'best-net-output':
18
+ return outputUsd - quote.gasEstimateUsd - slippageCostUsd;
19
+ case 'fastest':
20
+ return -quote.estimatedTimeMs;
21
+ case 'lowest-gas':
22
+ return -quote.gasEstimateUsd;
23
+ case 'mev-protected':
24
+ return quote.mevProtected
25
+ ? (outputUsd - quote.gasEstimateUsd) * 1.01
26
+ : outputUsd - quote.gasEstimateUsd;
27
+ }
28
+ }
29
+ // Fallback: original scoring (for quotes without USD info)
30
+ switch (strategy) {
31
+ case 'best-net-output':
32
+ return Number(quote.toAmount) - quote.gasEstimateUsd * 1e6;
33
+ case 'fastest':
34
+ return -quote.estimatedTimeMs;
35
+ case 'lowest-gas':
36
+ return -Number(quote.gasEstimate);
37
+ case 'mev-protected':
38
+ return quote.mevProtected ? Number(quote.toAmount) * 1.01 : Number(quote.toAmount);
39
+ }
40
+ }
41
+ // ─── SmartSwapRouter ─────────────────────────────────────────────────────────
42
+ export class SmartSwapRouter {
43
+ constructor(config = {}) {
44
+ this.strategy = config.strategy ?? DEFAULT_STRATEGY;
45
+ this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
46
+ this.slippageBps = config.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
47
+ this.includeProviders = config.providers ? new Set(config.providers) : null;
48
+ this.excludeProviders = new Set(config.excludeProviders ?? []);
49
+ const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
50
+ this.cache = ttl > 0 ? new QuoteCache(ttl) : null;
51
+ this.health = new ProviderHealthTracker(config.healthMaxFailures ?? 3, config.healthCooldownMs ?? 60000);
52
+ this.providers = buildDefaultProviders({
53
+ oneInchApiKey: config.oneInchApiKey,
54
+ zeroxApiKey: config.zeroxApiKey,
55
+ fetchers: config.fetchers,
56
+ });
57
+ // [MAX-ADDED] RSI engine — opt-in, disabled by default
58
+ if (config.rsi?.enabled) {
59
+ this.rsiEngine = new SwapRSIEngine(config.rsi, config.goals);
60
+ }
61
+ }
62
+ /**
63
+ * Get quotes from all applicable providers in parallel, ranked by strategy.
64
+ * Providers that fail or don't support the chain/pair return null and are skipped.
65
+ * Results are cached for cacheTtlMs (default 3s) to deduplicate burst requests.
66
+ */
67
+ async getQuotes(params) {
68
+ // Cache check
69
+ if (this.cache) {
70
+ const cached = this.cache.get(params);
71
+ if (cached)
72
+ return cached;
73
+ }
74
+ const chain = params.chain.toLowerCase();
75
+ const enrichedParams = {
76
+ ...params,
77
+ slippageBps: params.slippageBps ?? this.slippageBps,
78
+ };
79
+ // Filter providers for this chain + health status
80
+ const eligible = this.providers.filter((p) => {
81
+ if (this.excludeProviders.has(p.name))
82
+ return false;
83
+ if (this.includeProviders && !this.includeProviders.has(p.name))
84
+ return false;
85
+ if (!p.supportedChains.includes(chain))
86
+ return false;
87
+ return this.health.isHealthy(p.name);
88
+ });
89
+ if (eligible.length === 0)
90
+ return [];
91
+ // Query all in parallel with timeout
92
+ const results = await Promise.allSettled(eligible.map((p) => p.getQuote(enrichedParams, this.timeoutMs)));
93
+ const quotes = [];
94
+ for (let i = 0; i < results.length; i++) {
95
+ const r = results[i];
96
+ const providerName = eligible[i].name;
97
+ if (r.status === 'fulfilled' && r.value !== null) {
98
+ this.health.recordSuccess(providerName);
99
+ quotes.push(r.value);
100
+ }
101
+ else if (r.status === 'rejected') {
102
+ this.health.recordFailure(providerName);
103
+ }
104
+ // null result (unsupported) → don't penalize health
105
+ }
106
+ // Rank by strategy
107
+ quotes.sort((a, b) => scoreQuote(b, this.strategy) - scoreQuote(a, this.strategy));
108
+ // [MAX-ADDED] Apply RSI learned weights if engine is active
109
+ if (this.rsiEngine) {
110
+ const weights = this.rsiEngine.getProviderWeights(chain, params.fromToken, params.toToken);
111
+ for (const q of quotes) {
112
+ const w = weights[q.provider] ?? 1.0;
113
+ if (w !== 1.0) {
114
+ q.netOutput = BigInt(Math.round(Number(q.netOutput) * w));
115
+ }
116
+ }
117
+ // Re-sort after weight adjustment
118
+ quotes.sort((a, b) => scoreQuote(b, this.strategy) - scoreQuote(a, this.strategy));
119
+ // Check directives
120
+ const directiveResult = this.rsiEngine.evaluateDirectives({ chain });
121
+ if (!directiveResult.proceed) {
122
+ // Return empty — directive blocks this swap (e.g. gas too high)
123
+ return [];
124
+ }
125
+ }
126
+ // Store in cache
127
+ if (this.cache) {
128
+ this.cache.set(params, quotes);
129
+ }
130
+ return quotes;
131
+ }
132
+ /**
133
+ * Execute the best quote (or a specific one) via the provided wallet.
134
+ * Supports pre-flight simulation, Flashbots Protect routing, and receipt confirmation.
135
+ */
136
+ async executeSwap(quote, wallet, options) {
137
+ if (!quote.txData) {
138
+ throw new Error(`SmartSwapRouter: Quote from '${quote.provider}' does not include txData. ` +
139
+ `Use the provider's SDK directly to execute, or re-quote with a fromAddress.`);
140
+ }
141
+ // Pre-flight simulation
142
+ if (options?.simulate !== false && wallet.simulateTransaction) {
143
+ const sim = await wallet.simulateTransaction(quote.txData);
144
+ if (!sim.success) {
145
+ throw new Error(`SmartSwapRouter: Simulation failed — ${sim.error}. Transaction not sent.`);
146
+ }
147
+ }
148
+ let txHash;
149
+ // Flashbots Protect routing (Ethereum mainnet only)
150
+ if (options?.flashbotsProtect && quote.txData) {
151
+ if (!wallet.signTransaction) {
152
+ throw new Error('SmartSwapRouter: flashbotsProtect requires wallet.signTransaction()');
153
+ }
154
+ const signedTx = await wallet.signTransaction(quote.txData);
155
+ const flashbots = new FlashbotsProtectRpc();
156
+ txHash = await flashbots.sendTransaction(signedTx);
157
+ }
158
+ else {
159
+ if (!wallet.sendTransaction) {
160
+ throw new Error('SmartSwapRouter: wallet must implement sendTransaction()');
161
+ }
162
+ txHash = await wallet.sendTransaction(quote.txData);
163
+ }
164
+ // Optional receipt confirmation
165
+ if (options?.waitForReceipt && wallet.waitForTransaction) {
166
+ const receipt = await wallet.waitForTransaction(txHash, options.confirmations ?? 1);
167
+ return {
168
+ txHash,
169
+ quote,
170
+ chain: 'unknown',
171
+ receipt,
172
+ success: receipt.status === 'success',
173
+ };
174
+ }
175
+ return {
176
+ txHash,
177
+ quote,
178
+ chain: 'unknown',
179
+ };
180
+ }
181
+ /**
182
+ * Return provider names that support the given chain.
183
+ */
184
+ getProviders(chain) {
185
+ const lower = chain.toLowerCase();
186
+ return this.providers
187
+ .filter((p) => p.supportedChains.includes(lower))
188
+ .map((p) => p.name);
189
+ }
190
+ /**
191
+ * Return all chains supported by at least one provider.
192
+ */
193
+ getSupportedChains() {
194
+ const chains = new Set();
195
+ this.providers.forEach((p) => p.supportedChains.forEach((c) => chains.add(c)));
196
+ return Array.from(chains).sort();
197
+ }
198
+ /**
199
+ * Score a quote with the router's current strategy (exposed for testing/comparison).
200
+ */
201
+ scoreQuote(quote) {
202
+ return scoreQuote(quote, this.strategy);
203
+ }
204
+ /**
205
+ * Return health stats for all tracked providers.
206
+ */
207
+ getProviderHealth() {
208
+ return this.health.getStats();
209
+ }
210
+ // ── [MAX-ADDED] RSI Engine access ──────────────────────────────────────────
211
+ /** Get the RSI engine instance (if enabled) */
212
+ getRSIEngine() {
213
+ return this.rsiEngine;
214
+ }
215
+ /** Load previously persisted RSI state */
216
+ loadRSIState(state) {
217
+ this.rsiEngine?.loadState(state);
218
+ }
219
+ /** Export current RSI state for persistence */
220
+ exportRSIState() {
221
+ return this.rsiEngine?.exportState();
222
+ }
223
+ }
224
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/swap/router/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { RSIConfig, RSIState, WalletGoals, WalletDirective, SwapOutcome, MutationResult } from './types.js';
2
+ export declare class SwapRSIEngine {
3
+ private state;
4
+ private config;
5
+ private pendingOutcomes;
6
+ constructor(config: RSIConfig, goals?: WalletGoals);
7
+ /** Record a swap outcome. Triggers mutation cycle when learningWindow is reached. */
8
+ recordOutcome(outcome: SwapOutcome): MutationResult | null;
9
+ /** Get learned provider weight for a specific chain+pair.
10
+ * Returns multiplier (1.0 = neutral, >1 = preferred, <1 = deprioritized) */
11
+ getProviderWeight(provider: string, chain: string, fromToken: string, toToken: string): number;
12
+ /** Get all provider weights for a chain+pair (for SmartSwapRouter integration).
13
+ * Builds a merged map: pair weights override chain weights override global weights. */
14
+ getProviderWeights(chain: string, fromToken: string, toToken: string): Record<string, number>;
15
+ /** Analyze recent outcomes and adjust provider weights */
16
+ runMutationCycle(): MutationResult;
17
+ private calculateSavingsVsBaseline;
18
+ private calculateWinRates;
19
+ private calculateQuoteAccuracy;
20
+ private calculateAvgLatency;
21
+ /** Check if a swap should proceed based on directives */
22
+ evaluateDirectives(params: {
23
+ chain: string;
24
+ gasGwei?: number;
25
+ amountUsd?: number;
26
+ }): {
27
+ proceed: boolean;
28
+ reason?: string;
29
+ adjustments?: Record<string, number>;
30
+ };
31
+ /** Detect arbitrage opportunities from recent quotes */
32
+ detectArbOpportunities(quotes: Array<{
33
+ provider: string;
34
+ toAmount: bigint;
35
+ }>): {
36
+ detected: boolean;
37
+ spreadBps: number;
38
+ bestProvider: string;
39
+ worstProvider: string;
40
+ } | null;
41
+ /** Add or replace a directive */
42
+ setDirective(directive: WalletDirective): void;
43
+ /** Get all directives */
44
+ getDirectives(): WalletDirective[];
45
+ /** Export full state for persistence */
46
+ exportState(): RSIState;
47
+ /** Load state from previous session */
48
+ loadState(state: RSIState): void;
49
+ /** Get current goals */
50
+ getGoals(): WalletGoals;
51
+ /** Update goals */
52
+ setGoals(goals: WalletGoals): void;
53
+ /** Get mutation history */
54
+ getMutationHistory(): MutationResult[];
55
+ /** Get total outcomes recorded */
56
+ getTotalOutcomes(): number;
57
+ /** Reset all learned weights back to 1.0 */
58
+ resetWeights(): void;
59
+ }
60
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/swap/router/rsi/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EAEf,MAAM,YAAY,CAAC;AAiBpB,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAAqB;gBAEhC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,WAAW;IA4BlD,qFAAqF;IACrF,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI;IAmB1D;iFAC6E;IAC7E,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM;IAaT;4FACwF;IACxF,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAwBzB,0DAA0D;IAC1D,gBAAgB,IAAI,cAAc;IAmOlC,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,mBAAmB;IAoB3B,yDAAyD;IACzD,kBAAkB,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC;IAqDD,wDAAwD;IACxD,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG;QAC7E,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI;IAiCR,iCAAiC;IACjC,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAS9C,yBAAyB;IACzB,aAAa,IAAI,eAAe,EAAE;IAMlC,wCAAwC;IACxC,WAAW,IAAI,QAAQ;IAIvB,uCAAuC;IACvC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIhC,wBAAwB;IACxB,QAAQ,IAAI,WAAW;IAIvB,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIlC,2BAA2B;IAC3B,kBAAkB,IAAI,cAAc,EAAE;IAItC,kCAAkC;IAClC,gBAAgB,IAAI,MAAM;IAI1B,4CAA4C;IAC5C,YAAY,IAAI,IAAI;CAGrB"}