@mento-protocol/mento-sdk 3.0.0-beta.5 → 3.0.0-beta.7

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 (99) hide show
  1. package/README.md +34 -0
  2. package/dist/cache/routes.d.ts.map +1 -1
  3. package/dist/cache/routes.js +5 -3
  4. package/dist/cache/routes.js.map +1 -1
  5. package/dist/core/abis/erc20.d.ts +7 -0
  6. package/dist/core/abis/erc20.d.ts.map +1 -1
  7. package/dist/core/abis/erc20.js +7 -0
  8. package/dist/core/abis/erc20.js.map +1 -1
  9. package/dist/core/abis/fpmm.d.ts +38 -0
  10. package/dist/core/abis/fpmm.d.ts.map +1 -1
  11. package/dist/core/abis/fpmm.js +1 -0
  12. package/dist/core/abis/fpmm.js.map +1 -1
  13. package/dist/core/constants/aaveConfig.js +2 -2
  14. package/dist/core/constants/addresses.d.ts.map +1 -1
  15. package/dist/core/constants/addresses.js +3 -1
  16. package/dist/core/constants/addresses.js.map +1 -1
  17. package/dist/core/types/index.d.ts +2 -1
  18. package/dist/core/types/index.d.ts.map +1 -1
  19. package/dist/core/types/index.js +2 -1
  20. package/dist/core/types/index.js.map +1 -1
  21. package/dist/core/types/pool.d.ts +4 -0
  22. package/dist/core/types/pool.d.ts.map +1 -1
  23. package/dist/core/types/provider.d.ts.map +1 -1
  24. package/dist/core/types/provider.js +0 -1
  25. package/dist/core/types/provider.js.map +1 -1
  26. package/dist/core/types/route.d.ts +3 -3
  27. package/dist/core/types/route.d.ts.map +1 -1
  28. package/dist/core/types/token.d.ts +13 -3
  29. package/dist/core/types/token.d.ts.map +1 -1
  30. package/dist/core/types/tradingLimits.d.ts +91 -0
  31. package/dist/core/types/tradingLimits.d.ts.map +1 -0
  32. package/dist/core/types/tradingLimits.js +3 -0
  33. package/dist/core/types/tradingLimits.js.map +1 -0
  34. package/dist/core/types/transaction.d.ts +45 -0
  35. package/dist/core/types/transaction.d.ts.map +1 -0
  36. package/dist/core/types/transaction.js +3 -0
  37. package/dist/core/types/transaction.js.map +1 -0
  38. package/dist/index.d.ts +10 -4
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +10 -4
  41. package/dist/index.js.map +1 -1
  42. package/dist/services/pools/PoolService.d.ts +1 -1
  43. package/dist/services/pools/PoolService.d.ts.map +1 -1
  44. package/dist/services/pools/PoolService.js +20 -12
  45. package/dist/services/pools/PoolService.js.map +1 -1
  46. package/dist/services/quotes/QuoteService.d.ts +21 -12
  47. package/dist/services/quotes/QuoteService.d.ts.map +1 -1
  48. package/dist/services/quotes/QuoteService.js +23 -11
  49. package/dist/services/quotes/QuoteService.js.map +1 -1
  50. package/dist/services/routes/RouteService.d.ts +3 -3
  51. package/dist/services/routes/RouteService.d.ts.map +1 -1
  52. package/dist/services/routes/RouteService.js +3 -5
  53. package/dist/services/routes/RouteService.js.map +1 -1
  54. package/dist/services/swap/SwapService.d.ts +18 -14
  55. package/dist/services/swap/SwapService.d.ts.map +1 -1
  56. package/dist/services/swap/SwapService.js +31 -14
  57. package/dist/services/swap/SwapService.js.map +1 -1
  58. package/dist/services/tokens/supplyAdjustmentService.d.ts +0 -4
  59. package/dist/services/tokens/supplyAdjustmentService.d.ts.map +1 -1
  60. package/dist/services/tokens/supplyAdjustmentService.js +3 -8
  61. package/dist/services/tokens/supplyAdjustmentService.js.map +1 -1
  62. package/dist/services/tokens/tokenService.d.ts.map +1 -1
  63. package/dist/services/tokens/tokenService.js +2 -2
  64. package/dist/services/tokens/tokenService.js.map +1 -1
  65. package/dist/services/trading/TradingLimitsService.d.ts +38 -0
  66. package/dist/services/trading/TradingLimitsService.d.ts.map +1 -0
  67. package/dist/services/trading/TradingLimitsService.js +157 -0
  68. package/dist/services/trading/TradingLimitsService.js.map +1 -0
  69. package/dist/services/trading/TradingService.d.ts +39 -5
  70. package/dist/services/trading/TradingService.d.ts.map +1 -1
  71. package/dist/services/trading/TradingService.js +56 -4
  72. package/dist/services/trading/TradingService.js.map +1 -1
  73. package/dist/services/trading/index.d.ts +1 -0
  74. package/dist/services/trading/index.d.ts.map +1 -1
  75. package/dist/services/trading/index.js +1 -0
  76. package/dist/services/trading/index.js.map +1 -1
  77. package/dist/utils/costUtils.js +4 -4
  78. package/dist/utils/costUtils.js.map +1 -1
  79. package/dist/utils/index.d.ts +1 -0
  80. package/dist/utils/index.d.ts.map +1 -1
  81. package/dist/utils/index.js +1 -0
  82. package/dist/utils/index.js.map +1 -1
  83. package/dist/utils/pathEncoder.d.ts +3 -2
  84. package/dist/utils/pathEncoder.d.ts.map +1 -1
  85. package/dist/utils/pathEncoder.js +19 -3
  86. package/dist/utils/pathEncoder.js.map +1 -1
  87. package/dist/utils/routeUtils.d.ts +53 -53
  88. package/dist/utils/routeUtils.d.ts.map +1 -1
  89. package/dist/utils/routeUtils.js +41 -41
  90. package/dist/utils/routeUtils.js.map +1 -1
  91. package/dist/utils/tradingLimits.d.ts +41 -0
  92. package/dist/utils/tradingLimits.d.ts.map +1 -0
  93. package/dist/utils/tradingLimits.js +171 -0
  94. package/dist/utils/tradingLimits.js.map +1 -0
  95. package/dist/utils/validation.d.ts +19 -0
  96. package/dist/utils/validation.d.ts.map +1 -0
  97. package/dist/utils/validation.js +34 -0
  98. package/dist/utils/validation.js.map +1 -0
  99. package/package.json +1 -1
