@metamask-previews/user-operation-controller 41.0.3-preview-ab77ad36e → 41.0.3-preview-87d1261

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 CHANGED
@@ -7,15 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Added
11
-
12
- - Expose missing public `UserOperationController` methods through its messenger (([#8183](https://github.com/MetaMask/core/pull/8183))
13
- - The following actions are now available:
14
- - `UserOperationController:addUserOperation`
15
- - `UserOperationController:addUserOperationFromTransaction`
16
- - `UserOperationController:startPollingByNetworkClientId`
17
- - Corresponding action types (e.g. `UserOperationControllerAddUserOperationAction`) are available as well.
18
-
19
10
  ### Changed
20
11
 
21
12
  - Bump `@metamask/transaction-controller` from `^62.17.1` to `^62.21.0` ([#8005](https://github.com/MetaMask/core/pull/8005), [#8031](https://github.com/MetaMask/core/pull/8031), [#8104](https://github.com/MetaMask/core/pull/8104), [#8140](https://github.com/MetaMask/core/pull/8140))
@@ -38,11 +38,6 @@ const gas_fees_1 = require("./utils/gas-fees.cjs");
38
38
  const transaction_1 = require("./utils/transaction.cjs");
39
39
  const validation_1 = require("./utils/validation.cjs");
40
40
  const controllerName = 'UserOperationController';
41
- const MESSENGER_EXPOSED_METHODS = [
42
- 'addUserOperation',
43
- 'addUserOperationFromTransaction',
44
- 'startPollingByNetworkClientId',
45
- ];
46
41
  const stateMetadata = {
47
42
  userOperations: {
48
43
  includeInStateLogs: true,
@@ -79,7 +74,6 @@ class UserOperationController extends base_controller_1.BaseController {
79
74
  _UserOperationController_getGasFeeEstimates.set(this, void 0);
80
75
  _UserOperationController_pendingUserOperationTracker.set(this, void 0);
81
76
  this.hub = new events_1.default();
82
- this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
83
77
  __classPrivateFieldSet(this, _UserOperationController_entrypoint, entrypoint, "f");
84
78
  __classPrivateFieldSet(this, _UserOperationController_getGasFeeEstimates, getGasFeeEstimates, "f");
85
79
  __classPrivateFieldSet(this, _UserOperationController_pendingUserOperationTracker, new PendingUserOperationTracker_1.PendingUserOperationTracker({
@@ -136,12 +130,6 @@ class UserOperationController extends base_controller_1.BaseController {
136
130
  (0, validation_1.validateAddUserOperationRequest)(request);
137
131
  return await __classPrivateFieldGet(this, _UserOperationController_instances, "m", _UserOperationController_addUserOperation).call(this, request, { ...options, transaction });
138
132
  }
139
- /**
140
- * Starts polling for pending user operations on the given network.
141
- *
142
- * @param networkClientId - The ID of the network client to poll.
143
- * @returns The polling token that can be used to stop polling.
144
- */
145
133
  startPollingByNetworkClientId(networkClientId) {
146
134
  return __classPrivateFieldGet(this, _UserOperationController_pendingUserOperationTracker, "f").startPolling({
147
135
  networkClientId,
@@ -1 +1 @@
1
- {"version":3,"file":"UserOperationController.cjs","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AcceptResultCallbacks,\n ApprovalControllerAddRequestAction,\n AddResult,\n} from '@metamask/approval-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { ApprovalType } from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerPrepareUserOperationAction,\n KeyringControllerPatchUserOperationAction,\n KeyringControllerSignUserOperationAction,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n Provider,\n} from '@metamask/network-controller';\nimport { errorCodes } from '@metamask/rpc-errors';\nimport { determineTransactionType } from '@metamask/transaction-controller';\nimport type {\n TransactionMeta,\n TransactionParams,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport { add0x } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';\nimport { Bundler } from './helpers/Bundler';\nimport { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker';\nimport { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';\nimport { projectLogger as log } from './logger';\nimport type {\n SmartContractAccount,\n UserOperation,\n UserOperationMetadata,\n} from './types';\nimport { UserOperationStatus } from './types';\nimport type { UserOperationControllerMethodActions } from './UserOperationController-method-action-types';\nimport { updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getTransactionMetadata } from './utils/transaction';\nimport {\n validateAddUserOperationOptions,\n validateAddUserOperationRequest,\n validatePrepareUserOperationResponse,\n validateSignUserOperationResponse,\n validateUpdateUserOperationResponse,\n} from './utils/validation';\n\nconst controllerName = 'UserOperationController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'addUserOperation',\n 'addUserOperationFromTransaction',\n 'startPollingByNetworkClientId',\n] as const;\n\nconst stateMetadata = {\n userOperations: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n userOperations: {},\n});\n\ntype Events = {\n 'transaction-updated': [metadata: TransactionMeta];\n 'user-operation-added': [metadata: UserOperationMetadata];\n 'user-operation-confirmed': [metadata: UserOperationMetadata];\n 'user-operation-failed': [metadata: UserOperationMetadata, error: Error];\n [key: `${string}:confirmed`]: [metadata: UserOperationMetadata];\n [key: `${string}:failed`]: [metadata: UserOperationMetadata, error: Error];\n};\n\nexport type UserOperationControllerEventEmitter = EventEmitter & {\n on<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n once<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n emit<T extends keyof Events>(eventName: T, ...args: Events[T]): boolean;\n};\n\nexport type UserOperationControllerState = {\n userOperations: Record<string, UserOperationMetadata>;\n};\n\nexport type GetUserOperationState = ControllerGetStateAction<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationControllerActions =\n | GetUserOperationState\n | UserOperationControllerMethodActions\n | NetworkControllerGetNetworkClientByIdAction\n | ApprovalControllerAddRequestAction\n | KeyringControllerPrepareUserOperationAction\n | KeyringControllerPatchUserOperationAction\n | KeyringControllerSignUserOperationAction;\n\nexport type UserOperationControllerEvents = UserOperationStateChange;\n\nexport type UserOperationControllerMessenger = Messenger<\n typeof controllerName,\n UserOperationControllerActions,\n UserOperationControllerEvents\n>;\n\nexport type UserOperationControllerOptions = {\n entrypoint: string;\n getGasFeeEstimates: () => Promise<GasFeeState>;\n interval?: number;\n messenger: UserOperationControllerMessenger;\n state?: Partial<UserOperationControllerState>;\n};\n\nexport type AddUserOperationRequest = {\n data?: string;\n from: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n to?: string;\n value?: string;\n};\n\nexport type AddUserOperationSwapOptions = {\n approvalTxId?: string;\n destinationTokenAddress?: string;\n destinationTokenAmount?: string;\n destinationTokenDecimals?: number;\n destinationTokenSymbol?: string;\n estimatedBaseFee?: string;\n sourceTokenAddress?: string;\n sourceTokenAmount?: string;\n sourceTokenDecimals?: number;\n sourceTokenSymbol?: string;\n swapAndSendRecipient?: string;\n swapMetaData?: Record<string, unknown>;\n swapTokenValue?: string;\n};\n\nexport type AddUserOperationOptions = {\n networkClientId: string;\n origin: string;\n requireApproval?: boolean;\n smartContractAccount?: SmartContractAccount;\n swaps?: AddUserOperationSwapOptions;\n type?: TransactionType;\n};\n\nexport type AddUserOperationResponse = {\n id: string;\n hash: () => Promise<string | undefined>;\n transactionHash: () => Promise<string | undefined>;\n};\n\n/**\n * All the objects related to a pending user operation in order to:\n * - Avoid duplicated effort to derive the same properties.\n * - Minimise duplicate arguments in private methods.\n */\ntype UserOperationCache = {\n chainId: string;\n metadata: UserOperationMetadata;\n options: AddUserOperationOptions & {\n smartContractAccount: SmartContractAccount;\n };\n provider: Provider;\n request: AddUserOperationRequest;\n transaction?: TransactionParams;\n};\n\n/**\n * Controller for creating and managing the life cycle of user operations.\n */\nexport class UserOperationController extends BaseController<\n typeof controllerName,\n UserOperationControllerState,\n UserOperationControllerMessenger\n> {\n hub: UserOperationControllerEventEmitter;\n\n readonly #entrypoint: string;\n\n readonly #getGasFeeEstimates: () => Promise<GasFeeState>;\n\n readonly #pendingUserOperationTracker: PendingUserOperationTracker;\n\n /**\n * Construct a UserOperationController instance.\n *\n * @param options - Controller options.\n * @param options.entrypoint - Address of the entrypoint contract.\n * @param options.getGasFeeEstimates - Callback to get gas fee estimates.\n * @param options.messenger - Restricted messenger for the user operation controller.\n * @param options.state - Initial state to set on the controller.\n */\n constructor({\n entrypoint,\n getGasFeeEstimates,\n messenger,\n state,\n }: UserOperationControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.hub = new EventEmitter() as UserOperationControllerEventEmitter;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n this.#entrypoint = entrypoint;\n this.#getGasFeeEstimates = getGasFeeEstimates;\n\n this.#pendingUserOperationTracker = new PendingUserOperationTracker({\n getUserOperations: () =>\n cloneDeep(Object.values(this.state.userOperations)),\n messenger,\n });\n\n this.#addPendingUserOperationTrackerListeners();\n }\n\n /**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationRequest(request);\n validateAddUserOperationOptions(options);\n\n return await this.#addUserOperation(request, options);\n }\n\n /**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperationFromTransaction(\n transaction: TransactionParams,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationOptions(options);\n\n const { data, from, maxFeePerGas, maxPriorityFeePerGas, to, value } =\n transaction;\n\n const request: AddUserOperationRequest = {\n data: data === '' ? undefined : data,\n from,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n validateAddUserOperationRequest(request);\n\n return await this.#addUserOperation(request, { ...options, transaction });\n }\n\n /**\n * Starts polling for pending user operations on the given network.\n *\n * @param networkClientId - The ID of the network client to poll.\n * @returns The polling token that can be used to stop polling.\n */\n startPollingByNetworkClientId(networkClientId: string): string {\n return this.#pendingUserOperationTracker.startPolling({\n networkClientId,\n });\n }\n\n async #addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions & { transaction?: TransactionParams },\n ): Promise<AddUserOperationResponse> {\n log('Adding user operation', { request, options });\n\n const {\n networkClientId,\n origin,\n smartContractAccount: requestSmartContractAccount,\n swaps,\n transaction,\n } = options;\n\n const { chainId, provider } = await this.#getProvider(networkClientId);\n\n const metadata = await this.#createMetadata(\n chainId,\n origin,\n transaction,\n swaps,\n );\n\n const smartContractAccount =\n requestSmartContractAccount ??\n new SnapSmartContractAccount(this.messenger);\n\n const cache: UserOperationCache = {\n chainId,\n metadata,\n options: { ...options, smartContractAccount },\n provider,\n request,\n transaction,\n };\n\n const { id } = metadata;\n let throwError = false;\n\n const hashValue = (async () => {\n try {\n return await this.#prepareAndSubmitUserOperation(cache);\n } catch (error) {\n this.#failUserOperation(metadata, error);\n\n if (throwError) {\n throw error;\n }\n\n return undefined;\n }\n })();\n\n const hash = async () => {\n throwError = true;\n return await hashValue;\n };\n\n const transactionHash = async () => {\n await hash();\n\n const { transactionHash: finalTransactionHash } =\n await this.#waitForConfirmation(metadata);\n\n return finalTransactionHash as string;\n };\n\n return {\n id,\n hash,\n transactionHash,\n };\n }\n\n async #prepareAndSubmitUserOperation(cache: UserOperationCache) {\n const { metadata, options } = cache;\n const { requireApproval, smartContractAccount } = options;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n this.hub.emit('user-operation-added', metadata);\n\n if (requireApproval !== false) {\n resultCallbacks = await this.#approveUserOperation(cache);\n }\n\n await this.#signUserOperation(metadata, smartContractAccount);\n await this.#submitUserOperation(metadata);\n\n resultCallbacks?.success();\n\n return metadata.hash as string;\n } catch (error) {\n /* istanbul ignore next */\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n async #waitForConfirmation(\n metadata: UserOperationMetadata,\n ): Promise<UserOperationMetadata> {\n const { id, hash } = metadata;\n\n log('Waiting for confirmation', id, hash);\n\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:confirmed`, (finalMetadata) => {\n resolve(finalMetadata);\n });\n\n this.hub.once(`${id}:failed`, (_finalMetadata, error) => {\n reject(error);\n });\n });\n }\n\n async #createMetadata(\n chainId: string,\n origin: string,\n transaction?: TransactionParams,\n swaps?: AddUserOperationSwapOptions,\n ): Promise<UserOperationMetadata> {\n const metadata: UserOperationMetadata = {\n actualGasCost: null,\n actualGasUsed: null,\n baseFeePerGas: null,\n bundlerUrl: null,\n chainId,\n error: null,\n hash: null,\n id: random(),\n origin,\n status: UserOperationStatus.Unapproved,\n swapsMetadata: swaps\n ? {\n approvalTxId: swaps.approvalTxId ?? null,\n destinationTokenAddress: swaps.destinationTokenAddress ?? null,\n destinationTokenAmount: swaps.destinationTokenAmount ?? null,\n destinationTokenDecimals: swaps.destinationTokenDecimals ?? null,\n destinationTokenSymbol: swaps.destinationTokenSymbol ?? null,\n estimatedBaseFee: swaps.estimatedBaseFee ?? null,\n sourceTokenAddress: swaps.sourceTokenAddress ?? null,\n sourceTokenAmount: swaps.sourceTokenAmount ?? null,\n sourceTokenDecimals: swaps.sourceTokenDecimals ?? null,\n sourceTokenSymbol: swaps.sourceTokenSymbol ?? null,\n swapAndSendRecipient: swaps.swapAndSendRecipient ?? null,\n swapMetaData: (swaps.swapMetaData as Record<string, never>) ?? null,\n swapTokenValue: swaps.swapTokenValue ?? null,\n }\n : null,\n time: Date.now(),\n transactionHash: null,\n transactionParams: (transaction as Required<TransactionParams>) ?? null,\n transactionType: null,\n userFeeLevel: null,\n userOperation: this.#createEmptyUserOperation(transaction),\n };\n\n this.#updateMetadata(metadata);\n\n log('Added user operation', metadata.id);\n\n return metadata;\n }\n\n async #prepareUserOperation(cache: UserOperationCache) {\n const { chainId, metadata, options, provider, request, transaction } =\n cache;\n\n const { data, from, to, value } = request;\n const { id, transactionParams, userOperation } = metadata;\n const { smartContractAccount } = options;\n\n log('Preparing user operation', { id });\n\n const transactionType = await this.#getTransactionType(\n transaction,\n provider,\n options,\n );\n\n metadata.transactionType = transactionType ?? null;\n\n log('Determined transaction type', transactionType);\n\n await updateGasFees({\n getGasFeeEstimates: this.#getGasFeeEstimates,\n metadata,\n originalRequest: request,\n provider,\n transaction: transactionParams ?? undefined,\n });\n\n const response = await smartContractAccount.prepareUserOperation({\n chainId,\n data,\n from,\n to,\n value,\n });\n\n validatePrepareUserOperationResponse(response);\n\n const {\n bundler: bundlerUrl,\n callData,\n dummyPaymasterAndData,\n dummySignature,\n initCode,\n nonce,\n sender,\n } = response;\n\n userOperation.callData = callData;\n userOperation.initCode = initCode ?? EMPTY_BYTES;\n userOperation.nonce = nonce;\n userOperation.paymasterAndData = dummyPaymasterAndData ?? EMPTY_BYTES;\n userOperation.sender = sender;\n userOperation.signature = dummySignature ?? EMPTY_BYTES;\n\n metadata.bundlerUrl = bundlerUrl;\n\n await updateGas(metadata, response, this.#entrypoint);\n\n this.#updateMetadata(metadata);\n }\n\n async #addPaymasterData(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, userOperation, chainId } = metadata;\n\n log('Requesting paymaster data', { id });\n\n const response = await smartContractAccount.updateUserOperation({\n userOperation,\n chainId,\n });\n\n validateUpdateUserOperationResponse(response);\n\n userOperation.paymasterAndData = response.paymasterAndData ?? EMPTY_BYTES;\n if (response.callGasLimit) {\n userOperation.callGasLimit = response.callGasLimit;\n }\n if (response.preVerificationGas) {\n userOperation.preVerificationGas = response.preVerificationGas;\n }\n if (response.verificationGasLimit) {\n userOperation.verificationGasLimit = response.verificationGasLimit;\n }\n\n this.#updateMetadata(metadata);\n }\n\n async #approveUserOperation(cache: UserOperationCache) {\n log('Requesting approval');\n\n const { metadata } = cache;\n\n const { resultCallbacks, value } = await this.#requestApproval(metadata);\n const updatedTransaction = value?.txMeta;\n\n if (updatedTransaction) {\n await this.#updateUserOperationAfterApproval(cache, updatedTransaction);\n }\n\n metadata.status = UserOperationStatus.Approved;\n\n this.#updateMetadata(metadata);\n\n return resultCallbacks;\n }\n\n async #signUserOperation(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, chainId, userOperation } = metadata;\n\n log('Signing user operation', id, userOperation);\n\n const response = await smartContractAccount.signUserOperation({\n userOperation,\n chainId,\n });\n\n validateSignUserOperationResponse(response);\n\n const { signature } = response;\n\n userOperation.signature = signature;\n\n log('Signed user operation', signature);\n\n metadata.status = UserOperationStatus.Signed;\n\n this.#updateMetadata(metadata);\n }\n\n async #submitUserOperation(metadata: UserOperationMetadata) {\n const { userOperation } = metadata;\n\n log('Submitting user operation', userOperation);\n\n const bundler = new Bundler(metadata.bundlerUrl as string);\n\n const hash = await bundler.sendUserOperation(\n userOperation,\n this.#entrypoint,\n );\n\n metadata.hash = hash;\n metadata.status = UserOperationStatus.Submitted;\n\n this.#updateMetadata(metadata);\n }\n\n #failUserOperation(metadata: UserOperationMetadata, error: unknown) {\n const { id } = metadata;\n const rawError = error as Record<string, string>;\n\n log('User operation failed', id, error);\n\n metadata.error = {\n name: rawError.name,\n message: rawError.message,\n stack: rawError.stack,\n code: rawError.code,\n rpc: rawError.value,\n };\n\n metadata.status = UserOperationStatus.Failed;\n\n this.#updateMetadata(metadata);\n\n if (\n String(rawError.code) === String(errorCodes.provider.userRejectedRequest)\n ) {\n this.#deleteMetadata(id);\n }\n }\n\n #createEmptyUserOperation(transaction?: TransactionParams): UserOperation {\n return {\n callData: EMPTY_BYTES,\n callGasLimit: EMPTY_BYTES,\n initCode: EMPTY_BYTES,\n maxFeePerGas: transaction?.maxFeePerGas ?? EMPTY_BYTES,\n maxPriorityFeePerGas: transaction?.maxPriorityFeePerGas ?? EMPTY_BYTES,\n nonce: EMPTY_BYTES,\n paymasterAndData: EMPTY_BYTES,\n preVerificationGas: EMPTY_BYTES,\n sender: ADDRESS_ZERO,\n signature: EMPTY_BYTES,\n verificationGasLimit: EMPTY_BYTES,\n };\n }\n\n #updateMetadata(metadata: UserOperationMetadata) {\n const { id } = metadata;\n\n this.update((state) => {\n state.userOperations[id] = cloneDeep(metadata);\n });\n\n this.#updateTransaction(metadata);\n }\n\n #deleteMetadata(id: string) {\n this.update((state) => {\n delete state.userOperations[id];\n });\n }\n\n #updateTransaction(metadata: UserOperationMetadata) {\n if (!metadata.transactionParams) {\n return;\n }\n\n const transactionMetadata = getTransactionMetadata(metadata);\n\n this.hub.emit('transaction-updated', transactionMetadata);\n }\n\n #addPendingUserOperationTrackerListeners() {\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-confirmed',\n (metadata) => {\n log('In listener...');\n this.hub.emit('user-operation-confirmed', metadata);\n this.hub.emit(`${metadata.id}:confirmed`, metadata);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-failed',\n (metadata, error) => {\n this.hub.emit('user-operation-failed', metadata, error);\n this.hub.emit(`${metadata.id}:failed`, metadata, error);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-updated',\n (metadata) => {\n this.#updateMetadata(metadata);\n },\n );\n }\n\n async #requestApproval(metadata: UserOperationMetadata) {\n const { id, origin } = metadata;\n const type = ApprovalType.Transaction;\n const requestData = { txId: id };\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData,\n expectsResult: true,\n },\n true, // Should display approval request to user\n )) as AddResult & { value?: { txMeta?: TransactionMeta } };\n }\n\n async #getTransactionType(\n transaction: TransactionParams | undefined,\n provider: Provider,\n options: AddUserOperationOptions,\n ): Promise<TransactionType | undefined> {\n if (!transaction) {\n return undefined;\n }\n\n if (options.type) {\n return options.type;\n }\n\n const ethQuery = new EthQuery(provider);\n const result = determineTransactionType(transaction, ethQuery);\n\n return (await result).type;\n }\n\n async #getProvider(\n networkClientId: string,\n ): Promise<{ provider: Provider; chainId: string }> {\n const { provider, configuration } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n const { chainId } = configuration;\n\n return { provider, chainId };\n }\n\n async #updateUserOperationAfterApproval(\n cache: UserOperationCache,\n updatedTransaction: TransactionMeta,\n ) {\n log('Found updated transaction in approval', { updatedTransaction });\n\n const { metadata, request } = cache;\n\n const { userOperation } = metadata;\n const usingPaymaster = userOperation.paymasterAndData !== EMPTY_BYTES;\n\n const updatedMaxFeePerGas = add0x(\n updatedTransaction.txParams.maxFeePerGas as string,\n );\n\n const updatedMaxPriorityFeePerGas = add0x(\n updatedTransaction.txParams.maxPriorityFeePerGas as string,\n );\n\n let regenerateUserOperation = false;\n const previousMaxFeePerGas = userOperation.maxFeePerGas;\n const previousMaxPriorityFeePerGas = userOperation.maxPriorityFeePerGas;\n\n const gasFeesUpdated =\n previousMaxFeePerGas !== updatedMaxFeePerGas ||\n previousMaxPriorityFeePerGas !== updatedMaxPriorityFeePerGas;\n\n /**\n * true when we detect {@link getTransactionMetadata} has set the gas fees to zero\n * because the userOperation has a paymaster. This should not be mistaken for gas\n * fees being updated during the approval process.\n */\n const areGasFeesZeroBecauseOfPaymaster =\n usingPaymaster &&\n updatedMaxFeePerGas === VALUE_ZERO &&\n updatedMaxPriorityFeePerGas === VALUE_ZERO;\n\n if (gasFeesUpdated && !areGasFeesZeroBecauseOfPaymaster) {\n log('Gas fees updated during approval', {\n previousMaxFeePerGas,\n previousMaxPriorityFeePerGas,\n updatedMaxFeePerGas,\n updatedMaxPriorityFeePerGas,\n });\n\n userOperation.maxFeePerGas = updatedMaxFeePerGas;\n userOperation.maxPriorityFeePerGas = updatedMaxPriorityFeePerGas;\n\n regenerateUserOperation = usingPaymaster;\n }\n\n const previousData = request.data ?? EMPTY_BYTES;\n const updatedData = updatedTransaction.txParams.data ?? EMPTY_BYTES;\n\n if (previousData !== updatedData) {\n log('Data updated during approval', { previousData, updatedData });\n regenerateUserOperation = true;\n }\n\n const previousValue = request.value ?? VALUE_ZERO;\n const updatedValue = updatedTransaction.txParams.value ?? VALUE_ZERO;\n\n if (previousValue !== updatedValue) {\n log('Value updated during approval', { previousValue, updatedValue });\n regenerateUserOperation = true;\n }\n\n if (regenerateUserOperation) {\n const updatedRequest = {\n ...request,\n data: updatedData,\n maxFeePerGas: updatedMaxFeePerGas,\n maxPriorityFeePerGas: updatedMaxPriorityFeePerGas,\n value: updatedValue,\n };\n\n await this.#regenerateUserOperation({\n ...cache,\n request: updatedRequest,\n });\n }\n }\n\n async #regenerateUserOperation(cache: UserOperationCache) {\n log(\n 'Regenerating user operation as parameters were updated during approval',\n );\n\n const {\n options: { smartContractAccount },\n metadata,\n } = cache;\n\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n log('Regenerated user operation', metadata.userOperation);\n }\n}\n"]}
1
+ {"version":3,"file":"UserOperationController.cjs","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AcceptResultCallbacks,\n AddApprovalRequest,\n AddResult,\n} from '@metamask/approval-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { ApprovalType } from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerPrepareUserOperationAction,\n KeyringControllerPatchUserOperationAction,\n KeyringControllerSignUserOperationAction,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n Provider,\n} from '@metamask/network-controller';\nimport { errorCodes } from '@metamask/rpc-errors';\nimport { determineTransactionType } from '@metamask/transaction-controller';\nimport type {\n TransactionMeta,\n TransactionParams,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport { add0x } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';\nimport { Bundler } from './helpers/Bundler';\nimport { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker';\nimport { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';\nimport { projectLogger as log } from './logger';\nimport type {\n SmartContractAccount,\n UserOperation,\n UserOperationMetadata,\n} from './types';\nimport { UserOperationStatus } from './types';\nimport { updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getTransactionMetadata } from './utils/transaction';\nimport {\n validateAddUserOperationOptions,\n validateAddUserOperationRequest,\n validatePrepareUserOperationResponse,\n validateSignUserOperationResponse,\n validateUpdateUserOperationResponse,\n} from './utils/validation';\n\nconst controllerName = 'UserOperationController';\n\nconst stateMetadata = {\n userOperations: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n userOperations: {},\n});\n\ntype Events = {\n 'transaction-updated': [metadata: TransactionMeta];\n 'user-operation-added': [metadata: UserOperationMetadata];\n 'user-operation-confirmed': [metadata: UserOperationMetadata];\n 'user-operation-failed': [metadata: UserOperationMetadata, error: Error];\n [key: `${string}:confirmed`]: [metadata: UserOperationMetadata];\n [key: `${string}:failed`]: [metadata: UserOperationMetadata, error: Error];\n};\n\nexport type UserOperationControllerEventEmitter = EventEmitter & {\n on<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n once<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n emit<T extends keyof Events>(eventName: T, ...args: Events[T]): boolean;\n};\n\nexport type UserOperationControllerState = {\n userOperations: Record<string, UserOperationMetadata>;\n};\n\nexport type GetUserOperationState = ControllerGetStateAction<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationControllerActions =\n | GetUserOperationState\n | NetworkControllerGetNetworkClientByIdAction\n | AddApprovalRequest\n | KeyringControllerPrepareUserOperationAction\n | KeyringControllerPatchUserOperationAction\n | KeyringControllerSignUserOperationAction;\n\nexport type UserOperationControllerEvents = UserOperationStateChange;\n\nexport type UserOperationControllerMessenger = Messenger<\n typeof controllerName,\n UserOperationControllerActions,\n UserOperationControllerEvents\n>;\n\nexport type UserOperationControllerOptions = {\n entrypoint: string;\n getGasFeeEstimates: () => Promise<GasFeeState>;\n interval?: number;\n messenger: UserOperationControllerMessenger;\n state?: Partial<UserOperationControllerState>;\n};\n\nexport type AddUserOperationRequest = {\n data?: string;\n from: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n to?: string;\n value?: string;\n};\n\nexport type AddUserOperationSwapOptions = {\n approvalTxId?: string;\n destinationTokenAddress?: string;\n destinationTokenAmount?: string;\n destinationTokenDecimals?: number;\n destinationTokenSymbol?: string;\n estimatedBaseFee?: string;\n sourceTokenAddress?: string;\n sourceTokenAmount?: string;\n sourceTokenDecimals?: number;\n sourceTokenSymbol?: string;\n swapAndSendRecipient?: string;\n swapMetaData?: Record<string, unknown>;\n swapTokenValue?: string;\n};\n\nexport type AddUserOperationOptions = {\n networkClientId: string;\n origin: string;\n requireApproval?: boolean;\n smartContractAccount?: SmartContractAccount;\n swaps?: AddUserOperationSwapOptions;\n type?: TransactionType;\n};\n\nexport type AddUserOperationResponse = {\n id: string;\n hash: () => Promise<string | undefined>;\n transactionHash: () => Promise<string | undefined>;\n};\n\n/**\n * All the objects related to a pending user operation in order to:\n * - Avoid duplicated effort to derive the same properties.\n * - Minimise duplicate arguments in private methods.\n */\ntype UserOperationCache = {\n chainId: string;\n metadata: UserOperationMetadata;\n options: AddUserOperationOptions & {\n smartContractAccount: SmartContractAccount;\n };\n provider: Provider;\n request: AddUserOperationRequest;\n transaction?: TransactionParams;\n};\n\n/**\n * Controller for creating and managing the life cycle of user operations.\n */\nexport class UserOperationController extends BaseController<\n typeof controllerName,\n UserOperationControllerState,\n UserOperationControllerMessenger\n> {\n hub: UserOperationControllerEventEmitter;\n\n readonly #entrypoint: string;\n\n readonly #getGasFeeEstimates: () => Promise<GasFeeState>;\n\n readonly #pendingUserOperationTracker: PendingUserOperationTracker;\n\n /**\n * Construct a UserOperationController instance.\n *\n * @param options - Controller options.\n * @param options.entrypoint - Address of the entrypoint contract.\n * @param options.getGasFeeEstimates - Callback to get gas fee estimates.\n * @param options.messenger - Restricted messenger for the user operation controller.\n * @param options.state - Initial state to set on the controller.\n */\n constructor({\n entrypoint,\n getGasFeeEstimates,\n messenger,\n state,\n }: UserOperationControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.hub = new EventEmitter() as UserOperationControllerEventEmitter;\n\n this.#entrypoint = entrypoint;\n this.#getGasFeeEstimates = getGasFeeEstimates;\n\n this.#pendingUserOperationTracker = new PendingUserOperationTracker({\n getUserOperations: () =>\n cloneDeep(Object.values(this.state.userOperations)),\n messenger,\n });\n\n this.#addPendingUserOperationTrackerListeners();\n }\n\n /**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationRequest(request);\n validateAddUserOperationOptions(options);\n\n return await this.#addUserOperation(request, options);\n }\n\n /**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperationFromTransaction(\n transaction: TransactionParams,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationOptions(options);\n\n const { data, from, maxFeePerGas, maxPriorityFeePerGas, to, value } =\n transaction;\n\n const request: AddUserOperationRequest = {\n data: data === '' ? undefined : data,\n from,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n validateAddUserOperationRequest(request);\n\n return await this.#addUserOperation(request, { ...options, transaction });\n }\n\n startPollingByNetworkClientId(networkClientId: string): string {\n return this.#pendingUserOperationTracker.startPolling({\n networkClientId,\n });\n }\n\n async #addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions & { transaction?: TransactionParams },\n ): Promise<AddUserOperationResponse> {\n log('Adding user operation', { request, options });\n\n const {\n networkClientId,\n origin,\n smartContractAccount: requestSmartContractAccount,\n swaps,\n transaction,\n } = options;\n\n const { chainId, provider } = await this.#getProvider(networkClientId);\n\n const metadata = await this.#createMetadata(\n chainId,\n origin,\n transaction,\n swaps,\n );\n\n const smartContractAccount =\n requestSmartContractAccount ??\n new SnapSmartContractAccount(this.messenger);\n\n const cache: UserOperationCache = {\n chainId,\n metadata,\n options: { ...options, smartContractAccount },\n provider,\n request,\n transaction,\n };\n\n const { id } = metadata;\n let throwError = false;\n\n const hashValue = (async () => {\n try {\n return await this.#prepareAndSubmitUserOperation(cache);\n } catch (error) {\n this.#failUserOperation(metadata, error);\n\n if (throwError) {\n throw error;\n }\n\n return undefined;\n }\n })();\n\n const hash = async () => {\n throwError = true;\n return await hashValue;\n };\n\n const transactionHash = async () => {\n await hash();\n\n const { transactionHash: finalTransactionHash } =\n await this.#waitForConfirmation(metadata);\n\n return finalTransactionHash as string;\n };\n\n return {\n id,\n hash,\n transactionHash,\n };\n }\n\n async #prepareAndSubmitUserOperation(cache: UserOperationCache) {\n const { metadata, options } = cache;\n const { requireApproval, smartContractAccount } = options;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n this.hub.emit('user-operation-added', metadata);\n\n if (requireApproval !== false) {\n resultCallbacks = await this.#approveUserOperation(cache);\n }\n\n await this.#signUserOperation(metadata, smartContractAccount);\n await this.#submitUserOperation(metadata);\n\n resultCallbacks?.success();\n\n return metadata.hash as string;\n } catch (error) {\n /* istanbul ignore next */\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n async #waitForConfirmation(\n metadata: UserOperationMetadata,\n ): Promise<UserOperationMetadata> {\n const { id, hash } = metadata;\n\n log('Waiting for confirmation', id, hash);\n\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:confirmed`, (finalMetadata) => {\n resolve(finalMetadata);\n });\n\n this.hub.once(`${id}:failed`, (_finalMetadata, error) => {\n reject(error);\n });\n });\n }\n\n async #createMetadata(\n chainId: string,\n origin: string,\n transaction?: TransactionParams,\n swaps?: AddUserOperationSwapOptions,\n ): Promise<UserOperationMetadata> {\n const metadata: UserOperationMetadata = {\n actualGasCost: null,\n actualGasUsed: null,\n baseFeePerGas: null,\n bundlerUrl: null,\n chainId,\n error: null,\n hash: null,\n id: random(),\n origin,\n status: UserOperationStatus.Unapproved,\n swapsMetadata: swaps\n ? {\n approvalTxId: swaps.approvalTxId ?? null,\n destinationTokenAddress: swaps.destinationTokenAddress ?? null,\n destinationTokenAmount: swaps.destinationTokenAmount ?? null,\n destinationTokenDecimals: swaps.destinationTokenDecimals ?? null,\n destinationTokenSymbol: swaps.destinationTokenSymbol ?? null,\n estimatedBaseFee: swaps.estimatedBaseFee ?? null,\n sourceTokenAddress: swaps.sourceTokenAddress ?? null,\n sourceTokenAmount: swaps.sourceTokenAmount ?? null,\n sourceTokenDecimals: swaps.sourceTokenDecimals ?? null,\n sourceTokenSymbol: swaps.sourceTokenSymbol ?? null,\n swapAndSendRecipient: swaps.swapAndSendRecipient ?? null,\n swapMetaData: (swaps.swapMetaData as Record<string, never>) ?? null,\n swapTokenValue: swaps.swapTokenValue ?? null,\n }\n : null,\n time: Date.now(),\n transactionHash: null,\n transactionParams: (transaction as Required<TransactionParams>) ?? null,\n transactionType: null,\n userFeeLevel: null,\n userOperation: this.#createEmptyUserOperation(transaction),\n };\n\n this.#updateMetadata(metadata);\n\n log('Added user operation', metadata.id);\n\n return metadata;\n }\n\n async #prepareUserOperation(cache: UserOperationCache) {\n const { chainId, metadata, options, provider, request, transaction } =\n cache;\n\n const { data, from, to, value } = request;\n const { id, transactionParams, userOperation } = metadata;\n const { smartContractAccount } = options;\n\n log('Preparing user operation', { id });\n\n const transactionType = await this.#getTransactionType(\n transaction,\n provider,\n options,\n );\n\n metadata.transactionType = transactionType ?? null;\n\n log('Determined transaction type', transactionType);\n\n await updateGasFees({\n getGasFeeEstimates: this.#getGasFeeEstimates,\n metadata,\n originalRequest: request,\n provider,\n transaction: transactionParams ?? undefined,\n });\n\n const response = await smartContractAccount.prepareUserOperation({\n chainId,\n data,\n from,\n to,\n value,\n });\n\n validatePrepareUserOperationResponse(response);\n\n const {\n bundler: bundlerUrl,\n callData,\n dummyPaymasterAndData,\n dummySignature,\n initCode,\n nonce,\n sender,\n } = response;\n\n userOperation.callData = callData;\n userOperation.initCode = initCode ?? EMPTY_BYTES;\n userOperation.nonce = nonce;\n userOperation.paymasterAndData = dummyPaymasterAndData ?? EMPTY_BYTES;\n userOperation.sender = sender;\n userOperation.signature = dummySignature ?? EMPTY_BYTES;\n\n metadata.bundlerUrl = bundlerUrl;\n\n await updateGas(metadata, response, this.#entrypoint);\n\n this.#updateMetadata(metadata);\n }\n\n async #addPaymasterData(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, userOperation, chainId } = metadata;\n\n log('Requesting paymaster data', { id });\n\n const response = await smartContractAccount.updateUserOperation({\n userOperation,\n chainId,\n });\n\n validateUpdateUserOperationResponse(response);\n\n userOperation.paymasterAndData = response.paymasterAndData ?? EMPTY_BYTES;\n if (response.callGasLimit) {\n userOperation.callGasLimit = response.callGasLimit;\n }\n if (response.preVerificationGas) {\n userOperation.preVerificationGas = response.preVerificationGas;\n }\n if (response.verificationGasLimit) {\n userOperation.verificationGasLimit = response.verificationGasLimit;\n }\n\n this.#updateMetadata(metadata);\n }\n\n async #approveUserOperation(cache: UserOperationCache) {\n log('Requesting approval');\n\n const { metadata } = cache;\n\n const { resultCallbacks, value } = await this.#requestApproval(metadata);\n const updatedTransaction = value?.txMeta;\n\n if (updatedTransaction) {\n await this.#updateUserOperationAfterApproval(cache, updatedTransaction);\n }\n\n metadata.status = UserOperationStatus.Approved;\n\n this.#updateMetadata(metadata);\n\n return resultCallbacks;\n }\n\n async #signUserOperation(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, chainId, userOperation } = metadata;\n\n log('Signing user operation', id, userOperation);\n\n const response = await smartContractAccount.signUserOperation({\n userOperation,\n chainId,\n });\n\n validateSignUserOperationResponse(response);\n\n const { signature } = response;\n\n userOperation.signature = signature;\n\n log('Signed user operation', signature);\n\n metadata.status = UserOperationStatus.Signed;\n\n this.#updateMetadata(metadata);\n }\n\n async #submitUserOperation(metadata: UserOperationMetadata) {\n const { userOperation } = metadata;\n\n log('Submitting user operation', userOperation);\n\n const bundler = new Bundler(metadata.bundlerUrl as string);\n\n const hash = await bundler.sendUserOperation(\n userOperation,\n this.#entrypoint,\n );\n\n metadata.hash = hash;\n metadata.status = UserOperationStatus.Submitted;\n\n this.#updateMetadata(metadata);\n }\n\n #failUserOperation(metadata: UserOperationMetadata, error: unknown) {\n const { id } = metadata;\n const rawError = error as Record<string, string>;\n\n log('User operation failed', id, error);\n\n metadata.error = {\n name: rawError.name,\n message: rawError.message,\n stack: rawError.stack,\n code: rawError.code,\n rpc: rawError.value,\n };\n\n metadata.status = UserOperationStatus.Failed;\n\n this.#updateMetadata(metadata);\n\n if (\n String(rawError.code) === String(errorCodes.provider.userRejectedRequest)\n ) {\n this.#deleteMetadata(id);\n }\n }\n\n #createEmptyUserOperation(transaction?: TransactionParams): UserOperation {\n return {\n callData: EMPTY_BYTES,\n callGasLimit: EMPTY_BYTES,\n initCode: EMPTY_BYTES,\n maxFeePerGas: transaction?.maxFeePerGas ?? EMPTY_BYTES,\n maxPriorityFeePerGas: transaction?.maxPriorityFeePerGas ?? EMPTY_BYTES,\n nonce: EMPTY_BYTES,\n paymasterAndData: EMPTY_BYTES,\n preVerificationGas: EMPTY_BYTES,\n sender: ADDRESS_ZERO,\n signature: EMPTY_BYTES,\n verificationGasLimit: EMPTY_BYTES,\n };\n }\n\n #updateMetadata(metadata: UserOperationMetadata) {\n const { id } = metadata;\n\n this.update((state) => {\n state.userOperations[id] = cloneDeep(metadata);\n });\n\n this.#updateTransaction(metadata);\n }\n\n #deleteMetadata(id: string) {\n this.update((state) => {\n delete state.userOperations[id];\n });\n }\n\n #updateTransaction(metadata: UserOperationMetadata) {\n if (!metadata.transactionParams) {\n return;\n }\n\n const transactionMetadata = getTransactionMetadata(metadata);\n\n this.hub.emit('transaction-updated', transactionMetadata);\n }\n\n #addPendingUserOperationTrackerListeners() {\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-confirmed',\n (metadata) => {\n log('In listener...');\n this.hub.emit('user-operation-confirmed', metadata);\n this.hub.emit(`${metadata.id}:confirmed`, metadata);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-failed',\n (metadata, error) => {\n this.hub.emit('user-operation-failed', metadata, error);\n this.hub.emit(`${metadata.id}:failed`, metadata, error);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-updated',\n (metadata) => {\n this.#updateMetadata(metadata);\n },\n );\n }\n\n async #requestApproval(metadata: UserOperationMetadata) {\n const { id, origin } = metadata;\n const type = ApprovalType.Transaction;\n const requestData = { txId: id };\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData,\n expectsResult: true,\n },\n true, // Should display approval request to user\n )) as AddResult & { value?: { txMeta?: TransactionMeta } };\n }\n\n async #getTransactionType(\n transaction: TransactionParams | undefined,\n provider: Provider,\n options: AddUserOperationOptions,\n ): Promise<TransactionType | undefined> {\n if (!transaction) {\n return undefined;\n }\n\n if (options.type) {\n return options.type;\n }\n\n const ethQuery = new EthQuery(provider);\n const result = determineTransactionType(transaction, ethQuery);\n\n return (await result).type;\n }\n\n async #getProvider(\n networkClientId: string,\n ): Promise<{ provider: Provider; chainId: string }> {\n const { provider, configuration } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n const { chainId } = configuration;\n\n return { provider, chainId };\n }\n\n async #updateUserOperationAfterApproval(\n cache: UserOperationCache,\n updatedTransaction: TransactionMeta,\n ) {\n log('Found updated transaction in approval', { updatedTransaction });\n\n const { metadata, request } = cache;\n\n const { userOperation } = metadata;\n const usingPaymaster = userOperation.paymasterAndData !== EMPTY_BYTES;\n\n const updatedMaxFeePerGas = add0x(\n updatedTransaction.txParams.maxFeePerGas as string,\n );\n\n const updatedMaxPriorityFeePerGas = add0x(\n updatedTransaction.txParams.maxPriorityFeePerGas as string,\n );\n\n let regenerateUserOperation = false;\n const previousMaxFeePerGas = userOperation.maxFeePerGas;\n const previousMaxPriorityFeePerGas = userOperation.maxPriorityFeePerGas;\n\n const gasFeesUpdated =\n previousMaxFeePerGas !== updatedMaxFeePerGas ||\n previousMaxPriorityFeePerGas !== updatedMaxPriorityFeePerGas;\n\n /**\n * true when we detect {@link getTransactionMetadata} has set the gas fees to zero\n * because the userOperation has a paymaster. This should not be mistaken for gas\n * fees being updated during the approval process.\n */\n const areGasFeesZeroBecauseOfPaymaster =\n usingPaymaster &&\n updatedMaxFeePerGas === VALUE_ZERO &&\n updatedMaxPriorityFeePerGas === VALUE_ZERO;\n\n if (gasFeesUpdated && !areGasFeesZeroBecauseOfPaymaster) {\n log('Gas fees updated during approval', {\n previousMaxFeePerGas,\n previousMaxPriorityFeePerGas,\n updatedMaxFeePerGas,\n updatedMaxPriorityFeePerGas,\n });\n\n userOperation.maxFeePerGas = updatedMaxFeePerGas;\n userOperation.maxPriorityFeePerGas = updatedMaxPriorityFeePerGas;\n\n regenerateUserOperation = usingPaymaster;\n }\n\n const previousData = request.data ?? EMPTY_BYTES;\n const updatedData = updatedTransaction.txParams.data ?? EMPTY_BYTES;\n\n if (previousData !== updatedData) {\n log('Data updated during approval', { previousData, updatedData });\n regenerateUserOperation = true;\n }\n\n const previousValue = request.value ?? VALUE_ZERO;\n const updatedValue = updatedTransaction.txParams.value ?? VALUE_ZERO;\n\n if (previousValue !== updatedValue) {\n log('Value updated during approval', { previousValue, updatedValue });\n regenerateUserOperation = true;\n }\n\n if (regenerateUserOperation) {\n const updatedRequest = {\n ...request,\n data: updatedData,\n maxFeePerGas: updatedMaxFeePerGas,\n maxPriorityFeePerGas: updatedMaxPriorityFeePerGas,\n value: updatedValue,\n };\n\n await this.#regenerateUserOperation({\n ...cache,\n request: updatedRequest,\n });\n }\n }\n\n async #regenerateUserOperation(cache: UserOperationCache) {\n log(\n 'Regenerating user operation as parameters were updated during approval',\n );\n\n const {\n options: { smartContractAccount },\n metadata,\n } = cache;\n\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n log('Regenerated user operation', metadata.userOperation);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import type { ApprovalControllerAddRequestAction } from "@metamask/approval-controller";
2
+ import type { AddApprovalRequest } from "@metamask/approval-controller";
3
3
  import { BaseController } from "@metamask/base-controller";
4
4
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
5
5
  import type { GasFeeState } from "@metamask/gas-fee-controller";
@@ -9,7 +9,6 @@ import type { NetworkControllerGetNetworkClientByIdAction } from "@metamask/netw
9
9
  import type { TransactionMeta, TransactionParams, TransactionType } from "@metamask/transaction-controller";
10
10
  import EventEmitter from "events";
11
11
  import type { SmartContractAccount, UserOperationMetadata } from "./types.cjs";
12
- import type { UserOperationControllerMethodActions } from "./UserOperationController-method-action-types.cjs";
13
12
  declare const controllerName = "UserOperationController";
14
13
  type Events = {
15
14
  'transaction-updated': [metadata: TransactionMeta];
@@ -29,7 +28,7 @@ export type UserOperationControllerState = {
29
28
  };
30
29
  export type GetUserOperationState = ControllerGetStateAction<typeof controllerName, UserOperationControllerState>;
31
30
  export type UserOperationStateChange = ControllerStateChangeEvent<typeof controllerName, UserOperationControllerState>;
32
- export type UserOperationControllerActions = GetUserOperationState | UserOperationControllerMethodActions | NetworkControllerGetNetworkClientByIdAction | ApprovalControllerAddRequestAction | KeyringControllerPrepareUserOperationAction | KeyringControllerPatchUserOperationAction | KeyringControllerSignUserOperationAction;
31
+ export type UserOperationControllerActions = GetUserOperationState | NetworkControllerGetNetworkClientByIdAction | AddApprovalRequest | KeyringControllerPrepareUserOperationAction | KeyringControllerPatchUserOperationAction | KeyringControllerSignUserOperationAction;
33
32
  export type UserOperationControllerEvents = UserOperationStateChange;
34
33
  export type UserOperationControllerMessenger = Messenger<typeof controllerName, UserOperationControllerActions, UserOperationControllerEvents>;
35
34
  export type UserOperationControllerOptions = {
@@ -122,12 +121,6 @@ export declare class UserOperationController extends BaseController<typeof contr
122
121
  * @param options.type - Type of the transaction.
123
122
  */
124
123
  addUserOperationFromTransaction(transaction: TransactionParams, options: AddUserOperationOptions): Promise<AddUserOperationResponse>;
125
- /**
126
- * Starts polling for pending user operations on the given network.
127
- *
128
- * @param networkClientId - The ID of the network client to poll.
129
- * @returns The polling token that can be used to stop polling.
130
- */
131
124
  startPollingByNetworkClientId(networkClientId: string): string;
132
125
  }
133
126
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"UserOperationController.d.cts","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserOperationController.d.cts","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import type { ApprovalControllerAddRequestAction } from "@metamask/approval-controller";
2
+ import type { AddApprovalRequest } from "@metamask/approval-controller";
3
3
  import { BaseController } from "@metamask/base-controller";
4
4
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
5
5
  import type { GasFeeState } from "@metamask/gas-fee-controller";
@@ -9,7 +9,6 @@ import type { NetworkControllerGetNetworkClientByIdAction } from "@metamask/netw
9
9
  import type { TransactionMeta, TransactionParams, TransactionType } from "@metamask/transaction-controller";
10
10
  import EventEmitter from "events";
11
11
  import type { SmartContractAccount, UserOperationMetadata } from "./types.mjs";
12
- import type { UserOperationControllerMethodActions } from "./UserOperationController-method-action-types.mjs";
13
12
  declare const controllerName = "UserOperationController";
14
13
  type Events = {
15
14
  'transaction-updated': [metadata: TransactionMeta];
@@ -29,7 +28,7 @@ export type UserOperationControllerState = {
29
28
  };
30
29
  export type GetUserOperationState = ControllerGetStateAction<typeof controllerName, UserOperationControllerState>;
31
30
  export type UserOperationStateChange = ControllerStateChangeEvent<typeof controllerName, UserOperationControllerState>;
32
- export type UserOperationControllerActions = GetUserOperationState | UserOperationControllerMethodActions | NetworkControllerGetNetworkClientByIdAction | ApprovalControllerAddRequestAction | KeyringControllerPrepareUserOperationAction | KeyringControllerPatchUserOperationAction | KeyringControllerSignUserOperationAction;
31
+ export type UserOperationControllerActions = GetUserOperationState | NetworkControllerGetNetworkClientByIdAction | AddApprovalRequest | KeyringControllerPrepareUserOperationAction | KeyringControllerPatchUserOperationAction | KeyringControllerSignUserOperationAction;
33
32
  export type UserOperationControllerEvents = UserOperationStateChange;
34
33
  export type UserOperationControllerMessenger = Messenger<typeof controllerName, UserOperationControllerActions, UserOperationControllerEvents>;
35
34
  export type UserOperationControllerOptions = {
@@ -122,12 +121,6 @@ export declare class UserOperationController extends BaseController<typeof contr
122
121
  * @param options.type - Type of the transaction.
123
122
  */
124
123
  addUserOperationFromTransaction(transaction: TransactionParams, options: AddUserOperationOptions): Promise<AddUserOperationResponse>;
125
- /**
126
- * Starts polling for pending user operations on the given network.
127
- *
128
- * @param networkClientId - The ID of the network client to poll.
129
- * @returns The polling token that can be used to stop polling.
130
- */
131
124
  startPollingByNetworkClientId(networkClientId: string): string;
132
125
  }
133
126
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"UserOperationController.d.mts","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserOperationController.d.mts","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,6 @@ import { updateGasFees } from "./utils/gas-fees.mjs";
40
40
  import { getTransactionMetadata } from "./utils/transaction.mjs";
41
41
  import { validateAddUserOperationOptions, validateAddUserOperationRequest, validatePrepareUserOperationResponse, validateSignUserOperationResponse, validateUpdateUserOperationResponse } from "./utils/validation.mjs";
42
42
  const controllerName = 'UserOperationController';
43
- const MESSENGER_EXPOSED_METHODS = [
44
- 'addUserOperation',
45
- 'addUserOperationFromTransaction',
46
- 'startPollingByNetworkClientId',
47
- ];
48
43
  const stateMetadata = {
49
44
  userOperations: {
50
45
  includeInStateLogs: true,
@@ -81,7 +76,6 @@ export class UserOperationController extends BaseController {
81
76
  _UserOperationController_getGasFeeEstimates.set(this, void 0);
82
77
  _UserOperationController_pendingUserOperationTracker.set(this, void 0);
83
78
  this.hub = new EventEmitter();
84
- this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
85
79
  __classPrivateFieldSet(this, _UserOperationController_entrypoint, entrypoint, "f");
86
80
  __classPrivateFieldSet(this, _UserOperationController_getGasFeeEstimates, getGasFeeEstimates, "f");
87
81
  __classPrivateFieldSet(this, _UserOperationController_pendingUserOperationTracker, new PendingUserOperationTracker({
@@ -138,12 +132,6 @@ export class UserOperationController extends BaseController {
138
132
  validateAddUserOperationRequest(request);
139
133
  return await __classPrivateFieldGet(this, _UserOperationController_instances, "m", _UserOperationController_addUserOperation).call(this, request, { ...options, transaction });
140
134
  }
141
- /**
142
- * Starts polling for pending user operations on the given network.
143
- *
144
- * @param networkClientId - The ID of the network client to poll.
145
- * @returns The polling token that can be used to stop polling.
146
- */
147
135
  startPollingByNetworkClientId(networkClientId) {
148
136
  return __classPrivateFieldGet(this, _UserOperationController_pendingUserOperationTracker, "f").startPolling({
149
137
  networkClientId,
@@ -1 +1 @@
1
- {"version":3,"file":"UserOperationController.mjs","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AcceptResultCallbacks,\n ApprovalControllerAddRequestAction,\n AddResult,\n} from '@metamask/approval-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { ApprovalType } from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerPrepareUserOperationAction,\n KeyringControllerPatchUserOperationAction,\n KeyringControllerSignUserOperationAction,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n Provider,\n} from '@metamask/network-controller';\nimport { errorCodes } from '@metamask/rpc-errors';\nimport { determineTransactionType } from '@metamask/transaction-controller';\nimport type {\n TransactionMeta,\n TransactionParams,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport { add0x } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';\nimport { Bundler } from './helpers/Bundler';\nimport { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker';\nimport { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';\nimport { projectLogger as log } from './logger';\nimport type {\n SmartContractAccount,\n UserOperation,\n UserOperationMetadata,\n} from './types';\nimport { UserOperationStatus } from './types';\nimport type { UserOperationControllerMethodActions } from './UserOperationController-method-action-types';\nimport { updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getTransactionMetadata } from './utils/transaction';\nimport {\n validateAddUserOperationOptions,\n validateAddUserOperationRequest,\n validatePrepareUserOperationResponse,\n validateSignUserOperationResponse,\n validateUpdateUserOperationResponse,\n} from './utils/validation';\n\nconst controllerName = 'UserOperationController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'addUserOperation',\n 'addUserOperationFromTransaction',\n 'startPollingByNetworkClientId',\n] as const;\n\nconst stateMetadata = {\n userOperations: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n userOperations: {},\n});\n\ntype Events = {\n 'transaction-updated': [metadata: TransactionMeta];\n 'user-operation-added': [metadata: UserOperationMetadata];\n 'user-operation-confirmed': [metadata: UserOperationMetadata];\n 'user-operation-failed': [metadata: UserOperationMetadata, error: Error];\n [key: `${string}:confirmed`]: [metadata: UserOperationMetadata];\n [key: `${string}:failed`]: [metadata: UserOperationMetadata, error: Error];\n};\n\nexport type UserOperationControllerEventEmitter = EventEmitter & {\n on<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n once<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n emit<T extends keyof Events>(eventName: T, ...args: Events[T]): boolean;\n};\n\nexport type UserOperationControllerState = {\n userOperations: Record<string, UserOperationMetadata>;\n};\n\nexport type GetUserOperationState = ControllerGetStateAction<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationControllerActions =\n | GetUserOperationState\n | UserOperationControllerMethodActions\n | NetworkControllerGetNetworkClientByIdAction\n | ApprovalControllerAddRequestAction\n | KeyringControllerPrepareUserOperationAction\n | KeyringControllerPatchUserOperationAction\n | KeyringControllerSignUserOperationAction;\n\nexport type UserOperationControllerEvents = UserOperationStateChange;\n\nexport type UserOperationControllerMessenger = Messenger<\n typeof controllerName,\n UserOperationControllerActions,\n UserOperationControllerEvents\n>;\n\nexport type UserOperationControllerOptions = {\n entrypoint: string;\n getGasFeeEstimates: () => Promise<GasFeeState>;\n interval?: number;\n messenger: UserOperationControllerMessenger;\n state?: Partial<UserOperationControllerState>;\n};\n\nexport type AddUserOperationRequest = {\n data?: string;\n from: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n to?: string;\n value?: string;\n};\n\nexport type AddUserOperationSwapOptions = {\n approvalTxId?: string;\n destinationTokenAddress?: string;\n destinationTokenAmount?: string;\n destinationTokenDecimals?: number;\n destinationTokenSymbol?: string;\n estimatedBaseFee?: string;\n sourceTokenAddress?: string;\n sourceTokenAmount?: string;\n sourceTokenDecimals?: number;\n sourceTokenSymbol?: string;\n swapAndSendRecipient?: string;\n swapMetaData?: Record<string, unknown>;\n swapTokenValue?: string;\n};\n\nexport type AddUserOperationOptions = {\n networkClientId: string;\n origin: string;\n requireApproval?: boolean;\n smartContractAccount?: SmartContractAccount;\n swaps?: AddUserOperationSwapOptions;\n type?: TransactionType;\n};\n\nexport type AddUserOperationResponse = {\n id: string;\n hash: () => Promise<string | undefined>;\n transactionHash: () => Promise<string | undefined>;\n};\n\n/**\n * All the objects related to a pending user operation in order to:\n * - Avoid duplicated effort to derive the same properties.\n * - Minimise duplicate arguments in private methods.\n */\ntype UserOperationCache = {\n chainId: string;\n metadata: UserOperationMetadata;\n options: AddUserOperationOptions & {\n smartContractAccount: SmartContractAccount;\n };\n provider: Provider;\n request: AddUserOperationRequest;\n transaction?: TransactionParams;\n};\n\n/**\n * Controller for creating and managing the life cycle of user operations.\n */\nexport class UserOperationController extends BaseController<\n typeof controllerName,\n UserOperationControllerState,\n UserOperationControllerMessenger\n> {\n hub: UserOperationControllerEventEmitter;\n\n readonly #entrypoint: string;\n\n readonly #getGasFeeEstimates: () => Promise<GasFeeState>;\n\n readonly #pendingUserOperationTracker: PendingUserOperationTracker;\n\n /**\n * Construct a UserOperationController instance.\n *\n * @param options - Controller options.\n * @param options.entrypoint - Address of the entrypoint contract.\n * @param options.getGasFeeEstimates - Callback to get gas fee estimates.\n * @param options.messenger - Restricted messenger for the user operation controller.\n * @param options.state - Initial state to set on the controller.\n */\n constructor({\n entrypoint,\n getGasFeeEstimates,\n messenger,\n state,\n }: UserOperationControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.hub = new EventEmitter() as UserOperationControllerEventEmitter;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n this.#entrypoint = entrypoint;\n this.#getGasFeeEstimates = getGasFeeEstimates;\n\n this.#pendingUserOperationTracker = new PendingUserOperationTracker({\n getUserOperations: () =>\n cloneDeep(Object.values(this.state.userOperations)),\n messenger,\n });\n\n this.#addPendingUserOperationTrackerListeners();\n }\n\n /**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationRequest(request);\n validateAddUserOperationOptions(options);\n\n return await this.#addUserOperation(request, options);\n }\n\n /**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperationFromTransaction(\n transaction: TransactionParams,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationOptions(options);\n\n const { data, from, maxFeePerGas, maxPriorityFeePerGas, to, value } =\n transaction;\n\n const request: AddUserOperationRequest = {\n data: data === '' ? undefined : data,\n from,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n validateAddUserOperationRequest(request);\n\n return await this.#addUserOperation(request, { ...options, transaction });\n }\n\n /**\n * Starts polling for pending user operations on the given network.\n *\n * @param networkClientId - The ID of the network client to poll.\n * @returns The polling token that can be used to stop polling.\n */\n startPollingByNetworkClientId(networkClientId: string): string {\n return this.#pendingUserOperationTracker.startPolling({\n networkClientId,\n });\n }\n\n async #addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions & { transaction?: TransactionParams },\n ): Promise<AddUserOperationResponse> {\n log('Adding user operation', { request, options });\n\n const {\n networkClientId,\n origin,\n smartContractAccount: requestSmartContractAccount,\n swaps,\n transaction,\n } = options;\n\n const { chainId, provider } = await this.#getProvider(networkClientId);\n\n const metadata = await this.#createMetadata(\n chainId,\n origin,\n transaction,\n swaps,\n );\n\n const smartContractAccount =\n requestSmartContractAccount ??\n new SnapSmartContractAccount(this.messenger);\n\n const cache: UserOperationCache = {\n chainId,\n metadata,\n options: { ...options, smartContractAccount },\n provider,\n request,\n transaction,\n };\n\n const { id } = metadata;\n let throwError = false;\n\n const hashValue = (async () => {\n try {\n return await this.#prepareAndSubmitUserOperation(cache);\n } catch (error) {\n this.#failUserOperation(metadata, error);\n\n if (throwError) {\n throw error;\n }\n\n return undefined;\n }\n })();\n\n const hash = async () => {\n throwError = true;\n return await hashValue;\n };\n\n const transactionHash = async () => {\n await hash();\n\n const { transactionHash: finalTransactionHash } =\n await this.#waitForConfirmation(metadata);\n\n return finalTransactionHash as string;\n };\n\n return {\n id,\n hash,\n transactionHash,\n };\n }\n\n async #prepareAndSubmitUserOperation(cache: UserOperationCache) {\n const { metadata, options } = cache;\n const { requireApproval, smartContractAccount } = options;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n this.hub.emit('user-operation-added', metadata);\n\n if (requireApproval !== false) {\n resultCallbacks = await this.#approveUserOperation(cache);\n }\n\n await this.#signUserOperation(metadata, smartContractAccount);\n await this.#submitUserOperation(metadata);\n\n resultCallbacks?.success();\n\n return metadata.hash as string;\n } catch (error) {\n /* istanbul ignore next */\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n async #waitForConfirmation(\n metadata: UserOperationMetadata,\n ): Promise<UserOperationMetadata> {\n const { id, hash } = metadata;\n\n log('Waiting for confirmation', id, hash);\n\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:confirmed`, (finalMetadata) => {\n resolve(finalMetadata);\n });\n\n this.hub.once(`${id}:failed`, (_finalMetadata, error) => {\n reject(error);\n });\n });\n }\n\n async #createMetadata(\n chainId: string,\n origin: string,\n transaction?: TransactionParams,\n swaps?: AddUserOperationSwapOptions,\n ): Promise<UserOperationMetadata> {\n const metadata: UserOperationMetadata = {\n actualGasCost: null,\n actualGasUsed: null,\n baseFeePerGas: null,\n bundlerUrl: null,\n chainId,\n error: null,\n hash: null,\n id: random(),\n origin,\n status: UserOperationStatus.Unapproved,\n swapsMetadata: swaps\n ? {\n approvalTxId: swaps.approvalTxId ?? null,\n destinationTokenAddress: swaps.destinationTokenAddress ?? null,\n destinationTokenAmount: swaps.destinationTokenAmount ?? null,\n destinationTokenDecimals: swaps.destinationTokenDecimals ?? null,\n destinationTokenSymbol: swaps.destinationTokenSymbol ?? null,\n estimatedBaseFee: swaps.estimatedBaseFee ?? null,\n sourceTokenAddress: swaps.sourceTokenAddress ?? null,\n sourceTokenAmount: swaps.sourceTokenAmount ?? null,\n sourceTokenDecimals: swaps.sourceTokenDecimals ?? null,\n sourceTokenSymbol: swaps.sourceTokenSymbol ?? null,\n swapAndSendRecipient: swaps.swapAndSendRecipient ?? null,\n swapMetaData: (swaps.swapMetaData as Record<string, never>) ?? null,\n swapTokenValue: swaps.swapTokenValue ?? null,\n }\n : null,\n time: Date.now(),\n transactionHash: null,\n transactionParams: (transaction as Required<TransactionParams>) ?? null,\n transactionType: null,\n userFeeLevel: null,\n userOperation: this.#createEmptyUserOperation(transaction),\n };\n\n this.#updateMetadata(metadata);\n\n log('Added user operation', metadata.id);\n\n return metadata;\n }\n\n async #prepareUserOperation(cache: UserOperationCache) {\n const { chainId, metadata, options, provider, request, transaction } =\n cache;\n\n const { data, from, to, value } = request;\n const { id, transactionParams, userOperation } = metadata;\n const { smartContractAccount } = options;\n\n log('Preparing user operation', { id });\n\n const transactionType = await this.#getTransactionType(\n transaction,\n provider,\n options,\n );\n\n metadata.transactionType = transactionType ?? null;\n\n log('Determined transaction type', transactionType);\n\n await updateGasFees({\n getGasFeeEstimates: this.#getGasFeeEstimates,\n metadata,\n originalRequest: request,\n provider,\n transaction: transactionParams ?? undefined,\n });\n\n const response = await smartContractAccount.prepareUserOperation({\n chainId,\n data,\n from,\n to,\n value,\n });\n\n validatePrepareUserOperationResponse(response);\n\n const {\n bundler: bundlerUrl,\n callData,\n dummyPaymasterAndData,\n dummySignature,\n initCode,\n nonce,\n sender,\n } = response;\n\n userOperation.callData = callData;\n userOperation.initCode = initCode ?? EMPTY_BYTES;\n userOperation.nonce = nonce;\n userOperation.paymasterAndData = dummyPaymasterAndData ?? EMPTY_BYTES;\n userOperation.sender = sender;\n userOperation.signature = dummySignature ?? EMPTY_BYTES;\n\n metadata.bundlerUrl = bundlerUrl;\n\n await updateGas(metadata, response, this.#entrypoint);\n\n this.#updateMetadata(metadata);\n }\n\n async #addPaymasterData(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, userOperation, chainId } = metadata;\n\n log('Requesting paymaster data', { id });\n\n const response = await smartContractAccount.updateUserOperation({\n userOperation,\n chainId,\n });\n\n validateUpdateUserOperationResponse(response);\n\n userOperation.paymasterAndData = response.paymasterAndData ?? EMPTY_BYTES;\n if (response.callGasLimit) {\n userOperation.callGasLimit = response.callGasLimit;\n }\n if (response.preVerificationGas) {\n userOperation.preVerificationGas = response.preVerificationGas;\n }\n if (response.verificationGasLimit) {\n userOperation.verificationGasLimit = response.verificationGasLimit;\n }\n\n this.#updateMetadata(metadata);\n }\n\n async #approveUserOperation(cache: UserOperationCache) {\n log('Requesting approval');\n\n const { metadata } = cache;\n\n const { resultCallbacks, value } = await this.#requestApproval(metadata);\n const updatedTransaction = value?.txMeta;\n\n if (updatedTransaction) {\n await this.#updateUserOperationAfterApproval(cache, updatedTransaction);\n }\n\n metadata.status = UserOperationStatus.Approved;\n\n this.#updateMetadata(metadata);\n\n return resultCallbacks;\n }\n\n async #signUserOperation(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, chainId, userOperation } = metadata;\n\n log('Signing user operation', id, userOperation);\n\n const response = await smartContractAccount.signUserOperation({\n userOperation,\n chainId,\n });\n\n validateSignUserOperationResponse(response);\n\n const { signature } = response;\n\n userOperation.signature = signature;\n\n log('Signed user operation', signature);\n\n metadata.status = UserOperationStatus.Signed;\n\n this.#updateMetadata(metadata);\n }\n\n async #submitUserOperation(metadata: UserOperationMetadata) {\n const { userOperation } = metadata;\n\n log('Submitting user operation', userOperation);\n\n const bundler = new Bundler(metadata.bundlerUrl as string);\n\n const hash = await bundler.sendUserOperation(\n userOperation,\n this.#entrypoint,\n );\n\n metadata.hash = hash;\n metadata.status = UserOperationStatus.Submitted;\n\n this.#updateMetadata(metadata);\n }\n\n #failUserOperation(metadata: UserOperationMetadata, error: unknown) {\n const { id } = metadata;\n const rawError = error as Record<string, string>;\n\n log('User operation failed', id, error);\n\n metadata.error = {\n name: rawError.name,\n message: rawError.message,\n stack: rawError.stack,\n code: rawError.code,\n rpc: rawError.value,\n };\n\n metadata.status = UserOperationStatus.Failed;\n\n this.#updateMetadata(metadata);\n\n if (\n String(rawError.code) === String(errorCodes.provider.userRejectedRequest)\n ) {\n this.#deleteMetadata(id);\n }\n }\n\n #createEmptyUserOperation(transaction?: TransactionParams): UserOperation {\n return {\n callData: EMPTY_BYTES,\n callGasLimit: EMPTY_BYTES,\n initCode: EMPTY_BYTES,\n maxFeePerGas: transaction?.maxFeePerGas ?? EMPTY_BYTES,\n maxPriorityFeePerGas: transaction?.maxPriorityFeePerGas ?? EMPTY_BYTES,\n nonce: EMPTY_BYTES,\n paymasterAndData: EMPTY_BYTES,\n preVerificationGas: EMPTY_BYTES,\n sender: ADDRESS_ZERO,\n signature: EMPTY_BYTES,\n verificationGasLimit: EMPTY_BYTES,\n };\n }\n\n #updateMetadata(metadata: UserOperationMetadata) {\n const { id } = metadata;\n\n this.update((state) => {\n state.userOperations[id] = cloneDeep(metadata);\n });\n\n this.#updateTransaction(metadata);\n }\n\n #deleteMetadata(id: string) {\n this.update((state) => {\n delete state.userOperations[id];\n });\n }\n\n #updateTransaction(metadata: UserOperationMetadata) {\n if (!metadata.transactionParams) {\n return;\n }\n\n const transactionMetadata = getTransactionMetadata(metadata);\n\n this.hub.emit('transaction-updated', transactionMetadata);\n }\n\n #addPendingUserOperationTrackerListeners() {\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-confirmed',\n (metadata) => {\n log('In listener...');\n this.hub.emit('user-operation-confirmed', metadata);\n this.hub.emit(`${metadata.id}:confirmed`, metadata);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-failed',\n (metadata, error) => {\n this.hub.emit('user-operation-failed', metadata, error);\n this.hub.emit(`${metadata.id}:failed`, metadata, error);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-updated',\n (metadata) => {\n this.#updateMetadata(metadata);\n },\n );\n }\n\n async #requestApproval(metadata: UserOperationMetadata) {\n const { id, origin } = metadata;\n const type = ApprovalType.Transaction;\n const requestData = { txId: id };\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData,\n expectsResult: true,\n },\n true, // Should display approval request to user\n )) as AddResult & { value?: { txMeta?: TransactionMeta } };\n }\n\n async #getTransactionType(\n transaction: TransactionParams | undefined,\n provider: Provider,\n options: AddUserOperationOptions,\n ): Promise<TransactionType | undefined> {\n if (!transaction) {\n return undefined;\n }\n\n if (options.type) {\n return options.type;\n }\n\n const ethQuery = new EthQuery(provider);\n const result = determineTransactionType(transaction, ethQuery);\n\n return (await result).type;\n }\n\n async #getProvider(\n networkClientId: string,\n ): Promise<{ provider: Provider; chainId: string }> {\n const { provider, configuration } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n const { chainId } = configuration;\n\n return { provider, chainId };\n }\n\n async #updateUserOperationAfterApproval(\n cache: UserOperationCache,\n updatedTransaction: TransactionMeta,\n ) {\n log('Found updated transaction in approval', { updatedTransaction });\n\n const { metadata, request } = cache;\n\n const { userOperation } = metadata;\n const usingPaymaster = userOperation.paymasterAndData !== EMPTY_BYTES;\n\n const updatedMaxFeePerGas = add0x(\n updatedTransaction.txParams.maxFeePerGas as string,\n );\n\n const updatedMaxPriorityFeePerGas = add0x(\n updatedTransaction.txParams.maxPriorityFeePerGas as string,\n );\n\n let regenerateUserOperation = false;\n const previousMaxFeePerGas = userOperation.maxFeePerGas;\n const previousMaxPriorityFeePerGas = userOperation.maxPriorityFeePerGas;\n\n const gasFeesUpdated =\n previousMaxFeePerGas !== updatedMaxFeePerGas ||\n previousMaxPriorityFeePerGas !== updatedMaxPriorityFeePerGas;\n\n /**\n * true when we detect {@link getTransactionMetadata} has set the gas fees to zero\n * because the userOperation has a paymaster. This should not be mistaken for gas\n * fees being updated during the approval process.\n */\n const areGasFeesZeroBecauseOfPaymaster =\n usingPaymaster &&\n updatedMaxFeePerGas === VALUE_ZERO &&\n updatedMaxPriorityFeePerGas === VALUE_ZERO;\n\n if (gasFeesUpdated && !areGasFeesZeroBecauseOfPaymaster) {\n log('Gas fees updated during approval', {\n previousMaxFeePerGas,\n previousMaxPriorityFeePerGas,\n updatedMaxFeePerGas,\n updatedMaxPriorityFeePerGas,\n });\n\n userOperation.maxFeePerGas = updatedMaxFeePerGas;\n userOperation.maxPriorityFeePerGas = updatedMaxPriorityFeePerGas;\n\n regenerateUserOperation = usingPaymaster;\n }\n\n const previousData = request.data ?? EMPTY_BYTES;\n const updatedData = updatedTransaction.txParams.data ?? EMPTY_BYTES;\n\n if (previousData !== updatedData) {\n log('Data updated during approval', { previousData, updatedData });\n regenerateUserOperation = true;\n }\n\n const previousValue = request.value ?? VALUE_ZERO;\n const updatedValue = updatedTransaction.txParams.value ?? VALUE_ZERO;\n\n if (previousValue !== updatedValue) {\n log('Value updated during approval', { previousValue, updatedValue });\n regenerateUserOperation = true;\n }\n\n if (regenerateUserOperation) {\n const updatedRequest = {\n ...request,\n data: updatedData,\n maxFeePerGas: updatedMaxFeePerGas,\n maxPriorityFeePerGas: updatedMaxPriorityFeePerGas,\n value: updatedValue,\n };\n\n await this.#regenerateUserOperation({\n ...cache,\n request: updatedRequest,\n });\n }\n }\n\n async #regenerateUserOperation(cache: UserOperationCache) {\n log(\n 'Regenerating user operation as parameters were updated during approval',\n );\n\n const {\n options: { smartContractAccount },\n metadata,\n } = cache;\n\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n log('Regenerated user operation', metadata.userOperation);\n }\n}\n"]}
1
+ {"version":3,"file":"UserOperationController.mjs","sourceRoot":"","sources":["../src/UserOperationController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AcceptResultCallbacks,\n AddApprovalRequest,\n AddResult,\n} from '@metamask/approval-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { ApprovalType } from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n KeyringControllerPrepareUserOperationAction,\n KeyringControllerPatchUserOperationAction,\n KeyringControllerSignUserOperationAction,\n} from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerGetNetworkClientByIdAction,\n Provider,\n} from '@metamask/network-controller';\nimport { errorCodes } from '@metamask/rpc-errors';\nimport { determineTransactionType } from '@metamask/transaction-controller';\nimport type {\n TransactionMeta,\n TransactionParams,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport { add0x } from '@metamask/utils';\n// This package purposefully relies on Node's EventEmitter module.\n// eslint-disable-next-line import-x/no-nodejs-modules\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\nimport { v1 as random } from 'uuid';\n\nimport { ADDRESS_ZERO, EMPTY_BYTES, VALUE_ZERO } from './constants';\nimport { Bundler } from './helpers/Bundler';\nimport { PendingUserOperationTracker } from './helpers/PendingUserOperationTracker';\nimport { SnapSmartContractAccount } from './helpers/SnapSmartContractAccount';\nimport { projectLogger as log } from './logger';\nimport type {\n SmartContractAccount,\n UserOperation,\n UserOperationMetadata,\n} from './types';\nimport { UserOperationStatus } from './types';\nimport { updateGas } from './utils/gas';\nimport { updateGasFees } from './utils/gas-fees';\nimport { getTransactionMetadata } from './utils/transaction';\nimport {\n validateAddUserOperationOptions,\n validateAddUserOperationRequest,\n validatePrepareUserOperationResponse,\n validateSignUserOperationResponse,\n validateUpdateUserOperationResponse,\n} from './utils/validation';\n\nconst controllerName = 'UserOperationController';\n\nconst stateMetadata = {\n userOperations: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n userOperations: {},\n});\n\ntype Events = {\n 'transaction-updated': [metadata: TransactionMeta];\n 'user-operation-added': [metadata: UserOperationMetadata];\n 'user-operation-confirmed': [metadata: UserOperationMetadata];\n 'user-operation-failed': [metadata: UserOperationMetadata, error: Error];\n [key: `${string}:confirmed`]: [metadata: UserOperationMetadata];\n [key: `${string}:failed`]: [metadata: UserOperationMetadata, error: Error];\n};\n\nexport type UserOperationControllerEventEmitter = EventEmitter & {\n on<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n once<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): UserOperationControllerEventEmitter;\n\n emit<T extends keyof Events>(eventName: T, ...args: Events[T]): boolean;\n};\n\nexport type UserOperationControllerState = {\n userOperations: Record<string, UserOperationMetadata>;\n};\n\nexport type GetUserOperationState = ControllerGetStateAction<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n UserOperationControllerState\n>;\n\nexport type UserOperationControllerActions =\n | GetUserOperationState\n | NetworkControllerGetNetworkClientByIdAction\n | AddApprovalRequest\n | KeyringControllerPrepareUserOperationAction\n | KeyringControllerPatchUserOperationAction\n | KeyringControllerSignUserOperationAction;\n\nexport type UserOperationControllerEvents = UserOperationStateChange;\n\nexport type UserOperationControllerMessenger = Messenger<\n typeof controllerName,\n UserOperationControllerActions,\n UserOperationControllerEvents\n>;\n\nexport type UserOperationControllerOptions = {\n entrypoint: string;\n getGasFeeEstimates: () => Promise<GasFeeState>;\n interval?: number;\n messenger: UserOperationControllerMessenger;\n state?: Partial<UserOperationControllerState>;\n};\n\nexport type AddUserOperationRequest = {\n data?: string;\n from: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n to?: string;\n value?: string;\n};\n\nexport type AddUserOperationSwapOptions = {\n approvalTxId?: string;\n destinationTokenAddress?: string;\n destinationTokenAmount?: string;\n destinationTokenDecimals?: number;\n destinationTokenSymbol?: string;\n estimatedBaseFee?: string;\n sourceTokenAddress?: string;\n sourceTokenAmount?: string;\n sourceTokenDecimals?: number;\n sourceTokenSymbol?: string;\n swapAndSendRecipient?: string;\n swapMetaData?: Record<string, unknown>;\n swapTokenValue?: string;\n};\n\nexport type AddUserOperationOptions = {\n networkClientId: string;\n origin: string;\n requireApproval?: boolean;\n smartContractAccount?: SmartContractAccount;\n swaps?: AddUserOperationSwapOptions;\n type?: TransactionType;\n};\n\nexport type AddUserOperationResponse = {\n id: string;\n hash: () => Promise<string | undefined>;\n transactionHash: () => Promise<string | undefined>;\n};\n\n/**\n * All the objects related to a pending user operation in order to:\n * - Avoid duplicated effort to derive the same properties.\n * - Minimise duplicate arguments in private methods.\n */\ntype UserOperationCache = {\n chainId: string;\n metadata: UserOperationMetadata;\n options: AddUserOperationOptions & {\n smartContractAccount: SmartContractAccount;\n };\n provider: Provider;\n request: AddUserOperationRequest;\n transaction?: TransactionParams;\n};\n\n/**\n * Controller for creating and managing the life cycle of user operations.\n */\nexport class UserOperationController extends BaseController<\n typeof controllerName,\n UserOperationControllerState,\n UserOperationControllerMessenger\n> {\n hub: UserOperationControllerEventEmitter;\n\n readonly #entrypoint: string;\n\n readonly #getGasFeeEstimates: () => Promise<GasFeeState>;\n\n readonly #pendingUserOperationTracker: PendingUserOperationTracker;\n\n /**\n * Construct a UserOperationController instance.\n *\n * @param options - Controller options.\n * @param options.entrypoint - Address of the entrypoint contract.\n * @param options.getGasFeeEstimates - Callback to get gas fee estimates.\n * @param options.messenger - Restricted messenger for the user operation controller.\n * @param options.state - Initial state to set on the controller.\n */\n constructor({\n entrypoint,\n getGasFeeEstimates,\n messenger,\n state,\n }: UserOperationControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: { ...getDefaultState(), ...state },\n });\n\n this.hub = new EventEmitter() as UserOperationControllerEventEmitter;\n\n this.#entrypoint = entrypoint;\n this.#getGasFeeEstimates = getGasFeeEstimates;\n\n this.#pendingUserOperationTracker = new PendingUserOperationTracker({\n getUserOperations: () =>\n cloneDeep(Object.values(this.state.userOperations)),\n messenger,\n });\n\n this.#addPendingUserOperationTrackerListeners();\n }\n\n /**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationRequest(request);\n validateAddUserOperationOptions(options);\n\n return await this.#addUserOperation(request, options);\n }\n\n /**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\n async addUserOperationFromTransaction(\n transaction: TransactionParams,\n options: AddUserOperationOptions,\n ): Promise<AddUserOperationResponse> {\n validateAddUserOperationOptions(options);\n\n const { data, from, maxFeePerGas, maxPriorityFeePerGas, to, value } =\n transaction;\n\n const request: AddUserOperationRequest = {\n data: data === '' ? undefined : data,\n from,\n maxFeePerGas,\n maxPriorityFeePerGas,\n to,\n value,\n };\n\n validateAddUserOperationRequest(request);\n\n return await this.#addUserOperation(request, { ...options, transaction });\n }\n\n startPollingByNetworkClientId(networkClientId: string): string {\n return this.#pendingUserOperationTracker.startPolling({\n networkClientId,\n });\n }\n\n async #addUserOperation(\n request: AddUserOperationRequest,\n options: AddUserOperationOptions & { transaction?: TransactionParams },\n ): Promise<AddUserOperationResponse> {\n log('Adding user operation', { request, options });\n\n const {\n networkClientId,\n origin,\n smartContractAccount: requestSmartContractAccount,\n swaps,\n transaction,\n } = options;\n\n const { chainId, provider } = await this.#getProvider(networkClientId);\n\n const metadata = await this.#createMetadata(\n chainId,\n origin,\n transaction,\n swaps,\n );\n\n const smartContractAccount =\n requestSmartContractAccount ??\n new SnapSmartContractAccount(this.messenger);\n\n const cache: UserOperationCache = {\n chainId,\n metadata,\n options: { ...options, smartContractAccount },\n provider,\n request,\n transaction,\n };\n\n const { id } = metadata;\n let throwError = false;\n\n const hashValue = (async () => {\n try {\n return await this.#prepareAndSubmitUserOperation(cache);\n } catch (error) {\n this.#failUserOperation(metadata, error);\n\n if (throwError) {\n throw error;\n }\n\n return undefined;\n }\n })();\n\n const hash = async () => {\n throwError = true;\n return await hashValue;\n };\n\n const transactionHash = async () => {\n await hash();\n\n const { transactionHash: finalTransactionHash } =\n await this.#waitForConfirmation(metadata);\n\n return finalTransactionHash as string;\n };\n\n return {\n id,\n hash,\n transactionHash,\n };\n }\n\n async #prepareAndSubmitUserOperation(cache: UserOperationCache) {\n const { metadata, options } = cache;\n const { requireApproval, smartContractAccount } = options;\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n this.hub.emit('user-operation-added', metadata);\n\n if (requireApproval !== false) {\n resultCallbacks = await this.#approveUserOperation(cache);\n }\n\n await this.#signUserOperation(metadata, smartContractAccount);\n await this.#submitUserOperation(metadata);\n\n resultCallbacks?.success();\n\n return metadata.hash as string;\n } catch (error) {\n /* istanbul ignore next */\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n async #waitForConfirmation(\n metadata: UserOperationMetadata,\n ): Promise<UserOperationMetadata> {\n const { id, hash } = metadata;\n\n log('Waiting for confirmation', id, hash);\n\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:confirmed`, (finalMetadata) => {\n resolve(finalMetadata);\n });\n\n this.hub.once(`${id}:failed`, (_finalMetadata, error) => {\n reject(error);\n });\n });\n }\n\n async #createMetadata(\n chainId: string,\n origin: string,\n transaction?: TransactionParams,\n swaps?: AddUserOperationSwapOptions,\n ): Promise<UserOperationMetadata> {\n const metadata: UserOperationMetadata = {\n actualGasCost: null,\n actualGasUsed: null,\n baseFeePerGas: null,\n bundlerUrl: null,\n chainId,\n error: null,\n hash: null,\n id: random(),\n origin,\n status: UserOperationStatus.Unapproved,\n swapsMetadata: swaps\n ? {\n approvalTxId: swaps.approvalTxId ?? null,\n destinationTokenAddress: swaps.destinationTokenAddress ?? null,\n destinationTokenAmount: swaps.destinationTokenAmount ?? null,\n destinationTokenDecimals: swaps.destinationTokenDecimals ?? null,\n destinationTokenSymbol: swaps.destinationTokenSymbol ?? null,\n estimatedBaseFee: swaps.estimatedBaseFee ?? null,\n sourceTokenAddress: swaps.sourceTokenAddress ?? null,\n sourceTokenAmount: swaps.sourceTokenAmount ?? null,\n sourceTokenDecimals: swaps.sourceTokenDecimals ?? null,\n sourceTokenSymbol: swaps.sourceTokenSymbol ?? null,\n swapAndSendRecipient: swaps.swapAndSendRecipient ?? null,\n swapMetaData: (swaps.swapMetaData as Record<string, never>) ?? null,\n swapTokenValue: swaps.swapTokenValue ?? null,\n }\n : null,\n time: Date.now(),\n transactionHash: null,\n transactionParams: (transaction as Required<TransactionParams>) ?? null,\n transactionType: null,\n userFeeLevel: null,\n userOperation: this.#createEmptyUserOperation(transaction),\n };\n\n this.#updateMetadata(metadata);\n\n log('Added user operation', metadata.id);\n\n return metadata;\n }\n\n async #prepareUserOperation(cache: UserOperationCache) {\n const { chainId, metadata, options, provider, request, transaction } =\n cache;\n\n const { data, from, to, value } = request;\n const { id, transactionParams, userOperation } = metadata;\n const { smartContractAccount } = options;\n\n log('Preparing user operation', { id });\n\n const transactionType = await this.#getTransactionType(\n transaction,\n provider,\n options,\n );\n\n metadata.transactionType = transactionType ?? null;\n\n log('Determined transaction type', transactionType);\n\n await updateGasFees({\n getGasFeeEstimates: this.#getGasFeeEstimates,\n metadata,\n originalRequest: request,\n provider,\n transaction: transactionParams ?? undefined,\n });\n\n const response = await smartContractAccount.prepareUserOperation({\n chainId,\n data,\n from,\n to,\n value,\n });\n\n validatePrepareUserOperationResponse(response);\n\n const {\n bundler: bundlerUrl,\n callData,\n dummyPaymasterAndData,\n dummySignature,\n initCode,\n nonce,\n sender,\n } = response;\n\n userOperation.callData = callData;\n userOperation.initCode = initCode ?? EMPTY_BYTES;\n userOperation.nonce = nonce;\n userOperation.paymasterAndData = dummyPaymasterAndData ?? EMPTY_BYTES;\n userOperation.sender = sender;\n userOperation.signature = dummySignature ?? EMPTY_BYTES;\n\n metadata.bundlerUrl = bundlerUrl;\n\n await updateGas(metadata, response, this.#entrypoint);\n\n this.#updateMetadata(metadata);\n }\n\n async #addPaymasterData(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, userOperation, chainId } = metadata;\n\n log('Requesting paymaster data', { id });\n\n const response = await smartContractAccount.updateUserOperation({\n userOperation,\n chainId,\n });\n\n validateUpdateUserOperationResponse(response);\n\n userOperation.paymasterAndData = response.paymasterAndData ?? EMPTY_BYTES;\n if (response.callGasLimit) {\n userOperation.callGasLimit = response.callGasLimit;\n }\n if (response.preVerificationGas) {\n userOperation.preVerificationGas = response.preVerificationGas;\n }\n if (response.verificationGasLimit) {\n userOperation.verificationGasLimit = response.verificationGasLimit;\n }\n\n this.#updateMetadata(metadata);\n }\n\n async #approveUserOperation(cache: UserOperationCache) {\n log('Requesting approval');\n\n const { metadata } = cache;\n\n const { resultCallbacks, value } = await this.#requestApproval(metadata);\n const updatedTransaction = value?.txMeta;\n\n if (updatedTransaction) {\n await this.#updateUserOperationAfterApproval(cache, updatedTransaction);\n }\n\n metadata.status = UserOperationStatus.Approved;\n\n this.#updateMetadata(metadata);\n\n return resultCallbacks;\n }\n\n async #signUserOperation(\n metadata: UserOperationMetadata,\n smartContractAccount: SmartContractAccount,\n ) {\n const { id, chainId, userOperation } = metadata;\n\n log('Signing user operation', id, userOperation);\n\n const response = await smartContractAccount.signUserOperation({\n userOperation,\n chainId,\n });\n\n validateSignUserOperationResponse(response);\n\n const { signature } = response;\n\n userOperation.signature = signature;\n\n log('Signed user operation', signature);\n\n metadata.status = UserOperationStatus.Signed;\n\n this.#updateMetadata(metadata);\n }\n\n async #submitUserOperation(metadata: UserOperationMetadata) {\n const { userOperation } = metadata;\n\n log('Submitting user operation', userOperation);\n\n const bundler = new Bundler(metadata.bundlerUrl as string);\n\n const hash = await bundler.sendUserOperation(\n userOperation,\n this.#entrypoint,\n );\n\n metadata.hash = hash;\n metadata.status = UserOperationStatus.Submitted;\n\n this.#updateMetadata(metadata);\n }\n\n #failUserOperation(metadata: UserOperationMetadata, error: unknown) {\n const { id } = metadata;\n const rawError = error as Record<string, string>;\n\n log('User operation failed', id, error);\n\n metadata.error = {\n name: rawError.name,\n message: rawError.message,\n stack: rawError.stack,\n code: rawError.code,\n rpc: rawError.value,\n };\n\n metadata.status = UserOperationStatus.Failed;\n\n this.#updateMetadata(metadata);\n\n if (\n String(rawError.code) === String(errorCodes.provider.userRejectedRequest)\n ) {\n this.#deleteMetadata(id);\n }\n }\n\n #createEmptyUserOperation(transaction?: TransactionParams): UserOperation {\n return {\n callData: EMPTY_BYTES,\n callGasLimit: EMPTY_BYTES,\n initCode: EMPTY_BYTES,\n maxFeePerGas: transaction?.maxFeePerGas ?? EMPTY_BYTES,\n maxPriorityFeePerGas: transaction?.maxPriorityFeePerGas ?? EMPTY_BYTES,\n nonce: EMPTY_BYTES,\n paymasterAndData: EMPTY_BYTES,\n preVerificationGas: EMPTY_BYTES,\n sender: ADDRESS_ZERO,\n signature: EMPTY_BYTES,\n verificationGasLimit: EMPTY_BYTES,\n };\n }\n\n #updateMetadata(metadata: UserOperationMetadata) {\n const { id } = metadata;\n\n this.update((state) => {\n state.userOperations[id] = cloneDeep(metadata);\n });\n\n this.#updateTransaction(metadata);\n }\n\n #deleteMetadata(id: string) {\n this.update((state) => {\n delete state.userOperations[id];\n });\n }\n\n #updateTransaction(metadata: UserOperationMetadata) {\n if (!metadata.transactionParams) {\n return;\n }\n\n const transactionMetadata = getTransactionMetadata(metadata);\n\n this.hub.emit('transaction-updated', transactionMetadata);\n }\n\n #addPendingUserOperationTrackerListeners() {\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-confirmed',\n (metadata) => {\n log('In listener...');\n this.hub.emit('user-operation-confirmed', metadata);\n this.hub.emit(`${metadata.id}:confirmed`, metadata);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-failed',\n (metadata, error) => {\n this.hub.emit('user-operation-failed', metadata, error);\n this.hub.emit(`${metadata.id}:failed`, metadata, error);\n },\n );\n\n this.#pendingUserOperationTracker.hub.on(\n 'user-operation-updated',\n (metadata) => {\n this.#updateMetadata(metadata);\n },\n );\n }\n\n async #requestApproval(metadata: UserOperationMetadata) {\n const { id, origin } = metadata;\n const type = ApprovalType.Transaction;\n const requestData = { txId: id };\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData,\n expectsResult: true,\n },\n true, // Should display approval request to user\n )) as AddResult & { value?: { txMeta?: TransactionMeta } };\n }\n\n async #getTransactionType(\n transaction: TransactionParams | undefined,\n provider: Provider,\n options: AddUserOperationOptions,\n ): Promise<TransactionType | undefined> {\n if (!transaction) {\n return undefined;\n }\n\n if (options.type) {\n return options.type;\n }\n\n const ethQuery = new EthQuery(provider);\n const result = determineTransactionType(transaction, ethQuery);\n\n return (await result).type;\n }\n\n async #getProvider(\n networkClientId: string,\n ): Promise<{ provider: Provider; chainId: string }> {\n const { provider, configuration } = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n const { chainId } = configuration;\n\n return { provider, chainId };\n }\n\n async #updateUserOperationAfterApproval(\n cache: UserOperationCache,\n updatedTransaction: TransactionMeta,\n ) {\n log('Found updated transaction in approval', { updatedTransaction });\n\n const { metadata, request } = cache;\n\n const { userOperation } = metadata;\n const usingPaymaster = userOperation.paymasterAndData !== EMPTY_BYTES;\n\n const updatedMaxFeePerGas = add0x(\n updatedTransaction.txParams.maxFeePerGas as string,\n );\n\n const updatedMaxPriorityFeePerGas = add0x(\n updatedTransaction.txParams.maxPriorityFeePerGas as string,\n );\n\n let regenerateUserOperation = false;\n const previousMaxFeePerGas = userOperation.maxFeePerGas;\n const previousMaxPriorityFeePerGas = userOperation.maxPriorityFeePerGas;\n\n const gasFeesUpdated =\n previousMaxFeePerGas !== updatedMaxFeePerGas ||\n previousMaxPriorityFeePerGas !== updatedMaxPriorityFeePerGas;\n\n /**\n * true when we detect {@link getTransactionMetadata} has set the gas fees to zero\n * because the userOperation has a paymaster. This should not be mistaken for gas\n * fees being updated during the approval process.\n */\n const areGasFeesZeroBecauseOfPaymaster =\n usingPaymaster &&\n updatedMaxFeePerGas === VALUE_ZERO &&\n updatedMaxPriorityFeePerGas === VALUE_ZERO;\n\n if (gasFeesUpdated && !areGasFeesZeroBecauseOfPaymaster) {\n log('Gas fees updated during approval', {\n previousMaxFeePerGas,\n previousMaxPriorityFeePerGas,\n updatedMaxFeePerGas,\n updatedMaxPriorityFeePerGas,\n });\n\n userOperation.maxFeePerGas = updatedMaxFeePerGas;\n userOperation.maxPriorityFeePerGas = updatedMaxPriorityFeePerGas;\n\n regenerateUserOperation = usingPaymaster;\n }\n\n const previousData = request.data ?? EMPTY_BYTES;\n const updatedData = updatedTransaction.txParams.data ?? EMPTY_BYTES;\n\n if (previousData !== updatedData) {\n log('Data updated during approval', { previousData, updatedData });\n regenerateUserOperation = true;\n }\n\n const previousValue = request.value ?? VALUE_ZERO;\n const updatedValue = updatedTransaction.txParams.value ?? VALUE_ZERO;\n\n if (previousValue !== updatedValue) {\n log('Value updated during approval', { previousValue, updatedValue });\n regenerateUserOperation = true;\n }\n\n if (regenerateUserOperation) {\n const updatedRequest = {\n ...request,\n data: updatedData,\n maxFeePerGas: updatedMaxFeePerGas,\n maxPriorityFeePerGas: updatedMaxPriorityFeePerGas,\n value: updatedValue,\n };\n\n await this.#regenerateUserOperation({\n ...cache,\n request: updatedRequest,\n });\n }\n }\n\n async #regenerateUserOperation(cache: UserOperationCache) {\n log(\n 'Regenerating user operation as parameters were updated during approval',\n );\n\n const {\n options: { smartContractAccount },\n metadata,\n } = cache;\n\n await this.#prepareUserOperation(cache);\n await this.#addPaymasterData(metadata, smartContractAccount);\n\n log('Regenerated user operation', metadata.userOperation);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA0C;AAM1C,8CAAwB","sourcesContent":["export * from './UserOperationController';\nexport type {\n UserOperationControllerAddUserOperationAction,\n UserOperationControllerAddUserOperationFromTransactionAction,\n UserOperationControllerStartPollingByNetworkClientIdAction,\n} from './UserOperationController-method-action-types';\nexport * from './types';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA0C;AAC1C,8CAAwB","sourcesContent":["export * from './UserOperationController';\nexport * from './types';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "./UserOperationController.cjs";
2
- export type { UserOperationControllerAddUserOperationAction, UserOperationControllerAddUserOperationFromTransactionAction, UserOperationControllerStartPollingByNetworkClientIdAction, } from "./UserOperationController-method-action-types.cjs";
3
2
  export * from "./types.cjs";
4
3
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAC1C,YAAY,EACV,6CAA6C,EAC7C,4DAA4D,EAC5D,0DAA0D,GAC3D,0DAAsD;AACvD,4BAAwB"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAC1C,4BAAwB"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,3 @@
1
1
  export * from "./UserOperationController.mjs";
2
- export type { UserOperationControllerAddUserOperationAction, UserOperationControllerAddUserOperationFromTransactionAction, UserOperationControllerStartPollingByNetworkClientIdAction, } from "./UserOperationController-method-action-types.mjs";
3
2
  export * from "./types.mjs";
4
3
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAC1C,YAAY,EACV,6CAA6C,EAC7C,4DAA4D,EAC5D,0DAA0D,GAC3D,0DAAsD;AACvD,4BAAwB"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAC1C,4BAAwB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAM1C,4BAAwB","sourcesContent":["export * from './UserOperationController';\nexport type {\n UserOperationControllerAddUserOperationAction,\n UserOperationControllerAddUserOperationFromTransactionAction,\n UserOperationControllerStartPollingByNetworkClientIdAction,\n} from './UserOperationController-method-action-types';\nexport * from './types';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA0C;AAC1C,4BAAwB","sourcesContent":["export * from './UserOperationController';\nexport * from './types';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/user-operation-controller",
3
- "version": "41.0.3-preview-ab77ad36e",
3
+ "version": "41.0.3-preview-87d1261",
4
4
  "description": "Creates user operations and manages their life cycle",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -40,7 +40,6 @@
40
40
  "build:docs": "typedoc",
41
41
  "changelog:update": "../../scripts/update-changelog.sh @metamask/user-operation-controller",
42
42
  "changelog:validate": "../../scripts/validate-changelog.sh @metamask/user-operation-controller",
43
- "generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
44
43
  "prepare-manifest:preview": "../../scripts/prepare-preview-manifest.sh",
45
44
  "since-latest-release": "../../scripts/since-latest-release.sh",
46
45
  "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
@@ -75,7 +74,6 @@
75
74
  "deepmerge": "^4.2.2",
76
75
  "jest": "^29.7.0",
77
76
  "ts-jest": "^29.2.5",
78
- "tsx": "^4.20.5",
79
77
  "typedoc": "^0.25.13",
80
78
  "typedoc-plugin-missing-exports": "^2.0.0",
81
79
  "typescript": "~5.3.3"
@@ -1,7 +0,0 @@
1
- "use strict";
2
- /**
3
- * This file is auto generated by `scripts/generate-method-action-types.ts`.
4
- * Do not edit manually.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- //# sourceMappingURL=UserOperationController-method-action-types.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserOperationController-method-action-types.cjs","sourceRoot":"","sources":["../src/UserOperationController-method-action-types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { UserOperationController } from './UserOperationController';\n\n/**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\nexport type UserOperationControllerAddUserOperationAction = {\n type: `UserOperationController:addUserOperation`;\n handler: UserOperationController['addUserOperation'];\n};\n\n/**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\nexport type UserOperationControllerAddUserOperationFromTransactionAction = {\n type: `UserOperationController:addUserOperationFromTransaction`;\n handler: UserOperationController['addUserOperationFromTransaction'];\n};\n\n/**\n * Starts polling for pending user operations on the given network.\n *\n * @param networkClientId - The ID of the network client to poll.\n * @returns The polling token that can be used to stop polling.\n */\nexport type UserOperationControllerStartPollingByNetworkClientIdAction = {\n type: `UserOperationController:startPollingByNetworkClientId`;\n handler: UserOperationController['startPollingByNetworkClientId'];\n};\n\n/**\n * Union of all UserOperationController action types.\n */\nexport type UserOperationControllerMethodActions =\n | UserOperationControllerAddUserOperationAction\n | UserOperationControllerAddUserOperationFromTransactionAction\n | UserOperationControllerStartPollingByNetworkClientIdAction;\n"]}
@@ -1,57 +0,0 @@
1
- /**
2
- * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
- * Do not edit manually.
4
- */
5
- import type { UserOperationController } from "./UserOperationController.cjs";
6
- /**
7
- * Create and submit a user operation.
8
- *
9
- * @param request - Information required to create a user operation.
10
- * @param request.data - Data to include in the resulting transaction.
11
- * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.
12
- * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.
13
- * @param request.to - Destination address of the resulting transaction.
14
- * @param request.value - Value to include in the resulting transaction.
15
- * @param options - Configuration options when creating a user operation.
16
- * @param options.networkClientId - ID of the network client used to query the chain.
17
- * @param options.origin - Origin of the user operation, such as the hostname of a dApp.
18
- * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.
19
- * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.
20
- * @param options.swaps - Swap metadata to record with the user operation.
21
- * @param options.type - Type of the transaction.
22
- */
23
- export type UserOperationControllerAddUserOperationAction = {
24
- type: `UserOperationController:addUserOperation`;
25
- handler: UserOperationController['addUserOperation'];
26
- };
27
- /**
28
- * Create and submit a user operation equivalent to the provided transaction.
29
- *
30
- * @param transaction - Transaction to use as the basis for the user operation.
31
- * @param options - Configuration options when creating a user operation.
32
- * @param options.networkClientId - ID of the network client used to query the chain.
33
- * @param options.origin - Origin of the user operation, such as the hostname of a dApp.
34
- * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.
35
- * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.
36
- * @param options.swaps - Swap metadata to record with the user operation.
37
- * @param options.type - Type of the transaction.
38
- */
39
- export type UserOperationControllerAddUserOperationFromTransactionAction = {
40
- type: `UserOperationController:addUserOperationFromTransaction`;
41
- handler: UserOperationController['addUserOperationFromTransaction'];
42
- };
43
- /**
44
- * Starts polling for pending user operations on the given network.
45
- *
46
- * @param networkClientId - The ID of the network client to poll.
47
- * @returns The polling token that can be used to stop polling.
48
- */
49
- export type UserOperationControllerStartPollingByNetworkClientIdAction = {
50
- type: `UserOperationController:startPollingByNetworkClientId`;
51
- handler: UserOperationController['startPollingByNetworkClientId'];
52
- };
53
- /**
54
- * Union of all UserOperationController action types.
55
- */
56
- export type UserOperationControllerMethodActions = UserOperationControllerAddUserOperationAction | UserOperationControllerAddUserOperationFromTransactionAction | UserOperationControllerStartPollingByNetworkClientIdAction;
57
- //# sourceMappingURL=UserOperationController-method-action-types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserOperationController-method-action-types.d.cts","sourceRoot":"","sources":["../src/UserOperationController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAkC;AAEzE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,6CAA6C,GAAG;IAC1D,IAAI,EAAE,0CAA0C,CAAC;IACjD,OAAO,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,4DAA4D,GAAG;IACzE,IAAI,EAAE,yDAAyD,CAAC;IAChE,OAAO,EAAE,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,uBAAuB,CAAC,+BAA+B,CAAC,CAAC;CACnE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oCAAoC,GAC5C,6CAA6C,GAC7C,4DAA4D,GAC5D,0DAA0D,CAAC"}
@@ -1,57 +0,0 @@
1
- /**
2
- * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
- * Do not edit manually.
4
- */
5
- import type { UserOperationController } from "./UserOperationController.mjs";
6
- /**
7
- * Create and submit a user operation.
8
- *
9
- * @param request - Information required to create a user operation.
10
- * @param request.data - Data to include in the resulting transaction.
11
- * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.
12
- * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.
13
- * @param request.to - Destination address of the resulting transaction.
14
- * @param request.value - Value to include in the resulting transaction.
15
- * @param options - Configuration options when creating a user operation.
16
- * @param options.networkClientId - ID of the network client used to query the chain.
17
- * @param options.origin - Origin of the user operation, such as the hostname of a dApp.
18
- * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.
19
- * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.
20
- * @param options.swaps - Swap metadata to record with the user operation.
21
- * @param options.type - Type of the transaction.
22
- */
23
- export type UserOperationControllerAddUserOperationAction = {
24
- type: `UserOperationController:addUserOperation`;
25
- handler: UserOperationController['addUserOperation'];
26
- };
27
- /**
28
- * Create and submit a user operation equivalent to the provided transaction.
29
- *
30
- * @param transaction - Transaction to use as the basis for the user operation.
31
- * @param options - Configuration options when creating a user operation.
32
- * @param options.networkClientId - ID of the network client used to query the chain.
33
- * @param options.origin - Origin of the user operation, such as the hostname of a dApp.
34
- * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.
35
- * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.
36
- * @param options.swaps - Swap metadata to record with the user operation.
37
- * @param options.type - Type of the transaction.
38
- */
39
- export type UserOperationControllerAddUserOperationFromTransactionAction = {
40
- type: `UserOperationController:addUserOperationFromTransaction`;
41
- handler: UserOperationController['addUserOperationFromTransaction'];
42
- };
43
- /**
44
- * Starts polling for pending user operations on the given network.
45
- *
46
- * @param networkClientId - The ID of the network client to poll.
47
- * @returns The polling token that can be used to stop polling.
48
- */
49
- export type UserOperationControllerStartPollingByNetworkClientIdAction = {
50
- type: `UserOperationController:startPollingByNetworkClientId`;
51
- handler: UserOperationController['startPollingByNetworkClientId'];
52
- };
53
- /**
54
- * Union of all UserOperationController action types.
55
- */
56
- export type UserOperationControllerMethodActions = UserOperationControllerAddUserOperationAction | UserOperationControllerAddUserOperationFromTransactionAction | UserOperationControllerStartPollingByNetworkClientIdAction;
57
- //# sourceMappingURL=UserOperationController-method-action-types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserOperationController-method-action-types.d.mts","sourceRoot":"","sources":["../src/UserOperationController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAkC;AAEzE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,6CAA6C,GAAG;IAC1D,IAAI,EAAE,0CAA0C,CAAC;IACjD,OAAO,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,4DAA4D,GAAG;IACzE,IAAI,EAAE,yDAAyD,CAAC;IAChE,OAAO,EAAE,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;CACrE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,uBAAuB,CAAC,+BAA+B,CAAC,CAAC;CACnE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oCAAoC,GAC5C,6CAA6C,GAC7C,4DAA4D,GAC5D,0DAA0D,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
- * Do not edit manually.
4
- */
5
- export {};
6
- //# sourceMappingURL=UserOperationController-method-action-types.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserOperationController-method-action-types.mjs","sourceRoot":"","sources":["../src/UserOperationController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { UserOperationController } from './UserOperationController';\n\n/**\n * Create and submit a user operation.\n *\n * @param request - Information required to create a user operation.\n * @param request.data - Data to include in the resulting transaction.\n * @param request.maxFeePerGas - Maximum fee per gas to pay towards the transaction.\n * @param request.maxPriorityFeePerGas - Maximum priority fee per gas to pay towards the transaction.\n * @param request.to - Destination address of the resulting transaction.\n * @param request.value - Value to include in the resulting transaction.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\nexport type UserOperationControllerAddUserOperationAction = {\n type: `UserOperationController:addUserOperation`;\n handler: UserOperationController['addUserOperation'];\n};\n\n/**\n * Create and submit a user operation equivalent to the provided transaction.\n *\n * @param transaction - Transaction to use as the basis for the user operation.\n * @param options - Configuration options when creating a user operation.\n * @param options.networkClientId - ID of the network client used to query the chain.\n * @param options.origin - Origin of the user operation, such as the hostname of a dApp.\n * @param options.requireApproval - Whether to require user approval before submitting the user operation. Defaults to true.\n * @param options.smartContractAccount - Smart contract abstraction to provide the contract specific values such as call data and nonce. Defaults to the current snap account.\n * @param options.swaps - Swap metadata to record with the user operation.\n * @param options.type - Type of the transaction.\n */\nexport type UserOperationControllerAddUserOperationFromTransactionAction = {\n type: `UserOperationController:addUserOperationFromTransaction`;\n handler: UserOperationController['addUserOperationFromTransaction'];\n};\n\n/**\n * Starts polling for pending user operations on the given network.\n *\n * @param networkClientId - The ID of the network client to poll.\n * @returns The polling token that can be used to stop polling.\n */\nexport type UserOperationControllerStartPollingByNetworkClientIdAction = {\n type: `UserOperationController:startPollingByNetworkClientId`;\n handler: UserOperationController['startPollingByNetworkClientId'];\n};\n\n/**\n * Union of all UserOperationController action types.\n */\nexport type UserOperationControllerMethodActions =\n | UserOperationControllerAddUserOperationAction\n | UserOperationControllerAddUserOperationFromTransactionAction\n | UserOperationControllerStartPollingByNetworkClientIdAction;\n"]}