@hyperlane-xyz/rebalancer 27.2.12 → 27.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/bridges/LiFiBridge.js +1 -1
  2. package/dist/bridges/LiFiBridge.js.map +1 -1
  3. package/dist/bridges/LiFiBridge.test.js +37 -0
  4. package/dist/bridges/LiFiBridge.test.js.map +1 -1
  5. package/dist/core/InventoryRebalancer.d.ts +13 -19
  6. package/dist/core/InventoryRebalancer.d.ts.map +1 -1
  7. package/dist/core/InventoryRebalancer.js +400 -274
  8. package/dist/core/InventoryRebalancer.js.map +1 -1
  9. package/dist/core/InventoryRebalancer.test.js +706 -24
  10. package/dist/core/InventoryRebalancer.test.js.map +1 -1
  11. package/dist/core/Rebalancer.d.ts.map +1 -1
  12. package/dist/core/Rebalancer.js +12 -6
  13. package/dist/core/Rebalancer.js.map +1 -1
  14. package/dist/core/Rebalancer.test.js +51 -0
  15. package/dist/core/Rebalancer.test.js.map +1 -1
  16. package/dist/core/RebalancerOrchestrator.test.js +0 -1
  17. package/dist/core/RebalancerOrchestrator.test.js.map +1 -1
  18. package/dist/core/RebalancerService.d.ts +2 -3
  19. package/dist/core/RebalancerService.d.ts.map +1 -1
  20. package/dist/core/RebalancerService.js +3 -2
  21. package/dist/core/RebalancerService.js.map +1 -1
  22. package/dist/core/RebalancerService.test.js +24 -0
  23. package/dist/core/RebalancerService.test.js.map +1 -1
  24. package/dist/e2e/harness/TestHelpers.js +1 -2
  25. package/dist/e2e/harness/TestHelpers.js.map +1 -1
  26. package/dist/factories/RebalancerContextFactory.d.ts +4 -5
  27. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
  28. package/dist/factories/RebalancerContextFactory.js +12 -7
  29. package/dist/factories/RebalancerContextFactory.js.map +1 -1
  30. package/dist/factories/RebalancerContextFactory.test.js +99 -2
  31. package/dist/factories/RebalancerContextFactory.test.js.map +1 -1
  32. package/dist/interfaces/IRebalancer.d.ts +4 -2
  33. package/dist/interfaces/IRebalancer.d.ts.map +1 -1
  34. package/dist/metrics/scripts/metrics.d.ts +1 -1
  35. package/dist/monitor/Monitor.d.ts.map +1 -1
  36. package/dist/monitor/Monitor.js +14 -6
  37. package/dist/monitor/Monitor.js.map +1 -1
  38. package/dist/strategy/BaseStrategy.d.ts.map +1 -1
  39. package/dist/strategy/BaseStrategy.js +13 -11
  40. package/dist/strategy/BaseStrategy.js.map +1 -1
  41. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -1
  42. package/dist/strategy/CollateralDeficitStrategy.js +2 -2
  43. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -1
  44. package/dist/strategy/MinAmountStrategy.d.ts +1 -0
  45. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
  46. package/dist/strategy/MinAmountStrategy.js +12 -8
  47. package/dist/strategy/MinAmountStrategy.js.map +1 -1
  48. package/dist/strategy/MinAmountStrategy.test.js +189 -2
  49. package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
  50. package/dist/test/helpers.d.ts +11 -3
  51. package/dist/test/helpers.d.ts.map +1 -1
  52. package/dist/test/helpers.js +9 -11
  53. package/dist/test/helpers.js.map +1 -1
  54. package/dist/test/lifiMocks.d.ts.map +1 -1
  55. package/dist/test/lifiMocks.js +5 -2
  56. package/dist/test/lifiMocks.js.map +1 -1
  57. package/dist/tracking/ActionTracker.d.ts.map +1 -1
  58. package/dist/tracking/ActionTracker.js +2 -1
  59. package/dist/tracking/ActionTracker.js.map +1 -1
  60. package/dist/tracking/ActionTracker.test.js +39 -0
  61. package/dist/tracking/ActionTracker.test.js.map +1 -1
  62. package/dist/utils/balanceUtils.d.ts +7 -1
  63. package/dist/utils/balanceUtils.d.ts.map +1 -1
  64. package/dist/utils/balanceUtils.js +39 -1
  65. package/dist/utils/balanceUtils.js.map +1 -1
  66. package/dist/utils/balanceUtils.test.js +55 -1
  67. package/dist/utils/balanceUtils.test.js.map +1 -1
  68. package/dist/utils/blockTag.d.ts +3 -3
  69. package/dist/utils/blockTag.d.ts.map +1 -1
  70. package/dist/utils/blockTag.js +1 -1
  71. package/dist/utils/blockTag.js.map +1 -1
  72. package/package.json +7 -7
  73. package/src/bridges/LiFiBridge.test.ts +43 -0
  74. package/src/bridges/LiFiBridge.ts +1 -1
  75. package/src/core/InventoryRebalancer.test.ts +932 -38
  76. package/src/core/InventoryRebalancer.ts +579 -361
  77. package/src/core/Rebalancer.test.ts +84 -0
  78. package/src/core/Rebalancer.ts +22 -6
  79. package/src/core/RebalancerOrchestrator.test.ts +0 -1
  80. package/src/core/RebalancerService.test.ts +35 -0
  81. package/src/core/RebalancerService.ts +9 -5
  82. package/src/e2e/harness/TestHelpers.ts +3 -3
  83. package/src/factories/RebalancerContextFactory.test.ts +143 -6
  84. package/src/factories/RebalancerContextFactory.ts +29 -17
  85. package/src/interfaces/IRebalancer.ts +4 -1
  86. package/src/monitor/Monitor.ts +19 -6
  87. package/src/strategy/BaseStrategy.ts +18 -15
  88. package/src/strategy/CollateralDeficitStrategy.ts +4 -3
  89. package/src/strategy/MinAmountStrategy.test.ts +238 -2
  90. package/src/strategy/MinAmountStrategy.ts +29 -17
  91. package/src/test/helpers.ts +13 -12
  92. package/src/test/lifiMocks.ts +5 -2
  93. package/src/tracking/ActionTracker.test.ts +47 -0
  94. package/src/tracking/ActionTracker.ts +2 -1
  95. package/src/utils/balanceUtils.test.ts +87 -1
  96. package/src/utils/balanceUtils.ts +73 -2
  97. package/src/utils/blockTag.ts +9 -4
