@humanode-hyperlane/rebalancer 27.2.2 → 1029.1.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.
- package/dist/bridges/LiFiBridge.d.ts +3 -3
- package/dist/bridges/LiFiBridge.d.ts.map +1 -1
- package/dist/bridges/LiFiBridge.js +66 -55
- package/dist/bridges/LiFiBridge.js.map +1 -1
- package/dist/bridges/LiFiBridge.test.js +213 -0
- package/dist/bridges/LiFiBridge.test.js.map +1 -1
- package/dist/config/RebalancerConfig.d.ts +4 -3
- package/dist/config/RebalancerConfig.d.ts.map +1 -1
- package/dist/config/RebalancerConfig.js +7 -5
- package/dist/config/RebalancerConfig.js.map +1 -1
- package/dist/config/RebalancerConfig.test.js +278 -2
- package/dist/config/RebalancerConfig.test.js.map +1 -1
- package/dist/config/types.d.ts +707 -2664
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +62 -7
- package/dist/config/types.js.map +1 -1
- package/dist/core/InventoryRebalancer.d.ts +13 -19
- package/dist/core/InventoryRebalancer.d.ts.map +1 -1
- package/dist/core/InventoryRebalancer.js +404 -276
- package/dist/core/InventoryRebalancer.js.map +1 -1
- package/dist/core/InventoryRebalancer.test.js +814 -25
- package/dist/core/InventoryRebalancer.test.js.map +1 -1
- package/dist/core/Rebalancer.d.ts.map +1 -1
- package/dist/core/Rebalancer.js +12 -6
- package/dist/core/Rebalancer.js.map +1 -1
- package/dist/core/Rebalancer.test.js +51 -0
- package/dist/core/Rebalancer.test.js.map +1 -1
- package/dist/core/RebalancerOrchestrator.d.ts.map +1 -1
- package/dist/core/RebalancerOrchestrator.test.js +0 -1
- package/dist/core/RebalancerOrchestrator.test.js.map +1 -1
- package/dist/core/RebalancerService.d.ts.map +1 -1
- package/dist/core/RebalancerService.js +3 -2
- package/dist/core/RebalancerService.js.map +1 -1
- package/dist/core/RebalancerService.test.js +24 -0
- package/dist/core/RebalancerService.test.js.map +1 -1
- package/dist/e2e/fixtures/routes.d.ts +3 -3
- package/dist/e2e/fixtures/routes.d.ts.map +1 -1
- package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -1
- package/dist/e2e/harness/BaseLocalDeploymentManager.js +3 -2
- package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -1
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -1
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -1
- package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -1
- package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -1
- package/dist/e2e/harness/ForkIndexer.js.map +1 -1
- package/dist/e2e/harness/LocalProvider.d.ts +3 -0
- package/dist/e2e/harness/LocalProvider.d.ts.map +1 -0
- package/dist/e2e/harness/LocalProvider.js +9 -0
- package/dist/e2e/harness/LocalProvider.js.map +1 -0
- package/dist/e2e/harness/LocalProvider.test.d.ts +2 -0
- package/dist/e2e/harness/LocalProvider.test.d.ts.map +1 -0
- package/dist/e2e/harness/LocalProvider.test.js +14 -0
- package/dist/e2e/harness/LocalProvider.test.js.map +1 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -1
- package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -1
- package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -1
- package/dist/e2e/harness/MockExplorerClient.js.map +1 -1
- package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -1
- package/dist/e2e/harness/MockExternalBridge.js.map +1 -1
- package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -1
- package/dist/e2e/harness/NativeLocalDeploymentManager.js +2 -1
- package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -1
- package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -1
- package/dist/e2e/harness/SnapshotHelper.js +3 -5
- package/dist/e2e/harness/SnapshotHelper.js.map +1 -1
- package/dist/e2e/harness/TestHelpers.js +1 -2
- package/dist/e2e/harness/TestHelpers.js.map +1 -1
- package/dist/e2e/harness/TestRebalancer.d.ts +5 -1
- package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -1
- package/dist/e2e/harness/TestRebalancer.js +14 -4
- package/dist/e2e/harness/TestRebalancer.js.map +1 -1
- package/dist/e2e/relayer-denylist.e2e-test.d.ts +2 -0
- package/dist/e2e/relayer-denylist.e2e-test.d.ts.map +1 -0
- package/dist/e2e/relayer-denylist.e2e-test.js +388 -0
- package/dist/e2e/relayer-denylist.e2e-test.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
- package/dist/factories/RebalancerContextFactory.js +61 -31
- package/dist/factories/RebalancerContextFactory.js.map +1 -1
- package/dist/factories/RebalancerContextFactory.test.js +336 -5
- package/dist/factories/RebalancerContextFactory.test.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IRebalancer.d.ts +4 -2
- package/dist/interfaces/IRebalancer.d.ts.map +1 -1
- package/dist/metrics/Metrics.d.ts.map +1 -1
- package/dist/metrics/Metrics.js +1 -1
- package/dist/metrics/Metrics.js.map +1 -1
- package/dist/metrics/PriceGetter.d.ts +1 -0
- package/dist/metrics/PriceGetter.d.ts.map +1 -1
- package/dist/metrics/PriceGetter.js +14 -4
- package/dist/metrics/PriceGetter.js.map +1 -1
- package/dist/metrics/PriceGetter.test.d.ts +2 -0
- package/dist/metrics/PriceGetter.test.d.ts.map +1 -0
- package/dist/metrics/PriceGetter.test.js +84 -0
- package/dist/metrics/PriceGetter.test.js.map +1 -0
- package/dist/metrics/scripts/metrics.d.ts +4 -4
- package/dist/monitor/Monitor.d.ts +1 -0
- package/dist/monitor/Monitor.d.ts.map +1 -1
- package/dist/monitor/Monitor.js +55 -46
- package/dist/monitor/Monitor.js.map +1 -1
- package/dist/monitor/Monitor.test.d.ts +2 -0
- package/dist/monitor/Monitor.test.d.ts.map +1 -0
- package/dist/monitor/Monitor.test.js +346 -0
- package/dist/monitor/Monitor.test.js.map +1 -0
- package/dist/service.d.ts +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +9 -5
- package/dist/service.js.map +1 -1
- package/dist/strategy/BaseStrategy.d.ts.map +1 -1
- package/dist/strategy/BaseStrategy.js +13 -11
- package/dist/strategy/BaseStrategy.js.map +1 -1
- package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -1
- package/dist/strategy/CollateralDeficitStrategy.js +2 -2
- package/dist/strategy/CollateralDeficitStrategy.js.map +1 -1
- package/dist/strategy/CompositeStrategy.d.ts.map +1 -1
- package/dist/strategy/CompositeStrategy.js.map +1 -1
- package/dist/strategy/CompositeStrategy.test.js.map +1 -1
- package/dist/strategy/MinAmountStrategy.d.ts +1 -0
- package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
- package/dist/strategy/MinAmountStrategy.js +12 -8
- package/dist/strategy/MinAmountStrategy.js.map +1 -1
- package/dist/strategy/MinAmountStrategy.test.js +189 -2
- package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
- package/dist/strategy/StrategyFactory.d.ts.map +1 -1
- package/dist/strategy/StrategyFactory.js.map +1 -1
- package/dist/strategy/WeightedStrategy.d.ts.map +1 -1
- package/dist/test/helpers.d.ts +11 -3
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +9 -11
- package/dist/test/helpers.js.map +1 -1
- package/dist/test/lifiMocks.d.ts +6 -6
- package/dist/test/lifiMocks.d.ts.map +1 -1
- package/dist/test/lifiMocks.js +5 -2
- package/dist/test/lifiMocks.js.map +1 -1
- package/dist/test/pendingTransferMiddlewareMocks.d.ts +17 -0
- package/dist/test/pendingTransferMiddlewareMocks.d.ts.map +1 -0
- package/dist/test/pendingTransferMiddlewareMocks.js +43 -0
- package/dist/test/pendingTransferMiddlewareMocks.js.map +1 -0
- package/dist/tracking/ActionTracker.d.ts +4 -0
- package/dist/tracking/ActionTracker.d.ts.map +1 -1
- package/dist/tracking/ActionTracker.js +76 -9
- package/dist/tracking/ActionTracker.js.map +1 -1
- package/dist/tracking/ActionTracker.test.js +418 -1
- package/dist/tracking/ActionTracker.test.js.map +1 -1
- package/dist/tracking/IActionTracker.d.ts +4 -2
- package/dist/tracking/IActionTracker.d.ts.map +1 -1
- package/dist/tracking/InflightContextAdapter.d.ts.map +1 -1
- package/dist/tracking/InflightContextAdapter.js.map +1 -1
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts +64 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js +474 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js +1168 -0
- package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts +61 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js +160 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js +369 -0
- package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts +60 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js +288 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js +606 -0
- package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts +25 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js +41 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js +141 -0
- package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts +12 -0
- package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/matchBody.js +29 -0
- package/dist/tracking/pendingTransferMiddlewares/matchBody.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts +59 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js +661 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js +1093 -0
- package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/types.d.ts +2 -0
- package/dist/tracking/pendingTransferMiddlewares/types.d.ts.map +1 -0
- package/dist/tracking/pendingTransferMiddlewares/types.js +4 -0
- package/dist/tracking/pendingTransferMiddlewares/types.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.d.ts.map +1 -1
- package/dist/utils/ExplorerClient.d.ts +1 -0
- package/dist/utils/ExplorerClient.d.ts.map +1 -1
- package/dist/utils/ExplorerClient.js +8 -3
- package/dist/utils/ExplorerClient.js.map +1 -1
- package/dist/utils/ExplorerClient.test.js +25 -0
- package/dist/utils/ExplorerClient.test.js.map +1 -1
- package/dist/utils/balanceUtils.d.ts +7 -1
- package/dist/utils/balanceUtils.d.ts.map +1 -1
- package/dist/utils/balanceUtils.js +39 -1
- package/dist/utils/balanceUtils.js.map +1 -1
- package/dist/utils/balanceUtils.test.js +55 -1
- package/dist/utils/balanceUtils.test.js.map +1 -1
- package/dist/utils/blockTag.d.ts +5 -4
- package/dist/utils/blockTag.d.ts.map +1 -1
- package/dist/utils/blockTag.js +26 -10
- package/dist/utils/blockTag.js.map +1 -1
- package/dist/utils/blockTag.test.d.ts +2 -0
- package/dist/utils/blockTag.test.d.ts.map +1 -0
- package/dist/utils/blockTag.test.js +132 -0
- package/dist/utils/blockTag.test.js.map +1 -0
- package/dist/utils/bridgeUtils.js.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/gasEstimation.d.ts +2 -1
- package/dist/utils/gasEstimation.d.ts.map +1 -1
- package/dist/utils/gasEstimation.js +16 -13
- package/dist/utils/gasEstimation.js.map +1 -1
- package/dist/utils/gasEstimation.test.d.ts +2 -0
- package/dist/utils/gasEstimation.test.d.ts.map +1 -0
- package/dist/utils/gasEstimation.test.js +104 -0
- package/dist/utils/gasEstimation.test.js.map +1 -0
- package/dist/utils/tokenUtils.d.ts.map +1 -1
- package/dist/utils/tokenUtils.js +5 -2
- package/dist/utils/tokenUtils.js.map +1 -1
- package/package.json +23 -22
- package/src/bridges/LiFiBridge.test.ts +270 -0
- package/src/bridges/LiFiBridge.ts +90 -71
- package/src/config/RebalancerConfig.test.ts +315 -1
- package/src/config/RebalancerConfig.ts +6 -3
- package/src/config/types.ts +98 -8
- package/src/core/InventoryRebalancer.test.ts +1092 -38
- package/src/core/InventoryRebalancer.ts +584 -351
- package/src/core/Rebalancer.test.ts +84 -0
- package/src/core/Rebalancer.ts +22 -6
- package/src/core/RebalancerOrchestrator.test.ts +0 -1
- package/src/core/RebalancerService.test.ts +35 -0
- package/src/core/RebalancerService.ts +3 -2
- package/src/e2e/harness/BaseLocalDeploymentManager.ts +3 -1
- package/src/e2e/harness/LocalProvider.test.ts +16 -0
- package/src/e2e/harness/LocalProvider.ts +10 -0
- package/src/e2e/harness/NativeLocalDeploymentManager.ts +2 -1
- package/src/e2e/harness/SnapshotHelper.ts +2 -5
- package/src/e2e/harness/TestHelpers.ts +3 -3
- package/src/e2e/harness/TestRebalancer.ts +21 -1
- package/src/e2e/relayer-denylist.e2e-test.ts +558 -0
- package/src/factories/RebalancerContextFactory.test.ts +489 -8
- package/src/factories/RebalancerContextFactory.ts +86 -36
- package/src/index.ts +2 -0
- package/src/interfaces/IRebalancer.ts +4 -1
- package/src/metrics/Metrics.ts +1 -0
- package/src/metrics/PriceGetter.test.ts +113 -0
- package/src/metrics/PriceGetter.ts +18 -3
- package/src/monitor/Monitor.test.ts +408 -0
- package/src/monitor/Monitor.ts +123 -97
- package/src/service.ts +14 -8
- package/src/strategy/BaseStrategy.ts +18 -15
- package/src/strategy/CollateralDeficitStrategy.ts +4 -3
- package/src/strategy/MinAmountStrategy.test.ts +238 -2
- package/src/strategy/MinAmountStrategy.ts +29 -17
- package/src/test/helpers.ts +13 -12
- package/src/test/lifiMocks.ts +5 -2
- package/src/test/pendingTransferMiddlewareMocks.ts +65 -0
- package/src/tracking/ActionTracker.test.ts +635 -3
- package/src/tracking/ActionTracker.ts +92 -12
- package/src/tracking/IActionTracker.ts +4 -2
- package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.ts +1693 -0
- package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.ts +784 -0
- package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.ts +554 -0
- package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.ts +233 -0
- package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.ts +894 -0
- package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.ts +404 -0
- package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.ts +205 -0
- package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.ts +89 -0
- package/src/tracking/pendingTransferMiddlewares/fixtures/mainnet-denylist.json +3556 -0
- package/src/tracking/pendingTransferMiddlewares/matchBody.ts +43 -0
- package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.ts +1220 -0
- package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.ts +934 -0
- package/src/tracking/pendingTransferMiddlewares/types.ts +3 -0
- package/src/utils/ExplorerClient.test.ts +42 -0
- package/src/utils/ExplorerClient.ts +14 -3
- package/src/utils/balanceUtils.test.ts +87 -1
- package/src/utils/balanceUtils.ts +73 -2
- package/src/utils/blockTag.test.ts +173 -0
- package/src/utils/blockTag.ts +35 -15
- package/src/utils/gasEstimation.test.ts +192 -0
- package/src/utils/gasEstimation.ts +17 -11
- package/src/utils/tokenUtils.ts +5 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { MultiProvider } from '@humanode-hyperlane/sdk';
|
|
3
|
+
import { type PendingTransferMiddlewareConfig } from '../../config/types.js';
|
|
4
|
+
import type { IExplorerClient } from '../../utils/ExplorerClient.js';
|
|
5
|
+
export interface PendingTransferMiddlewareDeps {
|
|
6
|
+
routersByDomain: Record<number, string>;
|
|
7
|
+
mailboxByDomain: Record<number, string>;
|
|
8
|
+
multiProvider: MultiProvider;
|
|
9
|
+
logger: Logger;
|
|
10
|
+
}
|
|
11
|
+
export interface PendingTransferMiddlewares {
|
|
12
|
+
client: IExplorerClient;
|
|
13
|
+
/** Set only when at least one middleware is configured. */
|
|
14
|
+
isIgnoredTransfer?: (messageId: string) => boolean;
|
|
15
|
+
/** Set only when at least one middleware is configured. */
|
|
16
|
+
isIgnoredRebalanceAction?: (messageId: string) => boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps `inner` with one middleware per configured item. Item 0 is the
|
|
20
|
+
* innermost middleware, so it sees the raw Explorer result first and each
|
|
21
|
+
* later item sees only what the earlier ones kept. With no items, `inner` is
|
|
22
|
+
* returned unchanged.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildPendingTransferMiddlewares(inner: IExplorerClient, configs: PendingTransferMiddlewareConfig[], deps: PendingTransferMiddlewareDeps): Promise<PendingTransferMiddlewares>;
|
|
25
|
+
//# sourceMappingURL=buildPendingTransferMiddlewares.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPendingTransferMiddlewares.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EACL,KAAK,+BAA+B,EAErC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAC;IACxB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,2DAA2D;IAC3D,wBAAwB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AA+BD;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,+BAA+B,EAAE,EAC1C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,0BAA0B,CAAC,CAoBrC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { PendingTransferMiddlewareType, } from '../../config/types.js';
|
|
2
|
+
import { BlacklistIsmMiddleware } from './BlacklistIsmMiddleware.js';
|
|
3
|
+
import { RelayerDenylistMiddleware } from './RelayerDenylistMiddleware.js';
|
|
4
|
+
function createMiddleware(config, inner, deps) {
|
|
5
|
+
switch (config.type) {
|
|
6
|
+
case PendingTransferMiddlewareType.RelayerDenylist:
|
|
7
|
+
return RelayerDenylistMiddleware.create(inner, {
|
|
8
|
+
url: config.url,
|
|
9
|
+
refreshIntervalMs: config.refreshIntervalSecs * 1_000,
|
|
10
|
+
}, deps.logger);
|
|
11
|
+
case PendingTransferMiddlewareType.BlacklistIsm:
|
|
12
|
+
return BlacklistIsmMiddleware.create(inner, {
|
|
13
|
+
refreshIntervalMs: config.refreshIntervalSecs * 1_000,
|
|
14
|
+
routersByDomain: deps.routersByDomain,
|
|
15
|
+
mailboxByDomain: deps.mailboxByDomain,
|
|
16
|
+
multiProvider: deps.multiProvider,
|
|
17
|
+
}, deps.logger);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wraps `inner` with one middleware per configured item. Item 0 is the
|
|
22
|
+
* innermost middleware, so it sees the raw Explorer result first and each
|
|
23
|
+
* later item sees only what the earlier ones kept. With no items, `inner` is
|
|
24
|
+
* returned unchanged.
|
|
25
|
+
*/
|
|
26
|
+
export async function buildPendingTransferMiddlewares(inner, configs, deps) {
|
|
27
|
+
let outermost;
|
|
28
|
+
for (const config of configs) {
|
|
29
|
+
outermost = await createMiddleware(config, outermost ?? inner, deps);
|
|
30
|
+
}
|
|
31
|
+
if (!outermost)
|
|
32
|
+
return { client: inner };
|
|
33
|
+
deps.logger.info({ middlewares: configs.map((config) => config.type) }, 'Pending transfer middlewares enabled');
|
|
34
|
+
const client = outermost;
|
|
35
|
+
return {
|
|
36
|
+
client,
|
|
37
|
+
isIgnoredTransfer: (messageId) => client.isIgnored(messageId),
|
|
38
|
+
isIgnoredRebalanceAction: (messageId) => client.isIgnoredRebalanceAction(messageId),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=buildPendingTransferMiddlewares.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPendingTransferMiddlewares.js","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAiB3E,SAAS,gBAAgB,CACvB,MAAuC,EACvC,KAAsB,EACtB,IAAmC;IAEnC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,6BAA6B,CAAC,eAAe;YAChD,OAAO,yBAAyB,CAAC,MAAM,CACrC,KAAK,EACL;gBACE,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,GAAG,KAAK;aACtD,EACD,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,KAAK,6BAA6B,CAAC,YAAY;YAC7C,OAAO,sBAAsB,CAAC,MAAM,CAClC,KAAK,EACL;gBACE,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,GAAG,KAAK;gBACrD,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,EACD,IAAI,CAAC,MAAM,CACZ,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,KAAsB,EACtB,OAA0C,EAC1C,IAAmC;IAEnC,IAAI,SAAgD,CAAC;IACrD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEzC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EACrD,sCAAsC,CACvC,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO;QACL,MAAM;QACN,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QAC7D,wBAAwB,EAAE,CAAC,SAAS,EAAE,EAAE,CACtC,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC"}
|
package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPendingTransferMiddlewares.test.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { pathToFileURL } from 'node:url';
|
|
6
|
+
import { pino } from 'pino';
|
|
7
|
+
import Sinon from 'sinon';
|
|
8
|
+
import { MultiProvider } from '@humanode-hyperlane/sdk';
|
|
9
|
+
import { ProtocolType, assert } from '@humanode-hyperlane/utils';
|
|
10
|
+
import { PendingTransferMiddlewareType, } from '../../config/types.js';
|
|
11
|
+
import { ID_A, ID_B, ID_C, PARAMS, REBALANCE_PARAMS, StubExplorerClient, buildMessage, } from '../../test/pendingTransferMiddlewareMocks.js';
|
|
12
|
+
import { INITIAL_LOAD_RETRY_DELAY_MS } from './RelayerDenylistMiddleware.js';
|
|
13
|
+
import { buildPendingTransferMiddlewares, } from './buildPendingTransferMiddlewares.js';
|
|
14
|
+
describe('buildPendingTransferMiddlewares', () => {
|
|
15
|
+
const logger = pino({ level: 'silent' });
|
|
16
|
+
let deps;
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
const multiProvider = Sinon.createStubInstance(MultiProvider);
|
|
19
|
+
multiProvider.getProtocol.returns(ProtocolType.Ethereum);
|
|
20
|
+
multiProvider.getProvider.throws(new Error('No provider in this test'));
|
|
21
|
+
deps = {
|
|
22
|
+
routersByDomain: { 1: '0x67899664446ccfadf75e0d3f5668be262acd1069' },
|
|
23
|
+
mailboxByDomain: { 1: '0xc005dc82818d67af737725bd4bf75435d065d239' },
|
|
24
|
+
multiProvider,
|
|
25
|
+
logger,
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
it('returns the inner client unchanged when no middlewares are configured', async () => {
|
|
29
|
+
const inner = new StubExplorerClient([]);
|
|
30
|
+
const result = await buildPendingTransferMiddlewares(inner, [], deps);
|
|
31
|
+
expect(result.client).to.equal(inner);
|
|
32
|
+
expect(result.isIgnoredTransfer).to.equal(undefined);
|
|
33
|
+
expect(result.isIgnoredRebalanceAction).to.equal(undefined);
|
|
34
|
+
});
|
|
35
|
+
it('builds layers in config order and unions their ignored ids', async () => {
|
|
36
|
+
const dir = mkdtempSync(join(tmpdir(), 'pending-transfer-middlewares-'));
|
|
37
|
+
try {
|
|
38
|
+
const writeDenylist = (name, ids) => {
|
|
39
|
+
const path = join(dir, `${name}.json`);
|
|
40
|
+
writeFileSync(path, JSON.stringify({
|
|
41
|
+
rules: ids.map((messageId) => ({
|
|
42
|
+
reason: name,
|
|
43
|
+
addedBy: 'tester',
|
|
44
|
+
match: { messageId },
|
|
45
|
+
})),
|
|
46
|
+
}));
|
|
47
|
+
return pathToFileURL(path).href;
|
|
48
|
+
};
|
|
49
|
+
const configs = [
|
|
50
|
+
{
|
|
51
|
+
type: PendingTransferMiddlewareType.RelayerDenylist,
|
|
52
|
+
url: writeDenylist('first', [ID_A, ID_B]),
|
|
53
|
+
refreshIntervalSecs: 60,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: PendingTransferMiddlewareType.RelayerDenylist,
|
|
57
|
+
url: writeDenylist('second', [ID_A]),
|
|
58
|
+
refreshIntervalSecs: 60,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
const inner = new StubExplorerClient([
|
|
62
|
+
buildMessage(ID_A),
|
|
63
|
+
buildMessage(ID_B),
|
|
64
|
+
buildMessage(ID_C),
|
|
65
|
+
]);
|
|
66
|
+
const queryLogger = pino({ level: 'silent' });
|
|
67
|
+
const info = Sinon.spy(queryLogger, 'info');
|
|
68
|
+
inner.rebalanceActions = [buildMessage(ID_B), buildMessage(ID_C)];
|
|
69
|
+
const { client, isIgnoredTransfer, isIgnoredRebalanceAction } = await buildPendingTransferMiddlewares(inner, configs, deps);
|
|
70
|
+
const result = await client.getInflightUserTransfers(PARAMS, queryLogger);
|
|
71
|
+
const rebalanceActions = await client.getInflightRebalanceActions(REBALANCE_PARAMS, queryLogger);
|
|
72
|
+
expect(result.map((msg) => msg.msg_id)).to.deep.equal([ID_C]);
|
|
73
|
+
// Item 0 is innermost, so it sees ID_A first and records its reason.
|
|
74
|
+
const ignoredLogs = info
|
|
75
|
+
.getCalls()
|
|
76
|
+
.filter((call) => call.args.includes('Ignoring pending transfer'));
|
|
77
|
+
expect(ignoredLogs).to.have.lengthOf(2);
|
|
78
|
+
for (const id of [ID_A, ID_B]) {
|
|
79
|
+
expect(info.calledWith(Sinon.match({ msgId: id, reason: 'first (added by tester)' }), 'Ignoring pending transfer')).to.be.true;
|
|
80
|
+
}
|
|
81
|
+
assert(isIgnoredTransfer, 'Expected an ignored-transfer predicate');
|
|
82
|
+
expect(isIgnoredTransfer(ID_A)).to.be.true;
|
|
83
|
+
expect(isIgnoredTransfer(ID_B)).to.be.true;
|
|
84
|
+
expect(isIgnoredTransfer(ID_C)).to.be.false;
|
|
85
|
+
expect(rebalanceActions.map((msg) => msg.msg_id)).to.deep.equal([
|
|
86
|
+
ID_B,
|
|
87
|
+
ID_C,
|
|
88
|
+
]);
|
|
89
|
+
assert(isIgnoredRebalanceAction, 'Expected an ignored-rebalance-action predicate');
|
|
90
|
+
expect(isIgnoredRebalanceAction(ID_B)).to.be.true;
|
|
91
|
+
expect(isIgnoredRebalanceAction(ID_C)).to.be.false;
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
rmSync(dir, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
it('fails when the BlacklistIsm trees cannot be resolved at startup', async () => {
|
|
98
|
+
const inner = new StubExplorerClient([]);
|
|
99
|
+
const configs = [
|
|
100
|
+
{
|
|
101
|
+
type: PendingTransferMiddlewareType.BlacklistIsm,
|
|
102
|
+
refreshIntervalSecs: 600,
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
const error = await buildPendingTransferMiddlewares(inner, configs, deps).then(() => expect.fail('Expected buildPendingTransferMiddlewares to throw'), (err) => err);
|
|
106
|
+
expect(error).to.be.instanceOf(Error);
|
|
107
|
+
if (error instanceof Error) {
|
|
108
|
+
expect(error.message).to.equal('Failed to resolve the ISM of router 0x67899664446ccfadf75e0d3f5668be262acd1069 on domain 1: No provider in this test');
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
it('fails when a relayer denylist cannot be loaded at startup', async () => {
|
|
112
|
+
const inner = new StubExplorerClient([]);
|
|
113
|
+
const configs = [
|
|
114
|
+
{
|
|
115
|
+
type: PendingTransferMiddlewareType.RelayerDenylist,
|
|
116
|
+
url: 'https://example.com/denylist.json',
|
|
117
|
+
refreshIntervalSecs: 60,
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
// Startup retries a failed fetch after a delay; a stubbed fetch keeps
|
|
121
|
+
// the faked delays off real I/O.
|
|
122
|
+
const clock = Sinon.useFakeTimers({
|
|
123
|
+
toFake: ['setTimeout', 'clearTimeout'],
|
|
124
|
+
});
|
|
125
|
+
const fetchStub = Sinon.stub(globalThis, 'fetch').rejects(new Error('getaddrinfo ENOTFOUND example.com'));
|
|
126
|
+
try {
|
|
127
|
+
const result = buildPendingTransferMiddlewares(inner, configs, deps).then(() => expect.fail('Expected buildPendingTransferMiddlewares to throw'), (err) => err);
|
|
128
|
+
await clock.tickAsync(2 * INITIAL_LOAD_RETRY_DELAY_MS);
|
|
129
|
+
const error = await result;
|
|
130
|
+
expect(error).to.be.instanceOf(Error);
|
|
131
|
+
if (error instanceof Error) {
|
|
132
|
+
expect(error.message).to.equal('Failed to load relayer denylist from https://example.com/denylist.json (fetch_failed): getaddrinfo ENOTFOUND example.com');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
fetchStub.restore();
|
|
137
|
+
clock.restore();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=buildPendingTransferMiddlewares.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPendingTransferMiddlewares.test.js","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the lowercase hex (without 0x) of the address a `matchBody: true`
|
|
3
|
+
* rule scans message bodies for. Like the relayer, only 20-byte EVM hex
|
|
4
|
+
* addresses may opt in.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseMatchBodyAddress(address: string, matchBody: boolean | undefined): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Whether the message body contains the address at any byte boundary, like
|
|
9
|
+
* the relayer's `body.windows(20)` scan.
|
|
10
|
+
*/
|
|
11
|
+
export declare function bodyContainsAddress(messageBody: string, addressHex: string): boolean;
|
|
12
|
+
//# sourceMappingURL=matchBody.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchBody.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/matchBody.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,GAAG,SAAS,GAC7B,MAAM,GAAG,SAAS,CASpB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAYT"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ethers } from 'ethers';
|
|
2
|
+
import { strip0x } from '@humanode-hyperlane/utils';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the lowercase hex (without 0x) of the address a `matchBody: true`
|
|
5
|
+
* rule scans message bodies for. Like the relayer, only 20-byte EVM hex
|
|
6
|
+
* addresses may opt in.
|
|
7
|
+
*/
|
|
8
|
+
export function parseMatchBodyAddress(address, matchBody) {
|
|
9
|
+
if (matchBody !== true)
|
|
10
|
+
return undefined;
|
|
11
|
+
const trimmed = address.trim();
|
|
12
|
+
if (!ethers.utils.isHexString(trimmed, 20)) {
|
|
13
|
+
throw new Error('`matchBody` requires a 20-byte EVM hex address');
|
|
14
|
+
}
|
|
15
|
+
return strip0x(trimmed).toLowerCase();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Whether the message body contains the address at any byte boundary, like
|
|
19
|
+
* the relayer's `body.windows(20)` scan.
|
|
20
|
+
*/
|
|
21
|
+
export function bodyContainsAddress(messageBody, addressHex) {
|
|
22
|
+
const body = strip0x(messageBody).toLowerCase();
|
|
23
|
+
for (let index = body.indexOf(addressHex); index !== -1; index = body.indexOf(addressHex, index + 1)) {
|
|
24
|
+
if (index % 2 === 0)
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=matchBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchBody.js","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/matchBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,SAA8B;IAE9B,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,UAAkB;IAElB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IAEhD,KACE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EACpC,KAAK,KAAK,CAAC,CAAC,EACZ,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,EAC3C,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { RE2JS } from 're2js';
|
|
2
|
+
import type { ExplorerMessage } from '../../utils/ExplorerClient.js';
|
|
3
|
+
export declare const DenylistLoadFailure: {
|
|
4
|
+
readonly FetchFailed: 'fetch_failed';
|
|
5
|
+
readonly InvalidFile: 'invalid_file';
|
|
6
|
+
};
|
|
7
|
+
export type DenylistLoadFailure = (typeof DenylistLoadFailure)[keyof typeof DenylistLoadFailure];
|
|
8
|
+
export declare class DenylistLoadError extends Error {
|
|
9
|
+
readonly failure: DenylistLoadFailure;
|
|
10
|
+
constructor(failure: DenylistLoadFailure, message: string);
|
|
11
|
+
}
|
|
12
|
+
/** Unset fields are wildcards. Addresses and ids are lowercase bytes32 hex. */
|
|
13
|
+
export interface DenylistMatchRule {
|
|
14
|
+
reason: string;
|
|
15
|
+
expiresAt?: number;
|
|
16
|
+
messageIds?: ReadonlySet<string>;
|
|
17
|
+
originDomains?: ReadonlySet<number>;
|
|
18
|
+
senders?: ReadonlySet<string>;
|
|
19
|
+
destinationDomains?: ReadonlySet<number>;
|
|
20
|
+
recipients?: ReadonlySet<string>;
|
|
21
|
+
/** Tested, unanchored, against the lowercase hex body without 0x. */
|
|
22
|
+
bodyRegex?: RE2JS;
|
|
23
|
+
}
|
|
24
|
+
export interface DenylistAddressRule {
|
|
25
|
+
reason: string;
|
|
26
|
+
expiresAt?: number;
|
|
27
|
+
address: string;
|
|
28
|
+
/** Set by `matchBody: true`: lowercase 20-byte hex searched in the body. */
|
|
29
|
+
bodyAddress?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface DenylistRules {
|
|
32
|
+
matchRules: DenylistMatchRule[];
|
|
33
|
+
addressRules: DenylistAddressRule[];
|
|
34
|
+
}
|
|
35
|
+
/** Returns epoch milliseconds, or undefined if not an RFC 3339 timestamp. */
|
|
36
|
+
export declare function parseRfc3339(value: string): number | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Parses an address the way the relayer's `hex_or_base58_or_bech32_to_h256`
|
|
39
|
+
* does, plus its Tron checksum check, into lowercase bytes32 hex.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseDenylistAddress(value: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Parses a runtime denylist file. Throws a `DenylistLoadError` if any rule is
|
|
44
|
+
* invalid. Expired rules are kept and skipped at match time.
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseDenylistFile(text: string): DenylistRules;
|
|
47
|
+
/**
|
|
48
|
+
* Returns the reason of the first active rule that denies the message, like
|
|
49
|
+
* the relayer: `match` rules first, then `address` rules against the sender,
|
|
50
|
+
* the recipient, the warp transfer recipient (first 32 body bytes), the
|
|
51
|
+
* origin tx sender and, for `matchBody` rules, anywhere in the body.
|
|
52
|
+
*/
|
|
53
|
+
export declare function findDenyReason(rules: DenylistRules, msg: ExplorerMessage, nowMs: number): string | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the reason of the first active `match` rule that sets only
|
|
56
|
+
* `messageId` and lists the message. Other rules are ignored.
|
|
57
|
+
*/
|
|
58
|
+
export declare function findMessageIdDenyReason(rules: DenylistRules, messageId: string, nowMs: number): string | undefined;
|
|
59
|
+
//# sourceMappingURL=relayerDenylistRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relayerDenylistRules.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/relayerDenylistRules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAgB9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AASrE,eAAO,MAAM,mBAAmB;aAC9B,WAAW,EAAE,cAAc;aAC3B,WAAW,EAAE,cAAc;CACnB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAEjE,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,OAAO,EAAE,mBAAmB;IADvC,YACW,OAAO,EAAE,mBAAmB,EACrC,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,qEAAqE;IACrE,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAyBD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4D9D;AAuFD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8B1D;AA+hBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA+B7D;AAaD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAiCpB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CAapB"}
|