@@ -71,6 +71,8 @@ class TokenService {
71
71
  functionName: 'getTokens',
72
72
  args: [],
73
73
  }));
74
+ // TODO: Once we have a cached mapping of stableToken -> addressRegistry we can
75
+ // use that to get the token addresses.
74
76
  const tokens = [];
75
77
  for (const address of tokenAddresses) {
76
78
  const metadata = await this.getTokenMetadata(address);
@@ -91,7 +93,6 @@ class TokenService {
91
93
  }
92
94
  return tokens;
93
95
  }
94
- // TODO: V3 - How does USD.m fit in here?
95
96
  /**
96
97
  * Get all collateral assets from exchanges
97
98
  * Filters tokens that are marked as collateral in the Reserve contract
@@ -100,7 +101,6 @@ class TokenService {
100
101
  async getCollateralAssets() {
101
102
  const biPoolManagerAddress = (0, constants_1.getContractAddress)(this.chainId, constants_1.BIPOOLMANAGER);
102
103
  const reserveAddress = (0, constants_1.getContractAddress)(this.chainId, constants_1.RESERVE);
103
- // TODO: V3 - Should instead use the factories.
104
104
  // Get all exchanges to find unique token addresses
105
105
  const exchanges = (await (0, utils_1.retryOperation)(() => this.publicClient.readContract({
106
106
  address: biPoolManagerAddress,
@@ -1 +1 @@
1
- {"version":3,"file":"tokenService.js","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenService.js","sourceRoot":"","sources":["../../../src/services/tokens/tokenService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { PublicClient } from 'viem';
2
+ import type { Pool, TradingLimit } from '../../core/types';
3
+ /**
4
+ * Service for querying trading limits from the Mento protocol.
5
+ * Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
6
+ */
7
+ export declare class TradingLimitsService {
8
+ private publicClient;
9
+ private chainId;
10
+ constructor(publicClient: PublicClient, chainId: number);
11
+ /**
12
+ * Get trading limits for a pool.
13
+ * Returns an array of TradingLimit objects for each configured limit.
14
+ *
15
+ * @param pool - The pool to get trading limits for
16
+ * @returns Array of TradingLimit objects with maxIn/maxOut/until
17
+ */
18
+ getPoolTradingLimits(pool: Pool): Promise<TradingLimit[]>;
19
+ /**
20
+ * Get trading limits for an FPMM pool.
21
+ * FPMM pools use TradingLimitsV2 with fixed timeframes.
22
+ */
23
+ private getFPMMTradingLimits;
24
+ /**
25
+ * Get trading limits for a specific token in an FPMM pool.
26
+ */
27
+ private getFPMMTokenLimits;
28
+ /**
29
+ * Get trading limits for a Virtual pool.
30
+ * Virtual pools use TradingLimitsV1 via the Broker contract.
31
+ */
32
+ private getVirtualPoolTradingLimits;
33
+ /**
34
+ * Get trading limits for a specific token in a Virtual pool.
35
+ */
36
+ private getVirtualPoolTokenLimits;
37
+ }
38
+ //# sourceMappingURL=TradingLimitsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingLimitsService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,MAAM,CAAA;AAC5C,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EAKb,MAAM,kBAAkB,CAAA;AAYzB;;;GAGG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;gBADP,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM;IAGzB;;;;;;OAMG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ/D;;;OAGG;YACW,oBAAoB;IAelC;;OAEG;YACW,kBAAkB;IA0ChC;;;OAGG;YACW,2BAA2B;IAoBzC;;OAEG;YACW,yBAAyB;CA4DxC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TradingLimitsService = void 0;
4
+ const types_1 = require("../../core/types");
5
+ const abis_1 = require("../../core/abis");
6
+ const constants_1 = require("../../core/constants");
7
+ const tradingLimits_1 = require("../../utils/tradingLimits");
8
+ /**
9
+ * Service for querying trading limits from the Mento protocol.
10
+ * Supports both FPMM pools (TradingLimitsV2) and Virtual pools (TradingLimitsV1).
11
+ */
12
+ class TradingLimitsService {
13
+ constructor(publicClient, chainId) {
14
+ this.publicClient = publicClient;
15
+ this.chainId = chainId;
16
+ }
17
+ /**
18
+ * Get trading limits for a pool.
19
+ * Returns an array of TradingLimit objects for each configured limit.
20
+ *
21
+ * @param pool - The pool to get trading limits for
22
+ * @returns Array of TradingLimit objects with maxIn/maxOut/until
23
+ */
24
+ async getPoolTradingLimits(pool) {
25
+ if (pool.poolType === types_1.PoolType.FPMM) {
26
+ return this.getFPMMTradingLimits(pool);
27
+ }
28
+ else {
29
+ return this.getVirtualPoolTradingLimits(pool);
30
+ }
31
+ }
32
+ /**
33
+ * Get trading limits for an FPMM pool.
34
+ * FPMM pools use TradingLimitsV2 with fixed timeframes.
35
+ */
36
+ async getFPMMTradingLimits(pool) {
37
+ const limits = [];
38
+ // Get trading limits for both tokens
39
+ const [token0Limits, token1Limits] = await Promise.all([
40
+ this.getFPMMTokenLimits(pool.poolAddr, pool.token0),
41
+ this.getFPMMTokenLimits(pool.poolAddr, pool.token1),
42
+ ]);
43
+ limits.push(...token0Limits);
44
+ limits.push(...token1Limits);
45
+ return limits;
46
+ }
47
+ /**
48
+ * Get trading limits for a specific token in an FPMM pool.
49
+ */
50
+ async getFPMMTokenLimits(poolAddr, token) {
51
+ try {
52
+ const result = await this.publicClient.readContract({
53
+ address: poolAddr,
54
+ abi: abis_1.FPMM_ABI,
55
+ functionName: 'getTradingLimits',
56
+ args: [token],
57
+ });
58
+ // Result is a tuple: [config, state]
59
+ const [configTuple, stateTuple] = result;
60
+ const config = {
61
+ limit0: configTuple.limit0,
62
+ limit1: configTuple.limit1,
63
+ decimals: configTuple.decimals,
64
+ };
65
+ const state = {
66
+ lastUpdated0: Number(stateTuple.lastUpdated0),
67
+ lastUpdated1: Number(stateTuple.lastUpdated1),
68
+ netflow0: stateTuple.netflow0,
69
+ netflow1: stateTuple.netflow1,
70
+ };
71
+ if (!(0, tradingLimits_1.hasConfiguredLimitsV2)(config)) {
72
+ return [];
73
+ }
74
+ return (0, tradingLimits_1.calculateTradingLimitsV2)(config, state, token);
75
+ }
76
+ catch {
77
+ // Token may not have limits configured, or invalid token
78
+ return [];
79
+ }
80
+ }
81
+ /**
82
+ * Get trading limits for a Virtual pool.
83
+ * Virtual pools use TradingLimitsV1 via the Broker contract.
84
+ */
85
+ async getVirtualPoolTradingLimits(pool) {
86
+ if (!pool.exchangeId) {
87
+ console.warn(`Virtual pool ${pool.poolAddr} missing exchangeId - cannot query trading limits`);
88
+ return [];
89
+ }
90
+ const limits = [];
91
+ // Get trading limits for both tokens
92
+ const [token0Limits, token1Limits] = await Promise.all([
93
+ this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token0),
94
+ this.getVirtualPoolTokenLimits(pool.exchangeId, pool.token1),
95
+ ]);
96
+ limits.push(...token0Limits);
97
+ limits.push(...token1Limits);
98
+ return limits;
99
+ }
100
+ /**
101
+ * Get trading limits for a specific token in a Virtual pool.
102
+ */
103
+ async getVirtualPoolTokenLimits(exchangeId, token) {
104
+ const brokerAddr = (0, constants_1.getContractAddress)(this.chainId, 'Broker');
105
+ const limitId = (0, tradingLimits_1.computeLimitId)(exchangeId, token);
106
+ try {
107
+ // Fetch config and state in parallel
108
+ const [configResult, stateResult] = await Promise.all([
109
+ this.publicClient.readContract({
110
+ address: brokerAddr,
111
+ abi: abis_1.BROKER_ABI,
112
+ functionName: 'tradingLimitsConfig',
113
+ args: [limitId],
114
+ }),
115
+ this.publicClient.readContract({
116
+ address: brokerAddr,
117
+ abi: abis_1.BROKER_ABI,
118
+ functionName: 'tradingLimitsState',
119
+ args: [limitId],
120
+ }),
121
+ ]);
122
+ // Parse config result
123
+ const configTuple = configResult;
124
+ const config = {
125
+ timestep0: Number(configTuple[0]),
126
+ timestep1: Number(configTuple[1]),
127
+ limit0: configTuple[2],
128
+ limit1: configTuple[3],
129
+ limitGlobal: configTuple[4],
130
+ flags: Number(configTuple[5]),
131
+ };
132
+ // Parse state result
133
+ const stateTuple = stateResult;
134
+ const state = {
135
+ lastUpdated0: Number(stateTuple[0]),
136
+ lastUpdated1: Number(stateTuple[1]),
137
+ netflow0: stateTuple[2],
138
+ netflow1: stateTuple[3],
139
+ netflowGlobal: stateTuple[4],
140
+ };
141
+ // Only return limits if configured
142
+ if (!(0, tradingLimits_1.hasConfiguredLimitsV1)(config)) {
143
+ return [];
144
+ }
145
+ // Get token decimals (V1 uses 0 decimals internally, but we track token decimals for display)
146
+ // For now, return 0 as the reference - consumers should query token decimals separately
147
+ const tokenDecimals = 0; // V1 stores values with 0 decimal precision
148
+ return (0, tradingLimits_1.calculateTradingLimitsV1)(config, state, token, tokenDecimals);
149
+ }
150
+ catch {
151
+ // Trading limits may not be configured for this token
152
+ return [];
153
+ }
154
+ }
155
+ }
156
+ exports.TradingLimitsService = TradingLimitsService;
157
+ //# sourceMappingURL=TradingLimitsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingLimitsService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingLimitsService.ts"],"names":[],"mappings":";;;AASA,4CAA2C;AAC3C,0CAAsD;AACtD,oDAAkE;AAClE,6DAMkC;AAElC;;;GAGG;AACH,MAAa,oBAAoB;IAC/B,YACU,YAA0B,EAC1B,OAAe;QADf,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAQ;IACtB,CAAC;IAEJ;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAU;QACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,oBAAoB,CAAC,IAAU;QAC3C,MAAM,MAAM,GAAmB,EAAE,CAAA;QAEjC,qCAAqC;QACrC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACnD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;SACpD,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAE5B,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,QAAgB,EAChB,KAAa;QAEb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAClD,OAAO,EAAE,QAAmB;gBAC5B,GAAG,EAAE,eAAQ;gBACb,YAAY,EAAE,kBAAkB;gBAChC,IAAI,EAAE,CAAC,KAAgB,CAAC;aACzB,CAAC,CAAA;YAEF,qCAAqC;YACrC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAGjC,CAAA;YAED,MAAM,MAAM,GAA0B;gBACpC,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;aAC/B,CAAA;YAED,MAAM,KAAK,GAAyB;gBAClC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC7C,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC7C,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAA;YAED,IAAI,CAAC,IAAA,qCAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAA;YACX,CAAC;YAED,OAAO,IAAA,wCAAwB,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,2BAA2B,CAAC,IAAU;QAClD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,mDAAmD,CAAC,CAAA;YAC9F,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,MAAM,GAAmB,EAAE,CAAA;QAEjC,qCAAqC;QACrC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YAC5D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;SAC7D,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAE5B,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB,CACrC,UAAkB,EAClB,KAAa;QAEb,MAAM,UAAU,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,QAAQ,CAAC,CAAA;QACxE,MAAM,OAAO,GAAG,IAAA,8BAAc,EAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAEjD,IAAI,CAAC;YACH,qCAAqC;YACrC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;oBAC7B,OAAO,EAAE,UAAqB;oBAC9B,GAAG,EAAE,iBAAU;oBACf,YAAY,EAAE,qBAAqB;oBACnC,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;oBAC7B,OAAO,EAAE,UAAqB;oBAC9B,GAAG,EAAE,iBAAU;oBACf,YAAY,EAAE,oBAAoB;oBAClC,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB,CAAC;aACH,CAAC,CAAA;YAEF,sBAAsB;YACtB,MAAM,WAAW,GAAG,YAAgE,CAAA;YACpF,MAAM,MAAM,GAA0B;gBACpC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;gBACtB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;gBACtB,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;gBAC3B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC9B,CAAA;YAED,qBAAqB;YACrB,MAAM,UAAU,GAAG,WAAuD,CAAA;YAC1E,MAAM,KAAK,GAAyB;gBAClC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACnC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;gBACvB,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;aAC7B,CAAA;YAED,mCAAmC;YACnC,IAAI,CAAC,IAAA,qCAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAA;YACX,CAAC;YAED,8FAA8F;YAC9F,wFAAwF;YACxF,MAAM,aAAa,GAAG,CAAC,CAAA,CAAC,4CAA4C;YAEpE,OAAO,IAAA,wCAAwB,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;YACtD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;CACF;AA5KD,oDA4KC"}
@@ -1,15 +1,16 @@
1
1
  import { PublicClient } from 'viem';
