@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2

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 (439) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +297 -2
  3. package/dist/bridges/LiFiBridge.d.ts +93 -0
  4. package/dist/bridges/LiFiBridge.d.ts.map +1 -0
  5. package/dist/bridges/LiFiBridge.js +527 -0
  6. package/dist/bridges/LiFiBridge.js.map +1 -0
  7. package/dist/bridges/LiFiBridge.test.d.ts +2 -0
  8. package/dist/bridges/LiFiBridge.test.d.ts.map +1 -0
  9. package/dist/bridges/LiFiBridge.test.js +504 -0
  10. package/dist/bridges/LiFiBridge.test.js.map +1 -0
  11. package/dist/config/RebalancerConfig.d.ts +20 -0
  12. package/dist/config/RebalancerConfig.d.ts.map +1 -0
  13. package/dist/config/RebalancerConfig.js +35 -0
  14. package/dist/config/RebalancerConfig.js.map +1 -0
  15. package/dist/config/RebalancerConfig.test.d.ts +2 -0
  16. package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
  17. package/dist/config/RebalancerConfig.test.js +798 -0
  18. package/dist/config/RebalancerConfig.test.js.map +1 -0
  19. package/dist/config/types.d.ts +3008 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +451 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/core/InventoryRebalancer.d.ts +201 -0
  24. package/dist/core/InventoryRebalancer.d.ts.map +1 -0
  25. package/dist/core/InventoryRebalancer.js +994 -0
  26. package/dist/core/InventoryRebalancer.js.map +1 -0
  27. package/dist/core/InventoryRebalancer.test.d.ts +2 -0
  28. package/dist/core/InventoryRebalancer.test.d.ts.map +1 -0
  29. package/dist/core/InventoryRebalancer.test.js +1511 -0
  30. package/dist/core/InventoryRebalancer.test.js.map +1 -0
  31. package/dist/core/Rebalancer.d.ts +37 -0
  32. package/dist/core/Rebalancer.d.ts.map +1 -0
  33. package/dist/core/Rebalancer.js +433 -0
  34. package/dist/core/Rebalancer.js.map +1 -0
  35. package/dist/core/Rebalancer.test.d.ts +2 -0
  36. package/dist/core/Rebalancer.test.d.ts.map +1 -0
  37. package/dist/core/Rebalancer.test.js +424 -0
  38. package/dist/core/Rebalancer.test.js.map +1 -0
  39. package/dist/core/RebalancerOrchestrator.d.ts +56 -0
  40. package/dist/core/RebalancerOrchestrator.d.ts.map +1 -0
  41. package/dist/core/RebalancerOrchestrator.js +154 -0
  42. package/dist/core/RebalancerOrchestrator.js.map +1 -0
  43. package/dist/core/RebalancerOrchestrator.test.d.ts +2 -0
  44. package/dist/core/RebalancerOrchestrator.test.d.ts.map +1 -0
  45. package/dist/core/RebalancerOrchestrator.test.js +721 -0
  46. package/dist/core/RebalancerOrchestrator.test.js.map +1 -0
  47. package/dist/core/RebalancerService.d.ts +127 -0
  48. package/dist/core/RebalancerService.d.ts.map +1 -0
  49. package/dist/core/RebalancerService.js +270 -0
  50. package/dist/core/RebalancerService.js.map +1 -0
  51. package/dist/core/RebalancerService.test.d.ts +2 -0
  52. package/dist/core/RebalancerService.test.d.ts.map +1 -0
  53. package/dist/core/RebalancerService.test.js +777 -0
  54. package/dist/core/RebalancerService.test.js.map +1 -0
  55. package/dist/e2e/collateral-deficit.e2e-test.d.ts +2 -0
  56. package/dist/e2e/collateral-deficit.e2e-test.d.ts.map +1 -0
  57. package/dist/e2e/collateral-deficit.e2e-test.js +227 -0
  58. package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -0
  59. package/dist/e2e/composite.e2e-test.d.ts +2 -0
  60. package/dist/e2e/composite.e2e-test.d.ts.map +1 -0
  61. package/dist/e2e/composite.e2e-test.js +666 -0
  62. package/dist/e2e/composite.e2e-test.js.map +1 -0
  63. package/dist/e2e/fixtures/routes.d.ts +89 -0
  64. package/dist/e2e/fixtures/routes.d.ts.map +1 -0
  65. package/dist/e2e/fixtures/routes.js +420 -0
  66. package/dist/e2e/fixtures/routes.js.map +1 -0
  67. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts +38 -0
  68. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -0
  69. package/dist/e2e/harness/BaseLocalDeploymentManager.js +144 -0
  70. package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -0
  71. package/dist/e2e/harness/BridgeSetup.d.ts +11 -0
  72. package/dist/e2e/harness/BridgeSetup.d.ts.map +1 -0
  73. package/dist/e2e/harness/BridgeSetup.js +50 -0
  74. package/dist/e2e/harness/BridgeSetup.js.map +1 -0
  75. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts +13 -0
  76. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -0
  77. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js +105 -0
  78. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -0
  79. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts +11 -0
  80. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -0
  81. package/dist/e2e/harness/Erc20LocalDeploymentManager.js +105 -0
  82. package/dist/e2e/harness/Erc20LocalDeploymentManager.js.map +1 -0
  83. package/dist/e2e/harness/ForkIndexer.d.ts +23 -0
  84. package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -0
  85. package/dist/e2e/harness/ForkIndexer.js +127 -0
  86. package/dist/e2e/harness/ForkIndexer.js.map +1 -0
  87. package/dist/e2e/harness/ForkIndexer.test.d.ts +2 -0
  88. package/dist/e2e/harness/ForkIndexer.test.d.ts.map +1 -0
  89. package/dist/e2e/harness/ForkIndexer.test.js +257 -0
  90. package/dist/e2e/harness/ForkIndexer.test.js.map +1 -0
  91. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
  92. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
  93. package/dist/e2e/harness/MixedLocalDeploymentManager.js +115 -0
  94. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
  95. package/dist/e2e/harness/MockExplorerClient.d.ts +23 -0
  96. package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -0
  97. package/dist/e2e/harness/MockExplorerClient.js +57 -0
  98. package/dist/e2e/harness/MockExplorerClient.js.map +1 -0
  99. package/dist/e2e/harness/MockExternalBridge.d.ts +32 -0
  100. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -0
  101. package/dist/e2e/harness/MockExternalBridge.js +247 -0
  102. package/dist/e2e/harness/MockExternalBridge.js.map +1 -0
  103. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts +13 -0
  104. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -0
  105. package/dist/e2e/harness/NativeLocalDeploymentManager.js +91 -0
  106. package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -0
  107. package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
  108. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
  109. package/dist/e2e/harness/SnapshotHelper.js +36 -0
  110. package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
  111. package/dist/e2e/harness/TestHelpers.d.ts +25 -0
  112. package/dist/e2e/harness/TestHelpers.d.ts.map +1 -0
  113. package/dist/e2e/harness/TestHelpers.js +103 -0
  114. package/dist/e2e/harness/TestHelpers.js.map +1 -0
  115. package/dist/e2e/harness/TestRebalancer.d.ts +85 -0
  116. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -0
  117. package/dist/e2e/harness/TestRebalancer.js +427 -0
  118. package/dist/e2e/harness/TestRebalancer.js.map +1 -0
  119. package/dist/e2e/harness/TransferHelper.d.ts +34 -0
  120. package/dist/e2e/harness/TransferHelper.d.ts.map +1 -0
  121. package/dist/e2e/harness/TransferHelper.js +93 -0
  122. package/dist/e2e/harness/TransferHelper.js.map +1 -0
  123. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts +2 -0
  124. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts.map +1 -0
  125. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +411 -0
  126. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -0
  127. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts +2 -0
  128. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts.map +1 -0
  129. package/dist/e2e/inventory-erc20-weighted.e2e-test.js +408 -0
  130. package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -0
  131. package/dist/e2e/inventory-minAmount.e2e-test.d.ts +2 -0
  132. package/dist/e2e/inventory-minAmount.e2e-test.d.ts.map +1 -0
  133. package/dist/e2e/inventory-minAmount.e2e-test.js +411 -0
  134. package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -0
  135. package/dist/e2e/inventory-weighted.e2e-test.d.ts +2 -0
  136. package/dist/e2e/inventory-weighted.e2e-test.d.ts.map +1 -0
  137. package/dist/e2e/inventory-weighted.e2e-test.js +409 -0
  138. package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -0
  139. package/dist/e2e/minAmount.e2e-test.d.ts +2 -0
  140. package/dist/e2e/minAmount.e2e-test.d.ts.map +1 -0
  141. package/dist/e2e/minAmount.e2e-test.js +203 -0
  142. package/dist/e2e/minAmount.e2e-test.js.map +1 -0
  143. package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
  144. package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
  145. package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
  146. package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
  147. package/dist/e2e/weighted.e2e-test.d.ts +2 -0
  148. package/dist/e2e/weighted.e2e-test.d.ts.map +1 -0
  149. package/dist/e2e/weighted.e2e-test.js +198 -0
  150. package/dist/e2e/weighted.e2e-test.js.map +1 -0
  151. package/dist/factories/RebalancerContextFactory.d.ts +89 -0
  152. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
  153. package/dist/factories/RebalancerContextFactory.js +420 -0
  154. package/dist/factories/RebalancerContextFactory.js.map +1 -0
  155. package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
  156. package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
  157. package/dist/factories/RebalancerContextFactory.test.js +270 -0
  158. package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
  159. package/dist/index.d.ts +37 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +37 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/interfaces/IExternalBridge.d.ts +103 -0
  164. package/dist/interfaces/IExternalBridge.d.ts.map +1 -0
  165. package/dist/interfaces/IExternalBridge.js +2 -0
  166. package/dist/interfaces/IExternalBridge.js.map +1 -0
  167. package/dist/interfaces/IMetrics.d.ts +5 -0
  168. package/dist/interfaces/IMetrics.d.ts.map +1 -0
  169. package/dist/interfaces/IMetrics.js +2 -0
  170. package/dist/interfaces/IMetrics.js.map +1 -0
  171. package/dist/interfaces/IMonitor.d.ts +50 -0
  172. package/dist/interfaces/IMonitor.d.ts.map +1 -0
  173. package/dist/interfaces/IMonitor.js +14 -0
  174. package/dist/interfaces/IMonitor.js.map +1 -0
  175. package/dist/interfaces/IRebalancer.d.ts +31 -0
  176. package/dist/interfaces/IRebalancer.d.ts.map +1 -0
  177. package/dist/interfaces/IRebalancer.js +2 -0
  178. package/dist/interfaces/IRebalancer.js.map +1 -0
  179. package/dist/interfaces/IStrategy.d.ts +60 -0
  180. package/dist/interfaces/IStrategy.d.ts.map +1 -0
  181. package/dist/interfaces/IStrategy.js +13 -0
  182. package/dist/interfaces/IStrategy.js.map +1 -0
  183. package/dist/metrics/Metrics.d.ts +25 -0
  184. package/dist/metrics/Metrics.d.ts.map +1 -0
  185. package/dist/metrics/Metrics.js +164 -0
  186. package/dist/metrics/Metrics.js.map +1 -0
  187. package/dist/metrics/PriceGetter.d.ts +10 -0
  188. package/dist/metrics/PriceGetter.d.ts.map +1 -0
  189. package/dist/metrics/PriceGetter.js +41 -0
  190. package/dist/metrics/PriceGetter.js.map +1 -0
  191. package/dist/metrics/scripts/metrics.d.ts +28 -0
  192. package/dist/metrics/scripts/metrics.d.ts.map +1 -0
  193. package/dist/metrics/scripts/metrics.js +61 -0
  194. package/dist/metrics/scripts/metrics.js.map +1 -0
  195. package/dist/monitor/Monitor.d.ts +40 -0
  196. package/dist/monitor/Monitor.d.ts.map +1 -0
  197. package/dist/monitor/Monitor.js +211 -0
  198. package/dist/monitor/Monitor.js.map +1 -0
  199. package/dist/service.d.ts +3 -0
  200. package/dist/service.d.ts.map +1 -0
  201. package/dist/service.js +205 -0
  202. package/dist/service.js.map +1 -0
  203. package/dist/strategy/BaseStrategy.d.ts +86 -0
  204. package/dist/strategy/BaseStrategy.d.ts.map +1 -0
  205. package/dist/strategy/BaseStrategy.js +342 -0
  206. package/dist/strategy/BaseStrategy.js.map +1 -0
  207. package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
  208. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
  209. package/dist/strategy/CollateralDeficitStrategy.js +253 -0
  210. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
  211. package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
  212. package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
  213. package/dist/strategy/CollateralDeficitStrategy.test.js +497 -0
  214. package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
  215. package/dist/strategy/CompositeStrategy.d.ts +18 -0
  216. package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
  217. package/dist/strategy/CompositeStrategy.js +63 -0
  218. package/dist/strategy/CompositeStrategy.js.map +1 -0
  219. package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
  220. package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
  221. package/dist/strategy/CompositeStrategy.test.js +278 -0
  222. package/dist/strategy/CompositeStrategy.test.js.map +1 -0
  223. package/dist/strategy/MinAmountStrategy.d.ts +35 -0
  224. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
  225. package/dist/strategy/MinAmountStrategy.js +112 -0
  226. package/dist/strategy/MinAmountStrategy.js.map +1 -0
  227. package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
  228. package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
  229. package/dist/strategy/MinAmountStrategy.test.js +547 -0
  230. package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
  231. package/dist/strategy/StrategyFactory.d.ts +27 -0
  232. package/dist/strategy/StrategyFactory.d.ts.map +1 -0
  233. package/dist/strategy/StrategyFactory.js +79 -0
  234. package/dist/strategy/StrategyFactory.js.map +1 -0
  235. package/dist/strategy/StrategyFactory.test.d.ts +2 -0
  236. package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
  237. package/dist/strategy/StrategyFactory.test.js +81 -0
  238. package/dist/strategy/StrategyFactory.test.js.map +1 -0
  239. package/dist/strategy/WeightedStrategy.d.ts +32 -0
  240. package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
  241. package/dist/strategy/WeightedStrategy.js +73 -0
  242. package/dist/strategy/WeightedStrategy.js.map +1 -0
  243. package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
  244. package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
  245. package/dist/strategy/WeightedStrategy.test.js +403 -0
  246. package/dist/strategy/WeightedStrategy.test.js.map +1 -0
  247. package/dist/strategy/index.d.ts +7 -0
  248. package/dist/strategy/index.d.ts.map +1 -0
  249. package/dist/strategy/index.js +7 -0
  250. package/dist/strategy/index.js.map +1 -0
  251. package/dist/test/helpers.d.ts +99 -0
  252. package/dist/test/helpers.d.ts.map +1 -0
  253. package/dist/test/helpers.js +311 -0
  254. package/dist/test/helpers.js.map +1 -0
  255. package/dist/test/lifiMocks.d.ts +52 -0
  256. package/dist/test/lifiMocks.d.ts.map +1 -0
  257. package/dist/test/lifiMocks.js +160 -0
  258. package/dist/test/lifiMocks.js.map +1 -0
  259. package/dist/tracking/ActionTracker.d.ts +90 -0
  260. package/dist/tracking/ActionTracker.d.ts.map +1 -0
  261. package/dist/tracking/ActionTracker.js +678 -0
  262. package/dist/tracking/ActionTracker.js.map +1 -0
  263. package/dist/tracking/ActionTracker.test.d.ts +2 -0
  264. package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
  265. package/dist/tracking/ActionTracker.test.js +1351 -0
  266. package/dist/tracking/ActionTracker.test.js.map +1 -0
  267. package/dist/tracking/IActionTracker.d.ts +157 -0
  268. package/dist/tracking/IActionTracker.d.ts.map +1 -0
  269. package/dist/tracking/IActionTracker.js +2 -0
  270. package/dist/tracking/IActionTracker.js.map +1 -0
  271. package/dist/tracking/InflightContextAdapter.d.ts +18 -0
  272. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
  273. package/dist/tracking/InflightContextAdapter.js +52 -0
  274. package/dist/tracking/InflightContextAdapter.js.map +1 -0
  275. package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
  276. package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
  277. package/dist/tracking/InflightContextAdapter.test.js +175 -0
  278. package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
  279. package/dist/tracking/store/IStore.d.ts +41 -0
  280. package/dist/tracking/store/IStore.d.ts.map +1 -0
  281. package/dist/tracking/store/IStore.js +2 -0
  282. package/dist/tracking/store/IStore.js.map +1 -0
  283. package/dist/tracking/store/InMemoryStore.d.ts +21 -0
  284. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
  285. package/dist/tracking/store/InMemoryStore.js +40 -0
  286. package/dist/tracking/store/InMemoryStore.js.map +1 -0
  287. package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
  288. package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
  289. package/dist/tracking/store/InMemoryStore.test.js +290 -0
  290. package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
  291. package/dist/tracking/store/index.d.ts +3 -0
  292. package/dist/tracking/store/index.d.ts.map +1 -0
  293. package/dist/tracking/store/index.js +2 -0
  294. package/dist/tracking/store/index.js.map +1 -0
  295. package/dist/tracking/types.d.ts +77 -0
  296. package/dist/tracking/types.d.ts.map +1 -0
  297. package/dist/tracking/types.js +2 -0
  298. package/dist/tracking/types.js.map +1 -0
  299. package/dist/utils/ExplorerClient.d.ts +68 -0
  300. package/dist/utils/ExplorerClient.d.ts.map +1 -0
  301. package/dist/utils/ExplorerClient.js +324 -0
  302. package/dist/utils/ExplorerClient.js.map +1 -0
  303. package/dist/utils/ExplorerClient.test.d.ts +2 -0
  304. package/dist/utils/ExplorerClient.test.d.ts.map +1 -0
  305. package/dist/utils/ExplorerClient.test.js +261 -0
  306. package/dist/utils/ExplorerClient.test.js.map +1 -0
  307. package/dist/utils/balanceUtils.d.ts +12 -0
  308. package/dist/utils/balanceUtils.d.ts.map +1 -0
  309. package/dist/utils/balanceUtils.js +40 -0
  310. package/dist/utils/balanceUtils.js.map +1 -0
  311. package/dist/utils/balanceUtils.test.d.ts +2 -0
  312. package/dist/utils/balanceUtils.test.d.ts.map +1 -0
  313. package/dist/utils/balanceUtils.test.js +55 -0
  314. package/dist/utils/balanceUtils.test.js.map +1 -0
  315. package/dist/utils/blockTag.d.ts +14 -0
  316. package/dist/utils/blockTag.d.ts.map +1 -0
  317. package/dist/utils/blockTag.js +46 -0
  318. package/dist/utils/blockTag.js.map +1 -0
  319. package/dist/utils/bridgeUtils.d.ts +40 -0
  320. package/dist/utils/bridgeUtils.d.ts.map +1 -0
  321. package/dist/utils/bridgeUtils.js +54 -0
  322. package/dist/utils/bridgeUtils.js.map +1 -0
  323. package/dist/utils/bridgeUtils.test.d.ts +2 -0
  324. package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
  325. package/dist/utils/bridgeUtils.test.js +163 -0
  326. package/dist/utils/bridgeUtils.test.js.map +1 -0
  327. package/dist/utils/errors.d.ts +4 -0
  328. package/dist/utils/errors.d.ts.map +1 -0
  329. package/dist/utils/errors.js +6 -0
  330. package/dist/utils/errors.js.map +1 -0
  331. package/dist/utils/gasEstimation.d.ts +65 -0
  332. package/dist/utils/gasEstimation.d.ts.map +1 -0
  333. package/dist/utils/gasEstimation.js +206 -0
  334. package/dist/utils/gasEstimation.js.map +1 -0
  335. package/dist/utils/solanaKeyParser.d.ts +10 -0
  336. package/dist/utils/solanaKeyParser.d.ts.map +1 -0
  337. package/dist/utils/solanaKeyParser.js +87 -0
  338. package/dist/utils/solanaKeyParser.js.map +1 -0
  339. package/dist/utils/solanaKeyParser.test.d.ts +2 -0
  340. package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
  341. package/dist/utils/solanaKeyParser.test.js +71 -0
  342. package/dist/utils/solanaKeyParser.test.js.map +1 -0
  343. package/dist/utils/tokenUtils.d.ts +38 -0
  344. package/dist/utils/tokenUtils.d.ts.map +1 -0
  345. package/dist/utils/tokenUtils.js +65 -0
  346. package/dist/utils/tokenUtils.js.map +1 -0
  347. package/dist/utils/transactionUtils.d.ts +22 -0
  348. package/dist/utils/transactionUtils.d.ts.map +1 -0
  349. package/dist/utils/transactionUtils.js +26 -0
  350. package/dist/utils/transactionUtils.js.map +1 -0
  351. package/package.json +87 -3
  352. package/src/bridges/LiFiBridge.test.ts +615 -0
  353. package/src/bridges/LiFiBridge.ts +731 -0
  354. package/src/config/RebalancerConfig.test.ts +921 -0
  355. package/src/config/RebalancerConfig.ts +63 -0
  356. package/src/config/types.ts +613 -0
  357. package/src/core/InventoryRebalancer.test.ts +1858 -0
  358. package/src/core/InventoryRebalancer.ts +1455 -0
  359. package/src/core/Rebalancer.test.ts +686 -0
  360. package/src/core/Rebalancer.ts +686 -0
  361. package/src/core/RebalancerOrchestrator.test.ts +871 -0
  362. package/src/core/RebalancerOrchestrator.ts +273 -0
  363. package/src/core/RebalancerService.test.ts +1094 -0
  364. package/src/core/RebalancerService.ts +412 -0
  365. package/src/e2e/E2E_TEST_CONVENTIONS.md +222 -0
  366. package/src/e2e/collateral-deficit.e2e-test.ts +403 -0
  367. package/src/e2e/composite.e2e-test.ts +1008 -0
  368. package/src/e2e/fixtures/routes.ts +532 -0
  369. package/src/e2e/harness/BaseLocalDeploymentManager.ts +246 -0
  370. package/src/e2e/harness/BridgeSetup.ts +95 -0
  371. package/src/e2e/harness/Erc20InventoryLocalDeploymentManager.ts +183 -0
  372. package/src/e2e/harness/Erc20LocalDeploymentManager.ts +190 -0
  373. package/src/e2e/harness/ForkIndexer.test.ts +448 -0
  374. package/src/e2e/harness/ForkIndexer.ts +183 -0
  375. package/src/e2e/harness/MixedLocalDeploymentManager.ts +196 -0
  376. package/src/e2e/harness/MockExplorerClient.ts +94 -0
  377. package/src/e2e/harness/MockExternalBridge.ts +411 -0
  378. package/src/e2e/harness/NativeLocalDeploymentManager.ts +138 -0
  379. package/src/e2e/harness/SnapshotHelper.ts +56 -0
  380. package/src/e2e/harness/TestHelpers.ts +169 -0
  381. package/src/e2e/harness/TestRebalancer.ts +758 -0
  382. package/src/e2e/harness/TransferHelper.ts +188 -0
  383. package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +735 -0
  384. package/src/e2e/inventory-erc20-weighted.e2e-test.ts +733 -0
  385. package/src/e2e/inventory-minAmount.e2e-test.ts +734 -0
  386. package/src/e2e/inventory-weighted.e2e-test.ts +734 -0
  387. package/src/e2e/minAmount.e2e-test.ts +313 -0
  388. package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
  389. package/src/e2e/weighted.e2e-test.ts +304 -0
  390. package/src/factories/RebalancerContextFactory.test.ts +394 -0
  391. package/src/factories/RebalancerContextFactory.ts +771 -0
  392. package/src/index.ts +125 -0
  393. package/src/interfaces/IExternalBridge.ts +117 -0
  394. package/src/interfaces/IMetrics.ts +5 -0
  395. package/src/interfaces/IMonitor.ts +71 -0
  396. package/src/interfaces/IRebalancer.ts +57 -0
  397. package/src/interfaces/IStrategy.ts +81 -0
  398. package/src/metrics/Metrics.ts +335 -0
  399. package/src/metrics/PriceGetter.ts +74 -0
  400. package/src/metrics/scripts/metrics.ts +139 -0
  401. package/src/monitor/Monitor.ts +324 -0
  402. package/src/service.ts +285 -0
  403. package/src/strategy/BaseStrategy.ts +553 -0
  404. package/src/strategy/CollateralDeficitStrategy.test.ts +728 -0
  405. package/src/strategy/CollateralDeficitStrategy.ts +421 -0
  406. package/src/strategy/CompositeStrategy.test.ts +418 -0
  407. package/src/strategy/CompositeStrategy.ts +102 -0
  408. package/src/strategy/MinAmountStrategy.test.ts +732 -0
  409. package/src/strategy/MinAmountStrategy.ts +200 -0
  410. package/src/strategy/StrategyFactory.test.ts +108 -0
  411. package/src/strategy/StrategyFactory.ts +157 -0
  412. package/src/strategy/WeightedStrategy.test.ts +529 -0
  413. package/src/strategy/WeightedStrategy.ts +126 -0
  414. package/src/strategy/index.ts +6 -0
  415. package/src/test/helpers.ts +477 -0
  416. package/src/test/lifiMocks.ts +211 -0
  417. package/src/tracking/ActionTracker.test.ts +1625 -0
  418. package/src/tracking/ActionTracker.ts +1019 -0
  419. package/src/tracking/IActionTracker.ts +213 -0
  420. package/src/tracking/InflightContextAdapter.test.ts +206 -0
  421. package/src/tracking/InflightContextAdapter.ts +75 -0
  422. package/src/tracking/store/IStore.ts +48 -0
  423. package/src/tracking/store/InMemoryStore.test.ts +338 -0
  424. package/src/tracking/store/InMemoryStore.ts +59 -0
  425. package/src/tracking/store/index.ts +2 -0
  426. package/src/tracking/types.ts +118 -0
  427. package/src/utils/ExplorerClient.test.ts +386 -0
  428. package/src/utils/ExplorerClient.ts +439 -0
  429. package/src/utils/balanceUtils.test.ts +79 -0
  430. package/src/utils/balanceUtils.ts +65 -0
  431. package/src/utils/blockTag.ts +68 -0
  432. package/src/utils/bridgeUtils.test.ts +193 -0
  433. package/src/utils/bridgeUtils.ts +101 -0
  434. package/src/utils/errors.ts +5 -0
  435. package/src/utils/gasEstimation.ts +306 -0
  436. package/src/utils/solanaKeyParser.test.ts +103 -0
  437. package/src/utils/solanaKeyParser.ts +117 -0
  438. package/src/utils/tokenUtils.ts +89 -0
  439. package/src/utils/transactionUtils.ts +41 -0
