@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2-humanode.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 (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,421 @@
1
+ import { Logger } from 'pino';
2
+
3
+ import {
4
+ type ChainMap,
5
+ type ChainName,
6
+ type Token,
7
+ } from '@humanode-hyperlane/sdk';
8
+ import { toWei } from '@humanode-hyperlane/utils';
9
+
10
+ import {
11
+ type CollateralDeficitStrategyConfig,
12
+ RebalancerStrategyOptions,
13
+ } from '../config/types.js';
14
+ import type {
15
+ InflightContext,
16
+ RawBalances,
17
+ Route,
18
+ StrategyRoute,
19
+ } from '../interfaces/IStrategy.js';
20
+ import { Metrics } from '../metrics/Metrics.js';
21
+ import {
22
+ type BridgeConfigWithOverride,
23
+ createStrategyRoute,
24
+ isInventoryConfig,
25
+ isMovableCollateralConfig,
26
+ } from '../utils/bridgeUtils.js';
27
+
28
+ import { BaseStrategy, type Delta } from './BaseStrategy.js';
29
+
30
+ /**
31
+ * Strategy that detects collateral deficits (negative effective balances)
32
+ * and proposes JIT rebalances using fast bridges.
33
+ *
34
+ * Logic:
35
+ * 1. Filter pendingRebalances to only those using this strategy's configured bridges
36
+ * 2. Simulate filtered pending rebalances to get projected balances
37
+ * 3. Negative simulated balance = deficit (magnitude + buffer)
38
+ * 4. Positive simulated balance = potential surplus
39
+ */
40
+ export class CollateralDeficitStrategy extends BaseStrategy {
41
+ readonly name = RebalancerStrategyOptions.CollateralDeficit;
42
+ private readonly config: CollateralDeficitStrategyConfig;
43
+ protected readonly logger: Logger;
44
+
45
+ constructor(
46
+ config: CollateralDeficitStrategyConfig,
47
+ tokensByChainName: ChainMap<Token>,
48
+ logger: Logger,
49
+ bridgeConfigs: ChainMap<BridgeConfigWithOverride>,
50
+ metrics?: Metrics,
51
+ ) {
52
+ const chains = Object.keys(config);
53
+ const log = logger.child({ class: CollateralDeficitStrategy.name });
54
+ super(chains, log, bridgeConfigs, metrics, tokensByChainName);
55
+ this.logger = log;
56
+ this.config = config;
57
+ this.logger.info('CollateralDeficitStrategy created');
58
+ }
59
+
60
+ /**
61
+ * Categorizes balances into surpluses and deficits.
62
+ *
63
+ * 1. Filter pendingRebalances/proposedRebalances by configured bridges
64
+ * 2. Simulate those rebalances to get projected balances
65
+ * 3. Negative balance = deficit (magnitude + buffer)
66
+ * 4. Positive balance = potential surplus
67
+ */
68
+ protected getCategorizedBalances(
69
+ rawBalances: RawBalances,
70
+ pendingRebalances?: Route[],
71
+ proposedRebalances?: StrategyRoute[],
72
+ ): {
73
+ surpluses: Delta[];
74
+ deficits: Delta[];
75
+ } {
76
+ // Filter pending rebalances to only those using this strategy's bridges
77
+ const filteredPending = this.filterByConfiguredBridges(pendingRebalances);
78
+ const filteredProposed = this.filterByConfiguredBridges(proposedRebalances);
79
+
80
+ this.logger.debug(
81
+ {
82
+ context: this.constructor.name,
83
+ totalPending: pendingRebalances?.length ?? 0,
84
+ filteredPending: filteredPending.length,
85
+ totalProposed: proposedRebalances?.length ?? 0,
86
+ filteredProposed: filteredProposed.length,
87
+ },
88
+ 'Filtered rebalances by configured bridges',
89
+ );
90
+
91
+ // Step 1: Simulate pending rebalances (in-flight, origin already deducted on-chain)
92
+ let simulatedBalances = this.simulatePendingRebalances(
93
+ rawBalances,
94
+ filteredPending,
95
+ );
96
+
97
+ // Step 2: Simulate proposed rebalances (from earlier strategies, not yet executed)
98
+ simulatedBalances = this.simulateProposedRebalances(
99
+ simulatedBalances,
100
+ filteredProposed,
101
+ );
102
+
103
+ const surpluses: Delta[] = [];
104
+ const deficits: Delta[] = [];
105
+
106
+ for (const chain of this.chains) {
107
+ const balance = simulatedBalances[chain];
108
+ const token = this.getTokenByChainName(chain);
109
+ const bufferWei = BigInt(
110
+ toWei(this.config[chain].buffer, token.decimals),
111
+ );
112
+
113
+ if (balance < 0n) {
114
+ // Negative balance indicates deficit
115
+ const deficitAmount = -balance + bufferWei;
116
+ deficits.push({ chain, amount: deficitAmount });
117
+
118
+ this.logger.debug(
119
+ {
120
+ context: this.constructor.name,
121
+ chain,
122
+ simulatedBalance: balance.toString(),
123
+ buffer: bufferWei.toString(),
124
+ deficitAmount: deficitAmount.toString(),
125
+ },
126
+ 'Detected collateral deficit',
127
+ );
128
+ } else if (balance > 0n) {
129
+ // Positive balance is potential surplus
130
+ surpluses.push({ chain, amount: balance });
131
+ }
132
+ }
133
+
134
+ this.logger.info(
135
+ {
136
+ surpluses: surpluses.map((s) => ({
137
+ chain: s.chain,
138
+ amount: s.amount.toString(),
139
+ })),
140
+ deficits: deficits.map((d) => ({
141
+ chain: d.chain,
142
+ amount: d.amount.toString(),
143
+ })),
144
+ },
145
+ 'Balance categorization',
146
+ );
147
+
148
+ return { surpluses, deficits };
149
+ }
150
+
151
+ /**
152
+ * Override to prefer transfer origins when selecting surplus chains.
153
+ *
154
+ * When a user transfer creates a deficit, the origin chain of that transfer
155
+ * is the natural source of funds (user deposited there). This prevents
156
+ * unnecessarily draining the largest balance (typically ethereum at 70%).
157
+ */
158
+ override getRebalancingRoutes(
159
+ rawBalances: RawBalances,
160
+ inflightContext?: InflightContext,
161
+ ): StrategyRoute[] {
162
+ const pendingRebalances = inflightContext?.pendingRebalances ?? [];
163
+ const pendingTransfers = inflightContext?.pendingTransfers ?? [];
164
+
165
+ this.logger.info(
166
+ {
167
+ strategy: this.name,
168
+ balances: Object.entries(rawBalances).map(([c, b]) => ({
169
+ chain: c,
170
+ balance: b.toString(),
171
+ })),
172
+ pendingRebalances: pendingRebalances.length,
173
+ pendingTransfers: pendingTransfers.length,
174
+ },
175
+ 'Strategy evaluating',
176
+ );
177
+ this.validateRawBalances(rawBalances);
178
+
179
+ const actualBalances = rawBalances;
180
+
181
+ // Step 1: Reserve collateral for pending user transfers
182
+ const effectiveBalances = this.reserveCollateral(
183
+ rawBalances,
184
+ pendingTransfers,
185
+ );
186
+
187
+ // Step 2: Get categorized balances
188
+ const { surpluses, deficits } = this.getCategorizedBalances(
189
+ effectiveBalances,
190
+ pendingRebalances,
191
+ );
192
+
193
+ this.logger.debug(
194
+ { context: this.constructor.name, surpluses },
195
+ 'Surpluses calculated',
196
+ );
197
+ this.logger.debug(
198
+ { context: this.constructor.name, deficits },
199
+ 'Deficits calculated',
200
+ );
201
+
202
+ const totalSurplus = surpluses.reduce((sum, s) => sum + s.amount, 0n);
203
+ const totalDeficit = deficits.reduce((sum, d) => sum + d.amount, 0n);
204
+
205
+ this.logger.debug(
206
+ { context: this.constructor.name, totalSurplus: totalSurplus.toString() },
207
+ 'Total surplus calculated',
208
+ );
209
+ this.logger.debug(
210
+ { context: this.constructor.name, totalDeficit: totalDeficit.toString() },
211
+ 'Total deficit calculated',
212
+ );
213
+
214
+ // Scale deficits if needed
215
+ if (totalSurplus < totalDeficit) {
216
+ this.logger.warn(
217
+ {
218
+ context: this.constructor.name,
219
+ totalSurplus: totalSurplus.toString(),
220
+ totalDeficit: totalDeficit.toString(),
221
+ },
222
+ 'Deficits are greater than surpluses. Scaling deficits',
223
+ );
224
+ this.metrics?.recordRebalancerFailure();
225
+ for (const deficit of deficits) {
226
+ deficit.amount = (deficit.amount * totalSurplus) / totalDeficit;
227
+ }
228
+ this.logger.debug(
229
+ { context: this.constructor.name, deficits },
230
+ 'Scaled deficits',
231
+ );
232
+ }
233
+
234
+ // Build transfer origin map for deficit chains
235
+ const deficitChains = new Set(deficits.map((d) => d.chain));
236
+ const transferOriginMap = this.buildTransferOriginMap(
237
+ pendingTransfers,
238
+ deficitChains,
239
+ );
240
+
241
+ // Sort surpluses with transfer origin preference (KEY CHANGE from base class)
242
+ this.sortSurplusesWithOriginPreference(surpluses, transferOriginMap);
243
+
244
+ // Sort deficits by amount (largest first)
245
+ deficits.sort((a, b) => (a.amount > b.amount ? -1 : 1));
246
+
247
+ const routes: StrategyRoute[] = [];
248
+
249
+ // Match surpluses to deficits
250
+ while (deficits.length > 0 && surpluses.length > 0) {
251
+ const surplus = surpluses[0];
252
+ const deficit = deficits[0];
253
+ const transferAmount =
254
+ surplus.amount > deficit.amount ? deficit.amount : surplus.amount;
255
+
256
+ if (transferAmount > 0n) {
257
+ const bridgeConfig = this.getBridgeConfigForRoute(
258
+ surplus.chain,
259
+ deficit.chain,
260
+ );
261
+ routes.push(
262
+ createStrategyRoute(
263
+ bridgeConfig,
264
+ surplus.chain,
265
+ deficit.chain,
266
+ transferAmount,
267
+ ),
268
+ );
269
+ }
270
+
271
+ deficit.amount -= transferAmount;
272
+ surplus.amount -= transferAmount;
273
+
274
+ if (deficit.amount <= 0n) deficits.shift();
275
+ if (surplus.amount <= 0n) surpluses.shift();
276
+ }
277
+
278
+ this.logger.debug(
279
+ { context: this.constructor.name, routes },
280
+ 'Generated routes',
281
+ );
282
+ this.logger.info(
283
+ { context: this.constructor.name, numberOfRoutes: routes.length },
284
+ 'Found rebalancing routes',
285
+ );
286
+
287
+ const filteredRoutes = this.filterRoutes(routes, actualBalances);
288
+
289
+ // Record metrics for each intent created
290
+ for (const route of filteredRoutes) {
291
+ this.metrics?.recordIntentCreated(route, this.name);
292
+ }
293
+
294
+ this.logger.debug(
295
+ {
296
+ context: this.constructor.name,
297
+ filteredRoutesCount: filteredRoutes.length,
298
+ droppedCount: routes.length - filteredRoutes.length,
299
+ },
300
+ 'Filtered rebalancing routes',
301
+ );
302
+
303
+ return filteredRoutes;
304
+ }
305
+
306
+ /**
307
+ * Filter pending rebalances to only those using this strategy's configured bridges.
308
+ * A rebalance matches if:
309
+ * - Its bridge matches the configured bridge (with overrides) for the route, OR
310
+ * - It has no bridge (recovered from Explorer, can't verify - include to be safe)
311
+ */
312
+ private filterByConfiguredBridges(pendingRebalances?: Route[]): Route[] {
313
+ if (!pendingRebalances || pendingRebalances.length === 0) {
314
+ return [];
315
+ }
316
+
317
+ return pendingRebalances.filter((rebalance) => {
318
+ const bridgeConfig = this.getBridgeConfigForRoute(
319
+ rebalance.origin,
320
+ rebalance.destination,
321
+ );
322
+
323
+ // For movableCollateral routes: match bridge address
324
+ if ('bridge' in rebalance && rebalance.bridge) {
325
+ return (
326
+ isMovableCollateralConfig(bridgeConfig) &&
327
+ bridgeConfig.bridge === rebalance.bridge
328
+ );
329
+ }
330
+
331
+ // For inventory routes: match externalBridge type
332
+ if ('externalBridge' in rebalance && rebalance.externalBridge) {
333
+ return (
334
+ isInventoryConfig(bridgeConfig) &&
335
+ bridgeConfig.externalBridge === rebalance.externalBridge
336
+ );
337
+ }
338
+
339
+ // Recovered intents without bridge info - include to be safe
340
+ this.logger.debug(
341
+ { origin: rebalance.origin, destination: rebalance.destination },
342
+ 'Including pending rebalance without bridge (recovered intent)',
343
+ );
344
+ return true;
345
+ });
346
+ }
347
+
348
+ /**
349
+ * Build a map from deficit chains to their transfer origin chains.
350
+ * This identifies which surplus chains are "natural" sources for each deficit.
351
+ */
352
+ private buildTransferOriginMap(
353
+ pendingTransfers: Route[],
354
+ deficitChains: Set<ChainName>,
355
+ ): Map<ChainName, Set<ChainName>> {
356
+ const originMap = new Map<ChainName, Set<ChainName>>();
357
+
358
+ for (const transfer of pendingTransfers) {
359
+ // Only track transfers TO deficit chains
360
+ if (deficitChains.has(transfer.destination)) {
361
+ if (!originMap.has(transfer.destination)) {
362
+ originMap.set(transfer.destination, new Set());
363
+ }
364
+ originMap.get(transfer.destination)!.add(transfer.origin);
365
+ }
366
+ }
367
+
368
+ return originMap;
369
+ }
370
+
371
+ /**
372
+ * Sort surpluses to prefer transfer origins over largest balances.
373
+ *
374
+ * Sorting priority:
375
+ * 1. Chains that are origins of transfers TO any deficit chain (preferred)
376
+ * 2. By amount descending (tiebreaker)
377
+ */
378
+ private sortSurplusesWithOriginPreference(
379
+ surpluses: Delta[],
380
+ transferOriginMap: Map<ChainName, Set<ChainName>>,
381
+ ): void {
382
+ // Collect all origin chains across all deficits
383
+ const allOriginChains = new Set<ChainName>();
384
+ for (const origins of transferOriginMap.values()) {
385
+ for (const origin of origins) {
386
+ allOriginChains.add(origin);
387
+ }
388
+ }
389
+
390
+ surpluses.sort((a, b) => {
391
+ const aIsOrigin = allOriginChains.has(a.chain);
392
+ const bIsOrigin = allOriginChains.has(b.chain);
393
+
394
+ // Prefer transfer origins
395
+ if (aIsOrigin && !bIsOrigin) return -1;
396
+ if (!aIsOrigin && bIsOrigin) return 1;
397
+
398
+ // Tiebreaker: larger amount first
399
+ return a.amount > b.amount ? -1 : 1;
400
+ });
401
+
402
+ if (allOriginChains.size > 0) {
403
+ this.logger.debug(
404
+ {
405
+ context: this.constructor.name,
406
+ preferredOrigins: Array.from(allOriginChains),
407
+ sortedSurpluses: surpluses.map((s) => s.chain),
408
+ },
409
+ 'Sorted surpluses with transfer origin preference',
410
+ );
411
+ }
412
+ }
413
+
414
+ protected getTokenByChainName(chainName: string): Token {
415
+ const token = this.tokensByChainName![chainName];
416
+ if (token === undefined) {
417
+ throw new Error(`Token not found for chain ${chainName}`);
418
+ }
419
+ return token;
420
+ }
421
+ }