@@ -1,14 +1,14 @@
1
1
  import type { Logger } from 'pino';
2
- import type { MinimalProviderRegistry } from '@hyperlane-xyz/sdk/providers/MinimalProviderRegistry';
2
+ import { type MultiProtocolProvider } from '@hyperlane-xyz/sdk';
3
3
  import type { ConfirmedBlockTag } from '../interfaces/IMonitor.js';
4
4
  /**
5
5
  * Get the confirmed block tag for a chain, accounting for reorg period.
6
6
  * Returns a block number that is safe from reorgs, or a named tag like 'finalized'.
7
7
  *
8
- * @param multiProvider - MinimalProviderRegistry instance
8
+ * @param multiProvider - Provider registry with chain metadata and ethers access
9
9
  * @param chainName - Name of the chain
10
10
  * @param logger - Optional logger for warnings
11
11
  * @returns Confirmed block tag (number, named tag, or undefined on error)
12
12
  */
13
- export declare function getConfirmedBlockTag(multiProvider: MinimalProviderRegistry, chainName: string, logger?: Logger): Promise<ConfirmedBlockTag>;
13
+ export declare function getConfirmedBlockTag(multiProvider: Pick<MultiProtocolProvider, 'getChainMetadata' | 'getEthersV5Provider'>, chainName: string, logger?: Logger): Promise<ConfirmedBlockTag>;
14
14
  //# sourceMappingURL=blockTag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blockTag.d.ts","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAEpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,uBAAuB,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
