@metamask-previews/transaction-pay-controller 23.12.0-preview-2c09cc947 → 23.13.0-preview-6da9f2b
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 +15 -1
- package/dist/helpers/TransactionPayPublishHook.cjs +9 -4
- package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.d.cts.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.d.mts.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.mjs +9 -4
- package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -1
- package/dist/strategy/fiat/FiatStrategy.cjs +12 -1
- package/dist/strategy/fiat/FiatStrategy.cjs.map +1 -1
- package/dist/strategy/fiat/FiatStrategy.d.cts.map +1 -1
- package/dist/strategy/fiat/FiatStrategy.d.mts.map +1 -1
- package/dist/strategy/fiat/FiatStrategy.mjs +12 -1
- package/dist/strategy/fiat/FiatStrategy.mjs.map +1 -1
- package/dist/strategy/fiat/fiat-direct-musd.cjs +74 -23
- package/dist/strategy/fiat/fiat-direct-musd.cjs.map +1 -1
- package/dist/strategy/fiat/fiat-direct-musd.d.cts +15 -0
- package/dist/strategy/fiat/fiat-direct-musd.d.cts.map +1 -1
- package/dist/strategy/fiat/fiat-direct-musd.d.mts +15 -0
- package/dist/strategy/fiat/fiat-direct-musd.d.mts.map +1 -1
- package/dist/strategy/fiat/fiat-direct-musd.mjs +73 -23
- package/dist/strategy/fiat/fiat-direct-musd.mjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit-simple.cjs +1 -1
- package/dist/strategy/fiat/fiat-submit-simple.cjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit-simple.mjs +1 -1
- package/dist/strategy/fiat/fiat-submit-simple.mjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit-with-transaction-data.cjs +1 -1
- package/dist/strategy/fiat/fiat-submit-with-transaction-data.cjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit-with-transaction-data.mjs +1 -1
- package/dist/strategy/fiat/fiat-submit-with-transaction-data.mjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit.cjs +19 -47
- package/dist/strategy/fiat/fiat-submit.cjs.map +1 -1
- package/dist/strategy/fiat/fiat-submit.d.cts.map +1 -1
- package/dist/strategy/fiat/fiat-submit.d.mts.map +1 -1
- package/dist/strategy/fiat/fiat-submit.mjs +20 -48
- package/dist/strategy/fiat/fiat-submit.mjs.map +1 -1
- package/dist/strategy/fiat/utils.cjs +24 -1
- package/dist/strategy/fiat/utils.cjs.map +1 -1
- package/dist/strategy/fiat/utils.d.cts +14 -1
- package/dist/strategy/fiat/utils.d.cts.map +1 -1
- package/dist/strategy/fiat/utils.d.mts +14 -1
- package/dist/strategy/fiat/utils.d.mts.map +1 -1
- package/dist/strategy/fiat/utils.mjs +22 -0
- package/dist/strategy/fiat/utils.mjs.map +1 -1
- package/dist/strategy/relay/RelayStrategy.cjs +1 -7
- package/dist/strategy/relay/RelayStrategy.cjs.map +1 -1
- package/dist/strategy/relay/RelayStrategy.d.cts.map +1 -1
- package/dist/strategy/relay/RelayStrategy.d.mts.map +1 -1
- package/dist/strategy/relay/RelayStrategy.mjs +1 -7
- package/dist/strategy/relay/RelayStrategy.mjs.map +1 -1
- package/dist/strategy/relay/relay-submit.cjs +30 -7
- 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 +29 -6
- package/dist/strategy/relay/relay-submit.mjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +1 -1
- package/dist/tests/messenger-mock.d.mts +1 -1
- package/dist/utils/error-prefix.cjs +21 -0
- package/dist/utils/error-prefix.cjs.map +1 -0
- package/dist/utils/error-prefix.d.cts +9 -0
- package/dist/utils/error-prefix.d.cts.map +1 -0
- package/dist/utils/error-prefix.d.mts +9 -0
- package/dist/utils/error-prefix.d.mts.map +1 -0
- package/dist/utils/error-prefix.mjs +17 -0
- package/dist/utils/error-prefix.mjs.map +1 -0
- package/dist/utils/provider.cjs +28 -2
- package/dist/utils/provider.cjs.map +1 -1
- package/dist/utils/provider.d.cts.map +1 -1
- package/dist/utils/provider.d.mts.map +1 -1
- package/dist/utils/provider.mjs +29 -3
- package/dist/utils/provider.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -9,7 +9,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
11
|
|
|
12
|
+
- Bump `@metamask/bridge-controller` from `^75.1.1` to `^75.2.0` ([#9214](https://github.com/MetaMask/core/pull/9214))
|
|
13
|
+
|
|
14
|
+
## [23.13.0]
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Add RPC method, chain ID, and endpoint type context to transaction pay provider errors ([#9144](https://github.com/MetaMask/core/pull/9144))
|
|
12
19
|
- Bump `@metamask/ramps-controller` from `^14.2.0` to `^14.3.0` ([#9199](https://github.com/MetaMask/core/pull/9199))
|
|
20
|
+
- Bump `@metamask/assets-controllers` from `^109.1.0` to `^109.2.0` ([#9202](https://github.com/MetaMask/core/pull/9202))
|
|
21
|
+
- Bump `@metamask/transaction-controller` from `^68.0.1` to `^68.1.0` ([#9203](https://github.com/MetaMask/core/pull/9203))
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Preserve original error stack traces while prefixing MetaMask Pay, Relay, and Fiat submission errors, and fail closed when Fiat submission has no quote or when Relay or direct mUSD Fiat vault submissions complete without a transaction hash ([#9201](https://github.com/MetaMask/core/pull/9201))
|
|
13
26
|
|
|
14
27
|
## [23.12.0]
|
|
15
28
|
|
|
@@ -1121,7 +1134,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1121
1134
|
|
|
1122
1135
|
- Initial release ([#6820](https://github.com/MetaMask/core/pull/6820))
|
|
1123
1136
|
|
|
1124
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.
|
|
1137
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.13.0...HEAD
|
|
1138
|
+
[23.13.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.12.0...@metamask/transaction-pay-controller@23.13.0
|
|
1125
1139
|
[23.12.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.11.0...@metamask/transaction-pay-controller@23.12.0
|
|
1126
1140
|
[23.11.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.10.0...@metamask/transaction-pay-controller@23.11.0
|
|
1127
1141
|
[23.10.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-pay-controller@23.9.0...@metamask/transaction-pay-controller@23.10.0
|
|
@@ -16,9 +16,11 @@ exports.TransactionPayPublishHook = void 0;
|
|
|
16
16
|
const utils_1 = require("@metamask/utils");
|
|
17
17
|
const logger_1 = require("../logger.cjs");
|
|
18
18
|
const _7702_1 = require("../utils/7702.cjs");
|
|
19
|
+
const error_prefix_1 = require("../utils/error-prefix.cjs");
|
|
19
20
|
const strategy_1 = require("../utils/strategy.cjs");
|
|
20
21
|
const transaction_1 = require("../utils/transaction.cjs");
|
|
21
22
|
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'pay-publish-hook');
|
|
23
|
+
const ERROR_PREFIX = 'MetaMask Pay: ';
|
|
22
24
|
const EMPTY_RESULT = {
|
|
23
25
|
transactionHash: undefined,
|
|
24
26
|
};
|
|
@@ -41,15 +43,18 @@ _TransactionPayPublishHook_isSmartTransaction = new WeakMap(), _TransactionPayPu
|
|
|
41
43
|
}
|
|
42
44
|
catch (error) {
|
|
43
45
|
log('Error', error);
|
|
44
|
-
|
|
45
|
-
throw new Error(`MetaMask Pay: ${message}`);
|
|
46
|
+
throw (0, error_prefix_1.prefixError)(error, ERROR_PREFIX);
|
|
46
47
|
}
|
|
47
48
|
}, _TransactionPayPublishHook_publishHook = async function _TransactionPayPublishHook_publishHook(transactionMeta, _signedTx) {
|
|
48
49
|
const { id: transactionId } = transactionMeta;
|
|
49
50
|
const controllerState = __classPrivateFieldGet(this, _TransactionPayPublishHook_messenger, "f").call('TransactionPayController:getState');
|
|
50
|
-
const
|
|
51
|
-
|
|
51
|
+
const transactionData = controllerState.transactionData?.[transactionId];
|
|
52
|
+
const quotes = transactionData?.quotes ?? [];
|
|
53
|
+
const isFiatSelected = Boolean(transactionData?.fiatPayment?.selectedPaymentMethodId);
|
|
52
54
|
if (!quotes?.length) {
|
|
55
|
+
if (isFiatSelected) {
|
|
56
|
+
throw new Error('Fiat: Missing quote');
|
|
57
|
+
}
|
|
53
58
|
log('Skipping as no quotes found');
|
|
54
59
|
return EMPTY_RESULT;
|
|
55
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.cjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,2CAAqD;AAErD,0CAA0C;AAK1C,6CAAoD;AACpD,oDAAsD;AACtD,0DAAyD;AAEzD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.cjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,2CAAqD;AAErD,0CAA0C;AAK1C,6CAAoD;AACpD,4DAAoD;AACpD,oDAAsD;AACtD,0DAAyD;AAEzD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,kBAAkB,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAa,yBAAyB;IAKpC,YAAY,EACV,kBAAkB,EAClB,SAAS,GAIV;;QAVQ,gEAA+C;QAE/C,uDAA8C;QASrD,uBAAA,IAAI,iDAAuB,kBAAkB,MAAA,CAAC;QAC9C,uBAAA,IAAI,wCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,uBAAA,IAAI,oFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CA8DF;AAhFD,8DAgFC;oNA5DC,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,IAAI,CAAC;QACH,OAAO,MAAM,uBAAA,IAAI,oFAAa,MAAjB,IAAI,EAAc,eAAe,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpB,MAAM,IAAA,0BAAW,EAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,2CAED,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC;IAE9C,MAAM,eAAe,GAAG,uBAAA,IAAI,4CAAW,CAAC,IAAI,CAC1C,mCAAmC,CACpC,CAAC;IAEF,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,CAAC;IACzE,MAAM,MAAM,GACT,eAAe,EAAE,MAAyC,IAAI,EAAE,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAC5B,eAAe,EAAE,WAAW,EAAE,uBAAuB,CACtD,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACnC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAA,+BAAiB,EACf;QACE,aAAa;QACb,SAAS,EAAE,uBAAA,IAAI,4CAAW;QAC1B,IAAI,EAAE,6CAA6C;KACpD,EACD,CAAC,EAAE,EAAE,EAAE;QACL,EAAE,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,4BAAiB,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAW,CAAC;IAElD,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC5B,mBAAmB,EAAE,IAAA,2BAAmB,EAAC,uBAAA,IAAI,4CAAW,EAAE,IAAI,CAAC;QAC/D,kBAAkB,EAAE,uBAAA,IAAI,qDAAoB;QAC5C,MAAM;QACN,SAAS,EAAE,uBAAA,IAAI,4CAAW;QAC1B,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { PublishHook } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { PublishHookResult } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../types';\nimport { accountSupports7702 } from '../utils/7702';\nimport { prefixError } from '../utils/error-prefix';\nimport { getStrategyByName } from '../utils/strategy';\nimport { updateTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'pay-publish-hook');\nconst ERROR_PREFIX = 'MetaMask Pay: ';\n\nconst EMPTY_RESULT = {\n transactionHash: undefined,\n};\n\nexport class TransactionPayPublishHook {\n readonly #isSmartTransaction: (chainId: Hex) => boolean;\n\n readonly #messenger: TransactionPayControllerMessenger;\n\n constructor({\n isSmartTransaction,\n messenger,\n }: {\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n }) {\n this.#isSmartTransaction = isSmartTransaction;\n this.#messenger = messenger;\n }\n\n getHook(): PublishHook {\n return this.#hookWrapper.bind(this);\n }\n\n async #hookWrapper(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n try {\n return await this.#publishHook(transactionMeta, _signedTx);\n } catch (error) {\n log('Error', error);\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n\n async #publishHook(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n const { id: transactionId } = transactionMeta;\n\n const controllerState = this.#messenger.call(\n 'TransactionPayController:getState',\n );\n\n const transactionData = controllerState.transactionData?.[transactionId];\n const quotes =\n (transactionData?.quotes as TransactionPayQuote<unknown>[]) ?? [];\n const isFiatSelected = Boolean(\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n\n if (!quotes?.length) {\n if (isFiatSelected) {\n throw new Error('Fiat: Missing quote');\n }\n\n log('Skipping as no quotes found');\n return EMPTY_RESULT;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger: this.#messenger,\n note: 'Set submittedTime at pay publish hook start',\n },\n (tx) => {\n tx.submittedTime = new Date().getTime();\n },\n );\n\n const strategy = getStrategyByName(quotes[0].strategy);\n const from = transactionMeta.txParams.from as Hex;\n\n return await strategy.execute({\n accountSupports7702: accountSupports7702(this.#messenger, from),\n isSmartTransaction: this.#isSmartTransaction,\n quotes,\n messenger: this.#messenger,\n transaction: transactionMeta,\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.d.cts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.d.cts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;AAalB,qBAAa,yBAAyB;;gBAKxB,EACV,kBAAkB,EAClB,SAAS,GACV,EAAE;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;QAC9C,SAAS,EAAE,iCAAiC,CAAC;KAC9C;IAKD,OAAO,IAAI,WAAW;CAgEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.d.mts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.d.mts","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,yCAAyC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,iCAAiC,EAElC,qBAAiB;AAalB,qBAAa,yBAAyB;;gBAKxB,EACV,kBAAkB,EAClB,SAAS,GACV,EAAE;QACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;QAC9C,SAAS,EAAE,iCAAiC,CAAC;KAC9C;IAKD,OAAO,IAAI,WAAW;CAgEvB"}
|
|
@@ -13,9 +13,11 @@ var _TransactionPayPublishHook_instances, _TransactionPayPublishHook_isSmartTran
|
|
|
13
13
|
import { createModuleLogger } from "@metamask/utils";
|
|
14
14
|
import { projectLogger } from "../logger.mjs";
|
|
15
15
|
import { accountSupports7702 } from "../utils/7702.mjs";
|
|
16
|
+
import { prefixError } from "../utils/error-prefix.mjs";
|
|
16
17
|
import { getStrategyByName } from "../utils/strategy.mjs";
|
|
17
18
|
import { updateTransaction } from "../utils/transaction.mjs";
|
|
18
19
|
const log = createModuleLogger(projectLogger, 'pay-publish-hook');
|
|
20
|
+
const ERROR_PREFIX = 'MetaMask Pay: ';
|
|
19
21
|
const EMPTY_RESULT = {
|
|
20
22
|
transactionHash: undefined,
|
|
21
23
|
};
|
|
@@ -37,15 +39,18 @@ _TransactionPayPublishHook_isSmartTransaction = new WeakMap(), _TransactionPayPu
|
|
|
37
39
|
}
|
|
38
40
|
catch (error) {
|
|
39
41
|
log('Error', error);
|
|
40
|
-
|
|
41
|
-
throw new Error(`MetaMask Pay: ${message}`);
|
|
42
|
+
throw prefixError(error, ERROR_PREFIX);
|
|
42
43
|
}
|
|
43
44
|
}, _TransactionPayPublishHook_publishHook = async function _TransactionPayPublishHook_publishHook(transactionMeta, _signedTx) {
|
|
44
45
|
const { id: transactionId } = transactionMeta;
|
|
45
46
|
const controllerState = __classPrivateFieldGet(this, _TransactionPayPublishHook_messenger, "f").call('TransactionPayController:getState');
|
|
46
|
-
const
|
|
47
|
-
|
|
47
|
+
const transactionData = controllerState.transactionData?.[transactionId];
|
|
48
|
+
const quotes = transactionData?.quotes ?? [];
|
|
49
|
+
const isFiatSelected = Boolean(transactionData?.fiatPayment?.selectedPaymentMethodId);
|
|
48
50
|
if (!quotes?.length) {
|
|
51
|
+
if (isFiatSelected) {
|
|
52
|
+
throw new Error('Fiat: Missing quote');
|
|
53
|
+
}
|
|
49
54
|
log('Skipping as no quotes found');
|
|
50
55
|
return EMPTY_RESULT;
|
|
51
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPayPublishHook.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAK1C,OAAO,EAAE,mBAAmB,EAAE,0BAAsB;AACpD,OAAO,EAAE,iBAAiB,EAAE,8BAA0B;AACtD,OAAO,EAAE,iBAAiB,EAAE,iCAA6B;AAEzD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"TransactionPayPublishHook.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAK1C,OAAO,EAAE,mBAAmB,EAAE,0BAAsB;AACpD,OAAO,EAAE,WAAW,EAAE,kCAA8B;AACpD,OAAO,EAAE,iBAAiB,EAAE,8BAA0B;AACtD,OAAO,EAAE,iBAAiB,EAAE,iCAA6B;AAEzD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAClE,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,OAAO,yBAAyB;IAKpC,YAAY,EACV,kBAAkB,EAClB,SAAS,GAIV;;QAVQ,gEAA+C;QAE/C,uDAA8C;QASrD,uBAAA,IAAI,iDAAuB,kBAAkB,MAAA,CAAC;QAC9C,uBAAA,IAAI,wCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,uBAAA,IAAI,oFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CA8DF;oNA5DC,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,IAAI,CAAC;QACH,OAAO,MAAM,uBAAA,IAAI,oFAAa,MAAjB,IAAI,EAAc,eAAe,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpB,MAAM,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,2CAED,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC;IAE9C,MAAM,eAAe,GAAG,uBAAA,IAAI,4CAAW,CAAC,IAAI,CAC1C,mCAAmC,CACpC,CAAC;IAEF,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,CAAC;IACzE,MAAM,MAAM,GACT,eAAe,EAAE,MAAyC,IAAI,EAAE,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAC5B,eAAe,EAAE,WAAW,EAAE,uBAAuB,CACtD,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACpB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACnC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,iBAAiB,CACf;QACE,aAAa;QACb,SAAS,EAAE,uBAAA,IAAI,4CAAW;QAC1B,IAAI,EAAE,6CAA6C;KACpD,EACD,CAAC,EAAE,EAAE,EAAE;QACL,EAAE,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAW,CAAC;IAElD,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC5B,mBAAmB,EAAE,mBAAmB,CAAC,uBAAA,IAAI,4CAAW,EAAE,IAAI,CAAC;QAC/D,kBAAkB,EAAE,uBAAA,IAAI,qDAAoB;QAC5C,MAAM;QACN,SAAS,EAAE,uBAAA,IAAI,4CAAW;QAC1B,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { PublishHook } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { PublishHookResult } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../types';\nimport { accountSupports7702 } from '../utils/7702';\nimport { prefixError } from '../utils/error-prefix';\nimport { getStrategyByName } from '../utils/strategy';\nimport { updateTransaction } from '../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'pay-publish-hook');\nconst ERROR_PREFIX = 'MetaMask Pay: ';\n\nconst EMPTY_RESULT = {\n transactionHash: undefined,\n};\n\nexport class TransactionPayPublishHook {\n readonly #isSmartTransaction: (chainId: Hex) => boolean;\n\n readonly #messenger: TransactionPayControllerMessenger;\n\n constructor({\n isSmartTransaction,\n messenger,\n }: {\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n }) {\n this.#isSmartTransaction = isSmartTransaction;\n this.#messenger = messenger;\n }\n\n getHook(): PublishHook {\n return this.#hookWrapper.bind(this);\n }\n\n async #hookWrapper(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n try {\n return await this.#publishHook(transactionMeta, _signedTx);\n } catch (error) {\n log('Error', error);\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n\n async #publishHook(\n transactionMeta: TransactionMeta,\n _signedTx: string,\n ): Promise<PublishHookResult> {\n const { id: transactionId } = transactionMeta;\n\n const controllerState = this.#messenger.call(\n 'TransactionPayController:getState',\n );\n\n const transactionData = controllerState.transactionData?.[transactionId];\n const quotes =\n (transactionData?.quotes as TransactionPayQuote<unknown>[]) ?? [];\n const isFiatSelected = Boolean(\n transactionData?.fiatPayment?.selectedPaymentMethodId,\n );\n\n if (!quotes?.length) {\n if (isFiatSelected) {\n throw new Error('Fiat: Missing quote');\n }\n\n log('Skipping as no quotes found');\n return EMPTY_RESULT;\n }\n\n updateTransaction(\n {\n transactionId,\n messenger: this.#messenger,\n note: 'Set submittedTime at pay publish hook start',\n },\n (tx) => {\n tx.submittedTime = new Date().getTime();\n },\n );\n\n const strategy = getStrategyByName(quotes[0].strategy);\n const from = transactionMeta.txParams.from as Hex;\n\n return await strategy.execute({\n accountSupports7702: accountSupports7702(this.#messenger, from),\n isSmartTransaction: this.#isSmartTransaction,\n quotes,\n messenger: this.#messenger,\n transaction: transactionMeta,\n });\n }\n}\n"]}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FiatStrategy = void 0;
|
|
4
|
+
const error_prefix_1 = require("../../utils/error-prefix.cjs");
|
|
4
5
|
const fiat_quotes_1 = require("./fiat-quotes.cjs");
|
|
5
6
|
const fiat_submit_1 = require("./fiat-submit.cjs");
|
|
7
|
+
const ERROR_PREFIX = 'Fiat: ';
|
|
6
8
|
class FiatStrategy {
|
|
7
9
|
async getQuotes(request) {
|
|
8
10
|
return (0, fiat_quotes_1.getFiatQuotes)(request);
|
|
9
11
|
}
|
|
10
12
|
async execute(request) {
|
|
11
|
-
|
|
13
|
+
try {
|
|
14
|
+
const result = await (0, fiat_submit_1.submitFiatQuotes)(request);
|
|
15
|
+
if (result.transactionHash === undefined) {
|
|
16
|
+
throw new Error('Missing transaction hash');
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw (0, error_prefix_1.prefixError)(error, ERROR_PREFIX);
|
|
22
|
+
}
|
|
12
23
|
}
|
|
13
24
|
}
|
|
14
25
|
exports.FiatStrategy = FiatStrategy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiatStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":";;;AAMA,mDAA8C;AAC9C,mDAAiD;AAGjD,MAAa,YAAY;IACvB,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,IAAA,2BAAa,EAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA6C;QAE7C,
|
|
1
|
+
{"version":3,"file":"FiatStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":";;;AAMA,+DAAuD;AACvD,mDAA8C;AAC9C,mDAAiD;AAGjD,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B,MAAa,YAAY;IACvB,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,IAAA,2BAAa,EAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA6C;QAE7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,0BAAW,EAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAtBD,oCAsBC","sourcesContent":["import type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { prefixError } from '../../utils/error-prefix';\nimport { getFiatQuotes } from './fiat-quotes';\nimport { submitFiatQuotes } from './fiat-submit';\nimport type { FiatQuote } from './types';\n\nconst ERROR_PREFIX = 'Fiat: ';\n\nexport class FiatStrategy implements PayStrategy<FiatQuote> {\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<FiatQuote>[]> {\n return getFiatQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<FiatQuote>,\n ): ReturnType<PayStrategy<FiatQuote>['execute']> {\n try {\n const result = await submitFiatQuotes(request);\n\n if (result.transactionHash === undefined) {\n throw new Error('Missing transaction hash');\n }\n\n return result;\n } catch (error) {\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiatStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;
|
|
1
|
+
{"version":3,"file":"FiatStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAIrB,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAIzC,qBAAa,YAAa,YAAW,WAAW,CAAC,SAAS,CAAC;IACnD,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;IAItC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;CAajD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiatStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;
|
|
1
|
+
{"version":3,"file":"FiatStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAIrB,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAIzC,qBAAa,YAAa,YAAW,WAAW,CAAC,SAAS,CAAC;IACnD,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;IAItC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;CAajD"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
|
+
import { prefixError } from "../../utils/error-prefix.mjs";
|
|
1
2
|
import { getFiatQuotes } from "./fiat-quotes.mjs";
|
|
2
3
|
import { submitFiatQuotes } from "./fiat-submit.mjs";
|
|
4
|
+
const ERROR_PREFIX = 'Fiat: ';
|
|
3
5
|
export class FiatStrategy {
|
|
4
6
|
async getQuotes(request) {
|
|
5
7
|
return getFiatQuotes(request);
|
|
6
8
|
}
|
|
7
9
|
async execute(request) {
|
|
8
|
-
|
|
10
|
+
try {
|
|
11
|
+
const result = await submitFiatQuotes(request);
|
|
12
|
+
if (result.transactionHash === undefined) {
|
|
13
|
+
throw new Error('Missing transaction hash');
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
throw prefixError(error, ERROR_PREFIX);
|
|
19
|
+
}
|
|
9
20
|
}
|
|
10
21
|
}
|
|
11
22
|
//# sourceMappingURL=FiatStrategy.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiatStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,0BAAsB;AAC9C,OAAO,EAAE,gBAAgB,EAAE,0BAAsB;AAGjD,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA6C;QAE7C,
|
|
1
|
+
{"version":3,"file":"FiatStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/fiat/FiatStrategy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,qCAAiC;AACvD,OAAO,EAAE,aAAa,EAAE,0BAAsB;AAC9C,OAAO,EAAE,gBAAgB,EAAE,0BAAsB;AAGjD,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA6C;QAE7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF","sourcesContent":["import type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\nimport { prefixError } from '../../utils/error-prefix';\nimport { getFiatQuotes } from './fiat-quotes';\nimport { submitFiatQuotes } from './fiat-submit';\nimport type { FiatQuote } from './types';\n\nconst ERROR_PREFIX = 'Fiat: ';\n\nexport class FiatStrategy implements PayStrategy<FiatQuote> {\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<FiatQuote>[]> {\n return getFiatQuotes(request);\n }\n\n async execute(\n request: PayStrategyExecuteRequest<FiatQuote>,\n ): ReturnType<PayStrategy<FiatQuote>['execute']> {\n try {\n const result = await submitFiatQuotes(request);\n\n if (result.transactionHash === undefined) {\n throw new Error('Missing transaction hash');\n }\n\n return result;\n } catch (error) {\n throw prefixError(error, ERROR_PREFIX);\n }\n }\n}\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.submitDirectMusdVaultDeposit = exports.isDirectMusdMoneyAccountQuote = exports.getDirectMusdFiatQuote = void 0;
|
|
3
|
+
exports.submitDirectMusdVaultDeposit = exports.submitDirectMusdAfterFiatCompletion = exports.isDirectMusdMoneyAccountQuote = exports.getDirectMusdFiatQuote = 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
7
|
const bignumber_js_1 = require("bignumber.js");
|
|
8
8
|
const constants_1 = require("../../constants.cjs");
|
|
9
9
|
const logger_1 = require("../../logger.cjs");
|
|
10
|
+
const error_prefix_1 = require("../../utils/error-prefix.cjs");
|
|
10
11
|
const feature_flags_1 = require("../../utils/feature-flags.cjs");
|
|
11
12
|
const provider_1 = require("../../utils/provider.cjs");
|
|
12
13
|
const token_1 = require("../../utils/token.cjs");
|
|
@@ -14,6 +15,8 @@ const transaction_1 = require("../../utils/transaction.cjs");
|
|
|
14
15
|
const constants_2 = require("./constants.cjs");
|
|
15
16
|
const utils_2 = require("./utils.cjs");
|
|
16
17
|
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'fiat-direct-musd');
|
|
18
|
+
const DIRECT_MUSD_ERROR_PREFIX = 'Direct mUSD: ';
|
|
19
|
+
const VAULT_ERROR_PREFIX = 'Vault: ';
|
|
17
20
|
/**
|
|
18
21
|
* Returns a direct mUSD fiat quote to the Money Account.
|
|
19
22
|
*
|
|
@@ -76,6 +79,39 @@ function isDirectMusdMoneyAccountQuote(quote) {
|
|
|
76
79
|
return quote?.request.isDirectMusdMoneyAccount === true;
|
|
77
80
|
}
|
|
78
81
|
exports.isDirectMusdMoneyAccountQuote = isDirectMusdMoneyAccountQuote;
|
|
82
|
+
/**
|
|
83
|
+
* Submits the direct mUSD post-Ramp path after fiat settlement.
|
|
84
|
+
*
|
|
85
|
+
* @param options - Submit options.
|
|
86
|
+
* @param options.order - Completed fiat order.
|
|
87
|
+
* @param options.request - Strategy execute request.
|
|
88
|
+
* @returns Hash of the submitted direct mUSD transaction, if available.
|
|
89
|
+
*/
|
|
90
|
+
async function submitDirectMusdAfterFiatCompletion({ order, request, }) {
|
|
91
|
+
const { messenger, transaction } = request;
|
|
92
|
+
try {
|
|
93
|
+
(0, utils_2.validateOrderAsset)({
|
|
94
|
+
expectedAsset: constants_2.MUSD_MONAD_FIAT_ASSET,
|
|
95
|
+
orderCrypto: order.cryptoCurrency,
|
|
96
|
+
transactionId: transaction.id,
|
|
97
|
+
});
|
|
98
|
+
const sourceAmountRaw = await (0, utils_2.resolveSourceAmountRaw)({
|
|
99
|
+
messenger,
|
|
100
|
+
order,
|
|
101
|
+
fiatAsset: constants_2.MUSD_MONAD_FIAT_ASSET,
|
|
102
|
+
walletAddress: transaction.txParams.from,
|
|
103
|
+
});
|
|
104
|
+
return await submitDirectMusdVaultDeposit({
|
|
105
|
+
request,
|
|
106
|
+
sourceAmountRaw,
|
|
107
|
+
transaction,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
throw (0, error_prefix_1.prefixError)(error, DIRECT_MUSD_ERROR_PREFIX);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.submitDirectMusdAfterFiatCompletion = submitDirectMusdAfterFiatCompletion;
|
|
79
115
|
/**
|
|
80
116
|
* Submits the direct mUSD Money Account vault batch after fiat settlement.
|
|
81
117
|
*
|
|
@@ -90,7 +126,7 @@ async function submitDirectMusdVaultDeposit({ request, sourceAmountRaw, transact
|
|
|
90
126
|
const transactionId = transaction.id;
|
|
91
127
|
const moneyAccountAddress = transaction.txParams.from;
|
|
92
128
|
if (!moneyAccountAddress) {
|
|
93
|
-
throw new Error('Missing Money Account address
|
|
129
|
+
throw new Error('Missing Money Account address');
|
|
94
130
|
}
|
|
95
131
|
if ((0, feature_flags_1.getFiatVaultDisabled)(messenger)) {
|
|
96
132
|
log('Skipping direct mUSD vault deposit because vaultDisabled is enabled', {
|
|
@@ -106,18 +142,22 @@ async function submitDirectMusdVaultDeposit({ request, sourceAmountRaw, transact
|
|
|
106
142
|
transaction: updatedTransaction,
|
|
107
143
|
});
|
|
108
144
|
if (!updates.length) {
|
|
109
|
-
throw new Error('
|
|
145
|
+
throw new Error('No amount updates');
|
|
110
146
|
}
|
|
111
147
|
const nestedTransactions = updatedTransaction.nestedTransactions?.map((nestedTransaction) => ({ ...nestedTransaction }));
|
|
112
148
|
if (!nestedTransactions?.length) {
|
|
113
|
-
throw new Error('Missing nested transactions
|
|
149
|
+
throw new Error('Missing nested transactions');
|
|
114
150
|
}
|
|
115
151
|
for (const { nestedTransactionIndex, data } of updates) {
|
|
116
152
|
if (nestedTransactions[nestedTransactionIndex]) {
|
|
117
153
|
nestedTransactions[nestedTransactionIndex].data = data;
|
|
118
154
|
}
|
|
119
155
|
}
|
|
120
|
-
(0, transaction_1.updateTransaction)({
|
|
156
|
+
(0, transaction_1.updateTransaction)({
|
|
157
|
+
transactionId,
|
|
158
|
+
messenger,
|
|
159
|
+
note: 'Direct mUSD fiat: update vault amount',
|
|
160
|
+
}, (tx) => {
|
|
121
161
|
for (const { nestedTransactionIndex, data } of updates) {
|
|
122
162
|
if (tx.nestedTransactions?.[nestedTransactionIndex]) {
|
|
123
163
|
tx.nestedTransactions[nestedTransactionIndex].data = data;
|
|
@@ -147,24 +187,29 @@ async function submitDirectMusdVaultDeposit({ request, sourceAmountRaw, transact
|
|
|
147
187
|
sourceAmountRaw,
|
|
148
188
|
transactionId,
|
|
149
189
|
});
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
190
|
+
try {
|
|
191
|
+
await messenger.call('TransactionController:addTransactionBatch', {
|
|
192
|
+
from: moneyAccountAddress,
|
|
193
|
+
isGasFeeSponsored: true,
|
|
194
|
+
isInternal: true,
|
|
195
|
+
networkClientId,
|
|
196
|
+
origin: controller_utils_1.ORIGIN_METAMASK,
|
|
197
|
+
requireApproval: false,
|
|
198
|
+
transactions: nestedTransactions.map((nestedTransaction, index) => ({
|
|
199
|
+
params: {
|
|
200
|
+
data: nestedTransaction.data,
|
|
201
|
+
to: nestedTransaction.to,
|
|
202
|
+
value: nestedTransaction.value ?? '0x0',
|
|
203
|
+
},
|
|
204
|
+
type: index === 0
|
|
205
|
+
? (nestedTransaction.type ?? transaction_controller_1.TransactionType.tokenMethodApprove)
|
|
206
|
+
: transaction_controller_1.TransactionType.contractInteraction,
|
|
207
|
+
})),
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
throw (0, error_prefix_1.prefixError)(error, VAULT_ERROR_PREFIX);
|
|
212
|
+
}
|
|
168
213
|
end();
|
|
169
214
|
log('Submitted direct mUSD vault deposit', {
|
|
170
215
|
moneyAccountAddress,
|
|
@@ -174,8 +219,14 @@ async function submitDirectMusdVaultDeposit({ request, sourceAmountRaw, transact
|
|
|
174
219
|
transactionId,
|
|
175
220
|
transactionIds,
|
|
176
221
|
});
|
|
222
|
+
if (!transactionIds.length) {
|
|
223
|
+
throw new Error('No transactions submitted');
|
|
224
|
+
}
|
|
177
225
|
await Promise.all(transactionIds.map((id) => (0, transaction_1.waitForTransactionConfirmed)(id, messenger)));
|
|
178
226
|
const hash = (0, transaction_1.getTransaction)(transactionIds.slice(-1)[0], messenger)?.hash;
|
|
227
|
+
if (!hash) {
|
|
228
|
+
throw new Error('Missing transaction hash');
|
|
229
|
+
}
|
|
179
230
|
log('Confirmed direct mUSD vault deposit', {
|
|
180
231
|
hash,
|
|
181
232
|
moneyAccountAddress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiat-direct-musd.cjs","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/controller-utils';\nimport type { Quote as RampsQuote } from '@metamask/ramps-controller';\nimport { TransactionType } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../../constants';\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionFiatPayment,\n TransactionPayRequiredToken,\n TransactionPayQuote,\n} from '../../types';\nimport { getFiatVaultDisabled } from '../../utils/feature-flags';\nimport { getNetworkClientId } from '../../utils/provider';\nimport { buildCaipAssetType, getTokenInfo } from '../../utils/token';\nimport {\n collectTransactionIds,\n getTransaction,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { MUSD_MONAD_FIAT_ASSET } from './constants';\nimport type { FiatQuote } from './types';\nimport {\n getRampsQuote,\n getRawSourceAmountFromOrderCryptoAmount,\n} from './utils';\n\nconst log = createModuleLogger(projectLogger, 'fiat-direct-musd');\n\n/**\n * Returns a direct mUSD fiat quote to the Money Account.\n *\n * @param options - Direct quote options.\n * @param options.amountFiat - Fiat amount entered by the user.\n * @param options.fiatPaymentMethod - Selected fiat payment method.\n * @param options.messenger - Controller messenger.\n * @param options.moneyAccountAddress - Money Account receiving the on-ramped mUSD.\n * @param options.requiredToken - Required token from the original Money Account transaction.\n * @param options.transactionId - Transaction ID for state updates and logs.\n * @returns Direct mUSD Fiat quote, or undefined when unavailable.\n */\nexport async function getDirectMusdFiatQuote({\n amountFiat,\n fiatPaymentMethod,\n messenger,\n moneyAccountAddress,\n requiredToken,\n transactionId,\n}: {\n amountFiat: string;\n fiatPaymentMethod: string;\n messenger: PayStrategyGetQuotesRequest['messenger'];\n moneyAccountAddress: Hex;\n requiredToken: TransactionPayRequiredToken;\n transactionId: string;\n}): Promise<TransactionPayQuote<FiatQuote> | undefined> {\n try {\n const adjustedAmount = Number(amountFiat);\n\n if (!Number.isFinite(adjustedAmount) || adjustedAmount <= 0) {\n throw new Error('Invalid fiat amount for direct mUSD quote');\n }\n\n const fiatQuote = await getRampsQuote({\n adjustedAmount,\n errorMessage: 'No matching ramps quote found for direct mUSD provider',\n fiatAsset: MUSD_MONAD_FIAT_ASSET,\n fiatPaymentMethod,\n messenger,\n walletAddress: moneyAccountAddress,\n });\n\n messenger.call('TransactionPayController:updateFiatPayment', {\n callback: (fiatPayment: TransactionFiatPayment) => {\n fiatPayment.rampsQuote = fiatQuote;\n fiatPayment.caipAssetId = buildCaipAssetType(\n MUSD_MONAD_FIAT_ASSET.chainId,\n MUSD_MONAD_FIAT_ASSET.address,\n );\n },\n transactionId,\n });\n\n log('Direct mUSD fiat quote flow', {\n amountFiat,\n moneyAccountAddress,\n transactionId,\n });\n\n return combineDirectMusdFiatQuote({\n amountFiat,\n fiatQuote,\n messenger,\n moneyAccountAddress,\n requiredToken,\n });\n } catch (error) {\n log('Direct mUSD fiat quote failed', { error, transactionId });\n return undefined;\n }\n}\n\n/**\n * Detects a direct mUSD Money Account quote from its stored request marker.\n *\n * @param quote - Quote to inspect.\n * @returns True when the quote originated from the direct mUSD fiat path.\n */\nexport function isDirectMusdMoneyAccountQuote(\n quote: Pick<TransactionPayQuote<unknown>, 'request'> | undefined,\n): boolean {\n return quote?.request.isDirectMusdMoneyAccount === true;\n}\n\n/**\n * Submits the direct mUSD Money Account vault batch after fiat settlement.\n *\n * @param options - Submit options.\n * @param options.request - Strategy execute request.\n * @param options.sourceAmountRaw - Settled source amount in raw mUSD units.\n * @param options.transaction - Original Money Account transaction.\n * @returns Hash of the final submitted child transaction, if available.\n */\nexport async function submitDirectMusdVaultDeposit({\n request,\n sourceAmountRaw,\n transaction,\n}: {\n request: PayStrategyExecuteRequest<FiatQuote>;\n sourceAmountRaw: string;\n transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];\n}): Promise<{ transactionHash?: Hex }> {\n const { messenger } = request;\n const transactionId = transaction.id;\n const moneyAccountAddress = transaction.txParams.from as Hex | undefined;\n\n if (!moneyAccountAddress) {\n throw new Error('Missing Money Account address for direct mUSD submit');\n }\n\n if (getFiatVaultDisabled(messenger)) {\n log('Skipping direct mUSD vault deposit because vaultDisabled is enabled', {\n moneyAccountAddress,\n sourceAmountRaw,\n transactionId,\n });\n\n return { transactionHash: '0x' };\n }\n\n const updatedTransaction =\n getTransaction(transactionId, messenger) ?? transaction;\n const { updates } = await messenger.call(\n 'TransactionPayController:getAmountData',\n {\n amount: sourceAmountRaw,\n transaction: updatedTransaction,\n },\n );\n\n if (!updates.length) {\n throw new Error('getAmountData returned no updates for direct mUSD submit');\n }\n\n const nestedTransactions = updatedTransaction.nestedTransactions?.map(\n (nestedTransaction) => ({ ...nestedTransaction }),\n );\n\n if (!nestedTransactions?.length) {\n throw new Error('Missing nested transactions for direct mUSD submit');\n }\n\n for (const { nestedTransactionIndex, data } of updates) {\n if (nestedTransactions[nestedTransactionIndex]) {\n nestedTransactions[nestedTransactionIndex].data = data;\n }\n }\n\n updateTransaction(\n { transactionId, messenger, note: 'Direct mUSD fiat: update vault amount' },\n (tx) => {\n for (const { nestedTransactionIndex, data } of updates) {\n if (tx.nestedTransactions?.[nestedTransactionIndex]) {\n tx.nestedTransactions[nestedTransactionIndex].data = data;\n }\n }\n\n if (tx.requiredAssets?.[0]) {\n tx.requiredAssets[0].amount = `0x${BigInt(sourceAmountRaw).toString(\n 16,\n )}`;\n }\n },\n );\n\n const networkClientId = getNetworkClientId(\n messenger,\n MUSD_MONAD_FIAT_ASSET.chainId,\n );\n const transactionIds: string[] = [];\n const { end } = collectTransactionIds(\n MUSD_MONAD_FIAT_ASSET.chainId,\n moneyAccountAddress,\n messenger,\n (id) => {\n transactionIds.push(id);\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Add required transaction ID from direct mUSD vault submission',\n },\n (tx) => {\n tx.requiredTransactionIds ??= [];\n tx.requiredTransactionIds.push(id);\n },\n );\n },\n );\n\n log('Submitting direct mUSD vault deposit', {\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n });\n\n await messenger.call('TransactionController:addTransactionBatch', {\n from: moneyAccountAddress,\n isGasFeeSponsored: true,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n requireApproval: false,\n transactions: nestedTransactions.map((nestedTransaction, index) => ({\n params: {\n data: nestedTransaction.data,\n to: nestedTransaction.to,\n value: nestedTransaction.value ?? '0x0',\n },\n type:\n index === 0\n ? (nestedTransaction.type ?? TransactionType.tokenMethodApprove)\n : TransactionType.contractInteraction,\n })),\n });\n\n end();\n\n log('Submitted direct mUSD vault deposit', {\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n transactionIds,\n });\n\n await Promise.all(\n transactionIds.map((id) => waitForTransactionConfirmed(id, messenger)),\n );\n\n const hash = getTransaction(transactionIds.slice(-1)[0], messenger)?.hash;\n\n log('Confirmed direct mUSD vault deposit', {\n hash,\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n transactionIds,\n });\n\n return { transactionHash: hash as Hex | undefined };\n}\n\nfunction combineDirectMusdFiatQuote({\n amountFiat,\n fiatQuote,\n messenger,\n moneyAccountAddress,\n requiredToken,\n}: {\n amountFiat: string;\n fiatQuote: RampsQuote;\n messenger: PayStrategyGetQuotesRequest['messenger'];\n moneyAccountAddress: Hex;\n requiredToken: TransactionPayRequiredToken;\n}): TransactionPayQuote<FiatQuote> {\n const tokenInfo = getTokenInfo(\n messenger,\n MUSD_MONAD_FIAT_ASSET.address,\n MUSD_MONAD_FIAT_ASSET.chainId,\n );\n\n if (!tokenInfo) {\n throw new Error('Unable to resolve mUSD token info for direct fiat quote');\n }\n\n const sourceAmountRaw = getRawSourceAmountFromOrderCryptoAmount({\n cryptoAmount: fiatQuote.quote.amountOut,\n decimals: tokenInfo.decimals,\n });\n const rampsProviderFee = getRampsProviderFee(fiatQuote).toString(10);\n const sourceAmountHuman = new BigNumber(sourceAmountRaw)\n .shiftedBy(-tokenInfo.decimals)\n .toString(10);\n\n return {\n dust: { fiat: '0', usd: '0' },\n estimatedDuration: 0,\n fees: {\n metaMask: { fiat: '0', usd: '0' },\n provider: { fiat: rampsProviderFee, usd: rampsProviderFee },\n providerFiat: { fiat: rampsProviderFee, usd: rampsProviderFee },\n sourceNetwork: {\n estimate: { fiat: '0', human: '0', raw: '0', usd: '0' },\n max: { fiat: '0', human: '0', raw: '0', usd: '0' },\n },\n targetNetwork: { fiat: '0', usd: '0' },\n },\n original: {\n rampsQuote: fiatQuote,\n relayQuote: undefined,\n },\n request: {\n from: moneyAccountAddress,\n isDirectMusdMoneyAccount: true,\n recipient: moneyAccountAddress,\n sourceBalanceRaw: sourceAmountRaw,\n sourceChainId: MUSD_MONAD_FIAT_ASSET.chainId,\n sourceTokenAddress: MUSD_MONAD_FIAT_ASSET.address,\n sourceTokenAmount: sourceAmountRaw,\n targetAmountMinimum: sourceAmountRaw,\n targetChainId: requiredToken.chainId,\n targetTokenAddress: requiredToken.address,\n },\n sourceAmount: {\n fiat: amountFiat,\n human: sourceAmountHuman,\n raw: sourceAmountRaw,\n usd: amountFiat,\n },\n strategy: TransactionPayStrategy.Fiat,\n targetAmount: { fiat: amountFiat, usd: amountFiat },\n };\n}\n\nfunction getRampsProviderFee(fiatQuote: RampsQuote): BigNumber {\n return new BigNumber(fiatQuote.quote.providerFee ?? 0).plus(\n fiatQuote.quote.networkFee ?? 0,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fiat-direct-musd.cjs","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/controller-utils';\nimport type {\n Quote as RampsQuote,\n RampsOrder,\n} from '@metamask/ramps-controller';\nimport { TransactionType } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../../constants';\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionFiatPayment,\n TransactionPayRequiredToken,\n TransactionPayQuote,\n} from '../../types';\nimport { prefixError } from '../../utils/error-prefix';\nimport { getFiatVaultDisabled } from '../../utils/feature-flags';\nimport { getNetworkClientId } from '../../utils/provider';\nimport { buildCaipAssetType, getTokenInfo } from '../../utils/token';\nimport {\n collectTransactionIds,\n getTransaction,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { MUSD_MONAD_FIAT_ASSET } from './constants';\nimport type { FiatQuote } from './types';\nimport {\n getRampsQuote,\n getRawSourceAmountFromOrderCryptoAmount,\n resolveSourceAmountRaw,\n validateOrderAsset,\n} from './utils';\n\nconst log = createModuleLogger(projectLogger, 'fiat-direct-musd');\nconst DIRECT_MUSD_ERROR_PREFIX = 'Direct mUSD: ';\nconst VAULT_ERROR_PREFIX = 'Vault: ';\n\n/**\n * Returns a direct mUSD fiat quote to the Money Account.\n *\n * @param options - Direct quote options.\n * @param options.amountFiat - Fiat amount entered by the user.\n * @param options.fiatPaymentMethod - Selected fiat payment method.\n * @param options.messenger - Controller messenger.\n * @param options.moneyAccountAddress - Money Account receiving the on-ramped mUSD.\n * @param options.requiredToken - Required token from the original Money Account transaction.\n * @param options.transactionId - Transaction ID for state updates and logs.\n * @returns Direct mUSD Fiat quote, or undefined when unavailable.\n */\nexport async function getDirectMusdFiatQuote({\n amountFiat,\n fiatPaymentMethod,\n messenger,\n moneyAccountAddress,\n requiredToken,\n transactionId,\n}: {\n amountFiat: string;\n fiatPaymentMethod: string;\n messenger: PayStrategyGetQuotesRequest['messenger'];\n moneyAccountAddress: Hex;\n requiredToken: TransactionPayRequiredToken;\n transactionId: string;\n}): Promise<TransactionPayQuote<FiatQuote> | undefined> {\n try {\n const adjustedAmount = Number(amountFiat);\n\n if (!Number.isFinite(adjustedAmount) || adjustedAmount <= 0) {\n throw new Error('Invalid fiat amount for direct mUSD quote');\n }\n\n const fiatQuote = await getRampsQuote({\n adjustedAmount,\n errorMessage: 'No matching ramps quote found for direct mUSD provider',\n fiatAsset: MUSD_MONAD_FIAT_ASSET,\n fiatPaymentMethod,\n messenger,\n walletAddress: moneyAccountAddress,\n });\n\n messenger.call('TransactionPayController:updateFiatPayment', {\n callback: (fiatPayment: TransactionFiatPayment) => {\n fiatPayment.rampsQuote = fiatQuote;\n fiatPayment.caipAssetId = buildCaipAssetType(\n MUSD_MONAD_FIAT_ASSET.chainId,\n MUSD_MONAD_FIAT_ASSET.address,\n );\n },\n transactionId,\n });\n\n log('Direct mUSD fiat quote flow', {\n amountFiat,\n moneyAccountAddress,\n transactionId,\n });\n\n return combineDirectMusdFiatQuote({\n amountFiat,\n fiatQuote,\n messenger,\n moneyAccountAddress,\n requiredToken,\n });\n } catch (error) {\n log('Direct mUSD fiat quote failed', { error, transactionId });\n return undefined;\n }\n}\n\n/**\n * Detects a direct mUSD Money Account quote from its stored request marker.\n *\n * @param quote - Quote to inspect.\n * @returns True when the quote originated from the direct mUSD fiat path.\n */\nexport function isDirectMusdMoneyAccountQuote(\n quote: Pick<TransactionPayQuote<unknown>, 'request'> | undefined,\n): boolean {\n return quote?.request.isDirectMusdMoneyAccount === true;\n}\n\n/**\n * Submits the direct mUSD post-Ramp path after fiat settlement.\n *\n * @param options - Submit options.\n * @param options.order - Completed fiat order.\n * @param options.request - Strategy execute request.\n * @returns Hash of the submitted direct mUSD transaction, if available.\n */\nexport async function submitDirectMusdAfterFiatCompletion({\n order,\n request,\n}: {\n order: RampsOrder;\n request: PayStrategyExecuteRequest<FiatQuote>;\n}): Promise<{ transactionHash?: Hex }> {\n const { messenger, transaction } = request;\n\n try {\n validateOrderAsset({\n expectedAsset: MUSD_MONAD_FIAT_ASSET,\n orderCrypto: order.cryptoCurrency,\n transactionId: transaction.id,\n });\n\n const sourceAmountRaw = await resolveSourceAmountRaw({\n messenger,\n order,\n fiatAsset: MUSD_MONAD_FIAT_ASSET,\n walletAddress: transaction.txParams.from as Hex,\n });\n\n return await submitDirectMusdVaultDeposit({\n request,\n sourceAmountRaw,\n transaction,\n });\n } catch (error) {\n throw prefixError(error, DIRECT_MUSD_ERROR_PREFIX);\n }\n}\n\n/**\n * Submits the direct mUSD Money Account vault batch after fiat settlement.\n *\n * @param options - Submit options.\n * @param options.request - Strategy execute request.\n * @param options.sourceAmountRaw - Settled source amount in raw mUSD units.\n * @param options.transaction - Original Money Account transaction.\n * @returns Hash of the final submitted child transaction, if available.\n */\nexport async function submitDirectMusdVaultDeposit({\n request,\n sourceAmountRaw,\n transaction,\n}: {\n request: PayStrategyExecuteRequest<FiatQuote>;\n sourceAmountRaw: string;\n transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];\n}): Promise<{ transactionHash?: Hex }> {\n const { messenger } = request;\n const transactionId = transaction.id;\n const moneyAccountAddress = transaction.txParams.from as Hex | undefined;\n\n if (!moneyAccountAddress) {\n throw new Error('Missing Money Account address');\n }\n\n if (getFiatVaultDisabled(messenger)) {\n log('Skipping direct mUSD vault deposit because vaultDisabled is enabled', {\n moneyAccountAddress,\n sourceAmountRaw,\n transactionId,\n });\n\n return { transactionHash: '0x' };\n }\n\n const updatedTransaction =\n getTransaction(transactionId, messenger) ?? transaction;\n const { updates } = await messenger.call(\n 'TransactionPayController:getAmountData',\n {\n amount: sourceAmountRaw,\n transaction: updatedTransaction,\n },\n );\n\n if (!updates.length) {\n throw new Error('No amount updates');\n }\n\n const nestedTransactions = updatedTransaction.nestedTransactions?.map(\n (nestedTransaction) => ({ ...nestedTransaction }),\n );\n\n if (!nestedTransactions?.length) {\n throw new Error('Missing nested transactions');\n }\n\n for (const { nestedTransactionIndex, data } of updates) {\n if (nestedTransactions[nestedTransactionIndex]) {\n nestedTransactions[nestedTransactionIndex].data = data;\n }\n }\n\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Direct mUSD fiat: update vault amount',\n },\n (tx) => {\n for (const { nestedTransactionIndex, data } of updates) {\n if (tx.nestedTransactions?.[nestedTransactionIndex]) {\n tx.nestedTransactions[nestedTransactionIndex].data = data;\n }\n }\n\n if (tx.requiredAssets?.[0]) {\n tx.requiredAssets[0].amount = `0x${BigInt(sourceAmountRaw).toString(\n 16,\n )}`;\n }\n },\n );\n\n const networkClientId = getNetworkClientId(\n messenger,\n MUSD_MONAD_FIAT_ASSET.chainId,\n );\n const transactionIds: string[] = [];\n const { end } = collectTransactionIds(\n MUSD_MONAD_FIAT_ASSET.chainId,\n moneyAccountAddress,\n messenger,\n (id) => {\n transactionIds.push(id);\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Add required transaction ID from direct mUSD vault submission',\n },\n (tx) => {\n tx.requiredTransactionIds ??= [];\n tx.requiredTransactionIds.push(id);\n },\n );\n },\n );\n\n log('Submitting direct mUSD vault deposit', {\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n });\n\n try {\n await messenger.call('TransactionController:addTransactionBatch', {\n from: moneyAccountAddress,\n isGasFeeSponsored: true,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n requireApproval: false,\n transactions: nestedTransactions.map((nestedTransaction, index) => ({\n params: {\n data: nestedTransaction.data,\n to: nestedTransaction.to,\n value: nestedTransaction.value ?? '0x0',\n },\n type:\n index === 0\n ? (nestedTransaction.type ?? TransactionType.tokenMethodApprove)\n : TransactionType.contractInteraction,\n })),\n });\n } catch (error) {\n throw prefixError(error, VAULT_ERROR_PREFIX);\n }\n\n end();\n\n log('Submitted direct mUSD vault deposit', {\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n transactionIds,\n });\n\n if (!transactionIds.length) {\n throw new Error('No transactions submitted');\n }\n\n await Promise.all(\n transactionIds.map((id) => waitForTransactionConfirmed(id, messenger)),\n );\n\n const hash = getTransaction(transactionIds.slice(-1)[0], messenger)?.hash;\n\n if (!hash) {\n throw new Error('Missing transaction hash');\n }\n\n log('Confirmed direct mUSD vault deposit', {\n hash,\n moneyAccountAddress,\n nestedTransactionCount: nestedTransactions.length,\n networkClientId,\n sourceAmountRaw,\n transactionId,\n transactionIds,\n });\n\n return { transactionHash: hash as Hex };\n}\n\nfunction combineDirectMusdFiatQuote({\n amountFiat,\n fiatQuote,\n messenger,\n moneyAccountAddress,\n requiredToken,\n}: {\n amountFiat: string;\n fiatQuote: RampsQuote;\n messenger: PayStrategyGetQuotesRequest['messenger'];\n moneyAccountAddress: Hex;\n requiredToken: TransactionPayRequiredToken;\n}): TransactionPayQuote<FiatQuote> {\n const tokenInfo = getTokenInfo(\n messenger,\n MUSD_MONAD_FIAT_ASSET.address,\n MUSD_MONAD_FIAT_ASSET.chainId,\n );\n\n if (!tokenInfo) {\n throw new Error('Unable to resolve mUSD token info for direct fiat quote');\n }\n\n const sourceAmountRaw = getRawSourceAmountFromOrderCryptoAmount({\n cryptoAmount: fiatQuote.quote.amountOut,\n decimals: tokenInfo.decimals,\n });\n const rampsProviderFee = getRampsProviderFee(fiatQuote).toString(10);\n const sourceAmountHuman = new BigNumber(sourceAmountRaw)\n .shiftedBy(-tokenInfo.decimals)\n .toString(10);\n\n return {\n dust: { fiat: '0', usd: '0' },\n estimatedDuration: 0,\n fees: {\n metaMask: { fiat: '0', usd: '0' },\n provider: { fiat: rampsProviderFee, usd: rampsProviderFee },\n providerFiat: { fiat: rampsProviderFee, usd: rampsProviderFee },\n sourceNetwork: {\n estimate: { fiat: '0', human: '0', raw: '0', usd: '0' },\n max: { fiat: '0', human: '0', raw: '0', usd: '0' },\n },\n targetNetwork: { fiat: '0', usd: '0' },\n },\n original: {\n rampsQuote: fiatQuote,\n relayQuote: undefined,\n },\n request: {\n from: moneyAccountAddress,\n isDirectMusdMoneyAccount: true,\n recipient: moneyAccountAddress,\n sourceBalanceRaw: sourceAmountRaw,\n sourceChainId: MUSD_MONAD_FIAT_ASSET.chainId,\n sourceTokenAddress: MUSD_MONAD_FIAT_ASSET.address,\n sourceTokenAmount: sourceAmountRaw,\n targetAmountMinimum: sourceAmountRaw,\n targetChainId: requiredToken.chainId,\n targetTokenAddress: requiredToken.address,\n },\n sourceAmount: {\n fiat: amountFiat,\n human: sourceAmountHuman,\n raw: sourceAmountRaw,\n usd: amountFiat,\n },\n strategy: TransactionPayStrategy.Fiat,\n targetAmount: { fiat: amountFiat, usd: amountFiat },\n };\n}\n\nfunction getRampsProviderFee(fiatQuote: RampsQuote): BigNumber {\n return new BigNumber(fiatQuote.quote.providerFee ?? 0).plus(\n fiatQuote.quote.networkFee ?? 0,\n );\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RampsOrder } from "@metamask/ramps-controller";
|
|
1
2
|
import type { Hex } from "@metamask/utils";
|
|
2
3
|
import type { PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayRequiredToken, TransactionPayQuote } from "../../types.cjs";
|
|
3
4
|
import type { FiatQuote } from "./types.cjs";
|
|
@@ -28,6 +29,20 @@ export declare function getDirectMusdFiatQuote({ amountFiat, fiatPaymentMethod,
|
|
|
28
29
|
* @returns True when the quote originated from the direct mUSD fiat path.
|
|
29
30
|
*/
|
|
30
31
|
export declare function isDirectMusdMoneyAccountQuote(quote: Pick<TransactionPayQuote<unknown>, 'request'> | undefined): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Submits the direct mUSD post-Ramp path after fiat settlement.
|
|
34
|
+
*
|
|
35
|
+
* @param options - Submit options.
|
|
36
|
+
* @param options.order - Completed fiat order.
|
|
37
|
+
* @param options.request - Strategy execute request.
|
|
38
|
+
* @returns Hash of the submitted direct mUSD transaction, if available.
|
|
39
|
+
*/
|
|
40
|
+
export declare function submitDirectMusdAfterFiatCompletion({ order, request, }: {
|
|
41
|
+
order: RampsOrder;
|
|
42
|
+
request: PayStrategyExecuteRequest<FiatQuote>;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
transactionHash?: Hex;
|
|
45
|
+
}>;
|
|
31
46
|
/**
|
|
32
47
|
* Submits the direct mUSD Money Account vault batch after fiat settlement.
|
|
33
48
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiat-direct-musd.d.cts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fiat-direct-musd.d.cts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,UAAU,EACX,mCAAmC;AAEpC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAM3C,OAAO,KAAK,EACV,yBAAyB,EACzB,2BAA2B,EAE3B,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAYrB,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAYzC;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,aAAa,GACd,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACpD,mBAAmB,EAAE,GAAG,CAAC;IACzB,aAAa,EAAE,2BAA2B,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CA6CtD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,GAAG,SAAS,GAC/D,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CAAC,EACxD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;CAC/C,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAyBrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,OAAO,EACP,eAAe,EACf,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;CAClE,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAiKrC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RampsOrder } from "@metamask/ramps-controller";
|
|
1
2
|
import type { Hex } from "@metamask/utils";
|
|
2
3
|
import type { PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayRequiredToken, TransactionPayQuote } from "../../types.mjs";
|
|
3
4
|
import type { FiatQuote } from "./types.mjs";
|
|
@@ -28,6 +29,20 @@ export declare function getDirectMusdFiatQuote({ amountFiat, fiatPaymentMethod,
|
|
|
28
29
|
* @returns True when the quote originated from the direct mUSD fiat path.
|
|
29
30
|
*/
|
|
30
31
|
export declare function isDirectMusdMoneyAccountQuote(quote: Pick<TransactionPayQuote<unknown>, 'request'> | undefined): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Submits the direct mUSD post-Ramp path after fiat settlement.
|
|
34
|
+
*
|
|
35
|
+
* @param options - Submit options.
|
|
36
|
+
* @param options.order - Completed fiat order.
|
|
37
|
+
* @param options.request - Strategy execute request.
|
|
38
|
+
* @returns Hash of the submitted direct mUSD transaction, if available.
|
|
39
|
+
*/
|
|
40
|
+
export declare function submitDirectMusdAfterFiatCompletion({ order, request, }: {
|
|
41
|
+
order: RampsOrder;
|
|
42
|
+
request: PayStrategyExecuteRequest<FiatQuote>;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
transactionHash?: Hex;
|
|
45
|
+
}>;
|
|
31
46
|
/**
|
|
32
47
|
* Submits the direct mUSD Money Account vault batch after fiat settlement.
|
|
33
48
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fiat-direct-musd.d.mts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fiat-direct-musd.d.mts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-direct-musd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,UAAU,EACX,mCAAmC;AAEpC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAM3C,OAAO,KAAK,EACV,yBAAyB,EACzB,2BAA2B,EAE3B,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAYrB,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAYzC;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,aAAa,GACd,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACpD,mBAAmB,EAAE,GAAG,CAAC;IACzB,aAAa,EAAE,2BAA2B,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CA6CtD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,GAAG,SAAS,GAC/D,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CAAC,EACxD,KAAK,EACL,OAAO,GACR,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;CAC/C,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAyBrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,OAAO,EACP,eAAe,EACf,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;CAClE,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAiKrC"}
|