@metamask/transaction-pay-controller 16.0.0 → 16.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/dist/TransactionPayController.cjs +16 -5
  3. package/dist/TransactionPayController.cjs.map +1 -1
  4. package/dist/TransactionPayController.d.cts +1 -1
  5. package/dist/TransactionPayController.d.cts.map +1 -1
  6. package/dist/TransactionPayController.d.mts +1 -1
  7. package/dist/TransactionPayController.d.mts.map +1 -1
  8. package/dist/TransactionPayController.mjs +17 -6
  9. package/dist/TransactionPayController.mjs.map +1 -1
  10. package/dist/constants.cjs +12 -1
  11. package/dist/constants.cjs.map +1 -1
  12. package/dist/constants.d.cts +7 -0
  13. package/dist/constants.d.cts.map +1 -1
  14. package/dist/constants.d.mts +7 -0
  15. package/dist/constants.d.mts.map +1 -1
  16. package/dist/constants.mjs +10 -0
  17. package/dist/constants.mjs.map +1 -1
  18. package/dist/helpers/QuoteRefresher.cjs +7 -4
  19. package/dist/helpers/QuoteRefresher.cjs.map +1 -1
  20. package/dist/helpers/QuoteRefresher.d.cts +4 -1
  21. package/dist/helpers/QuoteRefresher.d.cts.map +1 -1
  22. package/dist/helpers/QuoteRefresher.d.mts +4 -1
  23. package/dist/helpers/QuoteRefresher.d.mts.map +1 -1
  24. package/dist/helpers/QuoteRefresher.mjs +7 -4
  25. package/dist/helpers/QuoteRefresher.mjs.map +1 -1
  26. package/dist/helpers/TransactionPayPublishHook.cjs +1 -1
  27. package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -1
  28. package/dist/helpers/TransactionPayPublishHook.mjs +2 -2
  29. package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -1
  30. package/dist/strategy/bridge/bridge-quotes.cjs +1 -0
  31. package/dist/strategy/bridge/bridge-quotes.cjs.map +1 -1
  32. package/dist/strategy/bridge/bridge-quotes.mjs +1 -0
  33. package/dist/strategy/bridge/bridge-quotes.mjs.map +1 -1
  34. package/dist/strategy/relay/relay-quotes.cjs +13 -8
  35. package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
  36. package/dist/strategy/relay/relay-quotes.mjs +13 -8
  37. package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
  38. package/dist/strategy/relay/relay-submit.cjs +1 -1
  39. package/dist/strategy/relay/relay-submit.cjs.map +1 -1
  40. package/dist/strategy/relay/relay-submit.mjs +1 -1
  41. package/dist/strategy/relay/relay-submit.mjs.map +1 -1
  42. package/dist/strategy/relay/types.cjs.map +1 -1
  43. package/dist/strategy/relay/types.d.cts +3 -0
  44. package/dist/strategy/relay/types.d.cts.map +1 -1
  45. package/dist/strategy/relay/types.d.mts +3 -0
  46. package/dist/strategy/relay/types.d.mts.map +1 -1
  47. package/dist/strategy/relay/types.mjs.map +1 -1
  48. package/dist/strategy/test/TestStrategy.cjs +1 -0
  49. package/dist/strategy/test/TestStrategy.cjs.map +1 -1
  50. package/dist/strategy/test/TestStrategy.d.cts.map +1 -1
  51. package/dist/strategy/test/TestStrategy.d.mts.map +1 -1
  52. package/dist/strategy/test/TestStrategy.mjs +1 -0
  53. package/dist/strategy/test/TestStrategy.mjs.map +1 -1
  54. package/dist/tests/messenger-mock.d.cts +2 -1
  55. package/dist/tests/messenger-mock.d.cts.map +1 -1
  56. package/dist/tests/messenger-mock.d.mts +2 -1
  57. package/dist/tests/messenger-mock.d.mts.map +1 -1
  58. package/dist/types.cjs.map +1 -1
  59. package/dist/types.d.cts +9 -0
  60. package/dist/types.d.cts.map +1 -1
  61. package/dist/types.d.mts +9 -0
  62. package/dist/types.d.mts.map +1 -1
  63. package/dist/types.mjs.map +1 -1
  64. package/dist/utils/feature-flags.cjs +26 -3
  65. package/dist/utils/feature-flags.cjs.map +1 -1
  66. package/dist/utils/feature-flags.d.cts +11 -0
  67. package/dist/utils/feature-flags.d.cts.map +1 -1
  68. package/dist/utils/feature-flags.d.mts +11 -0
  69. package/dist/utils/feature-flags.d.mts.map +1 -1
  70. package/dist/utils/feature-flags.mjs +23 -0
  71. package/dist/utils/feature-flags.mjs.map +1 -1
  72. package/dist/utils/quotes.cjs +62 -26
  73. package/dist/utils/quotes.cjs.map +1 -1
  74. package/dist/utils/quotes.d.cts +5 -1
  75. package/dist/utils/quotes.d.cts.map +1 -1
  76. package/dist/utils/quotes.d.mts +5 -1
  77. package/dist/utils/quotes.d.mts.map +1 -1
  78. package/dist/utils/quotes.mjs +63 -27
  79. package/dist/utils/quotes.mjs.map +1 -1
  80. package/dist/utils/strategy.cjs +25 -13
  81. package/dist/utils/strategy.cjs.map +1 -1
  82. package/dist/utils/strategy.d.cts +13 -10
  83. package/dist/utils/strategy.d.cts.map +1 -1
  84. package/dist/utils/strategy.d.mts +13 -10
  85. package/dist/utils/strategy.d.mts.map +1 -1
  86. package/dist/utils/strategy.mjs +23 -11
  87. package/dist/utils/strategy.mjs.map +1 -1
  88. package/dist/utils/totals.cjs +4 -0
  89. package/dist/utils/totals.cjs.map +1 -1
  90. package/dist/utils/totals.d.cts.map +1 -1
  91. package/dist/utils/totals.d.mts.map +1 -1
  92. package/dist/utils/totals.mjs +4 -0
  93. package/dist/utils/totals.mjs.map +1 -1
  94. package/package.json +5 -6