1
+ {"version":3,"file":"blockTag.d.ts","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,IAAI,CACjB,qBAAqB,EACrB,kBAAkB,GAAG,qBAAqB,CAC3C,EACD,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
@@ -4,7 +4,7 @@ import { ProtocolType } from '@hyperlane-xyz/utils';
4
4
  * Get the confirmed block tag for a chain, accounting for reorg period.
5
5
  * Returns a block number that is safe from reorgs, or a named tag like 'finalized'.
6
6
  *
7
- * @param multiProvider - MinimalProviderRegistry instance
7
+ * @param multiProvider - Provider registry with chain metadata and ethers access
8
8
  * @param chainName - Name of the chain
9
9
  * @param logger - Optional logger for warnings
10
10
  * @returns Confirmed block tag (number, named tag, or undefined on error)
@@ -1 +1 @@
1
- {"version":3,"file":"blockTag.js","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAsC,EACtC,SAAiB,EACjB,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE3D,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;QACvD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,WAA0C,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,WAAmB,CAAC;QACxB,IAAI,QAAQ,YAAY,SAAS,CAAC,eAAe,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAClE,IACE,OAAO,cAAc,KAAK,QAAQ;gBAClC,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EACxC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,wCAAwC,SAAS,KAAK,cAAc,EAAE,CACvE,CAAC;YACJ,CAAC;YACD,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,KAAK,cAAc,EAAE,CACxE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,IAAI,CACV,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EACrD,6CAA6C,CAC9C,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"blockTag.js","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMnC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAGC,EACD,SAAiB,EACjB,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE3D,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;QACvD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,WAA0C,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,WAAmB,CAAC;QACxB,IAAI,QAAQ,YAAY,SAAS,CAAC,eAAe,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAClE,IACE,OAAO,cAAc,KAAK,QAAQ;gBAClC,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EACxC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,wCAAwC,SAAS,KAAK,cAAc,EAAE,CACvE,CAAC;YACJ,CAAC;YACD,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,KAAK,cAAc,EAAE,CACxE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,IAAI,CACV,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EACrD,6CAA6C,CAC9C,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperlane-xyz/rebalancer",
3
- "version": "27.2.12",
3
+ "version": "27.2.14",
4
4
  "description": "Hyperlane Warp Route Collateral Rebalancer Service",
5
5
  "keywords": [
6
6
  "blockchain",
@@ -43,10 +43,10 @@
43
43
  "zod": "^3.21.2",
44
44
  "zod-validation-error": "^3.3.0",
45
45
  "@hyperlane-xyz/core": "11.3.1",
46
- "@hyperlane-xyz/metrics": "0.2.18",
47
- "@hyperlane-xyz/provider-sdk": "5.0.2",
48
- "@hyperlane-xyz/sdk": "33.0.0",
49
- "@hyperlane-xyz/utils": "33.0.0"
46
+ "@hyperlane-xyz/metrics": "0.2.20",
47
+ "@hyperlane-xyz/provider-sdk": "5.1.0",
48
+ "@hyperlane-xyz/sdk": "33.0.2",
49
+ "@hyperlane-xyz/utils": "33.0.2"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@ethersproject/constants": "*",
@@ -66,8 +66,8 @@
66
66
  "testcontainers": "11.12.0",
67
67
  "tsx": "^4.19.1",
68
68
  "typescript": "6.0.2",
69
- "@hyperlane-xyz/relayer": "1.1.25",
70
- "@hyperlane-xyz/tsconfig": "^33.0.0"
69
+ "@hyperlane-xyz/relayer": "1.1.27",
70
+ "@hyperlane-xyz/tsconfig": "^33.0.2"
71
71
  },
72
72
  "engines": {
73
73
  "node": ">=18"
@@ -557,6 +557,49 @@ describe('LiFiBridge.quote() input validation', function () {
557
557
  });
558
558
  });
559
559
 
560
+ describe('LiFiBridge.quote() routing policy', function () {
561
+ let bridge: LiFiBridge;
562
+
563
+ beforeEach(() => {
564
+ bridge = new LiFiBridge(BRIDGE_CONFIG, testLogger);
565
+ });
566
+
567
+ it('should use RECOMMENDED order for reverse toAmount quotes', async () => {
568
+ const originalFetch = globalThis.fetch;
569
+ let requestUrl = '';
570
+
571
+ globalThis.fetch = (async (input: URL | RequestInfo) => {
572
+ requestUrl = String(input);
573
+ return {
574
+ ok: true,
575
+ json: async () =>
576
+ createLiFiStep({
577
+ toChainId: 1151111081099710,
578
+ toAmount: '5000000000',
579
+ }),
580
+ } as Response;
581
+ }) as typeof fetch;
582
+
583
+ try {
584
+ const quote = await bridge.quote({
585
+ fromChain: 42161,
586
+ toChain: 1151111081099710,
587
+ fromToken: TOKEN_ADDR,
588
+ toToken: TOKEN_ADDR,
589
+ fromAddress: SENDER_ADDR,
590
+ toAddress: SENDER_ADDR,
591
+ toAmount: 5000000000n,
592
+ });
593
+ const params = new URL(requestUrl).searchParams;
594
+
595
+ expect(params.get('order')).to.equal('RECOMMENDED');
596
+ expect(quote.requestParams.toAmount).to.equal(5000000000n);
597
+ } finally {
598
+ globalThis.fetch = originalFetch;
599
+ }
600
+ });
601
+ });
602
+
560
603
  describe('LiFiBridge.getStatus()', function () {
561
604
  let bridge: LiFiBridge;
562
605
 
@@ -381,7 +381,7 @@ export class LiFiBridge implements IExternalBridge {
381
381
  slippage: (params.slippage ?? this.config.defaultSlippage ?? 0.005)
382
382
  .toFixed(4)
383
383
  .replace(/\.?0+$/, ''),
384
- order: 'CHEAPEST',
384
+ order: 'RECOMMENDED',
385
385
  integrator: this.config.integrator,
386
386
  });
387
387