@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.
- package/LICENSE.md +193 -0
- package/README.md +297 -2
- package/dist/bridges/LiFiBridge.d.ts +93 -0
- package/dist/bridges/LiFiBridge.d.ts.map +1 -0
- package/dist/bridges/LiFiBridge.js +527 -0
- package/dist/bridges/LiFiBridge.js.map +1 -0
- package/dist/bridges/LiFiBridge.test.d.ts +2 -0
- package/dist/bridges/LiFiBridge.test.d.ts.map +1 -0
- package/dist/bridges/LiFiBridge.test.js +504 -0
- package/dist/bridges/LiFiBridge.test.js.map +1 -0
- package/dist/config/RebalancerConfig.d.ts +20 -0
- package/dist/config/RebalancerConfig.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.js +35 -0
- package/dist/config/RebalancerConfig.js.map +1 -0
- package/dist/config/RebalancerConfig.test.d.ts +2 -0
- package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.test.js +798 -0
- package/dist/config/RebalancerConfig.test.js.map +1 -0
- package/dist/config/types.d.ts +3008 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +451 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/InventoryRebalancer.d.ts +201 -0
- package/dist/core/InventoryRebalancer.d.ts.map +1 -0
- package/dist/core/InventoryRebalancer.js +994 -0
- package/dist/core/InventoryRebalancer.js.map +1 -0
- package/dist/core/InventoryRebalancer.test.d.ts +2 -0
- package/dist/core/InventoryRebalancer.test.d.ts.map +1 -0
- package/dist/core/InventoryRebalancer.test.js +1511 -0
- package/dist/core/InventoryRebalancer.test.js.map +1 -0
- package/dist/core/Rebalancer.d.ts +37 -0
- package/dist/core/Rebalancer.d.ts.map +1 -0
- package/dist/core/Rebalancer.js +433 -0
- package/dist/core/Rebalancer.js.map +1 -0
- package/dist/core/Rebalancer.test.d.ts +2 -0
- package/dist/core/Rebalancer.test.d.ts.map +1 -0
- package/dist/core/Rebalancer.test.js +424 -0
- package/dist/core/Rebalancer.test.js.map +1 -0
- package/dist/core/RebalancerOrchestrator.d.ts +56 -0
- package/dist/core/RebalancerOrchestrator.d.ts.map +1 -0
- package/dist/core/RebalancerOrchestrator.js +154 -0
- package/dist/core/RebalancerOrchestrator.js.map +1 -0
- package/dist/core/RebalancerOrchestrator.test.d.ts +2 -0
- package/dist/core/RebalancerOrchestrator.test.d.ts.map +1 -0
- package/dist/core/RebalancerOrchestrator.test.js +721 -0
- package/dist/core/RebalancerOrchestrator.test.js.map +1 -0
- package/dist/core/RebalancerService.d.ts +127 -0
- package/dist/core/RebalancerService.d.ts.map +1 -0
- package/dist/core/RebalancerService.js +270 -0
- package/dist/core/RebalancerService.js.map +1 -0
- package/dist/core/RebalancerService.test.d.ts +2 -0
- package/dist/core/RebalancerService.test.d.ts.map +1 -0
- package/dist/core/RebalancerService.test.js +777 -0
- package/dist/core/RebalancerService.test.js.map +1 -0
- package/dist/e2e/collateral-deficit.e2e-test.d.ts +2 -0
- package/dist/e2e/collateral-deficit.e2e-test.d.ts.map +1 -0
- package/dist/e2e/collateral-deficit.e2e-test.js +227 -0
- package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -0
- package/dist/e2e/composite.e2e-test.d.ts +2 -0
- package/dist/e2e/composite.e2e-test.d.ts.map +1 -0
- package/dist/e2e/composite.e2e-test.js +666 -0
- package/dist/e2e/composite.e2e-test.js.map +1 -0
- package/dist/e2e/fixtures/routes.d.ts +89 -0
- package/dist/e2e/fixtures/routes.d.ts.map +1 -0
- package/dist/e2e/fixtures/routes.js +420 -0
- package/dist/e2e/fixtures/routes.js.map +1 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts +38 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.js +144 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/BridgeSetup.d.ts +11 -0
- package/dist/e2e/harness/BridgeSetup.d.ts.map +1 -0
- package/dist/e2e/harness/BridgeSetup.js +50 -0
- package/dist/e2e/harness/BridgeSetup.js.map +1 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts +13 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js +105 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts +11 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.js +105 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/ForkIndexer.d.ts +23 -0
- package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -0
- package/dist/e2e/harness/ForkIndexer.js +127 -0
- package/dist/e2e/harness/ForkIndexer.js.map +1 -0
- package/dist/e2e/harness/ForkIndexer.test.d.ts +2 -0
- package/dist/e2e/harness/ForkIndexer.test.d.ts.map +1 -0
- package/dist/e2e/harness/ForkIndexer.test.js +257 -0
- package/dist/e2e/harness/ForkIndexer.test.js.map +1 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.js +115 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/MockExplorerClient.d.ts +23 -0
- package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -0
- package/dist/e2e/harness/MockExplorerClient.js +57 -0
- package/dist/e2e/harness/MockExplorerClient.js.map +1 -0
- package/dist/e2e/harness/MockExternalBridge.d.ts +32 -0
- package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -0
- package/dist/e2e/harness/MockExternalBridge.js +247 -0
- package/dist/e2e/harness/MockExternalBridge.js.map +1 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts +13 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.js +91 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
- package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
- package/dist/e2e/harness/SnapshotHelper.js +36 -0
- package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
- package/dist/e2e/harness/TestHelpers.d.ts +25 -0
- package/dist/e2e/harness/TestHelpers.d.ts.map +1 -0
- package/dist/e2e/harness/TestHelpers.js +103 -0
- package/dist/e2e/harness/TestHelpers.js.map +1 -0
- package/dist/e2e/harness/TestRebalancer.d.ts +85 -0
- package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -0
- package/dist/e2e/harness/TestRebalancer.js +427 -0
- package/dist/e2e/harness/TestRebalancer.js.map +1 -0
- package/dist/e2e/harness/TransferHelper.d.ts +34 -0
- package/dist/e2e/harness/TransferHelper.d.ts.map +1 -0
- package/dist/e2e/harness/TransferHelper.js +93 -0
- package/dist/e2e/harness/TransferHelper.js.map +1 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +411 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.js +408 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-minAmount.e2e-test.js +411 -0
- package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-weighted.e2e-test.js +409 -0
- package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/minAmount.e2e-test.js +203 -0
- package/dist/e2e/minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
- package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/weighted.e2e-test.js +198 -0
- package/dist/e2e/weighted.e2e-test.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.d.ts +89 -0
- package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
- package/dist/factories/RebalancerContextFactory.js +420 -0
- package/dist/factories/RebalancerContextFactory.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
- package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
- package/dist/factories/RebalancerContextFactory.test.js +270 -0
- package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IExternalBridge.d.ts +103 -0
- package/dist/interfaces/IExternalBridge.d.ts.map +1 -0
- package/dist/interfaces/IExternalBridge.js +2 -0
- package/dist/interfaces/IExternalBridge.js.map +1 -0
- package/dist/interfaces/IMetrics.d.ts +5 -0
- package/dist/interfaces/IMetrics.d.ts.map +1 -0
- package/dist/interfaces/IMetrics.js +2 -0
- package/dist/interfaces/IMetrics.js.map +1 -0
- package/dist/interfaces/IMonitor.d.ts +50 -0
- package/dist/interfaces/IMonitor.d.ts.map +1 -0
- package/dist/interfaces/IMonitor.js +14 -0
- package/dist/interfaces/IMonitor.js.map +1 -0
- package/dist/interfaces/IRebalancer.d.ts +31 -0
- package/dist/interfaces/IRebalancer.d.ts.map +1 -0
- package/dist/interfaces/IRebalancer.js +2 -0
- package/dist/interfaces/IRebalancer.js.map +1 -0
- package/dist/interfaces/IStrategy.d.ts +60 -0
- package/dist/interfaces/IStrategy.d.ts.map +1 -0
- package/dist/interfaces/IStrategy.js +13 -0
- package/dist/interfaces/IStrategy.js.map +1 -0
- package/dist/metrics/Metrics.d.ts +25 -0
- package/dist/metrics/Metrics.d.ts.map +1 -0
- package/dist/metrics/Metrics.js +164 -0
- package/dist/metrics/Metrics.js.map +1 -0
- package/dist/metrics/PriceGetter.d.ts +10 -0
- package/dist/metrics/PriceGetter.d.ts.map +1 -0
- package/dist/metrics/PriceGetter.js +41 -0
- package/dist/metrics/PriceGetter.js.map +1 -0
- package/dist/metrics/scripts/metrics.d.ts +28 -0
- package/dist/metrics/scripts/metrics.d.ts.map +1 -0
- package/dist/metrics/scripts/metrics.js +61 -0
- package/dist/metrics/scripts/metrics.js.map +1 -0
- package/dist/monitor/Monitor.d.ts +40 -0
- package/dist/monitor/Monitor.d.ts.map +1 -0
- package/dist/monitor/Monitor.js +211 -0
- package/dist/monitor/Monitor.js.map +1 -0
- package/dist/service.d.ts +3 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +205 -0
- package/dist/service.js.map +1 -0
- package/dist/strategy/BaseStrategy.d.ts +86 -0
- package/dist/strategy/BaseStrategy.d.ts.map +1 -0
- package/dist/strategy/BaseStrategy.js +342 -0
- package/dist/strategy/BaseStrategy.js.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
- package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.js +253 -0
- package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js +497 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
- package/dist/strategy/CompositeStrategy.d.ts +18 -0
- package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.js +63 -0
- package/dist/strategy/CompositeStrategy.js.map +1 -0
- package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
- package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.test.js +278 -0
- package/dist/strategy/CompositeStrategy.test.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.d.ts +35 -0
- package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.js +112 -0
- package/dist/strategy/MinAmountStrategy.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.js +547 -0
- package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
- package/dist/strategy/StrategyFactory.d.ts +27 -0
- package/dist/strategy/StrategyFactory.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.js +79 -0
- package/dist/strategy/StrategyFactory.js.map +1 -0
- package/dist/strategy/StrategyFactory.test.d.ts +2 -0
- package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.test.js +81 -0
- package/dist/strategy/StrategyFactory.test.js.map +1 -0
- package/dist/strategy/WeightedStrategy.d.ts +32 -0
- package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.js +73 -0
- package/dist/strategy/WeightedStrategy.js.map +1 -0
- package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
- package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.test.js +403 -0
- package/dist/strategy/WeightedStrategy.test.js.map +1 -0
- package/dist/strategy/index.d.ts +7 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +7 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/test/helpers.d.ts +99 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/helpers.js +311 -0
- package/dist/test/helpers.js.map +1 -0
- package/dist/test/lifiMocks.d.ts +52 -0
- package/dist/test/lifiMocks.d.ts.map +1 -0
- package/dist/test/lifiMocks.js +160 -0
- package/dist/test/lifiMocks.js.map +1 -0
- package/dist/tracking/ActionTracker.d.ts +90 -0
- package/dist/tracking/ActionTracker.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.js +678 -0
- package/dist/tracking/ActionTracker.js.map +1 -0
- package/dist/tracking/ActionTracker.test.d.ts +2 -0
- package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.test.js +1351 -0
- package/dist/tracking/ActionTracker.test.js.map +1 -0
- package/dist/tracking/IActionTracker.d.ts +157 -0
- package/dist/tracking/IActionTracker.d.ts.map +1 -0
- package/dist/tracking/IActionTracker.js +2 -0
- package/dist/tracking/IActionTracker.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.d.ts +18 -0
- package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.js +52 -0
- package/dist/tracking/InflightContextAdapter.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.js +175 -0
- package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
- package/dist/tracking/store/IStore.d.ts +41 -0
- package/dist/tracking/store/IStore.d.ts.map +1 -0
- package/dist/tracking/store/IStore.js +2 -0
- package/dist/tracking/store/IStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.d.ts +21 -0
- package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.js +40 -0
- package/dist/tracking/store/InMemoryStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.js +290 -0
- package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
- package/dist/tracking/store/index.d.ts +3 -0
- package/dist/tracking/store/index.d.ts.map +1 -0
- package/dist/tracking/store/index.js +2 -0
- package/dist/tracking/store/index.js.map +1 -0
- package/dist/tracking/types.d.ts +77 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/utils/ExplorerClient.d.ts +68 -0
- package/dist/utils/ExplorerClient.d.ts.map +1 -0
- package/dist/utils/ExplorerClient.js +324 -0
- package/dist/utils/ExplorerClient.js.map +1 -0
- package/dist/utils/ExplorerClient.test.d.ts +2 -0
- package/dist/utils/ExplorerClient.test.d.ts.map +1 -0
- package/dist/utils/ExplorerClient.test.js +261 -0
- package/dist/utils/ExplorerClient.test.js.map +1 -0
- package/dist/utils/balanceUtils.d.ts +12 -0
- package/dist/utils/balanceUtils.d.ts.map +1 -0
- package/dist/utils/balanceUtils.js +40 -0
- package/dist/utils/balanceUtils.js.map +1 -0
- package/dist/utils/balanceUtils.test.d.ts +2 -0
- package/dist/utils/balanceUtils.test.d.ts.map +1 -0
- package/dist/utils/balanceUtils.test.js +55 -0
- package/dist/utils/balanceUtils.test.js.map +1 -0
- package/dist/utils/blockTag.d.ts +14 -0
- package/dist/utils/blockTag.d.ts.map +1 -0
- package/dist/utils/blockTag.js +46 -0
- package/dist/utils/blockTag.js.map +1 -0
- package/dist/utils/bridgeUtils.d.ts +40 -0
- package/dist/utils/bridgeUtils.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.js +54 -0
- package/dist/utils/bridgeUtils.js.map +1 -0
- package/dist/utils/bridgeUtils.test.d.ts +2 -0
- package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.test.js +163 -0
- package/dist/utils/bridgeUtils.test.js.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +6 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gasEstimation.d.ts +65 -0
- package/dist/utils/gasEstimation.d.ts.map +1 -0
- package/dist/utils/gasEstimation.js +206 -0
- package/dist/utils/gasEstimation.js.map +1 -0
- package/dist/utils/solanaKeyParser.d.ts +10 -0
- package/dist/utils/solanaKeyParser.d.ts.map +1 -0
- package/dist/utils/solanaKeyParser.js +87 -0
- package/dist/utils/solanaKeyParser.js.map +1 -0
- package/dist/utils/solanaKeyParser.test.d.ts +2 -0
- package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
- package/dist/utils/solanaKeyParser.test.js +71 -0
- package/dist/utils/solanaKeyParser.test.js.map +1 -0
- package/dist/utils/tokenUtils.d.ts +38 -0
- package/dist/utils/tokenUtils.d.ts.map +1 -0
- package/dist/utils/tokenUtils.js +65 -0
- package/dist/utils/tokenUtils.js.map +1 -0
- package/dist/utils/transactionUtils.d.ts +22 -0
- package/dist/utils/transactionUtils.d.ts.map +1 -0
- package/dist/utils/transactionUtils.js +26 -0
- package/dist/utils/transactionUtils.js.map +1 -0
- package/package.json +87 -3
- package/src/bridges/LiFiBridge.test.ts +615 -0
- package/src/bridges/LiFiBridge.ts +731 -0
- package/src/config/RebalancerConfig.test.ts +921 -0
- package/src/config/RebalancerConfig.ts +63 -0
- package/src/config/types.ts +613 -0
- package/src/core/InventoryRebalancer.test.ts +1858 -0
- package/src/core/InventoryRebalancer.ts +1455 -0
- package/src/core/Rebalancer.test.ts +686 -0
- package/src/core/Rebalancer.ts +686 -0
- package/src/core/RebalancerOrchestrator.test.ts +871 -0
- package/src/core/RebalancerOrchestrator.ts +273 -0
- package/src/core/RebalancerService.test.ts +1094 -0
- package/src/core/RebalancerService.ts +412 -0
- package/src/e2e/E2E_TEST_CONVENTIONS.md +222 -0
- package/src/e2e/collateral-deficit.e2e-test.ts +403 -0
- package/src/e2e/composite.e2e-test.ts +1008 -0
- package/src/e2e/fixtures/routes.ts +532 -0
- package/src/e2e/harness/BaseLocalDeploymentManager.ts +246 -0
- package/src/e2e/harness/BridgeSetup.ts +95 -0
- package/src/e2e/harness/Erc20InventoryLocalDeploymentManager.ts +183 -0
- package/src/e2e/harness/Erc20LocalDeploymentManager.ts +190 -0
- package/src/e2e/harness/ForkIndexer.test.ts +448 -0
- package/src/e2e/harness/ForkIndexer.ts +183 -0
- package/src/e2e/harness/MixedLocalDeploymentManager.ts +196 -0
- package/src/e2e/harness/MockExplorerClient.ts +94 -0
- package/src/e2e/harness/MockExternalBridge.ts +411 -0
- package/src/e2e/harness/NativeLocalDeploymentManager.ts +138 -0
- package/src/e2e/harness/SnapshotHelper.ts +56 -0
- package/src/e2e/harness/TestHelpers.ts +169 -0
- package/src/e2e/harness/TestRebalancer.ts +758 -0
- package/src/e2e/harness/TransferHelper.ts +188 -0
- package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +735 -0
- package/src/e2e/inventory-erc20-weighted.e2e-test.ts +733 -0
- package/src/e2e/inventory-minAmount.e2e-test.ts +734 -0
- package/src/e2e/inventory-weighted.e2e-test.ts +734 -0
- package/src/e2e/minAmount.e2e-test.ts +313 -0
- package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
- package/src/e2e/weighted.e2e-test.ts +304 -0
- package/src/factories/RebalancerContextFactory.test.ts +394 -0
- package/src/factories/RebalancerContextFactory.ts +771 -0
- package/src/index.ts +125 -0
- package/src/interfaces/IExternalBridge.ts +117 -0
- package/src/interfaces/IMetrics.ts +5 -0
- package/src/interfaces/IMonitor.ts +71 -0
- package/src/interfaces/IRebalancer.ts +57 -0
- package/src/interfaces/IStrategy.ts +81 -0
- package/src/metrics/Metrics.ts +335 -0
- package/src/metrics/PriceGetter.ts +74 -0
- package/src/metrics/scripts/metrics.ts +139 -0
- package/src/monitor/Monitor.ts +324 -0
- package/src/service.ts +285 -0
- package/src/strategy/BaseStrategy.ts +553 -0
- package/src/strategy/CollateralDeficitStrategy.test.ts +728 -0
- package/src/strategy/CollateralDeficitStrategy.ts +421 -0
- package/src/strategy/CompositeStrategy.test.ts +418 -0
- package/src/strategy/CompositeStrategy.ts +102 -0
- package/src/strategy/MinAmountStrategy.test.ts +732 -0
- package/src/strategy/MinAmountStrategy.ts +200 -0
- package/src/strategy/StrategyFactory.test.ts +108 -0
- package/src/strategy/StrategyFactory.ts +157 -0
- package/src/strategy/WeightedStrategy.test.ts +529 -0
- package/src/strategy/WeightedStrategy.ts +126 -0
- package/src/strategy/index.ts +6 -0
- package/src/test/helpers.ts +477 -0
- package/src/test/lifiMocks.ts +211 -0
- package/src/tracking/ActionTracker.test.ts +1625 -0
- package/src/tracking/ActionTracker.ts +1019 -0
- package/src/tracking/IActionTracker.ts +213 -0
- package/src/tracking/InflightContextAdapter.test.ts +206 -0
- package/src/tracking/InflightContextAdapter.ts +75 -0
- package/src/tracking/store/IStore.ts +48 -0
- package/src/tracking/store/InMemoryStore.test.ts +338 -0
- package/src/tracking/store/InMemoryStore.ts +59 -0
- package/src/tracking/store/index.ts +2 -0
- package/src/tracking/types.ts +118 -0
- package/src/utils/ExplorerClient.test.ts +386 -0
- package/src/utils/ExplorerClient.ts +439 -0
- package/src/utils/balanceUtils.test.ts +79 -0
- package/src/utils/balanceUtils.ts +65 -0
- package/src/utils/blockTag.ts +68 -0
- package/src/utils/bridgeUtils.test.ts +193 -0
- package/src/utils/bridgeUtils.ts +101 -0
- package/src/utils/errors.ts +5 -0
- package/src/utils/gasEstimation.ts +306 -0
- package/src/utils/solanaKeyParser.test.ts +103 -0
- package/src/utils/solanaKeyParser.ts +117 -0
- package/src/utils/tokenUtils.ts +89 -0
- package/src/utils/transactionUtils.ts +41 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type ChainMap, type ChainName } from '@humanode-hyperlane/sdk';
|
|
2
|
+
import type { Address } from '@humanode-hyperlane/utils';
|
|
3
|
+
import { ExternalBridgeType } from '../config/types.js';
|
|
4
|
+
import { ExecutionMethod } from '../tracking/types.js';
|
|
5
|
+
export type RawBalances = ChainMap<bigint>;
|
|
6
|
+
export interface Route {
|
|
7
|
+
origin: ChainName;
|
|
8
|
+
destination: ChainName;
|
|
9
|
+
amount: bigint;
|
|
10
|
+
/** Execution method used for this rebalance */
|
|
11
|
+
executionMethod?: ExecutionMethod;
|
|
12
|
+
}
|
|
13
|
+
export interface RouteWithContext extends Route {
|
|
14
|
+
/** For inventory intents: sum of complete inventory_deposit actions (message delivered) */
|
|
15
|
+
deliveredAmount?: bigint;
|
|
16
|
+
/** For inventory intents: sum of in_progress inventory_deposit actions (tx confirmed, message pending) */
|
|
17
|
+
awaitingDeliveryAmount?: bigint;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Route using movable collateral execution (on-chain rebalance via bridge)
|
|
21
|
+
*/
|
|
22
|
+
export interface MovableCollateralRoute extends Route {
|
|
23
|
+
executionType: 'movableCollateral';
|
|
24
|
+
bridge: Address;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Route using inventory execution (external bridge + transferRemote)
|
|
28
|
+
*/
|
|
29
|
+
export interface InventoryRoute extends Route {
|
|
30
|
+
executionType: 'inventory';
|
|
31
|
+
externalBridge: ExternalBridgeType;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Discriminated union of route types by executionType
|
|
35
|
+
*/
|
|
36
|
+
export type StrategyRoute = MovableCollateralRoute | InventoryRoute;
|
|
37
|
+
/**
|
|
38
|
+
* Type guard to check if a route is a MovableCollateralRoute
|
|
39
|
+
*/
|
|
40
|
+
export declare function isMovableCollateralRoute(route: StrategyRoute): route is MovableCollateralRoute;
|
|
41
|
+
/**
|
|
42
|
+
* Type guard to check if a route is an InventoryRoute
|
|
43
|
+
*/
|
|
44
|
+
export declare function isInventoryRoute(route: StrategyRoute): route is InventoryRoute;
|
|
45
|
+
export type InflightContext = {
|
|
46
|
+
/**
|
|
47
|
+
* In-flight rebalances from ActionTracker.
|
|
48
|
+
* Uses Route[] because recovered intents (from Explorer startup recovery)
|
|
49
|
+
* don't have bridge information. Some routes may have bridge at runtime.
|
|
50
|
+
*/
|
|
51
|
+
pendingRebalances: RouteWithContext[];
|
|
52
|
+
pendingTransfers: RouteWithContext[];
|
|
53
|
+
/** Routes from earlier strategies - always have bridge */
|
|
54
|
+
proposedRebalances?: StrategyRoute[];
|
|
55
|
+
};
|
|
56
|
+
export interface IStrategy {
|
|
57
|
+
readonly name: string;
|
|
58
|
+
getRebalancingRoutes(rawBalances: RawBalances, inflightContext?: InflightContext): StrategyRoute[];
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=IStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IStrategy.d.ts","sourceRoot":"","sources":["../../src/interfaces/IStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE3C,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK;IAC7C,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0GAA0G;IAC1G,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,KAAK;IACnD,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,KAAK;IAC3C,aAAa,EAAE,WAAW,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,cAAc,CAAC;AAEpE;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,GACnB,KAAK,IAAI,sBAAsB,CAEjC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,GACnB,KAAK,IAAI,cAAc,CAEzB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAClB,WAAW,EAAE,WAAW,EACxB,eAAe,CAAC,EAAE,eAAe,GAChC,aAAa,EAAE,CAAC;CACpB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guard to check if a route is a MovableCollateralRoute
|
|
3
|
+
*/
|
|
4
|
+
export function isMovableCollateralRoute(route) {
|
|
5
|
+
return route.executionType === 'movableCollateral';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Type guard to check if a route is an InventoryRoute
|
|
9
|
+
*/
|
|
10
|
+
export function isInventoryRoute(route) {
|
|
11
|
+
return route.executionType === 'inventory';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=IStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IStrategy.js","sourceRoot":"","sources":["../../src/interfaces/IStrategy.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAoB;IAEpB,OAAO,KAAK,CAAC,aAAa,KAAK,mBAAmB,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoB;IAEpB,OAAO,KAAK,CAAC,aAAa,KAAK,WAAW,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Logger } from 'pino';
|
|
2
|
+
import { Token, type TokenAmount, type WarpCore, type WarpRouteDeployConfig } from '@humanode-hyperlane/sdk';
|
|
3
|
+
import { type IMetrics } from '../interfaces/IMetrics.js';
|
|
4
|
+
import { type MonitorEvent } from '../interfaces/IMonitor.js';
|
|
5
|
+
import { type StrategyRoute } from '../interfaces/IStrategy.js';
|
|
6
|
+
import { type PriceGetter } from './PriceGetter.js';
|
|
7
|
+
export declare class Metrics implements IMetrics {
|
|
8
|
+
private readonly tokenPriceGetter;
|
|
9
|
+
private readonly warpDeployConfig;
|
|
10
|
+
private readonly warpCore;
|
|
11
|
+
private readonly warpRouteId;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
private readonly priceGetter;
|
|
14
|
+
constructor(tokenPriceGetter: PriceGetter, warpDeployConfig: WarpRouteDeployConfig | null, warpCore: WarpCore, warpRouteId: string, logger: Logger);
|
|
15
|
+
recordRebalancerSuccess(): void;
|
|
16
|
+
recordRebalanceAmount(route: StrategyRoute, originTokenAmount: TokenAmount): void;
|
|
17
|
+
recordRebalancerFailure(): void;
|
|
18
|
+
recordPollingError(): void;
|
|
19
|
+
recordIntentCreated(route: StrategyRoute, strategy: string): void;
|
|
20
|
+
recordActionAttempt(route: StrategyRoute, succeeded: boolean): void;
|
|
21
|
+
processToken({ token, bridgedSupply, }: MonitorEvent['tokensInfo'][number]): Promise<void>;
|
|
22
|
+
private updateTokenMetrics;
|
|
23
|
+
static getWarpRouteCollateralTokenSymbol(tokens: Token[]): string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.d.ts","sourceRoot":"","sources":["../../src/metrics/Metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAYnC,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAGhB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAcpD,qBAAa,OAAQ,YAAW,QAAQ;IAKpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAP9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAG5B,gBAAgB,EAAE,WAAW,EAC7B,gBAAgB,EAAE,qBAAqB,GAAG,IAAI,EAC9C,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,EACpC,MAAM,EAAE,MAAM;IAahB,uBAAuB;IAMvB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW;IAW1E,uBAAuB;IAMvB,kBAAkB;IAMlB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM;IAW1D,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO;IAWtD,YAAY,CAAC,EACjB,KAAK,EACL,aAAa,GACd,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;YAWvB,kBAAkB;IA6KhC,MAAM,CAAC,iCAAiC,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;CAkClE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { getExtraLockboxBalance, getExtraLockboxInfo, getManagedLockBoxCollateralInfo, getSealevelAtaPayerBalance, getTokenBridgedBalance, getXERC20Info, startMetricsServer, } from '@humanode-hyperlane/metrics';
|
|
2
|
+
import { TokenStandard, TokenType, } from '@humanode-hyperlane/sdk';
|
|
3
|
+
import { ProtocolType, tryFn } from '@humanode-hyperlane/utils';
|
|
4
|
+
import { metricsRegister, rebalancerActionsCreatedTotal, rebalancerExecutionAmount, rebalancerExecutionTotal, rebalancerIntentsCreatedTotal, rebalancerPollingErrorsTotal, updateManagedLockboxBalanceMetrics, updateNativeWalletBalanceMetrics, updateTokenBalanceMetrics, updateXERC20LimitsMetrics, } from './scripts/metrics.js';
|
|
5
|
+
export class Metrics {
|
|
6
|
+
tokenPriceGetter;
|
|
7
|
+
warpDeployConfig;
|
|
8
|
+
warpCore;
|
|
9
|
+
warpRouteId;
|
|
10
|
+
logger;
|
|
11
|
+
priceGetter;
|
|
12
|
+
constructor(tokenPriceGetter, warpDeployConfig, warpCore, warpRouteId, logger) {
|
|
13
|
+
this.tokenPriceGetter = tokenPriceGetter;
|
|
14
|
+
this.warpDeployConfig = warpDeployConfig;
|
|
15
|
+
this.warpCore = warpCore;
|
|
16
|
+
this.warpRouteId = warpRouteId;
|
|
17
|
+
this.logger = logger.child({ class: Metrics.name });
|
|
18
|
+
startMetricsServer(metricsRegister);
|
|
19
|
+
// Wrap PriceGetter to match TokenPriceGetter interface
|
|
20
|
+
this.priceGetter = {
|
|
21
|
+
tryGetTokenPrice: async (token) => {
|
|
22
|
+
return this.tokenPriceGetter.tryGetTokenPrice(token);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
recordRebalancerSuccess() {
|
|
27
|
+
rebalancerExecutionTotal
|
|
28
|
+
.labels({ warp_route_id: this.warpRouteId, succeeded: 'true' })
|
|
29
|
+
.inc();
|
|
30
|
+
}
|
|
31
|
+
recordRebalanceAmount(route, originTokenAmount) {
|
|
32
|
+
rebalancerExecutionAmount
|
|
33
|
+
.labels({
|
|
34
|
+
warp_route_id: this.warpRouteId,
|
|
35
|
+
origin: route.origin,
|
|
36
|
+
destination: route.destination,
|
|
37
|
+
token: originTokenAmount.token.symbol,
|
|
38
|
+
})
|
|
39
|
+
.inc(originTokenAmount.getDecimalFormattedAmount());
|
|
40
|
+
}
|
|
41
|
+
recordRebalancerFailure() {
|
|
42
|
+
rebalancerExecutionTotal
|
|
43
|
+
.labels({ warp_route_id: this.warpRouteId, succeeded: 'false' })
|
|
44
|
+
.inc();
|
|
45
|
+
}
|
|
46
|
+
recordPollingError() {
|
|
47
|
+
rebalancerPollingErrorsTotal
|
|
48
|
+
.labels({ warp_route_id: this.warpRouteId })
|
|
49
|
+
.inc();
|
|
50
|
+
}
|
|
51
|
+
recordIntentCreated(route, strategy) {
|
|
52
|
+
rebalancerIntentsCreatedTotal
|
|
53
|
+
.labels({
|
|
54
|
+
warp_route_id: this.warpRouteId,
|
|
55
|
+
strategy,
|
|
56
|
+
origin: route.origin,
|
|
57
|
+
destination: route.destination,
|
|
58
|
+
})
|
|
59
|
+
.inc();
|
|
60
|
+
}
|
|
61
|
+
recordActionAttempt(route, succeeded) {
|
|
62
|
+
rebalancerActionsCreatedTotal
|
|
63
|
+
.labels({
|
|
64
|
+
warp_route_id: this.warpRouteId,
|
|
65
|
+
origin: route.origin,
|
|
66
|
+
destination: route.destination,
|
|
67
|
+
succeeded: String(succeeded),
|
|
68
|
+
})
|
|
69
|
+
.inc();
|
|
70
|
+
}
|
|
71
|
+
async processToken({ token, bridgedSupply, }) {
|
|
72
|
+
await tryFn(async () => {
|
|
73
|
+
await this.updateTokenMetrics(token, bridgedSupply);
|
|
74
|
+
}, 'Updating warp route metrics', this.logger);
|
|
75
|
+
}
|
|
76
|
+
// Updates the metrics for a single token in a warp route.
|
|
77
|
+
async updateTokenMetrics(token, bridgedSupply) {
|
|
78
|
+
const promises = [
|
|
79
|
+
tryFn(async () => {
|
|
80
|
+
const balanceInfo = await getTokenBridgedBalance(this.warpCore, token, this.priceGetter, this.logger, bridgedSupply);
|
|
81
|
+
if (!balanceInfo) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
updateTokenBalanceMetrics(this.warpCore, token, balanceInfo, this.warpRouteId, this.logger);
|
|
85
|
+
}, 'Getting bridged balance and value', this.logger),
|
|
86
|
+
];
|
|
87
|
+
// For Sealevel collateral and synthetic tokens, there is an
|
|
88
|
+
// "Associated Token Account" (ATA) rent payer that has a balance
|
|
89
|
+
// that's used to pay for rent for the accounts that store user balances.
|
|
90
|
+
// This is necessary if the recipient has never received any tokens before.
|
|
91
|
+
if (token.protocol === ProtocolType.Sealevel && !token.isNative()) {
|
|
92
|
+
promises.push(tryFn(async () => {
|
|
93
|
+
const balance = await getSealevelAtaPayerBalance(this.warpCore, token, this.warpRouteId);
|
|
94
|
+
updateNativeWalletBalanceMetrics(balance, this.logger);
|
|
95
|
+
}, 'Getting ATA payer balance', this.logger));
|
|
96
|
+
}
|
|
97
|
+
if (token.isXerc20()) {
|
|
98
|
+
promises.push(tryFn(async () => {
|
|
99
|
+
const { limits, xERC20Address } = await getXERC20Info(this.warpCore, token);
|
|
100
|
+
const routerAddress = token.addressOrDenom;
|
|
101
|
+
updateXERC20LimitsMetrics(token, limits, routerAddress, token.standard, xERC20Address, this.logger);
|
|
102
|
+
}, 'Getting xERC20 limits', this.logger));
|
|
103
|
+
if (!this.warpDeployConfig) {
|
|
104
|
+
this.logger.warn({
|
|
105
|
+
tokenSymbol: token.symbol,
|
|
106
|
+
chain: token.chainName,
|
|
107
|
+
}, "Can't read warp deploy config, skipping extra lockboxes");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// If the current token is an xERC20, we need to check if there are any extra lockboxes
|
|
111
|
+
const currentTokenDeployConfig = this.warpDeployConfig[token.chainName];
|
|
112
|
+
if (currentTokenDeployConfig.type !== TokenType.XERC20 &&
|
|
113
|
+
currentTokenDeployConfig.type !== TokenType.XERC20Lockbox) {
|
|
114
|
+
this.logger.error({
|
|
115
|
+
tokenSymbol: token.symbol,
|
|
116
|
+
chain: token.chainName,
|
|
117
|
+
expectedType: [TokenType.XERC20, TokenType.XERC20Lockbox],
|
|
118
|
+
actualType: currentTokenDeployConfig.type,
|
|
119
|
+
}, 'Token type mismatch in deploy config for xERC20 token');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const extraLockboxes = currentTokenDeployConfig.xERC20?.extraBridges ?? [];
|
|
123
|
+
for (const lockbox of extraLockboxes) {
|
|
124
|
+
promises.push(tryFn(async () => {
|
|
125
|
+
const { limits, xERC20Address } = await getExtraLockboxInfo(this.warpCore.multiProvider, token, lockbox.lockbox);
|
|
126
|
+
updateXERC20LimitsMetrics(token, limits, lockbox.lockbox, 'EvmManagedLockbox', xERC20Address, this.logger);
|
|
127
|
+
}, 'Getting extra lockbox limits', this.logger), tryFn(async () => {
|
|
128
|
+
const balance = await getExtraLockboxBalance(this.warpCore.multiProvider, token, this.priceGetter, lockbox.lockbox, this.logger);
|
|
129
|
+
if (balance) {
|
|
130
|
+
const { tokenName, tokenAddress } = await getManagedLockBoxCollateralInfo(this.warpCore.multiProvider, token, lockbox.lockbox);
|
|
131
|
+
updateManagedLockboxBalanceMetrics(this.warpCore, token.chainName, tokenName, tokenAddress, lockbox.lockbox, balance, this.warpRouteId, this.logger);
|
|
132
|
+
}
|
|
133
|
+
}, `Updating extra lockbox balance for contract at "${lockbox.lockbox}" on chain ${token.chainName}`, this.logger));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
await Promise.all(promises);
|
|
137
|
+
}
|
|
138
|
+
static getWarpRouteCollateralTokenSymbol(tokens) {
|
|
139
|
+
// We need to have a deterministic way to determine the symbol of the warp route
|
|
140
|
+
// as its used to identify the warp route in metrics. This method should support routes where:
|
|
141
|
+
// - All tokens have the same symbol, token standards can be all collateral, all synthetic or a mix
|
|
142
|
+
// - All tokens have different symbol, but there is a collateral token to break the tie, where there are multiple collateral tokens, alphabetically first is chosen
|
|
143
|
+
// - All tokens have different symbol, but there is no collateral token to break the tie, pick the alphabetically first symbol
|
|
144
|
+
// Get all unique symbols from the tokens array
|
|
145
|
+
const uniqueSymbols = new Set(tokens.map((token) => token.symbol));
|
|
146
|
+
// If all tokens have the same symbol, return that symbol
|
|
147
|
+
if (uniqueSymbols.size === 1) {
|
|
148
|
+
return tokens[0].symbol;
|
|
149
|
+
}
|
|
150
|
+
// Find all collateralized tokens
|
|
151
|
+
const collateralTokens = tokens.filter((token) => token.isCollateralized() ||
|
|
152
|
+
token.standard === TokenStandard.EvmHypXERC20Lockbox);
|
|
153
|
+
if (collateralTokens.length === 0) {
|
|
154
|
+
// If there are no collateralized tokens, return the alphabetically first symbol
|
|
155
|
+
return [...uniqueSymbols].sort()[0];
|
|
156
|
+
}
|
|
157
|
+
// if there is a single unique collateral symbol return it or
|
|
158
|
+
// if there are multiple, return the alphabetically first symbol
|
|
159
|
+
const collateralSymbols = collateralTokens.map((token) => token.symbol);
|
|
160
|
+
const uniqueCollateralSymbols = [...new Set(collateralSymbols)];
|
|
161
|
+
return uniqueCollateralSymbols.sort()[0];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=Metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../../src/metrics/Metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Logger } from 'pino';
|
|
2
|
+
import { type ChainMap, type ChainMetadata, CoinGeckoTokenPriceGetter, type Token } from '@humanode-hyperlane/sdk';
|
|
3
|
+
export declare class PriceGetter extends CoinGeckoTokenPriceGetter {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private constructor();
|
|
6
|
+
static create(chainMetadata: ChainMap<ChainMetadata>, logger: Logger, coingeckoApiKey?: string, expirySeconds?: number, sleepMsBetweenRequests?: number): PriceGetter;
|
|
7
|
+
tryGetTokenPrice(token: Token): Promise<number | undefined>;
|
|
8
|
+
getCoingeckoPrice(coingeckoId: string): Promise<number | undefined>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=PriceGetter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceGetter.d.ts","sourceRoot":"","sources":["../../src/metrics/PriceGetter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,yBAAyB,EACzB,KAAK,KAAK,EACX,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,WAAY,SAAQ,yBAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO;WAiBO,MAAM,CAClB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,EACtB,sBAAsB,CAAC,EAAE,MAAM;IAa3B,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqB3D,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAK1E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CoinGeckoTokenPriceGetter, } from '@humanode-hyperlane/sdk';
|
|
2
|
+
export class PriceGetter extends CoinGeckoTokenPriceGetter {
|
|
3
|
+
logger;
|
|
4
|
+
constructor({ chainMetadata, logger, apiKey, expirySeconds, sleepMsBetweenRequests, }) {
|
|
5
|
+
super({ chainMetadata, apiKey, expirySeconds, sleepMsBetweenRequests });
|
|
6
|
+
this.logger = logger;
|
|
7
|
+
}
|
|
8
|
+
static create(chainMetadata, logger, coingeckoApiKey, expirySeconds, sleepMsBetweenRequests) {
|
|
9
|
+
return new PriceGetter({
|
|
10
|
+
chainMetadata,
|
|
11
|
+
logger,
|
|
12
|
+
apiKey: coingeckoApiKey,
|
|
13
|
+
expirySeconds,
|
|
14
|
+
sleepMsBetweenRequests,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// Tries to get the price of a token from CoinGecko. Returns undefined if there's no
|
|
18
|
+
// CoinGecko ID for the token.
|
|
19
|
+
async tryGetTokenPrice(token) {
|
|
20
|
+
// We only get a price if the token defines a CoinGecko ID.
|
|
21
|
+
// This way we can ignore values of certain types of collateralized warp routes,
|
|
22
|
+
// e.g. Native warp routes on rollups that have been pre-funded.
|
|
23
|
+
const coinGeckoId = token.coinGeckoId;
|
|
24
|
+
if (!coinGeckoId) {
|
|
25
|
+
this.logger.debug({
|
|
26
|
+
tokenSymbol: token.symbol,
|
|
27
|
+
chain: token.chainName,
|
|
28
|
+
tokenAddress: token.addressOrDenom,
|
|
29
|
+
}, 'CoinGecko ID missing for token');
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return this.getCoingeckoPrice(coinGeckoId);
|
|
33
|
+
}
|
|
34
|
+
async getCoingeckoPrice(coingeckoId) {
|
|
35
|
+
const prices = await this.getTokenPriceByIds([coingeckoId]);
|
|
36
|
+
if (!prices)
|
|
37
|
+
return undefined;
|
|
38
|
+
return prices[0];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=PriceGetter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriceGetter.js","sourceRoot":"","sources":["../../src/metrics/PriceGetter.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,OAAO,WAAY,SAAQ,yBAAyB;IACvC,MAAM,CAAS;IAEhC,YAAoB,EAClB,aAAa,EACb,MAAM,EACN,MAAM,EACN,aAAa,EACb,sBAAsB,GAOvB;QACC,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,MAAM,CAClB,aAAsC,EACtC,MAAc,EACd,eAAwB,EACxB,aAAsB,EACtB,sBAA+B;QAE/B,OAAO,IAAI,WAAW,CAAC;YACrB,aAAa;YACb,MAAM;YACN,MAAM,EAAE,eAAe;YACvB,aAAa;YACb,sBAAsB;SACvB,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,8BAA8B;IAC9B,KAAK,CAAC,gBAAgB,CAAC,KAAY;QACjC,2DAA2D;QAC3D,gFAAgF;QAChF,gEAAgE;QAChE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;gBACE,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,YAAY,EAAE,KAAK,CAAC,cAAc;aACnC,EACD,gCAAgC,CACjC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Logger } from 'pino';
|
|
2
|
+
import { Counter, Registry } from 'prom-client';
|
|
3
|
+
import { type NativeWalletBalance, type WarpRouteBalance, type XERC20Limit } from '@humanode-hyperlane/metrics';
|
|
4
|
+
import { type ChainName, type Token, type WarpCore } from '@humanode-hyperlane/sdk';
|
|
5
|
+
import { type Address } from '@humanode-hyperlane/utils';
|
|
6
|
+
export declare const metricsRegister: Registry;
|
|
7
|
+
export declare const rebalancerExecutionTotal: Counter<"warp_route_id" | "succeeded">;
|
|
8
|
+
export declare const rebalancerExecutionAmount: Counter<"destination" | "origin" | "warp_route_id" | "token">;
|
|
9
|
+
export declare const rebalancerPollingErrorsTotal: Counter<"warp_route_id">;
|
|
10
|
+
export declare const rebalancerIntentsCreatedTotal: Counter<"strategy" | "destination" | "origin" | "warp_route_id">;
|
|
11
|
+
export declare const rebalancerActionsCreatedTotal: Counter<"destination" | "origin" | "warp_route_id" | "succeeded">;
|
|
12
|
+
/**
|
|
13
|
+
* Updates token balance metrics for a warp route token.
|
|
14
|
+
*/
|
|
15
|
+
export declare function updateTokenBalanceMetrics(warpCore: WarpCore, token: Token, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
|
|
16
|
+
/**
|
|
17
|
+
* Updates managed lockbox balance metrics.
|
|
18
|
+
*/
|
|
19
|
+
export declare function updateManagedLockboxBalanceMetrics(warpCore: WarpCore, chainName: ChainName, tokenName: string, tokenAddress: string, lockBoxAddress: string, balanceInfo: WarpRouteBalance, warpRouteId: string, logger: Logger): void;
|
|
20
|
+
/**
|
|
21
|
+
* Updates native wallet balance metrics.
|
|
22
|
+
*/
|
|
23
|
+
export declare function updateNativeWalletBalanceMetrics(balance: NativeWalletBalance, logger: Logger): void;
|
|
24
|
+
/**
|
|
25
|
+
* Updates xERC20 limits metrics.
|
|
26
|
+
*/
|
|
27
|
+
export declare function updateXERC20LimitsMetrics(token: Token, limits: XERC20Limit, bridgeAddress: Address, bridgeLabel: string, xERC20Address: Address, logger: Logger): void;
|
|
28
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/metrics/scripts/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAMjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,eAAO,MAAM,eAAe,UAAiB,CAAC;AAM9C,eAAO,MAAM,wBAAwB,wCAKnC,CAAC;AAEH,eAAO,MAAM,yBAAyB,+DAKpC,CAAC;AAEH,eAAO,MAAM,4BAA4B,0BAKvC,CAAC;AAEH,eAAO,MAAM,6BAA6B,kEAKxC,CAAC;AAEH,eAAO,MAAM,6BAA6B,mEAKxC,CAAC;AAEH;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAUN"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Counter, Registry } from 'prom-client';
|
|
2
|
+
import { createWarpMetricsGauges, updateManagedLockboxBalanceMetrics as sharedUpdateManagedLockboxBalanceMetrics, updateNativeWalletBalanceMetrics as sharedUpdateNativeWalletBalanceMetrics, updateTokenBalanceMetrics as sharedUpdateTokenBalanceMetrics, updateXERC20LimitsMetrics as sharedUpdateXERC20LimitsMetrics, } from '@humanode-hyperlane/metrics';
|
|
3
|
+
export const metricsRegister = new Registry();
|
|
4
|
+
// Create shared warp metrics gauges
|
|
5
|
+
const gauges = createWarpMetricsGauges(metricsRegister);
|
|
6
|
+
// Rebalancer-specific metrics
|
|
7
|
+
export const rebalancerExecutionTotal = new Counter({
|
|
8
|
+
name: 'hyperlane_rebalancer_executions_total',
|
|
9
|
+
help: 'Total number of rebalance execution attempts.',
|
|
10
|
+
registers: [metricsRegister],
|
|
11
|
+
labelNames: ['warp_route_id', 'succeeded'],
|
|
12
|
+
});
|
|
13
|
+
export const rebalancerExecutionAmount = new Counter({
|
|
14
|
+
name: 'hyperlane_rebalancer_execution_amount',
|
|
15
|
+
help: 'Total amount of tokens rebalanced.',
|
|
16
|
+
registers: [metricsRegister],
|
|
17
|
+
labelNames: ['warp_route_id', 'origin', 'destination', 'token'],
|
|
18
|
+
});
|
|
19
|
+
export const rebalancerPollingErrorsTotal = new Counter({
|
|
20
|
+
name: 'hyperlane_rebalancer_polling_errors_total',
|
|
21
|
+
help: 'Total number of errors during the monitor polling phase.',
|
|
22
|
+
registers: [metricsRegister],
|
|
23
|
+
labelNames: ['warp_route_id'],
|
|
24
|
+
});
|
|
25
|
+
export const rebalancerIntentsCreatedTotal = new Counter({
|
|
26
|
+
name: 'hyperlane_rebalancer_intents_created_total',
|
|
27
|
+
help: 'Total number of rebalancing intents (routes) created.',
|
|
28
|
+
registers: [metricsRegister],
|
|
29
|
+
labelNames: ['warp_route_id', 'strategy', 'origin', 'destination'],
|
|
30
|
+
});
|
|
31
|
+
export const rebalancerActionsCreatedTotal = new Counter({
|
|
32
|
+
name: 'hyperlane_rebalancer_actions_created_total',
|
|
33
|
+
help: 'Total number of rebalancing actions (transactions) attempted.',
|
|
34
|
+
registers: [metricsRegister],
|
|
35
|
+
labelNames: ['warp_route_id', 'origin', 'destination', 'succeeded'],
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Updates token balance metrics for a warp route token.
|
|
39
|
+
*/
|
|
40
|
+
export function updateTokenBalanceMetrics(warpCore, token, balanceInfo, warpRouteId, logger) {
|
|
41
|
+
sharedUpdateTokenBalanceMetrics(gauges, warpCore, token, balanceInfo, warpRouteId, logger);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Updates managed lockbox balance metrics.
|
|
45
|
+
*/
|
|
46
|
+
export function updateManagedLockboxBalanceMetrics(warpCore, chainName, tokenName, tokenAddress, lockBoxAddress, balanceInfo, warpRouteId, logger) {
|
|
47
|
+
sharedUpdateManagedLockboxBalanceMetrics(gauges, warpCore, chainName, tokenName, tokenAddress, lockBoxAddress, balanceInfo, warpRouteId, logger);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Updates native wallet balance metrics.
|
|
51
|
+
*/
|
|
52
|
+
export function updateNativeWalletBalanceMetrics(balance, logger) {
|
|
53
|
+
sharedUpdateNativeWalletBalanceMetrics(gauges, balance, logger);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Updates xERC20 limits metrics.
|
|
57
|
+
*/
|
|
58
|
+
export function updateXERC20LimitsMetrics(token, limits, bridgeAddress, bridgeLabel, xERC20Address, logger) {
|
|
59
|
+
sharedUpdateXERC20LimitsMetrics(gauges, token, limits, bridgeAddress, bridgeLabel, xERC20Address, logger);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/metrics/scripts/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type Logger } from 'pino';
|
|
2
|
+
import { type ChainName, type WarpCore } from '@humanode-hyperlane/sdk';
|
|
3
|
+
import { Address, ProtocolType } from '@humanode-hyperlane/utils';
|
|
4
|
+
import { type IMonitor, type MonitorEvent, MonitorEventType } from '../interfaces/IMonitor.js';
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for the Monitor's inventory tracking.
|
|
7
|
+
*/
|
|
8
|
+
export interface InventoryMonitorConfig {
|
|
9
|
+
inventoryAddresses: Partial<Record<ProtocolType, Address>>;
|
|
10
|
+
chains: ChainName[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Simple monitor implementation that polls warp route collateral balances and emits them as MonitorEvent.
|
|
14
|
+
* Awaits the TokenInfo handler before starting the next cycle to prevent race conditions.
|
|
15
|
+
*/
|
|
16
|
+
export declare class Monitor implements IMonitor {
|
|
17
|
+
private readonly checkFrequency;
|
|
18
|
+
private readonly warpCore;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
private readonly inventoryConfig?;
|
|
21
|
+
private tokenInfoHandler?;
|
|
22
|
+
private errorHandler?;
|
|
23
|
+
private startHandler?;
|
|
24
|
+
private isMonitorRunning;
|
|
25
|
+
private resolveStop;
|
|
26
|
+
private stopPromise;
|
|
27
|
+
/**
|
|
28
|
+
* @param checkFrequency - The frequency to poll balances in ms.
|
|
29
|
+
*/
|
|
30
|
+
constructor(checkFrequency: number, warpCore: WarpCore, logger: Logger, inventoryConfig?: InventoryMonitorConfig | undefined);
|
|
31
|
+
private computeConfirmedBlockTags;
|
|
32
|
+
on(eventName: MonitorEventType.TokenInfo, fn: (event: MonitorEvent) => void | Promise<void>): this;
|
|
33
|
+
on(eventName: MonitorEventType.Error, fn: (event: Error) => void): this;
|
|
34
|
+
on(eventName: MonitorEventType.Start, fn: () => void): this;
|
|
35
|
+
start(): Promise<void>;
|
|
36
|
+
private getTokenBridgedSupply;
|
|
37
|
+
private fetchInventoryBalances;
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Monitor.d.ts","sourceRoot":"","sources":["../../src/monitor/Monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAS,MAAM,2BAA2B,CAAC;AAEzE,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AAGnC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,OAAQ,YAAW,QAAQ;IAYpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAdnC,OAAO,CAAC,gBAAgB,CAAC,CAAgD;IACzE,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,WAAW,CAA8B;IAEjD;;OAEG;gBAEgB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,sBAAsB,YAAA;YAG7C,yBAAyB;IAgBvC,EAAE,CACA,SAAS,EAAE,gBAAgB,CAAC,SAAS,EACrC,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAChD,IAAI;IACP,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IACvE,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAkBrD,KAAK;YA+GG,qBAAqB;YAmDrB,sBAAsB;IAsDpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBtB"}
|