@gearbox-protocol/sdk 16.0.0-next.49 → 16.0.0-next.50

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 (54) hide show
  1. package/dist/cjs/model/index.js +0 -7
  2. package/dist/cjs/model/previews.js +0 -40
  3. package/dist/cjs/onchain/index.js +2 -0
  4. package/dist/cjs/onchain/market/index.js +2 -0
  5. package/dist/cjs/onchain/market/oracle/errors.js +14 -0
  6. package/dist/cjs/onchain/market/oracle/index.js +2 -0
  7. package/dist/cjs/onchain/validation/checks.js +19 -11
  8. package/dist/cjs/preview/index.js +7 -2
  9. package/dist/cjs/preview/preview/buildDelayedStrategyPositionOperationPreview.js +8 -8
  10. package/dist/cjs/preview/preview/errors.js +77 -9
  11. package/dist/cjs/preview/preview/index.js +7 -2
  12. package/dist/cjs/preview/preview/previewAdjustStrategyPosition.js +7 -7
  13. package/dist/cjs/preview/preview/previewExitOrRepayStrategyPosition.js +10 -10
  14. package/dist/cjs/preview/preview/previewOpenStrategyPosition.js +7 -9
  15. package/dist/cjs/preview/preview/replayInnerOperations.js +15 -37
  16. package/dist/cjs/preview/preview/replayMulticall.js +1 -1
  17. package/dist/cjs/preview/preview/unwrapNativeCollateral.js +4 -9
  18. package/dist/cjs/preview/validate/checkOperation.js +1 -1
  19. package/dist/esm/model/index.js +2 -2
  20. package/dist/esm/model/previews.js +1 -34
  21. package/dist/esm/onchain/index.js +2 -1
  22. package/dist/esm/onchain/market/index.js +2 -1
  23. package/dist/esm/onchain/market/oracle/errors.js +13 -0
  24. package/dist/esm/onchain/market/oracle/index.js +2 -1
  25. package/dist/esm/onchain/validation/checks.js +19 -11
  26. package/dist/esm/preview/index.js +2 -2
  27. package/dist/esm/preview/preview/buildDelayedStrategyPositionOperationPreview.js +8 -8
  28. package/dist/esm/preview/preview/errors.js +72 -9
  29. package/dist/esm/preview/preview/index.js +2 -2
  30. package/dist/esm/preview/preview/previewAdjustStrategyPosition.js +7 -7
  31. package/dist/esm/preview/preview/previewExitOrRepayStrategyPosition.js +10 -10
  32. package/dist/esm/preview/preview/previewOpenStrategyPosition.js +8 -10
  33. package/dist/esm/preview/preview/replayInnerOperations.js +15 -37
  34. package/dist/esm/preview/preview/replayMulticall.js +1 -1
  35. package/dist/esm/preview/preview/unwrapNativeCollateral.js +4 -9
  36. package/dist/esm/preview/validate/checkOperation.js +1 -1
  37. package/dist/types/model/index.d.ts +2 -2
  38. package/dist/types/model/previews.d.ts +78 -49
  39. package/dist/types/onchain/index.d.ts +2 -1
  40. package/dist/types/onchain/market/MarketSuite.d.ts +2 -2
  41. package/dist/types/onchain/market/index.d.ts +2 -1
  42. package/dist/types/onchain/market/oracle/errors.d.ts +19 -0
  43. package/dist/types/onchain/market/oracle/index.d.ts +2 -1
  44. package/dist/types/onchain/validation/checks.d.ts +10 -13
  45. package/dist/types/onchain/validation/refusal.d.ts +4 -6
  46. package/dist/types/preview/index.d.ts +2 -2
  47. package/dist/types/preview/preview/buildDelayedStrategyPositionOperationPreview.d.ts +1 -1
  48. package/dist/types/preview/preview/errors.d.ts +27 -6
  49. package/dist/types/preview/preview/index.d.ts +2 -2
  50. package/dist/types/preview/preview/replayInnerOperations.d.ts +2 -2
  51. package/dist/types/preview/preview/replayMulticall.d.ts +1 -1
  52. package/dist/types/preview/preview/unwrapNativeCollateral.d.ts +4 -5
  53. package/dist/types/sdk/prepare/errors.d.ts +5 -3
  54. package/package.json +1 -1
@@ -27,13 +27,6 @@ const require_model_withdrawals_schema = require("./withdrawals.schema.js");
27
27
  exports.CHART_METRIC_UNITS = require_model_charts.CHART_METRIC_UNITS;
28
28
  exports.CHART_RANGES = require_model_charts.CHART_RANGES;
29
29
  exports.CHART_UNAVAILABLE_CODES = require_model_charts.CHART_UNAVAILABLE_CODES;