2
- import { Route } from '../../core/types';
2
+ import { Route, Pool, TradingLimit, PoolTradabilityStatus } from '../../core/types';
3
3
  import { RouteService } from '../routes';
4
4
  /**
5
5
  * Service for checking trading status and circuit breaker state in the Mento protocol.
6
6
  * Provides methods to query whether trading is enabled for specific rate feeds,
7
- * token pairs, or routes.
7
+ * token pairs, or routes. Also integrates trading limit checks.
8
8
  */
9
9
  export declare class TradingService {
10
10
  private publicClient;
11
11
  private chainId;
12
12
  private routeService;
13
+ private tradingLimitsService;
13
14
  constructor(publicClient: PublicClient, chainId: number, routeService: RouteService);
14
15
  /**
15
16
  * Returns the current trading mode for a given rate feed.
@@ -41,7 +42,7 @@ export declare class TradingService {
41
42
  *
42
43
  * @example
43
44
  * ```typescript
44
- * const isTradable = await tradingService.isPairTradable(cUSD, CELO)
45
+ * const isTradable = await tradingService.isPairTradable(USDm, CELO)
45
46
  * if (!isTradable) {
46
47
  * console.log('Trading is currently suspended for this pair')
47
48
  * }
@@ -63,14 +64,47 @@ export declare class TradingService {
63
64
  * ```
64
65
  */
65
66
  isRouteTradable(route: Route): Promise<boolean>;
67
+ /**
68
+ * Get trading limits for a pool.
69
+ *
70
+ * @param pool - The pool to get trading limits for
71
+ * @returns Array of TradingLimit objects with maxIn/maxOut/until
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const limits = await tradingService.getPoolTradingLimits(pool)
76
+ * limits.forEach(limit => {
77
+ * console.log(`${limit.asset}: maxIn=${limit.maxIn}, maxOut=${limit.maxOut}`)
78
+ * })
79
+ * ```
80
+ */
81
+ getPoolTradingLimits(pool: Pool): Promise<TradingLimit[]>;
82
+ /**
83
+ * Get complete tradability status for a pool.
84
+ * Returns separate flags for circuit breaker and trading limits,
85
+ * allowing frontends to show different messages for each condition.
86
+ *
87
+ * @param pool - The pool to check
88
+ * @returns PoolTradabilityStatus with tradable, circuitBreakerOk, limitsOk, and limits
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const status = await tradingService.getPoolTradabilityStatus(pool)
93
+ * if (!status.circuitBreakerOk) {
94
+ * showModal("Trading temporarily suspended (circuit breaker)")
95
+ * } else if (!status.limitsOk) {
96
+ * showModal("Trading limit reached", status.limits)
97
+ * }
98
+ * ```
99
+ */
100
+ getPoolTradabilityStatus(pool: Pool): Promise<PoolTradabilityStatus>;
66
101
  /**
67
102
  * Get the reference rate feed ID for a pool.
68
103
  * Both FPMM and Virtual pools expose this via the referenceRateFeedID() view function.
69
104
  *
70
105
  * @param pool - The pool to get rate feed ID for
71
106
  * @returns The rate feed ID address
72
- * @private
73
107
  */
74
- private getPoolRateFeedId;
108
+ getPoolRateFeedId(pool: Pool): Promise<string>;
75
109
  }
