@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
package/src/index.ts ADDED
@@ -0,0 +1,125 @@
1
+ /**
2
+ * @humanode-hyperlane/rebalancer
3
+ *
4
+ * Hyperlane Warp Route Collateral Rebalancer
5
+ *
6
+ * This package provides functionality for automatically rebalancing collateral
7
+ * across Hyperlane warp routes to maintain optimal token distribution.
8
+ */
9
+
10
+ // Core service
11
+ export { RebalancerService } from './core/RebalancerService.js';
12
+ export type {
13
+ RebalancerServiceConfig,
14
+ ManualRebalanceRequest,
15
+ } from './core/RebalancerService.js';
16
+
17
+ // Core rebalancing logic
18
+ export { Rebalancer } from './core/Rebalancer.js';
19
+
20
+ // Configuration
21
+ export { RebalancerConfig } from './config/RebalancerConfig.js';
22
+ export {
23
+ DEFAULT_INTENT_TTL_MS,
24
+ DEFAULT_INTENT_TTL_S,
25
+ getStrategyChainConfig,
26
+ getStrategyChainNames,
27
+ RebalancerBaseChainConfigSchema,
28
+ RebalancerConfigSchema,
29
+ RebalancerMinAmountConfigSchema,
30
+ RebalancerMinAmountType,
31
+ RebalancerStrategyOptions,
32
+ RebalancerStrategySchema,
33
+ RebalancerWeightedChainConfigSchema,
34
+ StrategyConfigSchema,
35
+ } from './config/types.js';
36
+ export type {
37
+ MinAmountStrategyConfig,
38
+ RebalancerConfig as RebalancerConfigType,
39
+ RebalancerConfigFileInput,
40
+ RebalancerMinAmountChainConfig,
41
+ RebalancerWeightedChainConfig,
42
+ StrategyConfig,
43
+ WeightedStrategyConfig,
44
+ } from './config/types.js';
45
+
46
+ // Strategy
47
+ export { BaseStrategy } from './strategy/BaseStrategy.js';
48
+ export { CompositeStrategy } from './strategy/CompositeStrategy.js';
49
+ export { WeightedStrategy } from './strategy/WeightedStrategy.js';
50
+ export { MinAmountStrategy } from './strategy/MinAmountStrategy.js';
51
+ export { StrategyFactory } from './strategy/StrategyFactory.js';
52
+
53
+ // Monitor
54
+ export { Monitor } from './monitor/Monitor.js';
55
+
56
+ // Metrics
57
+ export { Metrics } from './metrics/Metrics.js';
58
+ export { PriceGetter } from './metrics/PriceGetter.js';
59
+
60
+ // Interfaces
61
+ export type {
62
+ ExecutionResult,
63
+ IInventoryRebalancer,
64
+ IMovableCollateralRebalancer,
65
+ IRebalancer,
66
+ InventoryExecutionResult,
67
+ MovableCollateralExecutionResult,
68
+ PreparedTransaction,
69
+ RebalancerType,
70
+ } from './interfaces/IRebalancer.js';
71
+ export type {
72
+ IStrategy,
73
+ InflightContext,
74
+ InventoryRoute,
75
+ MovableCollateralRoute,
76
+ RawBalances,
77
+ Route,
78
+ StrategyRoute,
79
+ } from './interfaces/IStrategy.js';
80
+ export type {
81
+ ConfirmedBlockTag,
82
+ ConfirmedBlockTags,
83
+ IMonitor,
84
+ } from './interfaces/IMonitor.js';
85
+ export {
86
+ MonitorEventType,
87
+ MonitorEvent,
88
+ MonitorPollingError,
89
+ MonitorStartError,
90
+ } from './interfaces/IMonitor.js';
91
+ export type { IMetrics } from './interfaces/IMetrics.js';
92
+
93
+ // Utils
94
+ export {
95
+ getBridgeConfig,
96
+ isMovableCollateralConfig,
97
+ isInventoryConfig,
98
+ } from './utils/bridgeUtils.js';
99
+ export type {
100
+ BridgeConfigWithOverride,
101
+ BridgeConfig,
102
+ MovableCollateralBridgeConfig,
103
+ InventoryBridgeConfig,
104
+ } from './utils/bridgeUtils.js';
105
+ export { getRawBalances } from './utils/balanceUtils.js';
106
+ export { isCollateralizedTokenEligibleForRebalancing } from './utils/tokenUtils.js';
107
+ export { ExplorerClient } from './utils/ExplorerClient.js';
108
+
109
+ // Tracking
110
+ export { InflightContextAdapter } from './tracking/InflightContextAdapter.js';
111
+ export type {
112
+ IActionTracker,
113
+ CreateRebalanceIntentParams,
114
+ CreateRebalanceActionParams,
115
+ } from './tracking/IActionTracker.js';
116
+ export type {
117
+ Transfer,
118
+ RebalanceIntent,
119
+ RebalanceAction,
120
+ ActionType,
121
+ PartialInventoryIntent,
122
+ } from './tracking/types.js';
123
+
124
+ // Factory
125
+ export { RebalancerContextFactory } from './factories/RebalancerContextFactory.js';
@@ -0,0 +1,117 @@
1
+ import type { Logger } from 'pino';
2
+
3
+ import type { ChainMap, ChainMetadata } from '@humanode-hyperlane/sdk';
4
+ import { ProtocolType } from '@humanode-hyperlane/utils';
5
+
6
+ import type { ExternalBridgeType } from '../config/types.js';
7
+
8
+ /**
9
+ * Configuration for an external bridge.
10
+ */
11
+ export interface ExternalBridgeConfig {
12
+ integrator: string; // Required: dApp/company name for bridge integration
13
+ apiKey?: string; // Optional: API key for higher rate limits
14
+ defaultSlippage?: number; // Default slippage tolerance (e.g., 0.005 = 0.5%)
15
+ chainMetadata?: ChainMap<ChainMetadata>; // Optional: chain metadata for resolving RPC URLs by chainId
16
+ }
17
+
18
+ /**
19
+ * Parameters for requesting a bridge quote.
20
+ * Either fromAmount OR toAmount must be provided (mutually exclusive).
21
+ * - fromAmount: "I'm sending X, what do I get?" (standard quote)
22
+ * - toAmount: "I want X on destination, how much do I send?" (reverse quote)
23
+ */
24
+ export interface BridgeQuoteParams {
25
+ fromChain: number; // Source chain ID
26
+ toChain: number; // Destination chain ID
27
+ fromToken: string; // Source token address
28
+ toToken: string; // Destination token address
29
+ fromAmount?: bigint; // Amount to send (in token decimals) - use for "I'm sending X"
30
+ toAmount?: bigint; // Amount to receive (in token decimals) - use for "I want X"
31
+ fromAddress: string; // Sender address
32
+ toAddress?: string; // Recipient address (defaults to fromAddress)
33
+ slippage?: number; // Slippage tolerance (overrides default)
34
+ }
35
+
36
+ /**
37
+ * Quote response from a bridge.
38
+ */
39
+ export interface BridgeQuote<R = unknown> {
40
+ id: string; // Unique quote identifier
41
+ tool: string; // Bridge/DEX tool used (e.g., 'stargate', 'across')
42
+ fromAmount: bigint; // Amount being sent (input required)
43
+ toAmount: bigint; // Expected amount to receive
44
+ toAmountMin: bigint; // Minimum amount to receive (after slippage)
45
+ executionDuration: number; // Estimated execution time in seconds
46
+ gasCosts: bigint; // Sum of gas costs for the bridge operation
47
+ feeCosts: bigint; // Sum of non-included fee costs (protocol fees, etc.)
48
+ route: R; // Bridge-specific route data for execution
49
+ requestParams: BridgeQuoteParams; // Original request parameters
50
+ }
51
+
52
+ /**
53
+ * Result of executing a bridge transfer.
54
+ */
55
+ export interface BridgeTransferResult {
56
+ txHash: string; // Origin chain transaction hash
57
+ fromChain: number; // Source chain ID
58
+ toChain: number; // Destination chain ID
59
+ transferId?: string; // Bridge-specific transfer identifier
60
+ }
61
+
62
+ /**
63
+ * Status of a bridge transfer.
64
+ */
65
+ export type BridgeTransferStatus =
66
+ | { status: 'pending'; substatus?: string }
67
+ | { status: 'complete'; receivingTxHash: string; receivedAmount: bigint }
68
+ | { status: 'failed'; error?: string }
69
+ | { status: 'not_found' };
70
+
71
+ /**
72
+ * Interface for external bridge implementations (e.g., LiFi, Socket).
73
+ *
74
+ * External bridges are used for inventory rebalancing when chains don't support
75
+ * MovableCollateralRouter. The flow is:
76
+ * 1. quote() - Get a quote for bridging tokens
77
+ * 2. execute() - Execute the bridge transfer
78
+ * 3. getStatus() - Poll for transfer completion
79
+ */
80
+ export interface IExternalBridge {
81
+ readonly externalBridgeId: string;
82
+ readonly logger: Logger;
83
+
84
+ getNativeTokenAddress?(): string;
85
+
86
+ quote(params: BridgeQuoteParams): Promise<BridgeQuote>;
87
+
88
+ /**
89
+ * Execute a bridge transfer using a previously obtained quote.
90
+ * @param quote - Quote obtained from quote()
91
+ * @param privateKeys - Private keys keyed by ProtocolType (e.g., { [ProtocolType.Ethereum]: '0x...' })
92
+ */
93
+ execute(
94
+ quote: BridgeQuote,
95
+ privateKeys: Partial<Record<ProtocolType, string>>,
96
+ ): Promise<BridgeTransferResult>;
97
+
98
+ /**
99
+ * Get the status of a bridge transfer.
100
+ * @param txHash - Origin chain transaction hash
101
+ * @param fromChain - Source chain ID
102
+ * @param toChain - Destination chain ID
103
+ */
104
+ getStatus(
105
+ txHash: string,
106
+ fromChain: number,
107
+ toChain: number,
108
+ ): Promise<BridgeTransferStatus>;
109
+ }
110
+
111
+ /**
112
+ * Registry mapping external bridge types to their implementations.
113
+ */
114
+ export type ExternalBridgeRegistry = Record<
115
+ ExternalBridgeType,
116
+ IExternalBridge
117
+ >;
@@ -0,0 +1,5 @@
1
+ import { type MonitorEvent } from './IMonitor.js';
2
+
3
+ export interface IMetrics {
4
+ processToken(tokenInfo: MonitorEvent['tokensInfo'][number]): Promise<void>;
5
+ }
@@ -0,0 +1,71 @@
1
+ import {
2
+ type ChainMap,
3
+ EthJsonRpcBlockParameterTag,
4
+ type Token,
5
+ } from '@humanode-hyperlane/sdk';
6
+
7
+ import { WrappedError } from '../utils/errors.js';
8
+
9
+ export class MonitorStartError extends WrappedError {
10
+ name = 'MonitorStartError';
11
+ }
12
+
13
+ export class MonitorPollingError extends WrappedError {
14
+ name = 'MonitorPollingError';
15
+ }
16
+
17
+ export enum MonitorEventType {
18
+ TokenInfo = 'TokenInfo',
19
+ Error = 'Error',
20
+ Start = 'Start',
21
+ }
22
+
23
+ export type ConfirmedBlockTag =
24
+ | number
25
+ | EthJsonRpcBlockParameterTag
26
+ | undefined;
27
+
28
+ export type ConfirmedBlockTags = ChainMap<ConfirmedBlockTag>;
29
+
30
+ export type MonitorEvent = {
31
+ tokensInfo: {
32
+ token: Token;
33
+ bridgedSupply?: bigint;
34
+ }[];
35
+ confirmedBlockTags: ConfirmedBlockTags;
36
+ inventoryBalances?: ChainMap<bigint>;
37
+ };
38
+
39
+ /**
40
+ * Interface for a monitoring service that tracks token information across different chains.
41
+ */
42
+ export interface IMonitor {
43
+ /**
44
+ * Allows subscribers to listen to hyperlane's tokens info.
45
+ * Handler can be async - Monitor will await it before starting next cycle.
46
+ */
47
+ on(
48
+ eventName: MonitorEventType.TokenInfo,
49
+ fn: (event: MonitorEvent) => void | Promise<void>,
50
+ ): this;
51
+
52
+ /**
53
+ * Allows subscribers to listen to error events.
54
+ */
55
+ on(eventName: MonitorEventType.Error, fn: (event: Error) => void): this;
56
+
57
+ /**
58
+ * Allows subscribers to listen to start events.
59
+ */
60
+ on(eventName: MonitorEventType.Start, fn: () => void): this;
61
+
62
+ /**
63
+ * Starts the monitoring long-running process.
64
+ */
65
+ start(): Promise<void>;
66
+
67
+ /**
68
+ * Stops the monitoring long-running process.
69
+ */
70
+ stop(): void;
71
+ }
@@ -0,0 +1,57 @@
1
+ import {
2
+ type EvmMovableCollateralAdapter,
3
+ type TokenAmount,
4
+ } from '@humanode-hyperlane/sdk';
5
+
6
+ import {
7
+ type InventoryRoute,
8
+ type MovableCollateralRoute,
9
+ type Route,
10
+ } from './IStrategy.js';
11
+
12
+ export type RebalancerType = 'movableCollateral' | 'inventory';
13
+
14
+ export interface ExecutionResult<R extends Route = Route> {
15
+ route: R;
16
+ success: boolean;
17
+ error?: string;
18
+ // messageId?: string;
19
+ txHash?: string;
20
+ // amountSent?: bigint;
21
+ reason?: string;
22
+ }
23
+
24
+ export interface MovableCollateralExecutionResult extends ExecutionResult<MovableCollateralRoute> {
25
+ messageId: string;
26
+ }
27
+
28
+ export interface InventoryExecutionResult extends ExecutionResult<InventoryRoute> {
29
+ messageId?: string;
30
+ amountSent?: bigint;
31
+ }
32
+
33
+ export interface IRebalancer<
34
+ R extends Route = Route,
35
+ E extends ExecutionResult<R> = ExecutionResult<R>,
36
+ > {
37
+ readonly rebalancerType: RebalancerType;
38
+ rebalance(routes: R[]): Promise<E[]>;
39
+ }
40
+
41
+ export type IMovableCollateralRebalancer = IRebalancer<
42
+ MovableCollateralRoute,
43
+ MovableCollateralExecutionResult
44
+ >;
45
+
46
+ export type IInventoryRebalancer = IRebalancer<
47
+ InventoryRoute,
48
+ InventoryExecutionResult
49
+ >;
50
+
51
+ export type PreparedTransaction = {
52
+ populatedTx: Awaited<
53
+ ReturnType<EvmMovableCollateralAdapter['populateRebalanceTx']>
54
+ >;
55
+ route: MovableCollateralRoute & { intentId: string };
56
+ originTokenAmount: TokenAmount;
57
+ };
@@ -0,0 +1,81 @@
1
+ import { type ChainMap, type ChainName } from '@humanode-hyperlane/sdk';
2
+ import type { Address } from '@humanode-hyperlane/utils';
3
+
4
+ import { ExternalBridgeType } from '../config/types.js';
5
+ import { ExecutionMethod } from '../tracking/types.js';
6
+
7
+ export type RawBalances = ChainMap<bigint>;
8
+
9
+ export interface Route {
10
+ origin: ChainName;
11
+ destination: ChainName;
12
+ amount: bigint;
13
+ /** Execution method used for this rebalance */
14
+ executionMethod?: ExecutionMethod;
15
+ }
16
+
17
+ export interface RouteWithContext extends Route {
18
+ /** For inventory intents: sum of complete inventory_deposit actions (message delivered) */
19
+ deliveredAmount?: bigint;
20
+ /** For inventory intents: sum of in_progress inventory_deposit actions (tx confirmed, message pending) */
21
+ awaitingDeliveryAmount?: bigint;
22
+ }
23
+
24
+ /**
25
+ * Route using movable collateral execution (on-chain rebalance via bridge)
26
+ */
27
+ export interface MovableCollateralRoute extends Route {
28
+ executionType: 'movableCollateral';
29
+ bridge: Address;
30
+ }
31
+
32
+ /**
33
+ * Route using inventory execution (external bridge + transferRemote)
34
+ */
35
+ export interface InventoryRoute extends Route {
36
+ executionType: 'inventory';
37
+ externalBridge: ExternalBridgeType;
38
+ }
39
+
40
+ /**
41
+ * Discriminated union of route types by executionType
42
+ */
43
+ export type StrategyRoute = MovableCollateralRoute | InventoryRoute;
44
+
45
+ /**
46
+ * Type guard to check if a route is a MovableCollateralRoute
47
+ */
48
+ export function isMovableCollateralRoute(
49
+ route: StrategyRoute,
50
+ ): route is MovableCollateralRoute {
51
+ return route.executionType === 'movableCollateral';
52
+ }
53
+
54
+ /**
55
+ * Type guard to check if a route is an InventoryRoute
56
+ */
57
+ export function isInventoryRoute(
58
+ route: StrategyRoute,
59
+ ): route is InventoryRoute {
60
+ return route.executionType === 'inventory';
61
+ }
62
+
63
+ export type InflightContext = {
64
+ /**
65
+ * In-flight rebalances from ActionTracker.
66
+ * Uses Route[] because recovered intents (from Explorer startup recovery)
67
+ * don't have bridge information. Some routes may have bridge at runtime.
68
+ */
69
+ pendingRebalances: RouteWithContext[];
70
+ pendingTransfers: RouteWithContext[];
71
+ /** Routes from earlier strategies - always have bridge */
72
+ proposedRebalances?: StrategyRoute[];
73
+ };
74
+
75
+ export interface IStrategy {
76
+ readonly name: string;
77
+ getRebalancingRoutes(
78
+ rawBalances: RawBalances,
79
+ inflightContext?: InflightContext,
80
+ ): StrategyRoute[];
81
+ }