@humanode-hyperlane/rebalancer 27.2.2-humanode.1 → 1029.1.0
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,288 @@
|
|
|
1
|
+
import { open } from 'node:fs/promises';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { assert, sleep, timeout } from '@humanode-hyperlane/utils';
|
|
4
|
+
import { PendingTransferMiddlewareType } from '../../config/types.js';
|
|
5
|
+
import { PendingTransferMiddleware } from './PendingTransferMiddleware.js';
|
|
6
|
+
import { DenylistLoadError, DenylistLoadFailure, findDenyReason, findMessageIdDenyReason, parseDenylistFile, } from './relayerDenylistRules.js';
|
|
7
|
+
import { normalizeMessageId } from './types.js';
|
|
8
|
+
export const FETCH_TIMEOUT_MS = 10_000;
|
|
9
|
+
/** Startup fetch attempts and the delay between them, as in the relayer. */
|
|
10
|
+
const INITIAL_LOAD_ATTEMPTS = 3;
|
|
11
|
+
export const INITIAL_LOAD_RETRY_DELAY_MS = 2_000;
|
|
12
|
+
/** The relayer's limit on a denylist file, in bytes. */
|
|
13
|
+
export const MAX_DENYLIST_FILE_BYTES = 4 * 1024 * 1024;
|
|
14
|
+
export const RELAYER_DENYLIST_REFRESH_FAILED_MESSAGE = 'Relayer denylist refresh failed, keeping last good rules';
|
|
15
|
+
export const RELAYER_DENYLIST_INITIAL_LOAD_RETRY_MESSAGE = 'Failed to fetch relayer denylist at startup, retrying';
|
|
16
|
+
export const RELAYER_DENYLIST_CHECK_FAILED_MESSAGE = 'Failed to check pending transfer against relayer denylist, keeping it';
|
|
17
|
+
/** Drops credentials, query and fragment, which may carry a token. */
|
|
18
|
+
export function redactUrl(url) {
|
|
19
|
+
const parsed = new URL(url);
|
|
20
|
+
return parsed.protocol === 'file:'
|
|
21
|
+
? `file://${parsed.pathname}`
|
|
22
|
+
: `${parsed.protocol}//${parsed.host}${parsed.pathname}`;
|
|
23
|
+
}
|
|
24
|
+
/** Removes the URL and its secret-bearing parts from an error message. */
|
|
25
|
+
function scrubUrl(message, url) {
|
|
26
|
+
let scrubbed = message.split(url.href).join(redactUrl(url.href));
|
|
27
|
+
for (const secret of [url.username, url.password, url.search]) {
|
|
28
|
+
if (secret)
|
|
29
|
+
scrubbed = scrubbed.split(secret).join('[redacted]');
|
|
30
|
+
}
|
|
31
|
+
return scrubbed;
|
|
32
|
+
}
|
|
33
|
+
function fileTooLarge(bytes) {
|
|
34
|
+
return new Error(`Denylist file is at least ${bytes} bytes; the limit is ${MAX_DENYLIST_FILE_BYTES}`);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Decodes like the relayer's serde_json parser: invalid UTF-8 is an invalid
|
|
38
|
+
* file, and a leading BOM is kept so `JSON.parse` rejects it.
|
|
39
|
+
*/
|
|
40
|
+
function decodeUtf8(bytes) {
|
|
41
|
+
try {
|
|
42
|
+
return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (!(error instanceof TypeError))
|
|
46
|
+
throw error;
|
|
47
|
+
throw new DenylistLoadError(DenylistLoadFailure.InvalidFile, 'Invalid denylist JSON: not valid UTF-8');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Reads at most one byte past the relayer's limit, rejecting a larger file. */
|
|
51
|
+
async function readFileCapped(path) {
|
|
52
|
+
const file = await open(path);
|
|
53
|
+
try {
|
|
54
|
+
const buffer = Buffer.alloc(MAX_DENYLIST_FILE_BYTES + 1);
|
|
55
|
+
let bytes = 0;
|
|
56
|
+
while (bytes < buffer.length) {
|
|
57
|
+
const { bytesRead } = await file.read(buffer, bytes, buffer.length - bytes);
|
|
58
|
+
if (bytesRead === 0)
|
|
59
|
+
break;
|
|
60
|
+
bytes += bytesRead;
|
|
61
|
+
}
|
|
62
|
+
if (bytes > MAX_DENYLIST_FILE_BYTES)
|
|
63
|
+
throw fileTooLarge(bytes);
|
|
64
|
+
return buffer.subarray(0, bytes);
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
await file.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Reads at most the relayer's limit, rejecting a larger body before buffering
|
|
72
|
+
* it. Cancels the body once `signal` aborts, as a fetch wrapper may not.
|
|
73
|
+
*/
|
|
74
|
+
async function readBodyCapped(response, signal) {
|
|
75
|
+
const length = Number(response.headers.get('content-length'));
|
|
76
|
+
if (length > MAX_DENYLIST_FILE_BYTES)
|
|
77
|
+
throw fileTooLarge(length);
|
|
78
|
+
const chunks = [];
|
|
79
|
+
let bytes = 0;
|
|
80
|
+
const reader = response.body?.getReader();
|
|
81
|
+
// A rejected cancel means the stream already errored, which ends the read too.
|
|
82
|
+
const cancel = () => {
|
|
83
|
+
void reader?.cancel().catch(() => { });
|
|
84
|
+
};
|
|
85
|
+
if (signal.aborted)
|
|
86
|
+
cancel();
|
|
87
|
+
else
|
|
88
|
+
signal.addEventListener('abort', cancel, { once: true });
|
|
89
|
+
while (reader) {
|
|
90
|
+
const { done, value } = await reader.read();
|
|
91
|
+
if (done)
|
|
92
|
+
break;
|
|
93
|
+
bytes += value.byteLength;
|
|
94
|
+
if (bytes > MAX_DENYLIST_FILE_BYTES) {
|
|
95
|
+
await reader.cancel();
|
|
96
|
+
throw fileTooLarge(bytes);
|
|
97
|
+
}
|
|
98
|
+
chunks.push(value);
|
|
99
|
+
}
|
|
100
|
+
return Buffer.concat(chunks);
|
|
101
|
+
}
|
|
102
|
+
async function fetchBodyCapped(url, signal) {
|
|
103
|
+
const response = await fetch(url, { signal });
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error(`HTTP status ${response.status}`);
|
|
106
|
+
}
|
|
107
|
+
return readBodyCapped(response, signal);
|
|
108
|
+
}
|
|
109
|
+
async function readDenylistBytes(url) {
|
|
110
|
+
switch (url.protocol) {
|
|
111
|
+
case 'file:':
|
|
112
|
+
return readFileCapped(fileURLToPath(url));
|
|
113
|
+
case 'http:':
|
|
114
|
+
case 'https:': {
|
|
115
|
+
// The timer settles the load even if the fetch ignores the abort.
|
|
116
|
+
const controller = new AbortController();
|
|
117
|
+
try {
|
|
118
|
+
return await timeout(fetchBodyCapped(url, controller.signal), FETCH_TIMEOUT_MS, `Denylist fetch timed out after ${FETCH_TIMEOUT_MS} ms`);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
controller.abort();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
default:
|
|
125
|
+
throw new Error(`Unsupported denylist URL protocol ${url.protocol}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export async function fetchDenylistFile(url) {
|
|
129
|
+
let bytes;
|
|
130
|
+
try {
|
|
131
|
+
bytes = await readDenylistBytes(url);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
throw new DenylistLoadError(DenylistLoadFailure.FetchFailed, scrubUrl(error instanceof Error ? error.message : String(error), url));
|
|
135
|
+
}
|
|
136
|
+
return decodeUtf8(bytes);
|
|
137
|
+
}
|
|
138
|
+
async function loadRules(source, logger) {
|
|
139
|
+
const rules = parseDenylistFile(await fetchDenylistFile(source.url));
|
|
140
|
+
logger.debug({
|
|
141
|
+
url: source.redactedUrl,
|
|
142
|
+
matchRules: rules.matchRules.length,
|
|
143
|
+
addressRules: rules.addressRules.length,
|
|
144
|
+
}, 'Loaded relayer denylist');
|
|
145
|
+
return rules;
|
|
146
|
+
}
|
|
147
|
+
function loadFailure(error) {
|
|
148
|
+
return error instanceof DenylistLoadError
|
|
149
|
+
? error.failure
|
|
150
|
+
: DenylistLoadFailure.FetchFailed;
|
|
151
|
+
}
|
|
152
|
+
/** Retries fetch failures only: an invalid file stays invalid. */
|
|
153
|
+
async function loadInitialRules(source, logger) {
|
|
154
|
+
for (let attempt = 1;; attempt++) {
|
|
155
|
+
try {
|
|
156
|
+
return await loadRules(source, logger);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (attempt >= INITIAL_LOAD_ATTEMPTS ||
|
|
160
|
+
loadFailure(error) !== DenylistLoadFailure.FetchFailed) {
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
logger.warn({
|
|
164
|
+
url: source.redactedUrl,
|
|
165
|
+
attempt,
|
|
166
|
+
error: error instanceof Error ? error.message : String(error),
|
|
167
|
+
}, RELAYER_DENYLIST_INITIAL_LOAD_RETRY_MESSAGE);
|
|
168
|
+
await sleep(INITIAL_LOAD_RETRY_DELAY_MS);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Ignores messages the relayer's runtime denylist blocks. `create()` loads the
|
|
174
|
+
* file; it is re-fetched once `refreshIntervalMs` has passed, and a failed
|
|
175
|
+
* refresh keeps the last good rules.
|
|
176
|
+
*
|
|
177
|
+
* `address` rules are checked against the Explorer's `origin_tx_sender`, the
|
|
178
|
+
* origin transaction's fee payer, where the relayer checks every origin
|
|
179
|
+
* transaction signer. A denied depositor whose transaction another account
|
|
180
|
+
* paid for (e.g. a sponsored Sealevel transfer) is therefore not ignored and
|
|
181
|
+
* stays reserved.
|
|
182
|
+
*
|
|
183
|
+
* The relayer also skips its signer check, so it may deliver a message this
|
|
184
|
+
* middleware ignores for its `origin_tx_sender` alone, when no dispatch tx
|
|
185
|
+
* hash is stored (Cosmos block-level events, an old DB backlog, a zero hash),
|
|
186
|
+
* the origin tx is not found (pruned or reorged out), the sender is zero
|
|
187
|
+
* (Radix, Aleo) or the lookup keeps failing for about 8 minutes
|
|
188
|
+
* (rust/main/agents/relayer/src/msg/pending_message.rs and
|
|
189
|
+
* runtime_denylist.rs).
|
|
190
|
+
*
|
|
191
|
+
* Only `match` rules that set nothing but `messageId` apply to the
|
|
192
|
+
* rebalancer's own rebalance messages, which then stop counting as incoming
|
|
193
|
+
* collateral. Deny a rebalance message only once its funds settled another
|
|
194
|
+
* way; otherwise the rebalancer sends a replacement.
|
|
195
|
+
*/
|
|
196
|
+
export class RelayerDenylistMiddleware extends PendingTransferMiddleware {
|
|
197
|
+
source;
|
|
198
|
+
rules;
|
|
199
|
+
loadedAt;
|
|
200
|
+
lastAttemptAt;
|
|
201
|
+
refreshing;
|
|
202
|
+
constructor(inner, source, rules, loadedAt) {
|
|
203
|
+
super(inner, PendingTransferMiddlewareType.RelayerDenylist);
|
|
204
|
+
this.source = source;
|
|
205
|
+
this.rules = rules;
|
|
206
|
+
this.loadedAt = loadedAt;
|
|
207
|
+
this.lastAttemptAt = loadedAt;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Loads the denylist, retrying fetch failures. Throws if it still cannot be
|
|
211
|
+
* fetched or is invalid.
|
|
212
|
+
*/
|
|
213
|
+
static async create(inner, options, logger) {
|
|
214
|
+
const url = new URL(options.url);
|
|
215
|
+
const redactedUrl = redactUrl(options.url);
|
|
216
|
+
assert(url.username === '' && url.password === '', `Relayer denylist url ${redactedUrl} must not contain credentials`);
|
|
217
|
+
const source = {
|
|
218
|
+
url,
|
|
219
|
+
redactedUrl,
|
|
220
|
+
refreshIntervalMs: options.refreshIntervalMs,
|
|
221
|
+
};
|
|
222
|
+
let rules;
|
|
223
|
+
try {
|
|
224
|
+
rules = await loadInitialRules(source, logger);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
228
|
+
throw new Error(`Failed to load relayer denylist from ${redactedUrl} (${loadFailure(error)}): ${message}`);
|
|
229
|
+
}
|
|
230
|
+
return new RelayerDenylistMiddleware(inner, source, rules, Date.now());
|
|
231
|
+
}
|
|
232
|
+
async findIgnored(messages, logger) {
|
|
233
|
+
await this.refreshIfStale(logger);
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
const ignored = new Map();
|
|
236
|
+
for (const msg of messages) {
|
|
237
|
+
try {
|
|
238
|
+
const reason = findDenyReason(this.rules, msg, now);
|
|
239
|
+
if (reason !== undefined) {
|
|
240
|
+
ignored.set(normalizeMessageId(msg.msg_id), reason);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
logger.warn({
|
|
245
|
+
msgId: msg.msg_id,
|
|
246
|
+
error: error instanceof Error ? error.message : String(error),
|
|
247
|
+
}, RELAYER_DENYLIST_CHECK_FAILED_MESSAGE);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return ignored;
|
|
251
|
+
}
|
|
252
|
+
isIgnoredRebalanceAction(messageId) {
|
|
253
|
+
return (findMessageIdDenyReason(this.rules, messageId, Date.now()) !==
|
|
254
|
+
undefined || super.isIgnoredRebalanceAction(messageId));
|
|
255
|
+
}
|
|
256
|
+
// Keeps the rules `isIgnoredRebalanceAction` reads fresh; rows pass through.
|
|
257
|
+
async getInflightRebalanceActions(params, logger) {
|
|
258
|
+
await this.refreshIfStale(logger);
|
|
259
|
+
return super.getInflightRebalanceActions(params, logger);
|
|
260
|
+
}
|
|
261
|
+
refreshIfStale(logger) {
|
|
262
|
+
if (this.refreshing)
|
|
263
|
+
return this.refreshing;
|
|
264
|
+
if (Date.now() - this.lastAttemptAt < this.source.refreshIntervalMs) {
|
|
265
|
+
return Promise.resolve();
|
|
266
|
+
}
|
|
267
|
+
this.lastAttemptAt = Date.now();
|
|
268
|
+
this.refreshing = this.reload(logger).finally(() => {
|
|
269
|
+
this.refreshing = undefined;
|
|
270
|
+
});
|
|
271
|
+
return this.refreshing;
|
|
272
|
+
}
|
|
273
|
+
async reload(logger) {
|
|
274
|
+
try {
|
|
275
|
+
this.rules = await loadRules(this.source, logger);
|
|
276
|
+
this.loadedAt = Date.now();
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
logger.warn({
|
|
280
|
+
url: this.source.redactedUrl,
|
|
281
|
+
failure: loadFailure(error),
|
|
282
|
+
cachedRulesAgeSecs: Math.floor((Date.now() - this.loadedAt) / 1000),
|
|
283
|
+
error: error instanceof Error ? error.message : String(error),
|
|
284
|
+
}, RELAYER_DENYLIST_REFRESH_FAILED_MESSAGE);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=RelayerDenylistMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelayerDenylistMiddleware.js","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelayerDenylistMiddleware.test.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.ts"],"names":[],"mappings":""}
|