76
110
  //# sourceMappingURL=TradingService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TradingService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,EAAiC,KAAK,EAAQ,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAMxC;;;;GAIG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;gBAFZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY;IAGpC;;;;;;;;;;;;;;;;OAgBG;IACG,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAajE;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzE;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrD;;;;;;;OAOG;YACW,iBAAiB;CAShC"}
1
+ {"version":3,"file":"TradingService.d.ts","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,EAEL,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,qBAAqB,EACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAKxC;;;;GAIG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,oBAAoB,CAAsB;gBAGxC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY;IAKpC;;;;;;;;;;;;;;;;OAgBG;IACG,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAajE;;;;;;;;;;;;;;;;;OAiBG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzE;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrD;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI/D;;;;;;;;;;;;;;;;;OAiBG;IACG,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAqB1E;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CASrD"}
@@ -2,19 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TradingService = void 0;
4
4
  const types_1 = require("../../core/types");
5
+ const TradingLimitsService_1 = require("./TradingLimitsService");
5
6
  const abis_1 = require("../../core/abis");
6
7
  const constants_1 = require("../../core/constants");
7
- // TODO: Could be expanded to include trading limit checks
8
8
  /**
9
9
  * Service for checking trading status and circuit breaker state in the Mento protocol.
10
10
  * Provides methods to query whether trading is enabled for specific rate feeds,
11
- * token pairs, or routes.
11
+ * token pairs, or routes. Also integrates trading limit checks.
12
12
  */
