@metamask-previews/transaction-controller 56.2.0-preview-6aac6e71 → 56.2.0-preview-e96d94ef

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.
@@ -1,12 +1,9 @@
1
1
  import type EthQuery from "@metamask/eth-query";
2
2
  import type { Hex } from "@metamask/utils";
3
- import type { WritableDraft } from "immer/dist/internal.js";
4
- import type { TransactionControllerState } from "../index.cjs";
5
3
  import { type TransactionController, type TransactionControllerMessenger, type TransactionMeta } from "../index.cjs";
6
4
  import type { PendingTransactionTracker } from "../helpers/PendingTransactionTracker.cjs";
7
5
  import type { PublishBatchHook, TransactionBatchRequest, IsAtomicBatchSupportedResult } from "../types.cjs";
8
6
  import { type TransactionBatchResult } from "../types.cjs";
9
- type UpdateStateCallback = (callback: (state: WritableDraft<TransactionControllerState>) => void | TransactionControllerState) => void;
10
7
  type AddTransactionBatchRequest = {
11
8
  addTransaction: TransactionController['addTransaction'];
12
9
  getChainId: (networkClientId: string) => Hex;
@@ -22,7 +19,6 @@ type AddTransactionBatchRequest = {
22
19
  }, callback: (transactionMeta: TransactionMeta) => void) => void;
23
20
  publishTransaction: (_ethQuery: EthQuery, transactionMeta: TransactionMeta) => Promise<Hex>;
24
21
  getPendingTransactionTracker: (networkClientId: string) => PendingTransactionTracker;
25
- update: UpdateStateCallback;
26
22
  };
27
23
  type IsAtomicBatchSupportedRequestInternal = {
28
24
  address: Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"batch.d.cts","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,4BAA4B;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B;AAe5D,OAAO,KAAK,EAAE,0BAA0B,EAAE,qBAAW;AACrD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,eAAe,EACrB,qBAAW;AACZ,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAItF,OAAO,KAAK,EAIV,gBAAgB,EAGhB,uBAAuB,EAEvB,4BAA4B,EAG7B,qBAAiB;AAClB,OAAO,EAEL,KAAK,sBAAsB,EAG5B,qBAAiB;AAElB,KAAK,mBAAmB,GAAG,CACzB,QAAQ,EAAE,CACR,KAAK,EAAE,aAAa,CAAC,0BAA0B,CAAC,KAC7C,IAAI,GAAG,0BAA0B,KACnC,IAAI,CAAC;AAEV,KAAK,0BAA0B,GAAG;IAChC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,mBAAmB,EAAE,MAAM,GAAG,EAAE,CAAC;IACjC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,OAAO,EAAE,uBAAuB,CAAC;IACjC,iBAAiB,EAAE,CACjB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAClC,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAClB,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;IAC/B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC;IACxC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,CAAC;AAIF,eAAO,MAAM,iCAAiC,uCACR,CAAC;AAEvC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,4BAA4B,CAAC,CA4DvC"}
1
+ {"version":3,"file":"batch.d.cts","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,4BAA4B;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAgB3C,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,eAAe,EACrB,qBAAW;AACZ,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAItF,OAAO,KAAK,EAIV,gBAAgB,EAGhB,uBAAuB,EAEvB,4BAA4B,EAE7B,qBAAiB;AAClB,OAAO,EAEL,KAAK,sBAAsB,EAG5B,qBAAiB;AAElB,KAAK,0BAA0B,GAAG;IAChC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,mBAAmB,EAAE,MAAM,GAAG,EAAE,CAAC;IACjC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,OAAO,EAAE,uBAAuB,CAAC;IACjC,iBAAiB,EAAE,CACjB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAClC,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAClB,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC;IACxC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,CAAC;AAIF,eAAO,MAAM,iCAAiC,uCACR,CAAC;AAEvC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,4BAA4B,CAAC,CA4DvC"}
@@ -1,12 +1,9 @@
1
1
  import type EthQuery from "@metamask/eth-query";
2
2
  import type { Hex } from "@metamask/utils";
3
- import type { WritableDraft } from "immer/dist/internal.js";
4
- import type { TransactionControllerState } from "../index.mjs";
5
3
  import { type TransactionController, type TransactionControllerMessenger, type TransactionMeta } from "../index.mjs";
6
4
  import type { PendingTransactionTracker } from "../helpers/PendingTransactionTracker.mjs";
7
5
  import type { PublishBatchHook, TransactionBatchRequest, IsAtomicBatchSupportedResult } from "../types.mjs";
8
6
  import { type TransactionBatchResult } from "../types.mjs";
9
- type UpdateStateCallback = (callback: (state: WritableDraft<TransactionControllerState>) => void | TransactionControllerState) => void;
10
7
  type AddTransactionBatchRequest = {
11
8
  addTransaction: TransactionController['addTransaction'];
12
9
  getChainId: (networkClientId: string) => Hex;
@@ -22,7 +19,6 @@ type AddTransactionBatchRequest = {
22
19
  }, callback: (transactionMeta: TransactionMeta) => void) => void;
23
20
  publishTransaction: (_ethQuery: EthQuery, transactionMeta: TransactionMeta) => Promise<Hex>;
24
21
  getPendingTransactionTracker: (networkClientId: string) => PendingTransactionTracker;
25
- update: UpdateStateCallback;
26
22
  };
