@metamask/transaction-pay-controller 24.1.0 → 25.1.0
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 +22 -1
- package/dist/constants.cjs +8 -2
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +7 -1
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +7 -1
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +8 -2
- package/dist/constants.mjs.map +1 -1
- package/dist/helpers/QuoteRefresher.cjs +2 -1
- package/dist/helpers/QuoteRefresher.cjs.map +1 -1
- package/dist/helpers/QuoteRefresher.d.cts.map +1 -1
- package/dist/helpers/QuoteRefresher.d.mts.map +1 -1
- package/dist/helpers/QuoteRefresher.mjs +2 -1
- package/dist/helpers/QuoteRefresher.mjs.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.cjs +5 -3
- package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.d.cts.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.d.mts.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.mjs +5 -3
- package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -1
- package/dist/strategy/across/AcrossStrategy.cjs +6 -3
- package/dist/strategy/across/AcrossStrategy.cjs.map +1 -1
- package/dist/strategy/across/AcrossStrategy.d.cts.map +1 -1
- package/dist/strategy/across/AcrossStrategy.d.mts.map +1 -1
- package/dist/strategy/across/AcrossStrategy.mjs +7 -4
- package/dist/strategy/across/AcrossStrategy.mjs.map +1 -1
- package/dist/strategy/across/across-quotes.cjs +6 -3
- package/dist/strategy/across/across-quotes.cjs.map +1 -1
- package/dist/strategy/across/across-quotes.d.cts.map +1 -1
- package/dist/strategy/across/across-quotes.d.mts.map +1 -1
- package/dist/strategy/across/across-quotes.mjs +6 -3
- package/dist/strategy/across/across-quotes.mjs.map +1 -1
- package/dist/strategy/across/across-submit.cjs +3 -3
- package/dist/strategy/across/across-submit.cjs.map +1 -1
- package/dist/strategy/across/across-submit.d.cts.map +1 -1
- package/dist/strategy/across/across-submit.d.mts.map +1 -1
- package/dist/strategy/across/across-submit.mjs +5 -5
- package/dist/strategy/across/across-submit.mjs.map +1 -1
- package/dist/strategy/across/authorization-list.cjs +2 -2
- package/dist/strategy/across/authorization-list.cjs.map +1 -1
- package/dist/strategy/across/authorization-list.d.cts.map +1 -1
- package/dist/strategy/across/authorization-list.d.mts.map +1 -1
- package/dist/strategy/across/authorization-list.mjs +2 -2
- package/dist/strategy/across/authorization-list.mjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.cjs +3 -2
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
- package/dist/strategy/relay/relay-quotes.mjs +3 -2
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +1 -1
- package/dist/tests/messenger-mock.d.mts +1 -1
- package/dist/utils/no-op-quote.cjs +55 -0
- package/dist/utils/no-op-quote.cjs.map +1 -0
- package/dist/utils/no-op-quote.d.cts +18 -0
- package/dist/utils/no-op-quote.d.cts.map +1 -0
- package/dist/utils/no-op-quote.d.mts +18 -0
- package/dist/utils/no-op-quote.d.mts.map +1 -0
- package/dist/utils/no-op-quote.mjs +51 -0
- package/dist/utils/no-op-quote.mjs.map +1 -0
- package/dist/utils/quotes.cjs +29 -6
- package/dist/utils/quotes.cjs.map +1 -1
- package/dist/utils/quotes.d.cts.map +1 -1
- package/dist/utils/quotes.d.mts.map +1 -1
- package/dist/utils/quotes.mjs +29 -6
- package/dist/utils/quotes.mjs.map +1 -1
- package/dist/utils/transaction.cjs +1 -16
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +0 -10
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +0 -10
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +1 -15
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +5 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [25.1.0]
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Consume `hasTransactionType` helper from `@metamask/transaction-controller` to derive relevant transaction type against the top-level `TransactionMeta` ([#9570](https://github.com/MetaMask/core/pull/9570))
|
|
15
|
+
- Bump `@metamask/transaction-controller` from `^69.0.0` to `^69.2.0` ([#9568](https://github.com/MetaMask/core/pull/9568), [#9589](https://github.com/MetaMask/core/pull/9589))
|
|
16
|
+
- Bump `@metamask/assets-controller` from `^11.0.0` to `^11.1.0` ([#9579](https://github.com/MetaMask/core/pull/9579))
|
|
17
|
+
|
|
18
|
+
## [25.0.0]
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- Store a no-op quote (`TransactionPayStrategy.None`) when a payment token is selected but the route needs no conversion, so clients can tell "no conversion needed" apart from "quote missing" ([#9484](https://github.com/MetaMask/core/pull/9484))
|
|
23
|
+
- Add `None` value to `TransactionPayStrategy` enum ([#9484](https://github.com/MetaMask/core/pull/9484))
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **BREAKING:** Quotes stored in `transactionData` can now contain a single no-op quote with the `none` strategy; clients that read quotes for display, metrics, or publish validation must ignore or handle no-op quotes ([#9484](https://github.com/MetaMask/core/pull/9484))
|
|
28
|
+
|
|
10
29
|
## [24.1.0]
|
|
11
30
|
|
|
12
31
|
### Added
|
|
@@ -1289,7 +1308,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1289
1308
|
|
|
1290
1309
|
- Initial release ([#6820](https://github.com/MetaMask/core/pull/6820))
|
|
1291
1310
|
|
|
1292
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@
|
|
1311
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@25.1.0...HEAD
|
|
1312
|
+
[25.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@25.0.0...@metamask/transaction-pay-controller@25.1.0
|
|
1313
|
+
[25.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@24.1.0...@metamask/transaction-pay-controller@25.0.0
|
|
1293
1314
|
[24.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@24.0.3...@metamask/transaction-pay-controller@24.1.0
|
|
1294
1315
|
[24.0.3]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@24.0.2...@metamask/transaction-pay-controller@24.0.3
|
|
1295
1316
|
[24.0.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@24.0.1...@metamask/transaction-pay-controller@24.0.2
|
package/dist/constants.cjs
CHANGED
|
@@ -57,12 +57,18 @@ var TransactionPayStrategy;
|
|
|
57
57
|
(function (TransactionPayStrategy) {
|
|
58
58
|
TransactionPayStrategy["Across"] = "across";
|
|
59
59
|
TransactionPayStrategy["Fiat"] = "fiat";
|
|
60
|
+
/**
|
|
61
|
+
* Internal marker for no-op quotes generated when the controller determines
|
|
62
|
+
* that no conversion is needed. Not a routable strategy.
|
|
63
|
+
*/
|
|
64
|
+
TransactionPayStrategy["None"] = "none";
|
|
60
65
|
TransactionPayStrategy["Relay"] = "relay";
|
|
61
66
|
TransactionPayStrategy["Server"] = "server";
|
|
62
67
|
})(TransactionPayStrategy || (exports.TransactionPayStrategy = TransactionPayStrategy = {}));
|
|
63
|
-
const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));
|
|
68
|
+
const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy).filter((strategy) => strategy !== TransactionPayStrategy.None));
|
|
64
69
|
/**
|
|
65
|
-
* Checks if a value is a valid transaction pay strategy.
|
|
70
|
+
* Checks if a value is a valid, routable transaction pay strategy.
|
|
71
|
+
* The internal no-op marker is not routable.
|
|
66
72
|
*
|
|
67
73
|
* @param strategy - Candidate strategy value.
|
|
68
74
|
* @returns True if the value is a valid strategy.
|
package/dist/constants.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,6EAAmE;AAGtD,QAAA,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;GAGG;AACU,QAAA,mBAAmB,GAAsB;IACpD,wCAAe,CAAC,YAAY;IAC5B,wCAAe,CAAC,oBAAoB;CACrC,CAAC;AAEW,QAAA,iBAAiB,GAAG,QAAe,CAAC;AACpC,QAAA,gBAAgB,GAAG,KAAY,CAAC;AAChC,QAAA,gBAAgB,GAAG,MAAa,CAAC;AACjC,QAAA,kBAAkB,GAAG,OAAc,CAAC;AACpC,QAAA,cAAc,GAAG,MAAa,CAAC;AAE/B,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,kBAAkB,GAC7B,4CAAmD,CAAC;AAEzC,QAAA,sBAAsB,GAAG,oCAAoC,CAAC;AAE9D,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,aAAa,GAAG,CAAC,CAAC;AAElB,QAAA,yBAAyB,GAAwB;IAC5D,CAAC,wBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM;CAChC,CAAC;AAEW,QAAA,WAAW,GAAuB;IAC7C,UAAU;IACV,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,yBAAiB,CAAC,EAAE,CAAC,6BAAqB,CAAC,WAAW,EAAS,CAAC;IACjE,QAAQ;IACR,QAAQ,EAAE;QACR,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,wBAAgB,CAAC,EAAE;QAClB,6BAAqB,CAAC,WAAW,EAAS;QAC1C,4BAAoB,CAAC,WAAW,EAAS;KAC1C;IACD,CAAC,0BAAkB,CAAC,EAAE,CAAC,8BAAsB,CAAC,EAAE,OAAO;CACxD,CAAC;AAEF,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,kCAAe,CAAA;IACf,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,6EAAmE;AAGtD,QAAA,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;GAGG;AACU,QAAA,mBAAmB,GAAsB;IACpD,wCAAe,CAAC,YAAY;IAC5B,wCAAe,CAAC,oBAAoB;CACrC,CAAC;AAEW,QAAA,iBAAiB,GAAG,QAAe,CAAC;AACpC,QAAA,gBAAgB,GAAG,KAAY,CAAC;AAChC,QAAA,gBAAgB,GAAG,MAAa,CAAC;AACjC,QAAA,kBAAkB,GAAG,OAAc,CAAC;AACpC,QAAA,cAAc,GAAG,MAAa,CAAC;AAE/B,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,kBAAkB,GAC7B,4CAAmD,CAAC;AAEzC,QAAA,sBAAsB,GAAG,oCAAoC,CAAC;AAE9D,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAC5B,QAAA,aAAa,GAAG,CAAC,CAAC;AAElB,QAAA,yBAAyB,GAAwB;IAC5D,CAAC,wBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM;CAChC,CAAC;AAEW,QAAA,WAAW,GAAuB;IAC7C,UAAU;IACV,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,yBAAiB,CAAC,EAAE,CAAC,6BAAqB,CAAC,WAAW,EAAS,CAAC;IACjE,QAAQ;IACR,QAAQ,EAAE;QACR,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,wBAAgB,CAAC,EAAE;QAClB,6BAAqB,CAAC,WAAW,EAAS;QAC1C,4BAAoB,CAAC,WAAW,EAAS;KAC1C;IACD,CAAC,0BAAkB,CAAC,EAAE,CAAC,8BAAsB,CAAC,EAAE,OAAO;CACxD,CAAC;AAEF,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,kCAAe,CAAA;IACf,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAED,IAAY,sBAUX;AAVD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,uCAAa,CAAA;IACb;;;OAGG;IACH,uCAAa,CAAA;IACb,yCAAe,CAAA;IACf,2CAAiB,CAAA;AACnB,CAAC,EAVW,sBAAsB,sCAAtB,sBAAsB,QAUjC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CACvD,CACF,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,wBAAwB,CACtC,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAkC,CAAC,CAAC;AAClE,CAAC;AAJD,4DAIC","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\n\n/**\n * Parent transaction types that represent a Hyperliquid perps deposit and\n * share the same Arbitrum-USDC → Hypercore handling in pay strategies.\n */\nexport const PERPS_DEPOSIT_TYPES: TransactionType[] = [\n TransactionType.perpsDeposit,\n TransactionType.perpsDepositAndOrder,\n];\n\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_MAINNET = '0x1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' as Hex;\nexport const CHAIN_ID_MONAD = '0x8f' as Hex;\n\nexport const NATIVE_TOKEN_ADDRESS =\n '0x0000000000000000000000000000000000000000' as Hex;\n\nexport const ARBITRUM_USDC_ADDRESS =\n '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' as Hex;\n\nexport const POLYGON_USDCE_ADDRESS =\n '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174' as Hex;\n\nexport const POLYGON_PUSD_ADDRESS =\n '0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB' as Hex;\n\nexport const MUSD_MONAD_ADDRESS =\n '0xaca92e438df0b2401ff60da7e4337b687a2435da' as Hex;\n\nexport const HYPERCORE_USDC_ADDRESS = '0x00000000000000000000000000000000';\n\nexport const HYPERCORE_USDC_DECIMALS = 8;\nexport const USDC_DECIMALS = 6;\n\nexport const SLIP44_COIN_TYPE_BY_CHAIN: Record<Hex, number> = {\n [CHAIN_ID_POLYGON]: 966, // POL\n};\n\nexport const STABLECOINS: Record<Hex, Hex[]> = {\n // Mainnet\n '0x1': [\n '0xaca92e438df0b2401ff60da7e4337b687a2435da', // MUSD\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC\n '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT\n ],\n [CHAIN_ID_ARBITRUM]: [ARBITRUM_USDC_ADDRESS.toLowerCase() as Hex],\n // Linea\n '0xe708': [\n '0xaca92e438df0b2401ff60da7e4337b687a2435da', // MUSD\n '0x176211869ca2b568f2a7d4ee941e073a821ee1ff', // USDC\n '0xa219439258ca9da29e9cc4ce5596924745e12b93', // USDT\n ],\n [CHAIN_ID_POLYGON]: [\n POLYGON_USDCE_ADDRESS.toLowerCase() as Hex,\n POLYGON_PUSD_ADDRESS.toLowerCase() as Hex,\n ],\n [CHAIN_ID_HYPERCORE]: [HYPERCORE_USDC_ADDRESS], // USDC\n};\n\nexport enum PaymentOverride {\n MoneyAccount = 'moneyAccount',\n Perps = 'perps',\n Predict = 'predict',\n}\n\nexport enum TransactionPayStrategy {\n Across = 'across',\n Fiat = 'fiat',\n /**\n * Internal marker for no-op quotes generated when the controller determines\n * that no conversion is needed. Not a routable strategy.\n */\n None = 'none',\n Relay = 'relay',\n Server = 'server',\n}\n\nconst VALID_STRATEGIES = new Set(\n Object.values(TransactionPayStrategy).filter(\n (strategy) => strategy !== TransactionPayStrategy.None,\n ),\n);\n\n/**\n * Checks if a value is a valid, routable transaction pay strategy.\n * The internal no-op marker is not routable.\n *\n * @param strategy - Candidate strategy value.\n * @returns True if the value is a valid strategy.\n */\nexport function isTransactionPayStrategy(\n strategy: unknown,\n): strategy is TransactionPayStrategy {\n return VALID_STRATEGIES.has(strategy as TransactionPayStrategy);\n}\n"]}
|
package/dist/constants.d.cts
CHANGED
|
@@ -29,11 +29,17 @@ export declare enum PaymentOverride {
|
|
|
29
29
|
export declare enum TransactionPayStrategy {
|
|
30
30
|
Across = "across",
|
|
31
31
|
Fiat = "fiat",
|
|
32
|
+
/**
|
|
33
|
+
* Internal marker for no-op quotes generated when the controller determines
|
|
34
|
+
* that no conversion is needed. Not a routable strategy.
|
|
35
|
+
*/
|
|
36
|
+
None = "none",
|
|
32
37
|
Relay = "relay",
|
|
33
38
|
Server = "server"
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
|
-
* Checks if a value is a valid transaction pay strategy.
|
|
41
|
+
* Checks if a value is a valid, routable transaction pay strategy.
|
|
42
|
+
* The internal no-op marker is not routable.
|
|
37
43
|
*
|
|
38
44
|
* @param strategy - Candidate strategy value.
|
|
39
45
|
* @returns True if the value is a valid strategy.
|
package/dist/constants.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,eAAgB,CAAC;AAE5C,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,eACsB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAEzD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAmB1C,CAAC;AAEF,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;
|
|
1
|
+
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,eAAgB,CAAC;AAE5C,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,eACsB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAEzD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAmB1C,CAAC;AAEF,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,IAAI,SAAS;IACb;;;OAGG;IACH,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAQD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,sBAAsB,CAEpC"}
|
package/dist/constants.d.mts
CHANGED
|
@@ -29,11 +29,17 @@ export declare enum PaymentOverride {
|
|
|
29
29
|
export declare enum TransactionPayStrategy {
|
|
30
30
|
Across = "across",
|
|
31
31
|
Fiat = "fiat",
|
|
32
|
+
/**
|
|
33
|
+
* Internal marker for no-op quotes generated when the controller determines
|
|
34
|
+
* that no conversion is needed. Not a routable strategy.
|
|
35
|
+
*/
|
|
36
|
+
None = "none",
|
|
32
37
|
Relay = "relay",
|
|
33
38
|
Server = "server"
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
|
-
* Checks if a value is a valid transaction pay strategy.
|
|
41
|
+
* Checks if a value is a valid, routable transaction pay strategy.
|
|
42
|
+
* The internal no-op marker is not routable.
|
|
37
43
|
*
|
|
38
44
|
* @param strategy - Candidate strategy value.
|
|
39
45
|
* @returns True if the value is a valid strategy.
|
package/dist/constants.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,eAAgB,CAAC;AAE5C,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,eACsB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAEzD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAmB1C,CAAC;AAEF,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAGhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AACjD,eAAO,MAAM,cAAc,eAAgB,CAAC;AAE5C,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,eACsB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAEzD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAmB1C,CAAC;AAEF,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,IAAI,SAAS;IACb;;;OAGG;IACH,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAQD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,sBAAsB,CAEpC"}
|
package/dist/constants.mjs
CHANGED
|
@@ -54,12 +54,18 @@ export var TransactionPayStrategy;
|
|
|
54
54
|
(function (TransactionPayStrategy) {
|
|
55
55
|
TransactionPayStrategy["Across"] = "across";
|
|
56
56
|
TransactionPayStrategy["Fiat"] = "fiat";
|
|
57
|
+
/**
|
|
58
|
+
* Internal marker for no-op quotes generated when the controller determines
|
|
59
|
+
* that no conversion is needed. Not a routable strategy.
|
|
60
|
+
*/
|
|
61
|
+
TransactionPayStrategy["None"] = "none";
|
|
57
62
|
TransactionPayStrategy["Relay"] = "relay";
|
|
58
63
|
TransactionPayStrategy["Server"] = "server";
|
|
59
64
|
})(TransactionPayStrategy || (TransactionPayStrategy = {}));
|
|
60
|
-
const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));
|
|
65
|
+
const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy).filter((strategy) => strategy !== TransactionPayStrategy.None));
|
|
61
66
|
/**
|
|
62
|
-
* Checks if a value is a valid transaction pay strategy.
|
|
67
|
+
* Checks if a value is a valid, routable transaction pay strategy.
|
|
68
|
+
* The internal no-op marker is not routable.
|
|
63
69
|
*
|
|
64
70
|
* @param strategy - Candidate strategy value.
|
|
65
71
|
* @returns True if the value is a valid strategy.
|
package/dist/constants.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAGnE,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,eAAe,CAAC,YAAY;IAC5B,eAAe,CAAC,oBAAoB;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAe,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAc,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAChC,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAChC,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAC7B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAuB;IAC7C,UAAU;IACV,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,iBAAiB,CAAC,EAAE,CAAC,qBAAqB,CAAC,WAAW,EAAS,CAAC;IACjE,QAAQ;IACR,QAAQ,EAAE;QACR,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,gBAAgB,CAAC,EAAE;QAClB,qBAAqB,CAAC,WAAW,EAAS;QAC1C,oBAAoB,CAAC,WAAW,EAAS;KAC1C;IACD,CAAC,kBAAkB,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO;CACxD,CAAC;AAEF,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,kCAAe,CAAA;IACf,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAGnE,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,eAAe,CAAC,YAAY;IAC5B,eAAe,CAAC,oBAAoB;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAe,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAc,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAChC,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAChC,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAC7B,4CAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAuB;IAC7C,UAAU;IACV,KAAK,EAAE;QACL,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,iBAAiB,CAAC,EAAE,CAAC,qBAAqB,CAAC,WAAW,EAAS,CAAC;IACjE,QAAQ;IACR,QAAQ,EAAE;QACR,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;QACrD,4CAA4C,EAAE,OAAO;KACtD;IACD,CAAC,gBAAgB,CAAC,EAAE;QAClB,qBAAqB,CAAC,WAAW,EAAS;QAC1C,oBAAoB,CAAC,WAAW,EAAS;KAC1C;IACD,CAAC,kBAAkB,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO;CACxD,CAAC;AAEF,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,kCAAe,CAAA;IACf,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED,MAAM,CAAN,IAAY,sBAUX;AAVD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,uCAAa,CAAA;IACb;;;OAGG;IACH,uCAAa,CAAA;IACb,yCAAe,CAAA;IACf,2CAAiB,CAAA;AACnB,CAAC,EAVW,sBAAsB,KAAtB,sBAAsB,QAUjC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,sBAAsB,CAAC,IAAI,CACvD,CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAkC,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\n\n/**\n * Parent transaction types that represent a Hyperliquid perps deposit and\n * share the same Arbitrum-USDC → Hypercore handling in pay strategies.\n */\nexport const PERPS_DEPOSIT_TYPES: TransactionType[] = [\n TransactionType.perpsDeposit,\n TransactionType.perpsDepositAndOrder,\n];\n\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_MAINNET = '0x1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' as Hex;\nexport const CHAIN_ID_MONAD = '0x8f' as Hex;\n\nexport const NATIVE_TOKEN_ADDRESS =\n '0x0000000000000000000000000000000000000000' as Hex;\n\nexport const ARBITRUM_USDC_ADDRESS =\n '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' as Hex;\n\nexport const POLYGON_USDCE_ADDRESS =\n '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174' as Hex;\n\nexport const POLYGON_PUSD_ADDRESS =\n '0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB' as Hex;\n\nexport const MUSD_MONAD_ADDRESS =\n '0xaca92e438df0b2401ff60da7e4337b687a2435da' as Hex;\n\nexport const HYPERCORE_USDC_ADDRESS = '0x00000000000000000000000000000000';\n\nexport const HYPERCORE_USDC_DECIMALS = 8;\nexport const USDC_DECIMALS = 6;\n\nexport const SLIP44_COIN_TYPE_BY_CHAIN: Record<Hex, number> = {\n [CHAIN_ID_POLYGON]: 966, // POL\n};\n\nexport const STABLECOINS: Record<Hex, Hex[]> = {\n // Mainnet\n '0x1': [\n '0xaca92e438df0b2401ff60da7e4337b687a2435da', // MUSD\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC\n '0xdac17f958d2ee523a2206206994597c13d831ec7', // USDT\n ],\n [CHAIN_ID_ARBITRUM]: [ARBITRUM_USDC_ADDRESS.toLowerCase() as Hex],\n // Linea\n '0xe708': [\n '0xaca92e438df0b2401ff60da7e4337b687a2435da', // MUSD\n '0x176211869ca2b568f2a7d4ee941e073a821ee1ff', // USDC\n '0xa219439258ca9da29e9cc4ce5596924745e12b93', // USDT\n ],\n [CHAIN_ID_POLYGON]: [\n POLYGON_USDCE_ADDRESS.toLowerCase() as Hex,\n POLYGON_PUSD_ADDRESS.toLowerCase() as Hex,\n ],\n [CHAIN_ID_HYPERCORE]: [HYPERCORE_USDC_ADDRESS], // USDC\n};\n\nexport enum PaymentOverride {\n MoneyAccount = 'moneyAccount',\n Perps = 'perps',\n Predict = 'predict',\n}\n\nexport enum TransactionPayStrategy {\n Across = 'across',\n Fiat = 'fiat',\n /**\n * Internal marker for no-op quotes generated when the controller determines\n * that no conversion is needed. Not a routable strategy.\n */\n None = 'none',\n Relay = 'relay',\n Server = 'server',\n}\n\nconst VALID_STRATEGIES = new Set(\n Object.values(TransactionPayStrategy).filter(\n (strategy) => strategy !== TransactionPayStrategy.None,\n ),\n);\n\n/**\n * Checks if a value is a valid, routable transaction pay strategy.\n * The internal no-op marker is not routable.\n *\n * @param strategy - Candidate strategy value.\n * @returns True if the value is a valid strategy.\n */\nexport function isTransactionPayStrategy(\n strategy: unknown,\n): strategy is TransactionPayStrategy {\n return VALID_STRATEGIES.has(strategy as TransactionPayStrategy);\n}\n"]}
|
|
@@ -74,7 +74,8 @@ _QuoteRefresher_isRunning = new WeakMap(), _QuoteRefresher_isUpdating = new Weak
|
|
|
74
74
|
__classPrivateFieldGet(this, _QuoteRefresher_instances, "m", _QuoteRefresher_onInterval).call(this).catch(lodash_1.noop);
|
|
75
75
|
}, CHECK_INTERVAL), "f");
|
|
76
76
|
}, _QuoteRefresher_onStateChange = function _QuoteRefresher_onStateChange(state) {
|
|
77
|
-
|
|
77
|
+
// No-op quotes never refresh, so they don't need the refresh loop.
|
|
78
|
+
const hasQuotes = Object.values(state.transactionData).some((transaction) => transaction.quotes?.some((quote) => quote.strategy !== constants_1.TransactionPayStrategy.None));
|
|
78
79
|
if (hasQuotes && !__classPrivateFieldGet(this, _QuoteRefresher_isRunning, "f")) {
|
|
79
80
|
__classPrivateFieldGet(this, _QuoteRefresher_instances, "m", _QuoteRefresher_start).call(this);
|
|
80
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.cjs","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,2CAAqD;AACrD,mCAA8B;AAM9B,gDAAsD;AACtD,0CAA0C;AAE1C,gDAAgD;AAEhD,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,WAAW;AAExC,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAa,cAAc;IAezB,YAAY,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GAKtB;;QAtBD,4CAAoB;QAEpB,6CAAqB;QAEZ,4CAA8C;QAEvD,4CAAuC;QAE9B,gDAEqB;QAErB,wDAAsD;QAW7D,uBAAA,IAAI,iCAAkB,aAAa,MAAA,CAAC;QACpC,uBAAA,IAAI,6BAAc,SAAS,MAAA,CAAC;QAC5B,uBAAA,IAAI,6BAAc,KAAK,MAAA,CAAC;QACxB,uBAAA,IAAI,8BAAe,KAAK,MAAA,CAAC;QACzB,uBAAA,IAAI,yCAA0B,qBAAqB,MAAA,CAAC;QAEpD,SAAS,CAAC,SAAS,CACjB,sCAAsC,EACtC,uBAAA,IAAI,gEAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;IACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.cjs","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { createModuleLogger } from '@metamask/utils';\nimport { noop } from 'lodash';\n\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayControllerState,\n} from '..';\nimport { TransactionPayStrategy } from '../constants';\nimport { projectLogger } from '../logger';\nimport type { UpdateTransactionDataCallback } from '../types';\nimport { refreshQuotes } from '../utils/quotes';\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 #updateTransactionData: UpdateTransactionDataCallback;\n\n constructor({\n getStrategies,\n messenger,\n updateTransactionData,\n }: {\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n }) {\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 );\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.d.cts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AACZ,OAAO,EAAE,sBAAsB,EAAE,yBAAqB;AAEtD,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAeb,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;QAC1E,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.d.cts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AACZ,OAAO,EAAE,sBAAsB,EAAE,yBAAqB;AAEtD,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAeb,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;QAC1E,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;CAiFF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.d.mts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AACZ,OAAO,EAAE,sBAAsB,EAAE,yBAAqB;AAEtD,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAeb,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;QAC1E,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.d.mts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AACZ,OAAO,EAAE,sBAAsB,EAAE,yBAAqB;AAEtD,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAeb,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,aAAa,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,sBAAsB,EAAE,CAAC;QAC1E,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;CAiFF"}
|
|
@@ -71,7 +71,8 @@ _QuoteRefresher_isRunning = new WeakMap(), _QuoteRefresher_isUpdating = new Weak
|
|
|
71
71
|
__classPrivateFieldGet(this, _QuoteRefresher_instances, "m", _QuoteRefresher_onInterval).call(this).catch(noop);
|
|
72
72
|
}, CHECK_INTERVAL), "f");
|
|
73
73
|
}, _QuoteRefresher_onStateChange = function _QuoteRefresher_onStateChange(state) {
|
|
74
|
-
|
|
74
|
+
// No-op quotes never refresh, so they don't need the refresh loop.
|
|
75
|
+
const hasQuotes = Object.values(state.transactionData).some((transaction) => transaction.quotes?.some((quote) => quote.strategy !== TransactionPayStrategy.None));
|
|
75
76
|
if (hasQuotes && !__classPrivateFieldGet(this, _QuoteRefresher_isRunning, "f")) {
|
|
76
77
|
__classPrivateFieldGet(this, _QuoteRefresher_instances, "m", _QuoteRefresher_start).call(this);
|
|
77
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuoteRefresher.mjs","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;;;AAOrD,OAAO,EAAE,sBAAsB,EAAE,yBAAqB;AACtD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAE1C,OAAO,EAAE,aAAa,EAAE,4BAAwB;AAEhD,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,WAAW;AAExC,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,OAAO,cAAc;IAezB,YAAY,EACV,aAAa,EACb,SAAS,EACT,qBAAqB,GAKtB;;QAtBD,4CAAoB;QAEpB,6CAAqB;QAEZ,4CAA8C;QAEvD,4CAAuC;QAE9B,gDAEqB;QAErB,wDAAsD;QAW7D,uBAAA,IAAI,iCAAkB,aAAa,MAAA,CAAC;QACpC,uBAAA,IAAI,6BAAc,SAAS,MAAA,CAAC;QAC5B,uBAAA,IAAI,6BAAc,KAAK,MAAA,CAAC;QACxB,uBAAA,IAAI,8BAAe,KAAK,MAAA,CAAC;QACzB,uBAAA,IAAI,yCAA0B,qBAAqB,MAAA,CAAC;QAEpD,SAAS,CAAC,SAAS,CACjB,sCAAsC,EACtC,uBAAA,IAAI,gEAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;IACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"QuoteRefresher.mjs","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { createModuleLogger } from '@metamask/utils';\nimport { noop } from 'lodash';\n\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayControllerState,\n} from '..';\nimport { TransactionPayStrategy } from '../constants';\nimport { projectLogger } from '../logger';\nimport type { UpdateTransactionDataCallback } from '../types';\nimport { refreshQuotes } from '../utils/quotes';\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 #updateTransactionData: UpdateTransactionDataCallback;\n\n constructor({\n getStrategies,\n messenger,\n updateTransactionData,\n }: {\n getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n }) {\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 );\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"]}
|
|
@@ -14,6 +14,7 @@ var _TransactionPayPublishHook_instances, _TransactionPayPublishHook_isSmartTran
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.TransactionPayPublishHook = void 0;
|
|
16
16
|
const utils_1 = require("@metamask/utils");
|
|
17
|
+
const constants_1 = require("../constants.cjs");
|
|
17
18
|
const logger_1 = require("../logger.cjs");
|
|
18
19
|
const _7702_1 = require("../utils/7702.cjs");
|
|
19
20
|
const error_prefix_1 = require("../utils/error-prefix.cjs");
|
|
@@ -49,13 +50,14 @@ _TransactionPayPublishHook_isSmartTransaction = new WeakMap(), _TransactionPayPu
|
|
|
49
50
|
const { id: transactionId } = transactionMeta;
|
|
50
51
|
const controllerState = __classPrivateFieldGet(this, _TransactionPayPublishHook_messenger, "f").call('TransactionPayController:getState');
|
|
51
52
|
const transactionData = controllerState.transactionData?.[transactionId];
|
|
52
|
-
|
|
53
|
+
// No-op quotes mark direct routes and cannot be executed by any strategy.
|
|
54
|
+
const quotes = (transactionData?.quotes ?? []).filter((quote) => quote.strategy !== constants_1.TransactionPayStrategy.None);
|
|
53
55
|
const isFiatSelected = Boolean(transactionData?.fiatPayment?.selectedPaymentMethodId);
|
|
54
|
-
if (!quotes
|
|
56
|
+
if (!quotes.length) {
|
|
55
57
|
if (isFiatSelected) {
|
|
56
58
|
throw new Error('Fiat: Missing quote');
|
|
57
59
|
}
|
|
58
|
-
log('Skipping as no quotes found');
|
|
60
|
+
log('Skipping as no executable quotes found', { transactionId });
|
|
59
61
|
return EMPTY_RESULT;
|
|
60
62
|
}
|
|
61
63
|
(0, transaction_1.updateTransaction)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.cjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,2CAAqD;AAErD,0CAA0C;AAK1C,6CAAoD;AACpD,4DAAoD;AACpD,oDAAsD;AACtD,0DAAyD;AAEzD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,kBAAkB,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAa,yBAAyB;IAKpC,YAAY,EACV,kBAAkB,EAClB,SAAS,GAIV;;QAVQ,gEAA+C;QAE/C,uDAA8C;QASrD,uBAAA,IAAI,iDAAuB,kBAAkB,MAAA,CAAC;QAC9C,uBAAA,IAAI,wCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,uBAAA,IAAI,oFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.cjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PublishHook } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { PublishHookResult } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { TransactionPayStrategy } from '../constants';\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../types';\nimport { accountSupports7702 } from '../utils/7702';\nimport { prefixError } from '../utils/error-prefix';\nimport { getStrategyByName } from '../utils/strategy';\nimport { updateTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'pay-publish-hook');\nconst ERROR_PREFIX = 'MetaMask Pay: ';\n\nconst EMPTY_RESULT = {\n transactionHash: undefined,\n};\n\nexport class TransactionPayPublishHook {\n readonly #isSmartTransaction: (chainId: Hex) => boolean;\n\n readonly #messenger: TransactionPayControllerMessenger;\n\n constructor({\n isSmartTransaction,\n messenger,\n }: {\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n }) {\n this.#isSmartTransaction = isSmartTransaction;\n this.#messenger = messenger;\n }\n\n getHook(): PublishHook {\n return this.#hookWrapper.bind(this);\n }\n\n async #hookWrapper(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n try {\n return await this.#publishHook(transactionMeta, _signedTx);\n } catch (error) {\n log('Error', error);\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n\n async #publishHook(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n const { id: transactionId } = transactionMeta;\n\n const controllerState = this.#messenger.call(\n 'TransactionPayController:getState',\n );\n\n const transactionData = controllerState.transactionData?.[transactionId];\n\n // No-op quotes mark direct routes and cannot be executed by any strategy.\n const quotes = (\n (transactionData?.quotes as TransactionPayQuote<unknown>[]) ?? []\n ).filter((quote) => quote.strategy !== TransactionPayStrategy.None);\n\n const isFiatSelected = Boolean(\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n\n if (!quotes.length) {\n if (isFiatSelected) {\n throw new Error('Fiat: Missing quote');\n }\n\n log('Skipping as no executable quotes found', { transactionId });\n\n return EMPTY_RESULT;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger: this.#messenger,\n note: 'Set submittedTime at pay publish hook start',\n },\n (tx) => {\n tx.submittedTime = new Date().getTime();\n },\n );\n\n const strategy = getStrategyByName(quotes[0].strategy);\n const from = transactionMeta.txParams.from as Hex;\n\n return await strategy.execute({\n accountSupports7702: accountSupports7702(this.#messenger, from),\n isSmartTransaction: this.#isSmartTransaction,\n quotes,\n messenger: this.#messenger,\n transaction: transactionMeta,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.d.cts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.d.cts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;AAalB,qBAAa,yBAAyB;;gBAKxB,EACV,kBAAkB,EAClB,SAAS,GACV,EAAE;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;QAC9C,SAAS,EAAE,iCAAiC,CAAC;KAC9C;IAKD,OAAO,IAAI,WAAW;CAqEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.d.mts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.d.mts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;AAalB,qBAAa,yBAAyB;;gBAKxB,EACV,kBAAkB,EAClB,SAAS,GACV,EAAE;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;QAC9C,SAAS,EAAE,iCAAiC,CAAC;KAC9C;IAKD,OAAO,IAAI,WAAW;CAqEvB"}
|
|
@@ -11,6 +11,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
11
|
};
|
|
12
12
|
var _TransactionPayPublishHook_instances, _TransactionPayPublishHook_isSmartTransaction, _TransactionPayPublishHook_messenger, _TransactionPayPublishHook_hookWrapper, _TransactionPayPublishHook_publishHook;
|
|
13
13
|
import { createModuleLogger } from "@metamask/utils";
|
|
14
|
+
import { TransactionPayStrategy } from "../constants.mjs";
|
|
14
15
|
import { projectLogger } from "../logger.mjs";
|
|
15
16
|
import { accountSupports7702 } from "../utils/7702.mjs";
|
|
16
17
|
import { prefixError } from "../utils/error-prefix.mjs";
|
|
@@ -45,13 +46,14 @@ _TransactionPayPublishHook_isSmartTransaction = new WeakMap(), _TransactionPayPu
|
|
|
45
46
|
const { id: transactionId } = transactionMeta;
|
|
46
47
|
const controllerState = __classPrivateFieldGet(this, _TransactionPayPublishHook_messenger, "f").call('TransactionPayController:getState');
|
|
47
48
|
const transactionData = controllerState.transactionData?.[transactionId];
|
|
48
|
-
|
|
49
|
+
// No-op quotes mark direct routes and cannot be executed by any strategy.
|
|
50
|
+
const quotes = (transactionData?.quotes ?? []).filter((quote) => quote.strategy !== TransactionPayStrategy.None);
|
|
49
51
|
const isFiatSelected = Boolean(transactionData?.fiatPayment?.selectedPaymentMethodId);
|
|
50
|
-
if (!quotes
|
|
52
|
+
if (!quotes.length) {
|
|
51
53
|
if (isFiatSelected) {
|
|
52
54
|
throw new Error('Fiat: Missing quote');
|
|
53
55
|
}
|
|
54
|
-
log('Skipping as no quotes found');
|
|
56
|
+
log('Skipping as no executable quotes found', { transactionId });
|
|
55
57
|
return EMPTY_RESULT;
|
|
56
58
|
}
|
|
57
59
|
updateTransaction({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAK1C,OAAO,EAAE,mBAAmB,EAAE,0BAAsB;AACpD,OAAO,EAAE,WAAW,EAAE,kCAA8B;AACpD,OAAO,EAAE,iBAAiB,EAAE,8BAA0B;AACtD,OAAO,EAAE,iBAAiB,EAAE,iCAA6B;AAEzD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,OAAO,yBAAyB;IAKpC,YAAY,EACV,kBAAkB,EAClB,SAAS,GAIV;;QAVQ,gEAA+C;QAE/C,uDAA8C;QASrD,uBAAA,IAAI,iDAAuB,kBAAkB,MAAA,CAAC;QAC9C,uBAAA,IAAI,wCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,uBAAA,IAAI,oFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PublishHook } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { PublishHookResult } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { TransactionPayStrategy } from '../constants';\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../types';\nimport { accountSupports7702 } from '../utils/7702';\nimport { prefixError } from '../utils/error-prefix';\nimport { getStrategyByName } from '../utils/strategy';\nimport { updateTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'pay-publish-hook');\nconst ERROR_PREFIX = 'MetaMask Pay: ';\n\nconst EMPTY_RESULT = {\n transactionHash: undefined,\n};\n\nexport class TransactionPayPublishHook {\n readonly #isSmartTransaction: (chainId: Hex) => boolean;\n\n readonly #messenger: TransactionPayControllerMessenger;\n\n constructor({\n isSmartTransaction,\n messenger,\n }: {\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n }) {\n this.#isSmartTransaction = isSmartTransaction;\n this.#messenger = messenger;\n }\n\n getHook(): PublishHook {\n return this.#hookWrapper.bind(this);\n }\n\n async #hookWrapper(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n try {\n return await this.#publishHook(transactionMeta, _signedTx);\n } catch (error) {\n log('Error', error);\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n\n async #publishHook(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n const { id: transactionId } = transactionMeta;\n\n const controllerState = this.#messenger.call(\n 'TransactionPayController:getState',\n );\n\n const transactionData = controllerState.transactionData?.[transactionId];\n\n // No-op quotes mark direct routes and cannot be executed by any strategy.\n const quotes = (\n (transactionData?.quotes as TransactionPayQuote<unknown>[]) ?? []\n ).filter((quote) => quote.strategy !== TransactionPayStrategy.None);\n\n const isFiatSelected = Boolean(\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n\n if (!quotes.length) {\n if (isFiatSelected) {\n throw new Error('Fiat: Missing quote');\n }\n\n log('Skipping as no executable quotes found', { transactionId });\n\n return EMPTY_RESULT;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger: this.#messenger,\n note: 'Set submittedTime at pay publish hook start',\n },\n (tx) => {\n tx.submittedTime = new Date().getTime();\n },\n );\n\n const strategy = getStrategyByName(quotes[0].strategy);\n const from = transactionMeta.txParams.from as Hex;\n\n return await strategy.execute({\n accountSupports7702: accountSupports7702(this.#messenger, from),\n isSmartTransaction: this.#isSmartTransaction,\n quotes,\n messenger: this.#messenger,\n transaction: transactionMeta,\n });\n }\n}\n"]}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AcrossStrategy = void 0;
|
|
4
4
|
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
5
5
|
const feature_flags_1 = require("../../utils/feature-flags.cjs");
|
|
6
|
-
const transaction_1 = require("../../utils/transaction.cjs");
|
|
7
6
|
const across_actions_1 = require("./across-actions.cjs");
|
|
8
7
|
const across_quotes_1 = require("./across-quotes.cjs");
|
|
9
8
|
const across_submit_1 = require("./across-submit.cjs");
|
|
@@ -38,7 +37,9 @@ class AcrossStrategy {
|
|
|
38
37
|
}
|
|
39
38
|
return actionableRequests.every((singleRequest) => {
|
|
40
39
|
if (singleRequest.isPostQuote) {
|
|
41
|
-
return (0,
|
|
40
|
+
return (0, transaction_controller_1.hasTransactionType)(request.transaction, [
|
|
41
|
+
transaction_controller_1.TransactionType.predictWithdraw,
|
|
42
|
+
]);
|
|
42
43
|
}
|
|
43
44
|
try {
|
|
44
45
|
(0, across_actions_1.getAcrossDestination)(request.transaction, singleRequest);
|
|
@@ -57,7 +58,9 @@ class AcrossStrategy {
|
|
|
57
58
|
if (!requiresAuthorizationList) {
|
|
58
59
|
return true;
|
|
59
60
|
}
|
|
60
|
-
if (!(0,
|
|
61
|
+
if (!(0, transaction_controller_1.hasTransactionType)(request.transaction, [
|
|
62
|
+
transaction_controller_1.TransactionType.predictWithdraw,
|
|
63
|
+
])) {
|
|
61
64
|
return false;
|
|
62
65
|
}
|
|
63
66
|
// A first-time 7702 authorization list is acceptable here only because it is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcrossStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TransactionType,\n hasTransactionType,\n} from '@metamask/transaction-controller';\n\nimport type {\n PayStrategy,\n PayStrategyCheckQuoteSupportRequest,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { getPayStrategiesConfig } from '../../utils/feature-flags';\nimport { getAcrossDestination } from './across-actions';\nimport { getAcrossQuotes } from './across-quotes';\nimport { submitAcrossQuotes } from './across-submit';\nimport { hasUnsupportedTransactionAuthorizationList } from './authorization-list';\nimport { isSupportedAcrossPerpsDepositRequest } from './perps';\nimport { isAcrossQuoteRequest } from './requests';\nimport type { AcrossQuote } from './types';\n\nexport class AcrossStrategy implements PayStrategy<AcrossQuote> {\n supports(request: PayStrategyGetQuotesRequest): boolean {\n const config = getPayStrategiesConfig(request.messenger);\n\n if (!config.across.enabled) {\n return false;\n }\n\n const actionableRequests = request.requests.filter(isAcrossQuoteRequest);\n\n if (actionableRequests.length === 0) {\n return false;\n }\n\n if (request.transaction?.type === TransactionType.perpsDeposit) {\n const supportsPerpsDeposit = actionableRequests.every((singleRequest) =>\n isSupportedAcrossPerpsDepositRequest(\n singleRequest,\n request.transaction?.type,\n ),\n );\n\n if (!supportsPerpsDeposit) {\n return false;\n }\n } else {\n // Across doesn't support same-chain swaps (e.g. mUSD conversions).\n const hasSameChainRequest = actionableRequests.some(\n (singleRequest) =>\n singleRequest.sourceChainId === singleRequest.targetChainId,\n );\n\n if (hasSameChainRequest) {\n return false;\n }\n }\n\n if (\n hasUnsupportedTransactionAuthorizationList(\n request.transaction,\n actionableRequests,\n )\n ) {\n return false;\n }\n\n return actionableRequests.every((singleRequest) => {\n if (singleRequest.isPostQuote) {\n return hasTransactionType(request.transaction, [\n TransactionType.predictWithdraw,\n ]);\n }\n\n try {\n getAcrossDestination(request.transaction, singleRequest);\n return true;\n } catch {\n return false;\n }\n });\n }\n\n checkQuoteSupport(\n request: PayStrategyCheckQuoteSupportRequest<AcrossQuote>,\n ): boolean {\n // Gas planning can discover that TransactionController would add an\n // authorization list for a first-time 7702 upgrade. `is7702` alone is not a\n // blocker because it also covers already-upgraded accounts.\n const requiresAuthorizationList = request.quotes.some(\n (quote) => quote.original.metamask.requiresAuthorizationList,\n );\n\n if (!requiresAuthorizationList) {\n return true;\n }\n\n if (\n !hasTransactionType(request.transaction, [\n TransactionType.predictWithdraw,\n ])\n ) {\n return false;\n }\n\n // A first-time 7702 authorization list is acceptable here only because it is\n // attached to MetaMask's source-chain batch transaction. It must not be\n // smuggled into Across destination post-swap actions.\n return request.quotes.every(\n (quote) =>\n quote.request.isPostQuote === true &&\n quote.original.request.actions.length === 0,\n );\n }\n\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<AcrossQuote>[]> {\n return getAcrossQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<AcrossQuote>,\n ): ReturnType<PayStrategy<AcrossQuote>['execute']> {\n return submitAcrossQuotes(request);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcrossStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAgB;AAE3C,qBAAa,cAAe,YAAW,WAAW,CAAC,WAAW,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IA6DvD,iBAAiB,CACf,OAAO,EAAE,mCAAmC,CAAC,WAAW,CAAC,GACxD,OAAO;IA8BJ,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;IAIxC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;CAGnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcrossStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,mCAAmC,EACnC,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAQrB,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAgB;AAE3C,qBAAa,cAAe,YAAW,WAAW,CAAC,WAAW,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO;IA6DvD,iBAAiB,CACf,OAAO,EAAE,mCAAmC,CAAC,WAAW,CAAC,GACxD,OAAO;IA8BJ,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;IAIxC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC;CAGnD"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { TransactionType } from "@metamask/transaction-controller";
|
|
1
|
+
import { TransactionType, hasTransactionType } from "@metamask/transaction-controller";
|
|
2
2
|
import { getPayStrategiesConfig } from "../../utils/feature-flags.mjs";
|
|
3
|
-
import { isPredictWithdrawTransaction } from "../../utils/transaction.mjs";
|
|
4
3
|
import { getAcrossDestination } from "./across-actions.mjs";
|
|
5
4
|
import { getAcrossQuotes } from "./across-quotes.mjs";
|
|
6
5
|
import { submitAcrossQuotes } from "./across-submit.mjs";
|
|
@@ -35,7 +34,9 @@ export class AcrossStrategy {
|
|
|
35
34
|
}
|
|
36
35
|
return actionableRequests.every((singleRequest) => {
|
|
37
36
|
if (singleRequest.isPostQuote) {
|
|
38
|
-
return
|
|
37
|
+
return hasTransactionType(request.transaction, [
|
|
38
|
+
TransactionType.predictWithdraw,
|
|
39
|
+
]);
|
|
39
40
|
}
|
|
40
41
|
try {
|
|
41
42
|
getAcrossDestination(request.transaction, singleRequest);
|
|
@@ -54,7 +55,9 @@ export class AcrossStrategy {
|
|
|
54
55
|
if (!requiresAuthorizationList) {
|
|
55
56
|
return true;
|
|
56
57
|
}
|
|
57
|
-
if (!
|
|
58
|
+
if (!hasTransactionType(request.transaction, [
|
|
59
|
+
TransactionType.predictWithdraw,
|
|
60
|
+
])) {
|
|
58
61
|
return false;
|
|
59
62
|
}
|
|
60
63
|
// A first-time 7702 authorization list is acceptable here only because it is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcrossStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AcrossStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/across/AcrossStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,yCAAyC;AAS1C,OAAO,EAAE,sBAAsB,EAAE,sCAAkC;AACnE,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EAAE,eAAe,EAAE,4BAAwB;AAClD,OAAO,EAAE,kBAAkB,EAAE,4BAAwB;AACrD,OAAO,EAAE,0CAA0C,EAAE,iCAA6B;AAClF,OAAO,EAAE,oCAAoC,EAAE,oBAAgB;AAC/D,OAAO,EAAE,oBAAoB,EAAE,uBAAmB;AAGlD,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,OAAoC;QAC3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEzE,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;YAC/D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,EAAE,CACtE,oCAAoC,CAClC,aAAa,EACb,OAAO,CAAC,WAAW,EAAE,IAAI,CAC1B,CACF,CAAC;YAEF,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CACjD,CAAC,aAAa,EAAE,EAAE,CAChB,aAAa,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,CAC9D,CAAC;YAEF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IACE,0CAA0C,CACxC,OAAO,CAAC,WAAW,EACnB,kBAAkB,CACnB,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,EAAE;YAChD,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC9B,OAAO,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE;oBAC7C,eAAe,CAAC,eAAe;iBAChC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC;gBACH,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CACf,OAAyD;QAEzD,oEAAoE;QACpE,4EAA4E;QAC5E,4DAA4D;QAC5D,MAAM,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CACnD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAC7D,CAAC;QAEF,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IACE,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE;YACvC,eAAe,CAAC,eAAe;SAChC,CAAC,EACF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6EAA6E;QAC7E,wEAAwE;QACxE,sDAAsD;QACtD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CACzB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI;YAClC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAC9C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA+C;QAE/C,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["import {\n TransactionType,\n hasTransactionType,\n} from '@metamask/transaction-controller';\n\nimport type {\n PayStrategy,\n PayStrategyCheckQuoteSupportRequest,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { getPayStrategiesConfig } from '../../utils/feature-flags';\nimport { getAcrossDestination } from './across-actions';\nimport { getAcrossQuotes } from './across-quotes';\nimport { submitAcrossQuotes } from './across-submit';\nimport { hasUnsupportedTransactionAuthorizationList } from './authorization-list';\nimport { isSupportedAcrossPerpsDepositRequest } from './perps';\nimport { isAcrossQuoteRequest } from './requests';\nimport type { AcrossQuote } from './types';\n\nexport class AcrossStrategy implements PayStrategy<AcrossQuote> {\n supports(request: PayStrategyGetQuotesRequest): boolean {\n const config = getPayStrategiesConfig(request.messenger);\n\n if (!config.across.enabled) {\n return false;\n }\n\n const actionableRequests = request.requests.filter(isAcrossQuoteRequest);\n\n if (actionableRequests.length === 0) {\n return false;\n }\n\n if (request.transaction?.type === TransactionType.perpsDeposit) {\n const supportsPerpsDeposit = actionableRequests.every((singleRequest) =>\n isSupportedAcrossPerpsDepositRequest(\n singleRequest,\n request.transaction?.type,\n ),\n );\n\n if (!supportsPerpsDeposit) {\n return false;\n }\n } else {\n // Across doesn't support same-chain swaps (e.g. mUSD conversions).\n const hasSameChainRequest = actionableRequests.some(\n (singleRequest) =>\n singleRequest.sourceChainId === singleRequest.targetChainId,\n );\n\n if (hasSameChainRequest) {\n return false;\n }\n }\n\n if (\n hasUnsupportedTransactionAuthorizationList(\n request.transaction,\n actionableRequests,\n )\n ) {\n return false;\n }\n\n return actionableRequests.every((singleRequest) => {\n if (singleRequest.isPostQuote) {\n return hasTransactionType(request.transaction, [\n TransactionType.predictWithdraw,\n ]);\n }\n\n try {\n getAcrossDestination(request.transaction, singleRequest);\n return true;\n } catch {\n return false;\n }\n });\n }\n\n checkQuoteSupport(\n request: PayStrategyCheckQuoteSupportRequest<AcrossQuote>,\n ): boolean {\n // Gas planning can discover that TransactionController would add an\n // authorization list for a first-time 7702 upgrade. `is7702` alone is not a\n // blocker because it also covers already-upgraded accounts.\n const requiresAuthorizationList = request.quotes.some(\n (quote) => quote.original.metamask.requiresAuthorizationList,\n );\n\n if (!requiresAuthorizationList) {\n return true;\n }\n\n if (\n !hasTransactionType(request.transaction, [\n TransactionType.predictWithdraw,\n ])\n ) {\n return false;\n }\n\n // A first-time 7702 authorization list is acceptable here only because it is\n // attached to MetaMask's source-chain batch transaction. It must not be\n // smuggled into Across destination post-swap actions.\n return request.quotes.every(\n (quote) =>\n quote.request.isPostQuote === true &&\n quote.original.request.actions.length === 0,\n );\n }\n\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<AcrossQuote>[]> {\n return getAcrossQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<AcrossQuote>,\n ): ReturnType<PayStrategy<AcrossQuote>['execute']> {\n return submitAcrossQuotes(request);\n }\n}\n"]}
|