@metamask-previews/signature-controller 37.0.0-preview-7cfbb337 → 37.0.0-preview-bea9ae5
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/dist/SignatureController.cjs.map +1 -1
- package/dist/SignatureController.d.cts +3 -2
- package/dist/SignatureController.d.cts.map +1 -1
- package/dist/SignatureController.d.mts +3 -2
- package/dist/SignatureController.d.mts.map +1 -1
- package/dist/SignatureController.mjs.map +1 -1
- package/dist/utils/decoding-api.cjs.map +1 -1
- package/dist/utils/decoding-api.d.cts +1 -1
- package/dist/utils/decoding-api.d.cts.map +1 -1
- package/dist/utils/decoding-api.d.mts +1 -1
- package/dist/utils/decoding-api.d.mts.map +1 -1
- package/dist/utils/decoding-api.mjs.map +1 -1
- package/dist/utils/normalize.cjs.map +1 -1
- package/dist/utils/normalize.d.cts +1 -1
- package/dist/utils/normalize.d.cts.map +1 -1
- package/dist/utils/normalize.d.mts +1 -1
- package/dist/utils/normalize.d.mts.map +1 -1
- package/dist/utils/normalize.mjs.map +1 -1
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +1 -1
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +1 -1
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureController.cjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport {\n BaseController,\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { TraceCallback, TraceContext } from '@metamask/controller-utils';\nimport {\n ApprovalType,\n detectSIWE,\n ORIGIN_METAMASK,\n} from '@metamask/controller-utils';\nimport type {\n GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction,\n DecodedPermission,\n} from '@metamask/gator-permissions-controller';\nimport type {\n KeyringControllerSignMessageAction,\n KeyringControllerSignPersonalMessageAction,\n KeyringControllerSignTypedMessageAction,\n} from '@metamask/keyring-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport {\n SigningMethod,\n LogType,\n SigningStage,\n type AddLog,\n} from '@metamask/logging-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { Hex, Json } 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 { v1 as random } from 'uuid';\n\nimport { projectLogger as log } from './logger';\nimport { SignatureRequestStatus, SignatureRequestType } from './types';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n OriginalRequest,\n SignatureRequest,\n MessageParams,\n TypedSigningOptions,\n LegacyStateMessage,\n StateSIWEMessage,\n MessageParamsTypedData,\n} from './types';\nimport { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api';\nimport {\n decodePermissionFromRequest,\n isDelegationRequest,\n validateExecutionPermissionMetadata,\n} from './utils/delegations';\nimport {\n normalizePersonalMessageParams,\n normalizeTypedMessageParams,\n} from './utils/normalize';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgs: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessages: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessagesCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\n/** List of statuses that will not be updated and trigger the finished event. */\nconst FINAL_STATUSES: SignatureRequestStatus[] = [\n SignatureRequestStatus.Signed,\n SignatureRequestStatus.Rejected,\n SignatureRequestStatus.Errored,\n];\n\nexport type SignatureControllerState = {\n /**\n * Map of all signature requests including all types and statuses, keyed by ID.\n */\n signatureRequests: Record<string, SignatureRequest>;\n\n /**\n * Map of personal messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, LegacyStateMessage>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, LegacyStateMessage>;\n\n /**\n * Number of unapproved personal messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AccountsControllerGetStateAction\n | AddApprovalRequest\n | AddLog\n | GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction\n | NetworkControllerGetNetworkClientByIdAction\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction;\n\nexport type GetSignatureState = ControllerGetStateAction<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = Messenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * Restricted messenger required by the signature controller.\n */\n messenger: SignatureControllerMessenger;\n\n /**\n * @deprecated No longer in use.\n */\n securityProviderRequest?: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestData: any,\n methodName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => Promise<any>;\n\n /**\n * URL of API to retrieve decoding data for typed requests.\n */\n decodingApiUrl?: string;\n\n /**\n * Function to check if decoding signature request is enabled\n */\n isDecodeSignatureRequestEnabled?: () => boolean;\n\n /**\n * Initial state of the controller.\n */\n state?: SignatureControllerState;\n\n /**\n * Callback to record the duration of code.\n */\n trace?: TraceCallback;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseController<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n readonly #decodingApiUrl?: string;\n\n readonly #isDecodeSignatureRequestEnabled?: () => boolean;\n\n readonly #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.decodingApiUrl - Api used to get decoded data for permits.\n * @param options.isDecodeSignatureRequestEnabled - Function to check is decoding signature request is enabled.\n * @param options.messenger - The restricted messenger for the sign controller.\n * @param options.state - Initial state to set on this controller.\n * @param options.trace - Callback to generate trace information.\n */\n constructor({\n decodingApiUrl,\n isDecodeSignatureRequestEnabled,\n messenger,\n state,\n trace,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: {\n ...getDefaultState(),\n ...state,\n },\n });\n\n this.hub = new EventEmitter();\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#decodingApiUrl = decodingApiUrl;\n this.#isDecodeSignatureRequestEnabled = isDecodeSignatureRequestEnabled;\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.state.unapprovedPersonalMsgCount;\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.state.unapprovedTypedMessagesCount;\n }\n\n /**\n * A getter for returning all messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The object containing all messages.\n */\n get messages(): { [id: string]: SignatureRequest } {\n return this.state.signatureRequests;\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.#updateState((state) => {\n Object.assign(state, getDefaultState());\n });\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n const unapprovedSignatureRequests = Object.values(\n this.state.signatureRequests,\n ).filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n );\n\n for (const metadata of unapprovedSignatureRequests) {\n this.#rejectSignatureRequest(metadata.id, reason);\n }\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#updateState((state) => {\n Object.values(state.signatureRequests)\n .filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n )\n .forEach((metadata) => delete state.signatureRequests[metadata.id]);\n });\n }\n\n /**\n * Called when a dApp uses the personal_sign method.\n * We currently provide personal_sign mostly for legacy dApps.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: MessageParamsPersonal,\n request: OriginalRequest,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validatePersonalSignatureRequest(messageParams);\n\n const normalizedMessageParams =\n normalizePersonalMessageParams(messageParams);\n\n normalizedMessageParams.siwe = detectSIWE(\n messageParams,\n ) as StateSIWEMessage;\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.PersonalSign,\n approvalType: ApprovalType.PersonalSign,\n traceContext: options.traceContext,\n });\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP-712.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param versionString - The version of the signTypedData request.\n * @param signingOptions - Options for signing the typed message.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: MessageParamsTyped,\n request: OriginalRequest,\n versionString: string,\n signingOptions?: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n const chainId = this.#getChainId(request);\n const internalAccounts = this.#getInternalAccounts();\n\n const version = versionString as SignTypedDataVersion;\n\n const decodedPermission = this.#tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n });\n\n validateTypedSignatureRequest({\n currentChainId: chainId,\n internalAccounts,\n messageData: messageParams,\n request,\n version,\n decodedPermission,\n });\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version,\n );\n\n return this.#processSignatureRequest({\n approvalType: ApprovalType.EthSignTypedData,\n messageParams: normalizedMessageParams,\n request,\n signingOptions,\n traceContext: options.traceContext,\n type: SignatureRequestType.TypedSign,\n version,\n decodedPermission,\n });\n }\n\n /**\n * Attempts to decoded a permission if the request is a delegation request.\n *\n * @param args - The arguments for the method.\n * @param args.messageParams - The message parameters.\n * @param args.version - The version of the signTypedData request.\n * @param args.request - The original request.\n *\n * @returns The decoded permission if the request is a delegation request.\n */\n #tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n }: {\n messageParams: MessageParamsTyped;\n version: SignTypedDataVersion;\n request: OriginalRequest;\n }): DecodedPermission | undefined {\n let data: MessageParamsTypedData;\n try {\n data = this.#parseTypedData(messageParams, version)\n .data as MessageParamsTypedData;\n } catch (error) {\n log('Failed to parse typed data', error);\n return undefined;\n }\n\n const isRequestDelegationRequest = isDelegationRequest(data);\n\n if (\n !isRequestDelegationRequest ||\n !request.origin ||\n version !== SignTypedDataVersion.V4\n ) {\n return undefined;\n }\n\n let decodedPermission: DecodedPermission | undefined;\n\n try {\n validateExecutionPermissionMetadata(data);\n\n decodedPermission = decodePermissionFromRequest({\n origin: request.origin,\n data,\n messenger: this.messenger,\n });\n } catch (error) {\n // we ignore this error, because it simply means the request could not be\n // decoded into a permission in which case we will not set a\n // decodedPermission on the metadata, and may fail validation if the\n // request is invalid.\n log('Failed to decode permission', (error as Error).message);\n }\n\n return decodedPermission;\n }\n\n /**\n * Provide a signature for a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `signed`.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param signature - The signature to provide.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status =\n SignatureRequestStatus.Signed as SignatureRequestStatus;\n });\n }\n\n /**\n * Set custom metadata on a signature request.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param metadata - The custom metadata to set.\n */\n setMessageMetadata(signatureRequestId: string, metadata: Json) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.metadata = metadata;\n });\n }\n\n /**\n * Reject a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `rejected`.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setDeferredSignError(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setTypedMessageInProgress(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.InProgress;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setPersonalMessageInProgress(signatureRequestId: string) {\n this.setTypedMessageInProgress(signatureRequestId);\n }\n\n #parseTypedData(\n messageParams: MessageParamsTyped,\n version?: SignTypedDataVersion,\n ): MessageParamsTyped {\n if (\n ![SignTypedDataVersion.V3, SignTypedDataVersion.V4].includes(\n version as SignTypedDataVersion,\n ) ||\n typeof messageParams.data !== 'string'\n ) {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n\n async #processSignatureRequest({\n chainId: optionChainId,\n messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n decodedPermission,\n }: {\n chainId?: Hex;\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n decodedPermission?: DecodedPermission;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n const chainId = optionChainId ?? this.#getChainId(request);\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const metadata = this.#addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n });\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n let approveOrSignError: unknown;\n\n const finalMetadataPromise = this.#waitForFinished(metadata.id);\n this.#decodePermitSignatureRequest(metadata.id, request, chainId);\n\n try {\n resultCallbacks = await this.#processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n });\n\n await this.#approveAndSignRequest(metadata, traceContext);\n } catch (error) {\n log('Signature request failed', (error as Error).message);\n approveOrSignError = error;\n }\n\n const finalMetadata = await finalMetadataPromise;\n\n const {\n error,\n id,\n messageParams: finalMessageParams,\n rawSig: signature,\n } = finalMetadata;\n\n switch (finalMetadata.status) {\n case SignatureRequestStatus.Signed:\n log('Signature request finished', { id, signature });\n this.#addLog(type, version, SigningStage.Signed, finalMessageParams);\n resultCallbacks?.success(signature);\n return finalMetadata.rawSig as string;\n\n case SignatureRequestStatus.Rejected:\n /* istanbul ignore next */\n const rejectedError = (approveOrSignError ??\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n )) as Error;\n\n resultCallbacks?.error(rejectedError);\n throw rejectedError;\n\n case SignatureRequestStatus.Errored:\n /* istanbul ignore next */\n const erroredError = (approveOrSignError ??\n new Error(`MetaMask ${type} Signature: ${error as string}`)) as Error;\n\n resultCallbacks?.error(erroredError);\n throw erroredError;\n\n /* istanbul ignore next */\n default:\n throw new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n finalMessageParams,\n )}`,\n );\n }\n }\n\n #addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n }: {\n chainId: Hex;\n messageParams: MessageParams;\n request?: OriginalRequest;\n signingOptions?: TypedSigningOptions;\n type: SignatureRequestType;\n version?: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n }): SignatureRequest {\n const id = random();\n const origin = request?.origin ?? messageParams.origin;\n const requestId = request?.id;\n const securityAlertResponse = request?.securityAlertResponse;\n const networkClientId = request?.networkClientId;\n\n const finalMessageParams = {\n ...messageParams,\n metamaskId: id,\n origin,\n requestId,\n version,\n };\n\n const metadata = {\n chainId,\n id,\n messageParams: finalMessageParams,\n networkClientId,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n decodedPermission,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n log('Added signature request', metadata);\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n return metadata;\n }\n\n async #processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n }: {\n approvalType: ApprovalType;\n metadata: SignatureRequest;\n request?: OriginalRequest;\n traceContext?: TraceContext;\n }): Promise<AcceptResultCallbacks | undefined> {\n const { id, messageParams, type, version } = metadata;\n\n try {\n const acceptResult = await this.#trace(\n { name: 'Await Approval', parentContext: traceContext },\n (context) =>\n this.#requestApproval(metadata, approvalType, {\n traceContext: context,\n actionId: request?.id?.toString(),\n }),\n );\n\n return acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', { id, error });\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(id);\n\n throw error;\n }\n }\n\n async #approveAndSignRequest(\n metadata: SignatureRequest,\n traceContext?: TraceContext,\n ) {\n const { id } = metadata;\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Approved;\n });\n\n await this.#trace({ name: 'Sign', parentContext: traceContext }, () =>\n this.#signRequest(metadata),\n );\n }\n\n async #signRequest(metadata: SignatureRequest) {\n const { id, messageParams, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messenger.call(\n 'KeyringController:signPersonalMessage',\n // Keyring controller temporarily using message manager types.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageParams as any,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(messageParams, metadata.version)\n : messageParams;\n\n signature = await this.messenger.call(\n 'KeyringController:signTypedMessage',\n finalRequest,\n metadata.version as SignTypedDataVersion,\n );\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(`Unknown signature request type: ${type as string}`);\n }\n\n this.hub.emit(`${type}:signed`, { signature, messageId: id });\n\n if (messageParams.deferSetAsSigned) {\n return;\n }\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#errorSignatureRequest(id, error.message);\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw error;\n }\n }\n\n #errorSignatureRequest(id: string, error: string) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error;\n });\n }\n\n #rejectSignatureRequest(signatureRequestId: string, reason?: string) {\n if (reason) {\n const metadata = this.state.signatureRequests[signatureRequestId];\n this.hub.emit('cancelWithReason', { metadata, reason });\n }\n\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n async #waitForFinished(id: string): Promise<SignatureRequest> {\n return new Promise((resolve) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n resolve(metadata);\n });\n });\n }\n\n async #requestApproval(\n metadata: SignatureRequest,\n type: ApprovalType,\n {\n traceContext,\n actionId,\n }: { traceContext?: TraceContext; actionId?: string },\n ): Promise<AddResult> {\n const { id, messageParams } = metadata;\n const origin = messageParams.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...messageParams },\n expectsResult: true,\n },\n true,\n )) as Promise<AddResult>;\n }\n\n #updateMetadata(\n id: string,\n callback: (metadata: SignatureRequest) => void,\n ): SignatureRequest {\n let statusChanged = false;\n\n const { nextState } = this.#updateState((state) => {\n const metadata = state.signatureRequests[id];\n\n if (!metadata) {\n throw new Error(`Signature request with id ${id} not found`);\n }\n\n const originalStatus = metadata.status;\n\n callback(metadata);\n\n statusChanged = metadata.status !== originalStatus;\n });\n\n const updatedMetadata = nextState.signatureRequests[id];\n\n if (\n statusChanged &&\n FINAL_STATUSES.includes(updatedMetadata.status as SignatureRequestStatus)\n ) {\n this.hub.emit(`${id}:finished`, updatedMetadata);\n }\n\n return updatedMetadata;\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(state.signatureRequests).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n ) as unknown as SignatureRequest[];\n\n const personalSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n const typedSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedPersonalMsgs = personalSignMessages as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedTypedMessages = typedSignMessages as any;\n\n state.unapprovedPersonalMsgCount =\n Object.values(personalSignMessages).length;\n\n state.unapprovedTypedMessagesCount =\n Object.values(typedSignMessages).length;\n });\n }\n\n #generateLegacyState(\n signatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ): Record<string, LegacyStateMessage> {\n return signatureRequests\n .filter((request) => request.type === type)\n .reduce<Record<string, LegacyStateMessage>>(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.messageParams },\n }),\n {},\n );\n }\n\n #addLog(\n signatureRequestType: SignatureRequestType,\n version: SignTypedDataVersion | undefined,\n stage: SigningStage,\n signingData: MessageParams,\n ): void {\n const signingMethod = this.#getSignTypeForLogger(\n signatureRequestType,\n version,\n );\n\n this.messenger.call('LoggingController:add', {\n type: LogType.EthSignLog,\n data: {\n signingMethod,\n stage,\n signingData,\n },\n });\n }\n\n #getSignTypeForLogger(\n requestType: SignatureRequestType,\n version?: SignTypedDataVersion,\n ): SigningMethod {\n if (requestType === SignatureRequestType.PersonalSign) {\n return SigningMethod.PersonalSign;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V3\n ) {\n return SigningMethod.EthSignTypedDataV3;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V4\n ) {\n return SigningMethod.EthSignTypedDataV4;\n }\n\n return SigningMethod.EthSignTypedData;\n }\n\n #getChainId(request: OriginalRequest): Hex {\n const { networkClientId } = request;\n\n if (!networkClientId) {\n throw new Error('Network client ID not found in request');\n }\n\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkClient.configuration.chainId;\n }\n\n #decodePermitSignatureRequest(\n signatureRequestId: string,\n request: OriginalRequest,\n chainId: string,\n ) {\n if (!this.#isDecodeSignatureRequestEnabled?.() || !this.#decodingApiUrl) {\n return;\n }\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingLoading = true;\n });\n decodeSignature(request, chainId, this.#decodingApiUrl)\n .then((decodingData) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = decodingData;\n draftMetadata.decodingLoading = false;\n }),\n )\n .catch((error) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = {\n stateChanges: null,\n error: {\n message: (error as unknown as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n draftMetadata.decodingLoading = false;\n }),\n );\n }\n\n #getInternalAccounts(): Hex[] {\n const state = this.messenger.call('AccountsController:getState');\n\n /* istanbul ignore next */\n return Object.values(state.internalAccounts?.accounts ?? {})\n .filter((account) => account.type === 'eip155:eoa')\n .map((account) => account.address as Hex);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SignatureController.cjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\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 type { TraceCallback, TraceContext } from '@metamask/controller-utils';\nimport {\n ApprovalType,\n detectSIWE,\n ORIGIN_METAMASK,\n} from '@metamask/controller-utils';\nimport type {\n GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction,\n DecodedPermission,\n} from '@metamask/gator-permissions-controller';\nimport type {\n KeyringControllerSignMessageAction,\n KeyringControllerSignPersonalMessageAction,\n KeyringControllerSignTypedMessageAction,\n} from '@metamask/keyring-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport {\n SigningMethod,\n LogType,\n SigningStage,\n} from '@metamask/logging-controller';\nimport type { AddLog } from '@metamask/logging-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { Hex, Json } 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 { v1 as random } from 'uuid';\n\nimport { projectLogger as log } from './logger';\nimport { SignatureRequestStatus, SignatureRequestType } from './types';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n OriginalRequest,\n SignatureRequest,\n MessageParams,\n TypedSigningOptions,\n LegacyStateMessage,\n StateSIWEMessage,\n MessageParamsTypedData,\n} from './types';\nimport { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api';\nimport {\n decodePermissionFromRequest,\n isDelegationRequest,\n validateExecutionPermissionMetadata,\n} from './utils/delegations';\nimport {\n normalizePersonalMessageParams,\n normalizeTypedMessageParams,\n} from './utils/normalize';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgs: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessages: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessagesCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\n/** List of statuses that will not be updated and trigger the finished event. */\nconst FINAL_STATUSES: SignatureRequestStatus[] = [\n SignatureRequestStatus.Signed,\n SignatureRequestStatus.Rejected,\n SignatureRequestStatus.Errored,\n];\n\nexport type SignatureControllerState = {\n /**\n * Map of all signature requests including all types and statuses, keyed by ID.\n */\n signatureRequests: Record<string, SignatureRequest>;\n\n /**\n * Map of personal messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, LegacyStateMessage>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, LegacyStateMessage>;\n\n /**\n * Number of unapproved personal messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AccountsControllerGetStateAction\n | AddApprovalRequest\n | AddLog\n | GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction\n | NetworkControllerGetNetworkClientByIdAction\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction;\n\nexport type GetSignatureState = ControllerGetStateAction<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = Messenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * Restricted messenger required by the signature controller.\n */\n messenger: SignatureControllerMessenger;\n\n /**\n * @deprecated No longer in use.\n */\n securityProviderRequest?: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestData: any,\n methodName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => Promise<any>;\n\n /**\n * URL of API to retrieve decoding data for typed requests.\n */\n decodingApiUrl?: string;\n\n /**\n * Function to check if decoding signature request is enabled\n */\n isDecodeSignatureRequestEnabled?: () => boolean;\n\n /**\n * Initial state of the controller.\n */\n state?: SignatureControllerState;\n\n /**\n * Callback to record the duration of code.\n */\n trace?: TraceCallback;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseController<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n readonly #decodingApiUrl?: string;\n\n readonly #isDecodeSignatureRequestEnabled?: () => boolean;\n\n readonly #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.decodingApiUrl - Api used to get decoded data for permits.\n * @param options.isDecodeSignatureRequestEnabled - Function to check is decoding signature request is enabled.\n * @param options.messenger - The restricted messenger for the sign controller.\n * @param options.state - Initial state to set on this controller.\n * @param options.trace - Callback to generate trace information.\n */\n constructor({\n decodingApiUrl,\n isDecodeSignatureRequestEnabled,\n messenger,\n state,\n trace,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: {\n ...getDefaultState(),\n ...state,\n },\n });\n\n this.hub = new EventEmitter();\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#decodingApiUrl = decodingApiUrl;\n this.#isDecodeSignatureRequestEnabled = isDecodeSignatureRequestEnabled;\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.state.unapprovedPersonalMsgCount;\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.state.unapprovedTypedMessagesCount;\n }\n\n /**\n * A getter for returning all messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The object containing all messages.\n */\n get messages(): { [id: string]: SignatureRequest } {\n return this.state.signatureRequests;\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.#updateState((state) => {\n Object.assign(state, getDefaultState());\n });\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n const unapprovedSignatureRequests = Object.values(\n this.state.signatureRequests,\n ).filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n );\n\n for (const metadata of unapprovedSignatureRequests) {\n this.#rejectSignatureRequest(metadata.id, reason);\n }\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#updateState((state) => {\n Object.values(state.signatureRequests)\n .filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n )\n .forEach((metadata) => delete state.signatureRequests[metadata.id]);\n });\n }\n\n /**\n * Called when a dApp uses the personal_sign method.\n * We currently provide personal_sign mostly for legacy dApps.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: MessageParamsPersonal,\n request: OriginalRequest,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validatePersonalSignatureRequest(messageParams);\n\n const normalizedMessageParams =\n normalizePersonalMessageParams(messageParams);\n\n normalizedMessageParams.siwe = detectSIWE(\n messageParams,\n ) as StateSIWEMessage;\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.PersonalSign,\n approvalType: ApprovalType.PersonalSign,\n traceContext: options.traceContext,\n });\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP-712.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param versionString - The version of the signTypedData request.\n * @param signingOptions - Options for signing the typed message.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: MessageParamsTyped,\n request: OriginalRequest,\n versionString: string,\n signingOptions?: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n const chainId = this.#getChainId(request);\n const internalAccounts = this.#getInternalAccounts();\n\n const version = versionString as SignTypedDataVersion;\n\n const decodedPermission = this.#tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n });\n\n validateTypedSignatureRequest({\n currentChainId: chainId,\n internalAccounts,\n messageData: messageParams,\n request,\n version,\n decodedPermission,\n });\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version,\n );\n\n return this.#processSignatureRequest({\n approvalType: ApprovalType.EthSignTypedData,\n messageParams: normalizedMessageParams,\n request,\n signingOptions,\n traceContext: options.traceContext,\n type: SignatureRequestType.TypedSign,\n version,\n decodedPermission,\n });\n }\n\n /**\n * Attempts to decoded a permission if the request is a delegation request.\n *\n * @param args - The arguments for the method.\n * @param args.messageParams - The message parameters.\n * @param args.version - The version of the signTypedData request.\n * @param args.request - The original request.\n *\n * @returns The decoded permission if the request is a delegation request.\n */\n #tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n }: {\n messageParams: MessageParamsTyped;\n version: SignTypedDataVersion;\n request: OriginalRequest;\n }): DecodedPermission | undefined {\n let data: MessageParamsTypedData;\n try {\n data = this.#parseTypedData(messageParams, version)\n .data as MessageParamsTypedData;\n } catch (error) {\n log('Failed to parse typed data', error);\n return undefined;\n }\n\n const isRequestDelegationRequest = isDelegationRequest(data);\n\n if (\n !isRequestDelegationRequest ||\n !request.origin ||\n version !== SignTypedDataVersion.V4\n ) {\n return undefined;\n }\n\n let decodedPermission: DecodedPermission | undefined;\n\n try {\n validateExecutionPermissionMetadata(data);\n\n decodedPermission = decodePermissionFromRequest({\n origin: request.origin,\n data,\n messenger: this.messenger,\n });\n } catch (error) {\n // we ignore this error, because it simply means the request could not be\n // decoded into a permission in which case we will not set a\n // decodedPermission on the metadata, and may fail validation if the\n // request is invalid.\n log('Failed to decode permission', (error as Error).message);\n }\n\n return decodedPermission;\n }\n\n /**\n * Provide a signature for a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `signed`.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param signature - The signature to provide.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status =\n SignatureRequestStatus.Signed as SignatureRequestStatus;\n });\n }\n\n /**\n * Set custom metadata on a signature request.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param metadata - The custom metadata to set.\n */\n setMessageMetadata(signatureRequestId: string, metadata: Json) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.metadata = metadata;\n });\n }\n\n /**\n * Reject a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `rejected`.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setDeferredSignError(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setTypedMessageInProgress(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.InProgress;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setPersonalMessageInProgress(signatureRequestId: string) {\n this.setTypedMessageInProgress(signatureRequestId);\n }\n\n #parseTypedData(\n messageParams: MessageParamsTyped,\n version?: SignTypedDataVersion,\n ): MessageParamsTyped {\n if (\n ![SignTypedDataVersion.V3, SignTypedDataVersion.V4].includes(\n version as SignTypedDataVersion,\n ) ||\n typeof messageParams.data !== 'string'\n ) {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n\n async #processSignatureRequest({\n chainId: optionChainId,\n messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n decodedPermission,\n }: {\n chainId?: Hex;\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n decodedPermission?: DecodedPermission;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n const chainId = optionChainId ?? this.#getChainId(request);\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const metadata = this.#addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n });\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n let approveOrSignError: unknown;\n\n const finalMetadataPromise = this.#waitForFinished(metadata.id);\n this.#decodePermitSignatureRequest(metadata.id, request, chainId);\n\n try {\n resultCallbacks = await this.#processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n });\n\n await this.#approveAndSignRequest(metadata, traceContext);\n } catch (error) {\n log('Signature request failed', (error as Error).message);\n approveOrSignError = error;\n }\n\n const finalMetadata = await finalMetadataPromise;\n\n const {\n error,\n id,\n messageParams: finalMessageParams,\n rawSig: signature,\n } = finalMetadata;\n\n switch (finalMetadata.status) {\n case SignatureRequestStatus.Signed:\n log('Signature request finished', { id, signature });\n this.#addLog(type, version, SigningStage.Signed, finalMessageParams);\n resultCallbacks?.success(signature);\n return finalMetadata.rawSig as string;\n\n case SignatureRequestStatus.Rejected:\n /* istanbul ignore next */\n const rejectedError = (approveOrSignError ??\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n )) as Error;\n\n resultCallbacks?.error(rejectedError);\n throw rejectedError;\n\n case SignatureRequestStatus.Errored:\n /* istanbul ignore next */\n const erroredError = (approveOrSignError ??\n new Error(`MetaMask ${type} Signature: ${error as string}`)) as Error;\n\n resultCallbacks?.error(erroredError);\n throw erroredError;\n\n /* istanbul ignore next */\n default:\n throw new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n finalMessageParams,\n )}`,\n );\n }\n }\n\n #addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n }: {\n chainId: Hex;\n messageParams: MessageParams;\n request?: OriginalRequest;\n signingOptions?: TypedSigningOptions;\n type: SignatureRequestType;\n version?: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n }): SignatureRequest {\n const id = random();\n const origin = request?.origin ?? messageParams.origin;\n const requestId = request?.id;\n const securityAlertResponse = request?.securityAlertResponse;\n const networkClientId = request?.networkClientId;\n\n const finalMessageParams = {\n ...messageParams,\n metamaskId: id,\n origin,\n requestId,\n version,\n };\n\n const metadata = {\n chainId,\n id,\n messageParams: finalMessageParams,\n networkClientId,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n decodedPermission,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n log('Added signature request', metadata);\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n return metadata;\n }\n\n async #processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n }: {\n approvalType: ApprovalType;\n metadata: SignatureRequest;\n request?: OriginalRequest;\n traceContext?: TraceContext;\n }): Promise<AcceptResultCallbacks | undefined> {\n const { id, messageParams, type, version } = metadata;\n\n try {\n const acceptResult = await this.#trace(\n { name: 'Await Approval', parentContext: traceContext },\n (context) =>\n this.#requestApproval(metadata, approvalType, {\n traceContext: context,\n actionId: request?.id?.toString(),\n }),\n );\n\n return acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', { id, error });\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(id);\n\n throw error;\n }\n }\n\n async #approveAndSignRequest(\n metadata: SignatureRequest,\n traceContext?: TraceContext,\n ) {\n const { id } = metadata;\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Approved;\n });\n\n await this.#trace({ name: 'Sign', parentContext: traceContext }, () =>\n this.#signRequest(metadata),\n );\n }\n\n async #signRequest(metadata: SignatureRequest) {\n const { id, messageParams, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messenger.call(\n 'KeyringController:signPersonalMessage',\n // Keyring controller temporarily using message manager types.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageParams as any,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(messageParams, metadata.version)\n : messageParams;\n\n signature = await this.messenger.call(\n 'KeyringController:signTypedMessage',\n finalRequest,\n metadata.version as SignTypedDataVersion,\n );\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(`Unknown signature request type: ${type as string}`);\n }\n\n this.hub.emit(`${type}:signed`, { signature, messageId: id });\n\n if (messageParams.deferSetAsSigned) {\n return;\n }\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#errorSignatureRequest(id, error.message);\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw error;\n }\n }\n\n #errorSignatureRequest(id: string, error: string) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error;\n });\n }\n\n #rejectSignatureRequest(signatureRequestId: string, reason?: string) {\n if (reason) {\n const metadata = this.state.signatureRequests[signatureRequestId];\n this.hub.emit('cancelWithReason', { metadata, reason });\n }\n\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n async #waitForFinished(id: string): Promise<SignatureRequest> {\n return new Promise((resolve) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n resolve(metadata);\n });\n });\n }\n\n async #requestApproval(\n metadata: SignatureRequest,\n type: ApprovalType,\n {\n traceContext,\n actionId,\n }: { traceContext?: TraceContext; actionId?: string },\n ): Promise<AddResult> {\n const { id, messageParams } = metadata;\n const origin = messageParams.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...messageParams },\n expectsResult: true,\n },\n true,\n )) as Promise<AddResult>;\n }\n\n #updateMetadata(\n id: string,\n callback: (metadata: SignatureRequest) => void,\n ): SignatureRequest {\n let statusChanged = false;\n\n const { nextState } = this.#updateState((state) => {\n const metadata = state.signatureRequests[id];\n\n if (!metadata) {\n throw new Error(`Signature request with id ${id} not found`);\n }\n\n const originalStatus = metadata.status;\n\n callback(metadata);\n\n statusChanged = metadata.status !== originalStatus;\n });\n\n const updatedMetadata = nextState.signatureRequests[id];\n\n if (\n statusChanged &&\n FINAL_STATUSES.includes(updatedMetadata.status as SignatureRequestStatus)\n ) {\n this.hub.emit(`${id}:finished`, updatedMetadata);\n }\n\n return updatedMetadata;\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(state.signatureRequests).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n ) as unknown as SignatureRequest[];\n\n const personalSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n const typedSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedPersonalMsgs = personalSignMessages as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedTypedMessages = typedSignMessages as any;\n\n state.unapprovedPersonalMsgCount =\n Object.values(personalSignMessages).length;\n\n state.unapprovedTypedMessagesCount =\n Object.values(typedSignMessages).length;\n });\n }\n\n #generateLegacyState(\n signatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ): Record<string, LegacyStateMessage> {\n return signatureRequests\n .filter((request) => request.type === type)\n .reduce<Record<string, LegacyStateMessage>>(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.messageParams },\n }),\n {},\n );\n }\n\n #addLog(\n signatureRequestType: SignatureRequestType,\n version: SignTypedDataVersion | undefined,\n stage: SigningStage,\n signingData: MessageParams,\n ): void {\n const signingMethod = this.#getSignTypeForLogger(\n signatureRequestType,\n version,\n );\n\n this.messenger.call('LoggingController:add', {\n type: LogType.EthSignLog,\n data: {\n signingMethod,\n stage,\n signingData,\n },\n });\n }\n\n #getSignTypeForLogger(\n requestType: SignatureRequestType,\n version?: SignTypedDataVersion,\n ): SigningMethod {\n if (requestType === SignatureRequestType.PersonalSign) {\n return SigningMethod.PersonalSign;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V3\n ) {\n return SigningMethod.EthSignTypedDataV3;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V4\n ) {\n return SigningMethod.EthSignTypedDataV4;\n }\n\n return SigningMethod.EthSignTypedData;\n }\n\n #getChainId(request: OriginalRequest): Hex {\n const { networkClientId } = request;\n\n if (!networkClientId) {\n throw new Error('Network client ID not found in request');\n }\n\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkClient.configuration.chainId;\n }\n\n #decodePermitSignatureRequest(\n signatureRequestId: string,\n request: OriginalRequest,\n chainId: string,\n ) {\n if (!this.#isDecodeSignatureRequestEnabled?.() || !this.#decodingApiUrl) {\n return;\n }\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingLoading = true;\n });\n decodeSignature(request, chainId, this.#decodingApiUrl)\n .then((decodingData) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = decodingData;\n draftMetadata.decodingLoading = false;\n }),\n )\n .catch((error) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = {\n stateChanges: null,\n error: {\n message: (error as unknown as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n draftMetadata.decodingLoading = false;\n }),\n );\n }\n\n #getInternalAccounts(): Hex[] {\n const state = this.messenger.call('AccountsController:getState');\n\n /* istanbul ignore next */\n return Object.values(state.internalAccounts?.accounts ?? {})\n .filter((account) => account.type === 'eip155:eoa')\n .map((account) => account.address as Hex);\n }\n}\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { AccountsControllerGetStateAction } from "@metamask/accounts-controller";
|
|
3
3
|
import type { AddApprovalRequest } from "@metamask/approval-controller";
|
|
4
|
-
import { BaseController
|
|
4
|
+
import { BaseController } from "@metamask/base-controller";
|
|
5
|
+
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
5
6
|
import type { TraceCallback, TraceContext } from "@metamask/controller-utils";
|
|
6
7
|
import type { GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction } from "@metamask/gator-permissions-controller";
|
|
7
8
|
import type { KeyringControllerSignMessageAction, KeyringControllerSignPersonalMessageAction, KeyringControllerSignTypedMessageAction } from "@metamask/keyring-controller";
|
|
8
|
-
import {
|
|
9
|
+
import type { AddLog } from "@metamask/logging-controller";
|
|
9
10
|
import type { Messenger } from "@metamask/messenger";
|
|
10
11
|
import type { NetworkControllerGetNetworkClientByIdAction } from "@metamask/network-controller";
|
|
11
12
|
import type { Json } from "@metamask/utils";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureController.d.cts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,sCAAsC;AACtF,OAAO,KAAK,EACV,kBAAkB,EAGnB,sCAAsC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"SignatureController.d.cts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,sCAAsC;AACtF,OAAO,KAAK,EACV,kBAAkB,EAGnB,sCAAsC;AACvC,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mCAAmC;AAM9E,OAAO,KAAK,EACV,8EAA8E,EAE/E,+CAA+C;AAChD,OAAO,KAAK,EACV,kCAAkC,EAClC,0CAA0C,EAC1C,uCAAuC,EACxC,qCAAqC;AAOtC,OAAO,KAAK,EAAE,MAAM,EAAE,qCAAqC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,2CAA2C,EAAE,qCAAqC;AAChG,OAAO,KAAK,EAAO,IAAI,EAAE,wBAAwB;AAGjD,OAAO,YAAY,eAAe;AAKlC,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAEhB,mBAAmB,EACnB,kBAAkB,EAGnB,oBAAgB;AAgBjB,QAAA,MAAM,cAAc,wBAAwB,CAAC;AAkD7C,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAEpD;;;;OAIG;IACH,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAE3D;;;;OAIG;IACH,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAE5D;;;;OAIG;IACH,0BAA0B,EAAE,MAAM,CAAC;IAEnC;;;;OAIG;IACH,4BAA4B,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF,KAAK,cAAc,GACf,gCAAgC,GAChC,kBAAkB,GAClB,MAAM,GACN,8EAA8E,GAC9E,2CAA2C,GAC3C,kCAAkC,GAClC,0CAA0C,GAC1C,uCAAuC,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CACtD,OAAO,cAAc,EACrB,wBAAwB,CACzB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAC3D,OAAO,cAAc,EACrB,wBAAwB,CACzB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;AAE3D,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,CAAC;AAE7D,MAAM,MAAM,4BAA4B,GAAG,SAAS,CAClD,OAAO,cAAc,EACrB,0BAA0B,GAAG,cAAc,EAC3C,yBAAyB,CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC;;OAEG;IACH,SAAS,EAAE,4BAA4B,CAAC;IAExC;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAExB,WAAW,EAAE,GAAG,EAChB,UAAU,EAAE,MAAM,KAEf,OAAO,CAAC,GAAG,CAAC,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,+BAA+B,CAAC,EAAE,MAAM,OAAO,CAAC;IAEhD;;OAEG;IACH,KAAK,CAAC,EAAE,wBAAwB,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,cAAc,CACrD,OAAO,cAAc,EACrB,wBAAwB,EACxB,4BAA4B,CAC7B;;IACC,GAAG,EAAE,YAAY,CAAC;IAQlB;;;;;;;;;OASG;gBACS,EACV,cAAc,EACd,+BAA+B,EAC/B,SAAS,EACT,KAAK,EACL,KAAK,GACN,EAAE,0BAA0B;IAiB7B;;;;;OAKG;IACH,IAAI,+BAA+B,IAAI,MAAM,CAE5C;IAED;;;;;OAKG;IACH,IAAI,4BAA4B,IAAI,MAAM,CAEzC;IAED;;;;;OAKG;IACH,IAAI,QAAQ,IAAI;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,CAAA;KAAE,CAEjD;IAED;;OAEG;IACH,UAAU;IAMV;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM;IAchC;;OAEG;IACH,eAAe;IAYf;;;;;;;;;OASG;IACG,0BAA0B,CAC9B,aAAa,EAAE,qBAAqB,EACpC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,YAAY,CAAA;KAAO,GAC5C,OAAO,CAAC,MAAM,CAAC;IAmBlB;;;;;;;;;;OAUG;IACG,uBAAuB,CAC3B,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,mBAAmB,EACpC,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,YAAY,CAAA;KAAO,GAC5C,OAAO,CAAC,MAAM,CAAC;IAiGlB;;;;;;OAMG;IAEH,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;IAQjE;;;;;OAKG;IACH,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI;IAM7D;;;;;OAKG;IACH,oBAAoB,CAAC,kBAAkB,EAAE,MAAM;IAM/C;;;;OAIG;IACH,yBAAyB,CAAC,kBAAkB,EAAE,MAAM;IAMpD;;;;OAIG;IACH,4BAA4B,CAAC,kBAAkB,EAAE,MAAM;CAkhBxD"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { AccountsControllerGetStateAction } from "@metamask/accounts-controller";
|
|
3
3
|
import type { AddApprovalRequest } from "@metamask/approval-controller";
|
|
4
|
-
import { BaseController
|
|
4
|
+
import { BaseController } from "@metamask/base-controller";
|
|
5
|
+
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
5
6
|
import type { TraceCallback, TraceContext } from "@metamask/controller-utils";
|
|
6
7
|
import type { GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction } from "@metamask/gator-permissions-controller";
|
|
7
8
|
import type { KeyringControllerSignMessageAction, KeyringControllerSignPersonalMessageAction, KeyringControllerSignTypedMessageAction } from "@metamask/keyring-controller";
|
|
8
|
-
import {
|
|
9
|
+
import type { AddLog } from "@metamask/logging-controller";
|
|
9
10
|
import type { Messenger } from "@metamask/messenger";
|
|
10
11
|
import type { NetworkControllerGetNetworkClientByIdAction } from "@metamask/network-controller";
|
|
11
12
|
import type { Json } from "@metamask/utils";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureController.d.mts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,sCAAsC;AACtF,OAAO,KAAK,EACV,kBAAkB,EAGnB,sCAAsC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"SignatureController.d.mts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureController.mjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport {\n BaseController,\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { TraceCallback, TraceContext } from '@metamask/controller-utils';\nimport {\n ApprovalType,\n detectSIWE,\n ORIGIN_METAMASK,\n} from '@metamask/controller-utils';\nimport type {\n GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction,\n DecodedPermission,\n} from '@metamask/gator-permissions-controller';\nimport type {\n KeyringControllerSignMessageAction,\n KeyringControllerSignPersonalMessageAction,\n KeyringControllerSignTypedMessageAction,\n} from '@metamask/keyring-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport {\n SigningMethod,\n LogType,\n SigningStage,\n type AddLog,\n} from '@metamask/logging-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { Hex, Json } 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 { v1 as random } from 'uuid';\n\nimport { projectLogger as log } from './logger';\nimport { SignatureRequestStatus, SignatureRequestType } from './types';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n OriginalRequest,\n SignatureRequest,\n MessageParams,\n TypedSigningOptions,\n LegacyStateMessage,\n StateSIWEMessage,\n MessageParamsTypedData,\n} from './types';\nimport { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api';\nimport {\n decodePermissionFromRequest,\n isDelegationRequest,\n validateExecutionPermissionMetadata,\n} from './utils/delegations';\nimport {\n normalizePersonalMessageParams,\n normalizeTypedMessageParams,\n} from './utils/normalize';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgs: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessages: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessagesCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\n/** List of statuses that will not be updated and trigger the finished event. */\nconst FINAL_STATUSES: SignatureRequestStatus[] = [\n SignatureRequestStatus.Signed,\n SignatureRequestStatus.Rejected,\n SignatureRequestStatus.Errored,\n];\n\nexport type SignatureControllerState = {\n /**\n * Map of all signature requests including all types and statuses, keyed by ID.\n */\n signatureRequests: Record<string, SignatureRequest>;\n\n /**\n * Map of personal messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, LegacyStateMessage>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, LegacyStateMessage>;\n\n /**\n * Number of unapproved personal messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AccountsControllerGetStateAction\n | AddApprovalRequest\n | AddLog\n | GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction\n | NetworkControllerGetNetworkClientByIdAction\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction;\n\nexport type GetSignatureState = ControllerGetStateAction<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = Messenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * Restricted messenger required by the signature controller.\n */\n messenger: SignatureControllerMessenger;\n\n /**\n * @deprecated No longer in use.\n */\n securityProviderRequest?: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestData: any,\n methodName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => Promise<any>;\n\n /**\n * URL of API to retrieve decoding data for typed requests.\n */\n decodingApiUrl?: string;\n\n /**\n * Function to check if decoding signature request is enabled\n */\n isDecodeSignatureRequestEnabled?: () => boolean;\n\n /**\n * Initial state of the controller.\n */\n state?: SignatureControllerState;\n\n /**\n * Callback to record the duration of code.\n */\n trace?: TraceCallback;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseController<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n readonly #decodingApiUrl?: string;\n\n readonly #isDecodeSignatureRequestEnabled?: () => boolean;\n\n readonly #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.decodingApiUrl - Api used to get decoded data for permits.\n * @param options.isDecodeSignatureRequestEnabled - Function to check is decoding signature request is enabled.\n * @param options.messenger - The restricted messenger for the sign controller.\n * @param options.state - Initial state to set on this controller.\n * @param options.trace - Callback to generate trace information.\n */\n constructor({\n decodingApiUrl,\n isDecodeSignatureRequestEnabled,\n messenger,\n state,\n trace,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: {\n ...getDefaultState(),\n ...state,\n },\n });\n\n this.hub = new EventEmitter();\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#decodingApiUrl = decodingApiUrl;\n this.#isDecodeSignatureRequestEnabled = isDecodeSignatureRequestEnabled;\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.state.unapprovedPersonalMsgCount;\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.state.unapprovedTypedMessagesCount;\n }\n\n /**\n * A getter for returning all messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The object containing all messages.\n */\n get messages(): { [id: string]: SignatureRequest } {\n return this.state.signatureRequests;\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.#updateState((state) => {\n Object.assign(state, getDefaultState());\n });\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n const unapprovedSignatureRequests = Object.values(\n this.state.signatureRequests,\n ).filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n );\n\n for (const metadata of unapprovedSignatureRequests) {\n this.#rejectSignatureRequest(metadata.id, reason);\n }\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#updateState((state) => {\n Object.values(state.signatureRequests)\n .filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n )\n .forEach((metadata) => delete state.signatureRequests[metadata.id]);\n });\n }\n\n /**\n * Called when a dApp uses the personal_sign method.\n * We currently provide personal_sign mostly for legacy dApps.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: MessageParamsPersonal,\n request: OriginalRequest,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validatePersonalSignatureRequest(messageParams);\n\n const normalizedMessageParams =\n normalizePersonalMessageParams(messageParams);\n\n normalizedMessageParams.siwe = detectSIWE(\n messageParams,\n ) as StateSIWEMessage;\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.PersonalSign,\n approvalType: ApprovalType.PersonalSign,\n traceContext: options.traceContext,\n });\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP-712.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param versionString - The version of the signTypedData request.\n * @param signingOptions - Options for signing the typed message.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: MessageParamsTyped,\n request: OriginalRequest,\n versionString: string,\n signingOptions?: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n const chainId = this.#getChainId(request);\n const internalAccounts = this.#getInternalAccounts();\n\n const version = versionString as SignTypedDataVersion;\n\n const decodedPermission = this.#tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n });\n\n validateTypedSignatureRequest({\n currentChainId: chainId,\n internalAccounts,\n messageData: messageParams,\n request,\n version,\n decodedPermission,\n });\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version,\n );\n\n return this.#processSignatureRequest({\n approvalType: ApprovalType.EthSignTypedData,\n messageParams: normalizedMessageParams,\n request,\n signingOptions,\n traceContext: options.traceContext,\n type: SignatureRequestType.TypedSign,\n version,\n decodedPermission,\n });\n }\n\n /**\n * Attempts to decoded a permission if the request is a delegation request.\n *\n * @param args - The arguments for the method.\n * @param args.messageParams - The message parameters.\n * @param args.version - The version of the signTypedData request.\n * @param args.request - The original request.\n *\n * @returns The decoded permission if the request is a delegation request.\n */\n #tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n }: {\n messageParams: MessageParamsTyped;\n version: SignTypedDataVersion;\n request: OriginalRequest;\n }): DecodedPermission | undefined {\n let data: MessageParamsTypedData;\n try {\n data = this.#parseTypedData(messageParams, version)\n .data as MessageParamsTypedData;\n } catch (error) {\n log('Failed to parse typed data', error);\n return undefined;\n }\n\n const isRequestDelegationRequest = isDelegationRequest(data);\n\n if (\n !isRequestDelegationRequest ||\n !request.origin ||\n version !== SignTypedDataVersion.V4\n ) {\n return undefined;\n }\n\n let decodedPermission: DecodedPermission | undefined;\n\n try {\n validateExecutionPermissionMetadata(data);\n\n decodedPermission = decodePermissionFromRequest({\n origin: request.origin,\n data,\n messenger: this.messenger,\n });\n } catch (error) {\n // we ignore this error, because it simply means the request could not be\n // decoded into a permission in which case we will not set a\n // decodedPermission on the metadata, and may fail validation if the\n // request is invalid.\n log('Failed to decode permission', (error as Error).message);\n }\n\n return decodedPermission;\n }\n\n /**\n * Provide a signature for a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `signed`.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param signature - The signature to provide.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status =\n SignatureRequestStatus.Signed as SignatureRequestStatus;\n });\n }\n\n /**\n * Set custom metadata on a signature request.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param metadata - The custom metadata to set.\n */\n setMessageMetadata(signatureRequestId: string, metadata: Json) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.metadata = metadata;\n });\n }\n\n /**\n * Reject a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `rejected`.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setDeferredSignError(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setTypedMessageInProgress(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.InProgress;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setPersonalMessageInProgress(signatureRequestId: string) {\n this.setTypedMessageInProgress(signatureRequestId);\n }\n\n #parseTypedData(\n messageParams: MessageParamsTyped,\n version?: SignTypedDataVersion,\n ): MessageParamsTyped {\n if (\n ![SignTypedDataVersion.V3, SignTypedDataVersion.V4].includes(\n version as SignTypedDataVersion,\n ) ||\n typeof messageParams.data !== 'string'\n ) {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n\n async #processSignatureRequest({\n chainId: optionChainId,\n messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n decodedPermission,\n }: {\n chainId?: Hex;\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n decodedPermission?: DecodedPermission;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n const chainId = optionChainId ?? this.#getChainId(request);\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const metadata = this.#addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n });\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n let approveOrSignError: unknown;\n\n const finalMetadataPromise = this.#waitForFinished(metadata.id);\n this.#decodePermitSignatureRequest(metadata.id, request, chainId);\n\n try {\n resultCallbacks = await this.#processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n });\n\n await this.#approveAndSignRequest(metadata, traceContext);\n } catch (error) {\n log('Signature request failed', (error as Error).message);\n approveOrSignError = error;\n }\n\n const finalMetadata = await finalMetadataPromise;\n\n const {\n error,\n id,\n messageParams: finalMessageParams,\n rawSig: signature,\n } = finalMetadata;\n\n switch (finalMetadata.status) {\n case SignatureRequestStatus.Signed:\n log('Signature request finished', { id, signature });\n this.#addLog(type, version, SigningStage.Signed, finalMessageParams);\n resultCallbacks?.success(signature);\n return finalMetadata.rawSig as string;\n\n case SignatureRequestStatus.Rejected:\n /* istanbul ignore next */\n const rejectedError = (approveOrSignError ??\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n )) as Error;\n\n resultCallbacks?.error(rejectedError);\n throw rejectedError;\n\n case SignatureRequestStatus.Errored:\n /* istanbul ignore next */\n const erroredError = (approveOrSignError ??\n new Error(`MetaMask ${type} Signature: ${error as string}`)) as Error;\n\n resultCallbacks?.error(erroredError);\n throw erroredError;\n\n /* istanbul ignore next */\n default:\n throw new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n finalMessageParams,\n )}`,\n );\n }\n }\n\n #addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n }: {\n chainId: Hex;\n messageParams: MessageParams;\n request?: OriginalRequest;\n signingOptions?: TypedSigningOptions;\n type: SignatureRequestType;\n version?: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n }): SignatureRequest {\n const id = random();\n const origin = request?.origin ?? messageParams.origin;\n const requestId = request?.id;\n const securityAlertResponse = request?.securityAlertResponse;\n const networkClientId = request?.networkClientId;\n\n const finalMessageParams = {\n ...messageParams,\n metamaskId: id,\n origin,\n requestId,\n version,\n };\n\n const metadata = {\n chainId,\n id,\n messageParams: finalMessageParams,\n networkClientId,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n decodedPermission,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n log('Added signature request', metadata);\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n return metadata;\n }\n\n async #processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n }: {\n approvalType: ApprovalType;\n metadata: SignatureRequest;\n request?: OriginalRequest;\n traceContext?: TraceContext;\n }): Promise<AcceptResultCallbacks | undefined> {\n const { id, messageParams, type, version } = metadata;\n\n try {\n const acceptResult = await this.#trace(\n { name: 'Await Approval', parentContext: traceContext },\n (context) =>\n this.#requestApproval(metadata, approvalType, {\n traceContext: context,\n actionId: request?.id?.toString(),\n }),\n );\n\n return acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', { id, error });\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(id);\n\n throw error;\n }\n }\n\n async #approveAndSignRequest(\n metadata: SignatureRequest,\n traceContext?: TraceContext,\n ) {\n const { id } = metadata;\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Approved;\n });\n\n await this.#trace({ name: 'Sign', parentContext: traceContext }, () =>\n this.#signRequest(metadata),\n );\n }\n\n async #signRequest(metadata: SignatureRequest) {\n const { id, messageParams, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messenger.call(\n 'KeyringController:signPersonalMessage',\n // Keyring controller temporarily using message manager types.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageParams as any,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(messageParams, metadata.version)\n : messageParams;\n\n signature = await this.messenger.call(\n 'KeyringController:signTypedMessage',\n finalRequest,\n metadata.version as SignTypedDataVersion,\n );\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(`Unknown signature request type: ${type as string}`);\n }\n\n this.hub.emit(`${type}:signed`, { signature, messageId: id });\n\n if (messageParams.deferSetAsSigned) {\n return;\n }\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#errorSignatureRequest(id, error.message);\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw error;\n }\n }\n\n #errorSignatureRequest(id: string, error: string) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error;\n });\n }\n\n #rejectSignatureRequest(signatureRequestId: string, reason?: string) {\n if (reason) {\n const metadata = this.state.signatureRequests[signatureRequestId];\n this.hub.emit('cancelWithReason', { metadata, reason });\n }\n\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n async #waitForFinished(id: string): Promise<SignatureRequest> {\n return new Promise((resolve) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n resolve(metadata);\n });\n });\n }\n\n async #requestApproval(\n metadata: SignatureRequest,\n type: ApprovalType,\n {\n traceContext,\n actionId,\n }: { traceContext?: TraceContext; actionId?: string },\n ): Promise<AddResult> {\n const { id, messageParams } = metadata;\n const origin = messageParams.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...messageParams },\n expectsResult: true,\n },\n true,\n )) as Promise<AddResult>;\n }\n\n #updateMetadata(\n id: string,\n callback: (metadata: SignatureRequest) => void,\n ): SignatureRequest {\n let statusChanged = false;\n\n const { nextState } = this.#updateState((state) => {\n const metadata = state.signatureRequests[id];\n\n if (!metadata) {\n throw new Error(`Signature request with id ${id} not found`);\n }\n\n const originalStatus = metadata.status;\n\n callback(metadata);\n\n statusChanged = metadata.status !== originalStatus;\n });\n\n const updatedMetadata = nextState.signatureRequests[id];\n\n if (\n statusChanged &&\n FINAL_STATUSES.includes(updatedMetadata.status as SignatureRequestStatus)\n ) {\n this.hub.emit(`${id}:finished`, updatedMetadata);\n }\n\n return updatedMetadata;\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(state.signatureRequests).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n ) as unknown as SignatureRequest[];\n\n const personalSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n const typedSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedPersonalMsgs = personalSignMessages as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedTypedMessages = typedSignMessages as any;\n\n state.unapprovedPersonalMsgCount =\n Object.values(personalSignMessages).length;\n\n state.unapprovedTypedMessagesCount =\n Object.values(typedSignMessages).length;\n });\n }\n\n #generateLegacyState(\n signatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ): Record<string, LegacyStateMessage> {\n return signatureRequests\n .filter((request) => request.type === type)\n .reduce<Record<string, LegacyStateMessage>>(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.messageParams },\n }),\n {},\n );\n }\n\n #addLog(\n signatureRequestType: SignatureRequestType,\n version: SignTypedDataVersion | undefined,\n stage: SigningStage,\n signingData: MessageParams,\n ): void {\n const signingMethod = this.#getSignTypeForLogger(\n signatureRequestType,\n version,\n );\n\n this.messenger.call('LoggingController:add', {\n type: LogType.EthSignLog,\n data: {\n signingMethod,\n stage,\n signingData,\n },\n });\n }\n\n #getSignTypeForLogger(\n requestType: SignatureRequestType,\n version?: SignTypedDataVersion,\n ): SigningMethod {\n if (requestType === SignatureRequestType.PersonalSign) {\n return SigningMethod.PersonalSign;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V3\n ) {\n return SigningMethod.EthSignTypedDataV3;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V4\n ) {\n return SigningMethod.EthSignTypedDataV4;\n }\n\n return SigningMethod.EthSignTypedData;\n }\n\n #getChainId(request: OriginalRequest): Hex {\n const { networkClientId } = request;\n\n if (!networkClientId) {\n throw new Error('Network client ID not found in request');\n }\n\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkClient.configuration.chainId;\n }\n\n #decodePermitSignatureRequest(\n signatureRequestId: string,\n request: OriginalRequest,\n chainId: string,\n ) {\n if (!this.#isDecodeSignatureRequestEnabled?.() || !this.#decodingApiUrl) {\n return;\n }\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingLoading = true;\n });\n decodeSignature(request, chainId, this.#decodingApiUrl)\n .then((decodingData) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = decodingData;\n draftMetadata.decodingLoading = false;\n }),\n )\n .catch((error) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = {\n stateChanges: null,\n error: {\n message: (error as unknown as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n draftMetadata.decodingLoading = false;\n }),\n );\n }\n\n #getInternalAccounts(): Hex[] {\n const state = this.messenger.call('AccountsController:getState');\n\n /* istanbul ignore next */\n return Object.values(state.internalAccounts?.accounts ?? {})\n .filter((account) => account.type === 'eip155:eoa')\n .map((account) => account.address as Hex);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SignatureController.mjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerGetStateAction } from '@metamask/accounts-controller';\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\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 type { TraceCallback, TraceContext } from '@metamask/controller-utils';\nimport {\n ApprovalType,\n detectSIWE,\n ORIGIN_METAMASK,\n} from '@metamask/controller-utils';\nimport type {\n GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction,\n DecodedPermission,\n} from '@metamask/gator-permissions-controller';\nimport type {\n KeyringControllerSignMessageAction,\n KeyringControllerSignPersonalMessageAction,\n KeyringControllerSignTypedMessageAction,\n} from '@metamask/keyring-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport {\n SigningMethod,\n LogType,\n SigningStage,\n} from '@metamask/logging-controller';\nimport type { AddLog } from '@metamask/logging-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { Hex, Json } 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 { v1 as random } from 'uuid';\n\nimport { projectLogger as log } from './logger';\nimport { SignatureRequestStatus, SignatureRequestType } from './types';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n OriginalRequest,\n SignatureRequest,\n MessageParams,\n TypedSigningOptions,\n LegacyStateMessage,\n StateSIWEMessage,\n MessageParamsTypedData,\n} from './types';\nimport { DECODING_API_ERRORS, decodeSignature } from './utils/decoding-api';\nimport {\n decodePermissionFromRequest,\n isDelegationRequest,\n validateExecutionPermissionMetadata,\n} from './utils/delegations';\nimport {\n normalizePersonalMessageParams,\n normalizeTypedMessageParams,\n} from './utils/normalize';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgs: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessages: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedPersonalMsgCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n unapprovedTypedMessagesCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\n/** List of statuses that will not be updated and trigger the finished event. */\nconst FINAL_STATUSES: SignatureRequestStatus[] = [\n SignatureRequestStatus.Signed,\n SignatureRequestStatus.Rejected,\n SignatureRequestStatus.Errored,\n];\n\nexport type SignatureControllerState = {\n /**\n * Map of all signature requests including all types and statuses, keyed by ID.\n */\n signatureRequests: Record<string, SignatureRequest>;\n\n /**\n * Map of personal messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, LegacyStateMessage>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, LegacyStateMessage>;\n\n /**\n * Number of unapproved personal messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n *\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AccountsControllerGetStateAction\n | AddApprovalRequest\n | AddLog\n | GatorPermissionsControllerDecodePermissionFromPermissionContextForOriginAction\n | NetworkControllerGetNetworkClientByIdAction\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction;\n\nexport type GetSignatureState = ControllerGetStateAction<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n SignatureControllerState\n>;\n\nexport type SignatureControllerActions = GetSignatureState;\n\nexport type SignatureControllerEvents = SignatureStateChange;\n\nexport type SignatureControllerMessenger = Messenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * Restricted messenger required by the signature controller.\n */\n messenger: SignatureControllerMessenger;\n\n /**\n * @deprecated No longer in use.\n */\n securityProviderRequest?: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestData: any,\n methodName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => Promise<any>;\n\n /**\n * URL of API to retrieve decoding data for typed requests.\n */\n decodingApiUrl?: string;\n\n /**\n * Function to check if decoding signature request is enabled\n */\n isDecodeSignatureRequestEnabled?: () => boolean;\n\n /**\n * Initial state of the controller.\n */\n state?: SignatureControllerState;\n\n /**\n * Callback to record the duration of code.\n */\n trace?: TraceCallback;\n};\n\n/**\n * Controller for creating signing requests requiring user approval.\n */\nexport class SignatureController extends BaseController<\n typeof controllerName,\n SignatureControllerState,\n SignatureControllerMessenger\n> {\n hub: EventEmitter;\n\n readonly #decodingApiUrl?: string;\n\n readonly #isDecodeSignatureRequestEnabled?: () => boolean;\n\n readonly #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.decodingApiUrl - Api used to get decoded data for permits.\n * @param options.isDecodeSignatureRequestEnabled - Function to check is decoding signature request is enabled.\n * @param options.messenger - The restricted messenger for the sign controller.\n * @param options.state - Initial state to set on this controller.\n * @param options.trace - Callback to generate trace information.\n */\n constructor({\n decodingApiUrl,\n isDecodeSignatureRequestEnabled,\n messenger,\n state,\n trace,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: {\n ...getDefaultState(),\n ...state,\n },\n });\n\n this.hub = new EventEmitter();\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#decodingApiUrl = decodingApiUrl;\n this.#isDecodeSignatureRequestEnabled = isDecodeSignatureRequestEnabled;\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.state.unapprovedPersonalMsgCount;\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.state.unapprovedTypedMessagesCount;\n }\n\n /**\n * A getter for returning all messages.\n *\n * @deprecated Use `signatureRequests` state instead.\n * @returns The object containing all messages.\n */\n get messages(): { [id: string]: SignatureRequest } {\n return this.state.signatureRequests;\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.#updateState((state) => {\n Object.assign(state, getDefaultState());\n });\n }\n\n /**\n * Reject all unapproved messages of any type.\n *\n * @param reason - A message to indicate why.\n */\n rejectUnapproved(reason?: string) {\n const unapprovedSignatureRequests = Object.values(\n this.state.signatureRequests,\n ).filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n );\n\n for (const metadata of unapprovedSignatureRequests) {\n this.#rejectSignatureRequest(metadata.id, reason);\n }\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#updateState((state) => {\n Object.values(state.signatureRequests)\n .filter(\n (metadata) =>\n (metadata.status as SignatureRequestStatus) ===\n SignatureRequestStatus.Unapproved,\n )\n .forEach((metadata) => delete state.signatureRequests[metadata.id]);\n });\n }\n\n /**\n * Called when a dApp uses the personal_sign method.\n * We currently provide personal_sign mostly for legacy dApps.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: MessageParamsPersonal,\n request: OriginalRequest,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validatePersonalSignatureRequest(messageParams);\n\n const normalizedMessageParams =\n normalizePersonalMessageParams(messageParams);\n\n normalizedMessageParams.siwe = detectSIWE(\n messageParams,\n ) as StateSIWEMessage;\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.PersonalSign,\n approvalType: ApprovalType.PersonalSign,\n traceContext: options.traceContext,\n });\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP-712.\n *\n * @param messageParams - The params of the message to sign and return to the dApp.\n * @param request - The original request, containing the origin.\n * @param versionString - The version of the signTypedData request.\n * @param signingOptions - Options for signing the typed message.\n * @param options - An options bag for the method.\n * @param options.traceContext - The parent context for any new traces.\n * @returns Promise resolving to the raw signature hash generated from the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: MessageParamsTyped,\n request: OriginalRequest,\n versionString: string,\n signingOptions?: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n const chainId = this.#getChainId(request);\n const internalAccounts = this.#getInternalAccounts();\n\n const version = versionString as SignTypedDataVersion;\n\n const decodedPermission = this.#tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n });\n\n validateTypedSignatureRequest({\n currentChainId: chainId,\n internalAccounts,\n messageData: messageParams,\n request,\n version,\n decodedPermission,\n });\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version,\n );\n\n return this.#processSignatureRequest({\n approvalType: ApprovalType.EthSignTypedData,\n messageParams: normalizedMessageParams,\n request,\n signingOptions,\n traceContext: options.traceContext,\n type: SignatureRequestType.TypedSign,\n version,\n decodedPermission,\n });\n }\n\n /**\n * Attempts to decoded a permission if the request is a delegation request.\n *\n * @param args - The arguments for the method.\n * @param args.messageParams - The message parameters.\n * @param args.version - The version of the signTypedData request.\n * @param args.request - The original request.\n *\n * @returns The decoded permission if the request is a delegation request.\n */\n #tryGetDecodedPermissionIfDelegation({\n messageParams,\n version,\n request,\n }: {\n messageParams: MessageParamsTyped;\n version: SignTypedDataVersion;\n request: OriginalRequest;\n }): DecodedPermission | undefined {\n let data: MessageParamsTypedData;\n try {\n data = this.#parseTypedData(messageParams, version)\n .data as MessageParamsTypedData;\n } catch (error) {\n log('Failed to parse typed data', error);\n return undefined;\n }\n\n const isRequestDelegationRequest = isDelegationRequest(data);\n\n if (\n !isRequestDelegationRequest ||\n !request.origin ||\n version !== SignTypedDataVersion.V4\n ) {\n return undefined;\n }\n\n let decodedPermission: DecodedPermission | undefined;\n\n try {\n validateExecutionPermissionMetadata(data);\n\n decodedPermission = decodePermissionFromRequest({\n origin: request.origin,\n data,\n messenger: this.messenger,\n });\n } catch (error) {\n // we ignore this error, because it simply means the request could not be\n // decoded into a permission in which case we will not set a\n // decodedPermission on the metadata, and may fail validation if the\n // request is invalid.\n log('Failed to decode permission', (error as Error).message);\n }\n\n return decodedPermission;\n }\n\n /**\n * Provide a signature for a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `signed`.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param signature - The signature to provide.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status =\n SignatureRequestStatus.Signed as SignatureRequestStatus;\n });\n }\n\n /**\n * Set custom metadata on a signature request.\n *\n * @param signatureRequestId - The ID of the signature request.\n * @param metadata - The custom metadata to set.\n */\n setMessageMetadata(signatureRequestId: string, metadata: Json) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.metadata = metadata;\n });\n }\n\n /**\n * Reject a pending signature request that used `deferSetAsSigned`.\n * Changes the status of the signature request to `rejected`.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setDeferredSignError(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setTypedMessageInProgress(signatureRequestId: string) {\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.InProgress;\n });\n }\n\n /**\n * Set the status of a signature request to 'inProgress'.\n *\n * @param signatureRequestId - The ID of the signature request.\n */\n setPersonalMessageInProgress(signatureRequestId: string) {\n this.setTypedMessageInProgress(signatureRequestId);\n }\n\n #parseTypedData(\n messageParams: MessageParamsTyped,\n version?: SignTypedDataVersion,\n ): MessageParamsTyped {\n if (\n ![SignTypedDataVersion.V3, SignTypedDataVersion.V4].includes(\n version as SignTypedDataVersion,\n ) ||\n typeof messageParams.data !== 'string'\n ) {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n\n async #processSignatureRequest({\n chainId: optionChainId,\n messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n decodedPermission,\n }: {\n chainId?: Hex;\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n decodedPermission?: DecodedPermission;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n const chainId = optionChainId ?? this.#getChainId(request);\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const metadata = this.#addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n });\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n let approveOrSignError: unknown;\n\n const finalMetadataPromise = this.#waitForFinished(metadata.id);\n this.#decodePermitSignatureRequest(metadata.id, request, chainId);\n\n try {\n resultCallbacks = await this.#processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n });\n\n await this.#approveAndSignRequest(metadata, traceContext);\n } catch (error) {\n log('Signature request failed', (error as Error).message);\n approveOrSignError = error;\n }\n\n const finalMetadata = await finalMetadataPromise;\n\n const {\n error,\n id,\n messageParams: finalMessageParams,\n rawSig: signature,\n } = finalMetadata;\n\n switch (finalMetadata.status) {\n case SignatureRequestStatus.Signed:\n log('Signature request finished', { id, signature });\n this.#addLog(type, version, SigningStage.Signed, finalMessageParams);\n resultCallbacks?.success(signature);\n return finalMetadata.rawSig as string;\n\n case SignatureRequestStatus.Rejected:\n /* istanbul ignore next */\n const rejectedError = (approveOrSignError ??\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n )) as Error;\n\n resultCallbacks?.error(rejectedError);\n throw rejectedError;\n\n case SignatureRequestStatus.Errored:\n /* istanbul ignore next */\n const erroredError = (approveOrSignError ??\n new Error(`MetaMask ${type} Signature: ${error as string}`)) as Error;\n\n resultCallbacks?.error(erroredError);\n throw erroredError;\n\n /* istanbul ignore next */\n default:\n throw new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n finalMessageParams,\n )}`,\n );\n }\n }\n\n #addMetadata({\n chainId,\n messageParams,\n request,\n signingOptions,\n type,\n version,\n decodedPermission,\n }: {\n chainId: Hex;\n messageParams: MessageParams;\n request?: OriginalRequest;\n signingOptions?: TypedSigningOptions;\n type: SignatureRequestType;\n version?: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n }): SignatureRequest {\n const id = random();\n const origin = request?.origin ?? messageParams.origin;\n const requestId = request?.id;\n const securityAlertResponse = request?.securityAlertResponse;\n const networkClientId = request?.networkClientId;\n\n const finalMessageParams = {\n ...messageParams,\n metamaskId: id,\n origin,\n requestId,\n version,\n };\n\n const metadata = {\n chainId,\n id,\n messageParams: finalMessageParams,\n networkClientId,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n decodedPermission,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n log('Added signature request', metadata);\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n return metadata;\n }\n\n async #processApproval({\n approvalType,\n metadata,\n request,\n traceContext,\n }: {\n approvalType: ApprovalType;\n metadata: SignatureRequest;\n request?: OriginalRequest;\n traceContext?: TraceContext;\n }): Promise<AcceptResultCallbacks | undefined> {\n const { id, messageParams, type, version } = metadata;\n\n try {\n const acceptResult = await this.#trace(\n { name: 'Await Approval', parentContext: traceContext },\n (context) =>\n this.#requestApproval(metadata, approvalType, {\n traceContext: context,\n actionId: request?.id?.toString(),\n }),\n );\n\n return acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', { id, error });\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(id);\n\n throw error;\n }\n }\n\n async #approveAndSignRequest(\n metadata: SignatureRequest,\n traceContext?: TraceContext,\n ) {\n const { id } = metadata;\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Approved;\n });\n\n await this.#trace({ name: 'Sign', parentContext: traceContext }, () =>\n this.#signRequest(metadata),\n );\n }\n\n async #signRequest(metadata: SignatureRequest) {\n const { id, messageParams, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messenger.call(\n 'KeyringController:signPersonalMessage',\n // Keyring controller temporarily using message manager types.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageParams as any,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(messageParams, metadata.version)\n : messageParams;\n\n signature = await this.messenger.call(\n 'KeyringController:signTypedMessage',\n finalRequest,\n metadata.version as SignTypedDataVersion,\n );\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(`Unknown signature request type: ${type as string}`);\n }\n\n this.hub.emit(`${type}:signed`, { signature, messageId: id });\n\n if (messageParams.deferSetAsSigned) {\n return;\n }\n\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#errorSignatureRequest(id, error.message);\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw error;\n }\n }\n\n #errorSignatureRequest(id: string, error: string) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error;\n });\n }\n\n #rejectSignatureRequest(signatureRequestId: string, reason?: string) {\n if (reason) {\n const metadata = this.state.signatureRequests[signatureRequestId];\n this.hub.emit('cancelWithReason', { metadata, reason });\n }\n\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n });\n }\n\n async #waitForFinished(id: string): Promise<SignatureRequest> {\n return new Promise((resolve) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n resolve(metadata);\n });\n });\n }\n\n async #requestApproval(\n metadata: SignatureRequest,\n type: ApprovalType,\n {\n traceContext,\n actionId,\n }: { traceContext?: TraceContext; actionId?: string },\n ): Promise<AddResult> {\n const { id, messageParams } = metadata;\n const origin = messageParams.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messenger.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...messageParams },\n expectsResult: true,\n },\n true,\n )) as Promise<AddResult>;\n }\n\n #updateMetadata(\n id: string,\n callback: (metadata: SignatureRequest) => void,\n ): SignatureRequest {\n let statusChanged = false;\n\n const { nextState } = this.#updateState((state) => {\n const metadata = state.signatureRequests[id];\n\n if (!metadata) {\n throw new Error(`Signature request with id ${id} not found`);\n }\n\n const originalStatus = metadata.status;\n\n callback(metadata);\n\n statusChanged = metadata.status !== originalStatus;\n });\n\n const updatedMetadata = nextState.signatureRequests[id];\n\n if (\n statusChanged &&\n FINAL_STATUSES.includes(updatedMetadata.status as SignatureRequestStatus)\n ) {\n this.hub.emit(`${id}:finished`, updatedMetadata);\n }\n\n return updatedMetadata;\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(state.signatureRequests).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n ) as unknown as SignatureRequest[];\n\n const personalSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n const typedSignMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedPersonalMsgs = personalSignMessages as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedTypedMessages = typedSignMessages as any;\n\n state.unapprovedPersonalMsgCount =\n Object.values(personalSignMessages).length;\n\n state.unapprovedTypedMessagesCount =\n Object.values(typedSignMessages).length;\n });\n }\n\n #generateLegacyState(\n signatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ): Record<string, LegacyStateMessage> {\n return signatureRequests\n .filter((request) => request.type === type)\n .reduce<Record<string, LegacyStateMessage>>(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.messageParams },\n }),\n {},\n );\n }\n\n #addLog(\n signatureRequestType: SignatureRequestType,\n version: SignTypedDataVersion | undefined,\n stage: SigningStage,\n signingData: MessageParams,\n ): void {\n const signingMethod = this.#getSignTypeForLogger(\n signatureRequestType,\n version,\n );\n\n this.messenger.call('LoggingController:add', {\n type: LogType.EthSignLog,\n data: {\n signingMethod,\n stage,\n signingData,\n },\n });\n }\n\n #getSignTypeForLogger(\n requestType: SignatureRequestType,\n version?: SignTypedDataVersion,\n ): SigningMethod {\n if (requestType === SignatureRequestType.PersonalSign) {\n return SigningMethod.PersonalSign;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V3\n ) {\n return SigningMethod.EthSignTypedDataV3;\n }\n\n if (\n requestType === SignatureRequestType.TypedSign &&\n version === SignTypedDataVersion.V4\n ) {\n return SigningMethod.EthSignTypedDataV4;\n }\n\n return SigningMethod.EthSignTypedData;\n }\n\n #getChainId(request: OriginalRequest): Hex {\n const { networkClientId } = request;\n\n if (!networkClientId) {\n throw new Error('Network client ID not found in request');\n }\n\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkClient.configuration.chainId;\n }\n\n #decodePermitSignatureRequest(\n signatureRequestId: string,\n request: OriginalRequest,\n chainId: string,\n ) {\n if (!this.#isDecodeSignatureRequestEnabled?.() || !this.#decodingApiUrl) {\n return;\n }\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingLoading = true;\n });\n decodeSignature(request, chainId, this.#decodingApiUrl)\n .then((decodingData) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = decodingData;\n draftMetadata.decodingLoading = false;\n }),\n )\n .catch((error) =>\n this.#updateMetadata(signatureRequestId, (draftMetadata) => {\n draftMetadata.decodingData = {\n stateChanges: null,\n error: {\n message: (error as unknown as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n draftMetadata.decodingLoading = false;\n }),\n );\n }\n\n #getInternalAccounts(): Hex[] {\n const state = this.messenger.call('AccountsController:getState');\n\n /* istanbul ignore next */\n return Object.values(state.internalAccounts?.accounts ?? {})\n .filter((account) => account.type === 'eip155:eoa')\n .map((account) => account.address as Hex);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoding-api.cjs","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"decoding-api.cjs","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAC7C,wCAAqC;AAGxB,QAAA,mBAAmB,GAAG;IACjC,qBAAqB,EAAE,uBAAuB;IAC9C,0BAA0B,EAAE,4BAA4B;CACzD,CAAC;AAEF;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,OAAe,EACf,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3C,IACE,OAAO,CAAC,MAAM,KAAK,iBAAS,CAAC,eAAe;YAC5C,OAAO,CAAC,MAAM,KAAK,iBAAS,CAAC,eAAe,EAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,sBAAsB,OAAO,EAAE,EAChD;gBACE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM;oBACN,MAAM;oBACN,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C,CAAC;gBACF,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CACF,CAAC;YACF,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE,2BAAmB,CAAC,qBAAqB;aAChD;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAG,KAAe,CAAC,OAAO;gBACjC,IAAI,EAAE,2BAAmB,CAAC,0BAA0B;aACrD;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAvCD,0CAuCC","sourcesContent":["import { normalizeParam } from './normalize';\nimport { EthMethod } from '../types';\nimport type { OriginalRequest } from '../types';\n\nexport const DECODING_API_ERRORS = {\n UNSUPPORTED_SIGNATURE: 'UNSUPPORTED_SIGNATURE',\n DECODING_FAILED_WITH_ERROR: 'DECODING_FAILED_WITH_ERROR',\n};\n\n/**\n * The function calls decoding api for typed signature V4 requests and returns the result.\n *\n * @param request - Signature request.\n * @param chainId - chainId of network of signature request.\n * @param decodingApiUrl - URL of decoding api.\n * @returns Promise that resolved to give decoded data.\n */\nexport async function decodeSignature(\n request: OriginalRequest,\n chainId: string,\n decodingApiUrl: string,\n) {\n try {\n const { method, origin, params } = request;\n if (\n request.method === EthMethod.SignTypedDataV3 ||\n request.method === EthMethod.SignTypedDataV4\n ) {\n const response = await fetch(\n `${decodingApiUrl}/signature?chainId=${chainId}`,\n {\n method: 'POST',\n body: JSON.stringify({\n method,\n origin,\n params: [params[0], normalizeParam(params[1])],\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n return await response.json();\n }\n return {\n error: {\n message: 'Unsupported signature.',\n type: DECODING_API_ERRORS.UNSUPPORTED_SIGNATURE,\n },\n };\n } catch (error: unknown) {\n return {\n error: {\n message: (error as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoding-api.d.cts","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decoding-api.d.cts","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAEhD,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,gBAoCvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoding-api.d.mts","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decoding-api.d.mts","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAEhD,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,gBAoCvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoding-api.mjs","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAoB;AAC7C,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"decoding-api.mjs","sourceRoot":"","sources":["../../src/utils/decoding-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAoB;AAC7C,OAAO,EAAE,SAAS,EAAE,qBAAiB;AAGrC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,qBAAqB,EAAE,uBAAuB;IAC9C,0BAA0B,EAAE,4BAA4B;CACzD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,OAAe,EACf,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3C,IACE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,eAAe;YAC5C,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,eAAe,EAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,sBAAsB,OAAO,EAAE,EAChD;gBACE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,MAAM;oBACN,MAAM;oBACN,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C,CAAC;gBACF,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CACF,CAAC;YACF,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE,mBAAmB,CAAC,qBAAqB;aAChD;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAG,KAAe,CAAC,OAAO;gBACjC,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;aACrD;SACF,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { normalizeParam } from './normalize';\nimport { EthMethod } from '../types';\nimport type { OriginalRequest } from '../types';\n\nexport const DECODING_API_ERRORS = {\n UNSUPPORTED_SIGNATURE: 'UNSUPPORTED_SIGNATURE',\n DECODING_FAILED_WITH_ERROR: 'DECODING_FAILED_WITH_ERROR',\n};\n\n/**\n * The function calls decoding api for typed signature V4 requests and returns the result.\n *\n * @param request - Signature request.\n * @param chainId - chainId of network of signature request.\n * @param decodingApiUrl - URL of decoding api.\n * @returns Promise that resolved to give decoded data.\n */\nexport async function decodeSignature(\n request: OriginalRequest,\n chainId: string,\n decodingApiUrl: string,\n) {\n try {\n const { method, origin, params } = request;\n if (\n request.method === EthMethod.SignTypedDataV3 ||\n request.method === EthMethod.SignTypedDataV4\n ) {\n const response = await fetch(\n `${decodingApiUrl}/signature?chainId=${chainId}`,\n {\n method: 'POST',\n body: JSON.stringify({\n method,\n origin,\n params: [params[0], normalizeParam(params[1])],\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n return await response.json();\n }\n return {\n error: {\n message: 'Unsupported signature.',\n type: DECODING_API_ERRORS.UNSUPPORTED_SIGNATURE,\n },\n };\n } catch (error: unknown) {\n return {\n error: {\n message: (error as Error).message,\n type: DECODING_API_ERRORS.DECODING_FAILED_WITH_ERROR,\n },\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.cjs","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"normalize.cjs","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AACpE,2CAA8D;AAK9D;;;;;GAKG;AACH,SAAgB,8BAA8B,CAC5C,aAAoC;IAEpC,OAAO;QACL,GAAG,aAAa;QAChB,IAAI,EAAE,4BAA4B,CAAC,aAAa,CAAC,IAAI,CAAC;KACvD,CAAC;AACJ,CAAC;AAPD,wEAOC;AAED;;;;;;GAMG;AACH,SAAgB,2BAA2B,CACzC,aAAiC,EACjC,OAA6B;IAE7B,MAAM,uBAAuB,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IAErD,IACE,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;QACtC,CAAC,OAAO,KAAK,yCAAoB,CAAC,EAAE,IAAI,OAAO,KAAK,yCAAoB,CAAC,EAAE,CAAC,EAC5E,CAAC;QACD,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAdD,kEAcC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,IAAA,aAAK,EAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0BAA0B;IAC5B,CAAC;IAED,OAAO,IAAA,kBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,KAAqB;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpD,KAAiC,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAChE,KAAiC,CAAC,GAAG,CAAC,CACxC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,KAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,KAAuC;IACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,OAAO,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAND,wCAMC","sourcesContent":["import { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { add0x, bytesToHex, remove0x } from '@metamask/utils';\nimport type { Json } from '@metamask/utils';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Normalize personal message params.\n *\n * @param messageParams - The message params to normalize.\n * @returns The normalized message params.\n */\nexport function normalizePersonalMessageParams(\n messageParams: MessageParamsPersonal,\n): MessageParamsPersonal {\n return {\n ...messageParams,\n data: normalizePersonalMessageData(messageParams.data),\n };\n}\n\n/**\n * Normalize typed message params.\n *\n * @param messageParams - The message params to normalize.\n * @param version - The version of the typed signature request.\n * @returns The normalized message params.\n */\nexport function normalizeTypedMessageParams(\n messageParams: MessageParamsTyped,\n version: SignTypedDataVersion,\n): MessageParamsTyped {\n const normalizedMessageParams = { ...messageParams };\n\n if (\n typeof messageParams.data !== 'string' &&\n (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4)\n ) {\n normalizedMessageParams.data = JSON.stringify(messageParams.data);\n }\n\n return normalizedMessageParams;\n}\n\n/**\n * Converts raw message data buffer to a hex, or just returns the data if\n * it is already formatted as a hex.\n *\n * @param data - The buffer data to convert to a hex.\n * @returns A hex string conversion of the buffer data.\n */\nfunction normalizePersonalMessageData(data: string) {\n try {\n const stripped = remove0x(data);\n\n if (stripped.match(/^[0-9A-Fa-f]+$/gu)) {\n return add0x(stripped);\n }\n } catch (e) {\n /* istanbul ignore next */\n }\n\n return bytesToHex(Buffer.from(data, 'utf8'));\n}\n\n/**\n * The method will convery all values in a JSON to string.\n * Currently decoding api is not able to take numeric values,\n * once apiis fixed we can get rid of this normalization.\n *\n * @param value - JSON to be normalized.\n * @returns JSON with all values converted to string.\n */\nfunction convertJSONValuesToString(value: Json | unknown): Json | string {\n if (Array.isArray(value)) {\n return value.map((val) => convertJSONValuesToString(val));\n }\n if (typeof value === 'object' && value !== null) {\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n (value as Record<string, unknown>)[key] = convertJSONValuesToString(\n (value as Record<string, unknown>)[key],\n );\n }\n }\n return value as Json;\n }\n return value?.toString() ?? '';\n}\n\n/**\n * Takes a stringified JSON and replaces stringifying all values.\n *\n * @param param - of JSON to be fixed.\n * @returns JSON with all values converted to quoted strings.\n */\nexport function normalizeParam(param: string | Record<string, unknown>) {\n if (!param) {\n return {};\n }\n const parsedParam = typeof param === 'string' ? JSON.parse(param) : param;\n return convertJSONValuesToString(parsedParam);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SignTypedDataVersion } from "@metamask/keyring-controller";
|
|
2
|
-
import {
|
|
2
|
+
import type { Json } from "@metamask/utils";
|
|
3
3
|
import type { MessageParamsPersonal, MessageParamsTyped } from "../types.cjs";
|
|
4
4
|
/**
|
|
5
5
|
* Normalize personal message params.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.cts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"normalize.d.cts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,qBAAqB,GACnC,qBAAqB,CAKvB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAWpB;AAgDD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAMrE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SignTypedDataVersion } from "@metamask/keyring-controller";
|
|
2
|
-
import {
|
|
2
|
+
import type { Json } from "@metamask/utils";
|
|
3
3
|
import type { MessageParamsPersonal, MessageParamsTyped } from "../types.mjs";
|
|
4
4
|
/**
|
|
5
5
|
* Normalize personal message params.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.mts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"normalize.d.mts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,qBAAqB,GACnC,qBAAqB,CAKvB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAWpB;AAgDD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAMrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.mjs","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"normalize.mjs","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,wBAAwB;AAK9D;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,aAAoC;IAEpC,OAAO;QACL,GAAG,aAAa;QAChB,IAAI,EAAE,4BAA4B,CAAC,aAAa,CAAC,IAAI,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,aAAiC,EACjC,OAA6B;IAE7B,MAAM,uBAAuB,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IAErD,IACE,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ;QACtC,CAAC,OAAO,KAAK,oBAAoB,CAAC,EAAE,IAAI,OAAO,KAAK,oBAAoB,CAAC,EAAE,CAAC,EAC5E,CAAC;QACD,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,0BAA0B;IAC5B,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,KAAqB;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpD,KAAiC,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAChE,KAAiC,CAAC,GAAG,CAAC,CACxC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,KAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAuC;IACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,OAAO,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { add0x, bytesToHex, remove0x } from '@metamask/utils';\nimport type { Json } from '@metamask/utils';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Normalize personal message params.\n *\n * @param messageParams - The message params to normalize.\n * @returns The normalized message params.\n */\nexport function normalizePersonalMessageParams(\n messageParams: MessageParamsPersonal,\n): MessageParamsPersonal {\n return {\n ...messageParams,\n data: normalizePersonalMessageData(messageParams.data),\n };\n}\n\n/**\n * Normalize typed message params.\n *\n * @param messageParams - The message params to normalize.\n * @param version - The version of the typed signature request.\n * @returns The normalized message params.\n */\nexport function normalizeTypedMessageParams(\n messageParams: MessageParamsTyped,\n version: SignTypedDataVersion,\n): MessageParamsTyped {\n const normalizedMessageParams = { ...messageParams };\n\n if (\n typeof messageParams.data !== 'string' &&\n (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4)\n ) {\n normalizedMessageParams.data = JSON.stringify(messageParams.data);\n }\n\n return normalizedMessageParams;\n}\n\n/**\n * Converts raw message data buffer to a hex, or just returns the data if\n * it is already formatted as a hex.\n *\n * @param data - The buffer data to convert to a hex.\n * @returns A hex string conversion of the buffer data.\n */\nfunction normalizePersonalMessageData(data: string) {\n try {\n const stripped = remove0x(data);\n\n if (stripped.match(/^[0-9A-Fa-f]+$/gu)) {\n return add0x(stripped);\n }\n } catch (e) {\n /* istanbul ignore next */\n }\n\n return bytesToHex(Buffer.from(data, 'utf8'));\n}\n\n/**\n * The method will convery all values in a JSON to string.\n * Currently decoding api is not able to take numeric values,\n * once apiis fixed we can get rid of this normalization.\n *\n * @param value - JSON to be normalized.\n * @returns JSON with all values converted to string.\n */\nfunction convertJSONValuesToString(value: Json | unknown): Json | string {\n if (Array.isArray(value)) {\n return value.map((val) => convertJSONValuesToString(val));\n }\n if (typeof value === 'object' && value !== null) {\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n (value as Record<string, unknown>)[key] = convertJSONValuesToString(\n (value as Record<string, unknown>)[key],\n );\n }\n }\n return value as Json;\n }\n return value?.toString() ?? '';\n}\n\n/**\n * Takes a stringified JSON and replaces stringifying all values.\n *\n * @param param - of JSON to be fixed.\n * @returns JSON with all values converted to quoted strings.\n */\nexport function normalizeParam(param: string | Record<string, unknown>) {\n if (!param) {\n return {};\n }\n const parsedParam = typeof param === 'string' ? JSON.parse(param) : param;\n return convertJSONValuesToString(parsedParam);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAA,uEAAgE;AAChE,iEAA+D;AAC/D,yDAGgC;AAEhC,qEAAoE;AAGpE,2CAAsC;AAEtC,mDAAoD;AAQvC,QAAA,uBAAuB,GAAG,YAAY,CAAC;AACvC,QAAA,eAAe,GAAG,WAAW,CAAC;AAE3C;;;;GAIG;AACH,SAAgB,gCAAgC,CAC9C,WAAkC;IAElC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAEnC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,0BAA0B,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAVD,4EAUC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,6BAA6B,CAAC,EAC5C,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,OAAO,EACP,iBAAiB,GAQlB;IACC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE1C,IAAI,OAAO,KAAK,yCAAoB,CAAC,EAAE,EAAE,CAAC;QACxC,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,iCAAiC,CAAC;YAChC,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,OAAO;YACP,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AA5BD,sEA4BC;AAED;;;;GAIG;AACH,SAAS,+BAA+B,CAAC,WAA+B;IACtE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK;QACb,gFAAgF;QAChF,4EAA4E;QAC5E,2BAA2B,WAAW,CAAC,IAAI,yBAAyB,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,wDAAwD;QACxD,gCAAgC;QAChC,8DAA8D;QAC9D,IAAA,iCAAkB,EAAC,WAAW,CAAC,IAAW,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,iCAAiC,CAAC,EACzC,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,iBAAiB,GAOlB;IACC,IACE,CAAC,WAAW,CAAC,IAAI;QACjB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,CAAC,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;YACnC,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,qBAAQ,EAAC,IAAI,EAAE,mCAAoB,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,qCACE,OACF,4CAA4C,CAC7C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,qBACE,OACF,oCAAoC,aAAa,GAAG,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,CAAC;IAEtD,yBAAyB,CAAC;QACxB,IAAI;QACJ,gBAAgB;QAChB,MAAM;KACP,CAAC,CAAC;IAEH,kBAAkB,CAAC;QACjB,IAAI;QACJ,gBAAgB;QAChB,MAAM;QACN,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,YAAoB;IAC5D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAA,oCAAiB,EAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,YAAY,YAAY,cAAc,OAAO,0BAA0B,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,EACjC,IAAI,EACJ,gBAAgB,EAChB,MAAM,GAKP;IACC,MAAM,iBAAiB,GAAG,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,KAAK,qCAAe,CAAC;IAExD,IACE,iBAAiB;QACjB,OAAO,iBAAiB,KAAK,QAAQ;QACrC,UAAU;QACV,gBAAgB,CAAC,IAAI,CACnB,CAAC,eAAe,EAAE,EAAE,CAClB,eAAe,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC,WAAW,EAAE,CACpE,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,EAC1B,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,iBAAiB,GAMlB;IACC,IAAI,CAAC,IAAA,iCAAmB,EAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,oBAAoB,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAC7D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,MAAM,IAAI,MAAM,KAAK,qCAAe,CAAC;QAE9D,MAAM,yBAAyB,GAC5B,IAAI,CAAC,OAAgC,EAAE,CAAC,uBAAe,CACzD,EAAE,WAAW,EAAE,CAAC;QAEjB,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAC5C,CAAC,eAAe,EAAE,EAAE,CAClB,eAAe,CAAC,WAAW,EAAE,KAAK,yBAAyB,CAC9D,CAAC;QAEF,IAAI,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/approval-controller';\nimport { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport type { DecodedPermission } from '@metamask/gator-permissions-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\nimport { type Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport { isDelegationRequest } from './delegations';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n MessageParamsTypedData,\n OriginalRequest,\n} from '../types';\n\nexport const PRIMARY_TYPE_DELEGATION = 'Delegation';\nexport const DELEGATOR_FIELD = 'delegator';\n\n/**\n * Validate a personal signature request.\n *\n * @param messageData - The message data to validate.\n */\nexport function validatePersonalSignatureRequest(\n messageData: MessageParamsPersonal,\n) {\n const { from, data } = messageData;\n\n validateAddress(from, 'from');\n\n if (!data || typeof data !== 'string') {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\n/**\n * Validate a typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.version - The version of the typed signature request.\n * @param options.decodedPermission - The decoded permission.\n */\nexport function validateTypedSignatureRequest({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n version,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n version: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n}) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n });\n }\n}\n\n/**\n * Validate a V1 typed signature request.\n *\n * @param messageData - The message data to validate.\n */\nfunction validateTypedSignatureRequestV1(messageData: MessageParamsTyped) {\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid message \"data\": ${messageData.data} must be a valid array.`,\n );\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typedSignatureHash(messageData.data as any);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\n/**\n * Validate a V3 or V4 typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n decodedPermission?: DecodedPermission;\n}) {\n if (\n !messageData.data ||\n Array.isArray(messageData.data) ||\n (typeof messageData.data !== 'object' &&\n typeof messageData.data !== 'string')\n ) {\n throw new Error(\n `Invalid message \"data\": Must be a valid string or object.`,\n );\n }\n\n let data;\n if (typeof messageData.data === 'object') {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error('Data must be passed as a valid JSON string.');\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\n 'Data must conform to EIP-712 schema. See https://git.io/fNtcx.',\n );\n }\n\n if (!currentChainId) {\n throw new Error('Current chainId cannot be null or undefined.');\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === 'string') {\n chainId = parseInt(chainId, chainId.startsWith('0x') ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(\n `Cannot sign messages for chainId \"${\n chainId as string\n }\", because MetaMask is switching networks.`,\n );\n }\n\n if (chainId !== activeChainId) {\n throw new Error(\n `Provided chainId \"${\n chainId as string\n }\" must match the active chainId \"${activeChainId}\"`,\n );\n }\n }\n\n const origin = request?.origin ?? messageData?.origin;\n\n validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n });\n\n validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n });\n}\n\n/**\n * Validate an Ethereum address.\n *\n * @param address - The address to validate.\n * @param propertyName - The name of the property source to use in the error message.\n */\nfunction validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== 'string' || !isValidHexAddress(address)) {\n throw new Error(\n `Invalid \"${propertyName}\" address: ${address} must be a valid string.`,\n );\n }\n}\n\n/**\n * Validate the verifying contract from a typed signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n */\nfunction validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n}) {\n const verifyingContract = data?.domain?.verifyingContract;\n const isExternal = origin && origin !== ORIGIN_METAMASK;\n\n if (\n verifyingContract &&\n typeof verifyingContract === 'string' &&\n isExternal &&\n internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === verifyingContract.toLowerCase(),\n )\n ) {\n throw new Error(\n `External signature requests cannot use internal accounts as the verifying contract.`,\n );\n }\n}\n\n/**\n * Validate a delegation signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n decodedPermission?: DecodedPermission;\n}) {\n if (!isDelegationRequest(data)) {\n return;\n }\n\n const hasDecodedPermission = decodedPermission !== undefined;\n if (!hasDecodedPermission) {\n const isOriginExternal = origin && origin !== ORIGIN_METAMASK;\n\n const delegatorAddressLowercase = (\n (data.message as Record<string, Json>)?.[DELEGATOR_FIELD] as Hex\n )?.toLowerCase();\n\n const isSignerInternal = internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === delegatorAddressLowercase,\n );\n\n if (isOriginExternal && isSignerInternal) {\n throw new Error(\n `External signature requests cannot sign delegations for internal accounts.`,\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/approval-controller';\nimport { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport type { DecodedPermission } from '@metamask/gator-permissions-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport { isDelegationRequest } from './delegations';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n MessageParamsTypedData,\n OriginalRequest,\n} from '../types';\n\nexport const PRIMARY_TYPE_DELEGATION = 'Delegation';\nexport const DELEGATOR_FIELD = 'delegator';\n\n/**\n * Validate a personal signature request.\n *\n * @param messageData - The message data to validate.\n */\nexport function validatePersonalSignatureRequest(\n messageData: MessageParamsPersonal,\n) {\n const { from, data } = messageData;\n\n validateAddress(from, 'from');\n\n if (!data || typeof data !== 'string') {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\n/**\n * Validate a typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.version - The version of the typed signature request.\n * @param options.decodedPermission - The decoded permission.\n */\nexport function validateTypedSignatureRequest({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n version,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n version: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n}) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n });\n }\n}\n\n/**\n * Validate a V1 typed signature request.\n *\n * @param messageData - The message data to validate.\n */\nfunction validateTypedSignatureRequestV1(messageData: MessageParamsTyped) {\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid message \"data\": ${messageData.data} must be a valid array.`,\n );\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typedSignatureHash(messageData.data as any);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\n/**\n * Validate a V3 or V4 typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n decodedPermission?: DecodedPermission;\n}) {\n if (\n !messageData.data ||\n Array.isArray(messageData.data) ||\n (typeof messageData.data !== 'object' &&\n typeof messageData.data !== 'string')\n ) {\n throw new Error(\n `Invalid message \"data\": Must be a valid string or object.`,\n );\n }\n\n let data;\n if (typeof messageData.data === 'object') {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error('Data must be passed as a valid JSON string.');\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\n 'Data must conform to EIP-712 schema. See https://git.io/fNtcx.',\n );\n }\n\n if (!currentChainId) {\n throw new Error('Current chainId cannot be null or undefined.');\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === 'string') {\n chainId = parseInt(chainId, chainId.startsWith('0x') ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(\n `Cannot sign messages for chainId \"${\n chainId as string\n }\", because MetaMask is switching networks.`,\n );\n }\n\n if (chainId !== activeChainId) {\n throw new Error(\n `Provided chainId \"${\n chainId as string\n }\" must match the active chainId \"${activeChainId}\"`,\n );\n }\n }\n\n const origin = request?.origin ?? messageData?.origin;\n\n validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n });\n\n validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n });\n}\n\n/**\n * Validate an Ethereum address.\n *\n * @param address - The address to validate.\n * @param propertyName - The name of the property source to use in the error message.\n */\nfunction validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== 'string' || !isValidHexAddress(address)) {\n throw new Error(\n `Invalid \"${propertyName}\" address: ${address} must be a valid string.`,\n );\n }\n}\n\n/**\n * Validate the verifying contract from a typed signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n */\nfunction validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n}) {\n const verifyingContract = data?.domain?.verifyingContract;\n const isExternal = origin && origin !== ORIGIN_METAMASK;\n\n if (\n verifyingContract &&\n typeof verifyingContract === 'string' &&\n isExternal &&\n internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === verifyingContract.toLowerCase(),\n )\n ) {\n throw new Error(\n `External signature requests cannot use internal accounts as the verifying contract.`,\n );\n }\n}\n\n/**\n * Validate a delegation signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n decodedPermission?: DecodedPermission;\n}) {\n if (!isDelegationRequest(data)) {\n return;\n }\n\n const hasDecodedPermission = decodedPermission !== undefined;\n if (!hasDecodedPermission) {\n const isOriginExternal = origin && origin !== ORIGIN_METAMASK;\n\n const delegatorAddressLowercase = (\n (data.message as Record<string, Json>)?.[DELEGATOR_FIELD] as Hex\n )?.toLowerCase();\n\n const isSignerInternal = internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === delegatorAddressLowercase,\n );\n\n if (isOriginExternal && isSignerInternal) {\n throw new Error(\n `External signature requests cannot sign delegations for internal accounts.`,\n );\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DecodedPermission } from "@metamask/gator-permissions-controller";
|
|
2
2
|
import { SignTypedDataVersion } from "@metamask/keyring-controller";
|
|
3
|
-
import {
|
|
3
|
+
import type { Hex } from "@metamask/utils";
|
|
4
4
|
import type { MessageParamsPersonal, MessageParamsTyped, OriginalRequest } from "../types.cjs";
|
|
5
5
|
export declare const PRIMARY_TYPE_DELEGATION = "Delegation";
|
|
6
6
|
export declare const DELEGATOR_FIELD = "delegator";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+CAA+C;AAChF,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+CAA+C;AAChF,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAElB,eAAe,EAChB,qBAAiB;AAElB,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,GAAG,GAAG,SAAS,CAAC;IAChC,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACxB,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,QAcA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DecodedPermission } from "@metamask/gator-permissions-controller";
|
|
2
2
|
import { SignTypedDataVersion } from "@metamask/keyring-controller";
|
|
3
|
-
import {
|
|
3
|
+
import type { Hex } from "@metamask/utils";
|
|
4
4
|
import type { MessageParamsPersonal, MessageParamsTyped, OriginalRequest } from "../types.mjs";
|
|
5
5
|
export declare const PRIMARY_TYPE_DELEGATION = "Delegation";
|
|
6
6
|
export declare const DELEGATOR_FIELD = "delegator";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+CAA+C;AAChF,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+CAA+C;AAChF,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAEpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAElB,eAAe,EAChB,qBAAiB;AAElB,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,EAC5C,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,GAAG,GAAG,SAAS,CAAC;IAChC,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACxB,WAAW,EAAE,kBAAkB,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,QAcA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sCAAsC;AAChE,OAAO,EAAE,iBAAiB,EAAE,mCAAmC;AAC/D,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EACnB,+BAA+B;AAEhC,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAGpE,OAAO,EAAE,QAAQ,EAAE,mBAAmB;AAEtC,OAAO,EAAE,mBAAmB,EAAE,0BAAsB;AAQpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC9C,WAAkC;IAElC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAEnC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,0BAA0B,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,6BAA6B,CAAC,EAC5C,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,OAAO,EACP,iBAAiB,GAQlB;IACC,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE1C,IAAI,OAAO,KAAK,oBAAoB,CAAC,EAAE,EAAE,CAAC;QACxC,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,iCAAiC,CAAC;YAChC,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,OAAO;YACP,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,+BAA+B,CAAC,WAA+B;IACtE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK;QACb,gFAAgF;QAChF,4EAA4E;QAC5E,2BAA2B,WAAW,CAAC,IAAI,yBAAyB,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,wDAAwD;QACxD,gCAAgC;QAChC,8DAA8D;QAC9D,kBAAkB,CAAC,WAAW,CAAC,IAAW,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,iCAAiC,CAAC,EACzC,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,iBAAiB,GAOlB;IACC,IACE,CAAC,WAAW,CAAC,IAAI;QACjB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,CAAC,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;YACnC,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,qCACE,OACF,4CAA4C,CAC7C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,qBACE,OACF,oCAAoC,aAAa,GAAG,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,CAAC;IAEtD,yBAAyB,CAAC;QACxB,IAAI;QACJ,gBAAgB;QAChB,MAAM;KACP,CAAC,CAAC;IAEH,kBAAkB,CAAC;QACjB,IAAI;QACJ,gBAAgB;QAChB,MAAM;QACN,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,YAAoB;IAC5D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,YAAY,YAAY,cAAc,OAAO,0BAA0B,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,EACjC,IAAI,EACJ,gBAAgB,EAChB,MAAM,GAKP;IACC,MAAM,iBAAiB,GAAG,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC;IAC1D,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,KAAK,eAAe,CAAC;IAExD,IACE,iBAAiB;QACjB,OAAO,iBAAiB,KAAK,QAAQ;QACrC,UAAU;QACV,gBAAgB,CAAC,IAAI,CACnB,CAAC,eAAe,EAAE,EAAE,CAClB,eAAe,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC,WAAW,EAAE,CACpE,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,EAC1B,IAAI,EACJ,gBAAgB,EAChB,MAAM,EACN,iBAAiB,GAMlB;IACC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,oBAAoB,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAC7D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,MAAM,IAAI,MAAM,KAAK,eAAe,CAAC;QAE9D,MAAM,yBAAyB,GAC5B,IAAI,CAAC,OAAgC,EAAE,CAAC,eAAe,CACzD,EAAE,WAAW,EAAE,CAAC;QAEjB,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAC5C,CAAC,eAAe,EAAE,EAAE,CAClB,eAAe,CAAC,WAAW,EAAE,KAAK,yBAAyB,CAC9D,CAAC;QAEF,IAAI,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/approval-controller';\nimport { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport type { DecodedPermission } from '@metamask/gator-permissions-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\nimport { type Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport { isDelegationRequest } from './delegations';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n MessageParamsTypedData,\n OriginalRequest,\n} from '../types';\n\nexport const PRIMARY_TYPE_DELEGATION = 'Delegation';\nexport const DELEGATOR_FIELD = 'delegator';\n\n/**\n * Validate a personal signature request.\n *\n * @param messageData - The message data to validate.\n */\nexport function validatePersonalSignatureRequest(\n messageData: MessageParamsPersonal,\n) {\n const { from, data } = messageData;\n\n validateAddress(from, 'from');\n\n if (!data || typeof data !== 'string') {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\n/**\n * Validate a typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.version - The version of the typed signature request.\n * @param options.decodedPermission - The decoded permission.\n */\nexport function validateTypedSignatureRequest({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n version,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n version: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n}) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n });\n }\n}\n\n/**\n * Validate a V1 typed signature request.\n *\n * @param messageData - The message data to validate.\n */\nfunction validateTypedSignatureRequestV1(messageData: MessageParamsTyped) {\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid message \"data\": ${messageData.data} must be a valid array.`,\n );\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typedSignatureHash(messageData.data as any);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\n/**\n * Validate a V3 or V4 typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n decodedPermission?: DecodedPermission;\n}) {\n if (\n !messageData.data ||\n Array.isArray(messageData.data) ||\n (typeof messageData.data !== 'object' &&\n typeof messageData.data !== 'string')\n ) {\n throw new Error(\n `Invalid message \"data\": Must be a valid string or object.`,\n );\n }\n\n let data;\n if (typeof messageData.data === 'object') {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error('Data must be passed as a valid JSON string.');\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\n 'Data must conform to EIP-712 schema. See https://git.io/fNtcx.',\n );\n }\n\n if (!currentChainId) {\n throw new Error('Current chainId cannot be null or undefined.');\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === 'string') {\n chainId = parseInt(chainId, chainId.startsWith('0x') ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(\n `Cannot sign messages for chainId \"${\n chainId as string\n }\", because MetaMask is switching networks.`,\n );\n }\n\n if (chainId !== activeChainId) {\n throw new Error(\n `Provided chainId \"${\n chainId as string\n }\" must match the active chainId \"${activeChainId}\"`,\n );\n }\n }\n\n const origin = request?.origin ?? messageData?.origin;\n\n validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n });\n\n validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n });\n}\n\n/**\n * Validate an Ethereum address.\n *\n * @param address - The address to validate.\n * @param propertyName - The name of the property source to use in the error message.\n */\nfunction validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== 'string' || !isValidHexAddress(address)) {\n throw new Error(\n `Invalid \"${propertyName}\" address: ${address} must be a valid string.`,\n );\n }\n}\n\n/**\n * Validate the verifying contract from a typed signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n */\nfunction validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n}) {\n const verifyingContract = data?.domain?.verifyingContract;\n const isExternal = origin && origin !== ORIGIN_METAMASK;\n\n if (\n verifyingContract &&\n typeof verifyingContract === 'string' &&\n isExternal &&\n internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === verifyingContract.toLowerCase(),\n )\n ) {\n throw new Error(\n `External signature requests cannot use internal accounts as the verifying contract.`,\n );\n }\n}\n\n/**\n * Validate a delegation signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n decodedPermission?: DecodedPermission;\n}) {\n if (!isDelegationRequest(data)) {\n return;\n }\n\n const hasDecodedPermission = decodedPermission !== undefined;\n if (!hasDecodedPermission) {\n const isOriginExternal = origin && origin !== ORIGIN_METAMASK;\n\n const delegatorAddressLowercase = (\n (data.message as Record<string, Json>)?.[DELEGATOR_FIELD] as Hex\n )?.toLowerCase();\n\n const isSignerInternal = internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === delegatorAddressLowercase,\n );\n\n if (isOriginExternal && isSignerInternal) {\n throw new Error(\n `External signature requests cannot sign delegations for internal accounts.`,\n );\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK } from '@metamask/approval-controller';\nimport { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport type { DecodedPermission } from '@metamask/gator-permissions-controller';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport { isDelegationRequest } from './delegations';\nimport type {\n MessageParamsPersonal,\n MessageParamsTyped,\n MessageParamsTypedData,\n OriginalRequest,\n} from '../types';\n\nexport const PRIMARY_TYPE_DELEGATION = 'Delegation';\nexport const DELEGATOR_FIELD = 'delegator';\n\n/**\n * Validate a personal signature request.\n *\n * @param messageData - The message data to validate.\n */\nexport function validatePersonalSignatureRequest(\n messageData: MessageParamsPersonal,\n) {\n const { from, data } = messageData;\n\n validateAddress(from, 'from');\n\n if (!data || typeof data !== 'string') {\n throw new Error(`Invalid message \"data\": ${data} must be a valid string.`);\n }\n}\n\n/**\n * Validate a typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.version - The version of the typed signature request.\n * @param options.decodedPermission - The decoded permission.\n */\nexport function validateTypedSignatureRequest({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n version,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n version: SignTypedDataVersion;\n decodedPermission?: DecodedPermission;\n}) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n });\n }\n}\n\n/**\n * Validate a V1 typed signature request.\n *\n * @param messageData - The message data to validate.\n */\nfunction validateTypedSignatureRequestV1(messageData: MessageParamsTyped) {\n if (!messageData.data || !Array.isArray(messageData.data)) {\n throw new Error(\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Invalid message \"data\": ${messageData.data} must be a valid array.`,\n );\n }\n\n try {\n // typedSignatureHash will throw if the data is invalid.\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typedSignatureHash(messageData.data as any);\n } catch (e) {\n throw new Error(`Expected EIP712 typed data.`);\n }\n}\n\n/**\n * Validate a V3 or V4 typed signature request.\n *\n * @param options - Options bag.\n * @param options.currentChainId - The current chain ID.\n * @param options.internalAccounts - The addresses of all internal accounts.\n * @param options.messageData - The message data to validate.\n * @param options.request - The original request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateTypedSignatureRequestV3V4({\n currentChainId,\n internalAccounts,\n messageData,\n request,\n decodedPermission,\n}: {\n currentChainId: Hex | undefined;\n internalAccounts: Hex[];\n messageData: MessageParamsTyped;\n request: OriginalRequest;\n decodedPermission?: DecodedPermission;\n}) {\n if (\n !messageData.data ||\n Array.isArray(messageData.data) ||\n (typeof messageData.data !== 'object' &&\n typeof messageData.data !== 'string')\n ) {\n throw new Error(\n `Invalid message \"data\": Must be a valid string or object.`,\n );\n }\n\n let data;\n if (typeof messageData.data === 'object') {\n data = messageData.data;\n } else {\n try {\n data = JSON.parse(messageData.data);\n } catch (e) {\n throw new Error('Data must be passed as a valid JSON string.');\n }\n }\n\n const validation = validate(data, TYPED_MESSAGE_SCHEMA);\n if (validation.errors.length > 0) {\n throw new Error(\n 'Data must conform to EIP-712 schema. See https://git.io/fNtcx.',\n );\n }\n\n if (!currentChainId) {\n throw new Error('Current chainId cannot be null or undefined.');\n }\n\n let { chainId } = data.domain;\n if (chainId) {\n if (typeof chainId === 'string') {\n chainId = parseInt(chainId, chainId.startsWith('0x') ? 16 : 10);\n }\n\n const activeChainId = parseInt(currentChainId, 16);\n if (Number.isNaN(activeChainId)) {\n throw new Error(\n `Cannot sign messages for chainId \"${\n chainId as string\n }\", because MetaMask is switching networks.`,\n );\n }\n\n if (chainId !== activeChainId) {\n throw new Error(\n `Provided chainId \"${\n chainId as string\n }\" must match the active chainId \"${activeChainId}\"`,\n );\n }\n }\n\n const origin = request?.origin ?? messageData?.origin;\n\n validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n });\n\n validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n });\n}\n\n/**\n * Validate an Ethereum address.\n *\n * @param address - The address to validate.\n * @param propertyName - The name of the property source to use in the error message.\n */\nfunction validateAddress(address: string, propertyName: string) {\n if (!address || typeof address !== 'string' || !isValidHexAddress(address)) {\n throw new Error(\n `Invalid \"${propertyName}\" address: ${address} must be a valid string.`,\n );\n }\n}\n\n/**\n * Validate the verifying contract from a typed signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n */\nfunction validateVerifyingContract({\n data,\n internalAccounts,\n origin,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n}) {\n const verifyingContract = data?.domain?.verifyingContract;\n const isExternal = origin && origin !== ORIGIN_METAMASK;\n\n if (\n verifyingContract &&\n typeof verifyingContract === 'string' &&\n isExternal &&\n internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === verifyingContract.toLowerCase(),\n )\n ) {\n throw new Error(\n `External signature requests cannot use internal accounts as the verifying contract.`,\n );\n }\n}\n\n/**\n * Validate a delegation signature request.\n *\n * @param options - Options bag.\n * @param options.data - The typed data to validate.\n * @param options.internalAccounts - The internal accounts.\n * @param options.origin - The origin of the request.\n * @param options.decodedPermission - The decoded permission.\n */\nfunction validateDelegation({\n data,\n internalAccounts,\n origin,\n decodedPermission,\n}: {\n data: MessageParamsTypedData;\n internalAccounts: Hex[];\n origin: string | undefined;\n decodedPermission?: DecodedPermission;\n}) {\n if (!isDelegationRequest(data)) {\n return;\n }\n\n const hasDecodedPermission = decodedPermission !== undefined;\n if (!hasDecodedPermission) {\n const isOriginExternal = origin && origin !== ORIGIN_METAMASK;\n\n const delegatorAddressLowercase = (\n (data.message as Record<string, Json>)?.[DELEGATOR_FIELD] as Hex\n )?.toLowerCase();\n\n const isSignerInternal = internalAccounts.some(\n (internalAccount) =>\n internalAccount.toLowerCase() === delegatorAddressLowercase,\n );\n\n if (isOriginExternal && isSignerInternal) {\n throw new Error(\n `External signature requests cannot sign delegations for internal accounts.`,\n );\n }\n }\n}\n"]}
|
package/package.json
CHANGED