@@ -0,0 +1,527 @@
1
+ import { EVM, KeypairWalletAdapter, Solana, convertQuoteToRoute, createConfig, executeRoute, getQuote, getStatus, config as lifiConfig, } from '@lifi/sdk';
2
+ import bs58 from 'bs58';
3
+ import { ProtocolType, assert, ensure0x } from '@humanode-hyperlane/utils';
4
+ import { createWalletClient, http } from 'viem';
5
+ import { privateKeyToAccount } from 'viem/accounts';
6
+ import { arbitrum, base, mainnet, optimism } from 'viem/chains';
7
+ import { parseSolanaPrivateKey } from '../utils/solanaKeyParser.js';
8
+ /**
9
+ * LiFi API base URL for REST endpoints.
10
+ * The SDK doesn't support toAmount quotes, so we use REST API directly.
11
+ */
12
+ const LIFI_API_BASE = 'https://li.quest/v1';
13
+ /**
14
+ * Known chains for viem - add more as needed.
15
+ * TODO: can we think of a cleaner way to do this?
16
+ */
17
+ const VIEM_CHAINS = {
18
+ [mainnet.id]: mainnet,
19
+ [arbitrum.id]: arbitrum,
20
+ [base.id]: base,
21
+ [optimism.id]: optimism,
22
+ };
23
+ /**
24
+ * Mapping from Hyperlane domain IDs to LiFi chain IDs for non-EVM chains.
25
+ * EVM chains use their native chain ID which is the same in both systems.
26
+ * Non-EVM chains (e.g., Solana) have different identifiers in each system.
27
+ *
28
+ * @see https://docs.li.fi/introduction/lifi-architecture/solana-overview
29
+ */
30
+ const HYPERLANE_TO_LIFI_CHAIN_IDS = {
31
+ 1399811149: 1151111081099710, // Solana: Hyperlane domain → LiFi chain ID
32
+ };
33
+ /**
34
+ * Get viem chain config by chain ID.
35
+ * Falls back to a minimal chain config if not found.
36
+ */
37
+ function getViemChain(chainId, rpcUrl) {
38
+ const chain = VIEM_CHAINS[chainId];
39
+ if (chain) {
40
+ if (rpcUrl) {
41
+ return { ...chain, rpcUrls: { default: { http: [rpcUrl] } } };
42
+ }
43
+ return chain;
44
+ }
45
+ // Fallback for chains not in our registry
46
+ return {
47
+ id: chainId,
48
+ name: `Chain ${chainId}`,
49
+ nativeCurrency: { name: 'ETH', symbol: 'ETH', decimals: 18 },
50
+ rpcUrls: {
51
+ default: { http: rpcUrl ? [rpcUrl] : [] },
52
+ },
53
+ };
54
+ }
55
+ function toBase58SolanaKey(rawKey) {
56
+ const trimmedKey = rawKey.trim();
57
+ if (!trimmedKey.startsWith('[') && !trimmedKey.includes(',')) {
58
+ try {
59
+ const decoded = bs58.decode(trimmedKey);
60
+ if (decoded.length === 64) {
61
+ return trimmedKey;
62
+ }
63
+ }
64
+ catch {
65
+ // Not valid base58, continue to parse as byte array
66
+ }
67
+ }
68
+ const bytes = parseSolanaPrivateKey(trimmedKey);
69
+ return bs58.encode(bytes);
70
+ }
71
+ /**
72
+ * LiFi implementation of IExternalBridge using the official @lifi/sdk.
73
+ *
74
+ * The SDK provides:
75
+ * - Automatic token approvals via executeRoute()
76
+ * - Multi-step route handling (swap → bridge → swap)
77
+ * - Built-in status tracking via getStatus()
78
+ * - Native support for EVM, Solana, and other chains
79
+ *
80
+ * @see https://docs.li.fi/integrate-li.fi-sdk
81
+ */
82
+ export class LiFiBridge {
83
+ static NATIVE_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000';
84
+ externalBridgeId = 'lifi';
85
+ /**
86
+ * Convert a Hyperlane domain ID to a LiFi-compatible chain ID.
87
+ * For EVM chains, these are identical (e.g., Arbitrum = 42161 in both).
88
+ * For non-EVM chains like Solana, LiFi uses different chain identifiers.
89
+ */
90
+ static toLiFiChainId(chainId) {
91
+ return HYPERLANE_TO_LIFI_CHAIN_IDS[chainId] ?? chainId;
92
+ }
93
+ logger;
94
+ initialized = false;
95
+ _executeLock = Promise.resolve();
96
+ config;
97
+ chainMetadataByChainId;
98
+ constructor(config, logger) {
99
+ this.config = config;
100
+ this.logger = logger;
101
+ // Build chainId -> metadata map for O(1) lookups
102
+ this.chainMetadataByChainId = new Map();
103
+ if (config.chainMetadata) {
104
+ for (const metadata of Object.values(config.chainMetadata)) {
105
+ if (metadata.chainId !== undefined) {
106
+ this.chainMetadataByChainId.set(Number(metadata.chainId), metadata);
107
+ }
108
+ }
109
+ // Also key by LiFi chain IDs so both Hyperlane domains and LiFi IDs resolve to the same metadata.
110
+ for (const [hyperlaneDomainId, lifiChainId] of Object.entries(HYPERLANE_TO_LIFI_CHAIN_IDS)) {
111
+ const metadata = this.chainMetadataByChainId.get(Number(hyperlaneDomainId));
112
+ if (metadata !== undefined) {
113
+ this.chainMetadataByChainId.set(Number(lifiChainId), metadata);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ getNativeTokenAddress() {
119
+ return LiFiBridge.NATIVE_TOKEN_ADDRESS;
120
+ }
121
+ initialize() {
122
+ if (this.initialized)
123
+ return;
124
+ createConfig({
125
+ integrator: this.config.integrator,
126
+ apiKey: this.config.apiKey,
127
+ });
128
+ this.initialized = true;
129
+ this.logger.info({ integrator: this.config.integrator }, 'LiFi SDK initialized');
130
+ }
131
+ /**
132
+ * Resolve RPC URL for a given EVM chainId from chain metadata.
133
+ * Iterates metadata to find matching chainId and returns first HTTP RPC URL.
134
+ */
135
+ getRpcUrlForChainId(chainId) {
136
+ return this.chainMetadataByChainId.get(chainId)?.rpcUrls?.[0]?.http;
137
+ }
138
+ getProtocolTypeForChainId(chainId) {
139
+ return this.chainMetadataByChainId.get(chainId)?.protocol;
140
+ }
141
+ addressesEqual(a, b, chainId) {
142
+ const protocol = this.getProtocolTypeForChainId(chainId);
143
+ // Sealevel uses base58 addresses where case is significant.
144
+ if (protocol === ProtocolType.Sealevel) {
145
+ return a === b;
146
+ }
147
+ return a.toLowerCase() === b.toLowerCase();
148
+ }
149
+ /**
150
+ * Configure LiFi SDK providers from the given private keys.
151
+ * Sets up wallet/signer for each protocol type present in the keys map.
152
+ */
153
+ configureLiFiProviders(privateKeys, fromChain, fromRpcUrl) {
154
+ const providers = [];
155
+ for (const [protocol, key] of Object.entries(privateKeys)) {
156
+ switch (protocol) {
157
+ case ProtocolType.Ethereum: {
158
+ const account = privateKeyToAccount(ensure0x(key));
159
+ const chain = getViemChain(fromChain, fromRpcUrl);
160
+ const walletClient = createWalletClient({
161
+ account,
162
+ chain,
163
+ transport: http(fromRpcUrl),
164
+ });
165
+ providers.push(EVM({
166
+ getWalletClient: async () => walletClient,
167
+ switchChain: async (requiredChainId) => {
168
+ const switchRpcUrl = this.getRpcUrlForChainId(requiredChainId);
169
+ const requiredChain = getViemChain(requiredChainId, switchRpcUrl);
170
+ return createWalletClient({
171
+ account,
172
+ chain: requiredChain,
173
+ transport: http(switchRpcUrl),
174
+ });
175
+ },
176
+ }));
177
+ break;
178
+ }
179
+ case ProtocolType.Sealevel: {
180
+ const base58Key = toBase58SolanaKey(key);
181
+ providers.push(Solana({
182
+ getWalletAdapter: async () => new KeypairWalletAdapter(base58Key),
183
+ }));
184
+ break;
185
+ }
186
+ default:
187
+ throw new Error(`Unsupported protocol type '${protocol}' for LiFi provider`);
188
+ }
189
+ }
190
+ lifiConfig.setProviders(providers);
191
+ this.logger.debug({
192
+ fromChain,
193
+ protocols: Object.keys(privateKeys),
194
+ }, 'Configured LiFi providers for route execution');
195
+ }
196
+ /**
197
+ * Get a quote for bridging tokens.
198
+ * Supports two modes:
199
+ * - fromAmount: "I'm sending X, what do I get?" (uses SDK)
200
+ * - toAmount: "I want X, how much do I send?" (uses REST API)
201
+ *
202
+ * Returns route data ready for execution.
203
+ */
204
+ async quote(params) {
205
+ this.initialize();
206
+ // Validate that exactly one of fromAmount or toAmount is provided
207
+ if (params.fromAmount !== undefined && params.toAmount !== undefined) {
208
+ throw new Error('Cannot specify both fromAmount and toAmount - provide exactly one');
209
+ }
210
+ if (params.fromAmount === undefined && params.toAmount === undefined) {
211
+ throw new Error('Must specify either fromAmount or toAmount');
212
+ }
213
+ assert(params.fromAmount === undefined || params.fromAmount > 0n, 'fromAmount must be positive');
214
+ assert(params.toAmount === undefined || params.toAmount > 0n, 'toAmount must be positive');
215
+ // Dispatch to appropriate quote method
216
+ if (params.toAmount !== undefined) {
217
+ return this.quoteByReceivingAmount(params);
218
+ }
219
+ else {
220
+ return this.quoteBySpendingAmount(params);
221
+ }
222
+ }
223
+ /**
224
+ * Get a quote by specifying the amount to send (standard quote).
225
+ * Uses the LiFi SDK.
226
+ */
227
+ async quoteBySpendingAmount(params) {
228
+ this.logger.debug({ params }, 'Requesting LiFi quote by spending amount');
229
+ const lifiFromChain = LiFiBridge.toLiFiChainId(params.fromChain);
230
+ const lifiToChain = LiFiBridge.toLiFiChainId(params.toChain);
231
+ const quote = await getQuote({
232
+ fromChain: lifiFromChain,
233
+ toChain: lifiToChain,
234
+ fromToken: params.fromToken,
235
+ toToken: params.toToken,
236
+ fromAmount: params.fromAmount.toString(),
237
+ fromAddress: params.fromAddress,
238
+ toAddress: params.toAddress ?? params.fromAddress,
239
+ slippage: params.slippage ?? this.config.defaultSlippage ?? 0.005,
240
+ // Prefer faster routes for rebalancing
241
+ order: 'RECOMMENDED',
242
+ });
243
+ const { gasCosts, feeCosts } = this.extractCosts(quote);
244
+ this.logger.info({
245
+ quoteId: quote.id,
246
+ tool: quote.tool,
247
+ fromAmount: quote.action.fromAmount,
248
+ toAmount: quote.estimate.toAmount,
249
+ toAmountMin: quote.estimate.toAmountMin,
250
+ executionDuration: quote.estimate.executionDuration,
251
+ gasCosts: gasCosts.toString(),
252
+ feeCosts: feeCosts.toString(),
253
+ }, 'LiFi quote received (fromAmount)');
254
+ return {
255
+ id: quote.id,
256
+ tool: quote.tool,
257
+ fromAmount: BigInt(quote.action.fromAmount),
258
+ toAmount: BigInt(quote.estimate.toAmount),
259
+ toAmountMin: BigInt(quote.estimate.toAmountMin),
260
+ executionDuration: quote.estimate.executionDuration,
261
+ gasCosts,
262
+ feeCosts,
263
+ route: quote, // Store full quote for conversion to route
264
+ requestParams: {
265
+ ...params,
266
+ fromChain: lifiFromChain,
267
+ toChain: lifiToChain,
268
+ },
269
+ };
270
+ }
271
+ /**
272
+ * Get a quote by specifying the amount to receive (reverse quote).
273
+ * Uses the LiFi REST API directly since the SDK doesn't support toAmount.
274
+ */
275
+ async quoteByReceivingAmount(params) {
276
+ this.logger.debug({ params }, 'Requesting LiFi quote by receiving amount');
277
+ const lifiFromChain = LiFiBridge.toLiFiChainId(params.fromChain);
278
+ const lifiToChain = LiFiBridge.toLiFiChainId(params.toChain);
279
+ const queryParams = new URLSearchParams({
280
+ fromChain: lifiFromChain.toString(),
281
+ toChain: lifiToChain.toString(),
282
+ fromToken: params.fromToken,
283
+ toToken: params.toToken,
284
+ toAmount: params.toAmount.toString(),
285
+ fromAddress: params.fromAddress,
286
+ toAddress: params.toAddress ?? params.fromAddress,
287
+ slippage: (params.slippage ?? this.config.defaultSlippage ?? 0.005)
288
+ .toFixed(4)
289
+ .replace(/\.?0+$/, ''),
290
+ order: 'CHEAPEST',
291
+ integrator: this.config.integrator,
292
+ });
293
+ if (this.config.apiKey) {
294
+ queryParams.set('apiKey', this.config.apiKey);
295
+ }
296
+ const url = `${LIFI_API_BASE}/quote/toAmount?${queryParams.toString()}`;
297
+ this.logger.debug({ url: url.replace(/apiKey=[^&]+/, 'apiKey=***') }, 'Fetching LiFi toAmount quote');
298
+ const response = await fetch(url);
299
+ if (!response.ok) {
300
+ const errorBody = await response.text();
301
+ throw new Error(`LiFi toAmount quote failed: ${response.status} ${response.statusText} - ${errorBody}`);
302
+ }
303
+ const quote = await response.json();
304
+ const { gasCosts, feeCosts } = this.extractCosts(quote);
305
+ this.logger.info({
306
+ quoteId: quote.id,
307
+ tool: quote.tool,
308
+ fromAmount: quote.action.fromAmount,
309
+ toAmount: quote.estimate.toAmount,
310
+ toAmountMin: quote.estimate.toAmountMin,
311
+ executionDuration: quote.estimate.executionDuration,
312
+ gasCosts: gasCosts.toString(),
313
+ feeCosts: feeCosts.toString(),
314
+ }, 'LiFi quote received (toAmount)');
315
+ return {
316
+ id: quote.id,
317
+ tool: quote.tool,
318
+ fromAmount: BigInt(quote.action.fromAmount),
319
+ toAmount: BigInt(quote.estimate.toAmount),
320
+ toAmountMin: BigInt(quote.estimate.toAmountMin),
321
+ executionDuration: quote.estimate.executionDuration,
322
+ gasCosts,
323
+ feeCosts,
324
+ route: quote, // Store full quote for conversion to route
325
+ requestParams: {
326
+ ...params,
327
+ fromChain: lifiFromChain,
328
+ toChain: lifiToChain,
329
+ },
330
+ };
331
+ }
332
+ /**
333
+ * Extract gas and fee costs from a LiFi quote response.
334
+ * - gasCosts: Sum of all gas costs (transaction fees)
335
+ * - feeCosts: Sum of non-included fee costs (protocol fees not deducted from amount)
336
+ */
337
+ extractCosts(quote) {
338
+ let gasCosts = 0n;
339
+ let feeCosts = 0n;
340
+ // Sum up gas costs
341
+ if (quote.estimate.gasCosts) {
342
+ for (const cost of quote.estimate.gasCosts) {
343
+ gasCosts += BigInt(cost.amount);
344
+ }
345
+ }
346
+ // Sum up non-included fee costs
347
+ // (included fees are already deducted from toAmount, so we only count non-included)
348
+ if (quote.estimate.feeCosts) {
349
+ for (const cost of quote.estimate.feeCosts) {
350
+ if (!cost.included) {
351
+ feeCosts += BigInt(cost.amount);
352
+ }
353
+ }
354
+ }
355
+ return { gasCosts, feeCosts };
356
+ }
357
+ /**
358
+ * Execute a bridge transfer using the SDK.
359
+ * Handles approvals, transaction signing, and execution automatically.
360
+ *
361
+ * @param quote - Quote obtained from quote()
362
+ * @param privateKeys - Private keys keyed by protocol type for signing transactions
363
+ */
364
+ async execute(quote, privateKeys) {
365
+ this.initialize();
366
+ // Convert quote to route for execution
367
+ const route = convertQuoteToRoute(quote.route);
368
+ this.validateRouteAgainstRequest(route, quote.requestParams);
369
+ const fromChain = route.fromChainId;
370
+ const toChain = route.toChainId;
371
+ const fromProtocol = this.getProtocolTypeForChainId(fromChain);
372
+ assert(privateKeys[fromProtocol ?? ProtocolType.Ethereum], `Missing private key for source chain protocol ${fromProtocol ?? ProtocolType.Ethereum}`);
373
+ this.logger.info({
374
+ quoteId: quote.id,
375
+ tool: quote.tool,
376
+ fromChain,
377
+ toChain,
378
+ fromAmount: quote.fromAmount.toString(),
379
+ }, 'Executing LiFi bridge transfer');
380
+ const fromRpcUrl = this.getRpcUrlForChainId(fromChain);
381
+ let release;
382
+ const acquired = new Promise((resolve) => {
383
+ release = resolve;
384
+ });
385
+ const prev = this._executeLock;
386
+ this._executeLock = acquired;
387
+ await prev;
388
+ let txHash;
389
+ let executedRoute;
390
+ try {
391
+ this.configureLiFiProviders(privateKeys, fromChain, fromRpcUrl);
392
+ this.logger.debug({
393
+ fromChain,
394
+ protocols: Object.keys(privateKeys),
395
+ }, 'Configured LiFi providers for route execution');
396
+ // Execute route with update callbacks
397
+ executedRoute = await executeRoute(route, {
398
+ // Update callback for route progress
399
+ updateRouteHook: (updatedRoute) => {
400
+ this.logger.debug({ step: updatedRoute.steps[0]?.id }, 'Route step updated');
401
+ // Extract txHash from execution if available (RouteExtended has LiFiStepExtended with execution)
402
+ const execution = updatedRoute.steps[0]?.execution;
403
+ if (execution?.process) {
404
+ for (const process of execution.process) {
405
+ if (process.txHash) {
406
+ txHash = process.txHash;
407
+ }
408
+ }
409
+ }
410
+ },
411
+ // Auto-accept rate updates for rebalancing
412
+ acceptExchangeRateUpdateHook: async () => true,
413
+ });
414
+ }
415
+ finally {
416
+ release();
417
+ }
418
+ // Extract txHash from executed route if not captured in callbacks
419
+ if (!txHash) {
420
+ const execution = executedRoute.steps[0]?.execution;
421
+ if (execution?.process) {
422
+ for (const process of execution.process) {
423
+ if (process.txHash) {
424
+ txHash = process.txHash;
425
+ break;
426
+ }
427
+ }
428
+ }
429
+ }
430
+ if (!txHash) {
431
+ throw new Error('No transaction hash found in executed route');
432
+ }
433
+ this.logger.info({ txHash, quoteId: quote.id }, 'LiFi bridge transaction executed');
434
+ // Extract transfer ID if available (some bridges provide this)
435
+ let transferId;
436
+ const processes = executedRoute.steps[0]?.execution?.process;
437
+ const txInfo = processes?.find((p) => p.txHash === txHash);
438
+ if (txInfo && 'lifiExplorerLink' in txInfo) {
439
+ // Extract transfer ID from explorer link if available
440
+ const link = txInfo.lifiExplorerLink;
441
+ const match = link?.match(/\/tx\/([^/]+)/);
442
+ if (match) {
443
+ transferId = match[1];
444
+ }
445
+ }
446
+ return {
447
+ txHash,
448
+ fromChain,
449
+ toChain,
450
+ transferId,
451
+ };
452
+ }
453
+ /**
454
+ * Validate that the route returned by LiFi matches the original request parameters.
455
+ * Prevents execution against wrong chains, tokens, or recipients if the bridge API
456
+ * returns a route that diverges from what was originally requested.
457
+ *
458
+ * TODO: Layer 2 validation — validate transaction calldata in route.steps[].transactionRequest
459
+ * and route.steps[0].estimate.approvalAddress against a known whitelist.
460
+ */
461
+ validateRouteAgainstRequest(route, requestParams) {
462
+ assert(route.fromChainId === requestParams.fromChain, `Route fromChainId ${route.fromChainId} does not match requested ${requestParams.fromChain}`);
463
+ assert(route.toChainId === requestParams.toChain, `Route toChainId ${route.toChainId} does not match requested ${requestParams.toChain}`);
464
+ assert(this.addressesEqual(route.fromToken.address, requestParams.fromToken, route.fromChainId), `Route fromToken ${route.fromToken.address} does not match requested ${requestParams.fromToken}`);
465
+ assert(this.addressesEqual(route.toToken.address, requestParams.toToken, route.toChainId), `Route toToken ${route.toToken.address} does not match requested ${requestParams.toToken}`);
466
+ const expectedToAddress = requestParams.toAddress ?? requestParams.fromAddress;
467
+ assert(this.addressesEqual(route.toAddress ?? '', expectedToAddress, route.toChainId), `Route toAddress ${route.toAddress} does not match requested ${expectedToAddress}`);
468
+ assert(this.addressesEqual(route.fromAddress ?? '', requestParams.fromAddress, route.fromChainId), `Route fromAddress ${route.fromAddress} does not match requested ${requestParams.fromAddress}`);
469
+ const routeFromAmount = BigInt(route.fromAmount);
470
+ if (requestParams.fromAmount !== undefined) {
471
+ assert(routeFromAmount === requestParams.fromAmount, `Route fromAmount ${route.fromAmount} does not match requested ${requestParams.fromAmount}`);
472
+ }
473
+ if (requestParams.toAmount !== undefined) {
474
+ const routeToAmount = BigInt(route.toAmount);
475
+ assert(routeToAmount >= requestParams.toAmount, `Route toAmount ${route.toAmount} is less than requested ${requestParams.toAmount}`);
476
+ }
477
+ assert(routeFromAmount > 0n, 'Route fromAmount must be positive');
478
+ }
479
+ /**
480
+ * Get the status of a bridge transfer.
481
+ * Uses SDK's built-in status tracking.
482
+ */
483
+ async getStatus(txHash, fromChain, toChain) {
484
+ this.initialize();
485
+ try {
486
+ const status = await getStatus({
487
+ txHash,
488
+ fromChain: LiFiBridge.toLiFiChainId(fromChain),
489
+ toChain: LiFiBridge.toLiFiChainId(toChain),
490
+ });
491
+ switch (status.status) {
492
+ case 'DONE': {
493
+ // receiving can be PendingReceivingInfo (only chainId) or ExtendedTransactionInfo (has txHash, amount)
494
+ const receiving = status.receiving;
495
+ const receivingTxHash = receiving && 'txHash' in receiving ? (receiving.txHash ?? '') : '';
496
+ const receivedAmount = receiving && 'amount' in receiving
497
+ ? BigInt(receiving.amount ?? '0')
498
+ : BigInt(0);
499
+ return {
500
+ status: 'complete',
501
+ receivingTxHash,
502
+ receivedAmount,
503
+ };
504
+ }
505
+ case 'FAILED':
506
+ return {
507
+ status: 'failed',
508
+ error: status.substatus,
509
+ };
510
+ case 'NOT_FOUND':
511
+ case 'INVALID':
512
+ return { status: 'not_found' };
513
+ case 'PENDING':
514
+ default:
515
+ return {
516
+ status: 'pending',
517
+ substatus: status.substatus,
518
+ };
519
+ }
520
+ }
521
+ catch (error) {
522
+ this.logger.warn({ txHash, error }, 'Failed to get LiFi status');
523
+ return { status: 'not_found' };
524
+ }
525
+ }
526
+ }
527
+ //# sourceMappingURL=LiFiBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiFiBridge.js","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LiFiBridge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiFiBridge.test.d.ts","sourceRoot":"","sources":["../../src/bridges/LiFiBridge.test.ts"],"names":[],"mappings":""}