30
- exports.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET = require_model_previews.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET;
31
- exports.ERROR_INVALID_TRANSACTION_VALUE = require_model_previews.ERROR_INVALID_TRANSACTION_VALUE;
32
- exports.ERROR_MALFORMED_BRACKET = require_model_previews.ERROR_MALFORMED_BRACKET;
33
- exports.ERROR_NON_ADAPTER_CALL_IN_BRACKET = require_model_previews.ERROR_NON_ADAPTER_CALL_IN_BRACKET;
34
- exports.ERROR_UNPREVIEWABLE_ADAPTER_CALL = require_model_previews.ERROR_UNPREVIEWABLE_ADAPTER_CALL;
35
- exports.ERROR_UNPRICEABLE_TOKEN = require_model_previews.ERROR_UNPRICEABLE_TOKEN;
36
- exports.ERROR_UNSUPPORTED_OUT_OF_BRACKET_CALL = require_model_previews.ERROR_UNSUPPORTED_OUT_OF_BRACKET_CALL;
37
30
  exports.FILTER_ALL = require_model_filters.FILTER_ALL;
38
31
  exports.POOL_OPPORTUNITY_CHART_METRICS = require_model_charts.POOL_OPPORTUNITY_CHART_METRICS;
39
32
  exports.POOL_POSITION_CHART_METRICS = require_model_charts.POOL_POSITION_CHART_METRICS;
@@ -1,39 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region src/model/previews.ts
3
3
  /**
4
- * Broken `storeExpectedBalances`/`compareBalances` bracket structure:
5
- * `storeExpectedBalances` without a matching `compareBalances`, nested
6
- * brackets, or `compareBalances` without a preceding `storeExpectedBalances`.
7
- * We expect transactions that were generated by our frontend using router/withdrawal compressor
8
- **/
9
- const ERROR_MALFORMED_BRACKET = 1001;
10
- /**
11
- * Adapter call outside a `storeExpectedBalances`/`compareBalances` bracket
12
- * We expect transactions that were generated by our frontend using router/withdrawal compressor,
13
- **/
14
- const ERROR_ADAPTER_CALL_OUTSIDE_BRACKET = 1002;
15
- /**
16
- * Bracketed call whose target is not an adapter (or adapter that is not known to the SDK)
17
- **/
18
- const ERROR_NON_ADAPTER_CALL_IN_BRACKET = 1003;
19
- /**
20
- * Bracketed adapter call cannot be replayed (undecodable/unsupported calldata)
21
- **/
22
- const ERROR_UNPREVIEWABLE_ADAPTER_CALL = 1004;
23
- /**
24
- * An out-of-bracket adapter call that is allowed there (e.g. RWA wrap/unwrap)
25
- * could not be decoded or replayed
26
- **/
27
- const ERROR_UNSUPPORTED_OUT_OF_BRACKET_CALL = 1005;
28
- /**
29
- * `msg.value` does not fit into the declared WETH collateral
30
- * Transactions can have arbitrary value, but the ones that we create
31
- * using our frontend should have a value that fits into the declared WETH collateral.
32
- **/
33
- const ERROR_INVALID_TRANSACTION_VALUE = 1006;
34
- /** A token in the preview could not be priced by the oracle */
35
- const ERROR_UNPRICEABLE_TOKEN = 2001;
36
- /**
37
4
  * Renames a projection's routed fields, for a caller that built one from floor
38
5
  * balances.
39
6
  *
@@ -56,11 +23,4 @@ function asEstimated(p) {
56
23
  };
57
24
  }
58
25
  //#endregion
59
- exports.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET = ERROR_ADAPTER_CALL_OUTSIDE_BRACKET;
60
- exports.ERROR_INVALID_TRANSACTION_VALUE = ERROR_INVALID_TRANSACTION_VALUE;
61
- exports.ERROR_MALFORMED_BRACKET = ERROR_MALFORMED_BRACKET;
62
- exports.ERROR_NON_ADAPTER_CALL_IN_BRACKET = ERROR_NON_ADAPTER_CALL_IN_BRACKET;
63
- exports.ERROR_UNPREVIEWABLE_ADAPTER_CALL = ERROR_UNPREVIEWABLE_ADAPTER_CALL;
64
- exports.ERROR_UNPRICEABLE_TOKEN = ERROR_UNPRICEABLE_TOKEN;
65
- exports.ERROR_UNSUPPORTED_OUT_OF_BRACKET_CALL = ERROR_UNSUPPORTED_OUT_OF_BRACKET_CALL;
66
26
  exports.asEstimated = asEstimated;
@@ -172,6 +172,7 @@ const require_onchain_market_pricefeeds_ZeroPriceFeed = require("./market/pricef
172
172
  const require_onchain_market_pricefeeds_PriceFeedsRegister = require("./market/pricefeeds/PriceFeedsRegister.js");
173
173
  const require_onchain_market_oracle_PriceOracleV310Contract = require("./market/oracle/PriceOracleV310Contract.js");
174
174
  const require_onchain_market_oracle_createPriceOracle = require("./market/oracle/createPriceOracle.js");
175
+ const require_onchain_market_oracle_errors = require("./market/oracle/errors.js");
175
176
  const require_onchain_market_pool_GaugeContract = require("./market/pool/GaugeContract.js");
176
177
  const require_onchain_market_pool_LinearInterestRateModelContract = require("./market/pool/LinearInterestRateModelContract.js");
177
178
  const require_onchain_market_pool_PoolV310Contract = require("./market/pool/PoolV310Contract.js");
@@ -708,5 +709,6 @@ exports.toSignificant = require_onchain_utils_formatter.toSignificant;
708
709
  exports.toToken = require_onchain_validation_token.toToken;
709
710
  exports.toTokenAmount = require_onchain_validation_token.toTokenAmount;
710
711
  exports.toWithdrawalStatus = require_onchain_accounts_withdrawal_compressor_types.toWithdrawalStatus;
712
+ exports.unpriceableTokenError = require_onchain_market_oracle_errors.unpriceableTokenError;
711
713
  exports.usdToNumber = require_onchain_market_math.usdToNumber;
712
714
  exports.watchBlocksAsync = require_onchain_utils_viem_watchBlocksAsync.watchBlocksAsync;
@@ -122,6 +122,7 @@ const require_onchain_market_pricefeeds_PriceFeedsRegister = require("./pricefee
122
122
  require("./pricefeeds/index.js");
123
123
  const require_onchain_market_oracle_PriceOracleV310Contract = require("./oracle/PriceOracleV310Contract.js");
124
124
  const require_onchain_market_oracle_createPriceOracle = require("./oracle/createPriceOracle.js");
125
+ const require_onchain_market_oracle_errors = require("./oracle/errors.js");
125
126
  require("./oracle/index.js");
126
127
  const require_onchain_market_pool_GaugeContract = require("./pool/GaugeContract.js");
127
128
  const require_onchain_market_pool_LinearInterestRateModelContract = require("./pool/LinearInterestRateModelContract.js");
@@ -360,4 +361,5 @@ exports.rewardsFromTransfers = require_onchain_market_adapters_transferHelpers.r
360
361
  exports.strategyName = require_onchain_market_strategyName.strategyName;
361
362
  exports.swapFromTransfers = require_onchain_market_adapters_transferHelpers.swapFromTransfers;
362
363
  exports.toNetTransfers = require_onchain_market_adapters_transferHelpers.toNetTransfers;
364
+ exports.unpriceableTokenError = require_onchain_market_oracle_errors.unpriceableTokenError;
363
365
  exports.usdToNumber = require_onchain_market_math.usdToNumber;
@@ -0,0 +1,14 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/onchain/market/oracle/errors.ts
3
+ /**
4
+ * Builds an {@link UnpriceableTokenError} for `token`.
5
+ **/
6
+ function unpriceableTokenError(token) {
7
+ return {
8
+ code: "unpriceableToken",
9
+ message: `cannot price token ${token}`,
10
+ token
11
+ };
12
+ }
13
+ //#endregion
14
+ exports.unpriceableTokenError = unpriceableTokenError;
@@ -2,7 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_market_oracle_collateralPriceInUnderlying = require("./collateralPriceInUnderlying.js");
3
3
  const require_onchain_market_oracle_PriceOracleV310Contract = require("./PriceOracleV310Contract.js");
