@metamask-previews/transaction-controller 66.0.0-preview-855431b → 66.0.0-preview-4678f2f94
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 +4 -0
- package/dist/hooks/ExtraTransactionsPublishHook.cjs +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -1
- package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -1
- package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -1
- package/dist/hooks/ExtraTransactionsPublishHook.mjs +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fix `ExtraTransactionsPublishHook` not passing `isInternal: true` when calling `addTransactionBatch`, causing the duplicate-batch-ID guard to incorrectly throw `DuplicateBundleId` (error 5720) for nested ERC-20 gas-fee-token transfers that share a `batchId` with their parent batch ([#8884](https://github.com/MetaMask/core/pull/8884))
|
|
13
|
+
|
|
10
14
|
## [66.0.0]
|
|
11
15
|
|
|
12
16
|
### Changed
|
|
@@ -115,6 +115,7 @@ _ExtraTransactionsPublishHook_addTransactionBatch = new WeakMap(), _ExtraTransac
|
|
|
115
115
|
};
|
|
116
116
|
await __classPrivateFieldGet(this, _ExtraTransactionsPublishHook_addTransactionBatch, "f").call(this, {
|
|
117
117
|
from,
|
|
118
|
+
isInternal: true,
|
|
118
119
|
networkClientId,
|
|
119
120
|
requireApproval: false,
|
|
120
121
|
transactions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtraTransactionsPublishHook.cjs","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4E;AAI5E,0CAA0C;AAS1C,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAC5B,sBAAa,EACb,iCAAiC,CAClC,CAAC;AAEF;;;GAGG;AACH,MAAa,4BAA4B;IAOvC,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GAKpB;;QAdQ,oEAAmE;QAEnE,+DAA4D;QAE5D,oEAAkC;QAWzC,uBAAA,IAAI,qDAAwB,mBAAmB,MAAA,CAAC;QAChD,uBAAA,IAAI,gDAAmB,cAAc,MAAA,CAAC;QACtC,uBAAA,IAAI,qDAAwB,mBAAmB,MAAA,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,uBAAA,IAAI,mFAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"ExtraTransactionsPublishHook.cjs","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDeferredPromise, createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { TransactionController } from '..';\nimport { projectLogger } from '../logger';\nimport type {\n BatchTransactionParams,\n PublishHook,\n PublishHookResult,\n TransactionBatchSingleRequest,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(\n projectLogger,\n 'extra-transactions-publish-hook',\n);\n\n/**\n * Custom publish logic that also publishes additional transactions in an batch.\n * Requires the batch to be successful to resolve.\n */\nexport class ExtraTransactionsPublishHook {\n readonly #addTransactionBatch: TransactionController['addTransactionBatch'];\n\n readonly #getTransaction: (transactionId: string) => TransactionMeta;\n\n readonly #originalPublishHook: PublishHook;\n\n constructor({\n addTransactionBatch,\n getTransaction,\n originalPublishHook,\n }: {\n addTransactionBatch: TransactionController['addTransactionBatch'];\n getTransaction: (transactionId: string) => TransactionMeta;\n originalPublishHook: PublishHook;\n }) {\n this.#addTransactionBatch = addTransactionBatch;\n this.#getTransaction = getTransaction;\n this.#originalPublishHook = originalPublishHook;\n }\n\n /**\n * @returns The publish hook function.\n */\n getHook(): PublishHook {\n return this.#hook.bind(this);\n }\n\n async #hook(\n transactionMeta: TransactionMeta,\n signedTx: string,\n ): Promise<PublishHookResult> {\n log('Publishing transaction as batch', { transactionMeta, signedTx });\n\n const {\n batchTransactions,\n batchTransactionsOptions,\n id: transactionId,\n networkClientId,\n txParams,\n } = transactionMeta;\n\n const from = txParams.from as Hex;\n const to = txParams.to as Hex | undefined;\n const data = txParams.data as Hex | undefined;\n const value = txParams.value as Hex | undefined;\n const gas = txParams.gas as Hex | undefined;\n const maxFeePerGas = txParams.maxFeePerGas as Hex | undefined;\n\n const maxPriorityFeePerGas = txParams.maxPriorityFeePerGas as\n | Hex\n | undefined;\n\n const signedTransaction = signedTx as Hex;\n const resultPromise = createDeferredPromise<PublishHookResult>();\n\n const onPublish = ({\n newSignature,\n transactionHash,\n }: {\n newSignature?: Hex;\n transactionHash?: string;\n }): void => {\n if (newSignature) {\n const latestTransactionMeta = this.#getTransaction(transactionId);\n\n log('Calling original publish hook with new signature', {\n latestTransactionMeta,\n newSignature,\n });\n\n this.#originalPublishHook(latestTransactionMeta, newSignature)\n .then(resultPromise.resolve)\n .catch(resultPromise.reject);\n\n return;\n }\n\n resultPromise.resolve({ transactionHash });\n };\n\n const firstParams: BatchTransactionParams = {\n data,\n gas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n const mainTransaction: TransactionBatchSingleRequest = {\n existingTransaction: {\n id: transactionId,\n onPublish,\n signedTransaction,\n },\n params: firstParams,\n };\n\n const extraTransactions = (batchTransactions ?? []).map((transaction) => {\n const { isAfter, type, ...rest } = transaction;\n return {\n isAfter,\n params: rest,\n type,\n };\n });\n\n const beforeTransactions: TransactionBatchSingleRequest[] =\n extraTransactions\n .filter((transaction) => transaction.isAfter === false)\n .map(({ isAfter, ...rest }) => ({\n ...rest,\n }));\n\n const afterTransactions: TransactionBatchSingleRequest[] = extraTransactions\n .filter(\n (transaction) =>\n transaction.isAfter === undefined || transaction.isAfter,\n )\n .map(({ isAfter, ...rest }) => ({\n ...rest,\n }));\n\n const transactions: TransactionBatchSingleRequest[] = [\n ...beforeTransactions,\n mainTransaction,\n ...afterTransactions,\n ];\n\n log('Adding transaction batch', {\n from,\n networkClientId,\n transactions,\n });\n\n const options = batchTransactionsOptions ?? {\n disable7702: true,\n disableHook: false,\n disableSequential: true,\n };\n\n await this.#addTransactionBatch({\n from,\n isInternal: true,\n networkClientId,\n requireApproval: false,\n transactions,\n ...options,\n });\n\n return resultPromise.promise;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtraTransactionsPublishHook.d.cts","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAW;AAEhD,OAAO,KAAK,EAEV,WAAW,EAGX,eAAe,EAChB,qBAAiB;AAOlB;;;GAGG;AACH,qBAAa,4BAA4B;;gBAO3B,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,EAAE;QACD,mBAAmB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,eAAe,CAAC;QAC3D,mBAAmB,EAAE,WAAW,CAAC;KAClC;IAMD;;OAEG;IACH,OAAO,IAAI,WAAW;
|
|
1
|
+
{"version":3,"file":"ExtraTransactionsPublishHook.d.cts","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAW;AAEhD,OAAO,KAAK,EAEV,WAAW,EAGX,eAAe,EAChB,qBAAiB;AAOlB;;;GAGG;AACH,qBAAa,4BAA4B;;gBAO3B,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,EAAE;QACD,mBAAmB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,eAAe,CAAC;QAC3D,mBAAmB,EAAE,WAAW,CAAC;KAClC;IAMD;;OAEG;IACH,OAAO,IAAI,WAAW;CAiIvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtraTransactionsPublishHook.d.mts","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAW;AAEhD,OAAO,KAAK,EAEV,WAAW,EAGX,eAAe,EAChB,qBAAiB;AAOlB;;;GAGG;AACH,qBAAa,4BAA4B;;gBAO3B,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,EAAE;QACD,mBAAmB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,eAAe,CAAC;QAC3D,mBAAmB,EAAE,WAAW,CAAC;KAClC;IAMD;;OAEG;IACH,OAAO,IAAI,WAAW;
|
|
1
|
+
{"version":3,"file":"ExtraTransactionsPublishHook.d.mts","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAW;AAEhD,OAAO,KAAK,EAEV,WAAW,EAGX,eAAe,EAChB,qBAAiB;AAOlB;;;GAGG;AACH,qBAAa,4BAA4B;;gBAO3B,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GACpB,EAAE;QACD,mBAAmB,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;QAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,eAAe,CAAC;QAC3D,mBAAmB,EAAE,WAAW,CAAC;KAClC;IAMD;;OAEG;IACH,OAAO,IAAI,WAAW;CAiIvB"}
|
|
@@ -111,6 +111,7 @@ _ExtraTransactionsPublishHook_addTransactionBatch = new WeakMap(), _ExtraTransac
|
|
|
111
111
|
};
|
|
112
112
|
await __classPrivateFieldGet(this, _ExtraTransactionsPublishHook_addTransactionBatch, "f").call(this, {
|
|
113
113
|
from,
|
|
114
|
+
isInternal: true,
|
|
114
115
|
networkClientId,
|
|
115
116
|
requireApproval: false,
|
|
116
117
|
transactions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtraTransactionsPublishHook.mjs","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,wBAAwB;AAI5E,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAS1C,MAAM,GAAG,GAAG,kBAAkB,CAC5B,aAAa,EACb,iCAAiC,CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,4BAA4B;IAOvC,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,GAKpB;;QAdQ,oEAAmE;QAEnE,+DAA4D;QAE5D,oEAAkC;QAWzC,uBAAA,IAAI,qDAAwB,mBAAmB,MAAA,CAAC;QAChD,uBAAA,IAAI,gDAAmB,cAAc,MAAA,CAAC;QACtC,uBAAA,IAAI,qDAAwB,mBAAmB,MAAA,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,uBAAA,IAAI,mFAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"ExtraTransactionsPublishHook.mjs","sourceRoot":"","sources":["../../src/hooks/ExtraTransactionsPublishHook.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDeferredPromise, createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport type { TransactionController } from '..';\nimport { projectLogger } from '../logger';\nimport type {\n BatchTransactionParams,\n PublishHook,\n PublishHookResult,\n TransactionBatchSingleRequest,\n TransactionMeta,\n} from '../types';\n\nconst log = createModuleLogger(\n projectLogger,\n 'extra-transactions-publish-hook',\n);\n\n/**\n * Custom publish logic that also publishes additional transactions in an batch.\n * Requires the batch to be successful to resolve.\n */\nexport class ExtraTransactionsPublishHook {\n readonly #addTransactionBatch: TransactionController['addTransactionBatch'];\n\n readonly #getTransaction: (transactionId: string) => TransactionMeta;\n\n readonly #originalPublishHook: PublishHook;\n\n constructor({\n addTransactionBatch,\n getTransaction,\n originalPublishHook,\n }: {\n addTransactionBatch: TransactionController['addTransactionBatch'];\n getTransaction: (transactionId: string) => TransactionMeta;\n originalPublishHook: PublishHook;\n }) {\n this.#addTransactionBatch = addTransactionBatch;\n this.#getTransaction = getTransaction;\n this.#originalPublishHook = originalPublishHook;\n }\n\n /**\n * @returns The publish hook function.\n */\n getHook(): PublishHook {\n return this.#hook.bind(this);\n }\n\n async #hook(\n transactionMeta: TransactionMeta,\n signedTx: string,\n ): Promise<PublishHookResult> {\n log('Publishing transaction as batch', { transactionMeta, signedTx });\n\n const {\n batchTransactions,\n batchTransactionsOptions,\n id: transactionId,\n networkClientId,\n txParams,\n } = transactionMeta;\n\n const from = txParams.from as Hex;\n const to = txParams.to as Hex | undefined;\n const data = txParams.data as Hex | undefined;\n const value = txParams.value as Hex | undefined;\n const gas = txParams.gas as Hex | undefined;\n const maxFeePerGas = txParams.maxFeePerGas as Hex | undefined;\n\n const maxPriorityFeePerGas = txParams.maxPriorityFeePerGas as\n | Hex\n | undefined;\n\n const signedTransaction = signedTx as Hex;\n const resultPromise = createDeferredPromise<PublishHookResult>();\n\n const onPublish = ({\n newSignature,\n transactionHash,\n }: {\n newSignature?: Hex;\n transactionHash?: string;\n }): void => {\n if (newSignature) {\n const latestTransactionMeta = this.#getTransaction(transactionId);\n\n log('Calling original publish hook with new signature', {\n latestTransactionMeta,\n newSignature,\n });\n\n this.#originalPublishHook(latestTransactionMeta, newSignature)\n .then(resultPromise.resolve)\n .catch(resultPromise.reject);\n\n return;\n }\n\n resultPromise.resolve({ transactionHash });\n };\n\n const firstParams: BatchTransactionParams = {\n data,\n gas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n const mainTransaction: TransactionBatchSingleRequest = {\n existingTransaction: {\n id: transactionId,\n onPublish,\n signedTransaction,\n },\n params: firstParams,\n };\n\n const extraTransactions = (batchTransactions ?? []).map((transaction) => {\n const { isAfter, type, ...rest } = transaction;\n return {\n isAfter,\n params: rest,\n type,\n };\n });\n\n const beforeTransactions: TransactionBatchSingleRequest[] =\n extraTransactions\n .filter((transaction) => transaction.isAfter === false)\n .map(({ isAfter, ...rest }) => ({\n ...rest,\n }));\n\n const afterTransactions: TransactionBatchSingleRequest[] = extraTransactions\n .filter(\n (transaction) =>\n transaction.isAfter === undefined || transaction.isAfter,\n )\n .map(({ isAfter, ...rest }) => ({\n ...rest,\n }));\n\n const transactions: TransactionBatchSingleRequest[] = [\n ...beforeTransactions,\n mainTransaction,\n ...afterTransactions,\n ];\n\n log('Adding transaction batch', {\n from,\n networkClientId,\n transactions,\n });\n\n const options = batchTransactionsOptions ?? {\n disable7702: true,\n disableHook: false,\n disableSequential: true,\n };\n\n await this.#addTransactionBatch({\n from,\n isInternal: true,\n networkClientId,\n requireApproval: false,\n transactions,\n ...options,\n });\n\n return resultPromise.promise;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/transaction-controller",
|
|
3
|
-
"version": "66.0.0-preview-
|
|
3
|
+
"version": "66.0.0-preview-4678f2f94",
|
|
4
4
|
"description": "Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|