13
13
  class TradingService {
14
14
  constructor(publicClient, chainId, routeService) {
15
15
  this.publicClient = publicClient;
16
16
  this.chainId = chainId;
17
17
  this.routeService = routeService;
18
+ this.tradingLimitsService = new TradingLimitsService_1.TradingLimitsService(publicClient, chainId);
18
19
  }
19
20
  /**
20
21
  * Returns the current trading mode for a given rate feed.
@@ -55,7 +56,7 @@ class TradingService {
55
56
  *
56
57
  * @example
57
58
  * ```typescript
58
- * const isTradable = await tradingService.isPairTradable(cUSD, CELO)
59
+ * const isTradable = await tradingService.isPairTradable(USDm, CELO)
59
60
  * if (!isTradable) {
60
61
  * console.log('Trading is currently suspended for this pair')
61
62
  * }
@@ -89,13 +90,64 @@ class TradingService {
89
90
  // All rate feeds must have trading enabled for the route to be tradable
90
91
  return rateFeedChecks.every((isEnabled) => isEnabled);
91
92
  }
93
+ /**
94
+ * Get trading limits for a pool.
95
+ *
96
+ * @param pool - The pool to get trading limits for
97
+ * @returns Array of TradingLimit objects with maxIn/maxOut/until
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const limits = await tradingService.getPoolTradingLimits(pool)
102
+ * limits.forEach(limit => {
103
+ * console.log(`${limit.asset}: maxIn=${limit.maxIn}, maxOut=${limit.maxOut}`)
104
+ * })
105
+ * ```
106
+ */
107
+ async getPoolTradingLimits(pool) {
108
+ return this.tradingLimitsService.getPoolTradingLimits(pool);
109
+ }
110
+ /**
111
+ * Get complete tradability status for a pool.
112
+ * Returns separate flags for circuit breaker and trading limits,
113
+ * allowing frontends to show different messages for each condition.
114
+ *
115
+ * @param pool - The pool to check
116
+ * @returns PoolTradabilityStatus with tradable, circuitBreakerOk, limitsOk, and limits
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const status = await tradingService.getPoolTradabilityStatus(pool)
121
+ * if (!status.circuitBreakerOk) {
122
+ * showModal("Trading temporarily suspended (circuit breaker)")
123
+ * } else if (!status.limitsOk) {
124
+ * showModal("Trading limit reached", status.limits)
125
+ * }
126
+ * ```
127
+ */
128
+ async getPoolTradabilityStatus(pool) {
129
+ const [rateFeedId, limits] = await Promise.all([
130
+ this.getPoolRateFeedId(pool),
131
+ this.tradingLimitsService.getPoolTradingLimits(pool),
132
+ ]);
133
+ const tradingMode = await this.getRateFeedTradingMode(rateFeedId);
134
+ const circuitBreakerOk = (0, types_1.isTradingEnabled)(tradingMode);
135
+ // Limits are OK if no limits configured OR all limits have capacity
136
+ const limitsOk = limits.length === 0 || limits.every((l) => l.maxIn > 0n && l.maxOut > 0n);
137
+ return {
138
+ tradable: circuitBreakerOk && limitsOk,
139
+ circuitBreakerOk,
140
+ tradingMode,
141
+ limitsOk,
142
+ limits,
143
+ };
144
+ }
92
145
  /**
93
146
  * Get the reference rate feed ID for a pool.
94
147
  * Both FPMM and Virtual pools expose this via the referenceRateFeedID() view function.
95
148
  *
96
149
  * @param pool - The pool to get rate feed ID for
97
150
  * @returns The rate feed ID address
98
- * @private
99
151
  */
100
152
  async getPoolRateFeedId(pool) {
101
153
  const rateFeedId = await this.publicClient.readContract({
@@ -1 +1 @@
1
- {"version":3,"file":"TradingService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":";;;AACA,4CAA6E;AAE7E,0CAA0D;AAC1D,oDAAkE;AAElE,0DAA0D;AAE1D;;;;GAIG;AACH,MAAa,cAAc;IACzB,YACU,YAA0B,EAC1B,OAAe,EACf,YAA0B;QAF1B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAc;IACjC,CAAC;IAEJ;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,sBAAsB,CAAC,UAAkB;QAC7C,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,OAAkB,EAAE,YAAY,CAAC,CAAA;QAEhF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAChD,OAAO,EAAE,cAA+B;YACxC,GAAG,EAAE,qBAAc;YACnB,YAAY,EAAE,wBAAwB;YACtC,IAAI,EAAE,CAAC,UAA2B,CAAC;SACpC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,QAAgB;QACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAClE,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,eAAe,CAAC,KAAY;QAChC,sEAAsE;QACtE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YACrD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAA;YACjE,OAAO,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAA;QACtC,CAAC,CAAC,CACH,CAAA;QAED,wEAAwE;QACxE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAA;IACvD,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,iBAAiB,CAAC,IAAU;QACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACtD,OAAO,EAAE,IAAI,CAAC,QAAyB;YACvC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAA;QAEF,OAAO,UAAoB,CAAA;IAC7B,CAAC;CACF;AAzGD,wCAyGC"}
1
+ {"version":3,"file":"TradingService.js","sourceRoot":"","sources":["../../../src/services/trading/TradingService.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export * from './TradingService';
2
+ export * from './TradingLimitsService';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA"}
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./TradingService"), exports);
18
+ __exportStar(require("./TradingLimitsService"), exports);
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/trading/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAgC;AAChC,yDAAsC"}
@@ -40,9 +40,9 @@ async function getFPMMCostPercent(poolAddress, publicClient) {
40
40
  functionName: 'protocolFee',
41
41
  }),
42
42
  ]);
43
- // Convert from basis points to percentage
43
+ // Convert from basis points to percentage, rounded to 8dp for precision
44
44
  const totalBasisPoints = Number(lpFee) + Number(protocolFee);
45
- return totalBasisPoints / 100;
45
+ return Math.round((totalBasisPoints / 100) * 1e8) / 1e8;
46
46
  }
47
47
  /**
48
48
  * Calculate cost for Virtual pools
@@ -53,7 +53,7 @@ async function getVirtualPoolCostPercent(poolAddress, publicClient) {
53
53
  abi: virtualPool_1.VIRTUAL_POOL_ABI,
54
54
  functionName: 'protocolFee',
55
55
  });
56
- //TODO: Confirim calculation
57
- return Number(protocolFee) / 100;
56
+ // Convert from basis points to percentage, rounded to 8dp for precision
57
+ return Math.round((Number(protocolFee) / 100) * 1e8) / 1e8;
58
58
  }
59
59
  //# sourceMappingURL=costUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"costUtils.js","sourceRoot":"","sources":["../../src/utils/costUtils.ts"],"names":[],"mappings":";;AAaA,gDAQC;AArBD,yCAA8C;AAC9C,uCAAuC;AAEvC,0DAA2D;AAE3D;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,YAA0B;IAC7E,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAA0B;IAC/E,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,OAAO;SACtB,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC5D,OAAO,gBAAgB,GAAG,GAAG,CAAA;AAC/B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CAAC,WAAmB,EAAE,YAA0B;IACtF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAClD,OAAO,EAAE,WAA4B;QACrC,GAAG,EAAE,8BAAgB;QACrB,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAA;IAEF,4BAA4B;IAC5B,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA;AAClC,CAAC"}
1
+ {"version":3,"file":"costUtils.js","sourceRoot":"","sources":["../../src/utils/costUtils.ts"],"names":[],"mappings":";;AAaA,gDAQC;AArBD,yCAA8C;AAC9C,uCAAuC;AAEvC,0DAA2D;AAE3D;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAAU,EAAE,YAA0B;IAC7E,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACxD,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAA0B;IAC/E,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,OAAO;SACtB,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,WAA4B;YACrC,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AACzD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CAAC,WAAmB,EAAE,YAA0B;IACtF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;QAClD,OAAO,EAAE,WAA4B;QACrC,GAAG,EAAE,8BAAgB;QACrB,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAA;IAEF,wEAAwE;IACxE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAC5D,CAAC"}
@@ -5,4 +5,5 @@ export * from './sortUtils';
5
5
  export * from './pathEncoder';
6
6
  export * from './tokens';
7
7
  export * from './rateFeed';
8
+ export * from './tradingLimits';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA"}
@@ -21,4 +21,5 @@ __exportStar(require("./sortUtils"), exports);
21
21
  __exportStar(require("./pathEncoder"), exports);
22
22
  __exportStar(require("./tokens"), exports);
23
23
  __exportStar(require("./rateFeed"), exports);
24
+ __exportStar(require("./tradingLimits"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,gDAA6B;AAC7B,2CAAwB;AACxB,8CAA2B;AAC3B,gDAA6B;AAC7B,2CAAwB;AACxB,6CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,gDAA6B;AAC7B,2CAAwB;AACxB,8CAA2B;AAC3B,gDAA6B;AAC7B,2CAAwB;AACxB,6CAA0B;AAC1B,kDAA+B"}
@@ -16,11 +16,12 @@ export interface RouterRoute {
16
16
  * @param tokenIn - The input token address (determines swap direction)
17
17
  * @param _tokenOut - The output token address (unused but kept for API clarity)
18
18
  * @returns Array of RouterRoute objects for the contract call
19
+ * @throws {Error} If path is empty, too long, or contains invalid pools
19
20
  *
20
21
  * @example
21
22
  * ```typescript
22
- * const route = await routeService.findRoute(cUSD, CELO)
23
- * const routerRoutes = encodeRoutePath(route.path, cUSD, CELO)
23
+ * const route = await routeService.findRoute(USDm, CELO)
24
+ * const routerRoutes = encodeRoutePath(route.path, USDm, CELO)
24
25
  * // routerRoutes can now be passed to Router.getAmountsOut or Router.swapTokensForTokens
25
26
  * ```
26
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pathEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CA4CjG"}
1
+ {"version":3,"file":"pathEncoder.d.ts","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,EAAE,CAmEjG"}
@@ -9,15 +9,29 @@ exports.encodeRoutePath = encodeRoutePath;
9
9
  * @param tokenIn - The input token address (determines swap direction)
10
10
  * @param _tokenOut - The output token address (unused but kept for API clarity)
11
11
  * @returns Array of RouterRoute objects for the contract call
12
+ * @throws {Error} If path is empty, too long, or contains invalid pools
12
13
  *
13
14
  * @example
14
15
  * ```typescript
15
- * const route = await routeService.findRoute(cUSD, CELO)
16
- * const routerRoutes = encodeRoutePath(route.path, cUSD, CELO)
16
+ * const route = await routeService.findRoute(USDm, CELO)
17
+ * const routerRoutes = encodeRoutePath(route.path, USDm, CELO)
17
18
  * // routerRoutes can now be passed to Router.getAmountsOut or Router.swapTokensForTokens
18
19
  * ```
19
20
  */
20
21
  function encodeRoutePath(path, tokenIn, _tokenOut) {
22
+ // Validate path is not empty
23
+ if (!path || path.length === 0) {
24
+ throw new Error('Internal error: Route path is empty. This should not happen - routes are validated before encoding.');
25
+ }
26
+ // Validate all pools have required structure
27
+ for (let i = 0; i < path.length; i++) {
28
+ const pool = path[i];
29
+ if (!pool.token0 || !pool.token1 || !pool.factoryAddr) {
30
+ throw new Error(`Invalid pool structure at index ${i}: missing required fields. ` +
31
+ `Pool must have token0, token1, and factoryAddr. ` +
32
+ `Got: ${JSON.stringify(pool)}`);
33
+ }
34
+ }
21
35
  const routes = [];
22
36
  const tokenInLower = tokenIn.toLowerCase();
23
37
  // Check if we need to reverse the path
@@ -42,7 +56,9 @@ function encodeRoutePath(path, tokenIn, _tokenOut) {
42
56
  to = pool.token0;
43
57
  }
44
58
  else {
45
- throw new Error(`Token ${currentTokenIn} not found in pool ${pool.poolAddr}`);
59
+ throw new Error(`Route encoding error: Token ${currentTokenIn} not found in pool ${pool.poolAddr}. ` +
60
+ `Pool contains tokens: ${token0}, ${token1}. ` +
61
+ `This indicates the route path is invalid or tokens don't form a connected path.`);
46
62
  }
47
63
  routes.push({
48
64
  from,
@@ -1 +1 @@
1
- {"version":3,"file":"pathEncoder.js","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":";;AA4BA,0CA4CC;AA5DD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,OAAgB,EAAE,SAAkB;IAChF,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAE1C,uCAAuC;IACvC,kFAAkF;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,iBAAiB,GACrB,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,CAAA;IAEpG,uDAAuD;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAElE,IAAI,cAAc,GAAG,YAAY,CAAA;IAEjC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAExC,8DAA8D;QAC9D,IAAI,IAAa,CAAA;QACjB,IAAI,EAAW,CAAA;QAEf,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,SAAS,cAAc,sBAAsB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,WAAsB;SACrC,CAAC,CAAA;QAEF,2DAA2D;QAC3D,cAAc,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"pathEncoder.js","sourceRoot":"","sources":["../../src/utils/pathEncoder.ts"],"names":[],"mappings":";;AA6BA,0CAmEC;AApFD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,OAAgB,EAAE,SAAkB;IAChF,6BAA6B;IAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAA;IACH,CAAC;IAED,6CAA6C;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,mCAAmC,CAAC,6BAA6B;gBACjE,kDAAkD;gBAClD,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/B,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAE1C,uCAAuC;IACvC,kFAAkF;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,iBAAiB,GACrB,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,YAAY,CAAA;IAEpG,uDAAuD;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAElE,IAAI,cAAc,GAAG,YAAY,CAAA;IAEjC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAExC,8DAA8D;QAC9D,IAAI,IAAa,CAAA;QACjB,IAAI,EAAW,CAAA;QAEf,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,MAAiB,CAAA;YAC7B,EAAE,GAAG,IAAI,CAAC,MAAiB,CAAA;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,+BAA+B,cAAc,sBAAsB,IAAI,CAAC,QAAQ,IAAI;gBACpF,yBAAyB,MAAM,KAAK,MAAM,IAAI;gBAC9C,iFAAiF,CAClF,CAAA;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,WAAsB;SACrC,CAAC,CAAA;QAEF,2DAA2D;QAC3D,cAAc,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}