@metamask-previews/transaction-pay-controller 30.4.2-preview-77efa7863 → 30.4.3-preview-46de95678
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/dist/TransactionPayController.d.ts.map +1 -1
- package/dist/TransactionPayController.js +1 -0
- package/dist/TransactionPayController.js.map +1 -1
- package/dist/helpers/QuoteRefresher.d.ts +3 -2
- package/dist/helpers/QuoteRefresher.d.ts.map +1 -1
- package/dist/helpers/QuoteRefresher.js +4 -2
- package/dist/helpers/QuoteRefresher.js.map +1 -1
- package/dist/strategy/relay/RelayStrategy.d.ts +2 -1
- package/dist/strategy/relay/RelayStrategy.d.ts.map +1 -1
- package/dist/strategy/relay/RelayStrategy.js +12 -1
- package/dist/strategy/relay/RelayStrategy.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/feature-flags.d.ts +4 -0
- package/dist/utils/feature-flags.d.ts.map +1 -1
- package/dist/utils/feature-flags.js +11 -0
- package/dist/utils/feature-flags.js.map +1 -1
- package/dist/utils/quotes.d.ts +4 -3
- package/dist/utils/quotes.d.ts.map +1 -1
- package/dist/utils/quotes.js +12 -3
- package/dist/utils/quotes.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,11 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [30.4.3]
|
|
11
|
+
|
|
10
12
|
### Changed
|
|
11
13
|
|
|
12
14
|
- Bump `@metamask/assets-controller` from `^20.2.1` to `^20.2.2` ([#11300](https://github.com/MetaMask/core/pull/11300))
|
|
13
15
|
- Bump `@metamask/transaction-controller` from `^73.1.0` to `^73.1.1` ([#11300](https://github.com/MetaMask/core/pull/11300))
|
|
14
16
|
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Re-derive source amounts, using the `getBalance` callback if provided, before each periodic requote ([#10911](https://github.com/MetaMask/core/pull/10911))
|
|
20
|
+
- Requote max-amount transactions using a per-transaction-type interval from the `maxBalanceRefreshInterval` feature flag ([#10911](https://github.com/MetaMask/core/pull/10911))
|
|
21
|
+
|
|
15
22
|
## [30.4.2]
|
|
16
23
|
|
|
17
24
|
### Changed
|
|
@@ -1820,7 +1827,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1820
1827
|
|
|
1821
1828
|
- Initial release ([#6820](https://github.com/MetaMask/core/pull/6820))
|
|
1822
1829
|
|
|
1823
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.4.
|
|
1830
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.4.3...HEAD
|
|
1831
|
+
[30.4.3]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.4.2...@metamask/transaction-pay-controller@30.4.3
|
|
1824
1832
|
[30.4.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.4.1...@metamask/transaction-pay-controller@30.4.2
|
|
1825
1833
|
[30.4.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.4.0...@metamask/transaction-pay-controller@30.4.1
|
|
1826
1834
|
[30.4.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@30.3.3...@metamask/transaction-pay-controller@30.4.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayController.d.ts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAMxE,OAAO,EACL,eAAe,EAEf,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EACV,qBAAqB,EAErB,gCAAgC,EAChC,8BAA8B,EAC9B,mBAAmB,EAEnB,yBAAyB,EAEzB,iCAAiC,EACjC,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAoCpB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;IAuBC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,GACN,EAAE,+BAA+B,
|
|
1
|
+
{"version":3,"file":"TransactionPayController.d.ts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAMxE,OAAO,EACL,eAAe,EAEf,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EACV,qBAAqB,EAErB,gCAAgC,EAChC,8BAA8B,EAC9B,mBAAmB,EAEnB,yBAAyB,EAEzB,iCAAiC,EACjC,yBAAyB,EACzB,+BAA+B,EAC/B,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AAoCpB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;IAuBC,YAAY,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,GACN,EAAE,+BAA+B,EA0CjC;IAED;;;;;;;;OAQG;IACH,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,yBAAyB,GAClC,IAAI,CA2BN;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAK3D;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAKzD;IAED;;;;;;;;OAQG;IACH,WAAW,IAAI,sBAAsB,GAAG,SAAS,CAEhD;IAED;;;;;;;;;;;OAWG;IACH,wBAAwB,CACtB,GAAG,IAAI,EAAE,UAAU,CAAC,gCAAgC,CAAC,GACpD,UAAU,CAAC,gCAAgC,CAAC,CAE9C;IAED;;;;;;;;;OASG;IACH,aAAa,CACX,GAAG,IAAI,EAAE,UAAU,CAAC,qBAAqB,CAAC,GACzC,UAAU,CAAC,qBAAqB,CAAC,CAEnC;IAED;;;;;;OAMG;IACH,cAAc,IAAI,yBAAyB,GAAG,SAAS,CAEtD;IAED,sBAAsB,CACpB,GAAG,IAAI,EAAE,UAAU,CAAC,8BAA8B,CAAC,GAClD,UAAU,CAAC,8BAA8B,CAAC,CAI5C;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,WAAW,EAAE,eAAe,GAAG,sBAAsB,CAEhE;IAED;;;;;;OAMG;IACH,iCAAiC,CAC/B,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,CAAC,GAClE,UAAU,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,CAAC,CAE5D;IAED;;;;;;OAMG;IACH,kCAAkC,CAChC,GAAG,IAAI,EAAE,UAAU,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,CAAC,GACnE,UAAU,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,CAAC,CAE7D;CAiJF"}
|
|
@@ -63,6 +63,7 @@ export class TransactionPayController extends BaseController {
|
|
|
63
63
|
subscribeAssetChanges(messenger, () => this.state, this.#updateTransactionData.bind(this));
|
|
64
64
|
// eslint-disable-next-line no-new
|
|
65
65
|
new QuoteRefresher({
|
|
66
|
+
getBalance: this.#getBalance,
|
|
66
67
|
getStrategies: this.#getStrategiesWithFallback.bind(this),
|
|
67
68
|
messenger,
|
|
68
69
|
updateTransactionData: this.#updateTransactionData.bind(this),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayController.js","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,eAAe,EACf,wBAAwB,GAEzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAiB7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,yBAAyB,GAAG;IAChC,eAAe;IACf,aAAa;IACb,0BAA0B;IAC1B,gBAAgB;IAChB,wBAAwB;IACxB,aAAa;IACb,mCAAmC;IACnC,oCAAoC;IACpC,sBAAsB;IACtB,mBAAmB;IACnB,oBAAoB;CACZ,CAAC;AAEX,MAAM,aAAa,GAAiD;IAClE,eAAe,EAAE;QACf,sBAAsB,EAAE,KAAK;QAC7B,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,GAAkC,EAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,OAAO,wBAAyB,SAAQ,cAI7C;IACU,SAAS,CAA0B;IAEnC,YAAY,CAA6B;IAEzC,cAAc,CAAyB;IAEvC,WAAW,CAAsB;IAEjC,yBAAyB,CAAmC;IAE5D,uBAAuB,CAAkC;IAEzD,YAAY,CAEO;IAEnB,cAAc,CAEO;IAErB,WAAW,CAAuB;IAE3C,YAAY,EACV,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,GAC2B;QAChC,KAAK,CAAC;YACJ,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,aAAa;YACvB,SAAS;YACT,KAAK,EAAE,EAAE,GAAG,eAAe,EAAE,EAAE,GAAG,KAAK,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;QAC1D,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,4BAA4B,CACzC,IAAI,EACJ,yBAAyB,CAC1B,CAAC;QAEF,2BAA2B,CACzB,SAAS,EACT,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,qBAAqB,CACnB,SAAS,EACT,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,kCAAkC;QAClC,IAAI,cAAc,CAAC;YACjB,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YACzD,SAAS;YACT,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,oBAAoB,CAClB,aAAqB,EACrB,QAAmC;QAEnC,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAsB;gBAChC,eAAe,EAAE,eAAe,CAAC,eAAe;gBAChD,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC9B,mBAAmB,EAAE,eAAe,CAAC,mBAAmB;gBACxD,WAAW,EAAE,eAAe,CAAC,WAAW;gBACxC,yBAAyB,EAAE,eAAe,CAAC,yBAAyB;gBACpE,WAAW,EAAE,eAAe,CAAC,WAAW;gBACxC,eAAe,EAAE,eAAe,CAAC,eAAe;gBAChD,eAAe,EAAE,eAAe,CAAC,eAAe;gBAChD,QAAQ,EAAE,eAAe,CAAC,QAAQ;aACnC,CAAC;YAEF,MAAM,uBAAuB,GAAG,MAAM,CAAC,eAAe,CAAC;YAEvD,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAEvC,IACE,CAAC,MAAM,CAAC,WAAW;gBACnB,MAAM,CAAC,eAAe,KAAK,uBAAuB,EAClD,CAAC;gBACD,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAkC;QACnD,kBAAkB,CAAC,OAAO,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,OAAiC;QACjD,iBAAiB,CAAC,OAAO,EAAE;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,wBAAwB,CACtB,GAAG,IAAkD;QAErD,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;;OASG;IACH,aAAa,CACX,GAAG,IAAuC;QAE1C,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;OAMG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,sBAAsB,CACpB,GAAG,IAAgD;QAEnD,OAAO,CACL,IAAI,CAAC,uBAAuB,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC1E,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,WAA4B;QACtC,OAAO,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACH,iCAAiC,CAC/B,GAAG,IAAgE;QAEnE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACH,kCAAkC,CAChC,GAAG,IAAiE;QAEpE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,sBAAsB,CAAC,aAAqB;QAC1C,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,OAAO,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CACpB,aAAqB,EACrB,EAAqD;QAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;YAClC,IAAI,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,oBAAoB,GAAG,OAAO,EAAE,YAAY,CAAC;YACnD,MAAM,cAAc,GAAG,OAAO,EAAE,MAAM,CAAC;YACvC,MAAM,mBAAmB,GAAG,OAAO,EAAE,WAAW,CAAC;YACjD,MAAM,mBAAmB,GAAG,OAAO,EAAE,WAAW,CAAC;YACjD,MAAM,uBAAuB,GAAG,OAAO,EAAE,eAAe,CAAC;YACzD,MAAM,yBAAyB,GAAG,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;YACnE,MAAM,2BAA2B,GAC/B,OAAO,EAAE,WAAW,EAAE,uBAAuB,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,eAAe,CAAC,aAAa,CAAC,GAAG;oBAC/B,WAAW,EAAE,EAAE;oBACf,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,EAAE;iBACX,CAAC;gBAEF,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;YAED,EAAE,CAAC,OAAO,CAAC,CAAC;YAEZ,MAAM,qBAAqB,GACzB,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC1C,oBAAoB,EAAE,OAAO,EAAE,WAAW,EAAE;gBAC9C,OAAO,CAAC,YAAY,EAAE,OAAO,KAAK,oBAAoB,EAAE,OAAO,CAAC;YAElE,MAAM,4BAA4B,GAChC,OAAO,CAAC,YAAY,EAAE,UAAU,KAAK,oBAAoB,EAAE,UAAU,CAAC;YAExE,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC;YAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,KAAK,mBAAmB,CAAC;YACnE,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,KAAK,mBAAmB,CAAC;YACvE,MAAM,wBAAwB,GAC5B,OAAO,CAAC,eAAe,KAAK,uBAAuB,CAAC;YACtD,MAAM,mBAAmB,GACvB,OAAO,CAAC,WAAW,EAAE,UAAU,KAAK,yBAAyB,CAAC;YAChE,MAAM,0BAA0B,GAC9B,OAAO,CAAC,WAAW,EAAE,uBAAuB;gBAC5C,2BAA2B,CAAC;YAE9B,IACE,qBAAqB;gBACrB,cAAc;gBACd,eAAe;gBACf,kBAAkB;gBAClB,wBAAwB,EACxB,CAAC;gBACD,mBAAmB,CACjB,aAAa;gBACb,6DAA6D;gBAC7D,OAAgB;gBAChB,4DAA4D;gBAC5D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;gBAEF,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,IACL,4BAA4B;gBAC5B,OAAO,CAAC,WAAW;gBACnB,CAAC,OAAO,CAAC,WAAW,EACpB,CAAC;gBACD,8DAA8D;gBAC9D,qEAAqE;gBACrE,uEAAuE;gBACvE,mEAAmE;gBACnE,uEAAuE;gBACvE,mBAAmB,CACjB,aAAa;gBACb,6DAA6D;gBAC7D,OAAgB;gBAChB,4DAA4D;gBAC5D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,CACjB,CAAC;YACJ,CAAC;YAED,IAAI,mBAAmB,IAAI,0BAA0B,EAAE,CAAC;gBACtD,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,kBAAkB,EAAE,CAAC;YACvB,YAAY,CAAC;gBACX,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC;gBAC1D,aAAa;gBACb,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;aAC9D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,0BAA0B,CACxB,WAA4B;QAE5B,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEnE,MAAM,kBAAkB,GACtB,IAAI,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC;YAClC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAC/C,CAAC,QAAQ,EAAsC,EAAE,CAC/C,wBAAwB,CAAC,QAAQ,CAAC,CACrC,CAAC;QAEF,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,EAAE,YAAY,CAAC;QAEnD,OAAO,gBAAgB,CACrB,IAAI,CAAC,SAAS,EACd,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,EACrB,WAAW,CAAC,IAAI,EAChB,eAAe,EAAE,WAAW,EAAE,uBAAuB,CACtD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Draft } from 'immer';\nimport { noop } from 'lodash-es';\n\nimport { updateFiatPayment } from './actions/update-fiat-payment.js';\nimport { updatePaymentToken } from './actions/update-payment-token.js';\nimport {\n CONTROLLER_NAME,\n isTransactionPayStrategy,\n TransactionPayStrategy,\n} from './constants.js';\nimport type { TransactionPayClientId } from './constants.js';\nimport { QuoteRefresher } from './helpers/QuoteRefresher.js';\nimport type {\n GetAmountDataCallback,\n GetBalanceCallback,\n GetDelegationTransactionCallback,\n GetPaymentOverrideDataCallback,\n PolymarketCallbacks,\n TransactionConfig,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayFiatOptions,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdateFiatPaymentRequest,\n UpdatePaymentTokenRequest,\n} from './types.js';\nimport { getStrategyOrder } from './utils/feature-flags.js';\nimport { updateQuotes } from './utils/quotes.js';\nimport { updateSourceAmounts } from './utils/source-amounts.js';\nimport {\n subscribeAssetChanges,\n subscribeTransactionChanges,\n} from './utils/transaction.js';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'getAmountData',\n 'getClientId',\n 'getDelegationTransaction',\n 'getFiatOptions',\n 'getPaymentOverrideData',\n 'getStrategy',\n 'polymarketGetDepositWalletAddress',\n 'polymarketSubmitDepositWalletBatch',\n 'setTransactionConfig',\n 'updateFiatPayment',\n 'updatePaymentToken',\n] as const;\n\nconst stateMetadata: StateMetadata<TransactionPayControllerState> = {\n transactionData: {\n includeInDebugSnapshot: false,\n includeInStateLogs: true,\n persist: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = (): TransactionPayControllerState => ({\n transactionData: {},\n});\n\nexport class TransactionPayController extends BaseController<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState,\n TransactionPayControllerMessenger\n> {\n readonly #clientId?: TransactionPayClientId;\n\n readonly #fiatOptions?: TransactionPayFiatOptions;\n\n readonly #getAmountData?: GetAmountDataCallback;\n\n readonly #getBalance?: GetBalanceCallback;\n\n readonly #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getPaymentOverrideData?: GetPaymentOverrideDataCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n readonly #getStrategies?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy[];\n\n readonly #polymarket?: PolymarketCallbacks;\n\n constructor({\n clientId,\n fiatOptions,\n getAmountData,\n getBalance,\n getDelegationTransaction,\n getPaymentOverrideData,\n getStrategy,\n getStrategies,\n messenger,\n polymarket,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#clientId = clientId;\n this.#fiatOptions = fiatOptions;\n this.#getAmountData = getAmountData;\n this.#getBalance = getBalance;\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getPaymentOverrideData = getPaymentOverrideData;\n this.#getStrategy = getStrategy;\n this.#getStrategies = getStrategies;\n this.#polymarket = polymarket;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n subscribeTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.bind(this),\n );\n\n subscribeAssetChanges(\n messenger,\n () => this.state,\n this.#updateTransactionData.bind(this),\n );\n\n // eslint-disable-next-line no-new\n new QuoteRefresher({\n getStrategies: this.#getStrategiesWithFallback.bind(this),\n messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Sets the transaction configuration.\n *\n * The callback receives the current configuration properties and can mutate\n * them in place. Updated values are written back to the transaction data.\n *\n * @param transactionId - The ID of the transaction to configure.\n * @param callback - A callback that receives a mutable {@link TransactionConfig} object.\n */\n setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config: TransactionConfig = {\n accountOverride: transactionData.accountOverride,\n atomic: transactionData.atomic,\n isHyperliquidSource: transactionData.isHyperliquidSource,\n isMaxAmount: transactionData.isMaxAmount,\n isPolymarketDepositWallet: transactionData.isPolymarketDepositWallet,\n isPostQuote: transactionData.isPostQuote,\n isQuoteRequired: transactionData.isQuoteRequired,\n paymentOverride: transactionData.paymentOverride,\n refundTo: transactionData.refundTo,\n };\n\n const previousAccountOverride = config.accountOverride;\n\n callback(config);\n\n Object.assign(transactionData, config);\n\n if (\n !config.isPostQuote &&\n config.accountOverride !== previousAccountOverride\n ) {\n transactionData.paymentToken = undefined;\n }\n });\n }\n\n /**\n * Updates the payment token for a transaction.\n *\n * Resolves token metadata and balances, then stores the new payment token\n * in the transaction data. This triggers recalculation of source amounts\n * and quote retrieval.\n *\n * @param request - The payment token update request containing the\n * transaction ID, token address, and chain ID.\n */\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Updates the fiat payment state for a transaction.\n *\n * The request callback receives the current fiat payment state and can\n * mutate it to update properties such as the selected payment method or\n * fiat amount.\n *\n * @param request - The fiat payment update request containing the\n * transaction ID and a callback to mutate fiat payment state.\n */\n updateFiatPayment(request: UpdateFiatPaymentRequest): void {\n updateFiatPayment(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Returns the configured client identifier.\n *\n * Used to set the `X-Client-Id` header on intents API requests so the\n * server can distinguish Mobile from Extension traffic. This is\n * intentionally not stored in controller state.\n *\n * @returns The client identifier, if configured.\n */\n getClientId(): TransactionPayClientId | undefined {\n return this.#clientId;\n }\n\n /**\n * Gets the delegation transaction for a given transaction.\n *\n * Converts the provided transaction into a redeem delegation by delegating\n * to the configured callback. Returns the delegation transaction data\n * including the encoded call data, target address, value, and an optional\n * authorization list.\n *\n * @param args - The arguments forwarded to the {@link GetDelegationTransactionCallback},\n * containing the transaction metadata.\n * @returns A promise resolving to the delegation transaction data.\n */\n getDelegationTransaction(\n ...args: Parameters<GetDelegationTransactionCallback>\n ): ReturnType<GetDelegationTransactionCallback> {\n return this.#getDelegationTransaction(...args);\n }\n\n /**\n * Returns additional transactions for the paymentOverride flow.\n *\n * Delegates to the client-supplied {@link GetPaymentOverrideDataCallback}.\n * Called during quote execution when `paymentOverride` is defined on the transaction.\n * Returns an empty array when no callback is configured.\n *\n * @param args - The arguments forwarded to the {@link GetPaymentOverrideDataCallback}.\n * @returns A promise resolving to the additional transactions array.\n */\n getAmountData(\n ...args: Parameters<GetAmountDataCallback>\n ): ReturnType<GetAmountDataCallback> {\n return this.#getAmountData?.(...args) ?? Promise.resolve({ updates: [] });\n }\n\n /**\n * Returns optional fiat execution configuration.\n *\n * This is intentionally not stored in controller state.\n *\n * @returns Fiat execution options, if configured.\n */\n getFiatOptions(): TransactionPayFiatOptions | undefined {\n return this.#fiatOptions;\n }\n\n getPaymentOverrideData(\n ...args: Parameters<GetPaymentOverrideDataCallback>\n ): ReturnType<GetPaymentOverrideDataCallback> {\n return (\n this.#getPaymentOverrideData?.(...args) ?? Promise.resolve({ calls: [] })\n );\n }\n\n /**\n * Gets the preferred strategy for a transaction.\n *\n * Returns the first strategy from the ordered list of strategies applicable\n * to the given transaction. Falls back to the default strategy order derived\n * from feature flags when no custom strategy callback is configured.\n *\n * @param transaction - The transaction metadata to determine the strategy for.\n * @returns The preferred {@link TransactionPayStrategy} for the transaction.\n */\n getStrategy(transaction: TransactionMeta): TransactionPayStrategy {\n return this.#getStrategiesWithFallback(transaction)[0];\n }\n\n /**\n * Derives the Polymarket deposit-wallet address for an EOA via the\n * client-supplied callback.\n *\n * @param args - The arguments forwarded to {@link PolymarketCallbacks.getDepositWalletAddress}.\n * @returns A promise resolving to the deposit-wallet address.\n */\n polymarketGetDepositWalletAddress(\n ...args: Parameters<PolymarketCallbacks['getDepositWalletAddress']>\n ): ReturnType<PolymarketCallbacks['getDepositWalletAddress']> {\n return this.#requirePolymarket().getDepositWalletAddress(...args);\n }\n\n /**\n * Signs and broadcasts a Polymarket deposit-wallet batch via the\n * client-supplied callback.\n *\n * @param args - The arguments forwarded to {@link PolymarketCallbacks.submitDepositWalletBatch}.\n * @returns A promise resolving to the relayer-issued source hash.\n */\n polymarketSubmitDepositWalletBatch(\n ...args: Parameters<PolymarketCallbacks['submitDepositWalletBatch']>\n ): ReturnType<PolymarketCallbacks['submitDepositWalletBatch']> {\n return this.#requirePolymarket().submitDepositWalletBatch(...args);\n }\n\n #requirePolymarket(): PolymarketCallbacks {\n if (!this.#polymarket) {\n throw new Error('TransactionPayController: Polymarket callbacks missing');\n }\n return this.#polymarket;\n }\n\n #removeTransactionData(transactionId: string): void {\n this.update((state) => {\n delete state.transactionData[transactionId];\n });\n }\n\n #updateTransactionData(\n transactionId: string,\n fn: (transactionData: Draft<TransactionData>) => void,\n ): void {\n let shouldUpdateQuotes = false;\n\n this.update((state) => {\n const { transactionData } = state;\n let current = transactionData[transactionId];\n const originalPaymentToken = current?.paymentToken;\n const originalTokens = current?.tokens;\n const originalIsMaxAmount = current?.isMaxAmount;\n const originalIsPostQuote = current?.isPostQuote;\n const originalAccountOverride = current?.accountOverride;\n const originalFiatPaymentAmount = current?.fiatPayment?.amountFiat;\n const originalFiatPaymentMethodId =\n current?.fiatPayment?.selectedPaymentMethodId;\n\n if (!current) {\n transactionData[transactionId] = {\n fiatPayment: {},\n isLoading: false,\n tokens: [],\n };\n\n current = transactionData[transactionId];\n }\n\n fn(current);\n\n const isPaymentTokenUpdated =\n current.paymentToken?.address?.toLowerCase() !==\n originalPaymentToken?.address?.toLowerCase() ||\n current.paymentToken?.chainId !== originalPaymentToken?.chainId;\n\n const isPaymentTokenBalanceUpdated =\n current.paymentToken?.balanceRaw !== originalPaymentToken?.balanceRaw;\n\n const isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n const isAccountOverrideUpdated =\n current.accountOverride !== originalAccountOverride;\n const isFiatAmountUpdated =\n current.fiatPayment?.amountFiat !== originalFiatPaymentAmount;\n const isFiatPaymentMethodUpdated =\n current.fiatPayment?.selectedPaymentMethodId !==\n originalFiatPaymentMethodId;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated ||\n isAccountOverrideUpdated\n ) {\n updateSourceAmounts(\n transactionId,\n /* oxlint-disable typescript/no-unnecessary-type-assertion */\n current as never,\n /* oxlint-enable typescript/no-unnecessary-type-assertion */\n this.messenger,\n this.#getBalance,\n );\n\n shouldUpdateQuotes = true;\n } else if (\n isPaymentTokenBalanceUpdated &&\n current.isMaxAmount &&\n !current.isPostQuote\n ) {\n // On max the source amount is the payment token balance, so a\n // refreshed balance must re-derive it, otherwise the amount stays at\n // whatever the balance was when the token was selected. Quotes are not\n // requested again here: the balance is refreshed by `updateQuotes`\n // itself, which reads the re-derived amounts before building requests.\n updateSourceAmounts(\n transactionId,\n /* oxlint-disable typescript/no-unnecessary-type-assertion */\n current as never,\n /* oxlint-enable typescript/no-unnecessary-type-assertion */\n this.messenger,\n this.#getBalance,\n );\n }\n\n if (isFiatAmountUpdated || isFiatPaymentMethodUpdated) {\n shouldUpdateQuotes = true;\n }\n });\n\n if (shouldUpdateQuotes) {\n updateQuotes({\n getStrategies: this.#getStrategiesWithFallback.bind(this),\n messenger: this.messenger,\n transactionData: this.state.transactionData[transactionId],\n transactionId,\n updateTransactionData: this.#updateTransactionData.bind(this),\n }).catch(noop);\n }\n }\n\n #getStrategiesWithFallback(\n transaction: TransactionMeta,\n ): TransactionPayStrategy[] {\n const transactionData = this.state.transactionData[transaction.id];\n\n const strategyCandidates: unknown[] =\n this.#getStrategies?.(transaction) ??\n (this.#getStrategy ? [this.#getStrategy(transaction)] : []);\n\n const validStrategies = strategyCandidates.filter(\n (strategy): strategy is TransactionPayStrategy =>\n isTransactionPayStrategy(strategy),\n );\n\n if (validStrategies.length) {\n return validStrategies;\n }\n\n const paymentToken = transactionData?.paymentToken;\n\n return getStrategyOrder(\n this.messenger,\n paymentToken?.chainId,\n paymentToken?.address,\n transaction.type,\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TransactionPayController.js","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Draft } from 'immer';\nimport { noop } from 'lodash-es';\n\nimport { updateFiatPayment } from './actions/update-fiat-payment.js';\nimport { updatePaymentToken } from './actions/update-payment-token.js';\nimport {\n CONTROLLER_NAME,\n isTransactionPayStrategy,\n TransactionPayStrategy,\n} from './constants.js';\nimport type { TransactionPayClientId } from './constants.js';\nimport { QuoteRefresher } from './helpers/QuoteRefresher.js';\nimport type {\n GetAmountDataCallback,\n GetBalanceCallback,\n GetDelegationTransactionCallback,\n GetPaymentOverrideDataCallback,\n PolymarketCallbacks,\n TransactionConfig,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayFiatOptions,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdateFiatPaymentRequest,\n UpdatePaymentTokenRequest,\n} from './types.js';\nimport { getStrategyOrder } from './utils/feature-flags.js';\nimport { updateQuotes } from './utils/quotes.js';\nimport { updateSourceAmounts } from './utils/source-amounts.js';\nimport {\n subscribeAssetChanges,\n subscribeTransactionChanges,\n} from './utils/transaction.js';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'getAmountData',\n 'getClientId',\n 'getDelegationTransaction',\n 'getFiatOptions',\n 'getPaymentOverrideData',\n 'getStrategy',\n 'polymarketGetDepositWalletAddress',\n 'polymarketSubmitDepositWalletBatch',\n 'setTransactionConfig',\n 'updateFiatPayment',\n 'updatePaymentToken',\n] as const;\n\nconst stateMetadata: StateMetadata<TransactionPayControllerState> = {\n transactionData: {\n includeInDebugSnapshot: false,\n includeInStateLogs: true,\n persist: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = (): TransactionPayControllerState => ({\n transactionData: {},\n});\n\nexport class TransactionPayController extends BaseController<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState,\n TransactionPayControllerMessenger\n> {\n readonly #clientId?: TransactionPayClientId;\n\n readonly #fiatOptions?: TransactionPayFiatOptions;\n\n readonly #getAmountData?: GetAmountDataCallback;\n\n readonly #getBalance?: GetBalanceCallback;\n\n readonly #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getPaymentOverrideData?: GetPaymentOverrideDataCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n readonly #getStrategies?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy[];\n\n readonly #polymarket?: PolymarketCallbacks;\n\n constructor({\n clientId,\n fiatOptions,\n getAmountData,\n getBalance,\n getDelegationTransaction,\n getPaymentOverrideData,\n getStrategy,\n getStrategies,\n messenger,\n polymarket,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#clientId = clientId;\n this.#fiatOptions = fiatOptions;\n this.#getAmountData = getAmountData;\n this.#getBalance = getBalance;\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getPaymentOverrideData = getPaymentOverrideData;\n this.#getStrategy = getStrategy;\n this.#getStrategies = getStrategies;\n this.#polymarket = polymarket;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n subscribeTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.bind(this),\n );\n\n subscribeAssetChanges(\n messenger,\n () => this.state,\n this.#updateTransactionData.bind(this),\n );\n\n // eslint-disable-next-line no-new\n new QuoteRefresher({\n getBalance: this.#getBalance,\n getStrategies: this.#getStrategiesWithFallback.bind(this),\n messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Sets the transaction configuration.\n *\n * The callback receives the current configuration properties and can mutate\n * them in place. Updated values are written back to the transaction data.\n *\n * @param transactionId - The ID of the transaction to configure.\n * @param callback - A callback that receives a mutable {@link TransactionConfig} object.\n */\n setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config: TransactionConfig = {\n accountOverride: transactionData.accountOverride,\n atomic: transactionData.atomic,\n isHyperliquidSource: transactionData.isHyperliquidSource,\n isMaxAmount: transactionData.isMaxAmount,\n isPolymarketDepositWallet: transactionData.isPolymarketDepositWallet,\n isPostQuote: transactionData.isPostQuote,\n isQuoteRequired: transactionData.isQuoteRequired,\n paymentOverride: transactionData.paymentOverride,\n refundTo: transactionData.refundTo,\n };\n\n const previousAccountOverride = config.accountOverride;\n\n callback(config);\n\n Object.assign(transactionData, config);\n\n if (\n !config.isPostQuote &&\n config.accountOverride !== previousAccountOverride\n ) {\n transactionData.paymentToken = undefined;\n }\n });\n }\n\n /**\n * Updates the payment token for a transaction.\n *\n * Resolves token metadata and balances, then stores the new payment token\n * in the transaction data. This triggers recalculation of source amounts\n * and quote retrieval.\n *\n * @param request - The payment token update request containing the\n * transaction ID, token address, and chain ID.\n */\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Updates the fiat payment state for a transaction.\n *\n * The request callback receives the current fiat payment state and can\n * mutate it to update properties such as the selected payment method or\n * fiat amount.\n *\n * @param request - The fiat payment update request containing the\n * transaction ID and a callback to mutate fiat payment state.\n */\n updateFiatPayment(request: UpdateFiatPaymentRequest): void {\n updateFiatPayment(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n /**\n * Returns the configured client identifier.\n *\n * Used to set the `X-Client-Id` header on intents API requests so the\n * server can distinguish Mobile from Extension traffic. This is\n * intentionally not stored in controller state.\n *\n * @returns The client identifier, if configured.\n */\n getClientId(): TransactionPayClientId | undefined {\n return this.#clientId;\n }\n\n /**\n * Gets the delegation transaction for a given transaction.\n *\n * Converts the provided transaction into a redeem delegation by delegating\n * to the configured callback. Returns the delegation transaction data\n * including the encoded call data, target address, value, and an optional\n * authorization list.\n *\n * @param args - The arguments forwarded to the {@link GetDelegationTransactionCallback},\n * containing the transaction metadata.\n * @returns A promise resolving to the delegation transaction data.\n */\n getDelegationTransaction(\n ...args: Parameters<GetDelegationTransactionCallback>\n ): ReturnType<GetDelegationTransactionCallback> {\n return this.#getDelegationTransaction(...args);\n }\n\n /**\n * Returns additional transactions for the paymentOverride flow.\n *\n * Delegates to the client-supplied {@link GetPaymentOverrideDataCallback}.\n * Called during quote execution when `paymentOverride` is defined on the transaction.\n * Returns an empty array when no callback is configured.\n *\n * @param args - The arguments forwarded to the {@link GetPaymentOverrideDataCallback}.\n * @returns A promise resolving to the additional transactions array.\n */\n getAmountData(\n ...args: Parameters<GetAmountDataCallback>\n ): ReturnType<GetAmountDataCallback> {\n return this.#getAmountData?.(...args) ?? Promise.resolve({ updates: [] });\n }\n\n /**\n * Returns optional fiat execution configuration.\n *\n * This is intentionally not stored in controller state.\n *\n * @returns Fiat execution options, if configured.\n */\n getFiatOptions(): TransactionPayFiatOptions | undefined {\n return this.#fiatOptions;\n }\n\n getPaymentOverrideData(\n ...args: Parameters<GetPaymentOverrideDataCallback>\n ): ReturnType<GetPaymentOverrideDataCallback> {\n return (\n this.#getPaymentOverrideData?.(...args) ?? Promise.resolve({ calls: [] })\n );\n }\n\n /**\n * Gets the preferred strategy for a transaction.\n *\n * Returns the first strategy from the ordered list of strategies applicable\n * to the given transaction. Falls back to the default strategy order derived\n * from feature flags when no custom strategy callback is configured.\n *\n * @param transaction - The transaction metadata to determine the strategy for.\n * @returns The preferred {@link TransactionPayStrategy} for the transaction.\n */\n getStrategy(transaction: TransactionMeta): TransactionPayStrategy {\n return this.#getStrategiesWithFallback(transaction)[0];\n }\n\n /**\n * Derives the Polymarket deposit-wallet address for an EOA via the\n * client-supplied callback.\n *\n * @param args - The arguments forwarded to {@link PolymarketCallbacks.getDepositWalletAddress}.\n * @returns A promise resolving to the deposit-wallet address.\n */\n polymarketGetDepositWalletAddress(\n ...args: Parameters<PolymarketCallbacks['getDepositWalletAddress']>\n ): ReturnType<PolymarketCallbacks['getDepositWalletAddress']> {\n return this.#requirePolymarket().getDepositWalletAddress(...args);\n }\n\n /**\n * Signs and broadcasts a Polymarket deposit-wallet batch via the\n * client-supplied callback.\n *\n * @param args - The arguments forwarded to {@link PolymarketCallbacks.submitDepositWalletBatch}.\n * @returns A promise resolving to the relayer-issued source hash.\n */\n polymarketSubmitDepositWalletBatch(\n ...args: Parameters<PolymarketCallbacks['submitDepositWalletBatch']>\n ): ReturnType<PolymarketCallbacks['submitDepositWalletBatch']> {\n return this.#requirePolymarket().submitDepositWalletBatch(...args);\n }\n\n #requirePolymarket(): PolymarketCallbacks {\n if (!this.#polymarket) {\n throw new Error('TransactionPayController: Polymarket callbacks missing');\n }\n return this.#polymarket;\n }\n\n #removeTransactionData(transactionId: string): void {\n this.update((state) => {\n delete state.transactionData[transactionId];\n });\n }\n\n #updateTransactionData(\n transactionId: string,\n fn: (transactionData: Draft<TransactionData>) => void,\n ): void {\n let shouldUpdateQuotes = false;\n\n this.update((state) => {\n const { transactionData } = state;\n let current = transactionData[transactionId];\n const originalPaymentToken = current?.paymentToken;\n const originalTokens = current?.tokens;\n const originalIsMaxAmount = current?.isMaxAmount;\n const originalIsPostQuote = current?.isPostQuote;\n const originalAccountOverride = current?.accountOverride;\n const originalFiatPaymentAmount = current?.fiatPayment?.amountFiat;\n const originalFiatPaymentMethodId =\n current?.fiatPayment?.selectedPaymentMethodId;\n\n if (!current) {\n transactionData[transactionId] = {\n fiatPayment: {},\n isLoading: false,\n tokens: [],\n };\n\n current = transactionData[transactionId];\n }\n\n fn(current);\n\n const isPaymentTokenUpdated =\n current.paymentToken?.address?.toLowerCase() !==\n originalPaymentToken?.address?.toLowerCase() ||\n current.paymentToken?.chainId !== originalPaymentToken?.chainId;\n\n const isPaymentTokenBalanceUpdated =\n current.paymentToken?.balanceRaw !== originalPaymentToken?.balanceRaw;\n\n const isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n const isAccountOverrideUpdated =\n current.accountOverride !== originalAccountOverride;\n const isFiatAmountUpdated =\n current.fiatPayment?.amountFiat !== originalFiatPaymentAmount;\n const isFiatPaymentMethodUpdated =\n current.fiatPayment?.selectedPaymentMethodId !==\n originalFiatPaymentMethodId;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated ||\n isAccountOverrideUpdated\n ) {\n updateSourceAmounts(\n transactionId,\n /* oxlint-disable typescript/no-unnecessary-type-assertion */\n current as never,\n /* oxlint-enable typescript/no-unnecessary-type-assertion */\n this.messenger,\n this.#getBalance,\n );\n\n shouldUpdateQuotes = true;\n } else if (\n isPaymentTokenBalanceUpdated &&\n current.isMaxAmount &&\n !current.isPostQuote\n ) {\n // On max the source amount is the payment token balance, so a\n // refreshed balance must re-derive it, otherwise the amount stays at\n // whatever the balance was when the token was selected. Quotes are not\n // requested again here: the balance is refreshed by `updateQuotes`\n // itself, which reads the re-derived amounts before building requests.\n updateSourceAmounts(\n transactionId,\n /* oxlint-disable typescript/no-unnecessary-type-assertion */\n current as never,\n /* oxlint-enable typescript/no-unnecessary-type-assertion */\n this.messenger,\n this.#getBalance,\n );\n }\n\n if (isFiatAmountUpdated || isFiatPaymentMethodUpdated) {\n shouldUpdateQuotes = true;\n }\n });\n\n if (shouldUpdateQuotes) {\n updateQuotes({\n getStrategies: this.#getStrategiesWithFallback.bind(this),\n messenger: this.messenger,\n transactionData: this.state.transactionData[transactionId],\n transactionId,\n updateTransactionData: this.#updateTransactionData.bind(this),\n }).catch(noop);\n }\n }\n\n #getStrategiesWithFallback(\n transaction: TransactionMeta,\n ): TransactionPayStrategy[] {\n const transactionData = this.state.transactionData[transaction.id];\n\n const strategyCandidates: unknown[] =\n this.#getStrategies?.(transaction) ??\n (this.#getStrategy ? [this.#getStrategy(transaction)] : []);\n\n const validStrategies = strategyCandidates.filter(\n (strategy): strategy is TransactionPayStrategy =>\n isTransactionPayStrategy(strategy),\n );\n\n if (validStrategies.length) {\n return validStrategies;\n }\n\n const paymentToken = transactionData?.paymentToken;\n\n return getStrategyOrder(\n this.messenger,\n paymentToken?.chainId,\n paymentToken?.address,\n transaction.type,\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n }\n}\n"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { TransactionMeta } from '@metamask/transaction-controller';
|
|
2
2
|
import { TransactionPayStrategy } from '../constants.js';
|
|
3
3
|
import type { TransactionPayControllerMessenger } from '../index.js';
|
|
4
|
-
import type { UpdateTransactionDataCallback } from '../types.js';
|
|
4
|
+
import type { GetBalanceCallback, UpdateTransactionDataCallback } from '../types.js';
|
|
5
5
|
export declare class QuoteRefresher {
|
|
6
6
|
#private;
|
|
7
|
-
constructor({ getStrategies, messenger, updateTransactionData, }: {
|
|
7
|
+
constructor({ getBalance, getStrategies, messenger, updateTransactionData, }: {
|
|
8
|
+
getBalance?: GetBalanceCallback;
|
|
8
9
|
getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];
|
|
9
10
|
messenger: TransactionPayControllerMessenger;
|
|
10
11
|
updateTransactionData: UpdateTransactionDataCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.d.ts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EACV,iCAAiC,EAElC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.d.ts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EACV,iCAAiC,EAElC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EACV,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAOrB,qBAAa,cAAc;;IAiBzB,YAAY,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,UAAU,CAAC,EAAE,kBAAkB,CAAC;QAChC,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;QAC1E,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD,EAYA;CAuEF"}
|
|
@@ -11,8 +11,10 @@ export class QuoteRefresher {
|
|
|
11
11
|
#messenger;
|
|
12
12
|
#timeoutId;
|
|
13
13
|
#getStrategies;
|
|
14
|
+
#getBalance;
|
|
14
15
|
#updateTransactionData;
|
|
15
|
-
constructor({ getStrategies, messenger, updateTransactionData, }) {
|
|
16
|
+
constructor({ getBalance, getStrategies, messenger, updateTransactionData, }) {
|
|
17
|
+
this.#getBalance = getBalance;
|
|
16
18
|
this.#getStrategies = getStrategies;
|
|
17
19
|
this.#messenger = messenger;
|
|
18
20
|
this.#isRunning = false;
|
|
@@ -38,7 +40,7 @@ export class QuoteRefresher {
|
|
|
38
40
|
async #onInterval() {
|
|
39
41
|
this.#isUpdating = true;
|
|
40
42
|
try {
|
|
41
|
-
await refreshQuotes(this.#messenger, this.#updateTransactionData, this.#getStrategies);
|
|
43
|
+
await refreshQuotes(this.#messenger, this.#updateTransactionData, this.#getStrategies, this.#getBalance);
|
|
42
44
|
}
|
|
43
45
|
catch (error) {
|
|
44
46
|
log('Error refreshing quotes', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.js","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.js","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAKzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,WAAW;AAExC,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,OAAO,cAAc;IACzB,UAAU,CAAU;IAEpB,WAAW,CAAU;IAEZ,UAAU,CAAoC;IAEvD,UAAU,CAA6B;IAE9B,cAAc,CAEO;IAErB,WAAW,CAAsB;IAEjC,sBAAsB,CAAgC;IAE/D,YAAY,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GAMtB;QACC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QAEpD,SAAS,CAAC,SAAS,CACjB,sCAAsC,EACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,GAAG,CAAC,SAAS,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,GAAG,CAAC,SAAS,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,aAAa,CACjB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,WAAW,CACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,EAAE,cAAc,CAAC,CAAC;IACrB,CAAC;IAED,cAAc,CAAC,KAAoC;QACjD,mEAAmE;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAC1E,WAAW,CAAC,MAAM,EAAE,IAAI,CACtB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CAC1D,CACF,CAAC;QAEF,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;CACF","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { createModuleLogger } from '@metamask/utils';\nimport { noop } from 'lodash-es';\n\nimport { TransactionPayStrategy } from '../constants.js';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayControllerState,\n} from '../index.js';\nimport { projectLogger } from '../logger.js';\nimport type {\n GetBalanceCallback,\n UpdateTransactionDataCallback,\n} from '../types.js';\nimport { refreshQuotes } from '../utils/quotes.js';\n\nconst CHECK_INTERVAL = 1000; // 1 Second\n\nconst log = createModuleLogger(projectLogger, 'quote-refresh');\n\nexport class QuoteRefresher {\n #isRunning: boolean;\n\n #isUpdating: boolean;\n\n readonly #messenger: TransactionPayControllerMessenger;\n\n #timeoutId: NodeJS.Timeout | undefined;\n\n readonly #getStrategies: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy[];\n\n readonly #getBalance?: GetBalanceCallback;\n\n readonly #updateTransactionData: UpdateTransactionDataCallback;\n\n constructor({\n getBalance,\n getStrategies,\n messenger,\n updateTransactionData,\n }: {\n getBalance?: GetBalanceCallback;\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n }) {\n this.#getBalance = getBalance;\n this.#getStrategies = getStrategies;\n this.#messenger = messenger;\n this.#isRunning = false;\n this.#isUpdating = false;\n this.#updateTransactionData = updateTransactionData;\n\n messenger.subscribe(\n 'TransactionPayController:stateChange',\n this.#onStateChange.bind(this),\n );\n }\n\n #start(): void {\n this.#isRunning = true;\n\n log('Started');\n\n if (this.#isUpdating) {\n return;\n }\n\n this.#queueNextInterval();\n }\n\n #stop(): void {\n if (this.#timeoutId) {\n clearTimeout(this.#timeoutId);\n }\n\n this.#isRunning = false;\n\n log('Stopped');\n }\n\n async #onInterval(): Promise<void> {\n this.#isUpdating = true;\n\n try {\n await refreshQuotes(\n this.#messenger,\n this.#updateTransactionData,\n this.#getStrategies,\n this.#getBalance,\n );\n } catch (error) {\n log('Error refreshing quotes', error);\n } finally {\n this.#isUpdating = false;\n\n this.#queueNextInterval();\n }\n }\n\n #queueNextInterval(): void {\n if (!this.#isRunning) {\n return;\n }\n\n if (this.#timeoutId) {\n clearTimeout(this.#timeoutId);\n }\n\n this.#timeoutId = setTimeout(() => {\n this.#onInterval().catch(noop);\n }, CHECK_INTERVAL);\n }\n\n #onStateChange(state: TransactionPayControllerState): void {\n // No-op quotes never refresh, so they don't need the refresh loop.\n const hasQuotes = Object.values(state.transactionData).some((transaction) =>\n transaction.quotes?.some(\n (quote) => quote.strategy !== TransactionPayStrategy.None,\n ),\n );\n\n if (hasQuotes && !this.#isRunning) {\n this.#start();\n } else if (!hasQuotes && this.#isRunning) {\n this.#stop();\n }\n }\n}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from '../../types.js';
|
|
1
|
+
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetRefreshIntervalRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from '../../types.js';
|
|
2
2
|
import type { RelayQuote } from './types.js';
|
|
3
3
|
export declare class RelayStrategy implements PayStrategy<RelayQuote> {
|
|
4
4
|
supports(request: PayStrategyGetQuotesRequest): boolean;
|
|
5
5
|
getQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<RelayQuote>[]>;
|
|
6
|
+
getRefreshInterval(request: PayStrategyGetRefreshIntervalRequest): Promise<number | undefined>;
|
|
6
7
|
execute(request: PayStrategyExecuteRequest<RelayQuote>): ReturnType<PayStrategy<RelayQuote>['execute']>;
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=RelayStrategy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelayStrategy.d.ts","sourceRoot":"","sources":["../../../src/strategy/relay/RelayStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"RelayStrategy.d.ts","sourceRoot":"","sources":["../../../src/strategy/relay/RelayStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,oCAAoC,EACpC,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,aAAc,YAAW,WAAW,CAAC,UAAU,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAGtD;IAEK,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAE5C;IAEK,kBAAkB,CACtB,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;IAEK,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,UAAU,CAAC,GAC7C,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAEhD;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { getPayStrategiesConfig } from '../../utils/feature-flags.js';
|
|
1
|
+
import { getMaxBalanceRefreshInterval, getPayStrategiesConfig, } from '../../utils/feature-flags.js';
|
|
2
|
+
import { getTransaction } from '../../utils/transaction.js';
|
|
2
3
|
import { getRelayQuotes } from './relay-quotes.js';
|
|
3
4
|
import { submitRelayQuotes } from './relay-submit.js';
|
|
4
5
|
export class RelayStrategy {
|
|
@@ -9,6 +10,16 @@ export class RelayStrategy {
|
|
|
9
10
|
async getQuotes(request) {
|
|
10
11
|
return getRelayQuotes(request);
|
|
11
12
|
}
|
|
13
|
+
async getRefreshInterval(request) {
|
|
14
|
+
const { messenger, transactionId } = request;
|
|
15
|
+
const transactionData = messenger.call('TransactionPayController:getState')
|
|
16
|
+
.transactionData[transactionId];
|
|
17
|
+
if (!transactionData?.isMaxAmount) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const transaction = getTransaction(transactionId, messenger);
|
|
21
|
+
return getMaxBalanceRefreshInterval(messenger, transaction);
|
|
22
|
+
}
|
|
12
23
|
async execute(request) {
|
|
13
24
|
return await submitRelayQuotes(request);
|
|
14
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelayStrategy.js","sourceRoot":"","sources":["../../../src/strategy/relay/RelayStrategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RelayStrategy.js","sourceRoot":"","sources":["../../../src/strategy/relay/RelayStrategy.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,OAAO,aAAa;IACxB,QAAQ,CAAC,OAAoC;QAC3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAA6C;QAE7C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,mCAAmC,CAAC;aACxE,eAAe,CAAC,aAAa,CAAC,CAAC;QAElC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAE7D,OAAO,4BAA4B,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA8C;QAE9C,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetRefreshIntervalRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types.js';\nimport {\n getMaxBalanceRefreshInterval,\n getPayStrategiesConfig,\n} from '../../utils/feature-flags.js';\nimport { getTransaction } from '../../utils/transaction.js';\nimport { getRelayQuotes } from './relay-quotes.js';\nimport { submitRelayQuotes } from './relay-submit.js';\nimport type { RelayQuote } from './types.js';\n\nexport class RelayStrategy implements PayStrategy<RelayQuote> {\n supports(request: PayStrategyGetQuotesRequest): boolean {\n const config = getPayStrategiesConfig(request.messenger);\n return config.relay.enabled;\n }\n\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<RelayQuote>[]> {\n return getRelayQuotes(request);\n }\n\n async getRefreshInterval(\n request: PayStrategyGetRefreshIntervalRequest,\n ): Promise<number | undefined> {\n const { messenger, transactionId } = request;\n const transactionData = messenger.call('TransactionPayController:getState')\n .transactionData[transactionId];\n\n if (!transactionData?.isMaxAmount) {\n return undefined;\n }\n\n const transaction = getTransaction(transactionId, messenger);\n\n return getMaxBalanceRefreshInterval(messenger, transaction);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<RelayQuote>,\n ): ReturnType<PayStrategy<RelayQuote>['execute']> {\n return await submitRelayQuotes(request);\n }\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -542,6 +542,8 @@ export type PayStrategyGetRefreshIntervalRequest = {
|
|
|
542
542
|
chainId: Hex;
|
|
543
543
|
/** Controller messenger. */
|
|
544
544
|
messenger: TransactionPayControllerMessenger;
|
|
545
|
+
/** ID of the transaction whose refresh interval is being resolved. */
|
|
546
|
+
transactionId: string;
|
|
545
547
|
};
|
|
546
548
|
/** Strategy used to obtain required tokens for a transaction. */
|
|
547
549
|
export type PayStrategy<OriginalQuote> = {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8PA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAChE,aAAa;IACb,iBAAiB;IACjB,eAAe;CAChB,CAAC","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AssetsControllerGetStateAction,\n AssetsControllerStateChangeEvent,\n} from '@metamask/assets-controller';\nimport type { ControllerStateChangeEvent } from '@metamask/base-controller';\nimport type { ControllerGetStateAction } from '@metamask/base-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerGetStateAction,\n KeyringControllerSignTypedMessageAction,\n KeyringControllerUnlockEvent,\n KeyringTypes,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerFindNetworkClientIdByChainIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerGetNetworkConfigurationByChainIdAction } from '@metamask/network-controller';\nimport type { Quote as RampsQuote } from '@metamask/ramps-controller';\nimport type {\n RampsControllerGetOrderAction,\n RampsControllerGetQuoteWithFeesAction,\n} from '@metamask/ramps-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { SentinelApiServiceActions } from '@metamask/sentinel-api-service';\nimport type {\n AuthorizationList,\n TransactionControllerAddTransactionBatchAction,\n TransactionControllerEstimateGasAction,\n TransactionControllerEstimateGasBatchAction,\n TransactionControllerUnapprovedTransactionAddedEvent,\n} from '@metamask/transaction-controller';\nimport type {\n BatchTransaction,\n BatchTransactionParams,\n TransactionControllerAddTransactionAction,\n TransactionControllerGetGasFeeTokensAction,\n TransactionControllerGetStateAction,\n TransactionControllerStateChangeEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport type {\n CONTROLLER_NAME,\n PaymentOverride,\n TransactionPayClientId,\n TransactionPayStrategy,\n} from './constants.js';\nimport type { TransactionPayControllerMethodActions } from './TransactionPayController-method-action-types.js';\n\nexport type AllowedActions =\n | AccountsControllerGetStateAction\n | AssetsControllerGetStateAction\n | GetGasFeeState\n | KeyringControllerGetStateAction\n | KeyringControllerSignTypedMessageAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetNetworkConfigurationByChainIdAction\n | RampsControllerGetOrderAction\n | RampsControllerGetQuoteWithFeesAction\n | RemoteFeatureFlagControllerGetStateAction\n | SentinelApiServiceActions\n | TransactionControllerAddTransactionAction\n | TransactionControllerAddTransactionBatchAction\n | TransactionControllerEstimateGasAction\n | TransactionControllerEstimateGasBatchAction\n | TransactionControllerGetGasFeeTokensAction\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction;\n\nexport type AllowedEvents =\n | AssetsControllerStateChangeEvent\n | KeyringControllerUnlockEvent\n | TransactionControllerStateChangeEvent\n | TransactionControllerUnapprovedTransactionAddedEvent;\n\nexport type TransactionPayControllerGetStateAction = ControllerGetStateAction<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n>;\n\n/** Configurable properties of a transaction. */\nexport type TransactionConfig = {\n /**\n * Optional address to override the default account used by the transaction.\n * When `isPostQuote` is true, used as the recipient of the MM Pay transfer.\n * When `isPostQuote` is false, it provides the funds and pays for gas.\n */\n accountOverride?: Hex;\n\n /**\n * Whether the target transaction (or `paymentOverride` batch) is executed\n * atomically with the Relay quote. Defaults to `true` (embedded in the quote\n * and executed by the Relay solver). When `false`, Pay does not embed the\n * target/override calls in the quote; the quote only bridges the required\n * asset to `recipient`, and the calls are submitted separately after Relay\n * completion. Used by flows whose second-leg amount is only known after\n * Relay settles (EXACT_INPUT max flows) or that require the second leg to\n * originate from a different signer than the Relay solver.\n * For max deposits enabled by `payStrategies.relay.atomicMaxEnabled`, this\n * is a subsidy hint: atomic quotes are retried non-atomically if not\n * subsidized, and subsidized non-atomic quotes are upgraded to atomic.\n */\n atomic?: boolean;\n\n /**\n * Whether the source of funds is HyperLiquid (HyperCore).\n * When true, the Relay strategy uses the HyperLiquid 2-step withdrawal\n * flow: (1) authorize nonce-mapping, (2) sendAsset to Relay solver.\n */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Whether the user has selected the maximum amount. */\n isMaxAmount?: boolean;\n\n /**\n * Whether this is a post-quote transaction.\n * When true, the paymentToken represents the destination token,\n * and the quote source is derived from the transaction's output token.\n */\n isPostQuote?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** When true, a quote is always fetched even when the source and target tokens are identical. */\n isQuoteRequired?: boolean;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request. Use this for post-quote flows where the user's funds originate\n * from a smart contract account (e.g. Predict Safe proxy) so that refunds\n * go back to that account rather than the EOA.\n */\n refundTo?: Hex;\n};\n\n/** Callback to update transaction config. */\nexport type TransactionConfigCallback = (config: TransactionConfig) => void;\n\n/** Request passed to {@link GetPaymentOverrideDataCallback}. */\nexport type GetPaymentOverrideDataRequest = {\n /** Amount of the source token in human-readable format. */\n amount: string;\n\n /** Metadata of the original transaction. */\n transaction: TransactionMeta;\n\n /** Pay-controller state for the transaction. */\n transactionData: TransactionData;\n};\n\n/** Response returned by {@link GetPaymentOverrideDataCallback}. */\nexport type GetPaymentOverrideDataResponse = {\n /** Batch transaction params to prepend to the submit batch. */\n calls: BatchTransactionParams[];\n\n /** Optional recipient address for the funding token transfer. */\n recipient?: Hex;\n\n /** Optional EIP-7702 authorization list from delegation. */\n authorizationList?: AuthorizationList;\n};\n\n/**\n * Callback invoked during submit when `paymentOverride` is defined.\n * Returns batch transaction params to prepend to the submit batch.\n */\nexport type GetPaymentOverrideDataCallback = (\n request: GetPaymentOverrideDataRequest,\n) => Promise<GetPaymentOverrideDataResponse>;\n\nexport type GetAmountDataRequest = {\n /** Raw token amount (atomic units) to encode into calldata. */\n amount: string;\n\n /** Metadata of the transaction whose nested calls need updating. */\n transaction: TransactionMeta;\n};\n\nexport type GetAmountDataResponse = {\n /** Per-nested-call data updates; empty when no update is needed. */\n updates: { nestedTransactionIndex: number; data: Hex }[];\n};\n\n/**\n * Optional callback that re-encodes nested transaction calldata for a given\n * token amount. Used by transaction types with non-standard nested data\n * (e.g. vault approve + deposit) that cannot be derived from the amount alone\n * without client-side context (vault config, RPC providers, etc.).\n */\nexport type GetAmountDataCallback = (\n request: GetAmountDataRequest,\n) => Promise<GetAmountDataResponse>;\n\n/** Request passed to {@link GetBalanceCallback}. */\nexport type GetBalanceRequest = {\n /** Metadata of the transaction whose source balance is being resolved. */\n transaction: TransactionMeta;\n /** Pay-controller state for the transaction. */\n transactionData: TransactionData;\n};\n\n/** Balance override returned by {@link GetBalanceCallback}. */\nexport type GetBalanceResponse = {\n /** Balance in atomic format without factoring token decimals. */\n balanceRaw: string;\n};\n\n/**\n * Optional client-supplied callback that overrides the built-in\n * pay-token / required-token balance lookup used for `isMaxAmount`\n * source-amount calculation. Enables alternate balance sources\n * (perps, predict, money-account, post-quote, etc.) without adding\n * conditional branches inside the controller. MUST be synchronous:\n * it runs inside the controller state-update block.\n * Return `undefined` to fall back to the built-in token balance.\n */\nexport type GetBalanceCallback = (\n request: GetBalanceRequest,\n) => GetBalanceResponse | undefined;\n\n/** Callback to update fiat payment state. */\nexport type TransactionFiatPaymentCallback = (\n fiatPayment: TransactionFiatPayment,\n) => void;\n\nexport type TransactionPayControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n >;\n\nexport type TransactionPayControllerActions =\n | TransactionPayControllerGetStateAction\n | TransactionPayControllerMethodActions;\n\nexport type TransactionPayControllerEvents =\n TransactionPayControllerStateChangeEvent;\n\nexport type TransactionPayControllerMessenger = Messenger<\n typeof CONTROLLER_NAME,\n TransactionPayControllerActions | AllowedActions,\n TransactionPayControllerEvents | AllowedEvents\n>;\n\n/**\n * Keyring types that support EIP-7702 authorization signing.\n * Hardware wallets, snap keyrings, and custody keyrings are excluded.\n */\nexport const KEYRING_TYPES_SUPPORTING_7702: `${KeyringTypes}`[] = [\n 'HD Key Tree',\n 'Simple Key Pair',\n 'Money Keyring',\n];\n\n/** Options for the TransactionPayController. */\nexport type TransactionPayControllerOptions = {\n /**\n * Identifies the MetaMask client, sent as the `X-Client-Id` header on\n * requests to the intents API so the server can distinguish Mobile from\n * Extension traffic.\n */\n clientId?: TransactionPayClientId;\n\n /** Optional callback to re-encode nested transaction calldata for a given amount. */\n getAmountData?: GetAmountDataCallback;\n\n /** Optional callback to override the source balance used for max-amount calculation. */\n getBalance?: GetBalanceCallback;\n\n /** Callback to convert a transaction into a redeem delegation. */\n getDelegationTransaction: GetDelegationTransactionCallback;\n\n /** Optional fiat execution configuration. */\n fiatOptions?: TransactionPayFiatOptions;\n\n /**\n * Optional callback invoked during quote execution when `paymentOverride` is defined.\n * Returns additional transactions to be submitted alongside the quote batch.\n */\n getPaymentOverrideData?: GetPaymentOverrideDataCallback;\n\n /** Callback to select the PayStrategy for a transaction. */\n getStrategy?: (transaction: TransactionMeta) => TransactionPayStrategy;\n\n /** Callback to select ordered PayStrategies for a transaction. */\n getStrategies?: (transaction: TransactionMeta) => TransactionPayStrategy[];\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Callbacks for the Polymarket relayer; required only for the Polymarket deposit-wallet flow. */\n polymarket?: PolymarketCallbacks;\n\n /** Initial state of the controller. */\n state?: Partial<TransactionPayControllerState>;\n};\n\n/** State of the TransactionPayController. */\nexport type TransactionPayControllerState = {\n /** State relating to each transaction, keyed by transaction ID. */\n transactionData: Record<string, TransactionData>;\n};\n\n/** Optional fiat execution configuration. */\nexport type TransactionPayFiatOptions = {\n /** Test funding source used to bypass fiat on-ramp execution during local QA. */\n testFundingSource?: Hex;\n\n /** Optional human amount to transfer from the test funding source. */\n testAmountOverride?: string;\n};\n\n/** State relating to a single transaction. */\nexport type TransactionData = {\n /**\n * Optional address to override the default account used by the transaction.\n * When `isPostQuote` is true, used as the recipient of the MM Pay transfer.\n * When `isPostQuote` is false, it provides the funds and pays for gas.\n */\n accountOverride?: Hex;\n\n /**\n * Whether the target transaction is executed atomically with the Relay\n * quote. See {@link TransactionConfig.atomic}.\n */\n atomic?: boolean;\n\n /** Fiat payment method state. */\n fiatPayment?: TransactionFiatPayment;\n\n /** Whether quotes are currently being retrieved. */\n isLoading: boolean;\n\n /** Whether the user has selected the maximum amount. */\n isMaxAmount?: boolean;\n\n /**\n * Whether this is a post-quote transaction.\n * When true, the paymentToken represents the destination token,\n * and the quote source is derived from the transaction's output token.\n * Used when funds need to be moved after a transaction completes\n * (e.g., bridging output to a different token/chain).\n */\n isPostQuote?: boolean;\n\n /** Whether the source of funds is HyperLiquid (HyperCore). */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** When true, a quote is always fetched even when the source and target tokens are identical. */\n isQuoteRequired?: boolean;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request.\n */\n refundTo?: Hex;\n\n /**\n * Token selected for the transaction.\n * - For standard flows (isPostQuote=false): This is the SOURCE/payment token\n * - For post-quote flows (isPostQuote=true): This is the DESTINATION token\n */\n paymentToken?: TransactionPaymentToken;\n\n /** Quotes retrieved for the transaction. */\n quotes?: TransactionPayQuote<Json>[];\n\n /** Most relevant structured validation error from the latest quote attempt. */\n quoteError?: QuoteErrorInfo;\n\n /** Timestamp of when quotes were last updated. */\n quotesLastUpdated?: number;\n\n /** Amounts of payment token required for each required token. */\n sourceAmounts?: TransactionPaySourceAmount[];\n\n /** Tokens required by the transaction. */\n tokens: TransactionPayRequiredToken[];\n\n /** Calculated totals for the transaction. */\n totals?: TransactionPayTotals;\n};\n\n/** Fiat payment state stored per transaction. */\nexport type TransactionFiatPayment = {\n /** Entered fiat amount for the selected payment method. */\n amountFiat?: string;\n\n /** CAIP-19 asset id derived from the transaction type for the fiat on-ramp. */\n caipAssetId?: string;\n\n /** Order identifier in normalized format (/providers/{provider}/orders/{id}). */\n orderId?: string;\n\n /** The ramps quote received from the ramps provider. */\n rampsQuote?: RampsQuote;\n\n /** Selected fiat payment method ID. */\n selectedPaymentMethodId?: string;\n};\n\n/** A token required by a transaction. */\nexport type TransactionPayRequiredToken = {\n /** Address of the required token. */\n address: Hex;\n\n /** Whether to allow quotes that return less than the minimum amount requested. */\n allowUnderMinimum: boolean;\n\n /** Amount required in the selected currency. */\n amountFiat: string;\n\n /** Amount required in a human-readable format factoring token decimals. */\n amountHuman: string;\n\n /** Amount required in atomic format without factoring token decimals. */\n amountRaw: string;\n\n /** Amount required in USD. */\n amountUsd: string;\n\n /** Balance of the required token in the selected currency. */\n balanceFiat: string;\n\n /** Balance of the required token in a human-readable format factoring token decimals. */\n balanceHuman: string;\n\n /** Balance of the required token in atomic format without factoring token decimals. */\n balanceRaw: string;\n\n /** Balance of the required token in USD. */\n balanceUsd: string;\n\n /** Chain ID of the required token. */\n chainId: Hex;\n\n /** Decimals of the required token. */\n decimals: number;\n\n /** Whether to skip transfer of this token if balance is already sufficient. */\n skipIfBalance: boolean;\n\n /** Symbol of the required token. */\n symbol: string;\n};\n\n/** Amount of payment token required by a required token. */\nexport type TransactionPaySourceAmount = {\n /** Amount of payment token required in the selected currency. */\n sourceAmountHuman: string;\n\n /** Amount of payment token required in atomic format without factoring token decimals. */\n sourceAmountRaw: string;\n\n /** Balance of the source token in atomic format (for post-quote flows). */\n sourceBalanceRaw?: string;\n\n /** Chain ID of the source token (for post-quote flows). */\n sourceChainId?: Hex;\n\n /** Address of the source token (for post-quote flows). */\n sourceTokenAddress?: Hex;\n\n /** Address of the target token. */\n targetTokenAddress: Hex;\n};\n\n/**\n * Machine-readable discriminator for a quote validation failure.\n *\n * Used for analytics and tests. Human-readable copy is carried by `message`\n * and `detail` on {@link QuoteErrorInfo}.\n */\nexport type QuoteErrorReason =\n /**\n * @deprecated No longer emitted. An unreadable live balance is treated as\n * unknown rather than insufficient, so it no longer blocks the quote. Kept\n * so existing consumers and historical analytics still type-check.\n */\n | 'balance-unavailable'\n | 'insufficient-source-balance'\n | 'insufficient-transfer-balance'\n | 'no-quotes'\n | 'simulation-failed';\n\n/**\n * Structured description of why a quote failed validation.\n *\n * `message` and `detail` are formatted (English) copy ready to display; `reason`\n * is a machine-readable discriminator for analytics and tests.\n */\nexport type QuoteErrorInfo = {\n /** Short, display-ready summary of the failure. */\n message: string;\n\n /** Machine-readable discriminator for the failure. */\n reason: QuoteErrorReason;\n\n /** Optional display-ready detail rows (e.g. Required / Current / Missing). */\n detail?: string[];\n};\n\n/** Source token used to pay for required tokens. */\nexport type TransactionPaymentToken = {\n /** Address of the payment token. */\n address: Hex;\n\n /** Balance of the payment token in the selected currency. */\n balanceFiat: string;\n\n /** Balance of the payment token in a human-readable format factoring token decimals. */\n balanceHuman: string;\n\n /** Balance of the payment token in atomic format without factoring token decimals. */\n balanceRaw: string;\n\n /** Balance of the payment token in USD. */\n balanceUsd: string;\n\n /** Chain ID of the payment token. */\n chainId: Hex;\n\n /** Decimals of the payment token. */\n decimals: number;\n\n /** Symbol of the payment token. */\n symbol: string;\n};\n\n/** Callback to update state for a single transaction. */\nexport type UpdateTransactionDataCallback = (\n /** ID of the transaction to update. */\n transactionId: string,\n /** Function that receives a draft of the transaction data to update. */\n fn: (data: Draft<TransactionData>) => void,\n) => void;\n\n/** Conversion rates from the native currency to other currencies. */\nexport type FiatRates = {\n /** Conversion rate for the native currency to the selected fiat currency. */\n fiatRate: string;\n\n /** Conversion rate for the native currency to USD. */\n usdRate: string;\n};\n\n/** Request for a quote to retrieve a required token. */\nexport type QuoteRequest = {\n /**\n * Whether the target transaction is executed atomically with the Relay\n * quote. See {@link TransactionConfig.atomic}.\n */\n atomic?: boolean;\n\n /** Address of the user's account. */\n from: Hex;\n\n /** Whether the transaction is a maximum amount transaction. */\n isMaxAmount?: boolean;\n\n /** Whether this is a post-quote flow. */\n isPostQuote?: boolean;\n\n /** Whether the source of funds is HyperLiquid (HyperCore). */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Whether this quote is the direct mUSD-to-Money-Account fiat flow. */\n isDirectMusdMoneyAccount?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** Optional recipient address for Relay requests. When set, overrides the default `from` address. */\n recipient?: Hex;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request.\n */\n refundTo?: Hex;\n\n /** Whether to skip processTransactions in relay-quotes. Defaults to `isPostQuote`. */\n skipProcessTransactions?: boolean;\n\n /** Balance of the source token in atomic format without factoring token decimals. */\n sourceBalanceRaw: string;\n\n /** Chain ID of the source token. */\n sourceChainId: Hex;\n\n /** Address of the source token. */\n sourceTokenAddress: Hex;\n\n /** Amount of the required token in atomic format without factoring token decimals. */\n sourceTokenAmount: string;\n\n /** Minimum amount required of the target token in atomic format without factoring token decimals. */\n targetAmountMinimum: string;\n\n /** Chain ID of the target token. */\n targetChainId: Hex;\n\n /** Address of the target token. */\n targetTokenAddress: Hex;\n\n /**\n * One-time HyperLiquid activation fee (USD) reserved from the source amount\n * for an unactivated HyperCore account. The source amount sent to the\n * provider is reduced by this amount so HyperLiquid retains enough balance\n * for the fee, and the amount is surfaced as part of the provider fee.\n */\n hyperliquidActivationFeeUsd?: string;\n};\n\n/** Fees associated with a transaction pay quote. */\nexport type TransactionPayFees = {\n /** Whether a gas fee token is used to pay source network fees. */\n isSourceGasFeeToken?: boolean;\n\n /** Whether a gas fee token is used to pay target network fees. */\n isTargetGasFeeToken?: boolean;\n\n /** Fee charged by MetaMask. */\n metaMask: FiatValue;\n\n /** Fee charged by the quote provider. */\n provider: FiatValue;\n\n /** Fee charged by fiat on-ramp provider (breakdown of the provider total). */\n providerFiat?: FiatValue;\n\n /** Network fee for transactions on the source network. */\n sourceNetwork: {\n estimate: Amount;\n max: Amount;\n };\n\n /** Network fee for transactions on the target network. */\n targetNetwork: FiatValue;\n};\n\n/** Quote returned to retrieve a required token using the payment token. */\nexport type TransactionPayQuote<OriginalQuote> = {\n /** Additional amount provided by the quote beyond the minimum requested. */\n dust: FiatValue;\n\n /** Duration estimated for the transaction to complete in seconds. */\n estimatedDuration: number;\n\n /** Fees associated with the transaction pay quote. */\n fees: TransactionPayFees;\n\n /** Whether fees are subtracted from the destination amount, meaning the input amount is static. */\n isInputBased?: boolean;\n\n /** Whether the reported fees are already included in the source amount. */\n areFeesIncludedInSourceAmount?: boolean;\n\n /** Raw quote data returned by the provider. */\n original: OriginalQuote;\n\n /** Associated quote request. */\n request: QuoteRequest;\n\n /**\n * Whether the target calls could not be embedded in the quote and must be\n * submitted separately, on the target chain, once the quote settles.\n *\n * Set by the strategy at quote time, since only it knows whether the provider\n * accepted the calls. {@link TransactionConfig.atomic} is a hint rather than\n * a guarantee: a quote requested atomically still falls back to a second leg\n * when the provider cannot execute the calls itself.\n */\n requiresSecondLeg?: boolean;\n\n /** Amount of source token required. */\n sourceAmount: Amount;\n\n /** Name of the strategy used to retrieve the quote. */\n strategy: TransactionPayStrategy;\n\n /** Amount of target token provided. */\n targetAmount: FiatValue;\n};\n\n/** Request to get quotes for a transaction. */\nexport type PayStrategyGetQuotesRequest = {\n /** Whether the account supports EIP-7702 authorization signing. */\n accountSupports7702: boolean;\n\n /** Selected fiat payment method ID, if applicable. */\n fiatPaymentMethod?: string;\n\n /**\n * Resolved wallet address for the transaction.\n * This is `accountOverride ?? txParams.from`, pre-computed by the quote\n * orchestrator so that individual strategies do not need to re-derive it.\n */\n from: Hex;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quote requests for required tokens. */\n requests: QuoteRequest[];\n\n /**\n * Signal that aborts when a newer quote request supersedes this one.\n * Strategies that perform their own network IO should forward this to\n * their fetch calls so cancelled requests release network resources.\n */\n signal?: AbortSignal;\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to submit quotes for a transaction. */\nexport type PayStrategyExecuteRequest<OriginalRequest> = {\n /** Whether the account supports EIP-7702 authorization signing. */\n accountSupports7702: boolean;\n\n /** Callback to determine if the transaction is a smart transaction. */\n isSmartTransaction: (chainId: Hex) => boolean;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes to be submitted. */\n quotes: TransactionPayQuote<OriginalRequest>[];\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to get batch transactions for quotes. */\nexport type PayStrategyGetBatchRequest<OriginalQuote> = {\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes for required tokens. */\n quotes: TransactionPayQuote<OriginalQuote>[];\n\n /** Signal that aborts when a newer quote request supersedes this one. */\n signal?: AbortSignal;\n};\n\n/** Request to check whether retrieved quotes can be executed by a strategy. */\nexport type PayStrategyCheckQuoteSupportRequest<OriginalQuote> = {\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes returned by the strategy. */\n quotes: TransactionPayQuote<OriginalQuote>[];\n\n /** Signal that aborts when a newer quote request supersedes this one. */\n signal?: AbortSignal;\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to get refresh interval for a specific strategy. */\nexport type PayStrategyGetRefreshIntervalRequest = {\n /** Chain ID of the source or payment token. */\n chainId: Hex;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n};\n\n/** Strategy used to obtain required tokens for a transaction. */\nexport type PayStrategy<OriginalQuote> = {\n /**\n * Check if the strategy supports the given request.\n * Defaults to true if not implemented.\n */\n supports?: (\n request: PayStrategyGetQuotesRequest,\n ) => boolean | Promise<boolean>;\n\n /** Retrieve quotes for required tokens. */\n getQuotes: (\n request: PayStrategyGetQuotesRequest,\n ) => Promise<TransactionPayQuote<OriginalQuote>[]>;\n\n /**\n * Check if the returned quotes are supported after provider quote\n * construction and gas planning.\n *\n * Use this for limitations that are only knowable once quote metadata is\n * available, such as whether execution will require an EIP-7702\n * authorization list.\n */\n checkQuoteSupport?: (\n request: PayStrategyCheckQuoteSupportRequest<OriginalQuote>,\n ) => boolean | Promise<boolean>;\n\n /** Retrieve batch transactions for quotes, if supported by the strategy. */\n getBatchTransactions?: (\n request: PayStrategyGetBatchRequest<OriginalQuote>,\n ) => Promise<BatchTransaction[]>;\n\n /**\n * Retrieve refresh interval for the strategy, if applicable.\n * Defaults to 30 seconds.\n */\n getRefreshInterval?: (\n request: PayStrategyGetRefreshIntervalRequest,\n ) => Promise<number | undefined>;\n\n /** Execute or submit the quotes to obtain required tokens. */\n execute: (request: PayStrategyExecuteRequest<OriginalQuote>) => Promise<{\n transactionHash?: Hex;\n }>;\n};\n\n/** Single fiat value in alternate currencies. */\nexport type FiatValue = {\n /** Value in the selected fiat currency. */\n fiat: string;\n\n /** Value in USD. */\n usd: string;\n};\n\n/** Calculated totals for a target transaction and all quotes. */\nexport type TransactionPayTotals = {\n /** Total estimated duration for the target transaction and all quotes. */\n estimatedDuration: number;\n\n /** Total fees for the target transaction and all quotes. */\n fees: TransactionPayFees;\n\n /** Whether the selected quotes subtract fees from the destination amount, meaning the input amount is static. */\n isInputBased?: boolean;\n\n /** Total amount of source token required. */\n sourceAmount: Amount;\n\n /** Total amount of target token provided. */\n targetAmount: FiatValue;\n\n /** Overall total cost for the target transaction and all quotes. */\n total: FiatValue;\n};\n\n/** Request to update the payment token for a transaction. */\nexport type UpdatePaymentTokenRequest = {\n /** ID of the transaction to update. */\n transactionId: string;\n\n /** Address of the new payment token. */\n tokenAddress: Hex;\n\n /** Chain ID of the new payment token. */\n chainId: Hex;\n};\n\n/** Request to update fiat payment state for a transaction. */\nexport type UpdateFiatPaymentRequest = {\n /** ID of the transaction to update. */\n transactionId: string;\n\n /** Callback to mutate fiat payment state. */\n callback: TransactionFiatPaymentCallback;\n};\n\n/** Callback to convert a transaction to a redeem delegation. */\nexport type GetDelegationTransactionCallback = ({\n transaction,\n isSubsidized,\n}: {\n transaction: TransactionMeta;\n isSubsidized?: boolean;\n}) => Promise<{\n authorizationList?: AuthorizationList;\n data: Hex;\n to: Hex;\n value: Hex;\n}>;\n\n/** Client-supplied callbacks for the Polymarket relayer protocol. */\nexport type PolymarketCallbacks = {\n /** Derive the deposit-wallet address (CREATE2) for the given EOA. */\n getDepositWalletAddress: (params: { eoa: Hex }) => Promise<Hex>;\n\n /** Sign and broadcast a deposit-wallet batch, returning the source hash. */\n submitDepositWalletBatch: (params: {\n eoa: Hex;\n depositWallet: Hex;\n calls: { target: Hex; data: Hex; value: string }[];\n }) => Promise<{ sourceHash: Hex }>;\n};\n\n/** Single amount in alternate formats. */\nexport type Amount = FiatValue & {\n /** Amount in human-readable format factoring token decimals. */\n human: string;\n\n /** Amount in atomic format without factoring token decimals. */\n raw: string;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8PA;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IAChE,aAAa;IACb,iBAAiB;IACjB,eAAe;CAChB,CAAC","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AssetsControllerGetStateAction,\n AssetsControllerStateChangeEvent,\n} from '@metamask/assets-controller';\nimport type { ControllerStateChangeEvent } from '@metamask/base-controller';\nimport type { ControllerGetStateAction } from '@metamask/base-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerGetStateAction,\n KeyringControllerSignTypedMessageAction,\n KeyringControllerUnlockEvent,\n KeyringTypes,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerFindNetworkClientIdByChainIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerGetNetworkConfigurationByChainIdAction } from '@metamask/network-controller';\nimport type { Quote as RampsQuote } from '@metamask/ramps-controller';\nimport type {\n RampsControllerGetOrderAction,\n RampsControllerGetQuoteWithFeesAction,\n} from '@metamask/ramps-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { SentinelApiServiceActions } from '@metamask/sentinel-api-service';\nimport type {\n AuthorizationList,\n TransactionControllerAddTransactionBatchAction,\n TransactionControllerEstimateGasAction,\n TransactionControllerEstimateGasBatchAction,\n TransactionControllerUnapprovedTransactionAddedEvent,\n} from '@metamask/transaction-controller';\nimport type {\n BatchTransaction,\n BatchTransactionParams,\n TransactionControllerAddTransactionAction,\n TransactionControllerGetGasFeeTokensAction,\n TransactionControllerGetStateAction,\n TransactionControllerStateChangeEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport type {\n CONTROLLER_NAME,\n PaymentOverride,\n TransactionPayClientId,\n TransactionPayStrategy,\n} from './constants.js';\nimport type { TransactionPayControllerMethodActions } from './TransactionPayController-method-action-types.js';\n\nexport type AllowedActions =\n | AccountsControllerGetStateAction\n | AssetsControllerGetStateAction\n | GetGasFeeState\n | KeyringControllerGetStateAction\n | KeyringControllerSignTypedMessageAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetNetworkConfigurationByChainIdAction\n | RampsControllerGetOrderAction\n | RampsControllerGetQuoteWithFeesAction\n | RemoteFeatureFlagControllerGetStateAction\n | SentinelApiServiceActions\n | TransactionControllerAddTransactionAction\n | TransactionControllerAddTransactionBatchAction\n | TransactionControllerEstimateGasAction\n | TransactionControllerEstimateGasBatchAction\n | TransactionControllerGetGasFeeTokensAction\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction;\n\nexport type AllowedEvents =\n | AssetsControllerStateChangeEvent\n | KeyringControllerUnlockEvent\n | TransactionControllerStateChangeEvent\n | TransactionControllerUnapprovedTransactionAddedEvent;\n\nexport type TransactionPayControllerGetStateAction = ControllerGetStateAction<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n>;\n\n/** Configurable properties of a transaction. */\nexport type TransactionConfig = {\n /**\n * Optional address to override the default account used by the transaction.\n * When `isPostQuote` is true, used as the recipient of the MM Pay transfer.\n * When `isPostQuote` is false, it provides the funds and pays for gas.\n */\n accountOverride?: Hex;\n\n /**\n * Whether the target transaction (or `paymentOverride` batch) is executed\n * atomically with the Relay quote. Defaults to `true` (embedded in the quote\n * and executed by the Relay solver). When `false`, Pay does not embed the\n * target/override calls in the quote; the quote only bridges the required\n * asset to `recipient`, and the calls are submitted separately after Relay\n * completion. Used by flows whose second-leg amount is only known after\n * Relay settles (EXACT_INPUT max flows) or that require the second leg to\n * originate from a different signer than the Relay solver.\n * For max deposits enabled by `payStrategies.relay.atomicMaxEnabled`, this\n * is a subsidy hint: atomic quotes are retried non-atomically if not\n * subsidized, and subsidized non-atomic quotes are upgraded to atomic.\n */\n atomic?: boolean;\n\n /**\n * Whether the source of funds is HyperLiquid (HyperCore).\n * When true, the Relay strategy uses the HyperLiquid 2-step withdrawal\n * flow: (1) authorize nonce-mapping, (2) sendAsset to Relay solver.\n */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Whether the user has selected the maximum amount. */\n isMaxAmount?: boolean;\n\n /**\n * Whether this is a post-quote transaction.\n * When true, the paymentToken represents the destination token,\n * and the quote source is derived from the transaction's output token.\n */\n isPostQuote?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** When true, a quote is always fetched even when the source and target tokens are identical. */\n isQuoteRequired?: boolean;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request. Use this for post-quote flows where the user's funds originate\n * from a smart contract account (e.g. Predict Safe proxy) so that refunds\n * go back to that account rather than the EOA.\n */\n refundTo?: Hex;\n};\n\n/** Callback to update transaction config. */\nexport type TransactionConfigCallback = (config: TransactionConfig) => void;\n\n/** Request passed to {@link GetPaymentOverrideDataCallback}. */\nexport type GetPaymentOverrideDataRequest = {\n /** Amount of the source token in human-readable format. */\n amount: string;\n\n /** Metadata of the original transaction. */\n transaction: TransactionMeta;\n\n /** Pay-controller state for the transaction. */\n transactionData: TransactionData;\n};\n\n/** Response returned by {@link GetPaymentOverrideDataCallback}. */\nexport type GetPaymentOverrideDataResponse = {\n /** Batch transaction params to prepend to the submit batch. */\n calls: BatchTransactionParams[];\n\n /** Optional recipient address for the funding token transfer. */\n recipient?: Hex;\n\n /** Optional EIP-7702 authorization list from delegation. */\n authorizationList?: AuthorizationList;\n};\n\n/**\n * Callback invoked during submit when `paymentOverride` is defined.\n * Returns batch transaction params to prepend to the submit batch.\n */\nexport type GetPaymentOverrideDataCallback = (\n request: GetPaymentOverrideDataRequest,\n) => Promise<GetPaymentOverrideDataResponse>;\n\nexport type GetAmountDataRequest = {\n /** Raw token amount (atomic units) to encode into calldata. */\n amount: string;\n\n /** Metadata of the transaction whose nested calls need updating. */\n transaction: TransactionMeta;\n};\n\nexport type GetAmountDataResponse = {\n /** Per-nested-call data updates; empty when no update is needed. */\n updates: { nestedTransactionIndex: number; data: Hex }[];\n};\n\n/**\n * Optional callback that re-encodes nested transaction calldata for a given\n * token amount. Used by transaction types with non-standard nested data\n * (e.g. vault approve + deposit) that cannot be derived from the amount alone\n * without client-side context (vault config, RPC providers, etc.).\n */\nexport type GetAmountDataCallback = (\n request: GetAmountDataRequest,\n) => Promise<GetAmountDataResponse>;\n\n/** Request passed to {@link GetBalanceCallback}. */\nexport type GetBalanceRequest = {\n /** Metadata of the transaction whose source balance is being resolved. */\n transaction: TransactionMeta;\n /** Pay-controller state for the transaction. */\n transactionData: TransactionData;\n};\n\n/** Balance override returned by {@link GetBalanceCallback}. */\nexport type GetBalanceResponse = {\n /** Balance in atomic format without factoring token decimals. */\n balanceRaw: string;\n};\n\n/**\n * Optional client-supplied callback that overrides the built-in\n * pay-token / required-token balance lookup used for `isMaxAmount`\n * source-amount calculation. Enables alternate balance sources\n * (perps, predict, money-account, post-quote, etc.) without adding\n * conditional branches inside the controller. MUST be synchronous:\n * it runs inside the controller state-update block.\n * Return `undefined` to fall back to the built-in token balance.\n */\nexport type GetBalanceCallback = (\n request: GetBalanceRequest,\n) => GetBalanceResponse | undefined;\n\n/** Callback to update fiat payment state. */\nexport type TransactionFiatPaymentCallback = (\n fiatPayment: TransactionFiatPayment,\n) => void;\n\nexport type TransactionPayControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n >;\n\nexport type TransactionPayControllerActions =\n | TransactionPayControllerGetStateAction\n | TransactionPayControllerMethodActions;\n\nexport type TransactionPayControllerEvents =\n TransactionPayControllerStateChangeEvent;\n\nexport type TransactionPayControllerMessenger = Messenger<\n typeof CONTROLLER_NAME,\n TransactionPayControllerActions | AllowedActions,\n TransactionPayControllerEvents | AllowedEvents\n>;\n\n/**\n * Keyring types that support EIP-7702 authorization signing.\n * Hardware wallets, snap keyrings, and custody keyrings are excluded.\n */\nexport const KEYRING_TYPES_SUPPORTING_7702: `${KeyringTypes}`[] = [\n 'HD Key Tree',\n 'Simple Key Pair',\n 'Money Keyring',\n];\n\n/** Options for the TransactionPayController. */\nexport type TransactionPayControllerOptions = {\n /**\n * Identifies the MetaMask client, sent as the `X-Client-Id` header on\n * requests to the intents API so the server can distinguish Mobile from\n * Extension traffic.\n */\n clientId?: TransactionPayClientId;\n\n /** Optional callback to re-encode nested transaction calldata for a given amount. */\n getAmountData?: GetAmountDataCallback;\n\n /** Optional callback to override the source balance used for max-amount calculation. */\n getBalance?: GetBalanceCallback;\n\n /** Callback to convert a transaction into a redeem delegation. */\n getDelegationTransaction: GetDelegationTransactionCallback;\n\n /** Optional fiat execution configuration. */\n fiatOptions?: TransactionPayFiatOptions;\n\n /**\n * Optional callback invoked during quote execution when `paymentOverride` is defined.\n * Returns additional transactions to be submitted alongside the quote batch.\n */\n getPaymentOverrideData?: GetPaymentOverrideDataCallback;\n\n /** Callback to select the PayStrategy for a transaction. */\n getStrategy?: (transaction: TransactionMeta) => TransactionPayStrategy;\n\n /** Callback to select ordered PayStrategies for a transaction. */\n getStrategies?: (transaction: TransactionMeta) => TransactionPayStrategy[];\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Callbacks for the Polymarket relayer; required only for the Polymarket deposit-wallet flow. */\n polymarket?: PolymarketCallbacks;\n\n /** Initial state of the controller. */\n state?: Partial<TransactionPayControllerState>;\n};\n\n/** State of the TransactionPayController. */\nexport type TransactionPayControllerState = {\n /** State relating to each transaction, keyed by transaction ID. */\n transactionData: Record<string, TransactionData>;\n};\n\n/** Optional fiat execution configuration. */\nexport type TransactionPayFiatOptions = {\n /** Test funding source used to bypass fiat on-ramp execution during local QA. */\n testFundingSource?: Hex;\n\n /** Optional human amount to transfer from the test funding source. */\n testAmountOverride?: string;\n};\n\n/** State relating to a single transaction. */\nexport type TransactionData = {\n /**\n * Optional address to override the default account used by the transaction.\n * When `isPostQuote` is true, used as the recipient of the MM Pay transfer.\n * When `isPostQuote` is false, it provides the funds and pays for gas.\n */\n accountOverride?: Hex;\n\n /**\n * Whether the target transaction is executed atomically with the Relay\n * quote. See {@link TransactionConfig.atomic}.\n */\n atomic?: boolean;\n\n /** Fiat payment method state. */\n fiatPayment?: TransactionFiatPayment;\n\n /** Whether quotes are currently being retrieved. */\n isLoading: boolean;\n\n /** Whether the user has selected the maximum amount. */\n isMaxAmount?: boolean;\n\n /**\n * Whether this is a post-quote transaction.\n * When true, the paymentToken represents the destination token,\n * and the quote source is derived from the transaction's output token.\n * Used when funds need to be moved after a transaction completes\n * (e.g., bridging output to a different token/chain).\n */\n isPostQuote?: boolean;\n\n /** Whether the source of funds is HyperLiquid (HyperCore). */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** When true, a quote is always fetched even when the source and target tokens are identical. */\n isQuoteRequired?: boolean;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request.\n */\n refundTo?: Hex;\n\n /**\n * Token selected for the transaction.\n * - For standard flows (isPostQuote=false): This is the SOURCE/payment token\n * - For post-quote flows (isPostQuote=true): This is the DESTINATION token\n */\n paymentToken?: TransactionPaymentToken;\n\n /** Quotes retrieved for the transaction. */\n quotes?: TransactionPayQuote<Json>[];\n\n /** Most relevant structured validation error from the latest quote attempt. */\n quoteError?: QuoteErrorInfo;\n\n /** Timestamp of when quotes were last updated. */\n quotesLastUpdated?: number;\n\n /** Amounts of payment token required for each required token. */\n sourceAmounts?: TransactionPaySourceAmount[];\n\n /** Tokens required by the transaction. */\n tokens: TransactionPayRequiredToken[];\n\n /** Calculated totals for the transaction. */\n totals?: TransactionPayTotals;\n};\n\n/** Fiat payment state stored per transaction. */\nexport type TransactionFiatPayment = {\n /** Entered fiat amount for the selected payment method. */\n amountFiat?: string;\n\n /** CAIP-19 asset id derived from the transaction type for the fiat on-ramp. */\n caipAssetId?: string;\n\n /** Order identifier in normalized format (/providers/{provider}/orders/{id}). */\n orderId?: string;\n\n /** The ramps quote received from the ramps provider. */\n rampsQuote?: RampsQuote;\n\n /** Selected fiat payment method ID. */\n selectedPaymentMethodId?: string;\n};\n\n/** A token required by a transaction. */\nexport type TransactionPayRequiredToken = {\n /** Address of the required token. */\n address: Hex;\n\n /** Whether to allow quotes that return less than the minimum amount requested. */\n allowUnderMinimum: boolean;\n\n /** Amount required in the selected currency. */\n amountFiat: string;\n\n /** Amount required in a human-readable format factoring token decimals. */\n amountHuman: string;\n\n /** Amount required in atomic format without factoring token decimals. */\n amountRaw: string;\n\n /** Amount required in USD. */\n amountUsd: string;\n\n /** Balance of the required token in the selected currency. */\n balanceFiat: string;\n\n /** Balance of the required token in a human-readable format factoring token decimals. */\n balanceHuman: string;\n\n /** Balance of the required token in atomic format without factoring token decimals. */\n balanceRaw: string;\n\n /** Balance of the required token in USD. */\n balanceUsd: string;\n\n /** Chain ID of the required token. */\n chainId: Hex;\n\n /** Decimals of the required token. */\n decimals: number;\n\n /** Whether to skip transfer of this token if balance is already sufficient. */\n skipIfBalance: boolean;\n\n /** Symbol of the required token. */\n symbol: string;\n};\n\n/** Amount of payment token required by a required token. */\nexport type TransactionPaySourceAmount = {\n /** Amount of payment token required in the selected currency. */\n sourceAmountHuman: string;\n\n /** Amount of payment token required in atomic format without factoring token decimals. */\n sourceAmountRaw: string;\n\n /** Balance of the source token in atomic format (for post-quote flows). */\n sourceBalanceRaw?: string;\n\n /** Chain ID of the source token (for post-quote flows). */\n sourceChainId?: Hex;\n\n /** Address of the source token (for post-quote flows). */\n sourceTokenAddress?: Hex;\n\n /** Address of the target token. */\n targetTokenAddress: Hex;\n};\n\n/**\n * Machine-readable discriminator for a quote validation failure.\n *\n * Used for analytics and tests. Human-readable copy is carried by `message`\n * and `detail` on {@link QuoteErrorInfo}.\n */\nexport type QuoteErrorReason =\n /**\n * @deprecated No longer emitted. An unreadable live balance is treated as\n * unknown rather than insufficient, so it no longer blocks the quote. Kept\n * so existing consumers and historical analytics still type-check.\n */\n | 'balance-unavailable'\n | 'insufficient-source-balance'\n | 'insufficient-transfer-balance'\n | 'no-quotes'\n | 'simulation-failed';\n\n/**\n * Structured description of why a quote failed validation.\n *\n * `message` and `detail` are formatted (English) copy ready to display; `reason`\n * is a machine-readable discriminator for analytics and tests.\n */\nexport type QuoteErrorInfo = {\n /** Short, display-ready summary of the failure. */\n message: string;\n\n /** Machine-readable discriminator for the failure. */\n reason: QuoteErrorReason;\n\n /** Optional display-ready detail rows (e.g. Required / Current / Missing). */\n detail?: string[];\n};\n\n/** Source token used to pay for required tokens. */\nexport type TransactionPaymentToken = {\n /** Address of the payment token. */\n address: Hex;\n\n /** Balance of the payment token in the selected currency. */\n balanceFiat: string;\n\n /** Balance of the payment token in a human-readable format factoring token decimals. */\n balanceHuman: string;\n\n /** Balance of the payment token in atomic format without factoring token decimals. */\n balanceRaw: string;\n\n /** Balance of the payment token in USD. */\n balanceUsd: string;\n\n /** Chain ID of the payment token. */\n chainId: Hex;\n\n /** Decimals of the payment token. */\n decimals: number;\n\n /** Symbol of the payment token. */\n symbol: string;\n};\n\n/** Callback to update state for a single transaction. */\nexport type UpdateTransactionDataCallback = (\n /** ID of the transaction to update. */\n transactionId: string,\n /** Function that receives a draft of the transaction data to update. */\n fn: (data: Draft<TransactionData>) => void,\n) => void;\n\n/** Conversion rates from the native currency to other currencies. */\nexport type FiatRates = {\n /** Conversion rate for the native currency to the selected fiat currency. */\n fiatRate: string;\n\n /** Conversion rate for the native currency to USD. */\n usdRate: string;\n};\n\n/** Request for a quote to retrieve a required token. */\nexport type QuoteRequest = {\n /**\n * Whether the target transaction is executed atomically with the Relay\n * quote. See {@link TransactionConfig.atomic}.\n */\n atomic?: boolean;\n\n /** Address of the user's account. */\n from: Hex;\n\n /** Whether the transaction is a maximum amount transaction. */\n isMaxAmount?: boolean;\n\n /** Whether this is a post-quote flow. */\n isPostQuote?: boolean;\n\n /** Whether the source of funds is HyperLiquid (HyperCore). */\n isHyperliquidSource?: boolean;\n\n /** Whether the source of funds is a Polymarket deposit wallet. */\n isPolymarketDepositWallet?: boolean;\n\n /** Whether this quote is the direct mUSD-to-Money-Account fiat flow. */\n isDirectMusdMoneyAccount?: boolean;\n\n /** Overrides the payment source for the transaction. */\n paymentOverride?: PaymentOverride;\n\n /** Optional recipient address for Relay requests. When set, overrides the default `from` address. */\n recipient?: Hex;\n\n /**\n * Optional address to receive refunds if the quote provider transaction fails.\n * When set, overrides the default refund recipient (EOA) in the quote\n * request.\n */\n refundTo?: Hex;\n\n /** Whether to skip processTransactions in relay-quotes. Defaults to `isPostQuote`. */\n skipProcessTransactions?: boolean;\n\n /** Balance of the source token in atomic format without factoring token decimals. */\n sourceBalanceRaw: string;\n\n /** Chain ID of the source token. */\n sourceChainId: Hex;\n\n /** Address of the source token. */\n sourceTokenAddress: Hex;\n\n /** Amount of the required token in atomic format without factoring token decimals. */\n sourceTokenAmount: string;\n\n /** Minimum amount required of the target token in atomic format without factoring token decimals. */\n targetAmountMinimum: string;\n\n /** Chain ID of the target token. */\n targetChainId: Hex;\n\n /** Address of the target token. */\n targetTokenAddress: Hex;\n\n /**\n * One-time HyperLiquid activation fee (USD) reserved from the source amount\n * for an unactivated HyperCore account. The source amount sent to the\n * provider is reduced by this amount so HyperLiquid retains enough balance\n * for the fee, and the amount is surfaced as part of the provider fee.\n */\n hyperliquidActivationFeeUsd?: string;\n};\n\n/** Fees associated with a transaction pay quote. */\nexport type TransactionPayFees = {\n /** Whether a gas fee token is used to pay source network fees. */\n isSourceGasFeeToken?: boolean;\n\n /** Whether a gas fee token is used to pay target network fees. */\n isTargetGasFeeToken?: boolean;\n\n /** Fee charged by MetaMask. */\n metaMask: FiatValue;\n\n /** Fee charged by the quote provider. */\n provider: FiatValue;\n\n /** Fee charged by fiat on-ramp provider (breakdown of the provider total). */\n providerFiat?: FiatValue;\n\n /** Network fee for transactions on the source network. */\n sourceNetwork: {\n estimate: Amount;\n max: Amount;\n };\n\n /** Network fee for transactions on the target network. */\n targetNetwork: FiatValue;\n};\n\n/** Quote returned to retrieve a required token using the payment token. */\nexport type TransactionPayQuote<OriginalQuote> = {\n /** Additional amount provided by the quote beyond the minimum requested. */\n dust: FiatValue;\n\n /** Duration estimated for the transaction to complete in seconds. */\n estimatedDuration: number;\n\n /** Fees associated with the transaction pay quote. */\n fees: TransactionPayFees;\n\n /** Whether fees are subtracted from the destination amount, meaning the input amount is static. */\n isInputBased?: boolean;\n\n /** Whether the reported fees are already included in the source amount. */\n areFeesIncludedInSourceAmount?: boolean;\n\n /** Raw quote data returned by the provider. */\n original: OriginalQuote;\n\n /** Associated quote request. */\n request: QuoteRequest;\n\n /**\n * Whether the target calls could not be embedded in the quote and must be\n * submitted separately, on the target chain, once the quote settles.\n *\n * Set by the strategy at quote time, since only it knows whether the provider\n * accepted the calls. {@link TransactionConfig.atomic} is a hint rather than\n * a guarantee: a quote requested atomically still falls back to a second leg\n * when the provider cannot execute the calls itself.\n */\n requiresSecondLeg?: boolean;\n\n /** Amount of source token required. */\n sourceAmount: Amount;\n\n /** Name of the strategy used to retrieve the quote. */\n strategy: TransactionPayStrategy;\n\n /** Amount of target token provided. */\n targetAmount: FiatValue;\n};\n\n/** Request to get quotes for a transaction. */\nexport type PayStrategyGetQuotesRequest = {\n /** Whether the account supports EIP-7702 authorization signing. */\n accountSupports7702: boolean;\n\n /** Selected fiat payment method ID, if applicable. */\n fiatPaymentMethod?: string;\n\n /**\n * Resolved wallet address for the transaction.\n * This is `accountOverride ?? txParams.from`, pre-computed by the quote\n * orchestrator so that individual strategies do not need to re-derive it.\n */\n from: Hex;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quote requests for required tokens. */\n requests: QuoteRequest[];\n\n /**\n * Signal that aborts when a newer quote request supersedes this one.\n * Strategies that perform their own network IO should forward this to\n * their fetch calls so cancelled requests release network resources.\n */\n signal?: AbortSignal;\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to submit quotes for a transaction. */\nexport type PayStrategyExecuteRequest<OriginalRequest> = {\n /** Whether the account supports EIP-7702 authorization signing. */\n accountSupports7702: boolean;\n\n /** Callback to determine if the transaction is a smart transaction. */\n isSmartTransaction: (chainId: Hex) => boolean;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes to be submitted. */\n quotes: TransactionPayQuote<OriginalRequest>[];\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to get batch transactions for quotes. */\nexport type PayStrategyGetBatchRequest<OriginalQuote> = {\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes for required tokens. */\n quotes: TransactionPayQuote<OriginalQuote>[];\n\n /** Signal that aborts when a newer quote request supersedes this one. */\n signal?: AbortSignal;\n};\n\n/** Request to check whether retrieved quotes can be executed by a strategy. */\nexport type PayStrategyCheckQuoteSupportRequest<OriginalQuote> = {\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** Quotes returned by the strategy. */\n quotes: TransactionPayQuote<OriginalQuote>[];\n\n /** Signal that aborts when a newer quote request supersedes this one. */\n signal?: AbortSignal;\n\n /** Metadata of the original target transaction. */\n transaction: TransactionMeta;\n};\n\n/** Request to get refresh interval for a specific strategy. */\nexport type PayStrategyGetRefreshIntervalRequest = {\n /** Chain ID of the source or payment token. */\n chainId: Hex;\n\n /** Controller messenger. */\n messenger: TransactionPayControllerMessenger;\n\n /** ID of the transaction whose refresh interval is being resolved. */\n transactionId: string;\n};\n\n/** Strategy used to obtain required tokens for a transaction. */\nexport type PayStrategy<OriginalQuote> = {\n /**\n * Check if the strategy supports the given request.\n * Defaults to true if not implemented.\n */\n supports?: (\n request: PayStrategyGetQuotesRequest,\n ) => boolean | Promise<boolean>;\n\n /** Retrieve quotes for required tokens. */\n getQuotes: (\n request: PayStrategyGetQuotesRequest,\n ) => Promise<TransactionPayQuote<OriginalQuote>[]>;\n\n /**\n * Check if the returned quotes are supported after provider quote\n * construction and gas planning.\n *\n * Use this for limitations that are only knowable once quote metadata is\n * available, such as whether execution will require an EIP-7702\n * authorization list.\n */\n checkQuoteSupport?: (\n request: PayStrategyCheckQuoteSupportRequest<OriginalQuote>,\n ) => boolean | Promise<boolean>;\n\n /** Retrieve batch transactions for quotes, if supported by the strategy. */\n getBatchTransactions?: (\n request: PayStrategyGetBatchRequest<OriginalQuote>,\n ) => Promise<BatchTransaction[]>;\n\n /**\n * Retrieve refresh interval for the strategy, if applicable.\n * Defaults to 30 seconds.\n */\n getRefreshInterval?: (\n request: PayStrategyGetRefreshIntervalRequest,\n ) => Promise<number | undefined>;\n\n /** Execute or submit the quotes to obtain required tokens. */\n execute: (request: PayStrategyExecuteRequest<OriginalQuote>) => Promise<{\n transactionHash?: Hex;\n }>;\n};\n\n/** Single fiat value in alternate currencies. */\nexport type FiatValue = {\n /** Value in the selected fiat currency. */\n fiat: string;\n\n /** Value in USD. */\n usd: string;\n};\n\n/** Calculated totals for a target transaction and all quotes. */\nexport type TransactionPayTotals = {\n /** Total estimated duration for the target transaction and all quotes. */\n estimatedDuration: number;\n\n /** Total fees for the target transaction and all quotes. */\n fees: TransactionPayFees;\n\n /** Whether the selected quotes subtract fees from the destination amount, meaning the input amount is static. */\n isInputBased?: boolean;\n\n /** Total amount of source token required. */\n sourceAmount: Amount;\n\n /** Total amount of target token provided. */\n targetAmount: FiatValue;\n\n /** Overall total cost for the target transaction and all quotes. */\n total: FiatValue;\n};\n\n/** Request to update the payment token for a transaction. */\nexport type UpdatePaymentTokenRequest = {\n /** ID of the transaction to update. */\n transactionId: string;\n\n /** Address of the new payment token. */\n tokenAddress: Hex;\n\n /** Chain ID of the new payment token. */\n chainId: Hex;\n};\n\n/** Request to update fiat payment state for a transaction. */\nexport type UpdateFiatPaymentRequest = {\n /** ID of the transaction to update. */\n transactionId: string;\n\n /** Callback to mutate fiat payment state. */\n callback: TransactionFiatPaymentCallback;\n};\n\n/** Callback to convert a transaction to a redeem delegation. */\nexport type GetDelegationTransactionCallback = ({\n transaction,\n isSubsidized,\n}: {\n transaction: TransactionMeta;\n isSubsidized?: boolean;\n}) => Promise<{\n authorizationList?: AuthorizationList;\n data: Hex;\n to: Hex;\n value: Hex;\n}>;\n\n/** Client-supplied callbacks for the Polymarket relayer protocol. */\nexport type PolymarketCallbacks = {\n /** Derive the deposit-wallet address (CREATE2) for the given EOA. */\n getDepositWalletAddress: (params: { eoa: Hex }) => Promise<Hex>;\n\n /** Sign and broadcast a deposit-wallet batch, returning the source hash. */\n submitDepositWalletBatch: (params: {\n eoa: Hex;\n depositWallet: Hex;\n calls: { target: Hex; data: Hex; value: string }[];\n }) => Promise<{ sourceHash: Hex }>;\n};\n\n/** Single amount in alternate formats. */\nexport type Amount = FiatValue & {\n /** Amount in human-readable format factoring token decimals. */\n human: string;\n\n /** Amount in atomic format without factoring token decimals. */\n raw: string;\n};\n"]}
|
|
@@ -67,6 +67,9 @@ export type AtomicMaxEnabledConfig = {
|
|
|
67
67
|
default?: boolean;
|
|
68
68
|
transactionTypes?: Partial<Record<TransactionType, boolean>>;
|
|
69
69
|
};
|
|
70
|
+
export type MaxBalanceRefreshIntervalConfig = {
|
|
71
|
+
[key in TransactionType]?: number;
|
|
72
|
+
};
|
|
70
73
|
export type PayStrategiesConfig = {
|
|
71
74
|
across: AcrossConfig;
|
|
72
75
|
server: {
|
|
@@ -119,6 +122,7 @@ export declare function getFeatureFlags(messenger: TransactionPayControllerMesse
|
|
|
119
122
|
* @returns Stablecoins keyed by chain ID.
|
|
120
123
|
*/
|
|
121
124
|
export declare function getStablecoins(messenger: TransactionPayControllerMessenger): Record<Hex, Hex[]>;
|
|
125
|
+
export declare function getMaxBalanceRefreshInterval(messenger: TransactionPayControllerMessenger, transaction?: TransactionMeta): number | undefined;
|
|
122
126
|
/**
|
|
123
127
|
* Get Pay Strategies configuration.
|
|
124
128
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -255,6 +255,17 @@ export function getStablecoins(messenger) {
|
|
|
255
255
|
}
|
|
256
256
|
return STABLECOINS;
|
|
257
257
|
}
|
|
258
|
+
export function getMaxBalanceRefreshInterval(messenger, transaction) {
|
|
259
|
+
const state = messenger.call('RemoteFeatureFlagController:getState');
|
|
260
|
+
const featureFlags = state.remoteFeatureFlags?.confirmations_pay_extended ?? {};
|
|
261
|
+
const config = featureFlags.maxBalanceRefreshInterval ?? {};
|
|
262
|
+
for (const [transactionType, interval] of Object.entries(config)) {
|
|
263
|
+
if (hasTransactionType(transaction, [transactionType])) {
|
|
264
|
+
return interval;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
258
269
|
/**
|
|
259
270
|
* Get Pay Strategies configuration.
|
|
260
271
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasTransactionType,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { uniq } from 'lodash-es';\n\nimport {\n isTransactionPayStrategy,\n STABLECOINS,\n TransactionPayStrategy,\n} from '../constants.js';\nimport { projectLogger } from '../logger.js';\nimport type { TransactionPayFiatAsset } from '../strategy/fiat/constants.js';\nimport {\n ETH_MAINNET_FIAT_ASSET,\n FIAT_ASSET_ID_BY_TX_TYPE,\n FIAT_ENABLED_TYPES,\n} from '../strategy/fiat/constants.js';\nimport {\n RELAY_EXECUTE_URL,\n RELAY_POLLING_INTERVAL,\n RELAY_QUOTE_URL,\n} from '../strategy/relay/constants.js';\nimport {\n SERVER_POLLING_INTERVAL,\n SERVER_URL_BASE,\n} from '../strategy/server/constants.js';\nimport { DEFAULT_SERVER_ENABLED_TRANSACTION_TYPES } from '../strategy/server/server-support.js';\nimport type { TransactionPayControllerMessenger } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'feature-flags');\n\ntype StrategyOrder = TransactionPayStrategy[];\n\nexport const DEFAULT_FEE_RESERVE_MULTIPLIER = 1.2;\nexport const DEFAULT_MAX_RATE_DRIFT_PERCENT = 10;\nexport const DEFAULT_ORDER_POLL_INTERVAL_MS = 1000;\nexport const DEFAULT_ORDER_POLL_TIMEOUT_MS = 10 * 60 * 1000;\n\nexport const DEFAULT_GAS_BUFFER = 1.0;\nexport const DEFAULT_FALLBACK_GAS_ESTIMATE = 900000;\nexport const DEFAULT_FALLBACK_GAS_MAX = 1500000;\nexport const DEFAULT_RELAY_EXECUTE_URL = RELAY_EXECUTE_URL;\nexport const DEFAULT_RELAY_QUOTE_URL = RELAY_QUOTE_URL;\nexport const DEFAULT_RELAY_ORIGIN_GAS_OVERHEAD = '300000';\nexport const DEFAULT_SLIPPAGE = 0.005;\nexport const DEFAULT_HYPERLIQUID_ACTIVATION_FEE_USD = 1;\nexport const DEFAULT_ACROSS_API_BASE = 'https://app.across.to/api';\nexport const DEFAULT_SERVER_BASE_URL = SERVER_URL_BASE;\nexport const DEFAULT_STRATEGY_ORDER: StrategyOrder = [\n TransactionPayStrategy.Server,\n TransactionPayStrategy.Relay,\n TransactionPayStrategy.Across,\n];\n\ntype FeatureFlagsRaw = {\n gasBuffer?: {\n default?: number;\n perChainConfig?: Record<\n Hex,\n {\n name?: string;\n buffer?: number;\n }\n >;\n };\n relayDisabledGasStationChains?: Hex[];\n relayExecuteUrl?: string;\n relayFallbackGas?: {\n estimate?: number;\n max?: number;\n };\n relayQuoteUrl?: string;\n slippage?: number;\n slippageTokens?: Record<Hex, Record<Hex, number>>;\n strategyOrder?: string[];\n strategyOverrides?: StrategyOverridesRaw;\n payStrategies?: PayStrategiesConfigRaw;\n};\n\ntype StrategyOverrideRaw = {\n default?: unknown;\n chains?: Record<string, unknown>;\n tokens?: Record<string, Record<string, unknown>>;\n};\n\ntype StrategyOverridesRaw = {\n default?: StrategyOverrideRaw;\n transactionTypes?: Record<string, StrategyOverrideRaw>;\n};\n\ntype StrategyOverride = {\n chains: Record<Hex, TransactionPayStrategy[]>;\n default?: TransactionPayStrategy[];\n tokens: Record<Hex, Record<Hex, TransactionPayStrategy[]>>;\n};\n\ntype StrategyOverrides = {\n default?: StrategyOverride;\n transactionTypes: Record<string, StrategyOverride>;\n};\n\ntype FiatFlags = {\n assetPerTransactionType?: Partial<\n Record<TransactionType, TransactionPayFiatAsset>\n >;\n directMoneyMusdEnabled?: boolean;\n enabledTransactionTypes: TransactionType[];\n feeReserveMultiplier?: number;\n maxRateDriftPercent?: number;\n orderPollIntervalMs?: number;\n orderPollTimeoutMs?: number;\n vaultDisabled?: boolean;\n};\n\ntype HyperliquidActivationFeeFlag = {\n enabled?: boolean;\n amountUsd?: number;\n};\n\ntype PostQuoteConfig = {\n hyperliquidActivationFee?: HyperliquidActivationFeeFlag;\n};\n\ntype PostQuoteFeatureFlags = {\n default?: PostQuoteConfig;\n overrides?: Record<string, PostQuoteConfig>;\n};\n\nexport type HyperliquidActivationFeeConfig = {\n enabled: boolean;\n amountUsd: number;\n};\n\ntype StrategyRoutingConfig = {\n payStrategies: {\n across: {\n enabled: boolean;\n };\n server: {\n enabled: boolean;\n };\n relay: {\n enabled: boolean;\n };\n };\n strategyOverrides: StrategyOverrides;\n strategyOrder: TransactionPayStrategy[];\n};\n\nexport type FeatureFlags = {\n relayDisabledGasStationChains: Hex[];\n relayExecuteUrl: string;\n relayFallbackGas: {\n estimate: number;\n max: number;\n };\n relayQuoteUrl: string;\n slippage: number;\n};\n\nexport type AcrossConfigRaw = {\n apiBase?: string;\n enabled?: boolean;\n fallbackGas?: {\n estimate?: number;\n max?: number;\n };\n};\n\nexport type AcrossConfig = {\n apiBase: string;\n enabled: boolean;\n fallbackGas: {\n estimate: number;\n max: number;\n };\n};\n\nexport type PayStrategiesConfigRaw = {\n across?: AcrossConfigRaw;\n relay?: {\n enabled?: boolean;\n originGasOverhead?: string;\n pollingInterval?: number;\n pollingTimeout?: number;\n };\n};\n\nexport type RelayValidationEnabledConfig = {\n default?: boolean;\n transactionTypes?: Partial<Record<TransactionType, boolean>>;\n};\n\nexport type AtomicMaxEnabledConfig = {\n default?: boolean;\n transactionTypes?: Partial<Record<TransactionType, boolean>>;\n};\n\ntype FeatureFlagsExtendedRaw = {\n excludeChainIdsFromInfura?: Hex[];\n payStrategies?: {\n relay?: {\n atomicMaxEnabled?: AtomicMaxEnabledConfig;\n gaslessEnabled?: boolean;\n validationEnabled?: RelayValidationEnabledConfig;\n };\n server?: {\n enabled?: boolean;\n enabledTransactionTypes?: string[];\n baseUrl?: string;\n pollingInterval?: number;\n pollingTimeout?: number;\n };\n };\n};\n\ntype EIP7702FeatureFlag = {\n contracts?: Record<Hex, { address: Hex; signature: Hex }[]>;\n supportedChains?: Hex[];\n};\n\nexport type PayStrategiesConfig = {\n across: AcrossConfig;\n server: {\n enabled: boolean;\n enabledTransactionTypes: TransactionType[];\n baseUrl: string;\n pollingInterval: number;\n pollingTimeout?: number;\n };\n relay: {\n enabled: boolean;\n };\n};\n\nfunction normalizeHex(value: string | undefined): Hex | undefined {\n return value?.toLowerCase() as Hex | undefined;\n}\n\n/**\n * Convert raw remote-flag transaction type strings into known transaction\n * types, discarding any value the client does not recognise.\n *\n * @param values - Raw transaction type strings from the remote feature flag.\n * @returns Recognised transaction types, or the default allowlist when the\n * flag is absent.\n */\nfunction normalizeTransactionTypes(\n values: string[] | undefined,\n): TransactionType[] {\n if (!Array.isArray(values)) {\n return DEFAULT_SERVER_ENABLED_TRANSACTION_TYPES;\n }\n\n const knownTypes = Object.values(TransactionType) as string[];\n\n return uniq(values.filter((value) => knownTypes.includes(value))).map(\n (value) => value as TransactionType,\n );\n}\n\nfunction normalizeStrategy(\n strategy: unknown,\n): TransactionPayStrategy | undefined {\n if (typeof strategy !== 'string') {\n return undefined;\n }\n\n const normalizedStrategy = strategy.toLowerCase() as TransactionPayStrategy;\n\n return isTransactionPayStrategy(normalizedStrategy)\n ? normalizedStrategy\n : undefined;\n}\n\nfunction normalizeStrategyList(strategies: unknown): TransactionPayStrategy[] {\n if (!Array.isArray(strategies)) {\n return [];\n }\n\n return uniq(\n strategies\n .map((strategy) => normalizeStrategy(strategy))\n .filter(\n (strategy): strategy is TransactionPayStrategy =>\n strategy !== undefined,\n ),\n );\n}\n\nfunction normalizeStrategyOverride(\n override: StrategyOverrideRaw | undefined,\n): StrategyOverride {\n const chains = Object.entries(override?.chains ?? {}).reduce<\n Record<Hex, TransactionPayStrategy[]>\n >((result, [chainId, strategies]) => {\n const normalizedStrategies = normalizeStrategyList(strategies);\n\n if (normalizedStrategies.length) {\n result[normalizeHex(chainId) as Hex] = normalizedStrategies;\n }\n\n return result;\n }, {});\n\n const tokens = Object.entries(override?.tokens ?? {}).reduce<\n Record<Hex, Record<Hex, TransactionPayStrategy[]>>\n >((result, [chainId, tokenOverrides]) => {\n const normalizedTokenOverrides = Object.entries(\n tokenOverrides ?? {},\n ).reduce<Record<Hex, TransactionPayStrategy[]>>(\n (tokenResult, [tokenAddress, strategies]) => {\n const normalizedStrategies = normalizeStrategyList(strategies);\n\n if (normalizedStrategies.length) {\n tokenResult[normalizeHex(tokenAddress) as Hex] = normalizedStrategies;\n }\n\n return tokenResult;\n },\n {},\n );\n\n if (Object.keys(normalizedTokenOverrides).length) {\n result[normalizeHex(chainId) as Hex] = normalizedTokenOverrides;\n }\n\n return result;\n }, {});\n\n const defaultStrategies = normalizeStrategyList(override?.default);\n\n return {\n chains,\n default: defaultStrategies.length ? defaultStrategies : undefined,\n tokens,\n };\n}\n\nfunction normalizeStrategyRoutingConfig(\n featureFlags: FeatureFlagsRaw,\n extendedFeatureFlags: FeatureFlagsExtendedRaw,\n): StrategyRoutingConfig {\n const strategyOrder = normalizeStrategyList(featureFlags.strategyOrder);\n\n return {\n payStrategies: {\n across: {\n enabled: featureFlags.payStrategies?.across?.enabled ?? false,\n },\n server: {\n enabled: extendedFeatureFlags.payStrategies?.server?.enabled ?? false,\n },\n relay: {\n enabled: featureFlags.payStrategies?.relay?.enabled ?? true,\n },\n },\n strategyOverrides: {\n default: featureFlags.strategyOverrides?.default\n ? normalizeStrategyOverride(featureFlags.strategyOverrides.default)\n : undefined,\n transactionTypes: Object.entries(\n featureFlags.strategyOverrides?.transactionTypes ?? {},\n ).reduce<Record<string, StrategyOverride>>((result, [type, override]) => {\n result[type] = normalizeStrategyOverride(override);\n return result;\n }, {}),\n },\n strategyOrder:\n strategyOrder.length > 0 ? strategyOrder : [...DEFAULT_STRATEGY_ORDER],\n };\n}\n\nfunction getStrategyRoutingConfig(\n messenger: TransactionPayControllerMessenger,\n): StrategyRoutingConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags = state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined;\n const extendedFeatureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n return normalizeStrategyRoutingConfig(\n featureFlags ?? {},\n extendedFeatureFlags,\n );\n}\n\nfunction filterEnabledStrategies(\n strategies: readonly TransactionPayStrategy[],\n routingConfig: StrategyRoutingConfig,\n): TransactionPayStrategy[] {\n return strategies.filter((strategy) => {\n if (strategy === TransactionPayStrategy.Across) {\n return routingConfig.payStrategies.across.enabled;\n }\n\n if (strategy === TransactionPayStrategy.Relay) {\n return routingConfig.payStrategies.relay.enabled;\n }\n\n if (strategy === TransactionPayStrategy.Server) {\n return routingConfig.payStrategies.server.enabled;\n }\n\n return true;\n });\n}\n\nfunction getTokenOverrideStrategies(\n override: StrategyOverride | undefined,\n normalizedChainId: Hex | undefined,\n normalizedTokenAddress: Hex | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n if (!override || !normalizedChainId || !normalizedTokenAddress) {\n return undefined;\n }\n\n return override.tokens[normalizedChainId]?.[normalizedTokenAddress];\n}\n\nfunction getChainOverrideStrategies(\n override: StrategyOverride | undefined,\n normalizedChainId: Hex | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n if (!override || !normalizedChainId) {\n return undefined;\n }\n\n return override.chains[normalizedChainId];\n}\n\nfunction getDefaultOverrideStrategies(\n override: StrategyOverride | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n return override?.default;\n}\n\n/**\n * Get ordered list of strategies to try for a route.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Optional chain ID used to match route overrides.\n * @param tokenAddress - Optional token address used to match route overrides.\n * @param transactionType - Optional transaction type used to match route\n * overrides.\n * @param fiatPaymentMethodId - Optional fiat payment method ID used to match route overrides.\n * @returns Ordered strategy list.\n */\nexport function getStrategyOrder(\n messenger: TransactionPayControllerMessenger,\n chainId?: Hex,\n tokenAddress?: Hex,\n transactionType?: string,\n fiatPaymentMethodId?: string,\n): StrategyOrder {\n // If fiat payment method is selected, use Fiat strategy only\n if (fiatPaymentMethodId) {\n return [TransactionPayStrategy.Fiat];\n }\n\n const routingConfig = getStrategyRoutingConfig(messenger);\n const normalizedChainId = normalizeHex(chainId);\n const normalizedTokenAddress = normalizeHex(tokenAddress);\n const transactionTypeOverride = transactionType\n ? routingConfig.strategyOverrides.transactionTypes[transactionType]\n : undefined;\n\n const candidates: (readonly TransactionPayStrategy[] | undefined)[] = [\n getTokenOverrideStrategies(\n transactionTypeOverride,\n normalizedChainId,\n normalizedTokenAddress,\n ),\n getChainOverrideStrategies(transactionTypeOverride, normalizedChainId),\n getTokenOverrideStrategies(\n routingConfig.strategyOverrides.default,\n normalizedChainId,\n normalizedTokenAddress,\n ),\n getChainOverrideStrategies(\n routingConfig.strategyOverrides.default,\n normalizedChainId,\n ),\n getDefaultOverrideStrategies(transactionTypeOverride),\n getDefaultOverrideStrategies(routingConfig.strategyOverrides.default),\n ];\n\n // Overrides are authoritative. Once a route matches a specific override\n // scope, disabled strategies do not inherit candidates from lower-precedence\n // scopes.\n for (const strategies of candidates) {\n if (strategies) {\n return filterEnabledStrategies(strategies, routingConfig);\n }\n }\n\n return filterEnabledStrategies(routingConfig.strategyOrder, routingConfig);\n}\n\n/**\n * Get the preferred strategy for a route.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Optional chain ID used to match route overrides.\n * @param tokenAddress - Optional token address used to match route overrides.\n * @param transactionType - Optional transaction type used to match route\n * overrides.\n * @returns The preferred strategy, if any.\n */\nexport function getStrategy(\n messenger: TransactionPayControllerMessenger,\n chainId?: Hex,\n tokenAddress?: Hex,\n transactionType?: string,\n): TransactionPayStrategy | undefined {\n return getStrategyOrder(messenger, chainId, tokenAddress, transactionType)[0];\n}\n\n/**\n * Get feature flags related to the controller.\n *\n * @param messenger - Controller messenger.\n * @returns Feature flags.\n */\nexport function getFeatureFlags(\n messenger: TransactionPayControllerMessenger,\n): FeatureFlags {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n\n const estimate = new BigNumber(\n featureFlags.relayFallbackGas?.estimate ?? DEFAULT_FALLBACK_GAS_ESTIMATE,\n ).toNumber();\n\n const max = new BigNumber(\n featureFlags.relayFallbackGas?.max ?? DEFAULT_FALLBACK_GAS_MAX,\n ).toNumber();\n\n const relayExecuteUrl =\n featureFlags.relayExecuteUrl ?? DEFAULT_RELAY_EXECUTE_URL;\n\n const relayQuoteUrl = featureFlags.relayQuoteUrl ?? DEFAULT_RELAY_QUOTE_URL;\n\n const relayDisabledGasStationChains =\n featureFlags.relayDisabledGasStationChains ?? [];\n\n const slippage = featureFlags.slippage ?? DEFAULT_SLIPPAGE;\n\n const result: FeatureFlags = {\n relayDisabledGasStationChains,\n relayExecuteUrl,\n relayFallbackGas: {\n estimate,\n max,\n },\n relayQuoteUrl,\n slippage,\n };\n\n log('Feature flags:', { raw: featureFlags, result });\n\n return result;\n}\n\n/**\n * Get the stablecoins map from the `stableTokens` feature flag.\n * Falls back to the hardcoded {@link STABLECOINS} constant when the flag is\n * absent or not a valid object.\n *\n * @param messenger - Controller messenger.\n * @returns Stablecoins keyed by chain ID.\n */\nexport function getStablecoins(\n messenger: TransactionPayControllerMessenger,\n): Record<Hex, Hex[]> {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const flag = state.remoteFeatureFlags?.stableTokens;\n\n if (flag && typeof flag === 'object' && !Array.isArray(flag)) {\n const raw = flag as Record<string, string[]>;\n return Object.entries(raw).reduce<Record<Hex, Hex[]>>(\n (acc, [chainId, addresses]) => {\n if (Array.isArray(addresses)) {\n acc[chainId.toLowerCase() as Hex] = addresses.map(\n (a) => a.toLowerCase() as Hex,\n );\n }\n return acc;\n },\n {},\n );\n }\n\n return STABLECOINS;\n}\n\n/**\n * Get Pay Strategies configuration.\n *\n * @param messenger - Controller messenger.\n * @returns Pay Strategies configuration.\n */\nexport function getPayStrategiesConfig(\n messenger: TransactionPayControllerMessenger,\n): PayStrategiesConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n const extendedFeatureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n const payStrategies = featureFlags.payStrategies ?? {};\n const extendedPayStrategies = extendedFeatureFlags.payStrategies ?? {};\n\n const acrossRaw = payStrategies.across ?? {};\n const serverRaw = extendedPayStrategies.server ?? {};\n const relayRaw = payStrategies.relay ?? {};\n\n const across = {\n apiBase: acrossRaw.apiBase ?? DEFAULT_ACROSS_API_BASE,\n enabled: acrossRaw.enabled ?? false,\n fallbackGas: {\n estimate:\n acrossRaw.fallbackGas?.estimate ?? DEFAULT_FALLBACK_GAS_ESTIMATE,\n max: acrossRaw.fallbackGas?.max ?? DEFAULT_FALLBACK_GAS_MAX,\n },\n };\n\n const server = {\n enabled: serverRaw.enabled ?? false,\n enabledTransactionTypes: normalizeTransactionTypes(\n serverRaw.enabledTransactionTypes,\n ),\n baseUrl: serverRaw.baseUrl ?? DEFAULT_SERVER_BASE_URL,\n pollingInterval: serverRaw.pollingInterval ?? SERVER_POLLING_INTERVAL,\n pollingTimeout: serverRaw.pollingTimeout,\n };\n\n const relay = {\n enabled: relayRaw.enabled ?? true,\n };\n\n return {\n across,\n server,\n relay,\n };\n}\n\n/**\n * Whether the Relay /execute gasless flow is enabled.\n *\n * @param messenger - Controller messenger.\n * @returns True if the execute flow is enabled.\n */\nexport function isRelayExecuteEnabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n return featureFlags.payStrategies?.relay?.gaslessEnabled ?? false;\n}\n\n/**\n * Whether Relay quote validation is enabled for a given transaction.\n *\n * Acts as an emergency kill switch: when disabled (default), Relay quotes are\n * surfaced without being simulated/validated.\n *\n * Configured via the `payStrategies.relay.validationEnabled` flag, an object\n * `{ default?: boolean; transactionTypes?: { [type]?: boolean } }`:\n * `default` is the base toggle applied to all transactions (omitted = `false`);\n * a matching `transactionTypes[type]` entry overrides `default` when the\n * transaction, or any of its nested transactions, has that type.\n *\n * @param messenger - Controller messenger.\n * @param transaction - Transaction being validated. Its top-level and nested\n * types are matched against the `transactionTypes` overrides.\n * @returns True if Relay quote validation is enabled.\n */\nexport function isRelayValidationEnabled(\n messenger: TransactionPayControllerMessenger,\n transaction?: TransactionMeta,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const validationEnabled =\n featureFlags.payStrategies?.relay?.validationEnabled;\n\n const transactionTypes = validationEnabled?.transactionTypes ?? {};\n\n // A per-type override wins over the global `default` toggle. An override\n // matches when the transaction, or any nested transaction, has that type.\n for (const [type, enabled] of Object.entries(transactionTypes)) {\n if (hasTransactionType(transaction, [type as TransactionType])) {\n return enabled;\n }\n }\n\n // `?? false`: `default` is optional, so an omitted config disables validation.\n return validationEnabled?.default ?? false;\n}\n\n/**\n * Whether atomic max quotes are enabled for a given transaction.\n *\n * Gates subsidized max deposits using atomic exact-output quotes.\n *\n * Configured via the `payStrategies.relay.atomicMaxEnabled` flag, an\n * object `{ default?: boolean; transactionTypes?: { [type]?: boolean } }`:\n * a matching `transactionTypes[type]` entry overrides `default` when the\n * transaction, or any nested transaction, has that type.\n *\n * When the flag or its default is absent, atomic max is disabled unless a\n * matching transaction type override enables it.\n *\n * @param messenger - Controller messenger.\n * @param transaction - Transaction being quoted. Its top-level and nested\n * types are matched against the `transactionTypes` overrides.\n * @returns True if atomic max quotes are enabled.\n */\nexport function isAtomicMaxEnabled(\n messenger: TransactionPayControllerMessenger,\n transaction?: TransactionMeta,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const atomicMaxEnabled = featureFlags.payStrategies?.relay?.atomicMaxEnabled;\n\n const transactionTypes = atomicMaxEnabled?.transactionTypes ?? {};\n\n // A per-type override wins over the global `default` toggle. An override\n // matches when the transaction, or any nested transaction, has that type.\n for (const [type, enabled] of Object.entries(transactionTypes)) {\n if (hasTransactionType(transaction, [type as TransactionType])) {\n return enabled;\n }\n }\n\n return atomicMaxEnabled?.default ?? false;\n}\n\n/**\n * Whether a chain is excluded from preferring Infura for balance queries.\n *\n * When a chain ID appears in the `confirmations_pay_extended.excludeChainIdsFromInfura`\n * feature flag array, the Infura RPC endpoint should not be forced for that chain.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to check.\n * @returns True if the chain should skip the Infura preference.\n */\nexport function isChainExcludedFromInfura(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const excludedChains = featureFlags.excludeChainIdsFromInfura ?? [];\n\n return excludedChains.some(\n (excluded) => excluded.toLowerCase() === chainId.toLowerCase(),\n );\n}\n\n/**\n * Get the origin gas overhead to include in Relay quote requests\n * for EIP-7702 chains.\n *\n * @param messenger - Controller messenger.\n * @returns Origin gas overhead as a decimal string.\n */\nexport function getRelayOriginGasOverhead(\n messenger: TransactionPayControllerMessenger,\n): string {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return (\n featureFlags.payStrategies?.relay?.originGasOverhead ??\n DEFAULT_RELAY_ORIGIN_GAS_OVERHEAD\n );\n}\n\n/**\n * Get the relay status polling interval in milliseconds.\n * Falls back to the constant default when not configured.\n *\n * @param messenger - Controller messenger.\n * @returns Polling interval in milliseconds.\n */\nexport function getRelayPollingInterval(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return (\n featureFlags.payStrategies?.relay?.pollingInterval ?? RELAY_POLLING_INTERVAL\n );\n}\n\n/**\n * Get the relay status polling timeout in milliseconds.\n * Returns 0 or undefined to indicate no timeout.\n *\n * @param messenger - Controller messenger.\n * @returns Polling timeout in milliseconds, or undefined when not configured.\n */\nexport function getRelayPollingTimeout(\n messenger: TransactionPayControllerMessenger,\n): number | undefined {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return featureFlags.payStrategies?.relay?.pollingTimeout;\n}\n\n/**\n * Get the server strategy status polling interval in milliseconds.\n *\n * @param messenger - Controller messenger.\n * @returns Polling interval in milliseconds.\n */\nexport function getServerPollingInterval(\n messenger: TransactionPayControllerMessenger,\n): number {\n return getPayStrategiesConfig(messenger).server.pollingInterval;\n}\n\n/**\n * Get the server strategy status polling timeout in milliseconds.\n *\n * @param messenger - Controller messenger.\n * @returns Polling timeout in milliseconds, or undefined when not configured.\n */\nexport function getServerPollingTimeout(\n messenger: TransactionPayControllerMessenger,\n): number | undefined {\n return getPayStrategiesConfig(messenger).server.pollingTimeout;\n}\n\n/**\n * Get fallback gas limits for quote/submit flows.\n *\n * @param messenger - Controller messenger.\n * @returns Fallback gas limits.\n */\nexport function getFallbackGas(\n messenger: TransactionPayControllerMessenger,\n): FeatureFlags['relayFallbackGas'] {\n return getFeatureFlags(messenger).relayFallbackGas;\n}\n\n/**\n * Get the gas buffer value for a specific chain ID.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to get gas buffer for.\n * @returns Gas buffer value.\n */\nexport function getGasBuffer(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n\n return (\n featureFlags.gasBuffer?.perChainConfig?.[chainId]?.buffer ??\n featureFlags.gasBuffer?.default ??\n DEFAULT_GAS_BUFFER\n );\n}\n\n/**\n * Get the slippage value for a specific chain ID and token address.\n * Falls back to the general slippage feature flag, then the static default.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to get slippage for.\n * @param tokenAddress - Token address to get slippage for.\n * @returns Slippage value as a decimal (e.g., 0.005 for 0.5%).\n */\nexport function getSlippage(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n tokenAddress: Hex,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n const { slippageTokens } = featureFlags;\n\n const tokenMap = getCaseInsensitive(slippageTokens, chainId);\n const tokenSlippage = getCaseInsensitive(tokenMap, tokenAddress);\n\n if (tokenSlippage !== undefined) {\n log('Using token-specific slippage', {\n chainId,\n tokenAddress,\n slippage: tokenSlippage,\n });\n return tokenSlippage;\n }\n\n const slippage = featureFlags.slippage ?? DEFAULT_SLIPPAGE;\n log('Using default slippage', { chainId, tokenAddress, slippage });\n return slippage;\n}\n\n/**\n * Get a value from a record using a case-insensitive key lookup.\n *\n * @param record - The record to search.\n * @param key - The key to look up (case-insensitive).\n * @returns The value if found, undefined otherwise.\n */\nfunction getCaseInsensitive<Value>(\n record: Record<string, Value> | undefined,\n key: string,\n): Value | undefined {\n if (!record) {\n return undefined;\n }\n\n const normalizedKey = key.toLowerCase();\n const entry = Object.entries(record).find(\n ([k]) => k.toLowerCase() === normalizedKey,\n );\n\n return entry?.[1];\n}\n\n/**\n * Get the fiat asset for a specific transaction type.\n *\n * Resolution order:\n * 1. Feature flag override (`confirmations_pay_fiat.assetPerTransactionType`)\n * 2. Hardcoded constant (`FIAT_ASSET_ID_BY_TX_TYPE`)\n * 3. ETH mainnet fallback\n *\n * @param messenger - Controller messenger.\n * @param transactionType - Transaction type to look up.\n * @returns The fiat asset for the given transaction type.\n */\nexport function getFiatAssetPerTransactionType(\n messenger: TransactionPayControllerMessenger,\n transactionType?: TransactionType,\n): TransactionPayFiatAsset {\n if (!transactionType) {\n return ETH_MAINNET_FIAT_ASSET;\n }\n\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n return (\n fiatFlags?.assetPerTransactionType?.[transactionType] ??\n FIAT_ASSET_ID_BY_TX_TYPE[transactionType] ??\n ETH_MAINNET_FIAT_ASSET\n );\n}\n\n/**\n * Get the enabled fiat transaction types.\n *\n * @param messenger - Controller messenger.\n * @returns The enabled fiat transaction types.\n */\nexport function getFiatEnabledTypes(\n messenger: TransactionPayControllerMessenger,\n): TransactionType[] {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n return fiatFlags?.enabledTransactionTypes ?? FIAT_ENABLED_TYPES;\n}\n\n/**\n * Returns the fee reserve multiplier for fiat three-phase submit.\n *\n * Controls how much of the original relay fee is reserved from the discovery\n * quote source amount to prevent EXACT_OUTPUT cost overruns.\n *\n * @param messenger - Controller messenger.\n * @returns The fee reserve multiplier.\n */\nexport function getFiatFeeReserveMultiplier(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const multiplier = fiatFlags?.feeReserveMultiplier;\n\n return typeof multiplier === 'number' && multiplier > 0\n ? multiplier\n : DEFAULT_FEE_RESERVE_MULTIPLIER;\n}\n\n/**\n * Returns the maximum allowed relay rate drift percentage for fiat submit.\n *\n * Controls how much the relay exchange rate can drift between the original\n * quoting phase and the post-settlement discovery quote before failing.\n * Defaults to 10%.\n *\n * @param messenger - Controller messenger.\n * @returns The maximum rate drift percentage.\n */\nexport function getFiatMaxRateDriftPercent(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const maxDrift = fiatFlags?.maxRateDriftPercent;\n\n return typeof maxDrift === 'number' && maxDrift > 0\n ? maxDrift\n : DEFAULT_MAX_RATE_DRIFT_PERCENT;\n}\n\nexport function getDirectMoneyMusdEnabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n return fiatFlags?.directMoneyMusdEnabled === true;\n}\n\nexport function getFiatVaultDisabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n return fiatFlags?.vaultDisabled === true;\n}\n\n/**\n * Returns the fiat order poll interval in milliseconds.\n *\n * Controls how frequently the fiat order status is polled during\n * the on-ramp completion wait loop. Defaults to 1 000 ms.\n *\n * @param messenger - Controller messenger.\n * @returns The poll interval in milliseconds.\n */\nexport function getFiatOrderPollIntervalMs(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const interval = fiatFlags?.orderPollIntervalMs;\n\n return typeof interval === 'number' && interval > 0\n ? interval\n : DEFAULT_ORDER_POLL_INTERVAL_MS;\n}\n\n/**\n * Returns the fiat order poll timeout in milliseconds.\n *\n * Controls how long the fiat order polling loop waits for a terminal\n * status before timing out. Defaults to 600 000 ms (10 minutes).\n *\n * @param messenger - Controller messenger.\n * @returns The poll timeout in milliseconds.\n */\nexport function getFiatOrderPollTimeoutMs(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const timeout = fiatFlags?.orderPollTimeoutMs;\n\n return typeof timeout === 'number' && timeout > 0\n ? timeout\n : DEFAULT_ORDER_POLL_TIMEOUT_MS;\n}\n\n/**\n * Get the HyperLiquid activation-fee configuration from the\n * `confirmations_pay_post_quote` feature flag for a transaction type.\n *\n * Resolves the transaction type's\n * `overrides.<transactionType>.hyperliquidActivationFee`, falling back to\n * `default.hyperliquidActivationFee`.\n *\n * When enabled, an unactivated HyperCore account withdrawing via Pay has the\n * one-time activation fee reserved from the amount sent to HyperLiquid (so the\n * `sendAsset` step retains enough balance) and surfaced as part of the\n * provider fee. Defaults to disabled with a $1 fee.\n *\n * @param messenger - Controller messenger.\n * @param transactionType - Parent transaction type used to resolve overrides.\n * @returns The activation-fee configuration.\n */\nexport function getHyperliquidActivationFeeConfig(\n messenger: TransactionPayControllerMessenger,\n transactionType?: string,\n): HyperliquidActivationFeeConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags = state.remoteFeatureFlags\n ?.confirmations_pay_post_quote as PostQuoteFeatureFlags | undefined;\n\n const override = transactionType\n ? featureFlags?.overrides?.[transactionType]\n : undefined;\n const config =\n override?.hyperliquidActivationFee ??\n featureFlags?.default?.hyperliquidActivationFee;\n\n const { amountUsd } = config ?? {};\n\n return {\n enabled: config?.enabled ?? false,\n amountUsd:\n typeof amountUsd === 'number' && amountUsd > 0\n ? amountUsd\n : DEFAULT_HYPERLIQUID_ACTIVATION_FEE_USD,\n };\n}\n\n/**\n * Checks if a chain supports EIP-7702.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to check.\n * @returns Whether the chain supports EIP-7702.\n */\nexport function isEIP7702Chain(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const eip7702Flags = state.remoteFeatureFlags.confirmations_eip_7702 as\n | EIP7702FeatureFlag\n | undefined;\n\n const supportedChains = eip7702Flags?.supportedChains ?? [];\n\n return supportedChains.some(\n (supported) => supported.toLowerCase() === chainId.toLowerCase(),\n );\n}\n\n/**\n * Get the EIP-7702 upgrade contract address for a chain from the\n * `confirmations_eip_7702.contracts` feature flag, if any.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to resolve the upgrade contract for.\n * @returns The upgrade contract address, or `undefined` when none is set.\n */\nexport function getEIP7702UpgradeContractAddress(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): Hex | undefined {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const eip7702Flags = state.remoteFeatureFlags.confirmations_eip_7702 as\n | EIP7702FeatureFlag\n | undefined;\n\n const contracts = getCaseInsensitive(eip7702Flags?.contracts, chainId);\n\n return contracts?.[0]?.address;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hasTransactionType,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { uniq } from 'lodash-es';\n\nimport {\n isTransactionPayStrategy,\n STABLECOINS,\n TransactionPayStrategy,\n} from '../constants.js';\nimport { projectLogger } from '../logger.js';\nimport type { TransactionPayFiatAsset } from '../strategy/fiat/constants.js';\nimport {\n ETH_MAINNET_FIAT_ASSET,\n FIAT_ASSET_ID_BY_TX_TYPE,\n FIAT_ENABLED_TYPES,\n} from '../strategy/fiat/constants.js';\nimport {\n RELAY_EXECUTE_URL,\n RELAY_POLLING_INTERVAL,\n RELAY_QUOTE_URL,\n} from '../strategy/relay/constants.js';\nimport {\n SERVER_POLLING_INTERVAL,\n SERVER_URL_BASE,\n} from '../strategy/server/constants.js';\nimport { DEFAULT_SERVER_ENABLED_TRANSACTION_TYPES } from '../strategy/server/server-support.js';\nimport type { TransactionPayControllerMessenger } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'feature-flags');\n\ntype StrategyOrder = TransactionPayStrategy[];\n\nexport const DEFAULT_FEE_RESERVE_MULTIPLIER = 1.2;\nexport const DEFAULT_MAX_RATE_DRIFT_PERCENT = 10;\nexport const DEFAULT_ORDER_POLL_INTERVAL_MS = 1000;\nexport const DEFAULT_ORDER_POLL_TIMEOUT_MS = 10 * 60 * 1000;\n\nexport const DEFAULT_GAS_BUFFER = 1.0;\nexport const DEFAULT_FALLBACK_GAS_ESTIMATE = 900000;\nexport const DEFAULT_FALLBACK_GAS_MAX = 1500000;\nexport const DEFAULT_RELAY_EXECUTE_URL = RELAY_EXECUTE_URL;\nexport const DEFAULT_RELAY_QUOTE_URL = RELAY_QUOTE_URL;\nexport const DEFAULT_RELAY_ORIGIN_GAS_OVERHEAD = '300000';\nexport const DEFAULT_SLIPPAGE = 0.005;\nexport const DEFAULT_HYPERLIQUID_ACTIVATION_FEE_USD = 1;\nexport const DEFAULT_ACROSS_API_BASE = 'https://app.across.to/api';\nexport const DEFAULT_SERVER_BASE_URL = SERVER_URL_BASE;\nexport const DEFAULT_STRATEGY_ORDER: StrategyOrder = [\n TransactionPayStrategy.Server,\n TransactionPayStrategy.Relay,\n TransactionPayStrategy.Across,\n];\n\ntype FeatureFlagsRaw = {\n gasBuffer?: {\n default?: number;\n perChainConfig?: Record<\n Hex,\n {\n name?: string;\n buffer?: number;\n }\n >;\n };\n relayDisabledGasStationChains?: Hex[];\n relayExecuteUrl?: string;\n relayFallbackGas?: {\n estimate?: number;\n max?: number;\n };\n relayQuoteUrl?: string;\n slippage?: number;\n slippageTokens?: Record<Hex, Record<Hex, number>>;\n strategyOrder?: string[];\n strategyOverrides?: StrategyOverridesRaw;\n payStrategies?: PayStrategiesConfigRaw;\n};\n\ntype StrategyOverrideRaw = {\n default?: unknown;\n chains?: Record<string, unknown>;\n tokens?: Record<string, Record<string, unknown>>;\n};\n\ntype StrategyOverridesRaw = {\n default?: StrategyOverrideRaw;\n transactionTypes?: Record<string, StrategyOverrideRaw>;\n};\n\ntype StrategyOverride = {\n chains: Record<Hex, TransactionPayStrategy[]>;\n default?: TransactionPayStrategy[];\n tokens: Record<Hex, Record<Hex, TransactionPayStrategy[]>>;\n};\n\ntype StrategyOverrides = {\n default?: StrategyOverride;\n transactionTypes: Record<string, StrategyOverride>;\n};\n\ntype FiatFlags = {\n assetPerTransactionType?: Partial<\n Record<TransactionType, TransactionPayFiatAsset>\n >;\n directMoneyMusdEnabled?: boolean;\n enabledTransactionTypes: TransactionType[];\n feeReserveMultiplier?: number;\n maxRateDriftPercent?: number;\n orderPollIntervalMs?: number;\n orderPollTimeoutMs?: number;\n vaultDisabled?: boolean;\n};\n\ntype HyperliquidActivationFeeFlag = {\n enabled?: boolean;\n amountUsd?: number;\n};\n\ntype PostQuoteConfig = {\n hyperliquidActivationFee?: HyperliquidActivationFeeFlag;\n};\n\ntype PostQuoteFeatureFlags = {\n default?: PostQuoteConfig;\n overrides?: Record<string, PostQuoteConfig>;\n};\n\nexport type HyperliquidActivationFeeConfig = {\n enabled: boolean;\n amountUsd: number;\n};\n\ntype StrategyRoutingConfig = {\n payStrategies: {\n across: {\n enabled: boolean;\n };\n server: {\n enabled: boolean;\n };\n relay: {\n enabled: boolean;\n };\n };\n strategyOverrides: StrategyOverrides;\n strategyOrder: TransactionPayStrategy[];\n};\n\nexport type FeatureFlags = {\n relayDisabledGasStationChains: Hex[];\n relayExecuteUrl: string;\n relayFallbackGas: {\n estimate: number;\n max: number;\n };\n relayQuoteUrl: string;\n slippage: number;\n};\n\nexport type AcrossConfigRaw = {\n apiBase?: string;\n enabled?: boolean;\n fallbackGas?: {\n estimate?: number;\n max?: number;\n };\n};\n\nexport type AcrossConfig = {\n apiBase: string;\n enabled: boolean;\n fallbackGas: {\n estimate: number;\n max: number;\n };\n};\n\nexport type PayStrategiesConfigRaw = {\n across?: AcrossConfigRaw;\n relay?: {\n enabled?: boolean;\n originGasOverhead?: string;\n pollingInterval?: number;\n pollingTimeout?: number;\n };\n};\n\nexport type RelayValidationEnabledConfig = {\n default?: boolean;\n transactionTypes?: Partial<Record<TransactionType, boolean>>;\n};\n\nexport type AtomicMaxEnabledConfig = {\n default?: boolean;\n transactionTypes?: Partial<Record<TransactionType, boolean>>;\n};\n\nexport type MaxBalanceRefreshIntervalConfig = {\n [key in TransactionType]?: number;\n};\n\ntype FeatureFlagsExtendedRaw = {\n excludeChainIdsFromInfura?: Hex[];\n maxBalanceRefreshInterval?: MaxBalanceRefreshIntervalConfig;\n payStrategies?: {\n relay?: {\n atomicMaxEnabled?: AtomicMaxEnabledConfig;\n gaslessEnabled?: boolean;\n validationEnabled?: RelayValidationEnabledConfig;\n };\n server?: {\n enabled?: boolean;\n enabledTransactionTypes?: string[];\n baseUrl?: string;\n pollingInterval?: number;\n pollingTimeout?: number;\n };\n };\n};\n\ntype EIP7702FeatureFlag = {\n contracts?: Record<Hex, { address: Hex; signature: Hex }[]>;\n supportedChains?: Hex[];\n};\n\nexport type PayStrategiesConfig = {\n across: AcrossConfig;\n server: {\n enabled: boolean;\n enabledTransactionTypes: TransactionType[];\n baseUrl: string;\n pollingInterval: number;\n pollingTimeout?: number;\n };\n relay: {\n enabled: boolean;\n };\n};\n\nfunction normalizeHex(value: string | undefined): Hex | undefined {\n return value?.toLowerCase() as Hex | undefined;\n}\n\n/**\n * Convert raw remote-flag transaction type strings into known transaction\n * types, discarding any value the client does not recognise.\n *\n * @param values - Raw transaction type strings from the remote feature flag.\n * @returns Recognised transaction types, or the default allowlist when the\n * flag is absent.\n */\nfunction normalizeTransactionTypes(\n values: string[] | undefined,\n): TransactionType[] {\n if (!Array.isArray(values)) {\n return DEFAULT_SERVER_ENABLED_TRANSACTION_TYPES;\n }\n\n const knownTypes = Object.values(TransactionType) as string[];\n\n return uniq(values.filter((value) => knownTypes.includes(value))).map(\n (value) => value as TransactionType,\n );\n}\n\nfunction normalizeStrategy(\n strategy: unknown,\n): TransactionPayStrategy | undefined {\n if (typeof strategy !== 'string') {\n return undefined;\n }\n\n const normalizedStrategy = strategy.toLowerCase() as TransactionPayStrategy;\n\n return isTransactionPayStrategy(normalizedStrategy)\n ? normalizedStrategy\n : undefined;\n}\n\nfunction normalizeStrategyList(strategies: unknown): TransactionPayStrategy[] {\n if (!Array.isArray(strategies)) {\n return [];\n }\n\n return uniq(\n strategies\n .map((strategy) => normalizeStrategy(strategy))\n .filter(\n (strategy): strategy is TransactionPayStrategy =>\n strategy !== undefined,\n ),\n );\n}\n\nfunction normalizeStrategyOverride(\n override: StrategyOverrideRaw | undefined,\n): StrategyOverride {\n const chains = Object.entries(override?.chains ?? {}).reduce<\n Record<Hex, TransactionPayStrategy[]>\n >((result, [chainId, strategies]) => {\n const normalizedStrategies = normalizeStrategyList(strategies);\n\n if (normalizedStrategies.length) {\n result[normalizeHex(chainId) as Hex] = normalizedStrategies;\n }\n\n return result;\n }, {});\n\n const tokens = Object.entries(override?.tokens ?? {}).reduce<\n Record<Hex, Record<Hex, TransactionPayStrategy[]>>\n >((result, [chainId, tokenOverrides]) => {\n const normalizedTokenOverrides = Object.entries(\n tokenOverrides ?? {},\n ).reduce<Record<Hex, TransactionPayStrategy[]>>(\n (tokenResult, [tokenAddress, strategies]) => {\n const normalizedStrategies = normalizeStrategyList(strategies);\n\n if (normalizedStrategies.length) {\n tokenResult[normalizeHex(tokenAddress) as Hex] = normalizedStrategies;\n }\n\n return tokenResult;\n },\n {},\n );\n\n if (Object.keys(normalizedTokenOverrides).length) {\n result[normalizeHex(chainId) as Hex] = normalizedTokenOverrides;\n }\n\n return result;\n }, {});\n\n const defaultStrategies = normalizeStrategyList(override?.default);\n\n return {\n chains,\n default: defaultStrategies.length ? defaultStrategies : undefined,\n tokens,\n };\n}\n\nfunction normalizeStrategyRoutingConfig(\n featureFlags: FeatureFlagsRaw,\n extendedFeatureFlags: FeatureFlagsExtendedRaw,\n): StrategyRoutingConfig {\n const strategyOrder = normalizeStrategyList(featureFlags.strategyOrder);\n\n return {\n payStrategies: {\n across: {\n enabled: featureFlags.payStrategies?.across?.enabled ?? false,\n },\n server: {\n enabled: extendedFeatureFlags.payStrategies?.server?.enabled ?? false,\n },\n relay: {\n enabled: featureFlags.payStrategies?.relay?.enabled ?? true,\n },\n },\n strategyOverrides: {\n default: featureFlags.strategyOverrides?.default\n ? normalizeStrategyOverride(featureFlags.strategyOverrides.default)\n : undefined,\n transactionTypes: Object.entries(\n featureFlags.strategyOverrides?.transactionTypes ?? {},\n ).reduce<Record<string, StrategyOverride>>((result, [type, override]) => {\n result[type] = normalizeStrategyOverride(override);\n return result;\n }, {}),\n },\n strategyOrder:\n strategyOrder.length > 0 ? strategyOrder : [...DEFAULT_STRATEGY_ORDER],\n };\n}\n\nfunction getStrategyRoutingConfig(\n messenger: TransactionPayControllerMessenger,\n): StrategyRoutingConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags = state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined;\n const extendedFeatureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n return normalizeStrategyRoutingConfig(\n featureFlags ?? {},\n extendedFeatureFlags,\n );\n}\n\nfunction filterEnabledStrategies(\n strategies: readonly TransactionPayStrategy[],\n routingConfig: StrategyRoutingConfig,\n): TransactionPayStrategy[] {\n return strategies.filter((strategy) => {\n if (strategy === TransactionPayStrategy.Across) {\n return routingConfig.payStrategies.across.enabled;\n }\n\n if (strategy === TransactionPayStrategy.Relay) {\n return routingConfig.payStrategies.relay.enabled;\n }\n\n if (strategy === TransactionPayStrategy.Server) {\n return routingConfig.payStrategies.server.enabled;\n }\n\n return true;\n });\n}\n\nfunction getTokenOverrideStrategies(\n override: StrategyOverride | undefined,\n normalizedChainId: Hex | undefined,\n normalizedTokenAddress: Hex | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n if (!override || !normalizedChainId || !normalizedTokenAddress) {\n return undefined;\n }\n\n return override.tokens[normalizedChainId]?.[normalizedTokenAddress];\n}\n\nfunction getChainOverrideStrategies(\n override: StrategyOverride | undefined,\n normalizedChainId: Hex | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n if (!override || !normalizedChainId) {\n return undefined;\n }\n\n return override.chains[normalizedChainId];\n}\n\nfunction getDefaultOverrideStrategies(\n override: StrategyOverride | undefined,\n): readonly TransactionPayStrategy[] | undefined {\n return override?.default;\n}\n\n/**\n * Get ordered list of strategies to try for a route.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Optional chain ID used to match route overrides.\n * @param tokenAddress - Optional token address used to match route overrides.\n * @param transactionType - Optional transaction type used to match route\n * overrides.\n * @param fiatPaymentMethodId - Optional fiat payment method ID used to match route overrides.\n * @returns Ordered strategy list.\n */\nexport function getStrategyOrder(\n messenger: TransactionPayControllerMessenger,\n chainId?: Hex,\n tokenAddress?: Hex,\n transactionType?: string,\n fiatPaymentMethodId?: string,\n): StrategyOrder {\n // If fiat payment method is selected, use Fiat strategy only\n if (fiatPaymentMethodId) {\n return [TransactionPayStrategy.Fiat];\n }\n\n const routingConfig = getStrategyRoutingConfig(messenger);\n const normalizedChainId = normalizeHex(chainId);\n const normalizedTokenAddress = normalizeHex(tokenAddress);\n const transactionTypeOverride = transactionType\n ? routingConfig.strategyOverrides.transactionTypes[transactionType]\n : undefined;\n\n const candidates: (readonly TransactionPayStrategy[] | undefined)[] = [\n getTokenOverrideStrategies(\n transactionTypeOverride,\n normalizedChainId,\n normalizedTokenAddress,\n ),\n getChainOverrideStrategies(transactionTypeOverride, normalizedChainId),\n getTokenOverrideStrategies(\n routingConfig.strategyOverrides.default,\n normalizedChainId,\n normalizedTokenAddress,\n ),\n getChainOverrideStrategies(\n routingConfig.strategyOverrides.default,\n normalizedChainId,\n ),\n getDefaultOverrideStrategies(transactionTypeOverride),\n getDefaultOverrideStrategies(routingConfig.strategyOverrides.default),\n ];\n\n // Overrides are authoritative. Once a route matches a specific override\n // scope, disabled strategies do not inherit candidates from lower-precedence\n // scopes.\n for (const strategies of candidates) {\n if (strategies) {\n return filterEnabledStrategies(strategies, routingConfig);\n }\n }\n\n return filterEnabledStrategies(routingConfig.strategyOrder, routingConfig);\n}\n\n/**\n * Get the preferred strategy for a route.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Optional chain ID used to match route overrides.\n * @param tokenAddress - Optional token address used to match route overrides.\n * @param transactionType - Optional transaction type used to match route\n * overrides.\n * @returns The preferred strategy, if any.\n */\nexport function getStrategy(\n messenger: TransactionPayControllerMessenger,\n chainId?: Hex,\n tokenAddress?: Hex,\n transactionType?: string,\n): TransactionPayStrategy | undefined {\n return getStrategyOrder(messenger, chainId, tokenAddress, transactionType)[0];\n}\n\n/**\n * Get feature flags related to the controller.\n *\n * @param messenger - Controller messenger.\n * @returns Feature flags.\n */\nexport function getFeatureFlags(\n messenger: TransactionPayControllerMessenger,\n): FeatureFlags {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n\n const estimate = new BigNumber(\n featureFlags.relayFallbackGas?.estimate ?? DEFAULT_FALLBACK_GAS_ESTIMATE,\n ).toNumber();\n\n const max = new BigNumber(\n featureFlags.relayFallbackGas?.max ?? DEFAULT_FALLBACK_GAS_MAX,\n ).toNumber();\n\n const relayExecuteUrl =\n featureFlags.relayExecuteUrl ?? DEFAULT_RELAY_EXECUTE_URL;\n\n const relayQuoteUrl = featureFlags.relayQuoteUrl ?? DEFAULT_RELAY_QUOTE_URL;\n\n const relayDisabledGasStationChains =\n featureFlags.relayDisabledGasStationChains ?? [];\n\n const slippage = featureFlags.slippage ?? DEFAULT_SLIPPAGE;\n\n const result: FeatureFlags = {\n relayDisabledGasStationChains,\n relayExecuteUrl,\n relayFallbackGas: {\n estimate,\n max,\n },\n relayQuoteUrl,\n slippage,\n };\n\n log('Feature flags:', { raw: featureFlags, result });\n\n return result;\n}\n\n/**\n * Get the stablecoins map from the `stableTokens` feature flag.\n * Falls back to the hardcoded {@link STABLECOINS} constant when the flag is\n * absent or not a valid object.\n *\n * @param messenger - Controller messenger.\n * @returns Stablecoins keyed by chain ID.\n */\nexport function getStablecoins(\n messenger: TransactionPayControllerMessenger,\n): Record<Hex, Hex[]> {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const flag = state.remoteFeatureFlags?.stableTokens;\n\n if (flag && typeof flag === 'object' && !Array.isArray(flag)) {\n const raw = flag as Record<string, string[]>;\n return Object.entries(raw).reduce<Record<Hex, Hex[]>>(\n (acc, [chainId, addresses]) => {\n if (Array.isArray(addresses)) {\n acc[chainId.toLowerCase() as Hex] = addresses.map(\n (a) => a.toLowerCase() as Hex,\n );\n }\n return acc;\n },\n {},\n );\n }\n\n return STABLECOINS;\n}\n\nexport function getMaxBalanceRefreshInterval(\n messenger: TransactionPayControllerMessenger,\n transaction?: TransactionMeta,\n): number | undefined {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const config = featureFlags.maxBalanceRefreshInterval ?? {};\n\n for (const [transactionType, interval] of Object.entries(config) as [\n TransactionType,\n number | undefined,\n ][]) {\n if (hasTransactionType(transaction, [transactionType])) {\n return interval;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get Pay Strategies configuration.\n *\n * @param messenger - Controller messenger.\n * @returns Pay Strategies configuration.\n */\nexport function getPayStrategiesConfig(\n messenger: TransactionPayControllerMessenger,\n): PayStrategiesConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n const extendedFeatureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n const payStrategies = featureFlags.payStrategies ?? {};\n const extendedPayStrategies = extendedFeatureFlags.payStrategies ?? {};\n\n const acrossRaw = payStrategies.across ?? {};\n const serverRaw = extendedPayStrategies.server ?? {};\n const relayRaw = payStrategies.relay ?? {};\n\n const across = {\n apiBase: acrossRaw.apiBase ?? DEFAULT_ACROSS_API_BASE,\n enabled: acrossRaw.enabled ?? false,\n fallbackGas: {\n estimate:\n acrossRaw.fallbackGas?.estimate ?? DEFAULT_FALLBACK_GAS_ESTIMATE,\n max: acrossRaw.fallbackGas?.max ?? DEFAULT_FALLBACK_GAS_MAX,\n },\n };\n\n const server = {\n enabled: serverRaw.enabled ?? false,\n enabledTransactionTypes: normalizeTransactionTypes(\n serverRaw.enabledTransactionTypes,\n ),\n baseUrl: serverRaw.baseUrl ?? DEFAULT_SERVER_BASE_URL,\n pollingInterval: serverRaw.pollingInterval ?? SERVER_POLLING_INTERVAL,\n pollingTimeout: serverRaw.pollingTimeout,\n };\n\n const relay = {\n enabled: relayRaw.enabled ?? true,\n };\n\n return {\n across,\n server,\n relay,\n };\n}\n\n/**\n * Whether the Relay /execute gasless flow is enabled.\n *\n * @param messenger - Controller messenger.\n * @returns True if the execute flow is enabled.\n */\nexport function isRelayExecuteEnabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n return featureFlags.payStrategies?.relay?.gaslessEnabled ?? false;\n}\n\n/**\n * Whether Relay quote validation is enabled for a given transaction.\n *\n * Acts as an emergency kill switch: when disabled (default), Relay quotes are\n * surfaced without being simulated/validated.\n *\n * Configured via the `payStrategies.relay.validationEnabled` flag, an object\n * `{ default?: boolean; transactionTypes?: { [type]?: boolean } }`:\n * `default` is the base toggle applied to all transactions (omitted = `false`);\n * a matching `transactionTypes[type]` entry overrides `default` when the\n * transaction, or any of its nested transactions, has that type.\n *\n * @param messenger - Controller messenger.\n * @param transaction - Transaction being validated. Its top-level and nested\n * types are matched against the `transactionTypes` overrides.\n * @returns True if Relay quote validation is enabled.\n */\nexport function isRelayValidationEnabled(\n messenger: TransactionPayControllerMessenger,\n transaction?: TransactionMeta,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const validationEnabled =\n featureFlags.payStrategies?.relay?.validationEnabled;\n\n const transactionTypes = validationEnabled?.transactionTypes ?? {};\n\n // A per-type override wins over the global `default` toggle. An override\n // matches when the transaction, or any nested transaction, has that type.\n for (const [type, enabled] of Object.entries(transactionTypes)) {\n if (hasTransactionType(transaction, [type as TransactionType])) {\n return enabled;\n }\n }\n\n // `?? false`: `default` is optional, so an omitted config disables validation.\n return validationEnabled?.default ?? false;\n}\n\n/**\n * Whether atomic max quotes are enabled for a given transaction.\n *\n * Gates subsidized max deposits using atomic exact-output quotes.\n *\n * Configured via the `payStrategies.relay.atomicMaxEnabled` flag, an\n * object `{ default?: boolean; transactionTypes?: { [type]?: boolean } }`:\n * a matching `transactionTypes[type]` entry overrides `default` when the\n * transaction, or any nested transaction, has that type.\n *\n * When the flag or its default is absent, atomic max is disabled unless a\n * matching transaction type override enables it.\n *\n * @param messenger - Controller messenger.\n * @param transaction - Transaction being quoted. Its top-level and nested\n * types are matched against the `transactionTypes` overrides.\n * @returns True if atomic max quotes are enabled.\n */\nexport function isAtomicMaxEnabled(\n messenger: TransactionPayControllerMessenger,\n transaction?: TransactionMeta,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const atomicMaxEnabled = featureFlags.payStrategies?.relay?.atomicMaxEnabled;\n\n const transactionTypes = atomicMaxEnabled?.transactionTypes ?? {};\n\n // A per-type override wins over the global `default` toggle. An override\n // matches when the transaction, or any nested transaction, has that type.\n for (const [type, enabled] of Object.entries(transactionTypes)) {\n if (hasTransactionType(transaction, [type as TransactionType])) {\n return enabled;\n }\n }\n\n return atomicMaxEnabled?.default ?? false;\n}\n\n/**\n * Whether a chain is excluded from preferring Infura for balance queries.\n *\n * When a chain ID appears in the `confirmations_pay_extended.excludeChainIdsFromInfura`\n * feature flag array, the Infura RPC endpoint should not be forced for that chain.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to check.\n * @returns True if the chain should skip the Infura preference.\n */\nexport function isChainExcludedFromInfura(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay_extended as\n | FeatureFlagsExtendedRaw\n | undefined) ?? {};\n\n const excludedChains = featureFlags.excludeChainIdsFromInfura ?? [];\n\n return excludedChains.some(\n (excluded) => excluded.toLowerCase() === chainId.toLowerCase(),\n );\n}\n\n/**\n * Get the origin gas overhead to include in Relay quote requests\n * for EIP-7702 chains.\n *\n * @param messenger - Controller messenger.\n * @returns Origin gas overhead as a decimal string.\n */\nexport function getRelayOriginGasOverhead(\n messenger: TransactionPayControllerMessenger,\n): string {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return (\n featureFlags.payStrategies?.relay?.originGasOverhead ??\n DEFAULT_RELAY_ORIGIN_GAS_OVERHEAD\n );\n}\n\n/**\n * Get the relay status polling interval in milliseconds.\n * Falls back to the constant default when not configured.\n *\n * @param messenger - Controller messenger.\n * @returns Polling interval in milliseconds.\n */\nexport function getRelayPollingInterval(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return (\n featureFlags.payStrategies?.relay?.pollingInterval ?? RELAY_POLLING_INTERVAL\n );\n}\n\n/**\n * Get the relay status polling timeout in milliseconds.\n * Returns 0 or undefined to indicate no timeout.\n *\n * @param messenger - Controller messenger.\n * @returns Polling timeout in milliseconds, or undefined when not configured.\n */\nexport function getRelayPollingTimeout(\n messenger: TransactionPayControllerMessenger,\n): number | undefined {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n return featureFlags.payStrategies?.relay?.pollingTimeout;\n}\n\n/**\n * Get the server strategy status polling interval in milliseconds.\n *\n * @param messenger - Controller messenger.\n * @returns Polling interval in milliseconds.\n */\nexport function getServerPollingInterval(\n messenger: TransactionPayControllerMessenger,\n): number {\n return getPayStrategiesConfig(messenger).server.pollingInterval;\n}\n\n/**\n * Get the server strategy status polling timeout in milliseconds.\n *\n * @param messenger - Controller messenger.\n * @returns Polling timeout in milliseconds, or undefined when not configured.\n */\nexport function getServerPollingTimeout(\n messenger: TransactionPayControllerMessenger,\n): number | undefined {\n return getPayStrategiesConfig(messenger).server.pollingTimeout;\n}\n\n/**\n * Get fallback gas limits for quote/submit flows.\n *\n * @param messenger - Controller messenger.\n * @returns Fallback gas limits.\n */\nexport function getFallbackGas(\n messenger: TransactionPayControllerMessenger,\n): FeatureFlags['relayFallbackGas'] {\n return getFeatureFlags(messenger).relayFallbackGas;\n}\n\n/**\n * Get the gas buffer value for a specific chain ID.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to get gas buffer for.\n * @returns Gas buffer value.\n */\nexport function getGasBuffer(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n\n return (\n featureFlags.gasBuffer?.perChainConfig?.[chainId]?.buffer ??\n featureFlags.gasBuffer?.default ??\n DEFAULT_GAS_BUFFER\n );\n}\n\n/**\n * Get the slippage value for a specific chain ID and token address.\n * Falls back to the general slippage feature flag, then the static default.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to get slippage for.\n * @param tokenAddress - Token address to get slippage for.\n * @returns Slippage value as a decimal (e.g., 0.005 for 0.5%).\n */\nexport function getSlippage(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n tokenAddress: Hex,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags =\n (state.remoteFeatureFlags?.confirmations_pay as\n | FeatureFlagsRaw\n | undefined) ?? {};\n const { slippageTokens } = featureFlags;\n\n const tokenMap = getCaseInsensitive(slippageTokens, chainId);\n const tokenSlippage = getCaseInsensitive(tokenMap, tokenAddress);\n\n if (tokenSlippage !== undefined) {\n log('Using token-specific slippage', {\n chainId,\n tokenAddress,\n slippage: tokenSlippage,\n });\n return tokenSlippage;\n }\n\n const slippage = featureFlags.slippage ?? DEFAULT_SLIPPAGE;\n log('Using default slippage', { chainId, tokenAddress, slippage });\n return slippage;\n}\n\n/**\n * Get a value from a record using a case-insensitive key lookup.\n *\n * @param record - The record to search.\n * @param key - The key to look up (case-insensitive).\n * @returns The value if found, undefined otherwise.\n */\nfunction getCaseInsensitive<Value>(\n record: Record<string, Value> | undefined,\n key: string,\n): Value | undefined {\n if (!record) {\n return undefined;\n }\n\n const normalizedKey = key.toLowerCase();\n const entry = Object.entries(record).find(\n ([k]) => k.toLowerCase() === normalizedKey,\n );\n\n return entry?.[1];\n}\n\n/**\n * Get the fiat asset for a specific transaction type.\n *\n * Resolution order:\n * 1. Feature flag override (`confirmations_pay_fiat.assetPerTransactionType`)\n * 2. Hardcoded constant (`FIAT_ASSET_ID_BY_TX_TYPE`)\n * 3. ETH mainnet fallback\n *\n * @param messenger - Controller messenger.\n * @param transactionType - Transaction type to look up.\n * @returns The fiat asset for the given transaction type.\n */\nexport function getFiatAssetPerTransactionType(\n messenger: TransactionPayControllerMessenger,\n transactionType?: TransactionType,\n): TransactionPayFiatAsset {\n if (!transactionType) {\n return ETH_MAINNET_FIAT_ASSET;\n }\n\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n return (\n fiatFlags?.assetPerTransactionType?.[transactionType] ??\n FIAT_ASSET_ID_BY_TX_TYPE[transactionType] ??\n ETH_MAINNET_FIAT_ASSET\n );\n}\n\n/**\n * Get the enabled fiat transaction types.\n *\n * @param messenger - Controller messenger.\n * @returns The enabled fiat transaction types.\n */\nexport function getFiatEnabledTypes(\n messenger: TransactionPayControllerMessenger,\n): TransactionType[] {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n return fiatFlags?.enabledTransactionTypes ?? FIAT_ENABLED_TYPES;\n}\n\n/**\n * Returns the fee reserve multiplier for fiat three-phase submit.\n *\n * Controls how much of the original relay fee is reserved from the discovery\n * quote source amount to prevent EXACT_OUTPUT cost overruns.\n *\n * @param messenger - Controller messenger.\n * @returns The fee reserve multiplier.\n */\nexport function getFiatFeeReserveMultiplier(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const multiplier = fiatFlags?.feeReserveMultiplier;\n\n return typeof multiplier === 'number' && multiplier > 0\n ? multiplier\n : DEFAULT_FEE_RESERVE_MULTIPLIER;\n}\n\n/**\n * Returns the maximum allowed relay rate drift percentage for fiat submit.\n *\n * Controls how much the relay exchange rate can drift between the original\n * quoting phase and the post-settlement discovery quote before failing.\n * Defaults to 10%.\n *\n * @param messenger - Controller messenger.\n * @returns The maximum rate drift percentage.\n */\nexport function getFiatMaxRateDriftPercent(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const maxDrift = fiatFlags?.maxRateDriftPercent;\n\n return typeof maxDrift === 'number' && maxDrift > 0\n ? maxDrift\n : DEFAULT_MAX_RATE_DRIFT_PERCENT;\n}\n\nexport function getDirectMoneyMusdEnabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n return fiatFlags?.directMoneyMusdEnabled === true;\n}\n\nexport function getFiatVaultDisabled(\n messenger: TransactionPayControllerMessenger,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n return fiatFlags?.vaultDisabled === true;\n}\n\n/**\n * Returns the fiat order poll interval in milliseconds.\n *\n * Controls how frequently the fiat order status is polled during\n * the on-ramp completion wait loop. Defaults to 1 000 ms.\n *\n * @param messenger - Controller messenger.\n * @returns The poll interval in milliseconds.\n */\nexport function getFiatOrderPollIntervalMs(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const interval = fiatFlags?.orderPollIntervalMs;\n\n return typeof interval === 'number' && interval > 0\n ? interval\n : DEFAULT_ORDER_POLL_INTERVAL_MS;\n}\n\n/**\n * Returns the fiat order poll timeout in milliseconds.\n *\n * Controls how long the fiat order polling loop waits for a terminal\n * status before timing out. Defaults to 600 000 ms (10 minutes).\n *\n * @param messenger - Controller messenger.\n * @returns The poll timeout in milliseconds.\n */\nexport function getFiatOrderPollTimeoutMs(\n messenger: TransactionPayControllerMessenger,\n): number {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const fiatFlags = state.remoteFeatureFlags?.confirmations_pay_fiat as\n | FiatFlags\n | undefined;\n\n const timeout = fiatFlags?.orderPollTimeoutMs;\n\n return typeof timeout === 'number' && timeout > 0\n ? timeout\n : DEFAULT_ORDER_POLL_TIMEOUT_MS;\n}\n\n/**\n * Get the HyperLiquid activation-fee configuration from the\n * `confirmations_pay_post_quote` feature flag for a transaction type.\n *\n * Resolves the transaction type's\n * `overrides.<transactionType>.hyperliquidActivationFee`, falling back to\n * `default.hyperliquidActivationFee`.\n *\n * When enabled, an unactivated HyperCore account withdrawing via Pay has the\n * one-time activation fee reserved from the amount sent to HyperLiquid (so the\n * `sendAsset` step retains enough balance) and surfaced as part of the\n * provider fee. Defaults to disabled with a $1 fee.\n *\n * @param messenger - Controller messenger.\n * @param transactionType - Parent transaction type used to resolve overrides.\n * @returns The activation-fee configuration.\n */\nexport function getHyperliquidActivationFeeConfig(\n messenger: TransactionPayControllerMessenger,\n transactionType?: string,\n): HyperliquidActivationFeeConfig {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const featureFlags = state.remoteFeatureFlags\n ?.confirmations_pay_post_quote as PostQuoteFeatureFlags | undefined;\n\n const override = transactionType\n ? featureFlags?.overrides?.[transactionType]\n : undefined;\n const config =\n override?.hyperliquidActivationFee ??\n featureFlags?.default?.hyperliquidActivationFee;\n\n const { amountUsd } = config ?? {};\n\n return {\n enabled: config?.enabled ?? false,\n amountUsd:\n typeof amountUsd === 'number' && amountUsd > 0\n ? amountUsd\n : DEFAULT_HYPERLIQUID_ACTIVATION_FEE_USD,\n };\n}\n\n/**\n * Checks if a chain supports EIP-7702.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to check.\n * @returns Whether the chain supports EIP-7702.\n */\nexport function isEIP7702Chain(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): boolean {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const eip7702Flags = state.remoteFeatureFlags.confirmations_eip_7702 as\n | EIP7702FeatureFlag\n | undefined;\n\n const supportedChains = eip7702Flags?.supportedChains ?? [];\n\n return supportedChains.some(\n (supported) => supported.toLowerCase() === chainId.toLowerCase(),\n );\n}\n\n/**\n * Get the EIP-7702 upgrade contract address for a chain from the\n * `confirmations_eip_7702.contracts` feature flag, if any.\n *\n * @param messenger - Controller messenger.\n * @param chainId - Chain ID to resolve the upgrade contract for.\n * @returns The upgrade contract address, or `undefined` when none is set.\n */\nexport function getEIP7702UpgradeContractAddress(\n messenger: TransactionPayControllerMessenger,\n chainId: Hex,\n): Hex | undefined {\n const state = messenger.call('RemoteFeatureFlagController:getState');\n const eip7702Flags = state.remoteFeatureFlags.confirmations_eip_7702 as\n | EIP7702FeatureFlag\n | undefined;\n\n const contracts = getCaseInsensitive(eip7702Flags?.contracts, chainId);\n\n return contracts?.[0]?.address;\n}\n"]}
|
package/dist/utils/quotes.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TransactionMeta } from '@metamask/transaction-controller';
|
|
2
2
|
import { TransactionPayStrategy } from '../constants.js';
|
|
3
|
-
import type { TransactionData, TransactionPayControllerMessenger, UpdateTransactionDataCallback } from '../types.js';
|
|
3
|
+
import type { TransactionData, GetBalanceCallback, TransactionPayControllerMessenger, UpdateTransactionDataCallback } from '../types.js';
|
|
4
4
|
export type UpdateQuotesRequest = {
|
|
5
5
|
getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];
|
|
6
6
|
messenger: TransactionPayControllerMessenger;
|
|
@@ -21,11 +21,12 @@ export type UpdateQuotesRequest = {
|
|
|
21
21
|
*/
|
|
22
22
|
export declare function updateQuotes(request: UpdateQuotesRequest): Promise<boolean>;
|
|
23
23
|
/**
|
|
24
|
-
* Refresh quotes for all transactions if expired.
|
|
24
|
+
* Refresh source amounts and quotes for all transactions if expired.
|
|
25
25
|
*
|
|
26
26
|
* @param messenger - Messenger instance.
|
|
27
27
|
* @param updateTransactionData - Callback to update transaction data.
|
|
28
28
|
* @param getStrategies - Callback to get ordered strategy names for a transaction.
|
|
29
|
+
* @param getBalance - Optional callback to override the source balance used for max-amount calculation.
|
|
29
30
|
*/
|
|
30
|
-
export declare function refreshQuotes(messenger: TransactionPayControllerMessenger, updateTransactionData: UpdateTransactionDataCallback, getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[]): Promise<void>;
|
|
31
|
+
export declare function refreshQuotes(messenger: TransactionPayControllerMessenger, updateTransactionData: UpdateTransactionDataCallback, getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[], getBalance?: GetBalanceCallback): Promise<void>;
|
|
31
32
|
//# sourceMappingURL=quotes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAAmB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,KAAK,EAGV,eAAe,EACf,iCAAiC,EAMjC,6BAA6B,EAC9B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIxE,OAAO,EAAmB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,KAAK,EAGV,eAAe,EACf,kBAAkB,EAClB,iCAAiC,EAMjC,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAyBrB,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;IAC1E,SAAS,EAAE,iCAAiC,CAAC;IAC7C,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CA6JlB;AAgFD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,iCAAiC,EAC5C,qBAAqB,EAAE,6BAA6B,EACpD,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,EACzE,UAAU,CAAC,EAAE,kBAAkB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
package/dist/utils/quotes.js
CHANGED
|
@@ -4,6 +4,7 @@ import { TransactionPayStrategy } from '../constants.js';
|
|
|
4
4
|
import { projectLogger } from '../logger.js';
|
|
5
5
|
import { accountSupports7702 } from './7702.js';
|
|
6
6
|
import { buildNoOpQuote } from './no-op-quote.js';
|
|
7
|
+
import { updateSourceAmounts } from './source-amounts.js';
|
|
7
8
|
import { checkStrategyQuoteSupport, checkStrategySupport, getStrategiesByName, getStrategyByName, } from './strategy.js';
|
|
8
9
|
import { computeTokenAmounts, getLiveTokenBalance, getTokenFiatRate, } from './token.js';
|
|
9
10
|
import { calculateTotals } from './totals.js';
|
|
@@ -180,13 +181,14 @@ function syncTransaction({ batchTransactions, hasQuotes, isPostQuote, messenger,
|
|
|
180
181
|
});
|
|
181
182
|
}
|
|
182
183
|
/**
|
|
183
|
-
* Refresh quotes for all transactions if expired.
|
|
184
|
+
* Refresh source amounts and quotes for all transactions if expired.
|
|
184
185
|
*
|
|
185
186
|
* @param messenger - Messenger instance.
|
|
186
187
|
* @param updateTransactionData - Callback to update transaction data.
|
|
187
188
|
* @param getStrategies - Callback to get ordered strategy names for a transaction.
|
|
189
|
+
* @param getBalance - Optional callback to override the source balance used for max-amount calculation.
|
|
188
190
|
*/
|
|
189
|
-
export async function refreshQuotes(messenger, updateTransactionData, getStrategies) {
|
|
191
|
+
export async function refreshQuotes(messenger, updateTransactionData, getStrategies, getBalance) {
|
|
190
192
|
const state = messenger.call('TransactionPayController:getState');
|
|
191
193
|
const transactionIds = Object.keys(state.transactionData);
|
|
192
194
|
for (const transactionId of transactionIds) {
|
|
@@ -205,15 +207,22 @@ export async function refreshQuotes(messenger, updateTransactionData, getStrateg
|
|
|
205
207
|
const refreshInterval = (await strategy.getRefreshInterval?.({
|
|
206
208
|
chainId: quotes[0].request.sourceChainId,
|
|
207
209
|
messenger,
|
|
210
|
+
transactionId,
|
|
208
211
|
})) ?? DEFAULT_REFRESH_INTERVAL;
|
|
209
212
|
const isExpired = Date.now() - (quotesLastUpdated ?? 0) > refreshInterval;
|
|
210
213
|
if (!isExpired) {
|
|
211
214
|
continue;
|
|
212
215
|
}
|
|
216
|
+
updateTransactionData(transactionId, (data) => updateSourceAmounts(transactionId,
|
|
217
|
+
/* oxlint-disable typescript/no-unnecessary-type-assertion */
|
|
218
|
+
data,
|
|
219
|
+
/* oxlint-enable typescript/no-unnecessary-type-assertion */
|
|
220
|
+
messenger, getBalance));
|
|
221
|
+
const latestTransactionData = messenger.call('TransactionPayController:getState').transactionData[transactionId];
|
|
213
222
|
const isUpdated = await updateQuotes({
|
|
214
223
|
getStrategies,
|
|
215
224
|
messenger,
|
|
216
|
-
transactionData,
|
|
225
|
+
transactionData: latestTransactionData,
|
|
217
226
|
transactionId,
|
|
218
227
|
updateTransactionData,
|
|
219
228
|
});
|
package/dist/utils/quotes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAIrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAmB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEzD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAExD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAUjE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,EACJ,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,qBAAqB,GACtB,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,WAAW,EAAE,MAAM,KAAK,iBAAiB,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAE1C,MAAM,EACJ,eAAe,EACf,MAAM,EACN,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EACzB,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EAAE,oBAAoB,EAClC,QAAQ,EACR,aAAa,EACb,MAAM,GACP,GAAG,eAAe,CAAC;IAEpB,MAAM,IAAI,GAAG,eAAe,IAAK,WAAW,CAAC,QAAQ,CAAC,IAAY,CAAC;IAEnE,MAAM,UAAU,GAAG,gCAAgC,CAAC,aAAa,CAAC,CAAC;IACnE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAE9B,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC;YACpD,IAAI;YACJ,SAAS;YACT,YAAY,EAAE,oBAAoB;YAClC,MAAM;YACN,aAAa;YACb,qBAAqB;SACtB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,gDAAgD,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,sEAAsE;QACtE,UAAU;QACV,MAAM,mBAAmB,GACvB,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,aAAa,CAAC;QAE9D,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,MAAM;YACN,IAAI;YACJ,mBAAmB;YACnB,WAAW,EAAE,WAAW,IAAI,KAAK;YACjC,yBAAyB;YACzB,WAAW;YACX,eAAe;YACf,YAAY;YACZ,QAAQ;YACR,aAAa,EAAE,mBAAmB;YAClC,MAAM;YACN,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE1D,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAC1D,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,eAAe,IAAI,KAAK,EACxB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,WAAW,EAAE,uBAAuB,EACpC,MAAM,CACP,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,iDAAiD,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CAC1D,CAAC;QAEF,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,iBAAiB,EAAE,WAAW,EAAE,UAAU;YAC1C,SAAS;YACT,MAAM,EAAE,gBAAgB;YACxB,MAAM;YACN,WAAW;SACZ,CAAC,CAAC;QAEH,GAAG,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpD,eAAe,CAAC;YACd,iBAAiB;YACjB,mBAAmB,EAAE,WAAW,EAAE,uBAAuB;YACzD,SAAS,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC;YACtC,WAAW;YACX,SAAS;YACT,YAAY;YACZ,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ;YACvC,MAAM;YACN,aAAa;SACd,CAAC,CAAC;QAEH,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5C,oEAAoE;YACpE,IAAI,CAAC,MAAM,GAAG,MAAe,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,uBAAuB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC5C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACzB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,wBAAwB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,eAAe,CAAC,EACvB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,aAAa,GAWd;IACC,IAAI,CAAC,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,iBAAiB,CACf;QACE,aAAa;QACb,SAAS;QACT,IAAI,EAAE,6BAA6B;KACpC,EACD,CAAC,EAAmB,EAAE,EAAE;QACtB,EAAE,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QACzC,EAAE,CAAC,wBAAwB,GAAG,EAAE,CAAC;QAEjC,0EAA0E;QAC1E,yEAAyE;QACzE,qEAAqE;QACrE,uEAAuE;QACvE,yEAAyE;QACzE,uDAAuD;QACvD,mEAAmE;QACnE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,WAAW;QACX,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAC1B,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,EAAE,CAAC,WAAW,GAAG;YACf,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;YACvC,OAAO,EAAE,YAAY,EAAE,OAAO;YAC9B,WAAW;YACX,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG;YACtD,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG;YACnC,YAAY,EAAE,YAAY,EAAE,OAAO;YACnC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;SAC5B,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAA4C,EAC5C,qBAAoD,EACpD,aAAyE;IAEzE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAE1D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAC7D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,eAAe,CAAC;QAEjE,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,wEAAwE;QACxE,qDAAqD;QACrD,IACE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CAAC,EACvE,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,eAAe,GACnB,CAAC,MAAM,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACnC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;YACxC,SAAS;SACV,CAAC,CAAC,IAAI,wBAAwB,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC;QAE1E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC;YACnC,aAAa;YACb,SAAS;YACT,eAAe;YACf,aAAa;YACb,qBAAqB;SACtB,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,aAAqB;IAErB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE1D,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,iCAAiC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,qBAAqB,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAC/B,aAAqB,EACrB,UAA2B;IAE3B,IAAI,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5D,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,SAA4C,EAC5C,aAAqB;IAErB,OAAO,SAAS,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,eAAe,CACxE,aAAa,CACd,EAAE,aAAa,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,kBAAkB,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EACzB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,MAAM,EACN,aAAa,GAcd;IACC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,sBAAsB,CAAC;YAC5B,MAAM;YACN,gBAAgB,EAAE,YAAY;YAC9B,IAAI;YACJ,mBAAmB;YACnB,WAAW;YACX,yBAAyB;YACzB,eAAe;YACf,QAAQ;YACR,aAAa;YACb,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,MAAM,QAAQ,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,KAAK,YAAY,CAAC,kBAAkB,CAC1C,CAAC;QAEjC,OAAO;YACL,MAAM;YACN,IAAI;YACJ,WAAW;YACX,eAAe;YACf,QAAQ;YACR,gBAAgB,EAAE,YAAY,CAAC,UAAU;YACzC,aAAa,EAAE,YAAY,CAAC,OAAO;YACnC,kBAAkB,EAAE,YAAY,CAAC,OAAO;YACxC,iBAAiB,EAAE,YAAY,CAAC,eAAe;YAC/C,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS;YACpE,aAAa,EAAE,KAAK,CAAC,OAAO;YAC5B,kBAAkB,EAAE,KAAK,CAAC,OAAO;SAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,sBAAsB,CAAC,EAC9B,MAAM,EACN,gBAAgB,EAChB,IAAI,EACJ,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EACzB,eAAe,EACf,QAAQ,EACR,aAAa,EACb,aAAa,GAYd;IACC,gFAAgF;IAChF,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,CACtC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE;QACvC,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,CACzC,CAAC;IAEF,wEAAwE;IACxE,IACE,CAAC,YAAY,EAAE,gBAAgB;QAC/B,CAAC,YAAY,CAAC,aAAa;QAC3B,CAAC,YAAY,CAAC,kBAAkB,EAChC,CAAC;QACD,GAAG,CAAC,qDAAqD,EAAE;YACzD,aAAa;SACd,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAiB;QAC5B,MAAM;QACN,IAAI;QACJ,mBAAmB;QACnB,WAAW;QACX,yBAAyB;QACzB,WAAW,EAAE,IAAI;QACjB,eAAe;QACf,QAAQ;QACR,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;QAC/C,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,kBAAkB,EAAE,YAAY,CAAC,kBAAkB;QACnD,iBAAiB,EAAE,YAAY,CAAC,eAAe;QAC/C,mBAAmB,EAAE,GAAG;QACxB,aAAa,EAAE,gBAAgB,CAAC,OAAO;QACvC,kBAAkB,EAAE,gBAAgB,CAAC,OAAO;KAC7C,CAAC;IAEF,GAAG,CAAC,0BAA0B,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5D,8DAA8D;IAC9D,gFAAgF;IAChF,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,EACxC,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,MAAM,EACN,aAAa,EACb,qBAAqB,GAQtB;IACC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAChC,SAAS,EACT,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,OAAO,CACrB,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAC3C,SAAS,EACT,IAAI,EACJ,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,OAAO,CACrB,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,uCAAuC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAChE,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,EACJ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,GAClB,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEvE,MAAM,YAAY,GAAG;YACnB,GAAG,YAAY;YACf,WAAW;YACX,YAAY;YACZ,UAAU;YACV,UAAU;SACX,CAAC;QAEF,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,iCAAiC,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;QAEtE,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,yCAAyC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,SAAS,CACtB,WAA4B,EAC5B,IAAS,EACT,QAAwB,EACxB,YAAiD,EACjD,eAAwB,EACxB,0BAAmC,EACnC,aAAyE,EACzE,SAA4C,EAC5C,iBAA0B,EAC1B,MAAoB;IAMpB,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC;IAC1C,MAAM,UAAU,GAAG,mBAAmB,CACpC,aAAa,CAAC,WAAW,CAAC,EAC1B,CAAC,YAAY,EAAE,EAAE;QACf,GAAG,CAAC,2BAA2B,EAAE;YAC/B,QAAQ,EAAE,YAAY;YACtB,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,SAAS,GACb,YAAY,IAAI,CAAC,eAAe;YAC9B,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,oCAAoC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO;YACL,iBAAiB,EAAE,EAAE;YACrB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,mBAAmB,EAAE,0BAA0B;QAC/C,iBAAiB;QACjB,IAAI;QACJ,SAAS;QACT,QAAQ;QACR,MAAM;QACN,WAAW;KACZ,CAAC;IAEF,IAAI,KAAiC,CAAC;IAEtC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE9D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,mCAAmC,EAAE;oBACvC,QAAQ,EAAE,IAAI;oBACd,aAAa;iBACd,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,CACtC,OAAO,CACR,CAAgC,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,GAAG,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBACtE,SAAS;YACX,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,yBAAyB,CAAC,QAAQ,EAAE;gBACjE,SAAS;gBACT,MAAM;gBACN,MAAM;gBACN,WAAW;aACZ,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,GAAG,CAAC,kCAAkC,EAAE;oBACtC,QAAQ,EAAE,IAAI;oBACd,aAAa;iBACd,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,GAAG,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAE1C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,oBAAoB;gBACrD,CAAC,CAAC,MAAM,QAAQ,CAAC,oBAAoB,CAAC;oBAClC,SAAS;oBACT,MAAM;oBACN,MAAM;iBACP,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;YAEP,GAAG,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAEhE,OAAO;gBACL,iBAAiB;gBACjB,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,WAAW,CAAC;YACpB,CAAC;YAED,KAAK,KAAK,YAAY,CAAC,WAAW,CAAC;gBACjC,CAAC,CAAC,WAAW,CAAC,IAAI;gBAClB,CAAC,CAAC,EAAE,OAAO,EAAG,WAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YAErE,IACE,YAAY,CAAC,WAAW,CAAC;gBACzB,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,6BAA6B;gBACzD,WAAW,CAAC,MAAM,EAAE,MAAM,EAC1B,CAAC;gBACD,GAAG,CAAC,oDAAoD,EAAE;oBACxD,QAAQ,EAAE,IAAI;oBACd,aAAa;iBACd,CAAC,CAAC;gBACH,OAAO;oBACL,iBAAiB,EAAE,EAAE;oBACrB,KAAK,EAAE,WAAW,CAAC,IAAI;oBACvB,MAAM,EAAE,WAAW,CAAC,MAAqC;iBAC1D,CAAC;YACJ,CAAC;YAED,GAAG,CAAC,8BAA8B,EAAE;gBAClC,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,IAAI;gBACd,aAAa;aACd,CAAC,CAAC;YACH,SAAS;QACX,CAAC;IACH,CAAC;IAED,GAAG,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAE9C,OAAO;QACL,iBAAiB,EAAE,EAAE;QACrB,KAAK;QACL,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { TransactionStatus } from '@metamask/transaction-controller';\nimport type { BatchTransaction } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { PaymentOverride, TransactionPayStrategy } from '../constants.js';\nimport { projectLogger } from '../logger.js';\nimport type {\n QuoteRequest,\n QuoteErrorInfo,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPaySourceAmount,\n TransactionPayTotals,\n TransactionPaymentToken,\n UpdateTransactionDataCallback,\n} from '../types.js';\nimport { accountSupports7702 } from './7702.js';\nimport { buildNoOpQuote } from './no-op-quote.js';\nimport {\n checkStrategyQuoteSupport,\n checkStrategySupport,\n getStrategiesByName,\n getStrategyByName,\n} from './strategy.js';\nimport {\n computeTokenAmounts,\n getLiveTokenBalance,\n getTokenFiatRate,\n} from './token.js';\nimport { calculateTotals } from './totals.js';\nimport { getTransaction, updateTransaction } from './transaction.js';\nimport { isQuoteError } from './validation.js';\n\nconst DEFAULT_REFRESH_INTERVAL = 30 * 1000; // 30 Seconds\n\nconst log = createModuleLogger(projectLogger, 'quotes');\n\nconst inFlightQuoteRequests = new Map<string, AbortController>();\n\nexport type UpdateQuotesRequest = {\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];\n messenger: TransactionPayControllerMessenger;\n transactionData: TransactionData | undefined;\n transactionId: string;\n updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the quotes for a specific transaction.\n *\n * Calls for the same `transactionId` are serialised: a fresh call aborts any\n * previous in-flight call so a slower stale response cannot overwrite a newer\n * one in state.\n *\n * @param request - Request parameters.\n * @returns Boolean indicating if the quotes were updated. Returns `false` when\n * the call was aborted by a subsequent call for the same transaction.\n */\nexport async function updateQuotes(\n request: UpdateQuotesRequest,\n): Promise<boolean> {\n const {\n getStrategies,\n messenger,\n transactionData,\n transactionId,\n updateTransactionData,\n } = request;\n\n const transaction = getTransaction(transactionId, messenger);\n\n if (!transaction || !transactionData) {\n throw new Error('Transaction not found');\n }\n\n if (transaction?.status !== TransactionStatus.unapproved) {\n return false;\n }\n\n log('Updating quotes', { transactionId });\n\n const {\n accountOverride,\n atomic,\n fiatPayment,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote,\n isQuoteRequired,\n paymentOverride,\n paymentToken: originalPaymentToken,\n refundTo,\n sourceAmounts,\n tokens,\n } = transactionData;\n\n const from = accountOverride ?? (transaction.txParams.from as Hex);\n\n const controller = abortPreviousAndCreateController(transactionId);\n const { signal } = controller;\n\n updateTransactionData(transactionId, (data) => {\n data.isLoading = true;\n data.quoteError = undefined;\n });\n\n try {\n const paymentToken = await refreshPaymentTokenBalance({\n from,\n messenger,\n paymentToken: originalPaymentToken,\n signal,\n transactionId,\n updateTransactionData,\n });\n\n if (signal.aborted) {\n log('Quote request aborted before building requests', { transactionId });\n return false;\n }\n\n // Refreshing the balance above re-derives max source amounts, so read the\n // latest values instead of the snapshot taken before the refresh. Using\n // the snapshot quotes a max amount against a stale balance, which requests\n // a zero source amount when the token was selected before its balance\n // loaded.\n const latestSourceAmounts =\n getSourceAmounts(messenger, transactionId) ?? sourceAmounts;\n\n const requests = buildQuoteRequests({\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount: isMaxAmount ?? false,\n isPolymarketDepositWallet,\n isPostQuote,\n paymentOverride,\n paymentToken,\n refundTo,\n sourceAmounts: latestSourceAmounts,\n tokens,\n transactionId,\n });\n\n const supports7702 = accountSupports7702(messenger, from);\n\n const { batchTransactions, error, quotes } = await getQuotes(\n transaction,\n from,\n requests,\n paymentToken,\n isQuoteRequired ?? false,\n supports7702,\n getStrategies,\n messenger,\n fiatPayment?.selectedPaymentMethodId,\n signal,\n );\n\n if (signal.aborted) {\n log('Quote request aborted before persisting results', { transactionId });\n return false;\n }\n\n // No-op quotes mark direct routes. They have no fees or amounts and the\n // transaction is signed and submitted locally, so totals and transaction\n // sync must treat them as \"no quotes\".\n const executableQuotes = quotes.filter(\n (quote) => quote.strategy !== TransactionPayStrategy.None,\n );\n\n const totals = calculateTotals({\n fiatPaymentAmount: fiatPayment?.amountFiat,\n messenger,\n quotes: executableQuotes,\n tokens,\n transaction,\n });\n\n log('Calculated totals', { transactionId, totals });\n\n syncTransaction({\n batchTransactions,\n selectedFiatPayment: fiatPayment?.selectedPaymentMethodId,\n hasQuotes: executableQuotes.length > 0,\n isPostQuote,\n messenger,\n paymentToken,\n strategy: executableQuotes[0]?.strategy,\n totals,\n transactionId,\n });\n\n updateTransactionData(transactionId, (data) => {\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n data.quotes = quotes as never;\n data.quoteError = error;\n data.quotesLastUpdated = Date.now();\n data.totals = totals;\n });\n } catch (error) {\n if (signal.aborted) {\n log('Quote request aborted', { transactionId, reason: signal.reason });\n return false;\n }\n throw error;\n } finally {\n if (!signal.aborted) {\n updateTransactionData(transactionId, (data) => {\n data.isLoading = false;\n });\n }\n clearControllerIfCurrent(transactionId, controller);\n }\n\n return true;\n}\n\n/**\n * Sync batch transactions to the transaction meta.\n *\n * @param request - Request object.\n * @param request.batchTransactions - Batch transactions to sync.\n * @param request.hasQuotes - Whether MM Pay produced any quotes for this transaction.\n * @param request.isPostQuote - Whether this is a post-quote flow.\n * @param request.messenger - Messenger instance.\n * @param request.paymentToken - Payment token (source for standard flows, destination for post-quote).\n * @param request.selectedFiatPayment - Selected fiat payment method ID.\n * @param request.strategy - Strategy of the executable quotes.\n * @param request.totals - Calculated totals.\n * @param request.transactionId - ID of the transaction to sync.\n */\nfunction syncTransaction({\n batchTransactions,\n hasQuotes,\n isPostQuote,\n messenger,\n paymentToken,\n selectedFiatPayment,\n strategy,\n totals,\n transactionId,\n}: {\n batchTransactions: BatchTransaction[];\n selectedFiatPayment?: string;\n hasQuotes: boolean;\n isPostQuote?: boolean;\n messenger: TransactionPayControllerMessenger;\n paymentToken: TransactionPaymentToken | undefined;\n strategy?: TransactionPayStrategy;\n totals: TransactionPayTotals;\n transactionId: string;\n}): void {\n if (!paymentToken && !selectedFiatPayment) {\n return;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Update transaction pay data',\n },\n (tx: TransactionMeta) => {\n tx.batchTransactions = batchTransactions;\n tx.batchTransactionsOptions = {};\n\n // When MM Pay has produced quotes, it owns submission of this transaction\n // via its strategy publish hook, so the parent must be marked externally\n // signed to skip the local `KeyringController:signTransaction` call.\n // When there are no quotes (e.g. user selected the target token as the\n // payment token in a Predict flow), the transaction falls back to normal\n // local signing, so the flag is cleared to allow that.\n // If gas is sponsored, TC owns this field — it is set based on the\n // Sentinel simulation result and must not be cleared here. Same-token\n // flows (e.g. Monad mUSD withdrawal via a Money Account) produce no\n // quotes but still need external sign because the account cannot sign\n // locally.\n if (!tx.isGasFeeSponsored) {\n tx.isExternalSign = hasQuotes;\n }\n\n tx.metamaskPay = {\n bridgeFeeFiat: totals.fees.provider.usd,\n chainId: paymentToken?.chainId,\n isPostQuote,\n networkFeeFiat: totals.fees.sourceNetwork.estimate.usd,\n strategy,\n targetFiat: totals.targetAmount.usd,\n tokenAddress: paymentToken?.address,\n totalFiat: totals.total.usd,\n };\n },\n );\n}\n\n/**\n * Refresh quotes for all transactions if expired.\n *\n * @param messenger - Messenger instance.\n * @param updateTransactionData - Callback to update transaction data.\n * @param getStrategies - Callback to get ordered strategy names for a transaction.\n */\nexport async function refreshQuotes(\n messenger: TransactionPayControllerMessenger,\n updateTransactionData: UpdateTransactionDataCallback,\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[],\n): Promise<void> {\n const state = messenger.call('TransactionPayController:getState');\n const transactionIds = Object.keys(state.transactionData);\n\n for (const transactionId of transactionIds) {\n const transactionData = state.transactionData[transactionId];\n const { isLoading, quotes, quotesLastUpdated } = transactionData;\n\n if (isLoading || !quotes?.length) {\n continue;\n }\n\n // No-op quotes mark direct routes and have nothing to refresh. They are\n // regenerated whenever the transaction data changes.\n if (\n quotes.every((quote) => quote.strategy === TransactionPayStrategy.None)\n ) {\n continue;\n }\n\n const strategyName = quotes[0].strategy;\n const strategy = getStrategyByName(strategyName);\n\n const refreshInterval =\n (await strategy.getRefreshInterval?.({\n chainId: quotes[0].request.sourceChainId,\n messenger,\n })) ?? DEFAULT_REFRESH_INTERVAL;\n\n const isExpired = Date.now() - (quotesLastUpdated ?? 0) > refreshInterval;\n\n if (!isExpired) {\n continue;\n }\n\n const isUpdated = await updateQuotes({\n getStrategies,\n messenger,\n transactionData,\n transactionId,\n updateTransactionData,\n });\n\n if (isUpdated) {\n log('Refreshed quotes', { transactionId, strategy: strategyName });\n }\n }\n}\n\nfunction abortPreviousAndCreateController(\n transactionId: string,\n): AbortController {\n const previous = inFlightQuoteRequests.get(transactionId);\n\n if (previous && !previous.signal.aborted) {\n log('Aborting previous quote request', { transactionId });\n previous.abort(new Error('Superseded by newer quote request'));\n }\n\n const controller = new AbortController();\n inFlightQuoteRequests.set(transactionId, controller);\n return controller;\n}\n\nfunction clearControllerIfCurrent(\n transactionId: string,\n controller: AbortController,\n): void {\n if (inFlightQuoteRequests.get(transactionId) === controller) {\n inFlightQuoteRequests.delete(transactionId);\n }\n}\n\n/**\n * Read the current source amounts for a transaction from controller state.\n *\n * @param messenger - Messenger instance.\n * @param transactionId - ID of the transaction.\n * @returns The source amounts, or `undefined` if the transaction has none.\n */\nfunction getSourceAmounts(\n messenger: TransactionPayControllerMessenger,\n transactionId: string,\n): TransactionPaySourceAmount[] | undefined {\n return messenger.call('TransactionPayController:getState').transactionData[\n transactionId\n ]?.sourceAmounts;\n}\n\n/**\n * Build quote requests required to retrieve quotes.\n *\n * @param request - Request parameters.\n * @param request.atomic - Whether the target transaction is executed atomically with the Relay quote.\n * @param request.from - Address from which the transaction is sent.\n * @param request.isHyperliquidSource - Whether the source of funds is HyperLiquid.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.isPolymarketDepositWallet - Whether the source of funds is a Polymarket deposit wallet.\n * @param request.isPostQuote - Whether this is a post-quote flow.\n * @param request.paymentOverride - Optional payment override type for the transaction.\n * @param request.paymentToken - Payment token (source for standard flows, destination for post-quote).\n * @param request.refundTo - Optional address to receive refunds if the Relay transaction fails.\n * @param request.sourceAmounts - Source amounts for the transaction.\n * @param request.tokens - Required tokens for the transaction.\n * @param request.transactionId - ID of the transaction.\n * @returns Array of quote requests.\n */\nfunction buildQuoteRequests({\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote,\n paymentOverride,\n paymentToken,\n refundTo,\n sourceAmounts,\n tokens,\n transactionId,\n}: {\n atomic?: boolean;\n from: Hex;\n isHyperliquidSource?: boolean;\n isMaxAmount: boolean;\n isPolymarketDepositWallet?: boolean;\n isPostQuote?: boolean;\n paymentOverride?: PaymentOverride;\n paymentToken: TransactionPaymentToken | undefined;\n refundTo?: Hex;\n sourceAmounts: TransactionPaySourceAmount[] | undefined;\n tokens: TransactionPayRequiredToken[];\n transactionId: string;\n}): QuoteRequest[] {\n if (!paymentToken) {\n return [];\n }\n\n if (isPostQuote) {\n return buildPostQuoteRequests({\n atomic,\n destinationToken: paymentToken,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n paymentOverride,\n refundTo,\n sourceAmounts,\n transactionId,\n });\n }\n\n // Standard flow: source = paymentToken, target = required tokens\n const requests = (sourceAmounts ?? []).map((sourceAmount) => {\n const token = tokens.find(\n (singleToken) => singleToken.address === sourceAmount.targetTokenAddress,\n ) as TransactionPayRequiredToken;\n\n return {\n atomic,\n from,\n isMaxAmount,\n paymentOverride,\n refundTo,\n sourceBalanceRaw: paymentToken.balanceRaw,\n sourceChainId: paymentToken.chainId,\n sourceTokenAddress: paymentToken.address,\n sourceTokenAmount: sourceAmount.sourceAmountRaw,\n targetAmountMinimum: token.allowUnderMinimum ? '0' : token.amountRaw,\n targetChainId: token.chainId,\n targetTokenAddress: token.address,\n };\n });\n\n if (!requests.length) {\n log('No quote requests', { transactionId });\n }\n\n return requests;\n}\n\n/**\n * Build quote requests for post-quote flows.\n * In this flow, the source is the transaction's required token,\n * and the target is the user's selected destination token (paymentToken).\n *\n * @param request - Request parameters.\n * @param request.atomic - Whether the target transaction is executed atomically with the Relay quote.\n * @param request.destinationToken - Destination token (paymentToken in post-quote mode).\n * @param request.from - Address from which the transaction is sent.\n * @param request.isHyperliquidSource - Whether the source of funds is HyperLiquid.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.isPolymarketDepositWallet - Whether the source of funds is a Polymarket deposit wallet.\n * @param request.paymentOverride - Optional payment override type for the transaction.\n * @param request.refundTo - Optional address to receive refunds if the Relay transaction fails.\n * @param request.sourceAmounts - Source amounts for the transaction (includes source token info).\n * @param request.transactionId - ID of the transaction.\n * @returns Array of quote requests for post-quote flow.\n */\nfunction buildPostQuoteRequests({\n atomic,\n destinationToken,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n paymentOverride,\n refundTo,\n sourceAmounts,\n transactionId,\n}: {\n atomic?: boolean;\n destinationToken: TransactionPaymentToken;\n from: Hex;\n isHyperliquidSource?: boolean;\n isMaxAmount: boolean;\n isPolymarketDepositWallet?: boolean;\n paymentOverride?: PaymentOverride;\n refundTo?: Hex;\n sourceAmounts: TransactionPaySourceAmount[] | undefined;\n transactionId: string;\n}): QuoteRequest[] {\n // Find the source amount where targetTokenAddress matches the destination token\n const sourceAmount = sourceAmounts?.find(\n (amount) =>\n amount.targetTokenAddress.toLowerCase() ===\n destinationToken.address.toLowerCase(),\n );\n\n // Same-token-same-chain cases are already filtered in source-amounts.ts\n if (\n !sourceAmount?.sourceBalanceRaw ||\n !sourceAmount.sourceChainId ||\n !sourceAmount.sourceTokenAddress\n ) {\n log('No valid source amount found for post-quote request', {\n transactionId,\n });\n return [];\n }\n\n const request: QuoteRequest = {\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote: true,\n paymentOverride,\n refundTo,\n sourceBalanceRaw: sourceAmount.sourceBalanceRaw,\n sourceChainId: sourceAmount.sourceChainId,\n sourceTokenAddress: sourceAmount.sourceTokenAddress,\n sourceTokenAmount: sourceAmount.sourceAmountRaw,\n targetAmountMinimum: '0',\n targetChainId: destinationToken.chainId,\n targetTokenAddress: destinationToken.address,\n };\n\n log('Post-quote request built', { transactionId, request });\n\n // Currently only single token post-quote flows are supported.\n // Multiple token support would require multiple quotes for each required token.\n return [request];\n}\n\nasync function refreshPaymentTokenBalance({\n from,\n messenger,\n paymentToken,\n signal,\n transactionId,\n updateTransactionData,\n}: {\n from: Hex;\n messenger: TransactionPayControllerMessenger;\n paymentToken: TransactionPaymentToken | undefined;\n signal: AbortSignal;\n transactionId: string;\n updateTransactionData: UpdateTransactionDataCallback;\n}): Promise<TransactionPaymentToken | undefined> {\n if (!paymentToken) {\n return undefined;\n }\n\n try {\n const fiatRates = getTokenFiatRate(\n messenger,\n paymentToken.address,\n paymentToken.chainId,\n );\n\n if (!fiatRates) {\n return paymentToken;\n }\n\n const liveBalance = await getLiveTokenBalance(\n messenger,\n from,\n paymentToken.chainId,\n paymentToken.address,\n );\n\n if (signal.aborted) {\n log('Payment token balance refresh aborted', { transactionId });\n return paymentToken;\n }\n\n const {\n raw: balanceRaw,\n human: balanceHuman,\n usd: balanceUsd,\n fiat: balanceFiat,\n } = computeTokenAmounts(liveBalance, paymentToken.decimals, fiatRates);\n\n const updatedToken = {\n ...paymentToken,\n balanceFiat,\n balanceHuman,\n balanceRaw,\n balanceUsd,\n };\n\n updateTransactionData(transactionId, (data) => {\n data.paymentToken = updatedToken;\n });\n\n log('Refreshed payment token balance', { transactionId, balanceRaw });\n\n return updatedToken;\n } catch (error) {\n log('Failed to refresh payment token balance', { transactionId, error });\n return paymentToken;\n }\n}\n\n/**\n * Retrieve quotes for a transaction.\n *\n * @param transaction - Transaction metadata.\n * @param from - Resolved wallet address (`accountOverride ?? txParams.from`).\n * @param requests - Quote requests.\n * @param paymentToken - Selected payment token, if any.\n * @param isQuoteRequired - Whether a quote is always required for the transaction.\n * @param isAccountEIP7702Compatible - Whether the account supports EIP-7702.\n * @param getStrategies - Callback to get ordered strategy names for a transaction.\n * @param messenger - Controller messenger.\n * @param fiatPaymentMethod - Selected fiat payment method ID, if applicable.\n * @param signal - Signal that aborts when the quote request is superseded.\n * @returns An object containing batch transactions and quotes.\n */\nasync function getQuotes(\n transaction: TransactionMeta,\n from: Hex,\n requests: QuoteRequest[],\n paymentToken: TransactionPaymentToken | undefined,\n isQuoteRequired: boolean,\n isAccountEIP7702Compatible: boolean,\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[],\n messenger: TransactionPayControllerMessenger,\n fiatPaymentMethod?: string,\n signal?: AbortSignal,\n): Promise<{\n batchTransactions: BatchTransaction[];\n error?: QuoteErrorInfo;\n quotes: TransactionPayQuote<Json>[];\n}> {\n const { id: transactionId } = transaction;\n const strategies = getStrategiesByName(\n getStrategies(transaction),\n (strategyName) => {\n log('Skipping unknown strategy', {\n strategy: strategyName,\n transactionId,\n });\n },\n );\n\n if (!requests?.length && !fiatPaymentMethod) {\n // A selected payment token with no conversion requests means the route is\n // direct. Return an explicit no-op quote so clients and the publish hook\n // can distinguish \"no conversion needed\" from \"quote needed but missing\".\n // Not applicable when a quote is always required, as an empty requests\n // list then means the source amounts could not be calculated.\n const noOpQuote =\n paymentToken && !isQuoteRequired\n ? buildNoOpQuote(from, paymentToken)\n : undefined;\n\n if (noOpQuote) {\n log('Built no-op quote for direct route', { transactionId });\n }\n\n return {\n batchTransactions: [],\n quotes: noOpQuote ? [noOpQuote] : [],\n };\n }\n\n const request = {\n accountSupports7702: isAccountEIP7702Compatible,\n fiatPaymentMethod,\n from,\n messenger,\n requests,\n signal,\n transaction,\n };\n\n let error: QuoteErrorInfo | undefined;\n\n for (const { name, strategy } of strategies) {\n try {\n const support = await checkStrategySupport(strategy, request);\n\n if (!support) {\n log('Strategy does not support request', {\n strategy: name,\n transactionId,\n });\n continue;\n }\n\n const quotes = (await strategy.getQuotes(\n request,\n )) as TransactionPayQuote<Json>[];\n\n if (!quotes.length) {\n log('Strategy returned no quotes', { strategy: name, transactionId });\n continue;\n }\n\n const isQuoteSupported = await checkStrategyQuoteSupport(strategy, {\n messenger,\n quotes,\n signal,\n transaction,\n });\n\n if (!isQuoteSupported) {\n log('Strategy does not support quotes', {\n strategy: name,\n transactionId,\n });\n continue;\n }\n\n log('Updated', { transactionId, quotes });\n\n const batchTransactions = strategy.getBatchTransactions\n ? await strategy.getBatchTransactions({\n messenger,\n quotes,\n signal,\n })\n : [];\n\n log('Batch transactions', { transactionId, batchTransactions });\n\n return {\n batchTransactions,\n quotes,\n };\n } catch (caughtError) {\n if (signal?.aborted) {\n throw caughtError;\n }\n\n error ??= isQuoteError(caughtError)\n ? caughtError.info\n : { message: (caughtError as Error).message, reason: 'no-quotes' };\n\n if (\n isQuoteError(caughtError) &&\n caughtError.info.reason === 'insufficient-source-balance' &&\n caughtError.quotes?.length\n ) {\n log('Keeping quotes despite insufficient source balance', {\n strategy: name,\n transactionId,\n });\n return {\n batchTransactions: [],\n error: caughtError.info,\n quotes: caughtError.quotes as TransactionPayQuote<Json>[],\n };\n }\n\n log('Strategy failed, trying next', {\n error: caughtError,\n strategy: name,\n transactionId,\n });\n continue;\n }\n }\n\n log('No quotes available', { transactionId });\n\n return {\n batchTransactions: [],\n error,\n quotes: [],\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"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","sourcesContent":["import { TransactionStatus } from '@metamask/transaction-controller';\nimport type { BatchTransaction } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { PaymentOverride, TransactionPayStrategy } from '../constants.js';\nimport { projectLogger } from '../logger.js';\nimport type {\n QuoteRequest,\n QuoteErrorInfo,\n TransactionData,\n GetBalanceCallback,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPaySourceAmount,\n TransactionPayTotals,\n TransactionPaymentToken,\n UpdateTransactionDataCallback,\n} from '../types.js';\nimport { accountSupports7702 } from './7702.js';\nimport { buildNoOpQuote } from './no-op-quote.js';\nimport { updateSourceAmounts } from './source-amounts.js';\nimport {\n checkStrategyQuoteSupport,\n checkStrategySupport,\n getStrategiesByName,\n getStrategyByName,\n} from './strategy.js';\nimport {\n computeTokenAmounts,\n getLiveTokenBalance,\n getTokenFiatRate,\n} from './token.js';\nimport { calculateTotals } from './totals.js';\nimport { getTransaction, updateTransaction } from './transaction.js';\nimport { isQuoteError } from './validation.js';\n\nconst DEFAULT_REFRESH_INTERVAL = 30 * 1000; // 30 Seconds\n\nconst log = createModuleLogger(projectLogger, 'quotes');\n\nconst inFlightQuoteRequests = new Map<string, AbortController>();\n\nexport type UpdateQuotesRequest = {\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];\n messenger: TransactionPayControllerMessenger;\n transactionData: TransactionData | undefined;\n transactionId: string;\n updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the quotes for a specific transaction.\n *\n * Calls for the same `transactionId` are serialised: a fresh call aborts any\n * previous in-flight call so a slower stale response cannot overwrite a newer\n * one in state.\n *\n * @param request - Request parameters.\n * @returns Boolean indicating if the quotes were updated. Returns `false` when\n * the call was aborted by a subsequent call for the same transaction.\n */\nexport async function updateQuotes(\n request: UpdateQuotesRequest,\n): Promise<boolean> {\n const {\n getStrategies,\n messenger,\n transactionData,\n transactionId,\n updateTransactionData,\n } = request;\n\n const transaction = getTransaction(transactionId, messenger);\n\n if (!transaction || !transactionData) {\n throw new Error('Transaction not found');\n }\n\n if (transaction?.status !== TransactionStatus.unapproved) {\n return false;\n }\n\n log('Updating quotes', { transactionId });\n\n const {\n accountOverride,\n atomic,\n fiatPayment,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote,\n isQuoteRequired,\n paymentOverride,\n paymentToken: originalPaymentToken,\n refundTo,\n sourceAmounts,\n tokens,\n } = transactionData;\n\n const from = accountOverride ?? (transaction.txParams.from as Hex);\n\n const controller = abortPreviousAndCreateController(transactionId);\n const { signal } = controller;\n\n updateTransactionData(transactionId, (data) => {\n data.isLoading = true;\n data.quoteError = undefined;\n });\n\n try {\n const paymentToken = await refreshPaymentTokenBalance({\n from,\n messenger,\n paymentToken: originalPaymentToken,\n signal,\n transactionId,\n updateTransactionData,\n });\n\n if (signal.aborted) {\n log('Quote request aborted before building requests', { transactionId });\n return false;\n }\n\n // Refreshing the balance above re-derives max source amounts, so read the\n // latest values instead of the snapshot taken before the refresh. Using\n // the snapshot quotes a max amount against a stale balance, which requests\n // a zero source amount when the token was selected before its balance\n // loaded.\n const latestSourceAmounts =\n getSourceAmounts(messenger, transactionId) ?? sourceAmounts;\n\n const requests = buildQuoteRequests({\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount: isMaxAmount ?? false,\n isPolymarketDepositWallet,\n isPostQuote,\n paymentOverride,\n paymentToken,\n refundTo,\n sourceAmounts: latestSourceAmounts,\n tokens,\n transactionId,\n });\n\n const supports7702 = accountSupports7702(messenger, from);\n\n const { batchTransactions, error, quotes } = await getQuotes(\n transaction,\n from,\n requests,\n paymentToken,\n isQuoteRequired ?? false,\n supports7702,\n getStrategies,\n messenger,\n fiatPayment?.selectedPaymentMethodId,\n signal,\n );\n\n if (signal.aborted) {\n log('Quote request aborted before persisting results', { transactionId });\n return false;\n }\n\n // No-op quotes mark direct routes. They have no fees or amounts and the\n // transaction is signed and submitted locally, so totals and transaction\n // sync must treat them as \"no quotes\".\n const executableQuotes = quotes.filter(\n (quote) => quote.strategy !== TransactionPayStrategy.None,\n );\n\n const totals = calculateTotals({\n fiatPaymentAmount: fiatPayment?.amountFiat,\n messenger,\n quotes: executableQuotes,\n tokens,\n transaction,\n });\n\n log('Calculated totals', { transactionId, totals });\n\n syncTransaction({\n batchTransactions,\n selectedFiatPayment: fiatPayment?.selectedPaymentMethodId,\n hasQuotes: executableQuotes.length > 0,\n isPostQuote,\n messenger,\n paymentToken,\n strategy: executableQuotes[0]?.strategy,\n totals,\n transactionId,\n });\n\n updateTransactionData(transactionId, (data) => {\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n data.quotes = quotes as never;\n data.quoteError = error;\n data.quotesLastUpdated = Date.now();\n data.totals = totals;\n });\n } catch (error) {\n if (signal.aborted) {\n log('Quote request aborted', { transactionId, reason: signal.reason });\n return false;\n }\n throw error;\n } finally {\n if (!signal.aborted) {\n updateTransactionData(transactionId, (data) => {\n data.isLoading = false;\n });\n }\n clearControllerIfCurrent(transactionId, controller);\n }\n\n return true;\n}\n\n/**\n * Sync batch transactions to the transaction meta.\n *\n * @param request - Request object.\n * @param request.batchTransactions - Batch transactions to sync.\n * @param request.hasQuotes - Whether MM Pay produced any quotes for this transaction.\n * @param request.isPostQuote - Whether this is a post-quote flow.\n * @param request.messenger - Messenger instance.\n * @param request.paymentToken - Payment token (source for standard flows, destination for post-quote).\n * @param request.selectedFiatPayment - Selected fiat payment method ID.\n * @param request.strategy - Strategy of the executable quotes.\n * @param request.totals - Calculated totals.\n * @param request.transactionId - ID of the transaction to sync.\n */\nfunction syncTransaction({\n batchTransactions,\n hasQuotes,\n isPostQuote,\n messenger,\n paymentToken,\n selectedFiatPayment,\n strategy,\n totals,\n transactionId,\n}: {\n batchTransactions: BatchTransaction[];\n selectedFiatPayment?: string;\n hasQuotes: boolean;\n isPostQuote?: boolean;\n messenger: TransactionPayControllerMessenger;\n paymentToken: TransactionPaymentToken | undefined;\n strategy?: TransactionPayStrategy;\n totals: TransactionPayTotals;\n transactionId: string;\n}): void {\n if (!paymentToken && !selectedFiatPayment) {\n return;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Update transaction pay data',\n },\n (tx: TransactionMeta) => {\n tx.batchTransactions = batchTransactions;\n tx.batchTransactionsOptions = {};\n\n // When MM Pay has produced quotes, it owns submission of this transaction\n // via its strategy publish hook, so the parent must be marked externally\n // signed to skip the local `KeyringController:signTransaction` call.\n // When there are no quotes (e.g. user selected the target token as the\n // payment token in a Predict flow), the transaction falls back to normal\n // local signing, so the flag is cleared to allow that.\n // If gas is sponsored, TC owns this field — it is set based on the\n // Sentinel simulation result and must not be cleared here. Same-token\n // flows (e.g. Monad mUSD withdrawal via a Money Account) produce no\n // quotes but still need external sign because the account cannot sign\n // locally.\n if (!tx.isGasFeeSponsored) {\n tx.isExternalSign = hasQuotes;\n }\n\n tx.metamaskPay = {\n bridgeFeeFiat: totals.fees.provider.usd,\n chainId: paymentToken?.chainId,\n isPostQuote,\n networkFeeFiat: totals.fees.sourceNetwork.estimate.usd,\n strategy,\n targetFiat: totals.targetAmount.usd,\n tokenAddress: paymentToken?.address,\n totalFiat: totals.total.usd,\n };\n },\n );\n}\n\n/**\n * Refresh source amounts and quotes for all transactions if expired.\n *\n * @param messenger - Messenger instance.\n * @param updateTransactionData - Callback to update transaction data.\n * @param getStrategies - Callback to get ordered strategy names for a transaction.\n * @param getBalance - Optional callback to override the source balance used for max-amount calculation.\n */\nexport async function refreshQuotes(\n messenger: TransactionPayControllerMessenger,\n updateTransactionData: UpdateTransactionDataCallback,\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[],\n getBalance?: GetBalanceCallback,\n): Promise<void> {\n const state = messenger.call('TransactionPayController:getState');\n const transactionIds = Object.keys(state.transactionData);\n\n for (const transactionId of transactionIds) {\n const transactionData = state.transactionData[transactionId];\n const { isLoading, quotes, quotesLastUpdated } = transactionData;\n\n if (isLoading || !quotes?.length) {\n continue;\n }\n\n // No-op quotes mark direct routes and have nothing to refresh. They are\n // regenerated whenever the transaction data changes.\n if (\n quotes.every((quote) => quote.strategy === TransactionPayStrategy.None)\n ) {\n continue;\n }\n\n const strategyName = quotes[0].strategy;\n const strategy = getStrategyByName(strategyName);\n\n const refreshInterval =\n (await strategy.getRefreshInterval?.({\n chainId: quotes[0].request.sourceChainId,\n messenger,\n transactionId,\n })) ?? DEFAULT_REFRESH_INTERVAL;\n\n const isExpired = Date.now() - (quotesLastUpdated ?? 0) > refreshInterval;\n\n if (!isExpired) {\n continue;\n }\n\n updateTransactionData(transactionId, (data) =>\n updateSourceAmounts(\n transactionId,\n /* oxlint-disable typescript/no-unnecessary-type-assertion */\n data as never,\n /* oxlint-enable typescript/no-unnecessary-type-assertion */\n messenger,\n getBalance,\n ),\n );\n\n const latestTransactionData = messenger.call(\n 'TransactionPayController:getState',\n ).transactionData[transactionId];\n\n const isUpdated = await updateQuotes({\n getStrategies,\n messenger,\n transactionData: latestTransactionData,\n transactionId,\n updateTransactionData,\n });\n\n if (isUpdated) {\n log('Refreshed quotes', { transactionId, strategy: strategyName });\n }\n }\n}\n\nfunction abortPreviousAndCreateController(\n transactionId: string,\n): AbortController {\n const previous = inFlightQuoteRequests.get(transactionId);\n\n if (previous && !previous.signal.aborted) {\n log('Aborting previous quote request', { transactionId });\n previous.abort(new Error('Superseded by newer quote request'));\n }\n\n const controller = new AbortController();\n inFlightQuoteRequests.set(transactionId, controller);\n return controller;\n}\n\nfunction clearControllerIfCurrent(\n transactionId: string,\n controller: AbortController,\n): void {\n if (inFlightQuoteRequests.get(transactionId) === controller) {\n inFlightQuoteRequests.delete(transactionId);\n }\n}\n\n/**\n * Read the current source amounts for a transaction from controller state.\n *\n * @param messenger - Messenger instance.\n * @param transactionId - ID of the transaction.\n * @returns The source amounts, or `undefined` if the transaction has none.\n */\nfunction getSourceAmounts(\n messenger: TransactionPayControllerMessenger,\n transactionId: string,\n): TransactionPaySourceAmount[] | undefined {\n return messenger.call('TransactionPayController:getState').transactionData[\n transactionId\n ]?.sourceAmounts;\n}\n\n/**\n * Build quote requests required to retrieve quotes.\n *\n * @param request - Request parameters.\n * @param request.atomic - Whether the target transaction is executed atomically with the Relay quote.\n * @param request.from - Address from which the transaction is sent.\n * @param request.isHyperliquidSource - Whether the source of funds is HyperLiquid.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.isPolymarketDepositWallet - Whether the source of funds is a Polymarket deposit wallet.\n * @param request.isPostQuote - Whether this is a post-quote flow.\n * @param request.paymentOverride - Optional payment override type for the transaction.\n * @param request.paymentToken - Payment token (source for standard flows, destination for post-quote).\n * @param request.refundTo - Optional address to receive refunds if the Relay transaction fails.\n * @param request.sourceAmounts - Source amounts for the transaction.\n * @param request.tokens - Required tokens for the transaction.\n * @param request.transactionId - ID of the transaction.\n * @returns Array of quote requests.\n */\nfunction buildQuoteRequests({\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote,\n paymentOverride,\n paymentToken,\n refundTo,\n sourceAmounts,\n tokens,\n transactionId,\n}: {\n atomic?: boolean;\n from: Hex;\n isHyperliquidSource?: boolean;\n isMaxAmount: boolean;\n isPolymarketDepositWallet?: boolean;\n isPostQuote?: boolean;\n paymentOverride?: PaymentOverride;\n paymentToken: TransactionPaymentToken | undefined;\n refundTo?: Hex;\n sourceAmounts: TransactionPaySourceAmount[] | undefined;\n tokens: TransactionPayRequiredToken[];\n transactionId: string;\n}): QuoteRequest[] {\n if (!paymentToken) {\n return [];\n }\n\n if (isPostQuote) {\n return buildPostQuoteRequests({\n atomic,\n destinationToken: paymentToken,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n paymentOverride,\n refundTo,\n sourceAmounts,\n transactionId,\n });\n }\n\n // Standard flow: source = paymentToken, target = required tokens\n const requests = (sourceAmounts ?? []).map((sourceAmount) => {\n const token = tokens.find(\n (singleToken) => singleToken.address === sourceAmount.targetTokenAddress,\n ) as TransactionPayRequiredToken;\n\n return {\n atomic,\n from,\n isMaxAmount,\n paymentOverride,\n refundTo,\n sourceBalanceRaw: paymentToken.balanceRaw,\n sourceChainId: paymentToken.chainId,\n sourceTokenAddress: paymentToken.address,\n sourceTokenAmount: sourceAmount.sourceAmountRaw,\n targetAmountMinimum: token.allowUnderMinimum ? '0' : token.amountRaw,\n targetChainId: token.chainId,\n targetTokenAddress: token.address,\n };\n });\n\n if (!requests.length) {\n log('No quote requests', { transactionId });\n }\n\n return requests;\n}\n\n/**\n * Build quote requests for post-quote flows.\n * In this flow, the source is the transaction's required token,\n * and the target is the user's selected destination token (paymentToken).\n *\n * @param request - Request parameters.\n * @param request.atomic - Whether the target transaction is executed atomically with the Relay quote.\n * @param request.destinationToken - Destination token (paymentToken in post-quote mode).\n * @param request.from - Address from which the transaction is sent.\n * @param request.isHyperliquidSource - Whether the source of funds is HyperLiquid.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.isPolymarketDepositWallet - Whether the source of funds is a Polymarket deposit wallet.\n * @param request.paymentOverride - Optional payment override type for the transaction.\n * @param request.refundTo - Optional address to receive refunds if the Relay transaction fails.\n * @param request.sourceAmounts - Source amounts for the transaction (includes source token info).\n * @param request.transactionId - ID of the transaction.\n * @returns Array of quote requests for post-quote flow.\n */\nfunction buildPostQuoteRequests({\n atomic,\n destinationToken,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n paymentOverride,\n refundTo,\n sourceAmounts,\n transactionId,\n}: {\n atomic?: boolean;\n destinationToken: TransactionPaymentToken;\n from: Hex;\n isHyperliquidSource?: boolean;\n isMaxAmount: boolean;\n isPolymarketDepositWallet?: boolean;\n paymentOverride?: PaymentOverride;\n refundTo?: Hex;\n sourceAmounts: TransactionPaySourceAmount[] | undefined;\n transactionId: string;\n}): QuoteRequest[] {\n // Find the source amount where targetTokenAddress matches the destination token\n const sourceAmount = sourceAmounts?.find(\n (amount) =>\n amount.targetTokenAddress.toLowerCase() ===\n destinationToken.address.toLowerCase(),\n );\n\n // Same-token-same-chain cases are already filtered in source-amounts.ts\n if (\n !sourceAmount?.sourceBalanceRaw ||\n !sourceAmount.sourceChainId ||\n !sourceAmount.sourceTokenAddress\n ) {\n log('No valid source amount found for post-quote request', {\n transactionId,\n });\n return [];\n }\n\n const request: QuoteRequest = {\n atomic,\n from,\n isHyperliquidSource,\n isMaxAmount,\n isPolymarketDepositWallet,\n isPostQuote: true,\n paymentOverride,\n refundTo,\n sourceBalanceRaw: sourceAmount.sourceBalanceRaw,\n sourceChainId: sourceAmount.sourceChainId,\n sourceTokenAddress: sourceAmount.sourceTokenAddress,\n sourceTokenAmount: sourceAmount.sourceAmountRaw,\n targetAmountMinimum: '0',\n targetChainId: destinationToken.chainId,\n targetTokenAddress: destinationToken.address,\n };\n\n log('Post-quote request built', { transactionId, request });\n\n // Currently only single token post-quote flows are supported.\n // Multiple token support would require multiple quotes for each required token.\n return [request];\n}\n\nasync function refreshPaymentTokenBalance({\n from,\n messenger,\n paymentToken,\n signal,\n transactionId,\n updateTransactionData,\n}: {\n from: Hex;\n messenger: TransactionPayControllerMessenger;\n paymentToken: TransactionPaymentToken | undefined;\n signal: AbortSignal;\n transactionId: string;\n updateTransactionData: UpdateTransactionDataCallback;\n}): Promise<TransactionPaymentToken | undefined> {\n if (!paymentToken) {\n return undefined;\n }\n\n try {\n const fiatRates = getTokenFiatRate(\n messenger,\n paymentToken.address,\n paymentToken.chainId,\n );\n\n if (!fiatRates) {\n return paymentToken;\n }\n\n const liveBalance = await getLiveTokenBalance(\n messenger,\n from,\n paymentToken.chainId,\n paymentToken.address,\n );\n\n if (signal.aborted) {\n log('Payment token balance refresh aborted', { transactionId });\n return paymentToken;\n }\n\n const {\n raw: balanceRaw,\n human: balanceHuman,\n usd: balanceUsd,\n fiat: balanceFiat,\n } = computeTokenAmounts(liveBalance, paymentToken.decimals, fiatRates);\n\n const updatedToken = {\n ...paymentToken,\n balanceFiat,\n balanceHuman,\n balanceRaw,\n balanceUsd,\n };\n\n updateTransactionData(transactionId, (data) => {\n data.paymentToken = updatedToken;\n });\n\n log('Refreshed payment token balance', { transactionId, balanceRaw });\n\n return updatedToken;\n } catch (error) {\n log('Failed to refresh payment token balance', { transactionId, error });\n return paymentToken;\n }\n}\n\n/**\n * Retrieve quotes for a transaction.\n *\n * @param transaction - Transaction metadata.\n * @param from - Resolved wallet address (`accountOverride ?? txParams.from`).\n * @param requests - Quote requests.\n * @param paymentToken - Selected payment token, if any.\n * @param isQuoteRequired - Whether a quote is always required for the transaction.\n * @param isAccountEIP7702Compatible - Whether the account supports EIP-7702.\n * @param getStrategies - Callback to get ordered strategy names for a transaction.\n * @param messenger - Controller messenger.\n * @param fiatPaymentMethod - Selected fiat payment method ID, if applicable.\n * @param signal - Signal that aborts when the quote request is superseded.\n * @returns An object containing batch transactions and quotes.\n */\nasync function getQuotes(\n transaction: TransactionMeta,\n from: Hex,\n requests: QuoteRequest[],\n paymentToken: TransactionPaymentToken | undefined,\n isQuoteRequired: boolean,\n isAccountEIP7702Compatible: boolean,\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[],\n messenger: TransactionPayControllerMessenger,\n fiatPaymentMethod?: string,\n signal?: AbortSignal,\n): Promise<{\n batchTransactions: BatchTransaction[];\n error?: QuoteErrorInfo;\n quotes: TransactionPayQuote<Json>[];\n}> {\n const { id: transactionId } = transaction;\n const strategies = getStrategiesByName(\n getStrategies(transaction),\n (strategyName) => {\n log('Skipping unknown strategy', {\n strategy: strategyName,\n transactionId,\n });\n },\n );\n\n if (!requests?.length && !fiatPaymentMethod) {\n // A selected payment token with no conversion requests means the route is\n // direct. Return an explicit no-op quote so clients and the publish hook\n // can distinguish \"no conversion needed\" from \"quote needed but missing\".\n // Not applicable when a quote is always required, as an empty requests\n // list then means the source amounts could not be calculated.\n const noOpQuote =\n paymentToken && !isQuoteRequired\n ? buildNoOpQuote(from, paymentToken)\n : undefined;\n\n if (noOpQuote) {\n log('Built no-op quote for direct route', { transactionId });\n }\n\n return {\n batchTransactions: [],\n quotes: noOpQuote ? [noOpQuote] : [],\n };\n }\n\n const request = {\n accountSupports7702: isAccountEIP7702Compatible,\n fiatPaymentMethod,\n from,\n messenger,\n requests,\n signal,\n transaction,\n };\n\n let error: QuoteErrorInfo | undefined;\n\n for (const { name, strategy } of strategies) {\n try {\n const support = await checkStrategySupport(strategy, request);\n\n if (!support) {\n log('Strategy does not support request', {\n strategy: name,\n transactionId,\n });\n continue;\n }\n\n const quotes = (await strategy.getQuotes(\n request,\n )) as TransactionPayQuote<Json>[];\n\n if (!quotes.length) {\n log('Strategy returned no quotes', { strategy: name, transactionId });\n continue;\n }\n\n const isQuoteSupported = await checkStrategyQuoteSupport(strategy, {\n messenger,\n quotes,\n signal,\n transaction,\n });\n\n if (!isQuoteSupported) {\n log('Strategy does not support quotes', {\n strategy: name,\n transactionId,\n });\n continue;\n }\n\n log('Updated', { transactionId, quotes });\n\n const batchTransactions = strategy.getBatchTransactions\n ? await strategy.getBatchTransactions({\n messenger,\n quotes,\n signal,\n })\n : [];\n\n log('Batch transactions', { transactionId, batchTransactions });\n\n return {\n batchTransactions,\n quotes,\n };\n } catch (caughtError) {\n if (signal?.aborted) {\n throw caughtError;\n }\n\n error ??= isQuoteError(caughtError)\n ? caughtError.info\n : { message: (caughtError as Error).message, reason: 'no-quotes' };\n\n if (\n isQuoteError(caughtError) &&\n caughtError.info.reason === 'insufficient-source-balance' &&\n caughtError.quotes?.length\n ) {\n log('Keeping quotes despite insufficient source balance', {\n strategy: name,\n transactionId,\n });\n return {\n batchTransactions: [],\n error: caughtError.info,\n quotes: caughtError.quotes as TransactionPayQuote<Json>[],\n };\n }\n\n log('Strategy failed, trying next', {\n error: caughtError,\n strategy: name,\n transactionId,\n });\n continue;\n }\n }\n\n log('No quotes available', { transactionId });\n\n return {\n batchTransactions: [],\n error,\n quotes: [],\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/transaction-pay-controller",
|
|
3
|
-
"version": "30.4.
|
|
3
|
+
"version": "30.4.3-preview-46de95678",
|
|
4
4
|
"description": "Manages alternate payment strategies to provide required funds for transactions in MetaMask",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|