27
23
  type IsAtomicBatchSupportedRequestInternal = {
28
24
  address: Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"batch.d.mts","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,4BAA4B;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B;AAe5D,OAAO,KAAK,EAAE,0BAA0B,EAAE,qBAAW;AACrD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,eAAe,EACrB,qBAAW;AACZ,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAItF,OAAO,KAAK,EAIV,gBAAgB,EAGhB,uBAAuB,EAEvB,4BAA4B,EAG7B,qBAAiB;AAClB,OAAO,EAEL,KAAK,sBAAsB,EAG5B,qBAAiB;AAElB,KAAK,mBAAmB,GAAG,CACzB,QAAQ,EAAE,CACR,KAAK,EAAE,aAAa,CAAC,0BAA0B,CAAC,KAC7C,IAAI,GAAG,0BAA0B,KACnC,IAAI,CAAC;AAEV,KAAK,0BAA0B,GAAG;IAChC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,mBAAmB,EAAE,MAAM,GAAG,EAAE,CAAC;IACjC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,OAAO,EAAE,uBAAuB,CAAC;IACjC,iBAAiB,EAAE,CACjB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAClC,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAClB,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;IAC/B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC;IACxC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,CAAC;AAIF,eAAO,MAAM,iCAAiC,uCACR,CAAC;AAEvC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,4BAA4B,CAAC,CA4DvC"}
1
+ {"version":3,"file":"batch.d.mts","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,4BAA4B;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAgB3C,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,eAAe,EACrB,qBAAW;AACZ,OAAO,KAAK,EAAE,yBAAyB,EAAE,iDAA6C;AAItF,OAAO,KAAK,EAIV,gBAAgB,EAGhB,uBAAuB,EAEvB,4BAA4B,EAE7B,qBAAiB;AAClB,OAAO,EAEL,KAAK,sBAAsB,EAG5B,qBAAiB;AAElB,KAAK,0BAA0B,GAAG;IAChC,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7C,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IACnD,mBAAmB,EAAE,MAAM,GAAG,EAAE,CAAC;IACjC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,eAAe,CAAC;IAChD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,OAAO,EAAE,uBAAuB,CAAC;IACjC,iBAAiB,EAAE,CACjB,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAClC,QAAQ,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,KACjD,IAAI,CAAC;IACV,kBAAkB,EAAE,CAClB,SAAS,EAAE,QAAQ,EACnB,eAAe,EAAE,eAAe,KAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,4BAA4B,EAAE,CAC5B,eAAe,EAAE,MAAM,KACpB,yBAAyB,CAAC;CAChC,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC;IACxC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,CAAC;AAIF,eAAO,MAAM,iCAAiC,uCACR,CAAC;AAEvC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAmBjC;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,qCAAqC,GAC7C,OAAO,CAAC,4BAA4B,CAAC,CA4DvC"}
@@ -1,4 +1,3 @@
1
- import { ORIGIN_METAMASK } from "@metamask/controller-utils";
2
1
  import { rpcErrors } from "@metamask/rpc-errors";
3
2
  import { bytesToHex, createModuleLogger } from "@metamask/utils";
4
3
  import { parse, v4 } from "uuid";
@@ -146,7 +145,9 @@ async function addTransactionBatchWith7702(request) {
146
145
  delegationMock: txParams.authorizationList?.[0]?.address,
147
146
  };
148
147
  log('Security request', securityRequest);
148
+ /* istanbul ignore next */
149
149
  validateSecurity(securityRequest, chainId).catch((error) => {
150
+ /* istanbul ignore next */
150
151
  log('Security validation failed', error);
151
152
  });
152
153
  }