package/CHANGELOG.md CHANGED
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [16.1.1]
11
+
12
+ ### Changed
13
+
14
+ - Bump `@metamask/bridge-controller` from `^67.2.0` to `^67.4.0` ([#8051](https://github.com/MetaMask/core/pull/8051), [#8070](https://github.com/MetaMask/core/pull/8070))
15
+ - Bump `@metamask/remote-feature-flag-controller` from `^4.0.0` to `^4.1.0` ([#8041](https://github.com/MetaMask/core/pull/8041))
16
+
17
+ ### Fixed
18
+
19
+ - Support gasless predict withdraw ([#8067](https://github.com/MetaMask/core/pull/8067))
20
+
21
+ ## [16.1.0]
22
+
23
+ ### Added
24
+
25
+ - Add `metaMask` fee field to `TransactionPayFees` ([#8030](https://github.com/MetaMask/core/pull/8030))
26
+ - Add ordered strategy fallback mechanism for quote retrieval ([#7868](https://github.com/MetaMask/core/pull/7868))
27
+
28
+ ### Changed
29
+
30
+ - Bump `@metamask/transaction-controller` from `^62.18.0` to `^62.19.0` ([#8031](https://github.com/MetaMask/core/pull/8031))
31
+ - Bump `@metamask/bridge-controller` from `^67.1.1` to `^67.2.0` ([#8024](https://github.com/MetaMask/core/pull/8024))
32
+ - Bump `@metamask/assets-controllers` from `^100.0.2` to `^100.0.3` ([#8029](https://github.com/MetaMask/core/pull/8029))
33
+
10
34
  ## [16.0.0]
11
35
 
12
36
  ### Added
@@ -428,7 +452,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
428
452
 
429
453
  - Initial release ([#6820](https://github.com/MetaMask/core/pull/6820))
430
454
 
431
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@16.0.0...HEAD
455
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@16.1.1...HEAD
456
+ [16.1.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@16.1.0...@metamask/transaction-pay-controller@16.1.1
457
+ [16.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@16.0.0...@metamask/transaction-pay-controller@16.1.0
432
458
  [16.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.2...@metamask/transaction-pay-controller@16.0.0
433
459
  [15.1.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.1...@metamask/transaction-pay-controller@15.1.2
434
460
  [15.1.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.0...@metamask/transaction-pay-controller@15.1.1
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _TransactionPayController_instances, _TransactionPayController_getDelegationTransaction, _TransactionPayController_getStrategy, _TransactionPayController_removeTransactionData, _TransactionPayController_updateTransactionData, _TransactionPayController_registerActionHandlers;
13
+ var _TransactionPayController_instances, _TransactionPayController_getDelegationTransaction, _TransactionPayController_getStrategy, _TransactionPayController_getStrategies, _TransactionPayController_removeTransactionData, _TransactionPayController_updateTransactionData, _TransactionPayController_registerActionHandlers, _TransactionPayController_getStrategiesWithFallback;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.TransactionPayController = void 0;
16
16
  const base_controller_1 = require("@metamask/base-controller");
@@ -18,6 +18,7 @@ const lodash_1 = require("lodash");
18
18
  const update_payment_token_1 = require("./actions/update-payment-token.cjs");
19
19
  const constants_1 = require("./constants.cjs");
20
20
  const QuoteRefresher_1 = require("./helpers/QuoteRefresher.cjs");
21
+ const feature_flags_1 = require("./utils/feature-flags.cjs");
21
22
  const quotes_1 = require("./utils/quotes.cjs");
22
23
  const source_amounts_1 = require("./utils/source-amounts.cjs");
23
24
  const transaction_1 = require("./utils/transaction.cjs");
@@ -33,7 +34,7 @@ const getDefaultState = () => ({
33
34
  transactionData: {},
34
35
  });
35
36
  class TransactionPayController extends base_controller_1.BaseController {
36
- constructor({ getDelegationTransaction, getStrategy, messenger, state, }) {
37
+ constructor({ getDelegationTransaction, getStrategy, getStrategies, messenger, state, }) {
37
38
  super({
38
39
  name: constants_1.CONTROLLER_NAME,
39
40
  metadata: stateMetadata,
@@ -43,12 +44,15 @@ class TransactionPayController extends base_controller_1.BaseController {
43
44
  _TransactionPayController_instances.add(this);
44
45
  _TransactionPayController_getDelegationTransaction.set(this, void 0);
45
46
  _TransactionPayController_getStrategy.set(this, void 0);
47
+ _TransactionPayController_getStrategies.set(this, void 0);
46
48
  __classPrivateFieldSet(this, _TransactionPayController_getDelegationTransaction, getDelegationTransaction, "f");
47
49
  __classPrivateFieldSet(this, _TransactionPayController_getStrategy, getStrategy, "f");
50
+ __classPrivateFieldSet(this, _TransactionPayController_getStrategies, getStrategies, "f");
48
51
  __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_registerActionHandlers).call(this);
49
52
  (0, transaction_1.pollTransactionChanges)(messenger, __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_updateTransactionData).bind(this), __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_removeTransactionData).bind(this));
50
53
  // eslint-disable-next-line no-new
51
54
  new QuoteRefresher_1.QuoteRefresher({
55
+ getStrategies: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).bind(this),
52
56
  messenger,
53
57
  updateTransactionData: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_updateTransactionData).bind(this),
54
58
  });
@@ -72,7 +76,7 @@ class TransactionPayController extends base_controller_1.BaseController {
72
76
  }
73
77
  }
74
78
  exports.TransactionPayController = TransactionPayController;
75
- _TransactionPayController_getDelegationTransaction = new WeakMap(), _TransactionPayController_getStrategy = new WeakMap(), _TransactionPayController_instances = new WeakSet(), _TransactionPayController_removeTransactionData = function _TransactionPayController_removeTransactionData(transactionId) {
79
+ _TransactionPayController_getDelegationTransaction = new WeakMap(), _TransactionPayController_getStrategy = new WeakMap(), _TransactionPayController_getStrategies = new WeakMap(), _TransactionPayController_instances = new WeakSet(), _TransactionPayController_removeTransactionData = function _TransactionPayController_removeTransactionData(transactionId) {
76
80
  this.update((state) => {
77
81
  delete state.transactionData[transactionId];
78
82
  });
@@ -109,6 +113,7 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
109
113
  });
110
114
  if (shouldUpdateQuotes) {
111
115
  (0, quotes_1.updateQuotes)({
116
+ getStrategies: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).bind(this),
112
117
  messenger: this.messenger,
113
118
  transactionData: this.state.transactionData[transactionId],
114
119
  transactionId,
@@ -117,9 +122,15 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
117
122
  }
118
123
  }, _TransactionPayController_registerActionHandlers = function _TransactionPayController_registerActionHandlers() {
119
124
  this.messenger.registerActionHandler('TransactionPayController:getDelegationTransaction', __classPrivateFieldGet(this, _TransactionPayController_getDelegationTransaction, "f").bind(this));
120
- this.messenger.registerActionHandler('TransactionPayController:getStrategy', __classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f") ??
121
- (() => constants_1.TransactionPayStrategy.Relay));
125
+ this.messenger.registerActionHandler('TransactionPayController:getStrategy', (transaction) => __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).call(this, transaction)[0]);
122
126
  this.messenger.registerActionHandler('TransactionPayController:setTransactionConfig', this.setTransactionConfig.bind(this));
123
127
  this.messenger.registerActionHandler('TransactionPayController:updatePaymentToken', this.updatePaymentToken.bind(this));
128
+ }, _TransactionPayController_getStrategiesWithFallback = function _TransactionPayController_getStrategiesWithFallback(transaction) {
129
+ const strategyCandidates = __classPrivateFieldGet(this, _TransactionPayController_getStrategies, "f")?.call(this, transaction) ??
130
+ (__classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f") ? [__classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f").call(this, transaction)] : []);
131
+ const validStrategies = strategyCandidates.filter((strategy) => (0, constants_1.isTransactionPayStrategy)(strategy));
132
+ return validStrategies.length
133
+ ? validStrategies
134
+ : (0, feature_flags_1.getStrategyOrder)(this.messenger);
124
135
  };
125
136
  //# sourceMappingURL=TransactionPayController.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionPayController.cjs","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';\n\nimport { updatePaymentToken } from './actions/update-payment-token';\nimport { CONTROLLER_NAME, TransactionPayStrategy } from './constants';\nimport { QuoteRefresher } from './helpers/QuoteRefresher';\nimport type {\n GetDelegationTransactionCallback,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdatePaymentTokenRequest,\n} from './types';\nimport { updateQuotes } from './utils/quotes';\nimport { updateSourceAmounts } from './utils/source-amounts';\nimport { pollTransactionChanges } from './utils/transaction';\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 #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n constructor({\n getDelegationTransaction,\n getStrategy,\n messenger,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getStrategy = getStrategy;\n\n this.#registerActionHandlers();\n\n pollTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.bind(this),\n );\n\n // eslint-disable-next-line no-new\n new QuoteRefresher({\n messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config = {\n isMaxAmount: transactionData.isMaxAmount,\n isPostQuote: transactionData.isPostQuote,\n };\n\n callback(config);\n\n transactionData.isMaxAmount = config.isMaxAmount;\n transactionData.isPostQuote = config.isPostQuote;\n });\n }\n\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\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\n if (!current) {\n transactionData[transactionId] = {\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 isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated\n ) {\n updateSourceAmounts(transactionId, current as never, this.messenger);\n\n shouldUpdateQuotes = true;\n }\n });\n\n if (shouldUpdateQuotes) {\n updateQuotes({\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 #registerActionHandlers(): void {\n this.messenger.registerActionHandler(\n 'TransactionPayController:getDelegationTransaction',\n this.#getDelegationTransaction.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:getStrategy',\n this.#getStrategy ??\n ((): TransactionPayStrategy => TransactionPayStrategy.Relay),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:setTransactionConfig',\n this.setTransactionConfig.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:updatePaymentToken',\n this.updatePaymentToken.bind(this),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"TransactionPayController.cjs","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';\n\nimport { updatePaymentToken } from './actions/update-payment-token';\nimport {\n CONTROLLER_NAME,\n isTransactionPayStrategy,\n TransactionPayStrategy,\n} from './constants';\nimport { QuoteRefresher } from './helpers/QuoteRefresher';\nimport type {\n GetDelegationTransactionCallback,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdatePaymentTokenRequest,\n} from './types';\nimport { getStrategyOrder } from './utils/feature-flags';\nimport { updateQuotes } from './utils/quotes';\nimport { updateSourceAmounts } from './utils/source-amounts';\nimport { pollTransactionChanges } from './utils/transaction';\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 #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n readonly #getStrategies?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy[];\n\n constructor({\n getDelegationTransaction,\n getStrategy,\n getStrategies,\n messenger,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getStrategy = getStrategy;\n this.#getStrategies = getStrategies;\n\n this.#registerActionHandlers();\n\n pollTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.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 setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config = {\n isMaxAmount: transactionData.isMaxAmount,\n isPostQuote: transactionData.isPostQuote,\n };\n\n callback(config);\n\n transactionData.isMaxAmount = config.isMaxAmount;\n transactionData.isPostQuote = config.isPostQuote;\n });\n }\n\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\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\n if (!current) {\n transactionData[transactionId] = {\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 isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated\n ) {\n updateSourceAmounts(transactionId, current as never, this.messenger);\n\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 #registerActionHandlers(): void {\n this.messenger.registerActionHandler(\n 'TransactionPayController:getDelegationTransaction',\n this.#getDelegationTransaction.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:getStrategy',\n (transaction: TransactionMeta): TransactionPayStrategy =>\n this.#getStrategiesWithFallback(transaction)[0],\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:setTransactionConfig',\n this.setTransactionConfig.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:updatePaymentToken',\n this.updatePaymentToken.bind(this),\n );\n }\n\n #getStrategiesWithFallback(\n transaction: TransactionMeta,\n ): TransactionPayStrategy[] {\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 return validStrategies.length\n ? validStrategies\n : getStrategyOrder(this.messenger);\n }\n}\n"]}
@@ -3,7 +3,7 @@ import { CONTROLLER_NAME } from "./constants.cjs";
3
3
  import type { TransactionConfigCallback, TransactionPayControllerMessenger, TransactionPayControllerOptions, TransactionPayControllerState, UpdatePaymentTokenRequest } from "./types.cjs";
4
4
  export declare class TransactionPayController extends BaseController<typeof CONTROLLER_NAME, TransactionPayControllerState, TransactionPayControllerMessenger> {
5
5
  #private;
6
- constructor({ getDelegationTransaction, getStrategy, messenger, state, }: TransactionPayControllerOptions);
6
+ constructor({ getDelegationTransaction, getStrategy, getStrategies, messenger, state, }: TransactionPayControllerOptions);
7
7
  setTransactionConfig(transactionId: string, callback: TransactionConfigCallback): void;
8
8
  updatePaymentToken(request: UpdatePaymentTokenRequest): void;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionPayController.d.cts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAM3D,OAAO,EAAE,eAAe,EAA0B,wBAAoB;AAEtE,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EAC1B,oBAAgB;AAkBjB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;gBAOa,EACV,wBAAwB,EACxB,WAAW,EACX,SAAS,EACT,KAAK,GACN,EAAE,+BAA+B;IA0BlC,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,yBAAyB,GAClC,IAAI;IAcP,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;CA2F7D"}
1
+ {"version":3,"file":"TransactionPayController.d.cts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAM3D,OAAO,EACL,eAAe,EAGhB,wBAAoB;AAErB,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EAC1B,oBAAgB;AAmBjB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;gBAWa,EACV,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,+BAA+B;IA4BlC,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,yBAAyB,GAClC,IAAI;IAcP,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;CA6G7D"}
@@ -3,7 +3,7 @@ import { CONTROLLER_NAME } from "./constants.mjs";
3
3
  import type { TransactionConfigCallback, TransactionPayControllerMessenger, TransactionPayControllerOptions, TransactionPayControllerState, UpdatePaymentTokenRequest } from "./types.mjs";
4
4
  export declare class TransactionPayController extends BaseController<typeof CONTROLLER_NAME, TransactionPayControllerState, TransactionPayControllerMessenger> {
5
5
  #private;
6
- constructor({ getDelegationTransaction, getStrategy, messenger, state, }: TransactionPayControllerOptions);
6
+ constructor({ getDelegationTransaction, getStrategy, getStrategies, messenger, state, }: TransactionPayControllerOptions);
7
7
  setTransactionConfig(transactionId: string, callback: TransactionConfigCallback): void;
8
8
  updatePaymentToken(request: UpdatePaymentTokenRequest): void;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionPayController.d.mts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAM3D,OAAO,EAAE,eAAe,EAA0B,wBAAoB;AAEtE,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EAC1B,oBAAgB;AAkBjB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;gBAOa,EACV,wBAAwB,EACxB,WAAW,EACX,SAAS,EACT,KAAK,GACN,EAAE,+BAA+B;IA0BlC,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,yBAAyB,GAClC,IAAI;IAcP,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;CA2F7D"}
1
+ {"version":3,"file":"TransactionPayController.d.mts","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAM3D,OAAO,EACL,eAAe,EAGhB,wBAAoB;AAErB,OAAO,KAAK,EAEV,yBAAyB,EAEzB,iCAAiC,EACjC,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,EAC1B,oBAAgB;AAmBjB,qBAAa,wBAAyB,SAAQ,cAAc,CAC1D,OAAO,eAAe,EACtB,6BAA6B,EAC7B,iCAAiC,CAClC;;gBAWa,EACV,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,SAAS,EACT,KAAK,GACN,EAAE,+BAA+B;IA4BlC,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,yBAAyB,GAClC,IAAI;IAcP,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;CA6G7D"}
@@ -9,13 +9,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _TransactionPayController_instances, _TransactionPayController_getDelegationTransaction, _TransactionPayController_getStrategy, _TransactionPayController_removeTransactionData, _TransactionPayController_updateTransactionData, _TransactionPayController_registerActionHandlers;
12
+ var _TransactionPayController_instances, _TransactionPayController_getDelegationTransaction, _TransactionPayController_getStrategy, _TransactionPayController_getStrategies, _TransactionPayController_removeTransactionData, _TransactionPayController_updateTransactionData, _TransactionPayController_registerActionHandlers, _TransactionPayController_getStrategiesWithFallback;
13
13
  import { BaseController } from "@metamask/base-controller";
14
14
  import $lodash from "lodash";
15
15
  const { noop } = $lodash;
16
16
  import { updatePaymentToken } from "./actions/update-payment-token.mjs";
17
- import { CONTROLLER_NAME, TransactionPayStrategy } from "./constants.mjs";
17
+ import { CONTROLLER_NAME, isTransactionPayStrategy, TransactionPayStrategy } from "./constants.mjs";
18
18
  import { QuoteRefresher } from "./helpers/QuoteRefresher.mjs";
19
+ import { getStrategyOrder } from "./utils/feature-flags.mjs";
19
20
  import { updateQuotes } from "./utils/quotes.mjs";
20
21
  import { updateSourceAmounts } from "./utils/source-amounts.mjs";
21
22
  import { pollTransactionChanges } from "./utils/transaction.mjs";
@@ -31,7 +32,7 @@ const getDefaultState = () => ({
31
32
  transactionData: {},
32
33
  });
33
34
  export class TransactionPayController extends BaseController {
34
- constructor({ getDelegationTransaction, getStrategy, messenger, state, }) {
35
+ constructor({ getDelegationTransaction, getStrategy, getStrategies, messenger, state, }) {
35
36
  super({
36
37
  name: CONTROLLER_NAME,
37
38
  metadata: stateMetadata,
@@ -41,12 +42,15 @@ export class TransactionPayController extends BaseController {
41
42
  _TransactionPayController_instances.add(this);
42
43
  _TransactionPayController_getDelegationTransaction.set(this, void 0);
43
44
  _TransactionPayController_getStrategy.set(this, void 0);
45
+ _TransactionPayController_getStrategies.set(this, void 0);
44
46
  __classPrivateFieldSet(this, _TransactionPayController_getDelegationTransaction, getDelegationTransaction, "f");
45
47
  __classPrivateFieldSet(this, _TransactionPayController_getStrategy, getStrategy, "f");
48
+ __classPrivateFieldSet(this, _TransactionPayController_getStrategies, getStrategies, "f");
46
49
  __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_registerActionHandlers).call(this);
47
50
  pollTransactionChanges(messenger, __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_updateTransactionData).bind(this), __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_removeTransactionData).bind(this));
48
51
  // eslint-disable-next-line no-new
49
52
  new QuoteRefresher({
53
+ getStrategies: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).bind(this),
50
54
  messenger,
51
55
  updateTransactionData: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_updateTransactionData).bind(this),
52
56
  });
@@ -69,7 +73,7 @@ export class TransactionPayController extends BaseController {
69
73
  });
70
74
  }
71
75
  }
72
- _TransactionPayController_getDelegationTransaction = new WeakMap(), _TransactionPayController_getStrategy = new WeakMap(), _TransactionPayController_instances = new WeakSet(), _TransactionPayController_removeTransactionData = function _TransactionPayController_removeTransactionData(transactionId) {
76
+ _TransactionPayController_getDelegationTransaction = new WeakMap(), _TransactionPayController_getStrategy = new WeakMap(), _TransactionPayController_getStrategies = new WeakMap(), _TransactionPayController_instances = new WeakSet(), _TransactionPayController_removeTransactionData = function _TransactionPayController_removeTransactionData(transactionId) {
73
77
  this.update((state) => {
74
78
  delete state.transactionData[transactionId];
75
79
  });
@@ -106,6 +110,7 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
106
110
  });
107
111
  if (shouldUpdateQuotes) {
108
112
  updateQuotes({
113
+ getStrategies: __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).bind(this),
109
114
  messenger: this.messenger,
110
115
  transactionData: this.state.transactionData[transactionId],
111
116
  transactionId,
@@ -114,9 +119,15 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
114
119
  }
115
120
  }, _TransactionPayController_registerActionHandlers = function _TransactionPayController_registerActionHandlers() {
116
121
  this.messenger.registerActionHandler('TransactionPayController:getDelegationTransaction', __classPrivateFieldGet(this, _TransactionPayController_getDelegationTransaction, "f").bind(this));
117
- this.messenger.registerActionHandler('TransactionPayController:getStrategy', __classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f") ??
118
- (() => TransactionPayStrategy.Relay));
122
+ this.messenger.registerActionHandler('TransactionPayController:getStrategy', (transaction) => __classPrivateFieldGet(this, _TransactionPayController_instances, "m", _TransactionPayController_getStrategiesWithFallback).call(this, transaction)[0]);
119
123
  this.messenger.registerActionHandler('TransactionPayController:setTransactionConfig', this.setTransactionConfig.bind(this));
120
124
  this.messenger.registerActionHandler('TransactionPayController:updatePaymentToken', this.updatePaymentToken.bind(this));
125
+ }, _TransactionPayController_getStrategiesWithFallback = function _TransactionPayController_getStrategiesWithFallback(transaction) {
126
+ const strategyCandidates = __classPrivateFieldGet(this, _TransactionPayController_getStrategies, "f")?.call(this, transaction) ??
127
+ (__classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f") ? [__classPrivateFieldGet(this, _TransactionPayController_getStrategy, "f").call(this, transaction)] : []);
128
+ const validStrategies = strategyCandidates.filter((strategy) => isTransactionPayStrategy(strategy));
129
+ return validStrategies.length
130
+ ? validStrategies
131
+ : getStrategyOrder(this.messenger);
121
132
  };
122
133
  //# sourceMappingURL=TransactionPayController.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionPayController.mjs","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';\n\nimport { updatePaymentToken } from './actions/update-payment-token';\nimport { CONTROLLER_NAME, TransactionPayStrategy } from './constants';\nimport { QuoteRefresher } from './helpers/QuoteRefresher';\nimport type {\n GetDelegationTransactionCallback,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdatePaymentTokenRequest,\n} from './types';\nimport { updateQuotes } from './utils/quotes';\nimport { updateSourceAmounts } from './utils/source-amounts';\nimport { pollTransactionChanges } from './utils/transaction';\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 #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n constructor({\n getDelegationTransaction,\n getStrategy,\n messenger,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getStrategy = getStrategy;\n\n this.#registerActionHandlers();\n\n pollTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.bind(this),\n );\n\n // eslint-disable-next-line no-new\n new QuoteRefresher({\n messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\n }\n\n setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config = {\n isMaxAmount: transactionData.isMaxAmount,\n isPostQuote: transactionData.isPostQuote,\n };\n\n callback(config);\n\n transactionData.isMaxAmount = config.isMaxAmount;\n transactionData.isPostQuote = config.isPostQuote;\n });\n }\n\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\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\n if (!current) {\n transactionData[transactionId] = {\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 isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated\n ) {\n updateSourceAmounts(transactionId, current as never, this.messenger);\n\n shouldUpdateQuotes = true;\n }\n });\n\n if (shouldUpdateQuotes) {\n updateQuotes({\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 #registerActionHandlers(): void {\n this.messenger.registerActionHandler(\n 'TransactionPayController:getDelegationTransaction',\n this.#getDelegationTransaction.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:getStrategy',\n this.#getStrategy ??\n ((): TransactionPayStrategy => TransactionPayStrategy.Relay),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:setTransactionConfig',\n this.setTransactionConfig.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:updatePaymentToken',\n this.updatePaymentToken.bind(this),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"TransactionPayController.mjs","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';\n\nimport { updatePaymentToken } from './actions/update-payment-token';\nimport {\n CONTROLLER_NAME,\n isTransactionPayStrategy,\n TransactionPayStrategy,\n} from './constants';\nimport { QuoteRefresher } from './helpers/QuoteRefresher';\nimport type {\n GetDelegationTransactionCallback,\n TransactionConfigCallback,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayControllerOptions,\n TransactionPayControllerState,\n UpdatePaymentTokenRequest,\n} from './types';\nimport { getStrategyOrder } from './utils/feature-flags';\nimport { updateQuotes } from './utils/quotes';\nimport { updateSourceAmounts } from './utils/source-amounts';\nimport { pollTransactionChanges } from './utils/transaction';\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 #getDelegationTransaction: GetDelegationTransactionCallback;\n\n readonly #getStrategy?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy;\n\n readonly #getStrategies?: (\n transaction: TransactionMeta,\n ) => TransactionPayStrategy[];\n\n constructor({\n getDelegationTransaction,\n getStrategy,\n getStrategies,\n messenger,\n state,\n }: TransactionPayControllerOptions) {\n super({\n name: CONTROLLER_NAME,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.#getDelegationTransaction = getDelegationTransaction;\n this.#getStrategy = getStrategy;\n this.#getStrategies = getStrategies;\n\n this.#registerActionHandlers();\n\n pollTransactionChanges(\n messenger,\n this.#updateTransactionData.bind(this),\n this.#removeTransactionData.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 setTransactionConfig(\n transactionId: string,\n callback: TransactionConfigCallback,\n ): void {\n this.#updateTransactionData(transactionId, (transactionData) => {\n const config = {\n isMaxAmount: transactionData.isMaxAmount,\n isPostQuote: transactionData.isPostQuote,\n };\n\n callback(config);\n\n transactionData.isMaxAmount = config.isMaxAmount;\n transactionData.isPostQuote = config.isPostQuote;\n });\n }\n\n updatePaymentToken(request: UpdatePaymentTokenRequest): void {\n updatePaymentToken(request, {\n messenger: this.messenger,\n updateTransactionData: this.#updateTransactionData.bind(this),\n });\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\n if (!current) {\n transactionData[transactionId] = {\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 isTokensUpdated = current.tokens !== originalTokens;\n const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;\n const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;\n\n if (\n isPaymentTokenUpdated ||\n isIsMaxUpdated ||\n isTokensUpdated ||\n isPostQuoteUpdated\n ) {\n updateSourceAmounts(transactionId, current as never, this.messenger);\n\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 #registerActionHandlers(): void {\n this.messenger.registerActionHandler(\n 'TransactionPayController:getDelegationTransaction',\n this.#getDelegationTransaction.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:getStrategy',\n (transaction: TransactionMeta): TransactionPayStrategy =>\n this.#getStrategiesWithFallback(transaction)[0],\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:setTransactionConfig',\n this.setTransactionConfig.bind(this),\n );\n\n this.messenger.registerActionHandler(\n 'TransactionPayController:updatePaymentToken',\n this.updatePaymentToken.bind(this),\n );\n }\n\n #getStrategiesWithFallback(\n transaction: TransactionMeta,\n ): TransactionPayStrategy[] {\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 return validStrategies.length\n ? validStrategies\n : getStrategyOrder(this.messenger);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionPayStrategy = exports.STABLECOINS = exports.POLYGON_USDCE_ADDRESS = exports.ARBITRUM_USDC_ADDRESS = exports.NATIVE_TOKEN_ADDRESS = exports.CHAIN_ID_HYPERCORE = exports.CHAIN_ID_POLYGON = exports.CHAIN_ID_ARBITRUM = exports.CONTROLLER_NAME = void 0;
3
+ exports.isTransactionPayStrategy = exports.TransactionPayStrategy = exports.STABLECOINS = exports.POLYGON_USDCE_ADDRESS = exports.ARBITRUM_USDC_ADDRESS = exports.NATIVE_TOKEN_ADDRESS = exports.CHAIN_ID_HYPERCORE = exports.CHAIN_ID_POLYGON = exports.CHAIN_ID_ARBITRUM = exports.CONTROLLER_NAME = void 0;
4
4
  exports.CONTROLLER_NAME = 'TransactionPayController';
5
5
  exports.CHAIN_ID_ARBITRUM = '0xa4b1';
6
6
  exports.CHAIN_ID_POLYGON = '0x89';
@@ -31,4 +31,15 @@ var TransactionPayStrategy;
31
31
  TransactionPayStrategy["Relay"] = "relay";
32
32
  TransactionPayStrategy["Test"] = "test";
33
33
  })(TransactionPayStrategy || (exports.TransactionPayStrategy = TransactionPayStrategy = {}));
34
+ const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));
35
+ /**
36
+ * Checks if a value is a valid transaction pay strategy.
37
+ *
38
+ * @param strategy - Candidate strategy value.
39
+ * @returns True if the value is a valid strategy.
40
+ */
41
+ function isTransactionPayStrategy(strategy) {
42
+ return VALID_STRATEGIES.has(strategy);
43
+ }
44
+ exports.isTransactionPayStrategy = isTransactionPayStrategy;
34
45
  //# sourceMappingURL=constants.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,eAAe,GAAG,0BAA0B,CAAC;AAC7C,QAAA,iBAAiB,GAAG,QAAe,CAAC;AACpC,QAAA,gBAAgB,GAAG,MAAa,CAAC;AACjC,QAAA,kBAAkB,GAAG,OAAc,CAAC;AAEpC,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,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,CAAC,6BAAqB,CAAC,WAAW,EAAS,CAAC;IAChE,CAAC,0BAAkB,CAAC,EAAE,CAAC,oCAAoC,CAAC,EAAE,OAAO;CACtE,CAAC;AAEF,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,uCAAa,CAAA;AACf,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' 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 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]: [POLYGON_USDCE_ADDRESS.toLowerCase() as Hex],\n [CHAIN_ID_HYPERCORE]: ['0x00000000000000000000000000000000'], // USDC\n};\n\nexport enum TransactionPayStrategy {\n Bridge = 'bridge',\n Relay = 'relay',\n Test = 'test',\n}\n"]}
1
+ {"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,eAAe,GAAG,0BAA0B,CAAC;AAC7C,QAAA,iBAAiB,GAAG,QAAe,CAAC;AACpC,QAAA,gBAAgB,GAAG,MAAa,CAAC;AACjC,QAAA,kBAAkB,GAAG,OAAc,CAAC;AAEpC,QAAA,oBAAoB,GAC/B,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,QAAA,qBAAqB,GAChC,4CAAmD,CAAC;AAEzC,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,CAAC,6BAAqB,CAAC,WAAW,EAAS,CAAC;IAChE,CAAC,0BAAkB,CAAC,EAAE,CAAC,oCAAoC,CAAC,EAAE,OAAO;CACtE,CAAC;AAEF,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,uCAAa,CAAA;AACf,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAExE;;;;;GAKG;AACH,SAAgB,wBAAwB,CACtC,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAkC,CAAC,CAAC;AAClE,CAAC;AAJD,4DAIC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' 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 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]: [POLYGON_USDCE_ADDRESS.toLowerCase() as Hex],\n [CHAIN_ID_HYPERCORE]: ['0x00000000000000000000000000000000'], // USDC\n};\n\nexport enum TransactionPayStrategy {\n Bridge = 'bridge',\n Relay = 'relay',\n Test = 'test',\n}\n\nconst VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));\n\n/**\n * Checks if a value is a valid transaction pay strategy.\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"]}
@@ -12,4 +12,11 @@ export declare enum TransactionPayStrategy {
12
12
  Relay = "relay",
13
13
  Test = "test"
14
14
  }
15
+ /**
16
+ * Checks if a value is a valid transaction pay strategy.
17
+ *
18
+ * @param strategy - Candidate strategy value.
19
+ * @returns True if the value is a valid strategy.
20
+ */
21
+ export declare function isTransactionPayStrategy(strategy: unknown): strategy is TransactionPayStrategy;
15
22
  //# sourceMappingURL=constants.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAgB1C,CAAC;AAEF,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd"}
1
+ {"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAgB1C,CAAC;AAEF,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAID;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,sBAAsB,CAEpC"}
@@ -12,4 +12,11 @@ export declare enum TransactionPayStrategy {
12
12
  Relay = "relay",
13
13
  Test = "test"
14
14
  }
15
+ /**
16
+ * Checks if a value is a valid transaction pay strategy.
17
+ *
18
+ * @param strategy - Candidate strategy value.
19
+ * @returns True if the value is a valid strategy.
20
+ */
21
+ export declare function isTransactionPayStrategy(strategy: unknown): strategy is TransactionPayStrategy;
15
22
  //# sourceMappingURL=constants.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAgB1C,CAAC;AAEF,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd"}
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,iBAAiB,eAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,eAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,eAAiB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,eACoB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,qBAAqB,eACmB,CAAC;AAEtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAgB1C,CAAC;AAEF,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAID;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAChB,QAAQ,IAAI,sBAAsB,CAEpC"}
@@ -28,4 +28,14 @@ export var TransactionPayStrategy;
28
28
  TransactionPayStrategy["Relay"] = "relay";
29
29
  TransactionPayStrategy["Test"] = "test";
30
30
  })(TransactionPayStrategy || (TransactionPayStrategy = {}));
31
+ const VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));
32
+ /**
33
+ * Checks if a value is a valid transaction pay strategy.
34
+ *
35
+ * @param strategy - Candidate strategy value.
36
+ * @returns True if the value is a valid strategy.
37
+ */
38
+ export function isTransactionPayStrategy(strategy) {
39
+ return VALID_STRATEGIES.has(strategy);
40
+ }
31
41
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAe,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAc,CAAC;AAEjD,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,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,CAAC,qBAAqB,CAAC,WAAW,EAAS,CAAC;IAChE,CAAC,kBAAkB,CAAC,EAAE,CAAC,oCAAoC,CAAC,EAAE,OAAO;CACtE,CAAC;AAEF,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,uCAAa,CAAA;AACf,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' 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 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]: [POLYGON_USDCE_ADDRESS.toLowerCase() as Hex],\n [CHAIN_ID_HYPERCORE]: ['0x00000000000000000000000000000000'], // USDC\n};\n\nexport enum TransactionPayStrategy {\n Bridge = 'bridge',\n Relay = 'relay',\n Test = 'test',\n}\n"]}
1
+ {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAe,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAc,CAAC;AAEjD,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,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,CAAC,qBAAqB,CAAC,WAAW,EAAS,CAAC;IAChE,CAAC,kBAAkB,CAAC,EAAE,CAAC,oCAAoC,CAAC,EAAE,OAAO;CACtE,CAAC;AAEF,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,uCAAa,CAAA;AACf,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAiB;IAEjB,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAkC,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport const CONTROLLER_NAME = 'TransactionPayController';\nexport const CHAIN_ID_ARBITRUM = '0xa4b1' as Hex;\nexport const CHAIN_ID_POLYGON = '0x89' as Hex;\nexport const CHAIN_ID_HYPERCORE = '0x539' 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 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]: [POLYGON_USDCE_ADDRESS.toLowerCase() as Hex],\n [CHAIN_ID_HYPERCORE]: ['0x00000000000000000000000000000000'], // USDC\n};\n\nexport enum TransactionPayStrategy {\n Bridge = 'bridge',\n Relay = 'relay',\n Test = 'test',\n}\n\nconst VALID_STRATEGIES = new Set(Object.values(TransactionPayStrategy));\n\n/**\n * Checks if a value is a valid transaction pay strategy.\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"]}
@@ -10,23 +10,26 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _QuoteRefresher_instances, _QuoteRefresher_isRunning, _QuoteRefresher_isUpdating, _QuoteRefresher_messenger, _QuoteRefresher_timeoutId, _QuoteRefresher_updateTransactionData, _QuoteRefresher_start, _QuoteRefresher_stop, _QuoteRefresher_onInterval, _QuoteRefresher_queueNextInterval, _QuoteRefresher_onStateChange;
13
+ var _QuoteRefresher_instances, _QuoteRefresher_isRunning, _QuoteRefresher_isUpdating, _QuoteRefresher_messenger, _QuoteRefresher_timeoutId, _QuoteRefresher_getStrategies, _QuoteRefresher_updateTransactionData, _QuoteRefresher_start, _QuoteRefresher_stop, _QuoteRefresher_onInterval, _QuoteRefresher_queueNextInterval, _QuoteRefresher_onStateChange;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.QuoteRefresher = void 0;
16
16
  const utils_1 = require("@metamask/utils");
17
17
  const lodash_1 = require("lodash");
18
+ const constants_1 = require("../constants.cjs");
18
19
  const logger_1 = require("../logger.cjs");
19
20
  const quotes_1 = require("../utils/quotes.cjs");
20
21
  const CHECK_INTERVAL = 1000; // 1 Second
21
22
  const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'quote-refresh');
22
23
  class QuoteRefresher {
23
- constructor({ messenger, updateTransactionData, }) {
24
+ constructor({ getStrategies, messenger, updateTransactionData, }) {
24
25
  _QuoteRefresher_instances.add(this);
25
26
  _QuoteRefresher_isRunning.set(this, void 0);
26
27
  _QuoteRefresher_isUpdating.set(this, void 0);
27
28
  _QuoteRefresher_messenger.set(this, void 0);
28
29
  _QuoteRefresher_timeoutId.set(this, void 0);
30
+ _QuoteRefresher_getStrategies.set(this, void 0);
29
31
  _QuoteRefresher_updateTransactionData.set(this, void 0);
32
+ __classPrivateFieldSet(this, _QuoteRefresher_getStrategies, getStrategies, "f");
30
33
  __classPrivateFieldSet(this, _QuoteRefresher_messenger, messenger, "f");
31
34
  __classPrivateFieldSet(this, _QuoteRefresher_isRunning, false, "f");
32
35
  __classPrivateFieldSet(this, _QuoteRefresher_isUpdating, false, "f");
@@ -35,7 +38,7 @@ class QuoteRefresher {
35
38
  }
36
39
  }
37
40
  exports.QuoteRefresher = QuoteRefresher;
38
- _QuoteRefresher_isRunning = new WeakMap(), _QuoteRefresher_isUpdating = new WeakMap(), _QuoteRefresher_messenger = new WeakMap(), _QuoteRefresher_timeoutId = new WeakMap(), _QuoteRefresher_updateTransactionData = new WeakMap(), _QuoteRefresher_instances = new WeakSet(), _QuoteRefresher_start = function _QuoteRefresher_start() {
41
+ _QuoteRefresher_isRunning = new WeakMap(), _QuoteRefresher_isUpdating = new WeakMap(), _QuoteRefresher_messenger = new WeakMap(), _QuoteRefresher_timeoutId = new WeakMap(), _QuoteRefresher_getStrategies = new WeakMap(), _QuoteRefresher_updateTransactionData = new WeakMap(), _QuoteRefresher_instances = new WeakSet(), _QuoteRefresher_start = function _QuoteRefresher_start() {
39
42
  __classPrivateFieldSet(this, _QuoteRefresher_isRunning, true, "f");
40
43
  log('Started');
41
44
  if (__classPrivateFieldGet(this, _QuoteRefresher_isUpdating, "f")) {
@@ -51,7 +54,7 @@ _QuoteRefresher_isRunning = new WeakMap(), _QuoteRefresher_isUpdating = new Weak
51
54
  }, _QuoteRefresher_onInterval = async function _QuoteRefresher_onInterval() {
52
55
  __classPrivateFieldSet(this, _QuoteRefresher_isUpdating, true, "f");
53
56
  try {
54
- await (0, quotes_1.refreshQuotes)(__classPrivateFieldGet(this, _QuoteRefresher_messenger, "f"), __classPrivateFieldGet(this, _QuoteRefresher_updateTransactionData, "f"));
57
+ await (0, quotes_1.refreshQuotes)(__classPrivateFieldGet(this, _QuoteRefresher_messenger, "f"), __classPrivateFieldGet(this, _QuoteRefresher_updateTransactionData, "f"), __classPrivateFieldGet(this, _QuoteRefresher_getStrategies, "f"));
55
58
  }
56
59
  catch (error) {
57
60
  log('Error refreshing quotes', error);
@@ -1 +1 @@
1
- {"version":3,"file":"QuoteRefresher.cjs","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqD;AACrD,mCAA8B;AAM9B,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;IAWzB,YAAY,EACV,SAAS,EACT,qBAAqB,GAItB;;QAhBD,4CAAoB;QAEpB,6CAAqB;QAEZ,4CAA8C;QAEvD,4CAAuC;QAE9B,wDAAsD;QAS7D,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;CA+DF;AA1FD,wCA0FC;;IA5DG,uBAAA,IAAI,6BAAc,IAAI,MAAA,CAAC;IAEvB,GAAG,CAAC,SAAS,CAAC,CAAC;IAEf,IAAI,uBAAA,IAAI,kCAAY,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,uBAAA,IAAI,oEAAmB,MAAvB,IAAI,CAAqB,CAAC;AAC5B,CAAC;IAGC,IAAI,uBAAA,IAAI,iCAAW,EAAE,CAAC;QACpB,YAAY,CAAC,uBAAA,IAAI,iCAAW,CAAC,CAAC;IAChC,CAAC;IAED,uBAAA,IAAI,6BAAc,KAAK,MAAA,CAAC;IAExB,GAAG,CAAC,SAAS,CAAC,CAAC;AACjB,CAAC,+BAED,KAAK;IACH,uBAAA,IAAI,8BAAe,IAAI,MAAA,CAAC;IAExB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,EAAC,uBAAA,IAAI,iCAAW,EAAE,uBAAA,IAAI,6CAAuB,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,uBAAA,IAAI,8BAAe,KAAK,MAAA,CAAC;QAEzB,uBAAA,IAAI,oEAAmB,MAAvB,IAAI,CAAqB,CAAC;IAC5B,CAAC;AACH,CAAC;IAGC,IAAI,CAAC,uBAAA,IAAI,iCAAW,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,uBAAA,IAAI,iCAAW,EAAE,CAAC;QACpB,YAAY,CAAC,uBAAA,IAAI,iCAAW,CAAC,CAAC;IAChC,CAAC;IAED,uBAAA,IAAI,6BAAc,UAAU,CAAC,GAAG,EAAE;QAChC,uBAAA,IAAI,6DAAY,MAAhB,IAAI,CAAc,CAAC,KAAK,CAAC,aAAI,CAAC,CAAC;IACjC,CAAC,EAAE,cAAc,CAAC,MAAA,CAAC;AACrB,CAAC,yEAEc,KAAoC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAC1E,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CACpC,CAAC;IAEF,IAAI,SAAS,IAAI,CAAC,uBAAA,IAAI,iCAAW,EAAE,CAAC;QAClC,uBAAA,IAAI,wDAAO,MAAX,IAAI,CAAS,CAAC;IAChB,CAAC;SAAM,IAAI,CAAC,SAAS,IAAI,uBAAA,IAAI,iCAAW,EAAE,CAAC;QACzC,uBAAA,IAAI,uDAAM,MAAV,IAAI,CAAQ,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport { noop } from 'lodash';\n\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayControllerState,\n} from '..';\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 #updateTransactionData: UpdateTransactionDataCallback;\n\n constructor({\n messenger,\n updateTransactionData,\n }: {\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n }) {\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(this.#messenger, this.#updateTransactionData);\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 const hasQuotes = Object.values(state.transactionData).some((transaction) =>\n Boolean(transaction.quotes?.length),\n );\n\n if (hasQuotes && !this.#isRunning) {\n this.#start();\n } else if (!hasQuotes && this.#isRunning) {\n this.#stop();\n }\n }\n}\n"]}
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 const hasQuotes = Object.values(state.transactionData).some((transaction) =>\n Boolean(transaction.quotes?.length),\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,11 @@
1
+ import type { TransactionMeta } from "@metamask/transaction-controller";
1
2
  import type { TransactionPayControllerMessenger } from "../index.cjs";
3
+ import { TransactionPayStrategy } from "../constants.cjs";
2
4
  import type { UpdateTransactionDataCallback } from "../types.cjs";
3
5
  export declare class QuoteRefresher {
4
6
  #private;
5
- constructor({ messenger, updateTransactionData, }: {
7
+ constructor({ getStrategies, messenger, updateTransactionData, }: {
8
+ getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];
6
9
  messenger: TransactionPayControllerMessenger;
7
10
  updateTransactionData: UpdateTransactionDataCallback;
8
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"QuoteRefresher.d.cts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AAEZ,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAWb,EACV,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;CAyEF"}
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;CA8EF"}
@@ -1,8 +1,11 @@
1
+ import type { TransactionMeta } from "@metamask/transaction-controller";
1
2
  import type { TransactionPayControllerMessenger } from "../index.mjs";
3
+ import { TransactionPayStrategy } from "../constants.mjs";
2
4
  import type { UpdateTransactionDataCallback } from "../types.mjs";
3
5
  export declare class QuoteRefresher {
4
6
  #private;
5
- constructor({ messenger, updateTransactionData, }: {
7
+ constructor({ getStrategies, messenger, updateTransactionData, }: {
8
+ getStrategies: (transaction: TransactionMeta) => TransactionPayStrategy[];
6
9
  messenger: TransactionPayControllerMessenger;
7
10
  updateTransactionData: UpdateTransactionDataCallback;
8
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"QuoteRefresher.d.mts","sourceRoot":"","sources":["../../src/helpers/QuoteRefresher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAW;AAEZ,OAAO,KAAK,EAAE,6BAA6B,EAAE,qBAAiB;AAO9D,qBAAa,cAAc;;gBAWb,EACV,SAAS,EACT,qBAAqB,GACtB,EAAE;QACD,SAAS,EAAE,iCAAiC,CAAC;QAC7C,qBAAqB,EAAE,6BAA6B,CAAC;KACtD;CAyEF"}
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;CA8EF"}