4
4
  const require_onchain_market_oracle_createPriceOracle = require("./createPriceOracle.js");
5
+ const require_onchain_market_oracle_errors = require("./errors.js");
5
6
  require("./types.js");
6
7
  exports.PriceOracleV310Contract = require_onchain_market_oracle_PriceOracleV310Contract.PriceOracleV310Contract;
7
8
  exports.collateralPriceInUnderlying = require_onchain_market_oracle_collateralPriceInUnderlying.collateralPriceInUnderlying;
8
9
  exports.createPriceOracle = require_onchain_market_oracle_createPriceOracle.createPriceOracle;
10
+ exports.unpriceableTokenError = require_onchain_market_oracle_errors.unpriceableTokenError;
@@ -208,24 +208,32 @@ function checkFunding(args) {
208
208
  /**
209
209
  * The SDK could not replay the transaction.
210
210
  *
211
- * Only the 1xxx class lands here. A 2xxx error says the transaction is fine and
212
- * the SDK could not fully evaluate it, which is a caveat on the numbers rather
213
- * than a reason to refuse — it stays on the preview for the caller to surface.
211
+ * Only a {@link MalformedPreviewError} lands here. An `unpriceableToken`
212
+ * warning says the transaction is fine and the SDK could not fully evaluate
213
+ * it, which is a caveat on the numbers rather than a reason to refuse — it
214
+ * stays on the preview for the caller to surface.
214
215
  */
215
- function checkPreviewError(error) {
216
- if (!error || !isMalformedPreviewError(error)) return null;
216
+ function checkPreviewError(warning) {
217
+ if (!warning || !isMalformedPreviewError(warning)) return null;
217
218
  return {
218
219
  reason: "malformedTransaction",
219
- detail: error
220
+ detail: warning
220
221
  };
221
222
  }
222
223
  /**
223
- * The class boundary the preview error codes are written against: 1xxx means
224
- * the transaction itself is malformed, 2xxx that only the evaluation was
225
- * incomplete. A range, so a future 1007 classifies itself.
224
+ * Whether the preview warning means the transaction itself is malformed,
225
+ * rather than that only the evaluation was incomplete.
226
226
  */
227
- function isMalformedPreviewError(error) {
228
- return error.code >= 1e3 && error.code < 2e3;
227
+ function isMalformedPreviewError(warning) {
228
+ switch (warning.code) {
229
+ case "malformedBracket":
230
+ case "adapterCallOutsideBracket":
231
+ case "nonAdapterCallInBracket":
232
+ case "unpreviewableAdapterCall":
233
+ case "unsupportedOutOfBracketCall":
234
+ case "invalidTransactionValue": return true;
235
+ default: return false;
236
+ }
229
237
  }
230
238
  //#endregion
231
239
  exports.MIN_HEALTH_FACTOR_FACADE = MIN_HEALTH_FACTOR_FACADE;
@@ -18,12 +18,12 @@ const require_preview_prerequisites_BalancePrerequisite = require("./prerequisit
18
18
  const require_preview_prerequisites_RWAOpenRequirementsPrerequisite = require("./prerequisites/RWAOpenRequirementsPrerequisite.js");
19
19
  const require_preview_prerequisites_checkPrerequisites = require("./prerequisites/checkPrerequisites.js");
20
20
  require("./prerequisites/index.js");
21
- const require_preview_preview_errors = require("./preview/errors.js");
22
21
  const require_preview_preview_buildDelayedStrategyPositionOperationPreview = require("./preview/buildDelayedStrategyPositionOperationPreview.js");
23
22
  const require_preview_preview_CreditAccountState = require("./preview/CreditAccountState.js");
24
23
  const require_preview_preview_detectCloseOrRepay = require("./preview/detectCloseOrRepay.js");
25
24
  const require_preview_preview_detectDelayedClaim = require("./preview/detectDelayedClaim.js");
26
25
  const require_preview_preview_detectDelayedOperation = require("./preview/detectDelayedOperation.js");
26
+ const require_preview_preview_errors = require("./preview/errors.js");
27
27
  const require_preview_preview_estimateClaimableAt = require("./preview/estimateClaimableAt.js");
28
28
  const require_preview_preview_replayInnerOperations = require("./preview/replayInnerOperations.js");
29
29
  const require_preview_preview_replayMulticall = require("./preview/replayMulticall.js");
@@ -46,6 +46,7 @@ exports.UnexpectedFacadeEventOrderError = require_preview_trace_errors.Unexpecte
46
46
  exports.UnknownAdapterError = require_preview_trace_errors.UnknownAdapterError;
47
47
  exports.UnknownFacadeCallError = require_preview_trace_errors.UnknownFacadeCallError;
48
48
  exports.WithdrawCollateralAlignmentError = require_preview_trace_errors.WithdrawCollateralAlignmentError;
49
+ exports.adapterCallOutsideBracketError = require_preview_preview_errors.adapterCallOutsideBracketError;
49
50
  exports.asPreviewSimulationError = require_preview_simulate_errors.asPreviewSimulationError;
50
51
  exports.buildDelayedStrategyPositionOperationPreview = require_preview_preview_buildDelayedStrategyPositionOperationPreview.buildDelayedStrategyPositionOperationPreview;
51
52
  exports.checkOperation = require_preview_validate_checkOperation.checkOperation;
@@ -60,11 +61,14 @@ exports.estimateClaimableAt = require_preview_preview_estimateClaimableAt.estima
60
61
  exports.extractAdapterCallTraces = require_preview_trace_extractAdapterCallTraces.extractAdapterCallTraces;
61
62
  exports.extractTransfers = require_preview_trace_extractTransfers.extractTransfers;
62
63
  exports.findFacadeCalls = require_preview_trace_findFacadeCalls.findFacadeCalls;
64
+ exports.invalidTransactionValueError = require_preview_preview_errors.invalidTransactionValueError;
63
65
  exports.isCloseOrRepay = require_preview_preview_detectCloseOrRepay.isCloseOrRepay;
64
66
  exports.isPoolOperation = require_preview_parse_types.isPoolOperation;
65
67
  exports.isRWAOperation = require_preview_parse_types.isRWAOperation;
66
68
  exports.makeReplayState = require_preview_preview_replayInnerOperations.makeReplayState;
69
+ exports.malformedBracketError = require_preview_preview_errors.malformedBracketError;
67
70
  exports.marketIssues = require_preview_validate_checkOperation.marketIssues;
71
+ exports.nonAdapterCallInBracketError = require_preview_preview_errors.nonAdapterCallInBracketError;
68
72
  exports.parseFacadeOperationCalldata = require_preview_parse_parseFacadeOperationCalldata.parseFacadeOperationCalldata;
69
73
  exports.parseOperationCalldata = require_preview_parse_parseOperationCalldata.parseOperationCalldata;
70
74
  exports.parsePoolOperationCalldata = require_preview_parse_parsePoolOperationCalldata.parsePoolOperationCalldata;
@@ -78,4 +82,5 @@ exports.refuse = require_onchain_validation_refusal.refuse;
78
82
  exports.replayInnerOperations = require_preview_preview_replayInnerOperations.replayInnerOperations;
79
83
  exports.replayMulticall = require_preview_preview_replayMulticall.replayMulticall;
80
84
  exports.resolveDelayedClaimIntent = require_preview_preview_detectDelayedClaim.resolveDelayedClaimIntent;
81
- exports.unpriceableTokenError = require_preview_preview_errors.unpriceableTokenError;
85
+ exports.unpreviewableAdapterCallError = require_preview_preview_errors.unpreviewableAdapterCallError;
86
+ exports.unsupportedOutOfBracketCallError = require_preview_preview_errors.unsupportedOutOfBracketCallError;
@@ -4,8 +4,8 @@ const require_onchain_utils_bigint_math = require("../../onchain/utils/bigint-ma
4
4
  const require_onchain_constants_math = require("../../onchain/constants/math.js");
5
5
  const require_model_previews = require("../../model/previews.js");
6
6
  require("../../model/index.js");
7
+ const require_onchain_market_oracle_errors = require("../../onchain/market/oracle/errors.js");
7
8
  require("../../onchain/index.js");
8
- const require_preview_preview_errors = require("./errors.js");
9
9
  let viem = require("viem");
10
10
  //#region src/preview/preview/buildDelayedStrategyPositionOperationPreview.ts
11
11
  /**
@@ -16,7 +16,7 @@ let viem = require("viem");
16
16
  * Pure function: the input states are never mutated and no network access is performed.
17
17
  * Swaps are estimated with the injected conversion; remaining holdings are
18
18
  * priced by `MarketSuite.valueInUnderlying`. Tokens that cannot be priced
19
- * contribute nothing and set a non-fatal `ERROR_UNPRICEABLE_TOKEN` error on the
19
+ * contribute nothing and set a non-fatal `unpriceableToken` warning on the
20
20
  * preview.
21
21
  *
22
22
  * The changes (e.g. `totalDebtChange`) are reported relative to the account
@@ -47,18 +47,18 @@ function buildDelayedStrategyPositionOperationPreview(afterInstant, before, dete
47
47
  return buildAdjustPreview(post, before, collateralWithdrawn, converter, sdk);
48
48
  }
49
49
  function makeSafeConverter(convert) {
50
- let error;
50
+ let warning;
51
51
  return {
52
52
  convert: (token, to, amount) => {
53
53
  try {
54
54
  return convert(token, to, amount);
55
55
  } catch {
56
- error ??= require_preview_preview_errors.unpriceableTokenError(token);
56
+ warning ??= require_onchain_market_oracle_errors.unpriceableTokenError(token);
57
57
  return 0n;
58
58
  }
59
59
  },
60
- get error() {
61
- return error;
60
+ get warning() {
61
+ return warning;
62
62
  }
63
63
  };
64
64
  }
@@ -171,7 +171,7 @@ function buildClosePreview(post, converter, receivedToken, sdk) {
171
171
  name: suite.accountStrategyName(post.creditAccount),
172
172
  targetCollateral: suite.accountTargetCollateral(post.creditAccount),
173
173
  receivedAmount: oracle.toTokenAmount(receivedToken, require_onchain_utils_bigint_math.BigIntMath.max(priced.value - post.totalDebt, 0n)),
174
- error: converter.error ?? (priced.unpriceable ? require_preview_preview_errors.unpriceableTokenError(priced.unpriceable) : void 0)
174
+ warning: converter.warning ?? (priced.unpriceable ? require_onchain_market_oracle_errors.unpriceableTokenError(priced.unpriceable) : void 0)
175
175
  };
176
176
  }
177
177
  function buildAdjustPreview(post, before, collateralWithdrawn, converter, sdk) {
@@ -194,7 +194,7 @@ function buildAdjustPreview(post, before, collateralWithdrawn, converter, sdk) {
194
194
  ...oracle.toAmount(market.underlying, q.balance)
195
195
  })),
196
196
  assetsChange: post.balances.difference(before.balances).toAssets(require_onchain_constants_math.DUST_THRESHOLD).map((a) => oracle.toTokenAmount(a.token, a.balance)),
197
- error: converter.error ?? (priced.unpriceable ? require_preview_preview_errors.unpriceableTokenError(priced.unpriceable) : void 0)
197
+ warning: converter.warning ?? (priced.unpriceable ? require_onchain_market_oracle_errors.unpriceableTokenError(priced.unpriceable) : void 0)
198
198
  };
199
199
  }
200
200
  //#endregion
@@ -1,17 +1,85 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_model_previews = require("../../model/previews.js");
3
- require("../../model/index.js");
4
2
  //#region src/preview/preview/errors.ts
3
+ const MALFORMED_BRACKET_MESSAGE = {
4
+ nested: "nested storeExpectedBalances/compareBalances bracket",
5
+ unmatchedCompare: "compareBalances without a preceding storeExpectedBalances",
6
+ unmatchedStore: "storeExpectedBalances without a matching compareBalances"
7
+ };
5
8
  /**
6
- * Preview limitation (2xxx): the oracle could not price `token`. Callers
7
- * attach this with `error ??=` so a malformed-transaction (1xxx) error
8
- * already recorded keeps precedence.
9
+ * Builds a {@link MalformedBracketError} for the given bracket invariant.
9
10
  **/
10
- function unpriceableTokenError(token) {
11
+ function malformedBracketError(kind) {
11
12
  return {
12
- code: require_model_previews.ERROR_UNPRICEABLE_TOKEN,
13
- message: `cannot price token ${token}`
13
+ code: "malformedBracket",
14
+ message: MALFORMED_BRACKET_MESSAGE[kind],
15
+ kind
16
+ };
17
+ }
18
+ /**
19
+ * Builds an {@link AdapterCallOutsideBracketError} for `adapter`.
20
+ **/
21
+ function adapterCallOutsideBracketError(adapter) {
22
+ return {
23
+ code: "adapterCallOutsideBracket",
24
+ message: `call to ${adapter} outside of a storeExpectedBalances/compareBalances bracket`,
25
+ adapter
26
+ };
27
+ }
28
+ /**
29
+ * Builds a {@link NonAdapterCallInBracketError} for `target`.
30
+ **/
31
+ function nonAdapterCallInBracketError(target) {
32
+ return {
33
+ code: "nonAdapterCallInBracket",
34
+ message: `call to ${target} between storeExpectedBalances and compareBalances is not an adapter call`,
35
+ target
36
+ };
37
+ }
38
+ function asCause(cause) {
39
+ return cause instanceof Error ? cause : new Error(String(cause));
40
+ }
41
+ /**
42
+ * Builds an {@link UnpreviewableAdapterCallError} for a bracketed adapter
43
+ * call that could not be replayed.
44
+ **/
45
+ function unpreviewableAdapterCallError(adapter, cause) {
46
+ const err = asCause(cause);
47
+ return {
48
+ code: "unpreviewableAdapterCall",
49
+ message: err.message,
50
+ adapter,
51
+ cause: err
52
+ };
53
+ }
54
+ /**
55
+ * Builds an {@link UnsupportedOutOfBracketCallError} for an allowed
56
+ * out-of-bracket adapter call that could not be replayed.
57
+ **/
58
+ function unsupportedOutOfBracketCallError(adapter, cause) {
59
+ const err = asCause(cause);
60
+ return {
61
+ code: "unsupportedOutOfBracketCall",
62
+ message: err.message,
63
+ adapter,
64
+ cause: err
65
+ };
66
+ }
67
+ /**
68
+ * Builds an {@link InvalidTransactionValueError} when `msg.value` does not
69
+ * fit into the declared WETH collateral.
70
+ **/
71
+ function invalidTransactionValueError(value, wethCollateral) {
72
+ return {
73
+ code: "invalidTransactionValue",
74
+ message: `transaction value ${value} exceeds WETH collateral ${wethCollateral}`,
75
+ value,
76
+ wethCollateral
14
77
  };
15
78
  }
16
79
  //#endregion
17
- exports.unpriceableTokenError = unpriceableTokenError;
80
+ exports.adapterCallOutsideBracketError = adapterCallOutsideBracketError;
81
+ exports.invalidTransactionValueError = invalidTransactionValueError;
82
+ exports.malformedBracketError = malformedBracketError;
83
+ exports.nonAdapterCallInBracketError = nonAdapterCallInBracketError;
84
+ exports.unpreviewableAdapterCallError = unpreviewableAdapterCallError;
85
+ exports.unsupportedOutOfBracketCallError = unsupportedOutOfBracketCallError;
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_preview_preview_errors = require("./errors.js");
3
2
  const require_preview_preview_buildDelayedStrategyPositionOperationPreview = require("./buildDelayedStrategyPositionOperationPreview.js");
4
3
  const require_preview_preview_CreditAccountState = require("./CreditAccountState.js");
5
4
  const require_preview_preview_detectCloseOrRepay = require("./detectCloseOrRepay.js");
6
5
  const require_preview_preview_detectDelayedClaim = require("./detectDelayedClaim.js");
7
6
  const require_preview_preview_detectDelayedOperation = require("./detectDelayedOperation.js");
7
+ const require_preview_preview_errors = require("./errors.js");
8
8
  const require_preview_preview_estimateClaimableAt = require("./estimateClaimableAt.js");
9
9
  const require_preview_preview_replayInnerOperations = require("./replayInnerOperations.js");
10
10
  const require_preview_preview_replayMulticall = require("./replayMulticall.js");
@@ -12,17 +12,22 @@ const require_preview_preview_previewAdjustStrategyPosition = require("./preview
12
12
  const require_preview_preview_previewExitOrRepayStrategyPosition = require("./previewExitOrRepayStrategyPosition.js");
13
13
  const require_preview_preview_previewOperation = require("./previewOperation.js");
14
14
  exports.CreditAccountState = require_preview_preview_CreditAccountState.CreditAccountState;
15
+ exports.adapterCallOutsideBracketError = require_preview_preview_errors.adapterCallOutsideBracketError;
15
16
  exports.buildDelayedStrategyPositionOperationPreview = require_preview_preview_buildDelayedStrategyPositionOperationPreview.buildDelayedStrategyPositionOperationPreview;
16
17
  exports.classifyCloseOrRepay = require_preview_preview_detectCloseOrRepay.classifyCloseOrRepay;
17
18
  exports.detectDelayedClaim = require_preview_preview_detectDelayedClaim.detectDelayedClaim;
18
19
  exports.detectDelayedOperation = require_preview_preview_detectDelayedOperation.detectDelayedOperation;
19
20
  exports.estimateClaimableAt = require_preview_preview_estimateClaimableAt.estimateClaimableAt;
21
+ exports.invalidTransactionValueError = require_preview_preview_errors.invalidTransactionValueError;
20
22
  exports.isCloseOrRepay = require_preview_preview_detectCloseOrRepay.isCloseOrRepay;
21
23
  exports.makeReplayState = require_preview_preview_replayInnerOperations.makeReplayState;
24
+ exports.malformedBracketError = require_preview_preview_errors.malformedBracketError;
25
+ exports.nonAdapterCallInBracketError = require_preview_preview_errors.nonAdapterCallInBracketError;
22
26
  exports.previewAdjustStrategyPosition = require_preview_preview_previewAdjustStrategyPosition.previewAdjustStrategyPosition;
23
27
  exports.previewExitOrRepayStrategyPosition = require_preview_preview_previewExitOrRepayStrategyPosition.previewExitOrRepayStrategyPosition;
24
28
  exports.previewOperation = require_preview_preview_previewOperation.previewOperation;
25
29
  exports.replayInnerOperations = require_preview_preview_replayInnerOperations.replayInnerOperations;
26
30
  exports.replayMulticall = require_preview_preview_replayMulticall.replayMulticall;
27
31
  exports.resolveDelayedClaimIntent = require_preview_preview_detectDelayedClaim.resolveDelayedClaimIntent;
28
- exports.unpriceableTokenError = require_preview_preview_errors.unpriceableTokenError;
32
+ exports.unpreviewableAdapterCallError = require_preview_preview_errors.unpreviewableAdapterCallError;
33
+ exports.unsupportedOutOfBracketCallError = require_preview_preview_errors.unsupportedOutOfBracketCallError;
@@ -3,8 +3,8 @@ const require_onchain_constants_address_provider = require("../../onchain/consta
3
3
  const require_onchain_constants_math = require("../../onchain/constants/math.js");
4
4
  const require_model_previews = require("../../model/previews.js");
5
5
  require("../../model/index.js");
6
+ const require_onchain_market_oracle_errors = require("../../onchain/market/oracle/errors.js");
6
7
  require("../../onchain/index.js");
7
- const require_preview_preview_errors = require("./errors.js");
8
8
  const require_preview_preview_replayMulticall = require("./replayMulticall.js");
9
9
  const require_preview_preview_unwrapNativeCollateral = require("./unwrapNativeCollateral.js");
10
10
  //#region src/preview/preview/previewAdjustStrategyPosition.ts
@@ -20,14 +20,14 @@ function previewAdjustStrategyPosition(input, operation, options) {
20
20
  const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
21
21
  const suite = sdk.marketRegister.findCreditManager(operation.creditManager);
22
22
  const oracle = market.priceOracle;
23
- const { before, after, error: replayError } = require_preview_preview_replayMulticall.replayMulticall(sdk, operation, options);
23
+ const { before, after, warning: replayWarning } = require_preview_preview_replayMulticall.replayMulticall(sdk, operation, options);
24
24
  const account = after.account;
25
- let error = replayError;
26
- const { assets: collateralAdded, error: unwrapError } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
27
- error ??= unwrapError;
25
+ let warning = replayWarning;
26
+ const { assets: collateralAdded, warning: unwrapWarning } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
27
+ warning ??= unwrapWarning;
28
28
  const assetsChange = account.balances.difference(before.balances).toAssets(require_onchain_constants_math.DUST_THRESHOLD);
29
29
  const priced = market.valueInUnderlying(account.balances.toAssets());
30
- if (priced.unpriceable) error ??= require_preview_preview_errors.unpriceableTokenError(priced.unpriceable);
30
+ if (priced.unpriceable) warning ??= require_onchain_market_oracle_errors.unpriceableTokenError(priced.unpriceable);
31
31
  const snap = account.toSnapshot(priced.value);
32
32
  return {
33
33
  operation: "AdjustCreditAccount",
@@ -43,7 +43,7 @@ function previewAdjustStrategyPosition(input, operation, options) {
43
43
  ...oracle.toAmount(market.underlying, q.balance)
44
44
  })),
45
45
  assetsChange: assetsChange.map((a) => oracle.toTokenAmount(a.token, a.balance)),
46
- error
46
+ warning
47
47
  };
48
48
  }
49
49
  //#endregion
@@ -3,8 +3,8 @@ const require_onchain_constants_address_provider = require("../../onchain/consta
3
3
  require("../../onchain/constants/math.js");
4
4
  const require_model_previews = require("../../model/previews.js");
5
5
  require("../../model/index.js");
6
+ const require_onchain_market_oracle_errors = require("../../onchain/market/oracle/errors.js");
6
7
  require("../../onchain/index.js");
7
- const require_preview_preview_errors = require("./errors.js");
8
8
  const require_preview_preview_detectCloseOrRepay = require("./detectCloseOrRepay.js");
9
9
  const require_preview_preview_replayMulticall = require("./replayMulticall.js");
10
10
  const require_preview_preview_unwrapNativeCollateral = require("./unwrapNativeCollateral.js");
@@ -26,11 +26,11 @@ function previewExitOrRepayStrategyPosition(input, operation, permanent, options
26
26
  function previewCloseCreditAccount(input, operation, permanent, replay) {
27
27
  const { sdk } = input;
28
28
  const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
29
- const { before, after, error: replayError } = replay;
29
+ const { before, after, warning: replayWarning } = replay;
30
30
  const account = after.account;
31
- let error = replayError;
31
+ let warning = replayWarning;
32
32
  const priced = market.valueInUnderlying(account.balances.toAssets());
33
- if (priced.unpriceable) error ??= require_preview_preview_errors.unpriceableTokenError(priced.unpriceable);
33
+ if (priced.unpriceable) warning ??= require_onchain_market_oracle_errors.unpriceableTokenError(priced.unpriceable);
34
34
  const suite = sdk.marketRegister.findCreditManager(operation.creditManager);
35
35
  let receivedToken = market.underlying;
36
36
  for (const m of operation.multicall) if (m.operation === "WithdrawCollateral" && m.amount === 115792089237316195423570985008687907853269984665640564039457584007913129639935n) {
@@ -45,7 +45,7 @@ function previewCloseCreditAccount(input, operation, permanent, replay) {
45
45
  name: suite.accountStrategyName(operation.creditAccount),
46
46
  targetCollateral: suite.accountTargetCollateral(operation.creditAccount),
47
47
  receivedAmount: market.priceOracle.toTokenAmount(receivedToken, after.collateralWithdrawn.getOrZero(receivedToken)),
48
- error
48
+ warning
49
49
  };
50
50
  }
51
51
  /**
@@ -56,12 +56,12 @@ function previewCloseCreditAccount(input, operation, permanent, replay) {
56
56
  function previewRepayCreditAccount(input, operation, permanent, replay) {
57
57
  const { sdk, value = 0n } = input;
58
58
  const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
59
- const { before, after, error: replayError } = replay;
59
+ const { before, after, warning: replayWarning } = replay;
60
60
  const account = after.account;
61
- const { assets: collateralAdded, error: unwrapError } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
62
- let error = replayError ?? unwrapError;
61
+ const { assets: collateralAdded, warning: unwrapWarning } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
62
+ let warning = replayWarning ?? unwrapWarning;
63
63
  const priced = market.valueInUnderlying(account.balances.toAssets());
64
- if (priced.unpriceable) error ??= require_preview_preview_errors.unpriceableTokenError(priced.unpriceable);
64
+ if (priced.unpriceable) warning ??= require_onchain_market_oracle_errors.unpriceableTokenError(priced.unpriceable);
65
65
  const suite = sdk.marketRegister.findCreditManager(operation.creditManager);
66
66
  return {
67
67
  operation: "RepayCreditAccount",
@@ -73,7 +73,7 @@ function previewRepayCreditAccount(input, operation, permanent, replay) {
73
73
  collateralAdded: collateralAdded.map((a) => market.priceOracle.toTokenAmount(a.token, a.balance)),
74
74
  debtRepaid: market.toUnderlyingAmount(before.totalDebt - account.totalDebt),
75
75
  collateralWithdrawn: after.collateralWithdrawn.toAssets().map((a) => market.priceOracle.toTokenAmount(a.token, a.balance)),
76
- error
76
+ warning
77
77
  };
78
78
  }
79
79
  //#endregion
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_onchain_constants_address_provider = require("../../onchain/constants/address-provider.js");
3
3
  const require_model_previews = require("../../model/previews.js");
4
4
  require("../../model/index.js");
5
+ const require_onchain_market_oracle_errors = require("../../onchain/market/oracle/errors.js");
5
6
  require("../../onchain/index.js");
6
7
  const require_preview_preview_CreditAccountState = require("./CreditAccountState.js");
7
8
  const require_preview_preview_replayInnerOperations = require("./replayInnerOperations.js");
@@ -12,22 +13,19 @@ function previewOpenStrategyPosition(input, operation) {
12
13
  const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
13
14
  const oracle = market.priceOracle;
14
15
  const state = require_preview_preview_replayInnerOperations.makeReplayState(require_preview_preview_CreditAccountState.CreditAccountState.beforeOpen(operation.creditManager, market.underlying));
15
- let error = require_preview_preview_replayInnerOperations.replayInnerOperations(sdk, operation.multicall, state);
16
+ let warning = require_preview_preview_replayInnerOperations.replayInnerOperations(sdk, operation.multicall, state);
16
17
  const account = state.account;
17
- let priceError;
18
+ let priceWarning;
18
19
  const netValue = state.collateralAdded.sum((token, balance) => {
19
20
  try {
20
21
  return oracle.convert(token, market.underlying, balance);
21
22
  } catch {
22
- priceError ??= {
23
- code: require_model_previews.ERROR_UNPRICEABLE_TOKEN,
24
- message: `cannot price token ${token}`
25
- };
23
+ priceWarning ??= require_onchain_market_oracle_errors.unpriceableTokenError(token);
26
24
  return 0n;
27
25
  }
28
26
  });
29
- const { assets: collateral, error: unwrapError } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(state.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
30
- error ??= unwrapError ?? priceError;
27
+ const { assets: collateral, warning: unwrapWarning } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(state.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
28
+ warning ??= unwrapWarning ?? priceWarning;
31
29
  const snap = account.toSnapshot(netValue + account.totalDebt);
32
30
  const targetAsset = inferTargetAsset(operation.multicall, account.balances);
33
31
  return {
@@ -35,7 +33,7 @@ function previewOpenStrategyPosition(input, operation) {
35
33
  ...require_model_previews.asEstimated(sdk.positions.projection(snap, { availableLiquidityChange: -account.totalDebt })),
36
34
  targetCollateral: targetAsset ? oracle.toTokenAmount(targetAsset.token, targetAsset.balance) : void 0,
37
35
  collateralAdded: collateral.map((a) => oracle.toTokenAmount(a.token, a.balance)),
38
- error
36
+ warning
39
37
  };
40
38
  }
41
39
  /**