@metamask-previews/bridge-controller 81.1.0-preview-3e86f66f7 → 81.2.0-preview-9324e33

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 (37) hide show
  1. package/CHANGELOG.md +18 -2
  2. package/dist/index.d.ts +6 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/utils/metrics/properties.d.ts +2 -1
  7. package/dist/utils/metrics/properties.d.ts.map +1 -1
  8. package/dist/utils/metrics/properties.js.map +1 -1
  9. package/dist/utils/metrics/types.d.ts +1 -1
  10. package/dist/utils/metrics/types.d.ts.map +1 -1
  11. package/dist/utils/metrics/types.js.map +1 -1
  12. package/dist/utils/number-formatters.d.ts +11 -2
  13. package/dist/utils/number-formatters.d.ts.map +1 -1
  14. package/dist/utils/number-formatters.js +64 -26
  15. package/dist/utils/number-formatters.js.map +1 -1
  16. package/dist/utils/quote-metadata/calculators.d.ts.map +1 -1
  17. package/dist/utils/quote-metadata/calculators.js +21 -6
  18. package/dist/utils/quote-metadata/calculators.js.map +1 -1
  19. package/dist/utils/quote-metadata/to-normalized-amounts.js +6 -6
  20. package/dist/utils/quote-metadata/to-normalized-amounts.js.map +1 -1
  21. package/dist/utils/quote-warnings/insufficient-gas-for-quote.d.ts +21 -0
  22. package/dist/utils/quote-warnings/insufficient-gas-for-quote.d.ts.map +1 -0
  23. package/dist/utils/quote-warnings/insufficient-gas-for-quote.js +28 -0
  24. package/dist/utils/quote-warnings/insufficient-gas-for-quote.js.map +1 -0
  25. package/dist/utils/quote-warnings/network-fee-unavailable.d.ts +10 -0
  26. package/dist/utils/quote-warnings/network-fee-unavailable.d.ts.map +1 -0
  27. package/dist/utils/quote-warnings/network-fee-unavailable.js +25 -0
  28. package/dist/utils/quote-warnings/network-fee-unavailable.js.map +1 -0
  29. package/dist/utils/quote-warnings/types.d.ts +2 -0
  30. package/dist/utils/quote-warnings/types.d.ts.map +1 -0
  31. package/dist/utils/quote-warnings/types.js +2 -0
  32. package/dist/utils/quote-warnings/types.js.map +1 -0
  33. package/dist/utils/quote-warnings/utils.d.ts +12 -0
  34. package/dist/utils/quote-warnings/utils.d.ts.map +1 -0
  35. package/dist/utils/quote-warnings/utils.js +29 -0
  36. package/dist/utils/quote-warnings/utils.js.map +1 -0
  37. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -7,10 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [81.2.0]
