@metamask/transaction-pay-controller 15.1.1 → 16.0.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 +29 -1
- package/dist/TransactionPayController.cjs +3 -1
- package/dist/TransactionPayController.cjs.map +1 -1
- package/dist/TransactionPayController.d.cts.map +1 -1
- package/dist/TransactionPayController.d.mts.map +1 -1
- package/dist/TransactionPayController.mjs +3 -1
- package/dist/TransactionPayController.mjs.map +1 -1
- package/dist/actions/update-payment-token.cjs +1 -11
- package/dist/actions/update-payment-token.cjs.map +1 -1
- package/dist/actions/update-payment-token.d.cts.map +1 -1
- package/dist/actions/update-payment-token.d.mts.map +1 -1
- package/dist/actions/update-payment-token.mjs +2 -12
- package/dist/actions/update-payment-token.mjs.map +1 -1
- package/dist/strategy/relay/constants.cjs +6 -1
- package/dist/strategy/relay/constants.cjs.map +1 -1
- package/dist/strategy/relay/constants.d.cts +2 -0
- package/dist/strategy/relay/constants.d.cts.map +1 -1
- package/dist/strategy/relay/constants.d.mts +2 -0
- package/dist/strategy/relay/constants.d.mts.map +1 -1
- package/dist/strategy/relay/constants.mjs +5 -0
- package/dist/strategy/relay/constants.mjs.map +1 -1
- package/dist/strategy/relay/relay-submit.cjs +71 -25
- package/dist/strategy/relay/relay-submit.cjs.map +1 -1
- package/dist/strategy/relay/relay-submit.d.cts.map +1 -1
- package/dist/strategy/relay/relay-submit.d.mts.map +1 -1
- package/dist/strategy/relay/relay-submit.mjs +72 -26
- package/dist/strategy/relay/relay-submit.mjs.map +1 -1
- package/dist/utils/quotes.cjs +48 -10
- 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 +48 -10
- package/dist/utils/quotes.mjs.map +1 -1
- package/dist/utils/required-tokens.cjs +2 -28
- package/dist/utils/required-tokens.cjs.map +1 -1
- package/dist/utils/required-tokens.d.cts.map +1 -1
- package/dist/utils/required-tokens.d.mts.map +1 -1
- package/dist/utils/required-tokens.mjs +3 -29
- package/dist/utils/required-tokens.mjs.map +1 -1
- package/dist/utils/token.cjs +46 -4
- package/dist/utils/token.cjs.map +1 -1
- package/dist/utils/token.d.cts +29 -0
- package/dist/utils/token.d.cts.map +1 -1
- package/dist/utils/token.d.mts +29 -0
- package/dist/utils/token.d.mts.map +1 -1
- package/dist/utils/token.mjs +43 -3
- package/dist/utils/token.mjs.map +1 -1
- package/package.json +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [16.0.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **BREAKING:** Add live on-chain balance validation for pay transactions ([#7935](https://github.com/MetaMask/core/pull/7935))
|
|
15
|
+
- Refresh payment token balance via chain before each quote update.
|
|
16
|
+
- Validate source token balance via chain before submitting Relay deposits.
|
|
17
|
+
- Requires `NetworkController:getNetworkClientById` messenger action permission in `TransactionController` publish hook.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Bump `@metamask/transaction-controller` from `^62.17.1` to `^62.18.0` ([#8005](https://github.com/MetaMask/core/pull/8005))
|
|
22
|
+
- Replace `relayDeposit` transaction type with `predictRelayDeposit` or `perpsRelayDeposit` based on the parent transaction type ([#7947](https://github.com/MetaMask/core/pull/7947))
|
|
23
|
+
- Bump `@metamask/assets-controllers` from `^100.0.1` to `^100.0.2` ([#8004](https://github.com/MetaMask/core/pull/8004))
|
|
24
|
+
|
|
25
|
+
## [15.1.2]
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Bump `@metamask/assets-controllers` from `^100.0.0` to `^100.0.1` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
30
|
+
- Bump `@metamask/bridge-controller` from `^67.1.0` to `^67.1.1` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
31
|
+
- Bump `@metamask/bridge-status-controller` from `^67.0.0` to `^67.0.1` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
32
|
+
- Bump `@metamask/gas-fee-controller` from `^26.0.2` to `^26.0.3` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
33
|
+
- Bump `@metamask/network-controller` from `^29.0.0` to `^30.0.0` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
34
|
+
- Bump `@metamask/transaction-controller` from `^62.17.0` to `^62.17.1` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
35
|
+
|
|
10
36
|
## [15.1.1]
|
|
11
37
|
|
|
12
38
|
### Changed
|
|
@@ -402,7 +428,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
402
428
|
|
|
403
429
|
- Initial release ([#6820](https://github.com/MetaMask/core/pull/6820))
|
|
404
430
|
|
|
405
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@
|
|
431
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@16.0.0...HEAD
|
|
432
|
+
[16.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.2...@metamask/transaction-pay-controller@16.0.0
|
|
433
|
+
[15.1.2]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.1...@metamask/transaction-pay-controller@15.1.2
|
|
406
434
|
[15.1.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.1.0...@metamask/transaction-pay-controller@15.1.1
|
|
407
435
|
[15.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.0.1...@metamask/transaction-pay-controller@15.1.0
|
|
408
436
|
[15.0.1]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@15.0.0...@metamask/transaction-pay-controller@15.0.1
|
|
@@ -93,7 +93,9 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
|
|
|
93
93
|
current = transactionData[transactionId];
|
|
94
94
|
}
|
|
95
95
|
fn(current);
|
|
96
|
-
const isPaymentTokenUpdated = current.paymentToken !==
|
|
96
|
+
const isPaymentTokenUpdated = current.paymentToken?.address?.toLowerCase() !==
|
|
97
|
+
originalPaymentToken?.address?.toLowerCase() ||
|
|
98
|
+
current.paymentToken?.chainId !== originalPaymentToken?.chainId;
|
|
97
99
|
const isTokensUpdated = current.tokens !== originalTokens;
|
|
98
100
|
const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;
|
|
99
101
|
const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayController.cjs","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,+DAA2D;AAG3D,mCAA8B;AAE9B,6EAAoE;AACpE,+CAAsE;AACtE,iEAA0D;AAU1D,+CAA8C;AAC9C,+DAA6D;AAC7D,yDAA6D;AAE7D,MAAM,aAAa,GAAiD;IAClE,eAAe,EAAE;QACf,sBAAsB,EAAE,KAAK;QAC7B,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,GAAkC,EAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,MAAa,wBAAyB,SAAQ,gCAI7C;IAOC,YAAY,EACV,wBAAwB,EACxB,WAAW,EACX,SAAS,EACT,KAAK,GAC2B;QAChC,KAAK,CAAC;YACJ,IAAI,EAAE,2BAAe;YACrB,QAAQ,EAAE,aAAa;YACvB,SAAS;YACT,KAAK,EAAE,EAAE,GAAG,eAAe,EAAE,EAAE,GAAG,KAAK,EAAE;SAC1C,CAAC,CAAC;;QAjBI,qEAA4D;QAE5D,wDAEmB;QAe1B,uBAAA,IAAI,sDAA6B,wBAAwB,MAAA,CAAC;QAC1D,uBAAA,IAAI,yCAAgB,WAAW,MAAA,CAAC;QAEhC,uBAAA,IAAI,6FAAwB,MAA5B,IAAI,CAA0B,CAAC;QAE/B,IAAA,oCAAsB,EACpB,SAAS,EACT,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,kCAAkC;QAClC,IAAI,+BAAc,CAAC;YACjB,SAAS;YACT,qBAAqB,EAAE,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAClB,aAAqB,EACrB,QAAmC;QAEnC,uBAAA,IAAI,4FAAuB,MAA3B,IAAI,EAAwB,aAAa,EAAE,CAAC,eAAe,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAG;gBACb,WAAW,EAAE,eAAe,CAAC,WAAW;gBACxC,WAAW,EAAE,eAAe,CAAC,WAAW;aACzC,CAAC;YAEF,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjB,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACjD,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,OAAkC;QACnD,IAAA,yCAAkB,EAAC,OAAO,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;
|
|
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 +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;
|
|
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 +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;
|
|
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"}
|
|
@@ -90,7 +90,9 @@ _TransactionPayController_getDelegationTransaction = new WeakMap(), _Transaction
|
|
|
90
90
|
current = transactionData[transactionId];
|
|
91
91
|
}
|
|
92
92
|
fn(current);
|
|
93
|
-
const isPaymentTokenUpdated = current.paymentToken !==
|
|
93
|
+
const isPaymentTokenUpdated = current.paymentToken?.address?.toLowerCase() !==
|
|
94
|
+
originalPaymentToken?.address?.toLowerCase() ||
|
|
95
|
+
current.paymentToken?.chainId !== originalPaymentToken?.chainId;
|
|
94
96
|
const isTokensUpdated = current.tokens !== originalTokens;
|
|
95
97
|
const isIsMaxUpdated = current.isMaxAmount !== originalIsMaxAmount;
|
|
96
98
|
const isPostQuoteUpdated = current.isPostQuote !== originalIsPostQuote;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayController.mjs","sourceRoot":"","sources":["../src/TransactionPayController.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;;;AAK3D,OAAO,EAAE,kBAAkB,EAAE,2CAAuC;AACpE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,wBAAoB;AACtE,OAAO,EAAE,cAAc,EAAE,qCAAiC;AAU1D,OAAO,EAAE,YAAY,EAAE,2BAAuB;AAC9C,OAAO,EAAE,mBAAmB,EAAE,mCAA+B;AAC7D,OAAO,EAAE,sBAAsB,EAAE,gCAA4B;AAE7D,MAAM,aAAa,GAAiD;IAClE,eAAe,EAAE;QACf,sBAAsB,EAAE,KAAK;QAC7B,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,GAAkC,EAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,OAAO,wBAAyB,SAAQ,cAI7C;IAOC,YAAY,EACV,wBAAwB,EACxB,WAAW,EACX,SAAS,EACT,KAAK,GAC2B;QAChC,KAAK,CAAC;YACJ,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,aAAa;YACvB,SAAS;YACT,KAAK,EAAE,EAAE,GAAG,eAAe,EAAE,EAAE,GAAG,KAAK,EAAE;SAC1C,CAAC,CAAC;;QAjBI,qEAA4D;QAE5D,wDAEmB;QAe1B,uBAAA,IAAI,sDAA6B,wBAAwB,MAAA,CAAC;QAC1D,uBAAA,IAAI,yCAAgB,WAAW,MAAA,CAAC;QAEhC,uBAAA,IAAI,6FAAwB,MAA5B,IAAI,CAA0B,CAAC;QAE/B,sBAAsB,CACpB,SAAS,EACT,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EACtC,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;QAEF,kCAAkC;QAClC,IAAI,cAAc,CAAC;YACjB,SAAS;YACT,qBAAqB,EAAE,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAClB,aAAqB,EACrB,QAAmC;QAEnC,uBAAA,IAAI,4FAAuB,MAA3B,IAAI,EAAwB,aAAa,EAAE,CAAC,eAAe,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAG;gBACb,WAAW,EAAE,eAAe,CAAC,WAAW;gBACxC,WAAW,EAAE,eAAe,CAAC,WAAW;aACzC,CAAC;YAEF,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjB,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACjD,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,OAAkC;QACnD,kBAAkB,CAAC,OAAO,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,uBAAA,IAAI,4FAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;
|
|
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"]}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updatePaymentToken = void 0;
|
|
4
4
|
const utils_1 = require("@metamask/utils");
|
|
5
|
-
const bignumber_js_1 = require("bignumber.js");
|
|
6
5
|
const logger_1 = require("../logger.cjs");
|
|
7
6
|
const token_1 = require("../utils/token.cjs");
|
|
8
7
|
const transaction_1 = require("../utils/transaction.cjs");
|
|
@@ -55,16 +54,7 @@ function getPaymentToken({ chainId, from, messenger, tokenAddress, }) {
|
|
|
55
54
|
return undefined;
|
|
56
55
|
}
|
|
57
56
|
const balance = (0, token_1.getTokenBalance)(messenger, from, chainId, tokenAddress);
|
|
58
|
-
const
|
|
59
|
-
const balanceHumanValue = new bignumber_js_1.BigNumber(balance).shiftedBy(-decimals);
|
|
60
|
-
const balanceRaw = balanceRawValue.toFixed(0);
|
|
61
|
-
const balanceHuman = balanceHumanValue.toString(10);
|
|
62
|
-
const balanceFiat = balanceHumanValue
|
|
63
|
-
.multipliedBy(tokenFiatRate.fiatRate)
|
|
64
|
-
.toString(10);
|
|
65
|
-
const balanceUsd = balanceHumanValue
|
|
66
|
-
.multipliedBy(tokenFiatRate.usdRate)
|
|
67
|
-
.toString(10);
|
|
57
|
+
const { raw: balanceRaw, human: balanceHuman, usd: balanceUsd, fiat: balanceFiat, } = (0, token_1.computeTokenAmounts)(balance, decimals, tokenFiatRate);
|
|
68
58
|
return {
|
|
69
59
|
address: tokenAddress,
|
|
70
60
|
balanceFiat,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payment-token.cjs","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;
|
|
1
|
+
{"version":3,"file":"update-payment-token.cjs","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AAIrD,0CAA0C;AAM1C,8CAKwB;AACxB,0DAAsD;AAEtD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,sBAAsB,CAAC,CAAC;AAOtE;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,OAAkC,EAClC,OAAkC;IAElC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,OAAO;QACP,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAW;QACvC,SAAS;QACT,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,uBAAuB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAE9D,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AA7BD,gDA6BC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,YAAY,GAMb;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GACxB,IAAA,oBAAY,EAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAEvD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAExE,MAAM,EACJ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,GAClB,GAAG,IAAA,2BAAmB,EAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE1D,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { TransactionPayControllerMessenger } from '..';\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPaymentToken,\n UpdatePaymentTokenRequest,\n UpdateTransactionDataCallback,\n} from '../types';\nimport {\n computeTokenAmounts,\n getTokenBalance,\n getTokenFiatRate,\n getTokenInfo,\n} from '../utils/token';\nimport { getTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'update-payment-token');\n\nexport type UpdatePaymentTokenOptions = {\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the payment token for a specific transaction.\n *\n * @param request - Request parameters.\n * @param options - Options bag.\n */\nexport function updatePaymentToken(\n request: UpdatePaymentTokenRequest,\n options: UpdatePaymentTokenOptions,\n): void {\n const { transactionId, tokenAddress, chainId } = request;\n const { messenger, updateTransactionData } = options;\n\n const transaction = getTransaction(transactionId, messenger);\n\n if (!transaction) {\n throw new Error('Transaction not found');\n }\n\n const paymentToken = getPaymentToken({\n chainId,\n from: transaction?.txParams.from as Hex,\n messenger,\n tokenAddress,\n });\n\n if (!paymentToken) {\n throw new Error('Payment token not found');\n }\n\n log('Updated payment token', { transactionId, paymentToken });\n\n updateTransactionData(transactionId, (data) => {\n data.paymentToken = paymentToken;\n });\n}\n\n/**\n * Generate the full payment token data from a token address and chain ID.\n *\n * @param request - The payment token request parameters.\n * @param request.chainId - The chain ID.\n * @param request.from - The address to get the token balance for.\n * @param request.messenger - The transaction pay controller messenger.\n * @param request.tokenAddress - The token address.\n * @returns The payment token or undefined if the token data could not be retrieved.\n */\nfunction getPaymentToken({\n chainId,\n from,\n messenger,\n tokenAddress,\n}: {\n chainId: Hex;\n from: Hex;\n messenger: TransactionPayControllerMessenger;\n tokenAddress: Hex;\n}): TransactionPaymentToken | undefined {\n const { decimals, symbol } =\n getTokenInfo(messenger, tokenAddress, chainId) ?? {};\n\n if (decimals === undefined || !symbol) {\n return undefined;\n }\n\n const tokenFiatRate = getTokenFiatRate(messenger, tokenAddress, chainId);\n\n if (tokenFiatRate === undefined) {\n return undefined;\n }\n\n const balance = getTokenBalance(messenger, from, chainId, tokenAddress);\n\n const {\n raw: balanceRaw,\n human: balanceHuman,\n usd: balanceUsd,\n fiat: balanceFiat,\n } = computeTokenAmounts(balance, decimals, tokenFiatRate);\n\n return {\n address: tokenAddress,\n balanceFiat,\n balanceHuman,\n balanceRaw,\n balanceUsd,\n chainId,\n decimals,\n symbol,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payment-token.d.cts","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-payment-token.d.cts","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAW;AAE5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,6BAA6B,EAC9B,qBAAiB;AAWlB,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE,yBAAyB,GACjC,IAAI,CA0BN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payment-token.d.mts","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-payment-token.d.mts","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAW;AAE5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,6BAA6B,EAC9B,qBAAiB;AAWlB,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE,yBAAyB,GACjC,IAAI,CA0BN"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createModuleLogger } from "@metamask/utils";
|
|
2
|
-
import { BigNumber } from "bignumber.js";
|
|
3
2
|
import { projectLogger } from "../logger.mjs";
|
|
4
|
-
import { getTokenBalance, getTokenFiatRate, getTokenInfo } from "../utils/token.mjs";
|
|
3
|
+
import { computeTokenAmounts, getTokenBalance, getTokenFiatRate, getTokenInfo } from "../utils/token.mjs";
|
|
5
4
|
import { getTransaction } from "../utils/transaction.mjs";
|
|
6
5
|
const log = createModuleLogger(projectLogger, 'update-payment-token');
|
|
7
6
|
/**
|
|
@@ -51,16 +50,7 @@ function getPaymentToken({ chainId, from, messenger, tokenAddress, }) {
|
|
|
51
50
|
return undefined;
|
|
52
51
|
}
|
|
53
52
|
const balance = getTokenBalance(messenger, from, chainId, tokenAddress);
|
|
54
|
-
const
|
|
55
|
-
const balanceHumanValue = new BigNumber(balance).shiftedBy(-decimals);
|
|
56
|
-
const balanceRaw = balanceRawValue.toFixed(0);
|
|
57
|
-
const balanceHuman = balanceHumanValue.toString(10);
|
|
58
|
-
const balanceFiat = balanceHumanValue
|
|
59
|
-
.multipliedBy(tokenFiatRate.fiatRate)
|
|
60
|
-
.toString(10);
|
|
61
|
-
const balanceUsd = balanceHumanValue
|
|
62
|
-
.multipliedBy(tokenFiatRate.usdRate)
|
|
63
|
-
.toString(10);
|
|
53
|
+
const { raw: balanceRaw, human: balanceHuman, usd: balanceUsd, fiat: balanceFiat, } = computeTokenAmounts(balance, decimals, tokenFiatRate);
|
|
64
54
|
return {
|
|
65
55
|
address: tokenAddress,
|
|
66
56
|
balanceFiat,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-payment-token.mjs","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"update-payment-token.mjs","sourceRoot":"","sources":["../../src/actions/update-payment-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAIrD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAM1C,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACb,2BAAuB;AACxB,OAAO,EAAE,cAAc,EAAE,iCAA6B;AAEtD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAOtE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAkC,EAClC,OAAkC;IAElC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,OAAO;QACP,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAW;QACvC,SAAS;QACT,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,uBAAuB,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;IAE9D,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,EACvB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,YAAY,GAMb;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GACxB,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAEvD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAExE,MAAM,EACJ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,WAAW,GAClB,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE1D,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { TransactionPayControllerMessenger } from '..';\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPaymentToken,\n UpdatePaymentTokenRequest,\n UpdateTransactionDataCallback,\n} from '../types';\nimport {\n computeTokenAmounts,\n getTokenBalance,\n getTokenFiatRate,\n getTokenInfo,\n} from '../utils/token';\nimport { getTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'update-payment-token');\n\nexport type UpdatePaymentTokenOptions = {\n messenger: TransactionPayControllerMessenger;\n updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the payment token for a specific transaction.\n *\n * @param request - Request parameters.\n * @param options - Options bag.\n */\nexport function updatePaymentToken(\n request: UpdatePaymentTokenRequest,\n options: UpdatePaymentTokenOptions,\n): void {\n const { transactionId, tokenAddress, chainId } = request;\n const { messenger, updateTransactionData } = options;\n\n const transaction = getTransaction(transactionId, messenger);\n\n if (!transaction) {\n throw new Error('Transaction not found');\n }\n\n const paymentToken = getPaymentToken({\n chainId,\n from: transaction?.txParams.from as Hex,\n messenger,\n tokenAddress,\n });\n\n if (!paymentToken) {\n throw new Error('Payment token not found');\n }\n\n log('Updated payment token', { transactionId, paymentToken });\n\n updateTransactionData(transactionId, (data) => {\n data.paymentToken = paymentToken;\n });\n}\n\n/**\n * Generate the full payment token data from a token address and chain ID.\n *\n * @param request - The payment token request parameters.\n * @param request.chainId - The chain ID.\n * @param request.from - The address to get the token balance for.\n * @param request.messenger - The transaction pay controller messenger.\n * @param request.tokenAddress - The token address.\n * @returns The payment token or undefined if the token data could not be retrieved.\n */\nfunction getPaymentToken({\n chainId,\n from,\n messenger,\n tokenAddress,\n}: {\n chainId: Hex;\n from: Hex;\n messenger: TransactionPayControllerMessenger;\n tokenAddress: Hex;\n}): TransactionPaymentToken | undefined {\n const { decimals, symbol } =\n getTokenInfo(messenger, tokenAddress, chainId) ?? {};\n\n if (decimals === undefined || !symbol) {\n return undefined;\n }\n\n const tokenFiatRate = getTokenFiatRate(messenger, tokenAddress, chainId);\n\n if (tokenFiatRate === undefined) {\n return undefined;\n }\n\n const balance = getTokenBalance(messenger, from, chainId, tokenAddress);\n\n const {\n raw: balanceRaw,\n human: balanceHuman,\n usd: balanceUsd,\n fiat: balanceFiat,\n } = computeTokenAmounts(balance, decimals, tokenFiatRate);\n\n return {\n address: tokenAddress,\n balanceFiat,\n balanceHuman,\n balanceRaw,\n balanceUsd,\n chainId,\n decimals,\n symbol,\n };\n}\n"]}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TOKEN_TRANSFER_FOUR_BYTE = exports.RELAY_POLLING_INTERVAL = exports.RELAY_STATUS_URL = exports.RELAY_URL_BASE = void 0;
|
|
3
|
+
exports.RELAY_DEPOSIT_TYPES = exports.TOKEN_TRANSFER_FOUR_BYTE = exports.RELAY_POLLING_INTERVAL = exports.RELAY_STATUS_URL = exports.RELAY_URL_BASE = void 0;
|
|
4
|
+
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
4
5
|
exports.RELAY_URL_BASE = 'https://api.relay.link';
|
|
5
6
|
exports.RELAY_STATUS_URL = `${exports.RELAY_URL_BASE}/intents/status/v3`;
|
|
6
7
|
exports.RELAY_POLLING_INTERVAL = 1000; // 1 Second
|
|
7
8
|
exports.TOKEN_TRANSFER_FOUR_BYTE = '0xa9059cbb';
|
|
9
|
+
exports.RELAY_DEPOSIT_TYPES = {
|
|
10
|
+
[transaction_controller_1.TransactionType.predictDeposit]: transaction_controller_1.TransactionType.predictRelayDeposit,
|
|
11
|
+
[transaction_controller_1.TransactionType.perpsDeposit]: transaction_controller_1.TransactionType.perpsRelayDeposit,
|
|
12
|
+
};
|
|
8
13
|
//# sourceMappingURL=constants.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":";;;AAAA,6EAAmE;AAEtD,QAAA,cAAc,GAAG,wBAAwB,CAAC;AAC1C,QAAA,gBAAgB,GAAG,GAAG,sBAAc,oBAAoB,CAAC;AACzD,QAAA,sBAAsB,GAAG,IAAI,CAAC,CAAC,WAAW;AAC1C,QAAA,wBAAwB,GAAG,YAAY,CAAC;AAExC,QAAA,mBAAmB,GAAoC;IAClE,CAAC,wCAAe,CAAC,cAAc,CAAC,EAAE,wCAAe,CAAC,mBAAmB;IACrE,CAAC,wCAAe,CAAC,YAAY,CAAC,EAAE,wCAAe,CAAC,iBAAiB;CAClE,CAAC","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\n\nexport const RELAY_URL_BASE = 'https://api.relay.link';\nexport const RELAY_STATUS_URL = `${RELAY_URL_BASE}/intents/status/v3`;\nexport const RELAY_POLLING_INTERVAL = 1000; // 1 Second\nexport const TOKEN_TRANSFER_FOUR_BYTE = '0xa9059cbb';\n\nexport const RELAY_DEPOSIT_TYPES: Record<string, TransactionType> = {\n [TransactionType.predictDeposit]: TransactionType.predictRelayDeposit,\n [TransactionType.perpsDeposit]: TransactionType.perpsRelayDeposit,\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { TransactionType } from "@metamask/transaction-controller";
|
|
1
2
|
export declare const RELAY_URL_BASE = "https://api.relay.link";
|
|
2
3
|
export declare const RELAY_STATUS_URL = "https://api.relay.link/intents/status/v3";
|
|
3
4
|
export declare const RELAY_POLLING_INTERVAL = 1000;
|
|
4
5
|
export declare const TOKEN_TRANSFER_FOUR_BYTE = "0xa9059cbb";
|
|
6
|
+
export declare const RELAY_DEPOSIT_TYPES: Record<string, TransactionType>;
|
|
5
7
|
//# sourceMappingURL=constants.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,6CAAwC,CAAC;AACtE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,wBAAwB,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAEnE,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,6CAAwC,CAAC;AACtE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,wBAAwB,eAAe,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAG/D,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { TransactionType } from "@metamask/transaction-controller";
|
|
1
2
|
export declare const RELAY_URL_BASE = "https://api.relay.link";
|
|
2
3
|
export declare const RELAY_STATUS_URL = "https://api.relay.link/intents/status/v3";
|
|
3
4
|
export declare const RELAY_POLLING_INTERVAL = 1000;
|
|
4
5
|
export declare const TOKEN_TRANSFER_FOUR_BYTE = "0xa9059cbb";
|
|
6
|
+
export declare const RELAY_DEPOSIT_TYPES: Record<string, TransactionType>;
|
|
5
7
|
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,6CAAwC,CAAC;AACtE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,wBAAwB,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAEnE,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,eAAO,MAAM,gBAAgB,6CAAwC,CAAC;AACtE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,wBAAwB,eAAe,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAG/D,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { TransactionType } from "@metamask/transaction-controller";
|
|
1
2
|
export const RELAY_URL_BASE = 'https://api.relay.link';
|
|
2
3
|
export const RELAY_STATUS_URL = `${RELAY_URL_BASE}/intents/status/v3`;
|
|
3
4
|
export const RELAY_POLLING_INTERVAL = 1000; // 1 Second
|
|
4
5
|
export const TOKEN_TRANSFER_FOUR_BYTE = '0xa9059cbb';
|
|
6
|
+
export const RELAY_DEPOSIT_TYPES = {
|
|
7
|
+
[TransactionType.predictDeposit]: TransactionType.predictRelayDeposit,
|
|
8
|
+
[TransactionType.perpsDeposit]: TransactionType.perpsRelayDeposit,
|
|
9
|
+
};
|
|
5
10
|
//# sourceMappingURL=constants.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,cAAc,oBAAoB,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,CAAC,WAAW;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../../src/strategy/relay/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yCAAyC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,cAAc,oBAAoB,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,CAAC,WAAW;AACvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAoC;IAClE,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC,mBAAmB;IACrE,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,iBAAiB;CAClE,CAAC","sourcesContent":["import { TransactionType } from '@metamask/transaction-controller';\n\nexport const RELAY_URL_BASE = 'https://api.relay.link';\nexport const RELAY_STATUS_URL = `${RELAY_URL_BASE}/intents/status/v3`;\nexport const RELAY_POLLING_INTERVAL = 1000; // 1 Second\nexport const TOKEN_TRANSFER_FOUR_BYTE = '0xa9059cbb';\n\nexport const RELAY_DEPOSIT_TYPES: Record<string, TransactionType> = {\n [TransactionType.predictDeposit]: TransactionType.predictRelayDeposit,\n [TransactionType.perpsDeposit]: TransactionType.perpsRelayDeposit,\n};\n"]}
|
|
@@ -4,36 +4,14 @@ exports.submitRelayQuotes = void 0;
|
|
|
4
4
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
5
5
|
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
6
6
|
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
7
8
|
const constants_1 = require("./constants.cjs");
|
|
8
9
|
const logger_1 = require("../../logger.cjs");
|
|
9
10
|
const feature_flags_1 = require("../../utils/feature-flags.cjs");
|
|
11
|
+
const token_1 = require("../../utils/token.cjs");
|
|
10
12
|
const transaction_1 = require("../../utils/transaction.cjs");
|
|
11
13
|
const FALLBACK_HASH = '0x0';
|
|
12
14
|
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'relay-strategy');
|
|
13
|
-
/**
|
|
14
|
-
* Determine the transaction type for a given index in the batch.
|
|
15
|
-
*
|
|
16
|
-
* @param isPostQuote - Whether this is a post-quote flow.
|
|
17
|
-
* @param index - Index of the transaction in the batch.
|
|
18
|
-
* @param originalType - Type of the original transaction (used for post-quote index 0).
|
|
19
|
-
* @param relayParamCount - Number of relay-only params (excludes prepended original tx).
|
|
20
|
-
* @returns The transaction type.
|
|
21
|
-
*/
|
|
22
|
-
function getTransactionType(isPostQuote, index, originalType, relayParamCount) {
|
|
23
|
-
// Post-quote index 0 is the original transaction
|
|
24
|
-
if (isPostQuote && index === 0) {
|
|
25
|
-
return originalType;
|
|
26
|
-
}
|
|
27
|
-
// Adjust index for post-quote flows where original tx is prepended
|
|
28
|
-
const relayIndex = isPostQuote ? index - 1 : index;
|
|
29
|
-
// Single relay step is always a deposit (no approval needed)
|
|
30
|
-
if (relayParamCount === 1) {
|
|
31
|
-
return transaction_controller_1.TransactionType.relayDeposit;
|
|
32
|
-
}
|
|
33
|
-
return relayIndex === 0
|
|
34
|
-
? transaction_controller_1.TransactionType.tokenMethodApprove
|
|
35
|
-
: transaction_controller_1.TransactionType.relayDeposit;
|
|
36
|
-
}
|
|
37
15
|
/**
|
|
38
16
|
* Submits Relay quotes.
|
|
39
17
|
*
|
|
@@ -128,6 +106,40 @@ function normalizeParams(params, messenger) {
|
|
|
128
106
|
value: (0, controller_utils_1.toHex)(params.value ?? '0'),
|
|
129
107
|
};
|
|
130
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Validate the source token balance is sufficient for the relay deposit.
|
|
111
|
+
*
|
|
112
|
+
* Reads the live balance from TokenBalancesController and compares it against
|
|
113
|
+
* the quote's required source amount to prevent submitting transactions that
|
|
114
|
+
* will revert on-chain due to insufficient balance.
|
|
115
|
+
*
|
|
116
|
+
* @param quote - Relay quote containing the required source amount.
|
|
117
|
+
* @param messenger - Controller messenger.
|
|
118
|
+
*/
|
|
119
|
+
async function validateSourceBalance(quote, messenger) {
|
|
120
|
+
const { from, sourceChainId, sourceTokenAddress } = quote.request;
|
|
121
|
+
let currentBalance;
|
|
122
|
+
try {
|
|
123
|
+
currentBalance = await (0, token_1.getLiveTokenBalance)(messenger, from, sourceChainId, sourceTokenAddress);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(`Cannot validate payment token balance - ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
const requiredAmount = new bignumber_js_1.BigNumber(quote.sourceAmount.raw);
|
|
129
|
+
const balance = new bignumber_js_1.BigNumber(currentBalance);
|
|
130
|
+
log('Validating source balance', {
|
|
131
|
+
from,
|
|
132
|
+
sourceChainId,
|
|
133
|
+
sourceTokenAddress,
|
|
134
|
+
currentBalance,
|
|
135
|
+
requiredAmount: requiredAmount.toString(10),
|
|
136
|
+
});
|
|
137
|
+
if (balance.isLessThan(requiredAmount)) {
|
|
138
|
+
throw new Error(`Insufficient source token balance for relay deposit. ` +
|
|
139
|
+
`Required: ${requiredAmount.toString(10)}, ` +
|
|
140
|
+
`Available: ${balance.toString(10)}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
131
143
|
/**
|
|
132
144
|
* Submit transactions for a relay quote.
|
|
133
145
|
*
|
|
@@ -143,6 +155,7 @@ async function submitTransactions(quote, transaction, messenger) {
|
|
|
143
155
|
if (invalidKind) {
|
|
144
156
|
throw new Error(`Unsupported step kind: ${invalidKind}`);
|
|
145
157
|
}
|
|
158
|
+
await validateSourceBalance(quote, messenger);
|
|
146
159
|
const normalizedParams = params.map((singleParams) => normalizeParams(singleParams, messenger));
|
|
147
160
|
// For post-quote flows, prepend the original transaction so it gets
|
|
148
161
|
// included in the batch alongside the relay deposit(s).
|
|
@@ -203,7 +216,7 @@ async function submitTransactions(quote, transaction, messenger) {
|
|
|
203
216
|
networkClientId,
|
|
204
217
|
origin: controller_utils_1.ORIGIN_METAMASK,
|
|
205
218
|
requireApproval: false,
|
|
206
|
-
type:
|
|
219
|
+
type: getRelayDepositType(transaction.type),
|
|
207
220
|
});
|
|
208
221
|
}
|
|
209
222
|
else {
|
|
@@ -250,4 +263,37 @@ async function submitTransactions(quote, transaction, messenger) {
|
|
|
250
263
|
const hash = (0, transaction_1.getTransaction)(transactionIds.slice(-1)[0], messenger)?.hash;
|
|
251
264
|
return hash;
|
|
252
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Determine the transaction type for a given index in the batch.
|
|
268
|
+
*
|
|
269
|
+
* @param isPostQuote - Whether this is a post-quote flow.
|
|
270
|
+
* @param index - Index of the transaction in the batch.
|
|
271
|
+
* @param originalType - Type of the original transaction (used for post-quote index 0).
|
|
272
|
+
* @param relayParamCount - Number of relay-only params (excludes prepended original tx).
|
|
273
|
+
* @returns The transaction type.
|
|
274
|
+
*/
|
|
275
|
+
function getTransactionType(isPostQuote, index, originalType, relayParamCount) {
|
|
276
|
+
// Post-quote index 0 is the original transaction
|
|
277
|
+
if (isPostQuote && index === 0) {
|
|
278
|
+
return originalType;
|
|
279
|
+
}
|
|
280
|
+
// Adjust index for post-quote flows where original tx is prepended
|
|
281
|
+
const relayIndex = isPostQuote ? index - 1 : index;
|
|
282
|
+
const depositType = getRelayDepositType(originalType);
|
|
283
|
+
// Single relay step is always a deposit (no approval needed)
|
|
284
|
+
if (relayParamCount === 1) {
|
|
285
|
+
return depositType;
|
|
286
|
+
}
|
|
287
|
+
return relayIndex === 0 ? transaction_controller_1.TransactionType.tokenMethodApprove : depositType;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Get the relay deposit transaction type based on the parent transaction type.
|
|
291
|
+
*
|
|
292
|
+
* @param originalType - Type of the parent transaction.
|
|
293
|
+
* @returns The mapped relay deposit type, or `relayDeposit` as a fallback.
|
|
294
|
+
*/
|
|
295
|
+
function getRelayDepositType(originalType) {
|
|
296
|
+
return ((originalType && constants_1.RELAY_DEPOSIT_TYPES[originalType]) ??
|
|
297
|
+
transaction_controller_1.TransactionType.relayDeposit);
|
|
298
|
+
}
|
|
253
299
|
//# sourceMappingURL=relay-submit.cjs.map
|