@@ -177,9 +178,8 @@ async function addTransactionBatchWith7702(request) {
177
178
  * @returns The batch result object including the batch ID.
178
179
  */
179
180
  async function addTransactionBatchWithHook(request) {
180
- const { getChainId, messenger, publishBatchHook: requestPublishBatchHook, request: userRequest, update, } = request;
181
- const { from, networkClientId, origin, requireApproval, transactions: nestedTransactions, useHook, } = userRequest;
182
- let resultCallbacks;
181
+ const { publishBatchHook: requestPublishBatchHook, request: userRequest } = request;
182
+ const { from, networkClientId, transactions: nestedTransactions, } = userRequest;
183
183
  log('Adding transaction batch using hook', userRequest);
184
184
  const sequentialPublishBatchHook = new SequentialPublishBatchHook({
185
185
  publishTransaction: request.publishTransaction,
@@ -188,25 +188,12 @@ async function addTransactionBatchWithHook(request) {
188
188
  getPendingTransactionTracker: request.getPendingTransactionTracker,
189
189
  });
190
190
  const publishBatchHook = requestPublishBatchHook ?? sequentialPublishBatchHook.getHook();
191
- const chainId = getChainId(networkClientId);
192
191
  const batchId = generateBatchId();
193
192
  const transactionCount = nestedTransactions.length;
194
193
  const collectHook = new CollectPublishHook(transactionCount);
194
+ const publishHook = collectHook.getHook();
195
+ const hookTransactions = [];
195
196
  try {
196
- if (requireApproval && useHook) {
197
- const txBatchMeta = newBatchMetadata({
198
- id: batchId,
199
- chainId,
200
- networkClientId,
201
- transactions: nestedTransactions,
202
- origin,
203
- });
204
- addBatchMetadata(txBatchMeta, update);
205
- resultCallbacks = (await requestApproval(txBatchMeta, messenger))
206
- .resultCallbacks;
207
- }
208
- const publishHook = collectHook.getHook();
209
- const hookTransactions = [];
210
197
  for (const nestedTransaction of nestedTransactions) {
211
198
  const hookTransaction = await processTransactionWithHook(batchId, nestedTransaction, publishHook, request);
212
199
  hookTransactions.push(hookTransaction);
@@ -228,7 +215,6 @@ async function addTransactionBatchWithHook(request) {
228
215
  }
229
216
  const transactionHashes = result.results.map(({ transactionHash }) => transactionHash);
230
217
  collectHook.success(transactionHashes);
231
- resultCallbacks?.success();
232
218
  log('Completed batch transaction with hook', transactionHashes);
233
219
  return {
234
220
  batchId,
@@ -237,13 +223,8 @@ async function addTransactionBatchWithHook(request) {
237
223
  catch (error) {
238
224
  log('Publish batch hook failed', error);
239
225
  collectHook.error(error);
240
- resultCallbacks?.error(error);
241
226
  throw error;
242
227
  }
243
- finally {
244
- log('Cleaning up publish batch hook', batchId);
245
- wipeTransactionBatchById(update, batchId);
246
- }
247
228
  }
248
229
  /**
249
230
  * Process a single transaction with a publish batch hook.
@@ -309,69 +290,4 @@ async function processTransactionWithHook(batchId, nestedTransaction, publishHoo
309
290
  params: newParams,
310
291
  };
311
292
  }
312
- /**
313
- * Requests approval for a transaction batch by interacting with the ApprovalController.
314
- *
315
- * @param txBatchMeta - Metadata for the transaction batch, including its ID and origin.
316
- * @param messenger - The messenger instance used to communicate with the ApprovalController.
317
- * @returns A promise that resolves to the result of adding the approval request.
318
- */
319
- async function requestApproval(txBatchMeta, messenger) {
320
- const id = String(txBatchMeta.id);
321
- const { origin } = txBatchMeta;
322
- const type = 'transaction_batch';
323
- const requestData = { txBatchId: id };
324
- return (await messenger.call('ApprovalController:addRequest', {
325
- id,
326
- origin: origin || ORIGIN_METAMASK,
327
- requestData,
328
- expectsResult: true,
329
- type,
330
- }, true));
331
- }
332
- /**
333
- * Create a new batch metadata object.
334
- *
335
- * @param options - The options for creating a new batch metadata object.
336
- * @param options.id - The ID of the transaction batch.
337
- * @param options.chainId - The chain ID of the transaction batch.
338
- * @param options.networkClientId - The network client ID of the transaction batch.
339
- * @param options.transactions - The transactions in the batch.
340
- * @param options.origin - The origin of the transaction batch.
341
- * @returns A new TransactionBatchMeta object.
342
- */
343
- function newBatchMetadata({ id, chainId, networkClientId, transactions, origin, }) {
344
- return {
345
- id,
346
- chainId,
347
- networkClientId,
348
- transactions,
349
- origin,
350
- };
351
- }
352
- /**
353
- * Adds batch metadata to the transaction controller state.
354
- *
355
- * @param transactionBatchMeta - The transaction batch metadata to be added.
356
- * @param update - The update function to modify the transaction controller state.
357
- */
358
- function addBatchMetadata(transactionBatchMeta, update) {
359
- update((state) => {
360
- state.transactionBatches = [
361
- ...state.transactionBatches,
362
- transactionBatchMeta,
363
- ];
364
- });
365
- }
366
- /**
367
- * Wipes a specific transaction batch from the transaction controller state by its ID.
368
- *
369
- * @param update - The update function to modify the transaction controller state.
370
- * @param id - The ID of the transaction batch to be wiped.
371
- */
372
- function wipeTransactionBatchById(update, id) {
373
- update((state) => {
374
- state.transactionBatches = state.transactionBatches.filter((batch) => batch.id !== id);
375
- });
376
- }
377
293
  //# sourceMappingURL=batch.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch.mjs","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport { ORIGIN_METAMASK } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Hex } from '@metamask/utils';\nimport { bytesToHex, createModuleLogger } from '@metamask/utils';\nimport type { WritableDraft } from 'immer/dist/internal.js';\nimport { parse, v4 } from 'uuid';\n\nimport {\n ERROR_MESSGE_PUBLIC_KEY,\n doesChainSupportEIP7702,\n generateEIP7702BatchTransaction,\n isAccountUpgradedToEIP7702,\n} from './eip7702';\nimport {\n getBatchSizeLimit,\n getEIP7702SupportedChains,\n getEIP7702UpgradeContractAddress,\n} from './feature-flags';\nimport { validateBatchRequest } from './validation';\nimport type { TransactionControllerState } from '..';\nimport {\n determineTransactionType,\n type BatchTransactionParams,\n type TransactionController,\n type TransactionControllerMessenger,\n type TransactionMeta,\n} from '..';\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { CollectPublishHook } from '../hooks/CollectPublishHook';\nimport { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook';\nimport { projectLogger } from '../logger';\nimport type {\n NestedTransactionMetadata,\n SecurityAlertResponse,\n TransactionBatchSingleRequest,\n PublishBatchHook,\n PublishBatchHookTransaction,\n PublishHook,\n TransactionBatchRequest,\n ValidateSecurityRequest,\n IsAtomicBatchSupportedResult,\n IsAtomicBatchSupportedResultEntry,\n TransactionBatchMeta,\n} from '../types';\nimport {\n TransactionEnvelopeType,\n type TransactionBatchResult,\n type TransactionParams,\n TransactionType,\n} from '../types';\n\ntype UpdateStateCallback = (\n callback: (\n state: WritableDraft<TransactionControllerState>,\n ) => void | TransactionControllerState,\n) => void;\n\ntype AddTransactionBatchRequest = {\n addTransaction: TransactionController['addTransaction'];\n getChainId: (networkClientId: string) => Hex;\n getEthQuery: (networkClientId: string) => EthQuery;\n getInternalAccounts: () => Hex[];\n getTransaction: (id: string) => TransactionMeta;\n messenger: TransactionControllerMessenger;\n publishBatchHook?: PublishBatchHook;\n publicKeyEIP7702?: Hex;\n request: TransactionBatchRequest;\n updateTransaction: (\n options: { transactionId: string },\n callback: (transactionMeta: TransactionMeta) => void,\n ) => void;\n publishTransaction: (\n _ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n update: UpdateStateCallback;\n};\n\ntype IsAtomicBatchSupportedRequestInternal = {\n address: Hex;\n chainIds?: Hex[];\n getEthQuery: (chainId: Hex) => EthQuery;\n messenger: TransactionControllerMessenger;\n publicKeyEIP7702?: Hex;\n};\n\nconst log = createModuleLogger(projectLogger, 'batch');\n\nexport const ERROR_MESSAGE_NO_UPGRADE_CONTRACT =\n 'Upgrade contract address not found';\n\n/**\n * Add a batch transaction.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nexport async function addTransactionBatch(\n request: AddTransactionBatchRequest,\n): Promise<TransactionBatchResult> {\n const { getInternalAccounts, messenger, request: userRequest } = request;\n const sizeLimit = getBatchSizeLimit(messenger);\n\n validateBatchRequest({\n internalAccounts: getInternalAccounts(),\n request: userRequest,\n sizeLimit,\n });\n\n const { useHook } = userRequest;\n\n log('Adding', userRequest);\n\n if (useHook) {\n return await addTransactionBatchWithHook(request);\n }\n\n return await addTransactionBatchWith7702(request);\n}\n\n/**\n * Determine which chains support atomic batch transactions for the given account.\n *\n * @param request - The request object including the account address and necessary callbacks.\n * @returns The chain IDs that support atomic batch transactions.\n */\nexport async function isAtomicBatchSupported(\n request: IsAtomicBatchSupportedRequestInternal,\n): Promise<IsAtomicBatchSupportedResult> {\n const {\n address,\n chainIds,\n getEthQuery,\n messenger,\n publicKeyEIP7702: publicKey,\n } = request;\n\n if (!publicKey) {\n throw rpcErrors.internal(ERROR_MESSGE_PUBLIC_KEY);\n }\n\n const chainIds7702 = getEIP7702SupportedChains(messenger);\n\n const filteredChainIds = chainIds7702.filter(\n (chainId) => !chainIds || chainIds.includes(chainId),\n );\n\n const resultsRaw: (IsAtomicBatchSupportedResultEntry | undefined)[] =\n await Promise.all(\n filteredChainIds.map(async (chainId) => {\n try {\n const ethQuery = getEthQuery(chainId);\n\n const { isSupported, delegationAddress } =\n await isAccountUpgradedToEIP7702(\n address,\n chainId,\n publicKey,\n messenger,\n ethQuery,\n );\n\n const upgradeContractAddress = getEIP7702UpgradeContractAddress(\n chainId,\n messenger,\n publicKey,\n );\n\n return {\n chainId,\n delegationAddress,\n isSupported,\n upgradeContractAddress,\n };\n } catch (error) {\n log('Error checking atomic batch support', chainId, error);\n return undefined;\n }\n }),\n );\n\n const results = resultsRaw.filter(\n (result): result is IsAtomicBatchSupportedResultEntry => Boolean(result),\n );\n\n log('Atomic batch supported results', results);\n\n return results;\n}\n\n/**\n * Generate a transaction batch ID.\n *\n * @returns A unique batch ID as a hexadecimal string.\n */\nfunction generateBatchId(): Hex {\n const idString = v4();\n const idBytes = new Uint8Array(parse(idString));\n return bytesToHex(idBytes);\n}\n\n/**\n * Generate the metadata for a nested transaction.\n *\n * @param request - The batch request.\n * @param singleRequest - The request for a single transaction.\n * @param ethQuery - The EthQuery instance used to interact with the Ethereum blockchain.\n * @returns The metadata for the nested transaction.\n */\nasync function getNestedTransactionMeta(\n request: TransactionBatchRequest,\n singleRequest: TransactionBatchSingleRequest,\n ethQuery: EthQuery,\n): Promise<NestedTransactionMetadata> {\n const { from } = request;\n const { params } = singleRequest;\n\n const { type } = await determineTransactionType(\n { from, ...params },\n ethQuery,\n );\n\n return {\n ...params,\n type,\n };\n}\n\n/**\n * Process a batch transaction using an EIP-7702 transaction.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nasync function addTransactionBatchWith7702(\n request: AddTransactionBatchRequest,\n) {\n const {\n addTransaction,\n getChainId,\n messenger,\n publicKeyEIP7702,\n request: userRequest,\n } = request;\n\n const {\n batchId: batchIdOverride,\n from,\n networkClientId,\n origin,\n requireApproval,\n securityAlertId,\n transactions,\n validateSecurity,\n } = userRequest;\n\n const chainId = getChainId(networkClientId);\n const ethQuery = request.getEthQuery(networkClientId);\n const isChainSupported = doesChainSupportEIP7702(chainId, messenger);\n\n if (!isChainSupported) {\n log('Chain does not support EIP-7702', chainId);\n throw rpcErrors.internal('Chain does not support EIP-7702');\n }\n\n if (!publicKeyEIP7702) {\n throw rpcErrors.internal(ERROR_MESSGE_PUBLIC_KEY);\n }\n\n const { delegationAddress, isSupported } = await isAccountUpgradedToEIP7702(\n from,\n chainId,\n publicKeyEIP7702,\n messenger,\n ethQuery,\n );\n\n log('Account', { delegationAddress, isSupported });\n\n if (!isSupported && delegationAddress) {\n log('Account upgraded to unsupported contract', from, delegationAddress);\n throw rpcErrors.internal('Account upgraded to unsupported contract');\n }\n\n const nestedTransactions = await Promise.all(\n transactions.map((tx) =>\n getNestedTransactionMeta(userRequest, tx, ethQuery),\n ),\n );\n\n const batchParams = generateEIP7702BatchTransaction(from, nestedTransactions);\n\n const txParams: TransactionParams = {\n from,\n ...batchParams,\n };\n\n if (!isSupported) {\n const upgradeContractAddress = getEIP7702UpgradeContractAddress(\n chainId,\n messenger,\n publicKeyEIP7702,\n );\n\n if (!upgradeContractAddress) {\n throw rpcErrors.internal(ERROR_MESSAGE_NO_UPGRADE_CONTRACT);\n }\n\n txParams.type = TransactionEnvelopeType.setCode;\n txParams.authorizationList = [{ address: upgradeContractAddress }];\n }\n\n if (validateSecurity) {\n const securityRequest: ValidateSecurityRequest = {\n method: 'eth_sendTransaction',\n params: [\n {\n ...txParams,\n authorizationList: undefined,\n type: TransactionEnvelopeType.feeMarket,\n },\n ],\n delegationMock: txParams.authorizationList?.[0]?.address,\n };\n\n log('Security request', securityRequest);\n\n validateSecurity(securityRequest, chainId).catch((error) => {\n log('Security validation failed', error);\n });\n }\n\n log('Adding batch transaction', txParams, networkClientId);\n\n const batchId = batchIdOverride ?? generateBatchId();\n\n const securityAlertResponse = securityAlertId\n ? ({ securityAlertId } as SecurityAlertResponse)\n : undefined;\n\n const { result } = await addTransaction(txParams, {\n batchId,\n nestedTransactions,\n networkClientId,\n origin,\n requireApproval,\n securityAlertResponse,\n type: TransactionType.batch,\n });\n\n // Wait for the transaction to be published.\n await result;\n\n return {\n batchId,\n };\n}\n\n/**\n * Process a batch transaction using a publish batch hook.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nasync function addTransactionBatchWithHook(\n request: AddTransactionBatchRequest,\n): Promise<TransactionBatchResult> {\n const {\n getChainId,\n messenger,\n publishBatchHook: requestPublishBatchHook,\n request: userRequest,\n update,\n } = request;\n\n const {\n from,\n networkClientId,\n origin,\n requireApproval,\n transactions: nestedTransactions,\n useHook,\n } = userRequest;\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n log('Adding transaction batch using hook', userRequest);\n\n const sequentialPublishBatchHook = new SequentialPublishBatchHook({\n publishTransaction: request.publishTransaction,\n getTransaction: request.getTransaction,\n getEthQuery: request.getEthQuery,\n getPendingTransactionTracker: request.getPendingTransactionTracker,\n });\n\n const publishBatchHook =\n requestPublishBatchHook ?? sequentialPublishBatchHook.getHook();\n\n const chainId = getChainId(networkClientId);\n const batchId = generateBatchId();\n const transactionCount = nestedTransactions.length;\n const collectHook = new CollectPublishHook(transactionCount);\n try {\n if (requireApproval && useHook) {\n const txBatchMeta = newBatchMetadata({\n id: batchId,\n chainId,\n networkClientId,\n transactions: nestedTransactions,\n origin,\n });\n\n addBatchMetadata(txBatchMeta, update);\n\n resultCallbacks = (await requestApproval(txBatchMeta, messenger))\n .resultCallbacks;\n }\n\n const publishHook = collectHook.getHook();\n const hookTransactions: Omit<PublishBatchHookTransaction, 'signedTx'>[] =\n [];\n\n for (const nestedTransaction of nestedTransactions) {\n const hookTransaction = await processTransactionWithHook(\n batchId,\n nestedTransaction,\n publishHook,\n request,\n );\n\n hookTransactions.push(hookTransaction);\n }\n\n const { signedTransactions } = await collectHook.ready();\n\n const transactions = hookTransactions.map((transaction, index) => ({\n ...transaction,\n signedTx: signedTransactions[index],\n }));\n\n log('Calling publish batch hook', { from, networkClientId, transactions });\n\n const result = await publishBatchHook({\n from,\n networkClientId,\n transactions,\n });\n\n log('Publish batch hook result', result);\n\n if (!result) {\n throw new Error('Publish batch hook did not return a result');\n }\n\n const transactionHashes = result.results.map(\n ({ transactionHash }) => transactionHash,\n );\n\n collectHook.success(transactionHashes);\n resultCallbacks?.success();\n\n log('Completed batch transaction with hook', transactionHashes);\n\n return {\n batchId,\n };\n } catch (error) {\n log('Publish batch hook failed', error);\n\n collectHook.error(error);\n resultCallbacks?.error(error as Error);\n\n throw error;\n } finally {\n log('Cleaning up publish batch hook', batchId);\n wipeTransactionBatchById(update, batchId);\n }\n}\n\n/**\n * Process a single transaction with a publish batch hook.\n *\n * @param batchId - ID of the transaction batch.\n * @param nestedTransaction - The nested transaction request.\n * @param publishHook - The publish hook to use for each transaction.\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The single transaction request to be processed by the publish batch hook.\n */\nasync function processTransactionWithHook(\n batchId: Hex,\n nestedTransaction: TransactionBatchSingleRequest,\n publishHook: PublishHook,\n request: AddTransactionBatchRequest,\n) {\n const { existingTransaction, params } = nestedTransaction;\n\n const {\n addTransaction,\n getTransaction,\n request: userRequest,\n updateTransaction,\n } = request;\n\n const { from, networkClientId } = userRequest;\n\n if (existingTransaction) {\n const { id, onPublish, signedTransaction } = existingTransaction;\n const transactionMeta = getTransaction(id);\n\n updateTransaction({ transactionId: id }, (_transactionMeta) => {\n _transactionMeta.batchId = batchId;\n });\n\n publishHook(transactionMeta, signedTransaction)\n .then(onPublish)\n .catch(() => {\n // Intentionally empty\n });\n\n log('Processed existing transaction with hook', {\n id,\n params,\n });\n\n return {\n id,\n params,\n };\n }\n\n const { transactionMeta } = await addTransaction(\n {\n ...params,\n from,\n },\n {\n batchId,\n disableGasBuffer: true,\n networkClientId,\n publishHook,\n requireApproval: false,\n },\n );\n\n const { id, txParams } = transactionMeta;\n const data = txParams.data as Hex | undefined;\n const gas = txParams.gas as Hex | undefined;\n const maxFeePerGas = txParams.maxFeePerGas as Hex | undefined;\n const maxPriorityFeePerGas = txParams.maxPriorityFeePerGas as Hex | undefined;\n const to = txParams.to as Hex | undefined;\n const value = txParams.value as Hex | undefined;\n\n const newParams: BatchTransactionParams = {\n data,\n gas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n log('Processed new transaction with hook', { id, params: newParams });\n\n return {\n id,\n params: newParams,\n };\n}\n\n/**\n * Requests approval for a transaction batch by interacting with the ApprovalController.\n *\n * @param txBatchMeta - Metadata for the transaction batch, including its ID and origin.\n * @param messenger - The messenger instance used to communicate with the ApprovalController.\n * @returns A promise that resolves to the result of adding the approval request.\n */\nasync function requestApproval(\n txBatchMeta: TransactionBatchMeta,\n messenger: TransactionControllerMessenger,\n): Promise<AddResult> {\n const id = String(txBatchMeta.id);\n const { origin } = txBatchMeta;\n const type = 'transaction_batch';\n const requestData = { txBatchId: id };\n\n return (await messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin: origin || ORIGIN_METAMASK,\n requestData,\n expectsResult: true,\n type,\n },\n true,\n )) as Promise<AddResult>;\n}\n\n/**\n * Create a new batch metadata object.\n *\n * @param options - The options for creating a new batch metadata object.\n * @param options.id - The ID of the transaction batch.\n * @param options.chainId - The chain ID of the transaction batch.\n * @param options.networkClientId - The network client ID of the transaction batch.\n * @param options.transactions - The transactions in the batch.\n * @param options.origin - The origin of the transaction batch.\n * @returns A new TransactionBatchMeta object.\n */\nfunction newBatchMetadata({\n id,\n chainId,\n networkClientId,\n transactions,\n origin,\n}: TransactionBatchMeta): TransactionBatchMeta {\n return {\n id,\n chainId,\n networkClientId,\n transactions,\n origin,\n };\n}\n\n/**\n * Adds batch metadata to the transaction controller state.\n *\n * @param transactionBatchMeta - The transaction batch metadata to be added.\n * @param update - The update function to modify the transaction controller state.\n */\nfunction addBatchMetadata(\n transactionBatchMeta: TransactionBatchMeta,\n update: UpdateStateCallback,\n) {\n update((state) => {\n state.transactionBatches = [\n ...state.transactionBatches,\n transactionBatchMeta,\n ];\n });\n}\n\n/**\n * Wipes a specific transaction batch from the transaction controller state by its ID.\n *\n * @param update - The update function to modify the transaction controller state.\n * @param id - The ID of the transaction batch to be wiped.\n */\nfunction wipeTransactionBatchById(\n update: UpdateStateCallback,\n id: string,\n): void {\n update((state) => {\n state.transactionBatches = state.transactionBatches.filter(\n (batch) => batch.id !== id,\n );\n });\n}\n"]}
1
+ {"version":3,"file":"batch.mjs","sourceRoot":"","sources":["../../src/utils/batch.ts"],"names":[],"mappings":"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","sourcesContent":["import type EthQuery from '@metamask/eth-query';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Hex } from '@metamask/utils';\nimport { bytesToHex, createModuleLogger } from '@metamask/utils';\nimport { parse, v4 } from 'uuid';\n\nimport {\n ERROR_MESSGE_PUBLIC_KEY,\n doesChainSupportEIP7702,\n generateEIP7702BatchTransaction,\n isAccountUpgradedToEIP7702,\n} from './eip7702';\nimport {\n getBatchSizeLimit,\n getEIP7702SupportedChains,\n getEIP7702UpgradeContractAddress,\n} from './feature-flags';\nimport { validateBatchRequest } from './validation';\nimport {\n determineTransactionType,\n type BatchTransactionParams,\n type TransactionController,\n type TransactionControllerMessenger,\n type TransactionMeta,\n} from '..';\nimport type { PendingTransactionTracker } from '../helpers/PendingTransactionTracker';\nimport { CollectPublishHook } from '../hooks/CollectPublishHook';\nimport { SequentialPublishBatchHook } from '../hooks/SequentialPublishBatchHook';\nimport { projectLogger } from '../logger';\nimport type {\n NestedTransactionMetadata,\n SecurityAlertResponse,\n TransactionBatchSingleRequest,\n PublishBatchHook,\n PublishBatchHookTransaction,\n PublishHook,\n TransactionBatchRequest,\n ValidateSecurityRequest,\n IsAtomicBatchSupportedResult,\n IsAtomicBatchSupportedResultEntry,\n} from '../types';\nimport {\n TransactionEnvelopeType,\n type TransactionBatchResult,\n type TransactionParams,\n TransactionType,\n} from '../types';\n\ntype AddTransactionBatchRequest = {\n addTransaction: TransactionController['addTransaction'];\n getChainId: (networkClientId: string) => Hex;\n getEthQuery: (networkClientId: string) => EthQuery;\n getInternalAccounts: () => Hex[];\n getTransaction: (id: string) => TransactionMeta;\n messenger: TransactionControllerMessenger;\n publishBatchHook?: PublishBatchHook;\n publicKeyEIP7702?: Hex;\n request: TransactionBatchRequest;\n updateTransaction: (\n options: { transactionId: string },\n callback: (transactionMeta: TransactionMeta) => void,\n ) => void;\n publishTransaction: (\n _ethQuery: EthQuery,\n transactionMeta: TransactionMeta,\n ) => Promise<Hex>;\n getPendingTransactionTracker: (\n networkClientId: string,\n ) => PendingTransactionTracker;\n};\n\ntype IsAtomicBatchSupportedRequestInternal = {\n address: Hex;\n chainIds?: Hex[];\n getEthQuery: (chainId: Hex) => EthQuery;\n messenger: TransactionControllerMessenger;\n publicKeyEIP7702?: Hex;\n};\n\nconst log = createModuleLogger(projectLogger, 'batch');\n\nexport const ERROR_MESSAGE_NO_UPGRADE_CONTRACT =\n 'Upgrade contract address not found';\n\n/**\n * Add a batch transaction.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nexport async function addTransactionBatch(\n request: AddTransactionBatchRequest,\n): Promise<TransactionBatchResult> {\n const { getInternalAccounts, messenger, request: userRequest } = request;\n const sizeLimit = getBatchSizeLimit(messenger);\n\n validateBatchRequest({\n internalAccounts: getInternalAccounts(),\n request: userRequest,\n sizeLimit,\n });\n\n const { useHook } = userRequest;\n\n log('Adding', userRequest);\n\n if (useHook) {\n return await addTransactionBatchWithHook(request);\n }\n\n return await addTransactionBatchWith7702(request);\n}\n\n/**\n * Determine which chains support atomic batch transactions for the given account.\n *\n * @param request - The request object including the account address and necessary callbacks.\n * @returns The chain IDs that support atomic batch transactions.\n */\nexport async function isAtomicBatchSupported(\n request: IsAtomicBatchSupportedRequestInternal,\n): Promise<IsAtomicBatchSupportedResult> {\n const {\n address,\n chainIds,\n getEthQuery,\n messenger,\n publicKeyEIP7702: publicKey,\n } = request;\n\n if (!publicKey) {\n throw rpcErrors.internal(ERROR_MESSGE_PUBLIC_KEY);\n }\n\n const chainIds7702 = getEIP7702SupportedChains(messenger);\n\n const filteredChainIds = chainIds7702.filter(\n (chainId) => !chainIds || chainIds.includes(chainId),\n );\n\n const resultsRaw: (IsAtomicBatchSupportedResultEntry | undefined)[] =\n await Promise.all(\n filteredChainIds.map(async (chainId) => {\n try {\n const ethQuery = getEthQuery(chainId);\n\n const { isSupported, delegationAddress } =\n await isAccountUpgradedToEIP7702(\n address,\n chainId,\n publicKey,\n messenger,\n ethQuery,\n );\n\n const upgradeContractAddress = getEIP7702UpgradeContractAddress(\n chainId,\n messenger,\n publicKey,\n );\n\n return {\n chainId,\n delegationAddress,\n isSupported,\n upgradeContractAddress,\n };\n } catch (error) {\n log('Error checking atomic batch support', chainId, error);\n return undefined;\n }\n }),\n );\n\n const results = resultsRaw.filter(\n (result): result is IsAtomicBatchSupportedResultEntry => Boolean(result),\n );\n\n log('Atomic batch supported results', results);\n\n return results;\n}\n\n/**\n * Generate a transaction batch ID.\n *\n * @returns A unique batch ID as a hexadecimal string.\n */\nfunction generateBatchId(): Hex {\n const idString = v4();\n const idBytes = new Uint8Array(parse(idString));\n return bytesToHex(idBytes);\n}\n\n/**\n * Generate the metadata for a nested transaction.\n *\n * @param request - The batch request.\n * @param singleRequest - The request for a single transaction.\n * @param ethQuery - The EthQuery instance used to interact with the Ethereum blockchain.\n * @returns The metadata for the nested transaction.\n */\nasync function getNestedTransactionMeta(\n request: TransactionBatchRequest,\n singleRequest: TransactionBatchSingleRequest,\n ethQuery: EthQuery,\n): Promise<NestedTransactionMetadata> {\n const { from } = request;\n const { params } = singleRequest;\n\n const { type } = await determineTransactionType(\n { from, ...params },\n ethQuery,\n );\n\n return {\n ...params,\n type,\n };\n}\n\n/**\n * Process a batch transaction using an EIP-7702 transaction.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nasync function addTransactionBatchWith7702(\n request: AddTransactionBatchRequest,\n) {\n const {\n addTransaction,\n getChainId,\n messenger,\n publicKeyEIP7702,\n request: userRequest,\n } = request;\n\n const {\n batchId: batchIdOverride,\n from,\n networkClientId,\n origin,\n requireApproval,\n securityAlertId,\n transactions,\n validateSecurity,\n } = userRequest;\n\n const chainId = getChainId(networkClientId);\n const ethQuery = request.getEthQuery(networkClientId);\n const isChainSupported = doesChainSupportEIP7702(chainId, messenger);\n\n if (!isChainSupported) {\n log('Chain does not support EIP-7702', chainId);\n throw rpcErrors.internal('Chain does not support EIP-7702');\n }\n\n if (!publicKeyEIP7702) {\n throw rpcErrors.internal(ERROR_MESSGE_PUBLIC_KEY);\n }\n\n const { delegationAddress, isSupported } = await isAccountUpgradedToEIP7702(\n from,\n chainId,\n publicKeyEIP7702,\n messenger,\n ethQuery,\n );\n\n log('Account', { delegationAddress, isSupported });\n\n if (!isSupported && delegationAddress) {\n log('Account upgraded to unsupported contract', from, delegationAddress);\n throw rpcErrors.internal('Account upgraded to unsupported contract');\n }\n\n const nestedTransactions = await Promise.all(\n transactions.map((tx) =>\n getNestedTransactionMeta(userRequest, tx, ethQuery),\n ),\n );\n\n const batchParams = generateEIP7702BatchTransaction(from, nestedTransactions);\n\n const txParams: TransactionParams = {\n from,\n ...batchParams,\n };\n\n if (!isSupported) {\n const upgradeContractAddress = getEIP7702UpgradeContractAddress(\n chainId,\n messenger,\n publicKeyEIP7702,\n );\n\n if (!upgradeContractAddress) {\n throw rpcErrors.internal(ERROR_MESSAGE_NO_UPGRADE_CONTRACT);\n }\n\n txParams.type = TransactionEnvelopeType.setCode;\n txParams.authorizationList = [{ address: upgradeContractAddress }];\n }\n\n if (validateSecurity) {\n const securityRequest: ValidateSecurityRequest = {\n method: 'eth_sendTransaction',\n params: [\n {\n ...txParams,\n authorizationList: undefined,\n type: TransactionEnvelopeType.feeMarket,\n },\n ],\n delegationMock: txParams.authorizationList?.[0]?.address,\n };\n\n log('Security request', securityRequest);\n\n /* istanbul ignore next */\n validateSecurity(securityRequest, chainId).catch((error) => {\n /* istanbul ignore next */\n log('Security validation failed', error);\n });\n }\n\n log('Adding batch transaction', txParams, networkClientId);\n\n const batchId = batchIdOverride ?? generateBatchId();\n\n const securityAlertResponse = securityAlertId\n ? ({ securityAlertId } as SecurityAlertResponse)\n : undefined;\n\n const { result } = await addTransaction(txParams, {\n batchId,\n nestedTransactions,\n networkClientId,\n origin,\n requireApproval,\n securityAlertResponse,\n type: TransactionType.batch,\n });\n\n // Wait for the transaction to be published.\n await result;\n\n return {\n batchId,\n };\n}\n\n/**\n * Process a batch transaction using a publish batch hook.\n *\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The batch result object including the batch ID.\n */\nasync function addTransactionBatchWithHook(\n request: AddTransactionBatchRequest,\n): Promise<TransactionBatchResult> {\n const { publishBatchHook: requestPublishBatchHook, request: userRequest } =\n request;\n\n const {\n from,\n networkClientId,\n transactions: nestedTransactions,\n } = userRequest;\n\n log('Adding transaction batch using hook', userRequest);\n\n const sequentialPublishBatchHook = new SequentialPublishBatchHook({\n publishTransaction: request.publishTransaction,\n getTransaction: request.getTransaction,\n getEthQuery: request.getEthQuery,\n getPendingTransactionTracker: request.getPendingTransactionTracker,\n });\n\n const publishBatchHook =\n requestPublishBatchHook ?? sequentialPublishBatchHook.getHook();\n\n const batchId = generateBatchId();\n const transactionCount = nestedTransactions.length;\n const collectHook = new CollectPublishHook(transactionCount);\n const publishHook = collectHook.getHook();\n const hookTransactions: Omit<PublishBatchHookTransaction, 'signedTx'>[] = [];\n\n try {\n for (const nestedTransaction of nestedTransactions) {\n const hookTransaction = await processTransactionWithHook(\n batchId,\n nestedTransaction,\n publishHook,\n request,\n );\n\n hookTransactions.push(hookTransaction);\n }\n\n const { signedTransactions } = await collectHook.ready();\n\n const transactions = hookTransactions.map((transaction, index) => ({\n ...transaction,\n signedTx: signedTransactions[index],\n }));\n\n log('Calling publish batch hook', { from, networkClientId, transactions });\n\n const result = await publishBatchHook({\n from,\n networkClientId,\n transactions,\n });\n\n log('Publish batch hook result', result);\n\n if (!result) {\n throw new Error('Publish batch hook did not return a result');\n }\n\n const transactionHashes = result.results.map(\n ({ transactionHash }) => transactionHash,\n );\n\n collectHook.success(transactionHashes);\n\n log('Completed batch transaction with hook', transactionHashes);\n\n return {\n batchId,\n };\n } catch (error) {\n log('Publish batch hook failed', error);\n\n collectHook.error(error);\n\n throw error;\n }\n}\n\n/**\n * Process a single transaction with a publish batch hook.\n *\n * @param batchId - ID of the transaction batch.\n * @param nestedTransaction - The nested transaction request.\n * @param publishHook - The publish hook to use for each transaction.\n * @param request - The request object including the user request and necessary callbacks.\n * @returns The single transaction request to be processed by the publish batch hook.\n */\nasync function processTransactionWithHook(\n batchId: Hex,\n nestedTransaction: TransactionBatchSingleRequest,\n publishHook: PublishHook,\n request: AddTransactionBatchRequest,\n) {\n const { existingTransaction, params } = nestedTransaction;\n\n const {\n addTransaction,\n getTransaction,\n request: userRequest,\n updateTransaction,\n } = request;\n\n const { from, networkClientId } = userRequest;\n\n if (existingTransaction) {\n const { id, onPublish, signedTransaction } = existingTransaction;\n const transactionMeta = getTransaction(id);\n\n updateTransaction({ transactionId: id }, (_transactionMeta) => {\n _transactionMeta.batchId = batchId;\n });\n\n publishHook(transactionMeta, signedTransaction)\n .then(onPublish)\n .catch(() => {\n // Intentionally empty\n });\n\n log('Processed existing transaction with hook', {\n id,\n params,\n });\n\n return {\n id,\n params,\n };\n }\n\n const { transactionMeta } = await addTransaction(\n {\n ...params,\n from,\n },\n {\n batchId,\n disableGasBuffer: true,\n networkClientId,\n publishHook,\n requireApproval: false,\n },\n );\n\n const { id, txParams } = transactionMeta;\n const data = txParams.data as Hex | undefined;\n const gas = txParams.gas as Hex | undefined;\n const maxFeePerGas = txParams.maxFeePerGas as Hex | undefined;\n const maxPriorityFeePerGas = txParams.maxPriorityFeePerGas as Hex | undefined;\n const to = txParams.to as Hex | undefined;\n const value = txParams.value as Hex | undefined;\n\n const newParams: BatchTransactionParams = {\n data,\n gas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n log('Processed new transaction with hook', { id, params: newParams });\n\n return {\n id,\n params: newParams,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/transaction-controller",
3
- "version": "56.2.0-preview-6aac6e71",
3
+ "version": "56.2.0-preview-e96d94ef",
4
4
  "description": "Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation",
5
5
  "keywords": [
6
6
  "MetaMask",