11
+
12
+ ### Added
13
+
14
+ - Update lint:tsc to run against all packages & remove it from CI ([#10215](https://github.com/MetaMask/core/pull/10215))
15
+ - chore: integrate `@metamask/utils` into `packages/` ([#10185](https://github.com/MetaMask/core/pull/10185))
16
+ - Export `calcNormalizedTokenAmount` and `calcAtomicTokenAmount` conversion utils and `AmountsAndAsset` type ([#10277](https://github.com/MetaMask/core/pull/10277))
17
+ - Add utils to support fee validation when a quote's fees are denominated in multiple assets ([#10277](https://github.com/MetaMask/core/pull/10277))
18
+ - `hasSufficientGasForQuote` returns true if the wallet's balances are greater than or equal to the quote's network fees
19
+ - `hasNetworkFee` returns true if any of the network fee object's amounts are defined and non-zero
20
+
10
21
  ### Changed
11
22
 
12
- - Bump `@metamask/profile-sync-controller` from `^32.0.0` to `^32.1.0` ([#10184](https://github.com/MetaMask/core/pull/10184))
23
+ - Bump `@metamask/profile-sync-controller` from `^32.0.0` to `^32.1.1` ([#10184](https://github.com/MetaMask/core/pull/10184), [#10220](https://github.com/MetaMask/core/pull/10220))
13
24
  - Bump `@metamask/utils` from `^11.12.0` to `^12.0.0` ([#10192](https://github.com/MetaMask/core/pull/10192))
25
+ - Bump `@metamask/assets-controller` from `^16.0.0` to `^16.1.0` ([#10242](https://github.com/MetaMask/core/pull/10242))
26
+ - Bump `@metamask/assets-controllers` from `^112.0.1` to `^112.0.2` ([#10242](https://github.com/MetaMask/core/pull/10242))
27
+ - Bump `@metamask/transaction-controller` from `^70.0.0` to `^70.1.0` ([#10242](https://github.com/MetaMask/core/pull/10242), [#10262](https://github.com/MetaMask/core/pull/10262))
28
+ - Bump `uuid` from `^9.0.1` to `^11.1.1` ([#10243](https://github.com/MetaMask/core/pull/10243))
14
29
 
15
30
  ## [81.1.0]
16
31
 
@@ -2043,7 +2058,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2043
2058
 
2044
2059
  - Initial release ([#5317](https://github.com/MetaMask/core/pull/5317))
2045
2060
 
2046
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@81.1.0...HEAD
2061
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@81.2.0...HEAD
2062
+ [81.2.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@81.1.0...@metamask/bridge-controller@81.2.0
2047
2063
  [81.1.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@81.0.0...@metamask/bridge-controller@81.1.0
2048
2064
  [81.0.0]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@80.2.1...@metamask/bridge-controller@81.0.0
2049
2065
  [80.2.1]: https://github.com/MetaMask/core/compare/@metamask/bridge-controller@80.2.0...@metamask/bridge-controller@80.2.1
package/dist/index.d.ts CHANGED
@@ -2,7 +2,10 @@ export { BridgeController } from './bridge-controller.js';
2
2
  export { BatchSellMetricsEventName, UnifiedSwapBridgeEventName, BATCH_SELL_EVENT_CATEGORY, UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY, BatchSellMetricsLocation, InputAmountPreset, MetaMetricsSwapsEventSource, PollingStatus, FailurePhase, SwapBridgeErrorCode, } from './utils/metrics/constants.js';
3
3
  export type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';
4
4
  export type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';
5
- export type { AccountHardwareType, RequiredEventContextFromClient, CrossChainSwapsEventProperties, TradeData, RequestParams, RequestMetadata, TxStatusData, QuoteFetchData, QuoteWarning, InputPrimaryDenominationData, HashPresenceData, FailureTelemetryData, HashPresenceProperties, FailureTelemetryProperties, } from './utils/metrics/types.js';
5
+ export type { AccountHardwareType, RequiredEventContextFromClient, CrossChainSwapsEventProperties, TradeData, RequestParams, RequestMetadata, TxStatusData, QuoteFetchData, InputPrimaryDenominationData, HashPresenceData, FailureTelemetryData, HashPresenceProperties, FailureTelemetryProperties, } from './utils/metrics/types.js';
6
+ export type { QuoteWarning } from './utils/quote-warnings/types.js';
7
+ export { hasSufficientGasForQuote } from './utils/quote-warnings/insufficient-gas-for-quote.js';
8
+ export { hasNetworkFee } from './utils/quote-warnings/network-fee-unavailable.js';
6
9
  export { getAccountHardwareType, formatProviderLabel, getRequestParams, getSwapType, isHardwareWallet, isCustomSlippage, getQuotesReceivedProperties, } from './utils/metrics/properties.js';
7
10
  export { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';
8
11
  export type { ChainConfiguration, L1GasFees, NonEvmFees, GasMultiplierByChainId, FeatureFlagResponse, GenericQuoteRequest, BatchSellTradesResponse, GaslessProperties, SimulatedGasFeeLimits, Step, RefuelData, FeeData, Intent, IntentOrderLike, BridgeControllerState, InputPrimaryDenomination, BridgeControllerAction, BridgeControllerActions, BridgeControllerEvents, BridgeControllerMessenger, FeatureFlagsPlatformConfig, TxFeeGasLimits, TokenFeature, QuoteStreamCompleteData, BridgeControllerGetStateAction, BridgeControllerStateChangeEvent, DeepPartial, } from './types.js';
@@ -22,11 +25,11 @@ export { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';
22
25
  export { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';
23
26
  export { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';
24
27
  export { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';
25
- export { sumAmounts } from './utils/number-formatters.js';
28
+ export { sumAmounts, calcAtomicTokenAmount, calcNormalizedTokenAmount, } from './utils/number-formatters.js';
26
29
  export { assetIdsMatch } from './utils/assets.js';
27
30
  export { validateQuoteStreamComplete, QuoteStreamCompleteReason, } from './validators/quote-stream-complete.js';
28
31
  export { BatchSellTransactionType } from './validators/batch-sell.js';
29
- export { AmountsAndAssetSchema } from './validators/amount-and-asset.js';
32
+ export { AmountsAndAssetSchema, type AmountsAndAsset, } from './validators/amount-and-asset.js';
30
33
  export { TokenFeatureType } from './validators/token-feature.js';
31
34
  export type { BridgeAsset, BridgeAssetV2, MinimalAsset, } from './validators/bridge-asset.js';
32
35
  export { BridgeAssetSchema, validateBridgeAsset, validateBridgeAssetV2, MinimalAssetSchema, BridgeAssetV2Schema, BridgeAssetSecurityDataType, } from './validators/bridge-asset.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AACrF,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAEpF,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,4BAA4B,EAC5B,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oDAAoD,EACpD,iCAAiC,EACjC,0CAA0C,EAC1C,iCAAiC,EACjC,iCAAiC,EACjC,iDAAiD,EACjD,gCAAgC,EAChC,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,GAC5C,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EACzC,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export { BridgeController } from './bridge-controller.js';
2
2
  export { BatchSellMetricsEventName, UnifiedSwapBridgeEventName, BATCH_SELL_EVENT_CATEGORY, UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY, BatchSellMetricsLocation, InputAmountPreset, MetaMetricsSwapsEventSource, PollingStatus, FailurePhase, SwapBridgeErrorCode, } from './utils/metrics/constants.js';
3
+ export { hasSufficientGasForQuote } from './utils/quote-warnings/insufficient-gas-for-quote.js';
4
+ export { hasNetworkFee } from './utils/quote-warnings/network-fee-unavailable.js';
3
5
  export { getAccountHardwareType, formatProviderLabel, getRequestParams, getSwapType, isHardwareWallet, isCustomSlippage, getQuotesReceivedProperties, } from './utils/metrics/properties.js';
4
6
  export { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';
5
7
  export { QuoteMetadataMigrationPhase, } from './utils/quote-metadata/types.js';
@@ -15,11 +17,11 @@ export { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';
15
17
  export { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';
16
18
  export { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';
17
19
  export { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';
18
- export { sumAmounts } from './utils/number-formatters.js';
20
+ export { sumAmounts, calcAtomicTokenAmount, calcNormalizedTokenAmount, } from './utils/number-formatters.js';
19
21
  export { assetIdsMatch } from './utils/assets.js';
20
22
  export { validateQuoteStreamComplete, QuoteStreamCompleteReason, } from './validators/quote-stream-complete.js';
21
23
  export { BatchSellTransactionType } from './validators/batch-sell.js';
22
- export { AmountsAndAssetSchema } from './validators/amount-and-asset.js';
24
+ export { AmountsAndAssetSchema, } from './validators/amount-and-asset.js';
23
25
  export { TokenFeatureType } from './validators/token-feature.js';
24
26
  export { BridgeAssetSchema, validateBridgeAsset, validateBridgeAssetV2, MinimalAssetSchema, BridgeAssetV2Schema, BridgeAssetSecurityDataType, } from './validators/bridge-asset.js';
25
27
  export { FeatureId } from './validators/feature-flags.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n QuoteWarning,\n InputPrimaryDenominationData,\n HashPresenceData,\n FailureTelemetryData,\n HashPresenceProperties,\n FailureTelemetryProperties,\n} from './utils/metrics/types.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n QuoteMetadataMigrationPhase,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n isQuoteResponseV2,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport { sumAmounts } from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport { AmountsAndAssetSchema } from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n InputPrimaryDenominationData,\n HashPresenceData,\n FailureTelemetryData,\n HashPresenceProperties,\n FailureTelemetryProperties,\n} from './utils/metrics/types.js';\n\nexport type { QuoteWarning } from './utils/quote-warnings/types.js';\nexport { hasSufficientGasForQuote } from './utils/quote-warnings/insufficient-gas-for-quote.js';\nexport { hasNetworkFee } from './utils/quote-warnings/network-fee-unavailable.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n QuoteMetadataMigrationPhase,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n isQuoteResponseV2,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport {\n sumAmounts,\n calcAtomicTokenAmount,\n calcNormalizedTokenAmount,\n} from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport {\n AmountsAndAssetSchema,\n type AmountsAndAsset,\n} from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
@@ -2,8 +2,9 @@ import type { AccountsControllerState } from '@metamask/accounts-controller';
2
2
  import type { GenericQuoteRequest, QuoteRequest } from '../../types.js';
3
3
  import { FeatureId } from '../../validators/feature-flags.js';
4
4
  import type { QuoteResponse } from '../../validators/quote-response.js';
5
+ import type { QuoteWarning } from '../quote-warnings/types.js';
5
6
  import { MetricsSwapType } from './constants.js';
6
- import type { AccountHardwareType, InputKeys, InputValues, QuoteWarning, RequestParams } from './types.js';
7
+ import type { AccountHardwareType, InputKeys, InputValues, RequestParams } from './types.js';
7
8
  export declare const toInputChangedPropertyKey: Partial<Record<keyof QuoteRequest, InputKeys>>;
8
9
  export declare const toInputChangedPropertyValue: Partial<Record<keyof typeof toInputChangedPropertyKey, (input_value: Partial<GenericQuoteRequest>) => InputValues[keyof InputValues] | undefined>>;
9
10
  export declare const getSwapType: (srcChainId?: GenericQuoteRequest['srcChainId'], destChainId?: GenericQuoteRequest['destChainId']) => MetricsSwapType;
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/properties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAI7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAMxE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB,EAAE,OAAO,CAC7C,MAAM,CAAC,MAAM,YAAY,EAAE,SAAS,CAAC,CAOtC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,OAAO,CAC/C,MAAM,CACJ,MAAM,OAAO,yBAAyB,EACtC,CACE,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,KACtC,WAAW,CAAC,MAAM,WAAW,CAAC,GAAG,SAAS,CAChD,CAeF,CAAC;AAEF,eAAO,MAAM,WAAW,gBACT,mBAAmB,CAAC,YAAY,CAAC,gBAChC,mBAAmB,CAAC,aAAa,CAAC,oBAMjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBACjB,OAAO,CAAC,mBAAmB,CAAC,oBAG3C,CAAC;AAEF,eAAO,MAAM,mBAAmB,kDAK7B;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,KAAG,GAAG,MAAM,IAAI,MAAM,EACwC,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,oEAMxB,OAAO,CAAC,mBAAmB,CAAC,gCACD,MAAM,GAAG,IAAI,KAC1C,IAAI,CAAC,aAAa,EAAE,qBAAqB,GAAG,0BAA0B,CAoBxE,CAAC;AAEF,eAAO,MAAM,sBAAsB,qBACf,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAChF,mBAcF,CAAC;AAEF,eAAO,MAAM,gBAAgB,qBACT,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,YAGlF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAc,mBAAmB,CAAC,UAAU,CAAC,YAEzE,CAAC;AAEF,eAAO,MAAM,2BAA2B,gBACzB,IAAI,GAAG,aAAa,aACvB,YAAY,EAAE,kBACT,OAAO,qBACH,IAAI,GAAG,aAAa,qBACpB,MAAM,6BACE,OAAO,GAAG,IAAI,YAChC;IAEP,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;;;;;;;;;;;;;;;;;;;CA2CF,CAAC"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/properties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAI7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAMxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,yBAAyB,EAAE,OAAO,CAC7C,MAAM,CAAC,MAAM,YAAY,EAAE,SAAS,CAAC,CAOtC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,OAAO,CAC/C,MAAM,CACJ,MAAM,OAAO,yBAAyB,EACtC,CACE,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,KACtC,WAAW,CAAC,MAAM,WAAW,CAAC,GAAG,SAAS,CAChD,CAeF,CAAC;AAEF,eAAO,MAAM,WAAW,gBACT,mBAAmB,CAAC,YAAY,CAAC,gBAChC,mBAAmB,CAAC,aAAa,CAAC,oBAMjD,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBACjB,OAAO,CAAC,mBAAmB,CAAC,oBAG3C,CAAC;AAEF,eAAO,MAAM,mBAAmB,kDAK7B;IACD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,KAAG,GAAG,MAAM,IAAI,MAAM,EACwC,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,oEAMxB,OAAO,CAAC,mBAAmB,CAAC,gCACD,MAAM,GAAG,IAAI,KAC1C,IAAI,CAAC,aAAa,EAAE,qBAAqB,GAAG,0BAA0B,CAoBxE,CAAC;AAEF,eAAO,MAAM,sBAAsB,qBACf,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAChF,mBAcF,CAAC;AAEF,eAAO,MAAM,gBAAgB,qBACT,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,YAGlF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAc,mBAAmB,CAAC,UAAU,CAAC,YAEzE,CAAC;AAEF,eAAO,MAAM,2BAA2B,gBACzB,IAAI,GAAG,aAAa,aACvB,YAAY,EAAE,kBACT,OAAO,qBACH,IAAI,GAAG,aAAa,qBACpB,MAAM,6BACE,OAAO,GAAG,IAAI,YAChC;IAEP,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;;;;;;;;;;;;;;;;;;;CA2CF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/utils/metrics/properties.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\n\nimport { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../../constants/bridge.js';\nimport { ChainId } from '../../types.js';\nimport type { GenericQuoteRequest, QuoteRequest } from '../../types.js';\nimport { FeatureId } from '../../validators/feature-flags.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { getNativeAssetForChainId, isCrossChain } from '../bridge.js';\nimport {\n formatAddressToAssetId,\n formatChainIdToCaip,\n} from '../caip-formatters.js';\nimport { MetricsSwapType } from './constants.js';\nimport type {\n AccountHardwareType,\n InputKeys,\n InputValues,\n QuoteWarning,\n RequestParams,\n} from './types.js';\n\nexport const toInputChangedPropertyKey: Partial<\n Record<keyof QuoteRequest, InputKeys>\n> = {\n srcTokenAddress: 'token_source',\n destTokenAddress: 'token_destination',\n srcChainId: 'chain_source',\n destChainId: 'chain_destination',\n slippage: 'slippage',\n};\n\nexport const toInputChangedPropertyValue: Partial<\n Record<\n keyof typeof toInputChangedPropertyKey,\n (\n input_value: Partial<GenericQuoteRequest>,\n ) => InputValues[keyof InputValues] | undefined\n >\n> = {\n srcTokenAddress: ({ srcTokenAddress, srcChainId }) =>\n srcChainId\n ? formatAddressToAssetId(srcTokenAddress ?? '', srcChainId)\n : undefined,\n destTokenAddress: ({ destTokenAddress, destChainId }) =>\n destChainId\n ? formatAddressToAssetId(destTokenAddress ?? '', destChainId)\n : undefined,\n srcChainId: ({ srcChainId }) =>\n srcChainId ? formatChainIdToCaip(srcChainId) : undefined,\n destChainId: ({ destChainId }) =>\n destChainId ? formatChainIdToCaip(destChainId) : undefined,\n slippage: ({ slippage }) => (slippage ? Number(slippage) : slippage),\n};\n\nexport const getSwapType = (\n srcChainId?: GenericQuoteRequest['srcChainId'],\n destChainId?: GenericQuoteRequest['destChainId'],\n) => {\n if (srcChainId && !isCrossChain(srcChainId, destChainId ?? srcChainId)) {\n return MetricsSwapType.SINGLE;\n }\n return MetricsSwapType.CROSSCHAIN;\n};\n\nexport const getSwapTypeFromQuote = (\n quoteRequest: Partial<GenericQuoteRequest>,\n) => {\n return getSwapType(quoteRequest.srcChainId, quoteRequest.destChainId);\n};\n\nexport const formatProviderLabel = ({\n aggregator,\n protocols,\n bridges,\n bridgeId,\n}: {\n aggregator?: string;\n protocols?: string[];\n bridges?: string[];\n bridgeId?: string;\n}): `${string}_${string}` =>\n `${aggregator ?? bridgeId}_${protocols?.[0] ?? bridges?.[0]}`;\n\n/**\n * @param quoteRequest - The current quote request used to derive chain and token identity fields.\n * @param quoteRequest.srcChainId - Source chain id of the quote request.\n * @param quoteRequest.destChainId - Destination chain id of the quote request.\n * @param quoteRequest.srcTokenAddress - Source token address of the quote request.\n * @param quoteRequest.destTokenAddress - Destination token address of the quote request.\n * @param tokenSecurityTypeDestination - The security classification of the destination token,\n * supplied by the client (e.g. from token security/scanning data). Pass `null` when no\n * security data is available for the selected destination token.\n * @returns The analytics request params derived from the quote request. Token symbols are\n * omitted because the quote request only stores addresses; use\n * {@link getQuotesReceivedProperties} when building a `QuotesReceived` payload.\n */\nexport const getRequestParams = (\n {\n srcChainId,\n destChainId,\n srcTokenAddress,\n destTokenAddress,\n }: Partial<GenericQuoteRequest>,\n tokenSecurityTypeDestination: string | null,\n): Omit<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> => {\n // Fallback to ETH if srcChainId is not defined. This is ok since the clients default to Ethereum as the source chain\n // This also doesn't happen at runtime since the quote request is validated before metrics are published\n const srcChainIdCaip = formatChainIdToCaip(srcChainId ?? ChainId.ETH);\n return {\n chain_id_source: srcChainIdCaip,\n chain_id_destination: destChainId ? formatChainIdToCaip(destChainId) : null,\n token_address_source: srcTokenAddress\n ? (formatAddressToAssetId(srcTokenAddress, srcChainIdCaip) ??\n getNativeAssetForChainId(srcChainIdCaip)?.assetId ??\n null)\n : (getNativeAssetForChainId(srcChainIdCaip)?.assetId ?? null),\n token_address_destination: destTokenAddress\n ? (formatAddressToAssetId(\n destTokenAddress,\n destChainId ?? srcChainIdCaip,\n ) ?? null)\n : null,\n token_security_type_destination: tokenSecurityTypeDestination,\n };\n};\n\nexport const getAccountHardwareType = (\n selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n): AccountHardwareType => {\n // Unified bridge analytics only support the schema enum values for hardware accounts.\n switch (selectedAccount?.metadata?.keyring.type) {\n case 'Ledger Hardware':\n return 'Ledger';\n case 'Trezor Hardware':\n return 'Trezor';\n case 'QR Hardware Wallet Device':\n return 'QR Hardware';\n case 'Lattice Hardware':\n return 'Lattice';\n default:\n return null;\n }\n};\n\nexport const isHardwareWallet = (\n selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n return getAccountHardwareType(selectedAccount) !== null;\n};\n\n/**\n * @param slippage - The slippage percentage\n * @returns Whether the default slippage was overridden by the user\n *\n * @deprecated This function should not be used. Use {@link selectDefaultSlippagePercentage} instead.\n */\nexport const isCustomSlippage = (slippage: GenericQuoteRequest['slippage']) => {\n return slippage !== DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0]?.slippage;\n};\n\nexport const getQuotesReceivedProperties = (\n activeQuote: null | QuoteResponse,\n warnings: QuoteWarning[] = [],\n isSubmittable: boolean = true,\n recommendedQuote?: null | QuoteResponse,\n usdBalanceSource?: number,\n hasSufficientGasForQuote?: boolean | null,\n options: {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n custom_slippage?: boolean;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n slippage_limit?: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n usd_amount_source?: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n token_symbol_source?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n token_symbol_destination?: string | null;\n } = {},\n) => {\n const provider = activeQuote ? formatProviderLabel(activeQuote.quote) : '_';\n const quoteUsdAmountSource = activeQuote?.quote?.src?.usd;\n const quoteTokenSymbolSource = activeQuote?.quote.src.asset.symbol;\n const quoteTokenSymbolDestination = activeQuote?.quote.dest.asset.symbol;\n const usdAmountSource = Number(\n quoteUsdAmountSource ?? options.usd_amount_source ?? 0,\n );\n const slippageLimit =\n options.slippage_limit ?? activeQuote?.quote?.slippage ?? 0;\n return {\n can_submit: isSubmittable,\n gas_included: Boolean(activeQuote?.quote?.gasIncluded),\n gas_included_7702: Boolean(activeQuote?.quote?.gasIncluded7702),\n quoted_time_minutes: activeQuote?.estimatedProcessingTimeInSeconds\n ? activeQuote.estimatedProcessingTimeInSeconds / 60\n : 0,\n usd_quoted_gas: Number(activeQuote?.quote?.feeData?.network?.[0]?.usd ?? 0),\n usd_quoted_return: Number(activeQuote?.quote?.dest?.usd ?? 0),\n usd_balance_source: usdBalanceSource ?? 0,\n usd_amount_source: usdAmountSource,\n slippage_limit: slippageLimit,\n best_quote_provider: recommendedQuote\n ? formatProviderLabel(recommendedQuote.quote)\n : provider,\n provider,\n token_symbol_source:\n quoteTokenSymbolSource ?? options.token_symbol_source ?? '',\n token_symbol_destination:\n quoteTokenSymbolDestination ?? options.token_symbol_destination ?? null,\n warnings,\n price_impact: Number(\n activeQuote?.quote.priceData?.priceImpact?.amount ?? 0,\n ),\n ...(hasSufficientGasForQuote !== undefined && {\n has_sufficient_gas_for_quote: hasSufficientGasForQuote,\n }),\n ...(options.custom_slippage !== undefined && {\n custom_slippage: options.custom_slippage,\n }),\n feature_id: activeQuote?.featureId ?? FeatureId.UNIFIED_SWAP_BRIDGE,\n };\n};\n"]}
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/utils/metrics/properties.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQjD,MAAM,CAAC,MAAM,yBAAyB,GAElC;IACF,eAAe,EAAE,cAAc;IAC/B,gBAAgB,EAAE,mBAAmB;IACrC,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,mBAAmB;IAChC,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAOpC;IACF,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,CACnD,UAAU;QACR,CAAC,CAAC,sBAAsB,CAAC,eAAe,IAAI,EAAE,EAAE,UAAU,CAAC;QAC3D,CAAC,CAAC,SAAS;IACf,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,EAAE,CACtD,WAAW;QACT,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,IAAI,EAAE,EAAE,WAAW,CAAC;QAC7D,CAAC,CAAC,SAAS;IACf,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;IAC1D,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAC/B,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;IAC5D,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,UAA8C,EAC9C,WAAgD,EAChD,EAAE;IACF,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,WAAW,IAAI,UAAU,CAAC,EAAE,CAAC;QACvE,OAAO,eAAe,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,OAAO,eAAe,CAAC,UAAU,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA0C,EAC1C,EAAE;IACF,OAAO,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,GAMT,EAAyB,EAAE,CAC1B,GAAG,UAAU,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,EACE,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,GACa,EAC/B,4BAA2C,EAC8B,EAAE;IAC3E,qHAAqH;IACrH,wGAAwG;IACxG,MAAM,cAAc,GAAG,mBAAmB,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO;QACL,eAAe,EAAE,cAAc;QAC/B,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3E,oBAAoB,EAAE,eAAe;YACnC,CAAC,CAAC,CAAC,sBAAsB,CAAC,eAAe,EAAE,cAAc,CAAC;gBACxD,wBAAwB,CAAC,cAAc,CAAC,EAAE,OAAO;gBACjD,IAAI,CAAC;YACP,CAAC,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;QAC/D,yBAAyB,EAAE,gBAAgB;YACzC,CAAC,CAAC,CAAC,sBAAsB,CACrB,gBAAgB,EAChB,WAAW,IAAI,cAAc,CAC9B,IAAI,IAAI,CAAC;YACZ,CAAC,CAAC,IAAI;QACR,+BAA+B,EAAE,4BAA4B;KAC9D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,eAAiF,EAC5D,EAAE;IACvB,sFAAsF;IACtF,QAAQ,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAChD,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,2BAA2B;YAC9B,OAAO,aAAa,CAAC;QACvB,KAAK,kBAAkB;YACrB,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,eAAiF,EACjF,EAAE;IACF,OAAO,sBAAsB,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAyC,EAAE,EAAE;IAC5E,OAAO,QAAQ,KAAK,+BAA+B,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,WAAiC,EACjC,QAAQ,GAAmB,EAAE,EAC7B,aAAa,GAAY,IAAI,EAC7B,gBAAuC,EACvC,gBAAyB,EACzB,wBAAyC,EACzC,OAAO,GAWH,EAAE,EACN,EAAE;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,MAAM,oBAAoB,GAAG,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;IAC1D,MAAM,sBAAsB,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IACnE,MAAM,2BAA2B,GAAG,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACzE,MAAM,eAAe,GAAG,MAAM,CAC5B,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,CACvD,CAAC;IACF,MAAM,aAAa,GACjB,OAAO,CAAC,cAAc,IAAI,WAAW,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;IAC9D,OAAO;QACL,UAAU,EAAE,aAAa;QACzB,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC;QACtD,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC;QAC/D,mBAAmB,EAAE,WAAW,EAAE,gCAAgC;YAChE,CAAC,CAAC,WAAW,CAAC,gCAAgC,GAAG,EAAE;YACnD,CAAC,CAAC,CAAC;QACL,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3E,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;QACzC,iBAAiB,EAAE,eAAe;QAClC,cAAc,EAAE,aAAa;QAC7B,mBAAmB,EAAE,gBAAgB;YACnC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC7C,CAAC,CAAC,QAAQ;QACZ,QAAQ;QACR,mBAAmB,EACjB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,IAAI,EAAE;QAC7D,wBAAwB,EACtB,2BAA2B,IAAI,OAAO,CAAC,wBAAwB,IAAI,IAAI;QACzE,QAAQ;QACR,YAAY,EAAE,MAAM,CAClB,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC,CACvD;QACD,GAAG,CAAC,wBAAwB,KAAK,SAAS,IAAI;YAC5C,4BAA4B,EAAE,wBAAwB;SACvD,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI;YAC3C,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC;QACF,UAAU,EAAE,WAAW,EAAE,SAAS,IAAI,SAAS,CAAC,mBAAmB;KACpE,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\n\nimport { DEFAULT_BRIDGE_CONTROLLER_STATE } from '../../constants/bridge.js';\nimport { ChainId } from '../../types.js';\nimport type { GenericQuoteRequest, QuoteRequest } from '../../types.js';\nimport { FeatureId } from '../../validators/feature-flags.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { getNativeAssetForChainId, isCrossChain } from '../bridge.js';\nimport {\n formatAddressToAssetId,\n formatChainIdToCaip,\n} from '../caip-formatters.js';\nimport type { QuoteWarning } from '../quote-warnings/types.js';\nimport { MetricsSwapType } from './constants.js';\nimport type {\n AccountHardwareType,\n InputKeys,\n InputValues,\n RequestParams,\n} from './types.js';\n\nexport const toInputChangedPropertyKey: Partial<\n Record<keyof QuoteRequest, InputKeys>\n> = {\n srcTokenAddress: 'token_source',\n destTokenAddress: 'token_destination',\n srcChainId: 'chain_source',\n destChainId: 'chain_destination',\n slippage: 'slippage',\n};\n\nexport const toInputChangedPropertyValue: Partial<\n Record<\n keyof typeof toInputChangedPropertyKey,\n (\n input_value: Partial<GenericQuoteRequest>,\n ) => InputValues[keyof InputValues] | undefined\n >\n> = {\n srcTokenAddress: ({ srcTokenAddress, srcChainId }) =>\n srcChainId\n ? formatAddressToAssetId(srcTokenAddress ?? '', srcChainId)\n : undefined,\n destTokenAddress: ({ destTokenAddress, destChainId }) =>\n destChainId\n ? formatAddressToAssetId(destTokenAddress ?? '', destChainId)\n : undefined,\n srcChainId: ({ srcChainId }) =>\n srcChainId ? formatChainIdToCaip(srcChainId) : undefined,\n destChainId: ({ destChainId }) =>\n destChainId ? formatChainIdToCaip(destChainId) : undefined,\n slippage: ({ slippage }) => (slippage ? Number(slippage) : slippage),\n};\n\nexport const getSwapType = (\n srcChainId?: GenericQuoteRequest['srcChainId'],\n destChainId?: GenericQuoteRequest['destChainId'],\n) => {\n if (srcChainId && !isCrossChain(srcChainId, destChainId ?? srcChainId)) {\n return MetricsSwapType.SINGLE;\n }\n return MetricsSwapType.CROSSCHAIN;\n};\n\nexport const getSwapTypeFromQuote = (\n quoteRequest: Partial<GenericQuoteRequest>,\n) => {\n return getSwapType(quoteRequest.srcChainId, quoteRequest.destChainId);\n};\n\nexport const formatProviderLabel = ({\n aggregator,\n protocols,\n bridges,\n bridgeId,\n}: {\n aggregator?: string;\n protocols?: string[];\n bridges?: string[];\n bridgeId?: string;\n}): `${string}_${string}` =>\n `${aggregator ?? bridgeId}_${protocols?.[0] ?? bridges?.[0]}`;\n\n/**\n * @param quoteRequest - The current quote request used to derive chain and token identity fields.\n * @param quoteRequest.srcChainId - Source chain id of the quote request.\n * @param quoteRequest.destChainId - Destination chain id of the quote request.\n * @param quoteRequest.srcTokenAddress - Source token address of the quote request.\n * @param quoteRequest.destTokenAddress - Destination token address of the quote request.\n * @param tokenSecurityTypeDestination - The security classification of the destination token,\n * supplied by the client (e.g. from token security/scanning data). Pass `null` when no\n * security data is available for the selected destination token.\n * @returns The analytics request params derived from the quote request. Token symbols are\n * omitted because the quote request only stores addresses; use\n * {@link getQuotesReceivedProperties} when building a `QuotesReceived` payload.\n */\nexport const getRequestParams = (\n {\n srcChainId,\n destChainId,\n srcTokenAddress,\n destTokenAddress,\n }: Partial<GenericQuoteRequest>,\n tokenSecurityTypeDestination: string | null,\n): Omit<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> => {\n // Fallback to ETH if srcChainId is not defined. This is ok since the clients default to Ethereum as the source chain\n // This also doesn't happen at runtime since the quote request is validated before metrics are published\n const srcChainIdCaip = formatChainIdToCaip(srcChainId ?? ChainId.ETH);\n return {\n chain_id_source: srcChainIdCaip,\n chain_id_destination: destChainId ? formatChainIdToCaip(destChainId) : null,\n token_address_source: srcTokenAddress\n ? (formatAddressToAssetId(srcTokenAddress, srcChainIdCaip) ??\n getNativeAssetForChainId(srcChainIdCaip)?.assetId ??\n null)\n : (getNativeAssetForChainId(srcChainIdCaip)?.assetId ?? null),\n token_address_destination: destTokenAddress\n ? (formatAddressToAssetId(\n destTokenAddress,\n destChainId ?? srcChainIdCaip,\n ) ?? null)\n : null,\n token_security_type_destination: tokenSecurityTypeDestination,\n };\n};\n\nexport const getAccountHardwareType = (\n selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n): AccountHardwareType => {\n // Unified bridge analytics only support the schema enum values for hardware accounts.\n switch (selectedAccount?.metadata?.keyring.type) {\n case 'Ledger Hardware':\n return 'Ledger';\n case 'Trezor Hardware':\n return 'Trezor';\n case 'QR Hardware Wallet Device':\n return 'QR Hardware';\n case 'Lattice Hardware':\n return 'Lattice';\n default:\n return null;\n }\n};\n\nexport const isHardwareWallet = (\n selectedAccount?: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n return getAccountHardwareType(selectedAccount) !== null;\n};\n\n/**\n * @param slippage - The slippage percentage\n * @returns Whether the default slippage was overridden by the user\n *\n * @deprecated This function should not be used. Use {@link selectDefaultSlippagePercentage} instead.\n */\nexport const isCustomSlippage = (slippage: GenericQuoteRequest['slippage']) => {\n return slippage !== DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0]?.slippage;\n};\n\nexport const getQuotesReceivedProperties = (\n activeQuote: null | QuoteResponse,\n warnings: QuoteWarning[] = [],\n isSubmittable: boolean = true,\n recommendedQuote?: null | QuoteResponse,\n usdBalanceSource?: number,\n hasSufficientGasForQuote?: boolean | null,\n options: {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n custom_slippage?: boolean;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n slippage_limit?: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n usd_amount_source?: number;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n token_symbol_source?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- analytics property\n token_symbol_destination?: string | null;\n } = {},\n) => {\n const provider = activeQuote ? formatProviderLabel(activeQuote.quote) : '_';\n const quoteUsdAmountSource = activeQuote?.quote?.src?.usd;\n const quoteTokenSymbolSource = activeQuote?.quote.src.asset.symbol;\n const quoteTokenSymbolDestination = activeQuote?.quote.dest.asset.symbol;\n const usdAmountSource = Number(\n quoteUsdAmountSource ?? options.usd_amount_source ?? 0,\n );\n const slippageLimit =\n options.slippage_limit ?? activeQuote?.quote?.slippage ?? 0;\n return {\n can_submit: isSubmittable,\n gas_included: Boolean(activeQuote?.quote?.gasIncluded),\n gas_included_7702: Boolean(activeQuote?.quote?.gasIncluded7702),\n quoted_time_minutes: activeQuote?.estimatedProcessingTimeInSeconds\n ? activeQuote.estimatedProcessingTimeInSeconds / 60\n : 0,\n usd_quoted_gas: Number(activeQuote?.quote?.feeData?.network?.[0]?.usd ?? 0),\n usd_quoted_return: Number(activeQuote?.quote?.dest?.usd ?? 0),\n usd_balance_source: usdBalanceSource ?? 0,\n usd_amount_source: usdAmountSource,\n slippage_limit: slippageLimit,\n best_quote_provider: recommendedQuote\n ? formatProviderLabel(recommendedQuote.quote)\n : provider,\n provider,\n token_symbol_source:\n quoteTokenSymbolSource ?? options.token_symbol_source ?? '',\n token_symbol_destination:\n quoteTokenSymbolDestination ?? options.token_symbol_destination ?? null,\n warnings,\n price_impact: Number(\n activeQuote?.quote.priceData?.priceImpact?.amount ?? 0,\n ),\n ...(hasSufficientGasForQuote !== undefined && {\n has_sufficient_gas_for_quote: hasSufficientGasForQuote,\n }),\n ...(options.custom_slippage !== undefined && {\n custom_slippage: options.custom_slippage,\n }),\n feature_id: activeQuote?.featureId ?? FeatureId.UNIFIED_SWAP_BRIDGE,\n };\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { CaipAssetType, CaipChainId } from '@metamask/utils';
2
2
  import type { InputPrimaryDenomination, SortOrder, StatusTypes } from '../../types.js';
3
3
  import type { FeatureId } from '../../validators/feature-flags.js';
4
+ import { QuoteWarning } from '../quote-warnings/types.js';
4
5
  import type { UnifiedSwapBridgeEventName, BatchSellMetricsEventName, BatchSellMetricsLocation, BridgeControllerMetricsEventName, BridgeControllerMetricsLocation, MetricsActionType, MetricsSwapType, PollingStatus, FailurePhase, SwapBridgeErrorCode } from './constants.js';
5
6
  /**
6
7
  * These properties map to properties required by the segment-schema. For example: https://github.com/Consensys/segment-schema/blob/main/libraries/properties/cross-chain-swaps-action.yaml
@@ -81,7 +82,6 @@ export type InputValues = {
81
82
  slippage: number;
82
83
  token_amount_source: string;
83
84
  };
84
- export type QuoteWarning = 'low_return' | 'no_quotes' | 'insufficient_gas_balance' | 'insufficient_gas_for_selected_quote' | 'insufficient_balance' | 'market_closed' | 'price_impact' | 'quote_expired' | 'tx_alert';
85
85
  type BatchSellChainProperties = {
86
86
  chain_id_source: CaipChainId;
87
87
  chain_id_destination: CaipChainId | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/metrics/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/metrics/types.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { CaipAssetType, CaipChainId } from '@metamask/utils';\n\nimport type {\n InputPrimaryDenomination,\n SortOrder,\n StatusTypes,\n} from '../../types.js';\nimport type { FeatureId } from '../../validators/feature-flags.js';\nimport type {\n UnifiedSwapBridgeEventName,\n BatchSellMetricsEventName,\n BatchSellMetricsLocation,\n BridgeControllerMetricsEventName,\n BridgeControllerMetricsLocation,\n MetricsActionType,\n MetricsSwapType,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './constants.js';\n\n/**\n * These properties map to properties required by the segment-schema. For example: https://github.com/Consensys/segment-schema/blob/main/libraries/properties/cross-chain-swaps-action.yaml\n */\nexport type RequestParams = {\n chain_id_source: CaipChainId;\n chain_id_destination: CaipChainId | null;\n token_symbol_source: string;\n token_symbol_destination: string | null;\n token_address_source: CaipAssetType;\n token_address_destination: CaipAssetType | null;\n /**\n * Client-supplied security classification for the destination token\n * (e.g. from token security/scanning data). Stored on the controller\n * and merged into every analytics event that includes\n * `token_address_destination`. Pass `null` when no security data is\n * available for the selected destination token.\n */\n token_security_type_destination: string | null;\n};\n\nexport type AccountHardwareType =\n | 'Ledger'\n | 'Trezor'\n | 'QR Hardware'\n | 'Lattice'\n | null;\n\nexport type RequestMetadata = {\n slippage_limit: number; // 0 === auto when no numeric limit is available\n custom_slippage: boolean;\n usd_amount_source: number; // Use quoteResponse when available\n stx_enabled: boolean;\n is_hardware_wallet: boolean;\n account_hardware_type: AccountHardwareType;\n swap_type: MetricsSwapType;\n security_warnings: string[];\n};\n\nexport type QuoteFetchData = {\n can_submit: boolean;\n best_quote_provider?: `${string}_${string}`;\n quotes_count: number;\n quotes_list: `${string}_${string}`[];\n initial_load_time_all_quotes: number;\n price_impact: number;\n has_gas_included_quote: boolean;\n};\n\nexport type TradeData = {\n usd_quoted_gas: number;\n gas_included: boolean;\n gas_included_7702: boolean;\n quoted_time_minutes: number;\n usd_quoted_return: number;\n provider: `${string}_${string}`;\n};\n\nexport type TxStatusData = {\n allowance_reset_transaction?: StatusTypes;\n approval_transaction?: StatusTypes;\n source_transaction?: StatusTypes;\n destination_transaction?: StatusTypes;\n};\n\nexport type HashPresenceData = {\n source_hash_present?: boolean;\n destination_hash_present?: boolean;\n};\n\nexport type FailureTelemetryData = HashPresenceData & {\n failure_phase?: FailurePhase;\n error_code?: SwapBridgeErrorCode;\n};\n\n/**\n * Classifier return shape. Event context types use the optional `*Data`\n * variants above because Mixpanel fields are additive.\n */\nexport type HashPresenceProperties = Required<HashPresenceData>;\n\nexport type FailureTelemetryProperties = Required<FailureTelemetryData>;\n\nexport type InputPrimaryDenominationData = {\n input_primary_denomination?: InputPrimaryDenomination;\n};\n\nexport type InputKeys =\n | 'token_source'\n | 'token_destination'\n | 'chain_source'\n | 'chain_destination'\n | 'slippage'\n | 'token_amount_source';\n\nexport type InputValues = {\n token_source: CaipAssetType;\n token_destination: CaipAssetType;\n chain_source: CaipChainId;\n chain_destination: CaipChainId;\n slippage: number;\n token_amount_source: string;\n};\n\nexport type QuoteWarning =\n | 'low_return'\n | 'no_quotes'\n | 'insufficient_gas_balance'\n | 'insufficient_gas_for_selected_quote'\n | 'insufficient_balance'\n | 'market_closed'\n | 'price_impact'\n | 'quote_expired'\n | 'tx_alert';\n\ntype BatchSellChainProperties = {\n chain_id_source: CaipChainId;\n chain_id_destination: CaipChainId | null;\n};\n\ntype BatchSellTokenPageEventContext = BatchSellChainProperties & {\n location: BatchSellMetricsLocation;\n};\n\ntype BatchSellSourceTokenEventContext = BatchSellTokenPageEventContext & {\n source_token_symbols: string[];\n source_token_addresses: CaipAssetType[];\n};\n\ntype BatchSellQuotePageEventContext = BatchSellSourceTokenEventContext & {\n destination_token_symbol: string;\n destination_token_address: CaipAssetType;\n usd_amount_source_tokens: number[];\n usd_amount_source_total: number;\n source_token_slippages: number[];\n};\n\ntype BatchSellReviewModalSubmittedEventContext =\n BatchSellQuotePageEventContext &\n Pick<TradeData, 'usd_quoted_gas' | 'usd_quoted_return'>;\n\ntype BatchSellTokenPageEventProperties = BatchSellChainProperties &\n BatchSellTokenPageEventContext;\n\ntype BatchSellSourceTokenEventProperties = BatchSellChainProperties &\n BatchSellSourceTokenEventContext & {\n source_token_count: number;\n };\n\ntype BatchSellQuotePageEventProperties = BatchSellChainProperties &\n BatchSellQuotePageEventContext & {\n source_token_count: number;\n };\n\ntype BatchSellReviewModalSubmittedEventProperties = BatchSellChainProperties &\n BatchSellReviewModalSubmittedEventContext & {\n source_token_count: number;\n };\n\ntype SharedEventContextFromClient = {\n ab_tests?: Record<string, string>;\n active_ab_tests?: { key: string; value: string }[];\n feature_id: FeatureId;\n};\n\ntype OptionalLocationContextFromClient<T> = T extends {\n location: unknown;\n}\n ? object\n : { location?: BridgeControllerMetricsLocation };\n\n/**\n * Properties that are required to be provided when trackUnifiedSwapBridgeEvent is called.\n * Most events receive an optional location via RequiredEventContextFromClient;\n * Batch Sell events define their own required location enum.\n */\ntype RequiredEventContextFromClientBase = {\n [UnifiedSwapBridgeEventName.ButtonClicked]: Pick<\n RequestParams,\n 'token_symbol_source' | 'token_symbol_destination'\n > & { environment_type?: string };\n // When type is object, the payload can be anything\n [UnifiedSwapBridgeEventName.PageViewed]: object;\n [UnifiedSwapBridgeEventName.InputChanged]: {\n input:\n | 'token_source'\n | 'token_destination'\n | 'chain_source'\n | 'chain_destination'\n | 'slippage'\n | 'token_amount_source';\n input_value: InputValues[keyof InputValues];\n input_amount_preset?: string;\n };\n [UnifiedSwapBridgeEventName.FiatCryptoToggleClicked]: {\n token_symbol_source: string;\n token_symbol_destination: string | null;\n previous_primary_denomination: InputPrimaryDenomination;\n new_primary_denomination: InputPrimaryDenomination;\n chain_id_source?: RequestParams['chain_id_source'];\n chain_id_destination?: RequestParams['chain_id_destination'];\n token_address_source?: RequestParams['token_address_source'];\n token_address_destination?: RequestParams['token_address_destination'];\n token_security_type_destination?: RequestParams['token_security_type_destination'];\n swap_type?: RequestMetadata['swap_type'];\n };\n [UnifiedSwapBridgeEventName.InputSourceDestinationSwitched]: {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n token_address_source: RequestParams['token_address_source'];\n token_address_destination: RequestParams['token_address_destination'];\n token_security_type_destination: RequestParams['token_security_type_destination'];\n chain_id_source: RequestParams['chain_id_source'];\n chain_id_destination: RequestParams['chain_id_destination'];\n } & Pick<RequestMetadata, 'security_warnings'>;\n [UnifiedSwapBridgeEventName.QuotesRequested]: Pick<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source'\n > & {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n token_security_type_destination: RequestParams['token_security_type_destination'];\n custom_slippage?: RequestMetadata['custom_slippage'];\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesReceived]: TradeData &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> &\n InputPrimaryDenominationData & {\n warnings: QuoteWarning[];\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n price_impact: QuoteFetchData['price_impact'];\n can_submit: QuoteFetchData['can_submit'];\n usd_balance_source?: number;\n has_sufficient_gas_for_quote?: boolean | null;\n usd_amount_source: number;\n custom_slippage?: RequestMetadata['custom_slippage'];\n slippage_limit?: RequestMetadata['slippage_limit'];\n };\n [UnifiedSwapBridgeEventName.QuotesError]: Pick<\n RequestMetadata,\n 'stx_enabled'\n > & {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n } & Pick<RequestMetadata, 'security_warnings'> &\n Pick<FailureTelemetryData, 'failure_phase' | 'error_code'>;\n // Emitted by BridgeStatusController\n [UnifiedSwapBridgeEventName.Submitted]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'token_address_source'\n | 'token_address_destination'\n | 'chain_id_source'\n | 'chain_id_destination'\n | 'token_security_type_destination'\n > & {\n action_type: MetricsActionType;\n batch_id?: string;\n } & InputPrimaryDenominationData &\n HashPresenceData;\n [UnifiedSwapBridgeEventName.Completed]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n TxStatusData &\n RequestParams & {\n actual_time_minutes: number;\n usd_actual_return: number;\n usd_actual_gas: number;\n quote_vs_execution_ratio: number;\n quoted_vs_used_gas_ratio: number;\n action_type: MetricsActionType;\n batch_id?: string;\n transaction_internal_id?: string;\n } & InputPrimaryDenominationData &\n HashPresenceData;\n [UnifiedSwapBridgeEventName.Failed]: (\n | // Tx failed before confirmation\n (Pick<\n RequestMetadata,\n | 'stx_enabled'\n | 'usd_amount_source'\n | 'is_hardware_wallet'\n | 'account_hardware_type'\n > &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'token_address_source'\n | 'token_address_destination'\n | 'token_security_type_destination'\n >)\n // Tx failed after confirmation\n | (RequestParams &\n RequestMetadata &\n TxStatusData & {\n actual_time_minutes: number;\n })\n ) &\n TradeData &\n Pick<QuoteFetchData, 'price_impact'> & {\n error_message: string;\n batch_id?: string;\n } & FailureTelemetryProperties;\n [UnifiedSwapBridgeEventName.PollingStatusUpdated]: {\n polling_status: PollingStatus;\n retry_attempts: number;\n };\n [UnifiedSwapBridgeEventName.StatusValidationFailed]: {\n failures: string[];\n refresh_count: number;\n } & Partial<RequestParams>;\n // Emitted by clients\n [UnifiedSwapBridgeEventName.AllQuotesOpened]: Pick<\n TradeData,\n 'gas_included' | 'gas_included_7702'\n > &\n Pick<QuoteFetchData, 'price_impact'> &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> & {\n stx_enabled: RequestMetadata['stx_enabled'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.AllQuotesSorted]: Pick<\n TradeData,\n 'gas_included' | 'gas_included_7702'\n > &\n Pick<QuoteFetchData, 'price_impact'> &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> & {\n stx_enabled: RequestMetadata['stx_enabled'];\n sort_order: SortOrder;\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.QuoteSelected]: TradeData & {\n is_best_quote: boolean;\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n price_impact: QuoteFetchData['price_impact'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.AssetDetailTooltipClicked]: {\n token_name: string;\n token_symbol: string;\n token_contract: string;\n chain_name: string;\n chain_id: string;\n };\n [UnifiedSwapBridgeEventName.QuotesValidationFailed]: {\n failures: string[];\n };\n [UnifiedSwapBridgeEventName.AssetPickerOpened]: {\n asset_location: 'source' | 'destination';\n };\n [BatchSellMetricsEventName.BatchSellTokenPageViewed]: BatchSellTokenPageEventContext;\n [BatchSellMetricsEventName.BatchSellTokenPageContinueClicked]: BatchSellSourceTokenEventContext;\n [BatchSellMetricsEventName.BatchSellQuotePageViewed]: BatchSellQuotePageEventContext;\n [BatchSellMetricsEventName.BatchSellQuotePageReviewClicked]: BatchSellQuotePageEventContext;\n [BatchSellMetricsEventName.BatchSellReviewModalSubmitted]: BatchSellReviewModalSubmittedEventContext;\n};\n\n/**\n * Properties that are required to be provided when trackUnifiedSwapBridgeEvent is called.\n * This combines the event-specific properties from RequiredEventContextFromClientBase\n * with an optional `location` property. When `location` is omitted, the controller\n * falls back to the value stored via `setLocation()` (defaults to Unknown).\n *\n * `ab_tests` is the legacy field and `active_ab_tests` is the newer field.\n * Both are kept for a migration window and are treated as separate payloads.\n */\nexport type RequiredEventContextFromClient = {\n [K in keyof RequiredEventContextFromClientBase]: K extends BatchSellMetricsEventName\n ? RequiredEventContextFromClientBase[K]\n : RequiredEventContextFromClientBase[K] &\n OptionalLocationContextFromClient<\n RequiredEventContextFromClientBase[K]\n > &\n SharedEventContextFromClient;\n};\n\n/**\n * Properties that can be derived from the bridge controller state\n */\nexport type EventPropertiesFromControllerState = {\n [UnifiedSwapBridgeEventName.ButtonClicked]: RequestParams;\n [UnifiedSwapBridgeEventName.PageViewed]: RequestParams &\n Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > &\n InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.InputChanged]: {\n input: InputKeys;\n input_value: string;\n };\n [UnifiedSwapBridgeEventName.FiatCryptoToggleClicked]: RequestParams &\n Pick<RequestMetadata, 'swap_type'>;\n [UnifiedSwapBridgeEventName.InputSourceDestinationSwitched]: RequestParams;\n [UnifiedSwapBridgeEventName.QuotesRequested]: RequestParams &\n RequestMetadata & {\n has_sufficient_funds: boolean;\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesReceived]: RequestParams &\n RequestMetadata &\n QuoteFetchData &\n TradeData & {\n refresh_count: number; // starts from 0\n has_sufficient_funds: boolean;\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesError]: RequestParams &\n RequestMetadata & {\n has_sufficient_funds: boolean;\n error_message: string;\n };\n [UnifiedSwapBridgeEventName.Submitted]: null;\n [UnifiedSwapBridgeEventName.Completed]: null;\n [UnifiedSwapBridgeEventName.Failed]: RequestParams &\n RequestMetadata &\n TxStatusData &\n TradeData &\n Pick<QuoteFetchData, 'price_impact'> & {\n actual_time_minutes: number;\n };\n [UnifiedSwapBridgeEventName.AllQuotesOpened]: RequestParams &\n RequestMetadata &\n TradeData &\n QuoteFetchData;\n [UnifiedSwapBridgeEventName.AllQuotesSorted]: RequestParams &\n RequestMetadata &\n TradeData &\n QuoteFetchData;\n [UnifiedSwapBridgeEventName.QuoteSelected]: RequestParams &\n RequestMetadata &\n QuoteFetchData &\n TradeData;\n [UnifiedSwapBridgeEventName.AssetDetailTooltipClicked]: null;\n [UnifiedSwapBridgeEventName.QuotesValidationFailed]: RequestParams & {\n refresh_count: number;\n };\n [UnifiedSwapBridgeEventName.StatusValidationFailed]: RequestParams;\n [UnifiedSwapBridgeEventName.AssetPickerOpened]: null;\n [UnifiedSwapBridgeEventName.PollingStatusUpdated]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'chain_id_source'\n | 'chain_id_destination'\n > & {\n batch_id?: string;\n };\n [BatchSellMetricsEventName.BatchSellTokenPageViewed]: BatchSellTokenPageEventProperties;\n [BatchSellMetricsEventName.BatchSellTokenPageContinueClicked]: BatchSellSourceTokenEventProperties;\n [BatchSellMetricsEventName.BatchSellQuotePageViewed]: BatchSellQuotePageEventProperties;\n [BatchSellMetricsEventName.BatchSellQuotePageReviewClicked]: BatchSellQuotePageEventProperties;\n [BatchSellMetricsEventName.BatchSellReviewModalSubmitted]: BatchSellReviewModalSubmittedEventProperties;\n};\n\ntype SharedCrossChainSwapsEventProperties<\n T extends BridgeControllerMetricsEventName,\n> =\n | {\n feature_id: FeatureId;\n action_type: MetricsActionType;\n location: BridgeControllerMetricsLocation;\n ab_tests?: Record<string, string>;\n active_ab_tests?: { key: string; value: string }[];\n }\n | Pick<EventPropertiesFromControllerState, T>[T]\n | Pick<RequiredEventContextFromClient, T>[T];\n\n/**\n * trackUnifiedSwapBridgeEvent payload properties consist of required properties from the client\n * and properties from the bridge controller\n *\n * `ab_tests` will be deprecated in favor of `active_ab_tests` in the future.\n * `ab_tests` and `active_ab_tests` intentionally coexist during migration.\n */\nexport type CrossChainSwapsEventProperties<\n T extends BridgeControllerMetricsEventName,\n> = T extends BatchSellMetricsEventName\n ? Pick<EventPropertiesFromControllerState, T>[T]\n : SharedCrossChainSwapsEventProperties<T>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/metrics/types.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { CaipAssetType, CaipChainId } from '@metamask/utils';\n\nimport type {\n InputPrimaryDenomination,\n SortOrder,\n StatusTypes,\n} from '../../types.js';\nimport type { FeatureId } from '../../validators/feature-flags.js';\nimport { QuoteWarning } from '../quote-warnings/types.js';\nimport type {\n UnifiedSwapBridgeEventName,\n BatchSellMetricsEventName,\n BatchSellMetricsLocation,\n BridgeControllerMetricsEventName,\n BridgeControllerMetricsLocation,\n MetricsActionType,\n MetricsSwapType,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './constants.js';\n\n/**\n * These properties map to properties required by the segment-schema. For example: https://github.com/Consensys/segment-schema/blob/main/libraries/properties/cross-chain-swaps-action.yaml\n */\nexport type RequestParams = {\n chain_id_source: CaipChainId;\n chain_id_destination: CaipChainId | null;\n token_symbol_source: string;\n token_symbol_destination: string | null;\n token_address_source: CaipAssetType;\n token_address_destination: CaipAssetType | null;\n /**\n * Client-supplied security classification for the destination token\n * (e.g. from token security/scanning data). Stored on the controller\n * and merged into every analytics event that includes\n * `token_address_destination`. Pass `null` when no security data is\n * available for the selected destination token.\n */\n token_security_type_destination: string | null;\n};\n\nexport type AccountHardwareType =\n | 'Ledger'\n | 'Trezor'\n | 'QR Hardware'\n | 'Lattice'\n | null;\n\nexport type RequestMetadata = {\n slippage_limit: number; // 0 === auto when no numeric limit is available\n custom_slippage: boolean;\n usd_amount_source: number; // Use quoteResponse when available\n stx_enabled: boolean;\n is_hardware_wallet: boolean;\n account_hardware_type: AccountHardwareType;\n swap_type: MetricsSwapType;\n security_warnings: string[];\n};\n\nexport type QuoteFetchData = {\n can_submit: boolean;\n best_quote_provider?: `${string}_${string}`;\n quotes_count: number;\n quotes_list: `${string}_${string}`[];\n initial_load_time_all_quotes: number;\n price_impact: number;\n has_gas_included_quote: boolean;\n};\n\nexport type TradeData = {\n usd_quoted_gas: number;\n gas_included: boolean;\n gas_included_7702: boolean;\n quoted_time_minutes: number;\n usd_quoted_return: number;\n provider: `${string}_${string}`;\n};\n\nexport type TxStatusData = {\n allowance_reset_transaction?: StatusTypes;\n approval_transaction?: StatusTypes;\n source_transaction?: StatusTypes;\n destination_transaction?: StatusTypes;\n};\n\nexport type HashPresenceData = {\n source_hash_present?: boolean;\n destination_hash_present?: boolean;\n};\n\nexport type FailureTelemetryData = HashPresenceData & {\n failure_phase?: FailurePhase;\n error_code?: SwapBridgeErrorCode;\n};\n\n/**\n * Classifier return shape. Event context types use the optional `*Data`\n * variants above because Mixpanel fields are additive.\n */\nexport type HashPresenceProperties = Required<HashPresenceData>;\n\nexport type FailureTelemetryProperties = Required<FailureTelemetryData>;\n\nexport type InputPrimaryDenominationData = {\n input_primary_denomination?: InputPrimaryDenomination;\n};\n\nexport type InputKeys =\n | 'token_source'\n | 'token_destination'\n | 'chain_source'\n | 'chain_destination'\n | 'slippage'\n | 'token_amount_source';\n\nexport type InputValues = {\n token_source: CaipAssetType;\n token_destination: CaipAssetType;\n chain_source: CaipChainId;\n chain_destination: CaipChainId;\n slippage: number;\n token_amount_source: string;\n};\n\ntype BatchSellChainProperties = {\n chain_id_source: CaipChainId;\n chain_id_destination: CaipChainId | null;\n};\n\ntype BatchSellTokenPageEventContext = BatchSellChainProperties & {\n location: BatchSellMetricsLocation;\n};\n\ntype BatchSellSourceTokenEventContext = BatchSellTokenPageEventContext & {\n source_token_symbols: string[];\n source_token_addresses: CaipAssetType[];\n};\n\ntype BatchSellQuotePageEventContext = BatchSellSourceTokenEventContext & {\n destination_token_symbol: string;\n destination_token_address: CaipAssetType;\n usd_amount_source_tokens: number[];\n usd_amount_source_total: number;\n source_token_slippages: number[];\n};\n\ntype BatchSellReviewModalSubmittedEventContext =\n BatchSellQuotePageEventContext &\n Pick<TradeData, 'usd_quoted_gas' | 'usd_quoted_return'>;\n\ntype BatchSellTokenPageEventProperties = BatchSellChainProperties &\n BatchSellTokenPageEventContext;\n\ntype BatchSellSourceTokenEventProperties = BatchSellChainProperties &\n BatchSellSourceTokenEventContext & {\n source_token_count: number;\n };\n\ntype BatchSellQuotePageEventProperties = BatchSellChainProperties &\n BatchSellQuotePageEventContext & {\n source_token_count: number;\n };\n\ntype BatchSellReviewModalSubmittedEventProperties = BatchSellChainProperties &\n BatchSellReviewModalSubmittedEventContext & {\n source_token_count: number;\n };\n\ntype SharedEventContextFromClient = {\n ab_tests?: Record<string, string>;\n active_ab_tests?: { key: string; value: string }[];\n feature_id: FeatureId;\n};\n\ntype OptionalLocationContextFromClient<T> = T extends {\n location: unknown;\n}\n ? object\n : { location?: BridgeControllerMetricsLocation };\n\n/**\n * Properties that are required to be provided when trackUnifiedSwapBridgeEvent is called.\n * Most events receive an optional location via RequiredEventContextFromClient;\n * Batch Sell events define their own required location enum.\n */\ntype RequiredEventContextFromClientBase = {\n [UnifiedSwapBridgeEventName.ButtonClicked]: Pick<\n RequestParams,\n 'token_symbol_source' | 'token_symbol_destination'\n > & { environment_type?: string };\n // When type is object, the payload can be anything\n [UnifiedSwapBridgeEventName.PageViewed]: object;\n [UnifiedSwapBridgeEventName.InputChanged]: {\n input:\n | 'token_source'\n | 'token_destination'\n | 'chain_source'\n | 'chain_destination'\n | 'slippage'\n | 'token_amount_source';\n input_value: InputValues[keyof InputValues];\n input_amount_preset?: string;\n };\n [UnifiedSwapBridgeEventName.FiatCryptoToggleClicked]: {\n token_symbol_source: string;\n token_symbol_destination: string | null;\n previous_primary_denomination: InputPrimaryDenomination;\n new_primary_denomination: InputPrimaryDenomination;\n chain_id_source?: RequestParams['chain_id_source'];\n chain_id_destination?: RequestParams['chain_id_destination'];\n token_address_source?: RequestParams['token_address_source'];\n token_address_destination?: RequestParams['token_address_destination'];\n token_security_type_destination?: RequestParams['token_security_type_destination'];\n swap_type?: RequestMetadata['swap_type'];\n };\n [UnifiedSwapBridgeEventName.InputSourceDestinationSwitched]: {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n token_address_source: RequestParams['token_address_source'];\n token_address_destination: RequestParams['token_address_destination'];\n token_security_type_destination: RequestParams['token_security_type_destination'];\n chain_id_source: RequestParams['chain_id_source'];\n chain_id_destination: RequestParams['chain_id_destination'];\n } & Pick<RequestMetadata, 'security_warnings'>;\n [UnifiedSwapBridgeEventName.QuotesRequested]: Pick<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source'\n > & {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n token_security_type_destination: RequestParams['token_security_type_destination'];\n custom_slippage?: RequestMetadata['custom_slippage'];\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesReceived]: TradeData &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> &\n InputPrimaryDenominationData & {\n warnings: QuoteWarning[];\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n price_impact: QuoteFetchData['price_impact'];\n can_submit: QuoteFetchData['can_submit'];\n usd_balance_source?: number;\n has_sufficient_gas_for_quote?: boolean | null;\n usd_amount_source: number;\n custom_slippage?: RequestMetadata['custom_slippage'];\n slippage_limit?: RequestMetadata['slippage_limit'];\n };\n [UnifiedSwapBridgeEventName.QuotesError]: Pick<\n RequestMetadata,\n 'stx_enabled'\n > & {\n token_symbol_source: RequestParams['token_symbol_source'];\n token_symbol_destination: RequestParams['token_symbol_destination'];\n } & Pick<RequestMetadata, 'security_warnings'> &\n Pick<FailureTelemetryData, 'failure_phase' | 'error_code'>;\n // Emitted by BridgeStatusController\n [UnifiedSwapBridgeEventName.Submitted]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'token_address_source'\n | 'token_address_destination'\n | 'chain_id_source'\n | 'chain_id_destination'\n | 'token_security_type_destination'\n > & {\n action_type: MetricsActionType;\n batch_id?: string;\n } & InputPrimaryDenominationData &\n HashPresenceData;\n [UnifiedSwapBridgeEventName.Completed]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n TxStatusData &\n RequestParams & {\n actual_time_minutes: number;\n usd_actual_return: number;\n usd_actual_gas: number;\n quote_vs_execution_ratio: number;\n quoted_vs_used_gas_ratio: number;\n action_type: MetricsActionType;\n batch_id?: string;\n transaction_internal_id?: string;\n } & InputPrimaryDenominationData &\n HashPresenceData;\n [UnifiedSwapBridgeEventName.Failed]: (\n | // Tx failed before confirmation\n (Pick<\n RequestMetadata,\n | 'stx_enabled'\n | 'usd_amount_source'\n | 'is_hardware_wallet'\n | 'account_hardware_type'\n > &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'token_address_source'\n | 'token_address_destination'\n | 'token_security_type_destination'\n >)\n // Tx failed after confirmation\n | (RequestParams &\n RequestMetadata &\n TxStatusData & {\n actual_time_minutes: number;\n })\n ) &\n TradeData &\n Pick<QuoteFetchData, 'price_impact'> & {\n error_message: string;\n batch_id?: string;\n } & FailureTelemetryProperties;\n [UnifiedSwapBridgeEventName.PollingStatusUpdated]: {\n polling_status: PollingStatus;\n retry_attempts: number;\n };\n [UnifiedSwapBridgeEventName.StatusValidationFailed]: {\n failures: string[];\n refresh_count: number;\n } & Partial<RequestParams>;\n // Emitted by clients\n [UnifiedSwapBridgeEventName.AllQuotesOpened]: Pick<\n TradeData,\n 'gas_included' | 'gas_included_7702'\n > &\n Pick<QuoteFetchData, 'price_impact'> &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> & {\n stx_enabled: RequestMetadata['stx_enabled'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.AllQuotesSorted]: Pick<\n TradeData,\n 'gas_included' | 'gas_included_7702'\n > &\n Pick<QuoteFetchData, 'price_impact'> &\n Pick<RequestParams, 'token_symbol_source' | 'token_symbol_destination'> & {\n stx_enabled: RequestMetadata['stx_enabled'];\n sort_order: SortOrder;\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.QuoteSelected]: TradeData & {\n is_best_quote: boolean;\n best_quote_provider: QuoteFetchData['best_quote_provider'];\n price_impact: QuoteFetchData['price_impact'];\n can_submit: QuoteFetchData['can_submit'];\n };\n [UnifiedSwapBridgeEventName.AssetDetailTooltipClicked]: {\n token_name: string;\n token_symbol: string;\n token_contract: string;\n chain_name: string;\n chain_id: string;\n };\n [UnifiedSwapBridgeEventName.QuotesValidationFailed]: {\n failures: string[];\n };\n [UnifiedSwapBridgeEventName.AssetPickerOpened]: {\n asset_location: 'source' | 'destination';\n };\n [BatchSellMetricsEventName.BatchSellTokenPageViewed]: BatchSellTokenPageEventContext;\n [BatchSellMetricsEventName.BatchSellTokenPageContinueClicked]: BatchSellSourceTokenEventContext;\n [BatchSellMetricsEventName.BatchSellQuotePageViewed]: BatchSellQuotePageEventContext;\n [BatchSellMetricsEventName.BatchSellQuotePageReviewClicked]: BatchSellQuotePageEventContext;\n [BatchSellMetricsEventName.BatchSellReviewModalSubmitted]: BatchSellReviewModalSubmittedEventContext;\n};\n\n/**\n * Properties that are required to be provided when trackUnifiedSwapBridgeEvent is called.\n * This combines the event-specific properties from RequiredEventContextFromClientBase\n * with an optional `location` property. When `location` is omitted, the controller\n * falls back to the value stored via `setLocation()` (defaults to Unknown).\n *\n * `ab_tests` is the legacy field and `active_ab_tests` is the newer field.\n * Both are kept for a migration window and are treated as separate payloads.\n */\nexport type RequiredEventContextFromClient = {\n [K in keyof RequiredEventContextFromClientBase]: K extends BatchSellMetricsEventName\n ? RequiredEventContextFromClientBase[K]\n : RequiredEventContextFromClientBase[K] &\n OptionalLocationContextFromClient<\n RequiredEventContextFromClientBase[K]\n > &\n SharedEventContextFromClient;\n};\n\n/**\n * Properties that can be derived from the bridge controller state\n */\nexport type EventPropertiesFromControllerState = {\n [UnifiedSwapBridgeEventName.ButtonClicked]: RequestParams;\n [UnifiedSwapBridgeEventName.PageViewed]: RequestParams &\n Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > &\n InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.InputChanged]: {\n input: InputKeys;\n input_value: string;\n };\n [UnifiedSwapBridgeEventName.FiatCryptoToggleClicked]: RequestParams &\n Pick<RequestMetadata, 'swap_type'>;\n [UnifiedSwapBridgeEventName.InputSourceDestinationSwitched]: RequestParams;\n [UnifiedSwapBridgeEventName.QuotesRequested]: RequestParams &\n RequestMetadata & {\n has_sufficient_funds: boolean;\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesReceived]: RequestParams &\n RequestMetadata &\n QuoteFetchData &\n TradeData & {\n refresh_count: number; // starts from 0\n has_sufficient_funds: boolean;\n } & InputPrimaryDenominationData;\n [UnifiedSwapBridgeEventName.QuotesError]: RequestParams &\n RequestMetadata & {\n has_sufficient_funds: boolean;\n error_message: string;\n };\n [UnifiedSwapBridgeEventName.Submitted]: null;\n [UnifiedSwapBridgeEventName.Completed]: null;\n [UnifiedSwapBridgeEventName.Failed]: RequestParams &\n RequestMetadata &\n TxStatusData &\n TradeData &\n Pick<QuoteFetchData, 'price_impact'> & {\n actual_time_minutes: number;\n };\n [UnifiedSwapBridgeEventName.AllQuotesOpened]: RequestParams &\n RequestMetadata &\n TradeData &\n QuoteFetchData;\n [UnifiedSwapBridgeEventName.AllQuotesSorted]: RequestParams &\n RequestMetadata &\n TradeData &\n QuoteFetchData;\n [UnifiedSwapBridgeEventName.QuoteSelected]: RequestParams &\n RequestMetadata &\n QuoteFetchData &\n TradeData;\n [UnifiedSwapBridgeEventName.AssetDetailTooltipClicked]: null;\n [UnifiedSwapBridgeEventName.QuotesValidationFailed]: RequestParams & {\n refresh_count: number;\n };\n [UnifiedSwapBridgeEventName.StatusValidationFailed]: RequestParams;\n [UnifiedSwapBridgeEventName.AssetPickerOpened]: null;\n [UnifiedSwapBridgeEventName.PollingStatusUpdated]: TradeData &\n Pick<QuoteFetchData, 'price_impact'> &\n Omit<RequestMetadata, 'security_warnings'> &\n Pick<\n RequestParams,\n | 'token_symbol_source'\n | 'token_symbol_destination'\n | 'chain_id_source'\n | 'chain_id_destination'\n > & {\n batch_id?: string;\n };\n [BatchSellMetricsEventName.BatchSellTokenPageViewed]: BatchSellTokenPageEventProperties;\n [BatchSellMetricsEventName.BatchSellTokenPageContinueClicked]: BatchSellSourceTokenEventProperties;\n [BatchSellMetricsEventName.BatchSellQuotePageViewed]: BatchSellQuotePageEventProperties;\n [BatchSellMetricsEventName.BatchSellQuotePageReviewClicked]: BatchSellQuotePageEventProperties;\n [BatchSellMetricsEventName.BatchSellReviewModalSubmitted]: BatchSellReviewModalSubmittedEventProperties;\n};\n\ntype SharedCrossChainSwapsEventProperties<\n T extends BridgeControllerMetricsEventName,\n> =\n | {\n feature_id: FeatureId;\n action_type: MetricsActionType;\n location: BridgeControllerMetricsLocation;\n ab_tests?: Record<string, string>;\n active_ab_tests?: { key: string; value: string }[];\n }\n | Pick<EventPropertiesFromControllerState, T>[T]\n | Pick<RequiredEventContextFromClient, T>[T];\n\n/**\n * trackUnifiedSwapBridgeEvent payload properties consist of required properties from the client\n * and properties from the bridge controller\n *\n * `ab_tests` will be deprecated in favor of `active_ab_tests` in the future.\n * `ab_tests` and `active_ab_tests` intentionally coexist during migration.\n */\nexport type CrossChainSwapsEventProperties<\n T extends BridgeControllerMetricsEventName,\n> = T extends BatchSellMetricsEventName\n ? Pick<EventPropertiesFromControllerState, T>[T]\n : SharedCrossChainSwapsEventProperties<T>;\n"]}
@@ -6,23 +6,32 @@ import type { QuoteResponse } from '../validators/quote-response.js';
6
6
  *
7
7
  * @param value - The value to convert to token amount
8
8
  * @param decimals - The number of decimals to convert to
9
+ * @param base - The base of the number system to use
9
10
  * @returns The token amount in string format
10
11
  */
11
- export declare const calcNormalizedTokenAmount: (value: string | BigNumber | undefined, decimals: number | undefined) => BigNumber | undefined;
12
+ export declare const calcNormalizedTokenAmount: (value: string | BigNumber | undefined | null, decimals: number | undefined, base?: number) => string | undefined;
12
13
  /**
13
14
  * 1.5 -> 1500000
14
15
  *
15
16
  * @param value - The amount to convert to token value
16
17
  * @param decimals - The number of decimals to convert to
18
+ * @param base - The base of the number system to use
17
19
  * @returns The token value in string format
18
20
  */
19
- export declare const calcAtomicTokenAmount: (value: string | BigNumber | undefined, decimals: number | undefined) => string | undefined;
21
+ export declare const calcAtomicTokenAmount: (value: string | BigNumber | undefined | null, decimals: number | undefined, base?: number) => string | undefined;
20
22
  /**
21
23
  * @deprecated No longer used
22
24
  * @param estimatedProcessingTimeInSeconds - The estimated processing time in seconds
23
25
  * @returns The estimated processing time in minutes
24
26
  */
25
27
  export declare const formatEtaInMinutes: (estimatedProcessingTimeInSeconds: number) => string;
28
+ /**
29
+ * Groups amounts by matching assetId and sums amount and fiat keys within each group.
30
+ *
31
+ * @param maybeFees - The list of fees to aggregate
32
+ * @returns One dest object per unique asset, or undefined if no fees are provided
33
+ */
34
+ export declare const sumAmountsByAssetId: (...maybeFees: ((DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[] | undefined)[]) => DeepPartial<QuoteResponse['quote']['dest']>[];
26
35
  /**
27
36
  * Aggregates a list of amounts into a single fee object. If fees have different assets,
28
37
  * the returned object will only aggregate the usd and valueInCurrency values.
@@ -1 +1 @@
1
- {"version":3,"file":"number-formatters.d.ts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,UAC7B,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,0BAO7B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,UACzB,MAAM,GAAG,SAAS,GAAG,SAAS,YAC3B,MAAM,GAAG,SAAS,uBAO7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,iBACP,CACV,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAClE,SAAS,CACZ,EAAE,KACF,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAgEhD,CAAC"}
1
+ {"version":3,"file":"number-formatters.d.ts","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,UAC7B,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,YAClC,MAAM,GAAG,SAAS,SACtB,MAAM,uBAOb,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,UACzB,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,YAClC,MAAM,GAAG,SAAS,SACtB,MAAM,uBAOb,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAwBF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,iBAChB,CACV,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAClE,SAAS,CACZ,EAAE,KACF,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAyC7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,iBACP,CACV,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAClE,SAAS,CACZ,EAAE,KACF,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SA4ChD,CAAC"}
@@ -6,28 +6,30 @@ import { assetIdsMatch } from './assets.js';
6
6
  *
7
7
  * @param value - The value to convert to token amount
8
8
  * @param decimals - The number of decimals to convert to
9
+ * @param base - The base of the number system to use
9
10
  * @returns The token amount in string format
10
11
  */
11
- export const calcNormalizedTokenAmount = (value, decimals) => {
12
- if (value === undefined || decimals === undefined) {
12
+ export const calcNormalizedTokenAmount = (value, decimals, base = 10) => {
13
+ if (value === undefined || decimals === undefined || value === null) {
13
14
  return undefined;
14
15
  }
15
- const divisor = new BigNumber(10).pow(decimals ?? 0);
16
- return new BigNumber(value).div(divisor);
16
+ const divisor = new BigNumber(base).pow(decimals ?? 0);
17
+ return new BigNumber(value, base).div(divisor).toFixed();
17
18
  };
18
19
  /**
19
20
  * 1.5 -> 1500000
20
21
  *
21
22
  * @param value - The amount to convert to token value
22
23
  * @param decimals - The number of decimals to convert to
24
+ * @param base - The base of the number system to use
23
25
  * @returns The token value in string format
24
26
  */
25
- export const calcAtomicTokenAmount = (value, decimals) => {
26
- if (value === undefined || decimals === undefined) {
27
+ export const calcAtomicTokenAmount = (value, decimals, base = 10) => {
28
+ if (value === undefined || decimals === undefined || value === null) {
27
29
  return undefined;
28
30
  }
29
- const divisor = new BigNumber(10).pow(decimals);
30
- return new BigNumber(value).times(divisor).toFixed();
31
+ const divisor = new BigNumber(base).pow(decimals);
32
+ return new BigNumber(value, base).times(divisor).toFixed();
31
33
  };
32
34
  /**
33
35
  * @deprecated No longer used
@@ -40,6 +42,60 @@ export const formatEtaInMinutes = (estimatedProcessingTimeInSeconds) => {
40
42
  }
41
43
  return (estimatedProcessingTimeInSeconds / 60).toFixed();
42
44
  };
45
+ /**
46
+ * Keys that require the asset to be the same for all fees
47
+ */
48
+ const AMOUNT_KEYS = [
49
+ 'amount',
50
+ 'normalizedAmount',
51
+ 'minAmount',
52
+ 'minAmountNormalized',
53
+ ];
54
+ /**
55
+ * Keys that can be aggregated across all fees
56
+ */
57
+ const FIAT_OR_USD_KEYS = [
58
+ 'valueInCurrency',
59
+ 'usd',
60
+ 'minAmountValueInCurrency',
61
+ 'minAmountUsd',
62
+ ];
63
+ const KEYS = [...AMOUNT_KEYS, ...FIAT_OR_USD_KEYS];
64
+ /**
65
+ * Groups amounts by matching assetId and sums amount and fiat keys within each group.
66
+ *
67
+ * @param maybeFees - The list of fees to aggregate
68
+ * @returns One dest object per unique asset, or undefined if no fees are provided
69
+ */
70
+ export const sumAmountsByAssetId = (...maybeFees) => {
71
+ const fees = maybeFees
72
+ .flat()
73
+ .flat()
74
+ .filter((value) => value !== undefined && value !== null);
75
+ if (fees.length === 0) {
76
+ return [];
77
+ }
78
+ return fees.reduce((acc, fee) => {
79
+ const feeIndex = acc.findIndex(({ asset }) => assetIdsMatch(asset?.assetId, fee.asset?.assetId));
80
+ if (feeIndex === -1) {
81
+ return [...acc, { ...fee }];
82
+ }
83
+ const aggregatedFees = { ...acc[feeIndex] };
84
+ KEYS.forEach((key) => {
85
+ const value = fee[key];
86
+ if (value) {
87
+ aggregatedFees[key] = new BigNumber(aggregatedFees[key] ?? 0)
88
+ .plus(value)
89
+ .toFixed();
90
+ }
91
+ });
92
+ return [
93
+ ...acc.slice(0, feeIndex),
94
+ aggregatedFees,
95
+ ...acc.slice(feeIndex + 1),
96
+ ];
97
+ }, []);
98
+ };
43
99
  /**
44
100
  * Aggregates a list of amounts into a single fee object. If fees have different assets,
45
101
  * the returned object will only aggregate the usd and valueInCurrency values.
@@ -59,24 +115,6 @@ export const sumAmounts = (...maybeFees) => {
59
115
  * Fees and prices can be denominated in different assets, so we need to check if all fees have the same units
60
116
  */
61
117
  const isSameAssetForAllFees = fees.reduce((acc, fee) => acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId), true);
62
- /**
63
- * Keys that require the asset to be the same for all fees
64
- */
65
- const AMOUNT_KEYS = [
66
- 'amount',
67
- 'normalizedAmount',
68
- 'minAmount',
69
- 'minAmountNormalized',
70
- ];
71
- /**
72
- * Keys that can be aggregated across all fees
73
- */
74
- const FIAT_OR_USD_KEYS = [
75
- 'valueInCurrency',
76
- 'usd',
77
- 'minAmountValueInCurrency',
78
- 'minAmountUsd',
79
- ];
80
118
  return fees.reduce((acc, fee) => {
81
119
  const newAcc = { ...acc };
82
120
  if (isSameAssetForAllFees && fee.asset) {
@@ -1 +1 @@
1
- {"version":3,"file":"number-formatters.js","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../types.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { assetIdsMatch } from './assets.js';\n\n/**\n * 1500000 -> 1.5\n *\n * @param value - The value to convert to token amount\n * @param decimals - The number of decimals to convert to\n * @returns The token amount in string format\n */\nexport const calcNormalizedTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\n/**\n * 1.5 -> 1500000\n *\n * @param value - The amount to convert to token value\n * @param decimals - The number of decimals to convert to\n * @returns The token value in string format\n */\nexport const calcAtomicTokenAmount = (\n value: string | BigNumber | undefined,\n decimals: number | undefined,\n) => {\n if (value === undefined || decimals === undefined) {\n return undefined;\n }\n const divisor = new BigNumber(10).pow(decimals);\n return new BigNumber(value).times(divisor).toFixed();\n};\n\n/**\n * @deprecated No longer used\n * @param estimatedProcessingTimeInSeconds - The estimated processing time in seconds\n * @returns The estimated processing time in minutes\n */\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\n/**\n * Aggregates a list of amounts into a single fee object. If fees have different assets,\n * the returned object will only aggregate the usd and valueInCurrency values.\n *\n * @param maybeFees - The list of fees to aggregate\n * @returns The aggregated fee object, or null if no fees are provided\n */\nexport const sumAmounts = (\n ...maybeFees: (\n | (DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[]\n | undefined\n )[]\n): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n const fees = maybeFees\n .flat()\n .flat()\n .filter(\n (value): value is Partial<QuoteResponse['quote']['dest']> =>\n value !== undefined && value !== null,\n );\n\n if (!fees || fees.length === 0) {\n return undefined;\n }\n\n /**\n * Fees and prices can be denominated in different assets, so we need to check if all fees have the same units\n */\n const isSameAssetForAllFees = fees.reduce(\n (acc, fee) =>\n acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId),\n true,\n );\n\n /**\n * Keys that require the asset to be the same for all fees\n */\n const AMOUNT_KEYS = [\n 'amount' as const,\n 'normalizedAmount' as const,\n 'minAmount' as const,\n 'minAmountNormalized' as const,\n ];\n\n /**\n * Keys that can be aggregated across all fees\n */\n const FIAT_OR_USD_KEYS = [\n 'valueInCurrency' as const,\n 'usd' as const,\n 'minAmountValueInCurrency' as const,\n 'minAmountUsd' as const,\n ];\n\n return fees.reduce((acc, fee) => {\n const newAcc = { ...acc };\n if (isSameAssetForAllFees && fee.asset) {\n newAcc.asset = fee.asset;\n }\n\n AMOUNT_KEYS.forEach((key) => {\n const value = fee[key];\n if (value && isSameAssetForAllFees) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n FIAT_OR_USD_KEYS.forEach((key) => {\n const value = fee[key];\n if (value) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n return newAcc;\n }, {});\n};\n"]}
1
+ {"version":3,"file":"number-formatters.js","sourceRoot":"","sources":["../../src/utils/number-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../types.js';\nimport type { QuoteResponse } from '../validators/quote-response.js';\nimport { assetIdsMatch } from './assets.js';\n\n/**\n * 1500000 -> 1.5\n *\n * @param value - The value to convert to token amount\n * @param decimals - The number of decimals to convert to\n * @param base - The base of the number system to use\n * @returns The token amount in string format\n */\nexport const calcNormalizedTokenAmount = (\n value: string | BigNumber | undefined | null,\n decimals: number | undefined,\n base: number = 10,\n) => {\n if (value === undefined || decimals === undefined || value === null) {\n return undefined;\n }\n const divisor = new BigNumber(base).pow(decimals ?? 0);\n return new BigNumber(value, base).div(divisor).toFixed();\n};\n\n/**\n * 1.5 -> 1500000\n *\n * @param value - The amount to convert to token value\n * @param decimals - The number of decimals to convert to\n * @param base - The base of the number system to use\n * @returns The token value in string format\n */\nexport const calcAtomicTokenAmount = (\n value: string | BigNumber | undefined | null,\n decimals: number | undefined,\n base: number = 10,\n) => {\n if (value === undefined || decimals === undefined || value === null) {\n return undefined;\n }\n const divisor = new BigNumber(base).pow(decimals);\n return new BigNumber(value, base).times(divisor).toFixed();\n};\n\n/**\n * @deprecated No longer used\n * @param estimatedProcessingTimeInSeconds - The estimated processing time in seconds\n * @returns The estimated processing time in minutes\n */\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\n/**\n * Keys that require the asset to be the same for all fees\n */\nconst AMOUNT_KEYS = [\n 'amount' as const,\n 'normalizedAmount' as const,\n 'minAmount' as const,\n 'minAmountNormalized' as const,\n];\n\n/**\n * Keys that can be aggregated across all fees\n */\nconst FIAT_OR_USD_KEYS = [\n 'valueInCurrency' as const,\n 'usd' as const,\n 'minAmountValueInCurrency' as const,\n 'minAmountUsd' as const,\n];\n\nconst KEYS = [...AMOUNT_KEYS, ...FIAT_OR_USD_KEYS];\n\n/**\n * Groups amounts by matching assetId and sums amount and fiat keys within each group.\n *\n * @param maybeFees - The list of fees to aggregate\n * @returns One dest object per unique asset, or undefined if no fees are provided\n */\nexport const sumAmountsByAssetId = (\n ...maybeFees: (\n | (DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[]\n | undefined\n )[]\n): DeepPartial<QuoteResponse['quote']['dest']>[] => {\n const fees = maybeFees\n .flat()\n .flat()\n .filter(\n (value): value is Partial<QuoteResponse['quote']['dest']> =>\n value !== undefined && value !== null,\n );\n\n if (fees.length === 0) {\n return [];\n }\n\n return fees.reduce<DeepPartial<QuoteResponse['quote']['dest']>[]>(\n (acc, fee) => {\n const feeIndex = acc.findIndex(({ asset }) =>\n assetIdsMatch(asset?.assetId, fee.asset?.assetId),\n );\n\n if (feeIndex === -1) {\n return [...acc, { ...fee }];\n }\n\n const aggregatedFees = { ...acc[feeIndex] };\n KEYS.forEach((key) => {\n const value = fee[key];\n if (value) {\n aggregatedFees[key] = new BigNumber(aggregatedFees[key] ?? 0)\n .plus(value)\n .toFixed();\n }\n });\n\n return [\n ...acc.slice(0, feeIndex),\n aggregatedFees,\n ...acc.slice(feeIndex + 1),\n ];\n },\n [],\n );\n};\n\n/**\n * Aggregates a list of amounts into a single fee object. If fees have different assets,\n * the returned object will only aggregate the usd and valueInCurrency values.\n *\n * @param maybeFees - The list of fees to aggregate\n * @returns The aggregated fee object, or null if no fees are provided\n */\nexport const sumAmounts = (\n ...maybeFees: (\n | (DeepPartial<QuoteResponse['quote']['dest']> | undefined | null)[]\n | undefined\n )[]\n): DeepPartial<QuoteResponse['quote']['dest']> | undefined => {\n const fees = maybeFees\n .flat()\n .flat()\n .filter(\n (value): value is Partial<QuoteResponse['quote']['dest']> =>\n value !== undefined && value !== null,\n );\n\n if (!fees || fees.length === 0) {\n return undefined;\n }\n\n /**\n * Fees and prices can be denominated in different assets, so we need to check if all fees have the same units\n */\n const isSameAssetForAllFees = fees.reduce(\n (acc, fee) =>\n acc && assetIdsMatch(fee.asset?.assetId, fees[0]?.asset?.assetId),\n true,\n );\n\n return fees.reduce((acc, fee) => {\n const newAcc = { ...acc };\n if (isSameAssetForAllFees && fee.asset) {\n newAcc.asset = fee.asset;\n }\n\n AMOUNT_KEYS.forEach((key) => {\n const value = fee[key];\n if (value && isSameAssetForAllFees) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n FIAT_OR_USD_KEYS.forEach((key) => {\n const value = fee[key];\n if (value) {\n newAcc[key] = new BigNumber(acc[key] ?? 0).plus(value).toFixed();\n }\n });\n\n return newAcc;\n }, {});\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"calculators.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculators.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,10 @@ export const calcNonEvmTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchan
22
22
  };
23
23
  };
24
24
  export const calcToAmount = (destTokenAmount, destAsset, { exchangeRate, usdExchangeRate }) => {
25
- const normalizedDestAmount = calcNormalizedTokenAmount(destTokenAmount, destAsset.decimals);
25
+ const maybeNormalizedDestAmount = calcNormalizedTokenAmount(destTokenAmount, destAsset.decimals);
26
+ const normalizedDestAmount = maybeNormalizedDestAmount
27
+ ? new BigNumber(maybeNormalizedDestAmount)
28
+ : undefined;
26
29
  return {
27
30
  amount: normalizedDestAmount?.toFixed(),
28
31
  valueInCurrency: exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),
@@ -41,7 +44,10 @@ export const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, {
41
44
  .filter((fee) => fee?.amount &&
42
45
  assetIdsMatch(fee.asset?.assetId, srcAsset.assetId))
43
46
  .reduce((acc, { amount }) => acc.plus(amount), new BigNumber(srcTokenAmount));
44
- const normalizedSentAmount = calcNormalizedTokenAmount(sentAmount, srcAsset.decimals);
47
+ const maybeNormalizedSentAmount = calcNormalizedTokenAmount(sentAmount, srcAsset.decimals);
48
+ const normalizedSentAmount = maybeNormalizedSentAmount
49
+ ? new BigNumber(maybeNormalizedSentAmount)
50
+ : undefined;
45
51
  return {
46
52
  amount: normalizedSentAmount?.toFixed(),
47
53
  valueInCurrency: exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),
@@ -49,7 +55,10 @@ export const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, {
49
55
  };
50
56
  };
51
57
  export const calcBatchFees = (amount, asset, { exchangeRate, usdExchangeRate }) => {
52
- const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);
58
+ const maybeNormalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);
59
+ const normalizedAmount = maybeNormalizedAmount
60
+ ? new BigNumber(maybeNormalizedAmount)
61
+ : undefined;
53
62
  return {
54
63
  amount: normalizedAmount?.toFixed(),
55
64
  valueInCurrency: exchangeRate
@@ -66,8 +75,11 @@ export const calcRelayerFee = (sentAmount, quoteResponse, { exchangeRate, usdExc
66
75
  const relayerFeeAmount = trade.value
67
76
  ? new BigNumber(convertHexToDecimal(trade.value))
68
77
  : undefined;
69
- let relayerFeeInNative = relayerFeeAmount
70
- ? calcNormalizedTokenAmount(relayerFeeAmount, 18)
78
+ const maybeNormalizedRelayerFee = relayerFeeAmount
79
+ ? calcNormalizedTokenAmount(relayerFeeAmount.toFixed(), 18)
80
+ : undefined;
81
+ let relayerFeeInNative = maybeNormalizedRelayerFee
82
+ ? new BigNumber(maybeNormalizedRelayerFee)
71
83
  : undefined;
72
84
  // Subtract srcAmount and other fees from trade value if srcAsset is native
73
85
  if (isNativeAddress(quote.srcAsset.assetId)) {
@@ -162,7 +174,10 @@ export const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, fee
162
174
  const { exchangeRate, usdExchangeRate } = assetIdsMatch(txFee?.asset?.assetId, srcAsset.assetId)
163
175
  ? srcTokenExchangeRate
164
176
  : destTokenExchangeRate;
165
- const normalizedTxFeeAmount = calcNormalizedTokenAmount(txFee?.amount, txFee?.asset.decimals);
177
+ const maybeNormalizedTxFeeAmount = calcNormalizedTokenAmount(txFee?.amount, txFee?.asset.decimals);
178
+ const normalizedTxFeeAmount = maybeNormalizedTxFeeAmount
179
+ ? new BigNumber(maybeNormalizedTxFeeAmount)
180
+ : undefined;
166
181
  return {
167
182
  amount: normalizedTxFeeAmount?.toFixed(),
168
183
  valueInCurrency: exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),
@@ -1 +1 @@
1
- {"version":3,"file":"calculators.js","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EACL,mBAAmB,EACnB,KAAK,EACL,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAQ9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,WAAyC,EACzC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAC;IAC3C,6EAA6E;IAC7E,MAAM,WAAW,GAAG,kBAAkB;QACpC,CAAC,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE;QAC9B,eAAe,EAAE,YAAY,IAAI,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;QAC3E,GAAG,EAAE,eAAe,IAAI,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;KACtE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,eAAmC,EACnC,SAAsB,EACtB,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,oBAAoB,GAAG,yBAAyB,CACpD,eAAe,EACf,SAAS,CAAC,QAAQ,CACnB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE;QACvC,eAAe,EACb,YAAY,IAAI,oBAAoB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;QACrE,GAAG,EACD,eAAe,IAAI,oBAAoB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;KAC5E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAA4B,EACvE,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,SAAS,GAAY,KAAK,EAC1B,EAAE;IACF,sFAAsF;IACtF,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,UAAU,GACd,MAAM,IAAI,SAAS;QACjB,CAAC,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aACnB,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,EAAE,MAAM;YACX,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CACtD;aACA,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EACrC,IAAI,SAAS,CAAC,cAAc,CAAC,CAC9B,CAAC;IACV,MAAM,oBAAoB,GAAG,yBAAyB,CACpD,UAAU,EACV,QAAQ,CAAC,QAAQ,CAClB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE;QACvC,eAAe,EACb,YAAY,IAAI,oBAAoB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;QACrE,GAAG,EACD,eAAe,IAAI,oBAAoB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;KAC5E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,KAAkB,EAClB,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE3E,OAAO;QACL,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE;QACnC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;YACjD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;YACpD,CAAC,CAAC,IAAI;QACR,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAA6C,EAC7C,aAAsC,EACtC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;IACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK;QAClC,CAAC,CAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,kBAAkB,GAAG,gBAAgB;QACvC,CAAC,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEd,2EAA2E;IAC3E,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,kBAAkB,GAAG,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE;QACrC,eAAe,EACb,YAAY,IAAI,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;QACnE,GAAG,EACD,eAAe,IAAI,kBAAkB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;KAC1E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,uBAAuB,GASxB,EAAE,EAAE;IACH,MAAM,kBAAkB,GACtB,aAAa,IAAI,gBAAgB,IAAI,qBAAqB;QACxD,CAAC,CAAC,IAAI,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;aAC3C,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;aACxC,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC;QAClD,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,kBAAkB,GAAG,iBAAiB;QAC1C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,gBAAgB,GAAG,kBAAkB;QACzC,CAAC,CAAC,kBAAkB;YAChB,EAAE,KAAK,CAAC,kBAAkB,IAAI,GAAG,CAAC;YAClC,EAAE,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC;QACrC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,eAAe,GAAG,gBAAgB,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,MAAM,wBAAwB,GAAG,mCAAmC;QAClE,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,mCAAmC,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,uBAAuB;QAC1C,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,uBAAuB,CAAC;QACjD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE;QAClC,eAAe,EAAE,wBAAwB,EAAE,OAAO,EAAE;QACpD,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC7C,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,EAClE,kBAAkB,EAClB,YAAY,EAAE,mCAAmC,EACjD,eAAe,EAAE,uBAAuB,GAI1B,EAAE,EAAE;IAClB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;QACvD,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;QACpC,qBAAqB,EAAE,aAAa,EAAE,QAAQ;QAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB;QAClB,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE;YACL,MAAM;YACN,eAAe;YACf,GAAG;SACJ;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,MAA0D,EAC1D,UAA6C,EAC7C,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,MAAM,EACJ,CAAC,eAAe,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,CAAC;YAC/C,IAAI,SAAS,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,CAAC;iBAC1C,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG,CAAC;iBAC/B,OAAO,EAAE;QACd,eAAe,EACb,CAAC,eAAe,EAAE,eAAe,IAAI,UAAU,EAAE,eAAe,CAAC;YACjE,IAAI,SAAS,CAAC,eAAe,EAAE,eAAe,IAAI,GAAG,CAAC;iBACnD,IAAI,CAAC,UAAU,EAAE,eAAe,IAAI,GAAG,CAAC;iBACxC,OAAO,EAAE;QACd,GAAG,EACD,CAAC,eAAe,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,CAAC;YACzC,IAAI,SAAS,CAAC,eAAe,EAAE,GAAG,IAAI,GAAG,CAAC;iBACvC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,GAAG,CAAC;iBAC5B,OAAO,EAAE;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,EACE,WAAW,EACX,eAAe,EACf,QAAQ,EACR,OAAO,EAAE,EAAE,KAAK,EAAE,GACO,EAC3B,oBAAkC,EAClC,qBAAmC,EACnC,EAAE;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,+EAA+E;IAC/E,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,aAAa,CACrD,KAAK,EAAE,KAAK,EAAE,OAAO,EACrB,QAAQ,CAAC,OAAO,CACjB;QACC,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,qBAAqB,CAAC;IAC1B,MAAM,qBAAqB,GAAG,yBAAyB,CACrD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,QAAQ,CACtB,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE;QACxC,eAAe,EACb,YAAY,IAAI,qBAAqB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;QACtE,GAAG,EACD,eAAe;YACf,qBAAqB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE;KAC1D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,aAAyC,EACzC,wBAAoD,EACpD,EACE,OAAO,EAAE,EAAE,KAAK,EAAE,EAClB,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,GACV,EAC3B,EAAE;IACF,8FAA8F;IAC9F,IAAI,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QACtD,OAAO;YACL,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,GAAG,EAAE,aAAa,CAAC,GAAG;SACvB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,eAAe,EACb,aAAa,CAAC,eAAe;YAC7B,wBAAwB,CAAC,eAAe;YACxC,IAAI,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC;iBACzC,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC;iBAC/C,OAAO,EAAE;QACd,GAAG,EACD,aAAa,CAAC,GAAG;YACjB,wBAAwB,CAAC,GAAG;YAC5B,IAAI,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC;iBAC7B,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC;iBACnC,OAAO,EAAE;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,UAAmB,EAAE,eAAwB,EAAE,EAAE,CAC5E,eAAe,IAAI,UAAU;IAC3B,CAAC,CAAC,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;IAC1D,CAAC,CAAC,SAAS,CAAC;AAEhB,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,cAAqD,EACrD,UAA6C,EAC7C,EAAE,CAAC,CAAC;IACJ,eAAe,EACb,cAAc,CAAC,eAAe;QAC9B,UAAU,CAAC,eAAe;QAC1B,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC;aACtC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;aACrC,OAAO,EAAE;IACd,GAAG,EACD,cAAc,CAAC,GAAG;QAClB,UAAU,CAAC,GAAG;QACd,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;CACpE,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,cAAqD,EACrD,UAA6C,EAC9B,EAAE;IACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QACvD,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;aACvC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,OAAO,EAAE,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;QAC/B,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;aAC3B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;aACnB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,OAAO,EAAE,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAEQ,EACR,EAAE;IACF,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;IACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC;IAExC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAqB,EAAE,CAC9D,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAE/B,MAAM,eAAe,GACnB,iBAAiB,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC;QAC1D,CAAC,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QAC3D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,GAAG,GACP,iBAAiB,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC;QACxD,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;QACzD,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,eAAe;QACf,GAAG;KACJ,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAsC,EACtC,OAQC,EACc,EAAE;IACjB,MAAM,EACJ,gBAAgB,GAAG,EAAE,EACrB,oBAAoB,GAAG,EAAE,EACzB,qBAAqB,GAAG,EAAE,EAC1B,kBAAkB,GAAG,EAAE,GACxB,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE7D,MAAM,UAAU,GAAG,cAAc,CAC/B,OAAO,CAAC,KAAK,EACb,oBAAoB,EACpB,SAAS,CACV,CAAC;IAEF,MAAM,aAAa,GAAG,YAAY,CAChC,OAAO,CAAC,KAAK,CAAC,eAAe,EAC7B,OAAO,CAAC,KAAK,CAAC,SAAS,EACvB,qBAAqB,CACtB,CAAC;IACF,MAAM,gBAAgB,GAAG,YAAY,CACnC,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,EACjE,OAAO,CAAC,KAAK,CAAC,SAAS,EACvB,qBAAqB,CACtB,CAAC;IAEF,MAAM,cAAc,GAAG,kBAAkB,CACvC,OAAO,CAAC,KAAK,EACb,oBAAoB,EACpB,qBAAqB,CACtB,CAAC;IAEF,IAAI,wBAAwB,EAAE,UAAU,EAAE,MAAM,CAAC;IAEjD,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QACrE,MAAM,GAAG,8BAA8B,CAAC;YACtC,WAAW,EAAE,OAAO;YACpB,GAAG,gBAAgB;YACnB,GAAG,kBAAkB;SACtB,CAAC,CAAC;QACH,iEAAiE;QACjE,wBAAwB,GAAG,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,sDAAsD;QACtD,wBAAwB,GAAG,yBAAyB,CAClD,OAAO,EACP,kBAAkB,CACnB,CAAC;QACF,MAAM,GAAG;YACP,KAAK,EAAE,wBAAwB;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB,CACvC,aAAa,EACb,wBAAwB,EACxB,OAAO,CAAC,KAAK,CACd,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAElD,4HAA4H;IAC5H,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IAEnE,OAAO;QACL,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;QAC/D;;;;WAIG;QACH,eAAe,EAAE,wBAAwB;QACzC;;;;WAIG;QACH,MAAM;QACN,GAAG,eAAe,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;QACtD,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;QAClC,GAAG,eAAe,CAAC,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;QACtD,GAAG,eAAe,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;QAC9C,GAAG,eAAe,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { isQuoteResponseV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { assetIdsMatch } from '../assets.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport { includeIfTruthy } from './include-if-truthy.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponseV1 & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, srcTokenAmount is the total\n // fixed commitment the user makes to the protocol — the protocol fee is\n // already baked in. Adding feeData fees on top would double-count them.\n // For conventional swaps, srcTokenAmount is the net routing amount (fees\n // excluded), so the src-token fees must be added to get the wallet deduction.\n const sentAmount =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n assetIdsMatch(fee.asset?.assetId, srcAsset.assetId),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcNormalizedTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n let relayerFeeInNative = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount, 18)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei?: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } = assetIdsMatch(\n txFee?.asset?.assetId,\n srcAsset.assetId,\n )\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['quote'],\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (assetIdsMatch(txFee?.asset?.assetId, destAssetId)) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = isQuoteResponseV2(quote);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...includeIfTruthy(adjustedReturn, { adjustedReturn }),\n ...includeIfTruthy(cost, { cost }),\n ...includeIfTruthy(includedTxFees, { includedTxFees }),\n ...includeIfTruthy(relayerFee, { relayerFee }),\n ...includeIfTruthy(priceImpact, { priceImpact }),\n };\n};\n"]}
1
+ {"version":3,"file":"calculators.js","sourceRoot":"","sources":["../../../src/utils/quote-metadata/calculators.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { is } from '@metamask/superstruct';\nimport { BigNumber } from 'bignumber.js';\n\nimport { toQuoteResponseV1 } from '../../coercers/quote-response-v2-to-v1.js';\nimport type {\n L1GasFees,\n ExchangeRate,\n NonEvmFees,\n DeepPartial,\n} from '../../types.js';\nimport type { BridgeAsset } from '../../validators/bridge-asset.js';\nimport { FloatStringSchema } from '../../validators/number.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { isQuoteResponseV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { TxData } from '../../validators/trade.js';\nimport { assetIdsMatch } from '../assets.js';\nimport { isEvmQuoteResponse, isNativeAddress } from '../bridge.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\nimport { includeIfTruthy } from './include-if-truthy.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponseV1 & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = nonEvmFeesInNative\n ? new BigNumber(nonEvmFeesInNative)\n : undefined;\n\n return {\n amount: feeInNative?.toFixed(),\n valueInCurrency: exchangeRate && feeInNative?.times(exchangeRate).toFixed(),\n usd: usdExchangeRate && feeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string | undefined,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const maybeNormalizedDestAmount = calcNormalizedTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n const normalizedDestAmount = maybeNormalizedDestAmount\n ? new BigNumber(maybeNormalizedDestAmount)\n : undefined;\n return {\n amount: normalizedDestAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedDestAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedDestAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: QuoteResponseV1['quote'],\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n isQuoteV2: boolean = false,\n) => {\n // For intent-based swaps or converted V2 quote responses, srcTokenAmount is the total\n // fixed commitment the user makes to the protocol — the protocol fee is\n // already baked in. Adding feeData fees on top would double-count them.\n // For conventional swaps, srcTokenAmount is the net routing amount (fees\n // excluded), so the src-token fees must be added to get the wallet deduction.\n const sentAmount =\n intent || isQuoteV2\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter(\n (fee) =>\n fee?.amount &&\n assetIdsMatch(fee.asset?.assetId, srcAsset.assetId),\n )\n .reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const maybeNormalizedSentAmount = calcNormalizedTokenAmount(\n sentAmount,\n srcAsset.decimals,\n );\n const normalizedSentAmount = maybeNormalizedSentAmount\n ? new BigNumber(maybeNormalizedSentAmount)\n : undefined;\n\n return {\n amount: normalizedSentAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedSentAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && normalizedSentAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const maybeNormalizedAmount = calcNormalizedTokenAmount(\n amount,\n asset.decimals,\n );\n const normalizedAmount = maybeNormalizedAmount\n ? new BigNumber(maybeNormalizedAmount)\n : undefined;\n\n return {\n amount: normalizedAmount?.toFixed(),\n valueInCurrency: exchangeRate\n ? normalizedAmount?.times(exchangeRate).toFixed()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount?.times(usdExchangeRate).toFixed()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n sentAmount: ReturnType<typeof calcSentAmount>,\n quoteResponse: QuoteResponseV1<TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = trade.value\n ? new BigNumber(convertHexToDecimal(trade.value))\n : undefined;\n const maybeNormalizedRelayerFee = relayerFeeAmount\n ? calcNormalizedTokenAmount(relayerFeeAmount.toFixed(), 18)\n : undefined;\n let relayerFeeInNative = maybeNormalizedRelayerFee\n ? new BigNumber(maybeNormalizedRelayerFee)\n : undefined;\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.assetId)) {\n relayerFeeInNative = relayerFeeInNative?.minus(sentAmount.amount ?? '0');\n }\n\n if (relayerFeeInNative?.lte(0)) {\n return undefined;\n }\n\n return {\n amount: relayerFeeInNative?.toFixed(),\n valueInCurrency:\n exchangeRate && relayerFeeInNative?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate && relayerFeeInNative?.times(usdExchangeRate).toFixed(),\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei?: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec =\n tradeGasLimit || approvalGasLimit || resetApprovalGasLimit\n ? new BigNumber(tradeGasLimit?.toFixed() ?? '0')\n .plus(approvalGasLimit?.toFixed() ?? '0')\n .plus(resetApprovalGasLimit?.toFixed() ?? '0')\n : undefined;\n\n const l1GasFeesInDecGWei = l1GasFeesInHexWei\n ? weiHexToGweiDec(toHex(l1GasFeesInHexWei))\n : undefined;\n\n const gasFeesInDecGwei = totalGasLimitInDec\n ? totalGasLimitInDec\n ?.times(feePerGasInDecGwei ?? '0')\n ?.plus(l1GasFeesInDecGWei ?? '0')\n : undefined;\n const gasFeesInDecEth = gasFeesInDecGwei?.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth?.times(nativeToDisplayCurrencyExchangeRate)\n : undefined;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth?.times(nativeToUsdExchangeRate)\n : undefined;\n\n return {\n amount: gasFeesInDecEth?.toFixed(),\n valueInCurrency: gasFeesInDisplayCurrency?.toFixed(),\n usd: gasFeesInUSD?.toFixed(),\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n feePerGasInDecGwei?: string;\n} & ExchangeRate) => {\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n gasFee: { total?: Partial<TokenAmountValues> } | undefined,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n const { total: gasFeeToDisplay } = gasFee ?? {};\n return {\n amount:\n (gasFeeToDisplay?.amount ?? relayerFee?.amount) &&\n new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee?.amount ?? '0')\n .toFixed(),\n valueInCurrency:\n (gasFeeToDisplay?.valueInCurrency ?? relayerFee?.valueInCurrency) &&\n new BigNumber(gasFeeToDisplay?.valueInCurrency ?? '0')\n .plus(relayerFee?.valueInCurrency ?? '0')\n .toFixed(),\n usd:\n (gasFeeToDisplay?.usd ?? relayerFee?.usd) &&\n new BigNumber(gasFeeToDisplay?.usd ?? '0')\n .plus(relayerFee?.usd ?? '0')\n .toFixed(),\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n {\n gasIncluded,\n gasIncluded7702,\n srcAsset,\n feeData: { txFee },\n }: QuoteResponseV1['quote'],\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return undefined;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } = assetIdsMatch(\n txFee?.asset?.assetId,\n srcAsset.assetId,\n )\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const maybeNormalizedTxFeeAmount = calcNormalizedTokenAmount(\n txFee?.amount,\n txFee?.asset.decimals,\n );\n\n const normalizedTxFeeAmount = maybeNormalizedTxFeeAmount\n ? new BigNumber(maybeNormalizedTxFeeAmount)\n : undefined;\n\n return {\n amount: normalizedTxFeeAmount?.toFixed(),\n valueInCurrency:\n exchangeRate && normalizedTxFeeAmount?.times(exchangeRate).toFixed(),\n usd:\n usdExchangeRate &&\n normalizedTxFeeAmount?.times(usdExchangeRate).toFixed(),\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: Partial<TokenAmountValues>,\n totalEstimatedNetworkFee: Partial<TokenAmountValues>,\n {\n feeData: { txFee },\n destAsset: { assetId: destAssetId },\n }: QuoteResponseV1['quote'],\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (assetIdsMatch(txFee?.asset?.assetId, destAssetId)) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency &&\n totalEstimatedNetworkFee.valueInCurrency &&\n new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toFixed(),\n usd:\n toTokenAmount.usd &&\n totalEstimatedNetworkFee.usd &&\n new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toFixed(),\n };\n};\n\nexport const calcSwapRate = (sentAmount?: string, destTokenAmount?: string) =>\n destTokenAmount && sentAmount\n ? new BigNumber(destTokenAmount).div(sentAmount).toFixed()\n : undefined;\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency &&\n sentAmount.valueInCurrency &&\n new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toFixed(),\n usd:\n adjustedReturn.usd &&\n sentAmount.usd &&\n new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toFixed(),\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toFixed();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toFixed();\n }\n\n return null;\n};\n\n/**\n * Returns the fiat price impact for a bridge quote — the difference between\n * the source input fiat amount and the destination output fiat amount\n *\n * @param quote - The active quote\n * @returns Formatted fiat impact string, or `undefined` when either fiat value is unavailable.\n */\nexport const calcPriceImpact = (\n quote?: DeepPartial<\n Pick<QuoteMetadata, 'sentAmount' | 'toTokenAmount'>\n > | null,\n) => {\n if (!quote?.sentAmount || !quote?.toTokenAmount) {\n return undefined;\n }\n\n const sourceFiat = quote.sentAmount.valueInCurrency;\n const destFiat = quote.toTokenAmount.valueInCurrency;\n const sourceUsd = quote.sentAmount.usd;\n const destUsd = quote.toTokenAmount.usd;\n\n const isSourceFiatValid = (value: unknown): value is string[] =>\n is(value, FloatStringSchema);\n\n const valueInCurrency =\n isSourceFiatValid(sourceFiat) && isSourceFiatValid(destFiat)\n ? new BigNumber(sourceFiat).minus(destFiat).abs().toFixed()\n : undefined;\n const usd =\n isSourceFiatValid(sourceUsd) && isSourceFiatValid(destUsd)\n ? new BigNumber(sourceUsd).minus(destUsd).abs().toFixed()\n : undefined;\n\n if (!valueInCurrency && !usd) {\n return undefined;\n }\n\n return {\n valueInCurrency,\n usd,\n };\n};\n\n/**\n * Calculates quote metadata, such as converted fiat amounts and fees,\n * based on the controller state and the quote response\n *\n * @param quote - The quote response to calculate the metadata for\n * @param options - The options for the calculation\n * @param options.bridgeFeesPerGas - The bridge fees per gas\n * @param options.srcTokenExchangeRate - The exchange rate for the source token\n * @param options.destTokenExchangeRate - The exchange rate for the destination token\n * @param options.nativeExchangeRate - The exchange rate for the native token\n * @returns The calculated metadata\n */\nexport const calcQuoteMetadata = (\n quote: QuoteResponseV1 | QuoteResponse,\n options: {\n bridgeFeesPerGas: null | {\n estimatedBaseFeeInDecGwei: string | null;\n feePerGasInDecGwei?: string;\n };\n srcTokenExchangeRate: ExchangeRate;\n destTokenExchangeRate: ExchangeRate;\n nativeExchangeRate: ExchangeRate;\n },\n): QuoteMetadata => {\n const {\n bridgeFeesPerGas = {},\n srcTokenExchangeRate = {},\n destTokenExchangeRate = {},\n nativeExchangeRate = {},\n } = options;\n\n const isQuoteV2 = isQuoteResponseV2(quote);\n const quoteV1 = isQuoteV2 ? toQuoteResponseV1(quote) : quote;\n\n const sentAmount = calcSentAmount(\n quoteV1.quote,\n srcTokenExchangeRate,\n isQuoteV2,\n );\n\n const toTokenAmount = calcToAmount(\n quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n const minToTokenAmount = calcToAmount(\n quoteV1.quote.minDestTokenAmount ?? quoteV1.quote.destTokenAmount,\n quoteV1.quote.destAsset,\n destTokenExchangeRate,\n );\n\n const includedTxFees = calcIncludedTxFees(\n quoteV1.quote,\n srcTokenExchangeRate,\n destTokenExchangeRate,\n );\n\n let totalEstimatedNetworkFee, relayerFee, gasFee;\n\n if (isEvmQuoteResponse(quoteV1)) {\n relayerFee = calcRelayerFee(sentAmount, quoteV1, nativeExchangeRate);\n gasFee = calcEstimatedAndMaxTotalGasFee({\n bridgeQuote: quoteV1,\n ...bridgeFeesPerGas,\n ...nativeExchangeRate,\n });\n // Uses total gasFee to calculate the total estimated network fee\n totalEstimatedNetworkFee = calcTotalEstimatedNetworkFee(gasFee, relayerFee);\n } else {\n // Use the new generic function for all non-EVM chains\n totalEstimatedNetworkFee = calcNonEvmTotalNetworkFee(\n quoteV1,\n nativeExchangeRate,\n );\n gasFee = {\n total: totalEstimatedNetworkFee,\n };\n }\n\n const adjustedReturn = calcAdjustedReturn(\n toTokenAmount,\n totalEstimatedNetworkFee,\n quoteV1.quote,\n );\n const cost = calcCost(adjustedReturn, sentAmount);\n\n // The quote has not been updated at this point, so we need to calculate the price impact using sentAmount and toTokenAmount\n const priceImpact = calcPriceImpact({ sentAmount, toTokenAmount });\n\n return {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate: calcSwapRate(sentAmount.amount, toTokenAmount.amount),\n /**\n This is the amount required to submit all the transactions.\n Includes the relayer fee or other native fees.\n Should be used for balance checks and tx submission.\n */\n totalNetworkFee: totalEstimatedNetworkFee,\n /**\n This contains gas fee estimates for the bridge transaction\n Does not include the relayer fee (if needed), just the gasLimit and effectiveGas returned by the bridge API.\n Should only be used for display purposes.\n */\n gasFee,\n ...includeIfTruthy(adjustedReturn, { adjustedReturn }),\n ...includeIfTruthy(cost, { cost }),\n ...includeIfTruthy(includedTxFees, { includedTxFees }),\n ...includeIfTruthy(relayerFee, { relayerFee }),\n ...includeIfTruthy(priceImpact, { priceImpact }),\n };\n};\n"]}
@@ -11,21 +11,21 @@ export const toNormalizedAmounts = (quoteResponseV2) => {
11
11
  return {
12
12
  quote: {
13
13
  src: {
14
- normalizedAmount: calcNormalizedTokenAmount(src?.amount, src?.asset?.decimals)?.toFixed(),
14
+ normalizedAmount: calcNormalizedTokenAmount(src?.amount, src?.asset?.decimals),
15
15
  },
16
16
  dest: {
17
- normalizedAmount: calcNormalizedTokenAmount(dest?.amount, dest?.asset?.decimals)?.toFixed(),
18
- minAmountNormalized: calcNormalizedTokenAmount(dest?.minAmount, dest?.asset?.decimals)?.toFixed(),
17
+ normalizedAmount: calcNormalizedTokenAmount(dest?.amount, dest?.asset?.decimals),
18
+ minAmountNormalized: calcNormalizedTokenAmount(dest?.minAmount, dest?.asset?.decimals),
19
19
  },
20
20
  feeData: {
21
21
  network: feeData?.[FeeType.NETWORK]?.map((networkFee) => ({
22
- normalizedAmount: calcNormalizedTokenAmount(networkFee?.amount, networkFee?.asset?.decimals)?.toFixed(),
22
+ normalizedAmount: calcNormalizedTokenAmount(networkFee?.amount, networkFee?.asset?.decimals),
23
23
  })),
24
24
  relayer: feeData?.[FeeType.RELAYER]?.map((relayerFee) => ({
25
- normalizedAmount: calcNormalizedTokenAmount(relayerFee.amount, relayerFee.asset?.decimals)?.toFixed(),
25
+ normalizedAmount: calcNormalizedTokenAmount(relayerFee.amount, relayerFee.asset?.decimals),
26
26
  })),
27
27
  txFee: feeData?.[FeeType.TX_FEE]?.map((txFee) => ({
28
- normalizedAmount: calcNormalizedTokenAmount(txFee.amount, txFee.asset?.decimals)?.toFixed(),
28
+ normalizedAmount: calcNormalizedTokenAmount(txFee.amount, txFee.asset?.decimals),
29
29
  })),
30
30
  },
31
31
  },
@@ -1 +1 @@
1
- {"version":3,"file":"to-normalized-amounts.js","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-normalized-amounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,eAA2C,EACf,EAAE;IAC9B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;IAE3D,OAAO;QACL,KAAK,EAAE;YACL,GAAG,EAAE;gBACH,gBAAgB,EAAE,yBAAyB,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,KAAK,EAAE,QAAQ,CACrB,EAAE,OAAO,EAAE;aACb;YACD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,yBAAyB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,KAAK,EAAE,QAAQ,CACtB,EAAE,OAAO,EAAE;gBACZ,mBAAmB,EAAE,yBAAyB,CAC5C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,KAAK,EAAE,QAAQ,CACtB,EAAE,OAAO,EAAE;aACb;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACxD,gBAAgB,EAAE,yBAAyB,CACzC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,EAAE,QAAQ,CAC5B,EAAE,OAAO,EAAE;iBACb,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACxD,gBAAgB,EAAE,yBAAyB,CACzC,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAC3B,EAAE,OAAO,EAAE;iBACb,CAAC,CAAC;gBACH,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAChD,gBAAgB,EAAE,yBAAyB,CACzC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EAAE,QAAQ,CACtB,EAAE,OAAO,EAAE;iBACb,CAAC,CAAC;aACJ;SACF;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { DeepPartial } from '../../types.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { FeeType } from '../../validators/quote.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\n\n/**\n * Builds a partial {@link QuoteResponese} with normalized amounts\n *\n * @param quoteResponseV2 - The {@link QuoteResponse} to convert\n * @returns The {@link DeepPartial<QuoteResponse>}\n */\nexport const toNormalizedAmounts = (\n quoteResponseV2: DeepPartial<QuoteResponse>,\n): DeepPartial<QuoteResponse> => {\n const { src, dest, feeData } = quoteResponseV2.quote ?? {};\n\n return {\n quote: {\n src: {\n normalizedAmount: calcNormalizedTokenAmount(\n src?.amount,\n src?.asset?.decimals,\n )?.toFixed(),\n },\n dest: {\n normalizedAmount: calcNormalizedTokenAmount(\n dest?.amount,\n dest?.asset?.decimals,\n )?.toFixed(),\n minAmountNormalized: calcNormalizedTokenAmount(\n dest?.minAmount,\n dest?.asset?.decimals,\n )?.toFixed(),\n },\n feeData: {\n network: feeData?.[FeeType.NETWORK]?.map((networkFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n networkFee?.amount,\n networkFee?.asset?.decimals,\n )?.toFixed(),\n })),\n relayer: feeData?.[FeeType.RELAYER]?.map((relayerFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n relayerFee.amount,\n relayerFee.asset?.decimals,\n )?.toFixed(),\n })),\n txFee: feeData?.[FeeType.TX_FEE]?.map((txFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n txFee.amount,\n txFee.asset?.decimals,\n )?.toFixed(),\n })),\n },\n },\n };\n};\n"]}
1
+ {"version":3,"file":"to-normalized-amounts.js","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-normalized-amounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,eAA2C,EACf,EAAE;IAC9B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;IAE3D,OAAO;QACL,KAAK,EAAE;YACL,GAAG,EAAE;gBACH,gBAAgB,EAAE,yBAAyB,CACzC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,KAAK,EAAE,QAAQ,CACrB;aACF;YACD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,yBAAyB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,KAAK,EAAE,QAAQ,CACtB;gBACD,mBAAmB,EAAE,yBAAyB,CAC5C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,KAAK,EAAE,QAAQ,CACtB;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACxD,gBAAgB,EAAE,yBAAyB,CACzC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,EAAE,QAAQ,CAC5B;iBACF,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACxD,gBAAgB,EAAE,yBAAyB,CACzC,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAC3B;iBACF,CAAC,CAAC;gBACH,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAChD,gBAAgB,EAAE,yBAAyB,CACzC,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,EAAE,QAAQ,CACtB;iBACF,CAAC,CAAC;aACJ;SACF;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { DeepPartial } from '../../types.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { FeeType } from '../../validators/quote.js';\nimport { calcNormalizedTokenAmount } from '../number-formatters.js';\n\n/**\n * Builds a partial {@link QuoteResponese} with normalized amounts\n *\n * @param quoteResponseV2 - The {@link QuoteResponse} to convert\n * @returns The {@link DeepPartial<QuoteResponse>}\n */\nexport const toNormalizedAmounts = (\n quoteResponseV2: DeepPartial<QuoteResponse>,\n): DeepPartial<QuoteResponse> => {\n const { src, dest, feeData } = quoteResponseV2.quote ?? {};\n\n return {\n quote: {\n src: {\n normalizedAmount: calcNormalizedTokenAmount(\n src?.amount,\n src?.asset?.decimals,\n ),\n },\n dest: {\n normalizedAmount: calcNormalizedTokenAmount(\n dest?.amount,\n dest?.asset?.decimals,\n ),\n minAmountNormalized: calcNormalizedTokenAmount(\n dest?.minAmount,\n dest?.asset?.decimals,\n ),\n },\n feeData: {\n network: feeData?.[FeeType.NETWORK]?.map((networkFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n networkFee?.amount,\n networkFee?.asset?.decimals,\n ),\n })),\n relayer: feeData?.[FeeType.RELAYER]?.map((relayerFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n relayerFee.amount,\n relayerFee.asset?.decimals,\n ),\n })),\n txFee: feeData?.[FeeType.TX_FEE]?.map((txFee) => ({\n normalizedAmount: calcNormalizedTokenAmount(\n txFee.amount,\n txFee.asset?.decimals,\n ),\n })),\n },\n },\n };\n};\n"]}
@@ -0,0 +1,21 @@
1
+ import type { CaipAssetType } from '@metamask/utils';
2
+ import type { DeepPartial } from '../../types.js';
3
+ import type { AmountsAndAsset } from '../../validators/amount-and-asset.js';
4
+ import type { QuoteResponse } from '../../validators/quote-response.js';
5
+ /**
6
+ * Checks if the balance of the wallet is greater than or equal to the total fees
7
+ *
8
+ * @param options - The options for the function
9
+ * @param options.balances - The normalized balances of the wallet, indexed by assetId
10
+ * @param options.quote - The quote to validate
11
+ * @param options.minimumBalance - The minimum balance required in the wallet after the quote is executed
12
+ * @param options.ignoreGasLessFlags - If true, perform balance check regardless of the gasless flags (i.e for metrics)
13
+ * @returns true if the balance is greater than or equal to the total fees OR if the quote has no network fee, false otherwise
14
+ */
15
+ export declare const hasSufficientGasForQuote: ({ balances, quote, minimumBalance, ignoreGasLessFlags, }: {
16
+ balances: Record<CaipAssetType, AmountsAndAsset['normalizedAmount'] | undefined>;
17
+ quote: DeepPartial<QuoteResponse['quote']>;
18
+ minimumBalance?: AmountsAndAsset;
19
+ ignoreGasLessFlags?: boolean;
20
+ }) => boolean;
21
+ //# sourceMappingURL=insufficient-gas-for-quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insufficient-gas-for-quote.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-warnings/insufficient-gas-for-quote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAKxE;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,6DAKlC;IACD,QAAQ,EAAE,MAAM,CACd,aAAa,EACb,eAAe,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAChD,CAAC;IACF,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,KAAG,OAoBH,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { isNativeAddress } from '../bridge.js';
2
+ import { sumAmountsByAssetId } from '../number-formatters.js';
3
+ import { balanceGte } from './utils.js';
4
+ /**
5
+ * Checks if the balance of the wallet is greater than or equal to the total fees
6
+ *
7
+ * @param options - The options for the function
8
+ * @param options.balances - The normalized balances of the wallet, indexed by assetId
9
+ * @param options.quote - The quote to validate
10
+ * @param options.minimumBalance - The minimum balance required in the wallet after the quote is executed
11
+ * @param options.ignoreGasLessFlags - If true, perform balance check regardless of the gasless flags (i.e for metrics)
12
+ * @returns true if the balance is greater than or equal to the total fees OR if the quote has no network fee, false otherwise
13
+ */
14
+ export const hasSufficientGasForQuote = ({ balances, quote, minimumBalance, ignoreGasLessFlags = false, }) => {
15
+ const { feeData, src, gasIncluded, gasIncluded7702, gasSponsored } = quote;
16
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
17
+ const isGasless = Boolean(gasIncluded || gasSponsored || gasIncluded7702);
18
+ // Return early if quote is gasless
19
+ if (isGasless && !ignoreGasLessFlags) {
20
+ return true;
21
+ }
22
+ const totalFees = sumAmountsByAssetId(feeData?.network, feeData?.relayer,
23
+ // Include src amount in balance check if src asset is native
24
+ isNativeAddress(src?.asset?.assetId) ? [src] : undefined, minimumBalance ? [minimumBalance] : undefined);
25
+ // Compare total fees to the balance of the wallet
26
+ return balanceGte(balances, totalFees);
27
+ };
28
+ //# sourceMappingURL=insufficient-gas-for-quote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insufficient-gas-for-quote.js","sourceRoot":"","sources":["../../../src/utils/quote-warnings/insufficient-gas-for-quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,QAAQ,EACR,KAAK,EACL,cAAc,EACd,kBAAkB,GAAG,KAAK,GAS3B,EAAW,EAAE;IACZ,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAE3E,wEAAwE;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,IAAI,eAAe,CAAC,CAAC;IAC1E,mCAAmC;IACnC,IAAI,SAAS,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CACnC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO;IAChB,6DAA6D;IAC7D,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EACxD,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAC9C,CAAC;IAEF,kDAAkD;IAClD,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC","sourcesContent":["import type { CaipAssetType } from '@metamask/utils';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { AmountsAndAsset } from '../../validators/amount-and-asset.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { isNativeAddress } from '../bridge.js';\nimport { sumAmountsByAssetId } from '../number-formatters.js';\nimport { balanceGte } from './utils.js';\n\n/**\n * Checks if the balance of the wallet is greater than or equal to the total fees\n *\n * @param options - The options for the function\n * @param options.balances - The normalized balances of the wallet, indexed by assetId\n * @param options.quote - The quote to validate\n * @param options.minimumBalance - The minimum balance required in the wallet after the quote is executed\n * @param options.ignoreGasLessFlags - If true, perform balance check regardless of the gasless flags (i.e for metrics)\n * @returns true if the balance is greater than or equal to the total fees OR if the quote has no network fee, false otherwise\n */\nexport const hasSufficientGasForQuote = ({\n balances,\n quote,\n minimumBalance,\n ignoreGasLessFlags = false,\n}: {\n balances: Record<\n CaipAssetType,\n AmountsAndAsset['normalizedAmount'] | undefined\n >;\n quote: DeepPartial<QuoteResponse['quote']>;\n minimumBalance?: AmountsAndAsset;\n ignoreGasLessFlags?: boolean;\n}): boolean => {\n const { feeData, src, gasIncluded, gasIncluded7702, gasSponsored } = quote;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const isGasless = Boolean(gasIncluded || gasSponsored || gasIncluded7702);\n // Return early if quote is gasless\n if (isGasless && !ignoreGasLessFlags) {\n return true;\n }\n\n const totalFees = sumAmountsByAssetId(\n feeData?.network,\n feeData?.relayer,\n // Include src amount in balance check if src asset is native\n isNativeAddress(src?.asset?.assetId) ? [src] : undefined,\n minimumBalance ? [minimumBalance] : undefined,\n );\n\n // Compare total fees to the balance of the wallet\n return balanceGte(balances, totalFees);\n};\n"]}
@@ -0,0 +1,10 @@
1
+ import type { DeepPartial } from '../../types.js';
2
+ import type { QuoteResponse } from '../../validators/quote-response.js';
3
+ /**
4
+ * Checks if the network fee is defined and greater than 0
5
+ *
6
+ * @param quote - The quote to validate
7
+ * @returns true if quote is gasless or the network fee is defined and greater than 0, false otherwise
8
+ */
9
+ export declare const hasNetworkFee: (quote: DeepPartial<QuoteResponse['quote']>) => boolean;
10
+ //# sourceMappingURL=network-fee-unavailable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-fee-unavailable.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-warnings/network-fee-unavailable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAGxE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UACjB,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KACzC,OAwBF,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { BigNumber } from 'bignumber.js';
2
+ import { sumAmounts } from '../number-formatters.js';
3
+ /**
4
+ * Checks if the network fee is defined and greater than 0
5
+ *
6
+ * @param quote - The quote to validate
7
+ * @returns true if quote is gasless or the network fee is defined and greater than 0, false otherwise
8
+ */
9
+ export const hasNetworkFee = (quote) => {
10
+ const { gasIncluded, gasSponsored, gasIncluded7702 } = quote;
11
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
12
+ const isGasless = Boolean(gasIncluded || gasSponsored || gasIncluded7702);
13
+ if (isGasless) {
14
+ return true;
15
+ }
16
+ const totalNetworkFee = sumAmounts(quote.feeData?.network, quote.feeData?.relayer);
17
+ const totalNetworkFeeAmount = [
18
+ totalNetworkFee?.valueInCurrency,
19
+ totalNetworkFee?.normalizedAmount,
20
+ totalNetworkFee?.amount,
21
+ totalNetworkFee?.usd,
22
+ ].find((amount) => amount && amount !== '0');
23
+ return Boolean(totalNetworkFeeAmount && new BigNumber(totalNetworkFeeAmount).gt(0));
24
+ };
25
+ //# sourceMappingURL=network-fee-unavailable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-fee-unavailable.js","sourceRoot":"","sources":["../../../src/utils/quote-warnings/network-fee-unavailable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAA0C,EACjC,EAAE;IACX,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAC7D,wEAAwE;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,IAAI,eAAe,CAAC,CAAC;IAE1E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,UAAU,CAChC,KAAK,CAAC,OAAO,EAAE,OAAO,EACtB,KAAK,CAAC,OAAO,EAAE,OAAO,CACvB,CAAC;IAEF,MAAM,qBAAqB,GAAG;QAC5B,eAAe,EAAE,eAAe;QAChC,eAAe,EAAE,gBAAgB;QACjC,eAAe,EAAE,MAAM;QACvB,eAAe,EAAE,GAAG;KACrB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC;IAE7C,OAAO,OAAO,CACZ,qBAAqB,IAAI,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { sumAmounts } from '../number-formatters.js';\n\n/**\n * Checks if the network fee is defined and greater than 0\n *\n * @param quote - The quote to validate\n * @returns true if quote is gasless or the network fee is defined and greater than 0, false otherwise\n */\nexport const hasNetworkFee = (\n quote: DeepPartial<QuoteResponse['quote']>,\n): boolean => {\n const { gasIncluded, gasSponsored, gasIncluded7702 } = quote;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const isGasless = Boolean(gasIncluded || gasSponsored || gasIncluded7702);\n\n if (isGasless) {\n return true;\n }\n\n const totalNetworkFee = sumAmounts(\n quote.feeData?.network,\n quote.feeData?.relayer,\n );\n\n const totalNetworkFeeAmount = [\n totalNetworkFee?.valueInCurrency,\n totalNetworkFee?.normalizedAmount,\n totalNetworkFee?.amount,\n totalNetworkFee?.usd,\n ].find((amount) => amount && amount !== '0');\n\n return Boolean(\n totalNetworkFeeAmount && new BigNumber(totalNetworkFeeAmount).gt(0),\n );\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export type QuoteWarning = 'low_return' | 'no_quotes' | 'insufficient_gas_balance' | 'insufficient_gas_for_selected_quote' | 'insufficient_balance' | 'market_closed' | 'price_impact' | 'quote_expired' | 'tx_alert';
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-warnings/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,WAAW,GACX,0BAA0B,GAC1B,qCAAqC,GACrC,sBAAsB,GACtB,eAAe,GACf,cAAc,GACd,eAAe,GACf,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/quote-warnings/types.ts"],"names":[],"mappings":"","sourcesContent":["export type QuoteWarning =\n | 'low_return'\n | 'no_quotes'\n | 'insufficient_gas_balance'\n | 'insufficient_gas_for_selected_quote'\n | 'insufficient_balance'\n | 'market_closed'\n | 'price_impact'\n | 'quote_expired'\n | 'tx_alert';\n"]}
@@ -0,0 +1,12 @@
1
+ import type { CaipAssetType } from '@metamask/utils';
2
+ import type { DeepPartial } from '../../types.js';
3
+ import type { AmountsAndAsset } from '../../validators/amount-and-asset.js';
4
+ /**
5
+ * Compares balances to a list of fees aggregated by assetId
6
+ *
7
+ * @param balances - normalized balances for the wallet address by assetId
8
+ * @param totalFees - an array of fees aggregated by assetId
9
+ * @returns true if all the balances exist and are greater than or equal to the total fees, false otherwise
10
+ */
11
+ export declare const balanceGte: (balances: Record<CaipAssetType, AmountsAndAsset['normalizedAmount'] | undefined>, totalFees: DeepPartial<AmountsAndAsset>[]) => boolean;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/quote-warnings/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAG5E;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,aACX,MAAM,CACd,aAAa,EACb,eAAe,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAChD,aACU,WAAW,CAAC,eAAe,CAAC,EAAE,KACxC,OAsBF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { BigNumber } from 'bignumber.js';
2
+ import { assetIdsMatch } from '../assets.js';
3
+ /**
4
+ * Compares balances to a list of fees aggregated by assetId
5
+ *
6
+ * @param balances - normalized balances for the wallet address by assetId
7
+ * @param totalFees - an array of fees aggregated by assetId
8
+ * @returns true if all the balances exist and are greater than or equal to the total fees, false otherwise
9
+ */
10
+ export const balanceGte = (balances, totalFees) => {
11
+ if (totalFees.length === 0) {
12
+ return true;
13
+ }
14
+ // Compare total fees to the balance of the wallet
15
+ return totalFees.every((fee) => {
16
+ if (!fee.normalizedAmount) {
17
+ return true;
18
+ }
19
+ const balanceKey = Object.keys(balances).find((assetId) => {
20
+ return assetIdsMatch(assetId, fee.asset?.assetId);
21
+ });
22
+ const balance = balances[balanceKey];
23
+ if (balance) {
24
+ return new BigNumber(balance).gte(fee.normalizedAmount);
25
+ }
26
+ return false;
27
+ });
28
+ };
29
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/quote-warnings/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAGC,EACD,SAAyC,EAChC,EAAE;IACX,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAW,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACxD,OAAO,aAAa,CAAC,OAAwB,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,UAA2B,CAAC,CAAC;QAEtD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { AmountsAndAsset } from '../../validators/amount-and-asset.js';\nimport { assetIdsMatch } from '../assets.js';\n\n/**\n * Compares balances to a list of fees aggregated by assetId\n *\n * @param balances - normalized balances for the wallet address by assetId\n * @param totalFees - an array of fees aggregated by assetId\n * @returns true if all the balances exist and are greater than or equal to the total fees, false otherwise\n */\nexport const balanceGte = (\n balances: Record<\n CaipAssetType,\n AmountsAndAsset['normalizedAmount'] | undefined\n >,\n totalFees: DeepPartial<AmountsAndAsset>[],\n): boolean => {\n if (totalFees.length === 0) {\n return true;\n }\n\n // Compare total fees to the balance of the wallet\n return totalFees.every((fee): boolean => {\n if (!fee.normalizedAmount) {\n return true;\n }\n\n const balanceKey = Object.keys(balances).find((assetId) => {\n return assetIdsMatch(assetId as CaipAssetType, fee.asset?.assetId);\n });\n const balance = balances[balanceKey as CaipAssetType];\n\n if (balance) {\n return new BigNumber(balance).gte(fee.normalizedAmount);\n }\n\n return false;\n });\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/bridge-controller",
3
- "version": "81.1.0-preview-3e86f66f7",
3
+ "version": "81.2.0-preview-9324e33",
4
4
  "description": "Manages bridge-related quote fetching functionality for MetaMask",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -55,8 +55,8 @@
55
55
  "@ethersproject/contracts": "^5.7.0",
56
56
  "@ethersproject/providers": "^5.7.0",
57
57
  "@metamask/accounts-controller": "^40.0.0",
58
- "@metamask/assets-controller": "^16.0.0",
59
- "@metamask/assets-controllers": "^112.0.1",
58
+ "@metamask/assets-controller": "^16.1.0",
59
+ "@metamask/assets-controllers": "^112.0.2",
60
60
  "@metamask/base-controller": "^10.0.0",
61
61
  "@metamask/controller-utils": "^13.0.0",
62
62
  "@metamask/gas-fee-controller": "^27.0.0",
@@ -66,14 +66,14 @@
66
66
  "@metamask/multichain-network-controller": "^4.0.0",
67
67
  "@metamask/network-controller": "^37.0.0",
68
68
  "@metamask/polling-controller": "^17.0.0",
69
- "@metamask/profile-sync-controller": "^32.1.0",
69
+ "@metamask/profile-sync-controller": "^32.1.1",
70
70
  "@metamask/remote-feature-flag-controller": "^7.0.0",
71
71
  "@metamask/snaps-controllers": "^19.0.0",
72
- "@metamask/transaction-controller": "^70.0.0",
72
+ "@metamask/transaction-controller": "^70.1.0",
73
73
  "@metamask/utils": "^12.0.0",
74
74
  "bignumber.js": "^9.1.2",
75
75
  "reselect": "^5.1.1",
76
- "uuid": "^9.0.1"
76
+ "uuid": "^11.1.1"
77
77
  },
78
78
  "devDependencies": {
79
79
  "@metamask/auto-changelog": "^6.1.0",