@metamask-previews/signature-controller 19.1.0-preview-e46fca9e → 19.1.0-preview-2f4bcaa9

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/SignatureController.cjs +23 -18
  3. package/dist/SignatureController.cjs.map +1 -1
  4. package/dist/SignatureController.d.cts +2 -2
  5. package/dist/SignatureController.d.cts.map +1 -1
  6. package/dist/SignatureController.d.mts +2 -2
  7. package/dist/SignatureController.d.mts.map +1 -1
  8. package/dist/SignatureController.mjs +23 -18
  9. package/dist/SignatureController.mjs.map +1 -1
  10. package/dist/index.cjs +1 -0
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +1 -0
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +1 -0
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -0
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/types.cjs.map +1 -1
  19. package/dist/types.d.cts +3 -3
  20. package/dist/types.d.cts.map +1 -1
  21. package/dist/types.d.mts +3 -3
  22. package/dist/types.d.mts.map +1 -1
  23. package/dist/types.mjs.map +1 -1
  24. package/dist/utils/normalize.cjs +52 -0
  25. package/dist/utils/normalize.cjs.map +1 -0
  26. package/dist/utils/normalize.d.cts +16 -0
  27. package/dist/utils/normalize.d.cts.map +1 -0
  28. package/dist/utils/normalize.d.mts +16 -0
  29. package/dist/utils/normalize.d.mts.map +1 -0
  30. package/dist/utils/normalize.mjs +47 -0
  31. package/dist/utils/normalize.mjs.map +1 -0
  32. package/dist/utils/validation.cjs.map +1 -1
  33. package/dist/utils/validation.d.cts +1 -1
  34. package/dist/utils/validation.d.cts.map +1 -1
  35. package/dist/utils/validation.d.mts +1 -1
  36. package/dist/utils/validation.d.mts.map +1 -1
  37. package/dist/utils/validation.mjs.map +1 -1
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - Remove usage of `@metamask/message-manager` package ([#4785](https://github.com/MetaMask/core/pull/4785))
13
+ - Add `signatureRequests` object to state to include all messages with all types and statuses.
14
+ - Add optional `state` option to constructor to provide initial state.
15
+ - Add equivalent types formerly in `@metamask/message-manager`:
16
+ - `OriginalRequest`
17
+ - `TypedSigningOptions`
18
+ - `MessageParams`
19
+ - `MessageParamsPersonal`
20
+ - `MessageParamsTyped`
21
+ - `SignatureRequest`
22
+ - `SignatureRequestStatus`
23
+ - `SignatureRequestType`
24
+
25
+ ### Changed
26
+
27
+ - Remove usage of `@metamask/message-manager` package ([#4785](https://github.com/MetaMask/core/pull/4785))
28
+ - **BREAKING** Change `type` property in message state to enum values rather than `string`.
29
+ - Deprecreate the following state since the same data can be derived from `signatureRequests`:
30
+ - `unapprovedPersonalMsgs`
31
+ - `unapprovedTypedMessages`
32
+ - `unapprovedPersonalMsgCount`
33
+ - `unapprovedTypedMessagesCount`
34
+ - Deprecreate the following properties since the same data can be derived from the state:
35
+ - `unapprovedPersonalMessagesCount`
36
+ - `unapprovedTypedMessagesCount`
37
+ - `messages`
38
+ - Deprecreate the following constructor options since they are no longer used:
39
+ - `getAllState`
40
+ - `securityProviderRequest`
41
+
10
42
  ## [19.1.0]
11
43
 
12
44
  ### Added
@@ -24,6 +24,7 @@ const events_1 = __importDefault(require("events"));
24
24
  const uuid_1 = require("uuid");
25
25
  const logger_1 = require("./logger.cjs");
26
26
  const types_1 = require("./types.cjs");
27
+ const normalize_1 = require("./utils/normalize.cjs");
27
28
  const validation_1 = require("./utils/validation.cjs");
28
29
  const controllerName = 'SignatureController';
29
30
  const stateMetadata = {
@@ -135,9 +136,10 @@ class SignatureController extends base_controller_1.BaseController {
135
136
  */
136
137
  async newUnsignedPersonalMessage(messageParams, request, options = {}) {
137
138
  (0, validation_1.validatePersonalSignatureRequest)(messageParams);
138
- messageParams.siwe = (0, controller_utils_1.detectSIWE)(messageParams);
139
+ const normalizedMessageParams = (0, normalize_1.normalizePersonalMessageParams)(messageParams);
140
+ normalizedMessageParams.siwe = (0, controller_utils_1.detectSIWE)(messageParams);
139
141
  return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
140
- messageParams,
142
+ messageParams: normalizedMessageParams,
141
143
  request,
142
144
  type: types_1.SignatureRequestType.PersonalSign,
143
145
  approvalType: controller_utils_1.ApprovalType.PersonalSign,
@@ -157,8 +159,9 @@ class SignatureController extends base_controller_1.BaseController {
157
159
  */
158
160
  async newUnsignedTypedMessage(messageParams, request, version, signingOptions, options = {}) {
159
161
  (0, validation_1.validateTypedSignatureRequest)(messageParams, version, __classPrivateFieldGet(this, _SignatureController_getCurrentChainId, "f").call(this));
162
+ const normalizedMessageParams = (0, normalize_1.normalizeTypedMessageParams)(messageParams, version);
160
163
  return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
161
- messageParams,
164
+ messageParams: normalizedMessageParams,
162
165
  request,
163
166
  type: types_1.SignatureRequestType.TypedSign,
164
167
  approvalType: controller_utils_1.ApprovalType.EthSignTypedData,
@@ -174,9 +177,10 @@ class SignatureController extends base_controller_1.BaseController {
174
177
  * @param signatureRequestId - The ID of the signature request.
175
178
  * @param signature - The signature to provide.
176
179
  */
180
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
177
181
  setDeferredSignSuccess(signatureRequestId, signature) {
178
182
  const updatedSignatureRequest = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
179
- draftMetadata.signature = signature;
183
+ draftMetadata.rawSig = signature;
180
184
  draftMetadata.status = types_1.SignatureRequestStatus.Signed;
181
185
  });
182
186
  this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);
@@ -250,7 +254,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
250
254
  try {
251
255
  const metadata = {
252
256
  id: (0, uuid_1.v1)(),
253
- request: finalMessageParams,
257
+ messageParams: finalMessageParams,
254
258
  securityAlertResponse,
255
259
  signingOptions,
256
260
  status: types_1.SignatureRequestStatus.Unapproved,
@@ -298,17 +302,17 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
298
302
  });
299
303
  await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signRequest).call(this, metadata));
300
304
  }, _SignatureController_signRequest = async function _SignatureController_signRequest(metadata) {
301
- const { id, request, signingOptions, type } = metadata;
305
+ const { id, messageParams, signingOptions, type } = metadata;
302
306
  try {
303
307
  let signature;
304
308
  switch (type) {
305
309
  case types_1.SignatureRequestType.PersonalSign:
306
- signature = await this.messagingSystem.call('KeyringController:signPersonalMessage', request);
310
+ signature = await this.messagingSystem.call('KeyringController:signPersonalMessage', messageParams);
307
311
  break;
308
312
  case types_1.SignatureRequestType.TypedSign:
309
313
  const finalRequest = signingOptions?.parseJsonData
310
- ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_parseTypedData).call(this, request, metadata.version)
311
- : request;
314
+ ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_parseTypedData).call(this, messageParams, metadata.version)
315
+ : messageParams;
312
316
  signature = await this.messagingSystem.call('KeyringController:signTypedMessage', finalRequest, metadata.version);
313
317
  break;
314
318
  /* istanbul ignore next */
@@ -316,14 +320,15 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
316
320
  throw new Error(`Unknown signature request type: ${type}`);
317
321
  }
318
322
  this.hub.emit(`${type}:signed`, { signature, messageId: id });
319
- if (request.deferSetAsSigned) {
323
+ if (messageParams.deferSetAsSigned) {
320
324
  return;
321
325
  }
322
326
  const finalMetadata = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, id, (draftMetadata) => {
323
- draftMetadata.signature = signature;
327
+ draftMetadata.rawSig = signature;
324
328
  draftMetadata.status = types_1.SignatureRequestStatus.Signed;
325
329
  });
326
330
  this.hub.emit(`${id}:finished`, finalMetadata);
331
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
327
332
  }
328
333
  catch (error) {
329
334
  if (type === types_1.SignatureRequestType.TypedSign) {
@@ -349,21 +354,21 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
349
354
  }, _SignatureController_waitForSignatureRequestFinished = async function _SignatureController_waitForSignatureRequestFinished(id) {
350
355
  return new Promise((resolve, reject) => {
351
356
  this.hub.once(`${id}:finished`, (metadata) => {
352
- const { request, signature, status, type } = metadata;
357
+ const { messageParams, rawSig, status, type } = metadata;
353
358
  switch (status) {
354
359
  case types_1.SignatureRequestStatus.Signed:
355
- return resolve(signature);
360
+ return resolve(rawSig);
356
361
  case types_1.SignatureRequestStatus.Rejected:
357
362
  return reject(new Error(`MetaMask ${type} Signature: User denied message signature.`));
358
363
  /* istanbul ignore next */
359
364
  default:
360
- return reject(new Error(`MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(request)}`));
365
+ return reject(new Error(`MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(messageParams)}`));
361
366
  }
362
367
  });
363
368
  });
364
369
  }, _SignatureController_requestApproval = async function _SignatureController_requestApproval(metadata, type, { traceContext, actionId, }) {
365
- const { id, request } = metadata;
366
- const origin = request.origin || controller_utils_1.ORIGIN_METAMASK;
370
+ const { id, messageParams } = metadata;
371
+ const origin = messageParams.origin || controller_utils_1.ORIGIN_METAMASK;
367
372
  await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, {
368
373
  name: 'Notification Display',
369
374
  id: actionId,
@@ -373,7 +378,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
373
378
  id,
374
379
  origin,
375
380
  type,
376
- requestData: { ...request },
381
+ requestData: { ...messageParams },
377
382
  expectsResult: true,
378
383
  }, true));
379
384
  }, _SignatureController_updateMetadata = function _SignatureController_updateMetadata(id, callback) {
@@ -400,7 +405,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
400
405
  .filter((request) => request.type === type)
401
406
  .reduce((acc, request) => ({
402
407
  ...acc,
403
- [request.id]: { ...request, msgParams: request.request },
408
+ [request.id]: { ...request, msgParams: request.messageParams },
404
409
  }), {});
405
410
  }, _SignatureController_addLog = function _SignatureController_addLog(signatureRequestType, version, stage, signingData) {
406
411
  const signingMethod = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getSignTypeForLogger).call(this, signatureRequestType, version);
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureController.cjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } 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 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 { Hex, Json } from '@metamask/utils';\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} from './types';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\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 * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, any>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, any>;\n\n /**\n * Number of unapproved personal messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AddApprovalRequest\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction\n | AddLog;\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 = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * @deprecated No longer in use.\n */\n getAllState?: () => unknown;\n\n /**\n * Callback that returns the current chain ID.\n */\n getCurrentChainId: () => Hex;\n\n /**\n * Restricted controller 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 * 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 #getCurrentChainId: () => Hex;\n\n #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.getCurrentChainId - A function that returns the current chain ID.\n * @param options.messenger - The restricted controller 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 getCurrentChainId,\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.#getCurrentChainId = getCurrentChainId;\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\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 * @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 * @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) => metadata.status === 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) => metadata.status === 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 messageParams.siwe = detectSIWE(messageParams);\n\n return this.#processSignatureRequest({\n messageParams,\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 version - 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 version: string,\n signingOptions: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validateTypedSignatureRequest(\n messageParams,\n version as SignTypedDataVersion,\n this.#getCurrentChainId(),\n );\n\n return this.#processSignatureRequest({\n messageParams,\n request,\n type: SignatureRequestType.TypedSign,\n approvalType: ApprovalType.EthSignTypedData,\n version: version as SignTypedDataVersion,\n signingOptions,\n traceContext: options.traceContext,\n });\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 setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.signature = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\n }\n\n /**\n * Set custom metadata on a signature request.\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\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 messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n }: {\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const { securityAlertResponse } = request;\n\n const finalMessageParams = {\n ...messageParams,\n origin: request.origin,\n requestId: request.id,\n };\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n const metadata = {\n id: random(),\n request: finalMessageParams,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n const finishedPromise = this.#waitForSignatureRequestFinished(\n metadata.id,\n );\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 resultCallbacks = acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', metadata.id);\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(metadata.id);\n\n throw error;\n }\n\n await this.#approveAndSignRequest(metadata, traceContext);\n\n const signature = await finishedPromise;\n\n log('Signature request finished', { id: metadata.id, signature });\n\n this.#addLog(type, version, SigningStage.Signed, messageParams);\n\n resultCallbacks?.success(signature);\n\n return signature;\n } catch (error) {\n log('Signature request failed', error);\n resultCallbacks?.error(error as Error);\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, request, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messagingSystem.call(\n 'KeyringController:signPersonalMessage',\n request,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(request, metadata.version)\n : request;\n\n signature = await this.messagingSystem.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 (request.deferSetAsSigned) {\n return;\n }\n\n const finalMetadata = this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.signature = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n\n this.hub.emit(`${id}:finished`, finalMetadata);\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error.message;\n });\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw 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 #waitForSignatureRequestFinished(id: string): Promise<string> {\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n const { request, signature, status, type } = metadata;\n\n switch (status) {\n case SignatureRequestStatus.Signed:\n return resolve(signature as string);\n\n case SignatureRequestStatus.Rejected:\n return reject(\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n ),\n );\n\n /* istanbul ignore next */\n default:\n return reject(\n new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n request,\n )}`,\n ),\n );\n }\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, request } = metadata;\n const origin = request.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...request } as any,\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 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 callback(metadata);\n });\n\n return nextState.signatureRequests[id];\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n // eslint-disable-next-line n/callback-return, n/no-callback-literal\n callback(state as any);\n\n const unapprovedRequests = Object.values(\n state.signatureRequests as unknown as Record<string, SignatureRequest>,\n ).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n );\n\n state.unapprovedPersonalMsgs = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n state.unapprovedTypedMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n state.unapprovedPersonalMsgCount = Object.values(\n state.unapprovedPersonalMsgs,\n ).length;\n\n state.unapprovedTypedMessagesCount = Object.values(\n state.unapprovedTypedMessages,\n ).length;\n });\n }\n\n #generateLegacyState(\n unapprovedSignatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ) {\n return unapprovedSignatureRequests\n .filter((request) => request.type === type)\n .reduce(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.request },\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.messagingSystem.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"]}
1
+ {"version":3,"file":"SignatureController.cjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAUA,+DAA2D;AAE3D,iEAIoC;AAMpC,qEAAoE;AACpE,qEAKsC;AAEtC,oDAAkC;AAClC,+BAAoC;AAEpC,yCAAgD;AAChD,uCAAuE;AASvE,qDAG2B;AAC3B,uDAG4B;AAE5B,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C,MAAM,aAAa,GAAG;IACpB,iBAAiB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IACvD,sBAAsB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5D,uBAAuB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAC7D,0BAA0B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;IAChE,4BAA4B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;CACnE,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7B,iBAAiB,EAAE,EAAE;IACrB,sBAAsB,EAAE,EAAE;IAC1B,uBAAuB,EAAE,EAAE;IAC3B,0BAA0B,EAAE,CAAC;IAC7B,4BAA4B,EAAE,CAAC;CAChC,CAAC,CAAC;AAmGH;;GAEG;AACH,MAAa,mBAAoB,SAAQ,gCAIxC;IAOC;;;;;;;;OAQG;IACH,YAAY,EACV,iBAAiB,EACjB,SAAS,EACT,KAAK,EACL,KAAK,GACsB;QAC3B,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,aAAa;YACvB,SAAS;YACT,KAAK,EAAE;gBACL,GAAG,eAAe,EAAE;gBACpB,GAAG,KAAK;aACT;SACF,CAAC,CAAC;;QA3BL,yDAA8B;QAE9B,6CAAsB;QA2BpB,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAY,EAAE,CAAC;QAC9B,uBAAA,IAAI,0CAAsB,iBAAiB,MAAA,CAAC;QAC5C,uBAAA,IAAI,8BAAU,KAAK,IAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAmB,MAAA,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACH,IAAI,+BAA+B;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,IAAI,4BAA4B;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAAe;QAC9B,MAAM,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAC/C,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC7B,CAAC,MAAM,CACN,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,8BAAsB,CAAC,UAAU,CACpE,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,2BAA2B,EAAE;YAClD,uBAAA,IAAI,mFAAwB,MAA5B,IAAI,EAAyB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SACnD;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QACb,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC;iBACnC,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,8BAAsB,CAAC,UAAU,CACpE;iBACA,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,0BAA0B,CAC9B,aAAoC,EACpC,OAAwB,EACxB,UAA2C,EAAE;QAE7C,IAAA,6CAAgC,EAAC,aAAa,CAAC,CAAC;QAEhD,MAAM,uBAAuB,GAC3B,IAAA,0CAA8B,EAAC,aAAa,CAAC,CAAC;QAEhD,uBAAuB,CAAC,IAAI,GAAG,IAAA,6BAAU,EAAC,aAAa,CAAC,CAAC;QAEzD,OAAO,uBAAA,IAAI,oFAAyB,MAA7B,IAAI,EAA0B;YACnC,aAAa,EAAE,uBAAuB;YACtC,OAAO;YACP,IAAI,EAAE,4BAAoB,CAAC,YAAY;YACvC,YAAY,EAAE,+BAAY,CAAC,YAAY;YACvC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,uBAAuB,CAC3B,aAAiC,EACjC,OAAwB,EACxB,OAAe,EACf,cAAmC,EACnC,UAA2C,EAAE;QAE7C,IAAA,0CAA6B,EAC3B,aAAa,EACb,OAA+B,EAC/B,uBAAA,IAAI,8CAAmB,MAAvB,IAAI,CAAqB,CAC1B,CAAC;QAEF,MAAM,uBAAuB,GAAG,IAAA,uCAA2B,EACzD,aAAa,EACb,OAA+B,CAChC,CAAC;QAEF,OAAO,uBAAA,IAAI,oFAAyB,MAA7B,IAAI,EAA0B;YACnC,aAAa,EAAE,uBAAuB;YACtC,OAAO;YACP,IAAI,EAAE,4BAAoB,CAAC,SAAS;YACpC,YAAY,EAAE,+BAAY,CAAC,gBAAgB;YAC3C,OAAO,EAAE,OAA+B;YACxC,cAAc;YACd,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,8DAA8D;IAC9D,sBAAsB,CAAC,kBAA0B,EAAE,SAAc;QAC/D,MAAM,uBAAuB,GAAG,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAClC,kBAAkB,EAClB,CAAC,aAAa,EAAE,EAAE;YAChB,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;YACjC,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,MAAM,CAAC;QACvD,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,kBAA0B,EAAE,QAAc;QAC3D,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,kBAAkB,EAAE,CAAC,aAAa,EAAE,EAAE;YACzD,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,kBAA0B;QAC7C,MAAM,uBAAuB,GAAG,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAClC,kBAAkB,EAClB,CAAC,aAAa,EAAE,EAAE;YAChB,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,QAAQ,CAAC;QACzD,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACH,yBAAyB,CAAC,kBAA0B;QAClD,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,kBAAkB,EAAE,CAAC,aAAa,EAAE,EAAE;YACzD,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,UAAU,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,4BAA4B,CAAC,kBAA0B;QACrD,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;CAsXF;AA1mBD,kDA0mBC;uOAnXG,aAAiC,EACjC,OAA8B;IAE9B,IACE,CAAC,CAAC,yCAAoB,CAAC,EAAE,EAAE,yCAAoB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAC1D,OAA+B,CAChC;QACD,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ,EACtC;QACA,OAAO,aAAa,CAAC;KACtB;IAED,OAAO;QACL,GAAG,aAAa;QAChB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC,iDAED,KAAK,uDAA0B,EAC7B,aAAa,EACb,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,cAAc,EACd,YAAY,GASb;IACC,IAAA,sBAAG,EAAC,8BAA8B,EAAE;QAClC,aAAa;QACb,OAAO;QACP,IAAI;QACJ,OAAO;KACR,CAAC,CAAC;IAEH,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,IAAI,EAAE,OAAO,EAAE,iCAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAElE,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAE1C,MAAM,kBAAkB,GAAG;QACzB,GAAG,aAAa;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,EAAE;KACtB,CAAC;IAEF,IAAI,eAAkD,CAAC;IAEvD,IAAI;QACF,MAAM,QAAQ,GAAG;YACf,EAAE,EAAE,IAAA,SAAM,GAAE;YACZ,aAAa,EAAE,kBAAkB;YACjC,qBAAqB;YACrB,cAAc;YACd,MAAM,EAAE,8BAAsB,CAAC,UAAU;YACzC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,IAAI;YACJ,OAAO;SACY,CAAC;QAEtB,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,CAAC,KAAK,EAAE,EAAE;YAC1B,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACjC,aAAa;YACb,UAAU,EAAE,QAAQ,CAAC,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,uBAAA,IAAI,4FAAiC,MAArC,IAAI,EAC1B,QAAQ,CAAC,EAAE,CACZ,CAAC;QAEF,IAAI;YACF,MAAM,YAAY,GAAG,MAAM,uBAAA,IAAI,kCAAO,MAAX,IAAI,EAC7B,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,EACvD,CAAC,OAAO,EAAE,EAAE,CACV,uBAAA,IAAI,4EAAiB,MAArB,IAAI,EAAkB,QAAQ,EAAE,YAAY,EAAE;gBAC5C,YAAY,EAAE,OAAO;gBACrB,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE;aAClC,CAAC,CACL,CAAC;YAEF,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC;SAChD;QAAC,OAAO,KAAK,EAAE;YACd,IAAA,sBAAG,EAAC,uBAAuB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE1C,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,IAAI,EAAE,OAAO,EAAE,iCAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAClE,uBAAA,IAAI,mFAAwB,MAA5B,IAAI,EAAyB,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE1C,MAAM,KAAK,CAAC;SACb;QAED,MAAM,uBAAA,IAAI,kFAAuB,MAA3B,IAAI,EAAwB,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC;QAExC,IAAA,sBAAG,EAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAElE,uBAAA,IAAI,mEAAQ,MAAZ,IAAI,EAAS,IAAI,EAAE,OAAO,EAAE,iCAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEhE,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEpC,OAAO,SAAS,CAAC;KAClB;IAAC,OAAO,KAAK,EAAE;QACd,IAAA,sBAAG,EAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACvC,eAAe,EAAE,KAAK,CAAC,KAAc,CAAC,CAAC;QACvC,MAAM,KAAK,CAAC;KACb;AACH,CAAC,+CAED,KAAK,qDACH,QAA0B,EAC1B,YAA2B;IAE3B,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;IAExB,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;QACzC,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,QAAQ,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,uBAAA,IAAI,kCAAO,MAAX,IAAI,EAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CACpE,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,QAAQ,CAAC,CAC5B,CAAC;AACJ,CAAC,qCAED,KAAK,2CAAc,QAA0B;IAC3C,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAE7D,IAAI;QACF,IAAI,SAAiB,CAAC;QAEtB,QAAQ,IAAI,EAAE;YACZ,KAAK,4BAAoB,CAAC,YAAY;gBACpC,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CACzC,uCAAuC,EACvC,aAAa,CACd,CAAC;gBACF,MAAM;YAER,KAAK,4BAAoB,CAAC,SAAS;gBACjC,MAAM,YAAY,GAAG,cAAc,EAAE,aAAa;oBAChD,CAAC,CAAC,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC;oBACvD,CAAC,CAAC,aAAa,CAAC;gBAElB,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CACzC,oCAAoC,EACpC,YAAY,EACZ,QAAQ,CAAC,OAA+B,CACzC,CAAC;gBACF,MAAM;YAER,0BAA0B;YAC1B;gBACE,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAc,EAAE,CAAC,CAAC;SACxE;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9D,IAAI,aAAa,CAAC,gBAAgB,EAAE;YAClC,OAAO;SACR;QAED,MAAM,aAAa,GAAG,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;YAC/D,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;YACjC,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAC/C,8DAA8D;KAC/D;IAAC,OAAO,KAAU,EAAE;QACnB,IAAI,IAAI,KAAK,4BAAoB,CAAC,SAAS,EAAE;YAC3C,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;gBACzC,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,OAAO,CAAC;gBACtD,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;YACtC,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,uBAAA,IAAI,mFAAwB,MAA5B,IAAI,EAAyB,EAAE,CAAC,CAAC;SAClC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5C,MAAM,KAAK,CAAC;KACb;AACH,CAAC,qGAEuB,kBAA0B,EAAE,MAAe;IACjE,IAAI,MAAM,EAAE;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;KACzD;IAED,uBAAA,IAAI,2EAAgB,MAApB,IAAI,EAAiB,kBAAkB,EAAE,CAAC,aAAa,EAAE,EAAE;QACzD,aAAa,CAAC,MAAM,GAAG,8BAAsB,CAAC,QAAQ,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,yDAED,KAAK,+DAAkC,EAAU;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,QAA0B,EAAE,EAAE;YAC7D,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YAEzD,QAAQ,MAAM,EAAE;gBACd,KAAK,8BAAsB,CAAC,MAAM;oBAChC,OAAO,OAAO,CAAC,MAAgB,CAAC,CAAC;gBAEnC,KAAK,8BAAsB,CAAC,QAAQ;oBAClC,OAAO,MAAM,CACX,IAAI,KAAK,CACP,YAAY,IAAI,4CAA4C,CAC7D,CACF,CAAC;gBAEJ,0BAA0B;gBAC1B;oBACE,OAAO,MAAM,CACX,IAAI,KAAK,CACP,YAAY,IAAI,gCAAgC,IAAI,CAAC,SAAS,CAC5D,aAAa,CACd,EAAE,CACJ,CACF,CAAC;aACL;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,yCAED,KAAK,+CACH,QAA0B,EAC1B,IAAkB,EAClB,EACE,YAAY,EACZ,QAAQ,GAC2C;IAErD,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,kCAAe,CAAC;IAEvD,MAAM,uBAAA,IAAI,kCAAO,MAAX,IAAI,EAAQ;QAChB,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,QAAQ;QACZ,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CACrC,+BAA+B,EAC/B;QACE,EAAE;QACF,MAAM;QACN,IAAI;QACJ,WAAW,EAAE,EAAE,GAAG,aAAa,EAAE;QACjC,aAAa,EAAE,IAAI;KACpB,EACD,IAAI,CACL,CAAuB,CAAC;AAC3B,CAAC,qFAGC,EAAU,EACV,QAA8C;IAE9C,MAAM,EAAE,SAAS,EAAE,GAAG,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,CAAC,KAAK,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;SAC9D;QAED,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC,+EAEY,QAAmD;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,oEAAoE;QACpE,QAAQ,CAAC,KAA4C,CAAC,CAAC;QAEvD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CACtC,KAAK,CAAC,iBAAgE,CACvE,CAAC,MAAM,CACN,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,8BAAsB,CAAC,UAAU,CAClE,CAAC;QAEF,KAAK,CAAC,sBAAsB,GAAG,uBAAA,IAAI,gFAAqB,MAAzB,IAAI,EACjC,kBAAkB,EAClB,4BAAoB,CAAC,YAAY,CAClC,CAAC;QAEF,KAAK,CAAC,uBAAuB,GAAG,uBAAA,IAAI,gFAAqB,MAAzB,IAAI,EAClC,kBAAkB,EAClB,4BAAoB,CAAC,SAAS,CAC/B,CAAC;QAEF,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAC9C,KAAK,CAAC,sBAAsB,CAC7B,CAAC,MAAM,CAAC;QAET,KAAK,CAAC,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAChD,KAAK,CAAC,uBAAuB,CAC9B,CAAC,MAAM,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC,+FAGC,2BAA+C,EAC/C,IAA0B;IAE1B,OAAO,2BAA2B;SAC/B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;SAC1C,MAAM,CACL,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACjB,GAAG,GAAG;QACN,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,aAAa,EAAE;KAC/D,CAAC,EACF,EAAE,CACH,CAAC;AACN,CAAC,qEAGC,oBAA0C,EAC1C,OAAyC,EACzC,KAAmB,EACnB,WAA0B;IAE1B,MAAM,aAAa,GAAG,uBAAA,IAAI,iFAAsB,MAA1B,IAAI,EACxB,oBAAoB,EACpB,OAAO,CACR,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,EAAE;QACjD,IAAI,EAAE,4BAAO,CAAC,UAAU;QACxB,IAAI,EAAE;YACJ,aAAa;YACb,KAAK;YACL,WAAW;SACZ;KACF,CAAC,CAAC;AACL,CAAC,iGAGC,WAAiC,EACjC,OAA8B;IAE9B,IAAI,WAAW,KAAK,4BAAoB,CAAC,YAAY,EAAE;QACrD,OAAO,kCAAa,CAAC,YAAY,CAAC;KACnC;IAED,IACE,WAAW,KAAK,4BAAoB,CAAC,SAAS;QAC9C,OAAO,KAAK,yCAAoB,CAAC,EAAE,EACnC;QACA,OAAO,kCAAa,CAAC,kBAAkB,CAAC;KACzC;IAED,IACE,WAAW,KAAK,4BAAoB,CAAC,SAAS;QAC9C,OAAO,KAAK,yCAAoB,CAAC,EAAE,EACnC;QACA,OAAO,kCAAa,CAAC,kBAAkB,CAAC;KACzC;IAED,OAAO,kCAAa,CAAC,gBAAgB,CAAC;AACxC,CAAC","sourcesContent":["import type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } 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 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 { Hex, Json } from '@metamask/utils';\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} from './types';\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: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\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 * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, SignatureRequest>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, SignatureRequest>;\n\n /**\n * Number of unapproved personal messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AddApprovalRequest\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction\n | AddLog;\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 = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * @deprecated No longer in use.\n */\n getAllState?: () => unknown;\n\n /**\n * Callback that returns the current chain ID.\n */\n getCurrentChainId: () => Hex;\n\n /**\n * Restricted controller 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 * 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 #getCurrentChainId: () => Hex;\n\n #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.getCurrentChainId - A function that returns the current chain ID.\n * @param options.messenger - The restricted controller 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 getCurrentChainId,\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.#getCurrentChainId = getCurrentChainId;\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\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 * @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 * @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) => metadata.status === 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) => metadata.status === 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(messageParams);\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 version - 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 version: string,\n signingOptions: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validateTypedSignatureRequest(\n messageParams,\n version as SignTypedDataVersion,\n this.#getCurrentChainId(),\n );\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version as SignTypedDataVersion,\n );\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.TypedSign,\n approvalType: ApprovalType.EthSignTypedData,\n version: version as SignTypedDataVersion,\n signingOptions,\n traceContext: options.traceContext,\n });\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\n }\n\n /**\n * Set custom metadata on a signature request.\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\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 messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n }: {\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const { securityAlertResponse } = request;\n\n const finalMessageParams = {\n ...messageParams,\n origin: request.origin,\n requestId: request.id,\n };\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n const metadata = {\n id: random(),\n messageParams: finalMessageParams,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n const finishedPromise = this.#waitForSignatureRequestFinished(\n metadata.id,\n );\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 resultCallbacks = acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', metadata.id);\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(metadata.id);\n\n throw error;\n }\n\n await this.#approveAndSignRequest(metadata, traceContext);\n\n const signature = await finishedPromise;\n\n log('Signature request finished', { id: metadata.id, signature });\n\n this.#addLog(type, version, SigningStage.Signed, messageParams);\n\n resultCallbacks?.success(signature);\n\n return signature;\n } catch (error) {\n log('Signature request failed', error);\n resultCallbacks?.error(error as Error);\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.messagingSystem.call(\n 'KeyringController:signPersonalMessage',\n messageParams,\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.messagingSystem.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 const finalMetadata = this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n\n this.hub.emit(`${id}:finished`, finalMetadata);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error.message;\n });\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw 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 #waitForSignatureRequestFinished(id: string): Promise<string> {\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n const { messageParams, rawSig, status, type } = metadata;\n\n switch (status) {\n case SignatureRequestStatus.Signed:\n return resolve(rawSig as string);\n\n case SignatureRequestStatus.Rejected:\n return reject(\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n ),\n );\n\n /* istanbul ignore next */\n default:\n return reject(\n new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n messageParams,\n )}`,\n ),\n );\n }\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.messagingSystem.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 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 callback(metadata);\n });\n\n return nextState.signatureRequests[id];\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n // eslint-disable-next-line n/callback-return, n/no-callback-literal\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(\n state.signatureRequests as unknown as Record<string, SignatureRequest>,\n ).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n );\n\n state.unapprovedPersonalMsgs = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n state.unapprovedTypedMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n state.unapprovedPersonalMsgCount = Object.values(\n state.unapprovedPersonalMsgs,\n ).length;\n\n state.unapprovedTypedMessagesCount = Object.values(\n state.unapprovedTypedMessages,\n ).length;\n });\n }\n\n #generateLegacyState(\n unapprovedSignatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ) {\n return unapprovedSignatureRequests\n .filter((request) => request.type === type)\n .reduce(\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.messagingSystem.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"]}
@@ -18,12 +18,12 @@ export type SignatureControllerState = {
18
18
  * Map of personal messages with the unapproved status, keyed by ID.
19
19
  * @deprecated - Use `signatureRequests` instead.
20
20
  */
21
- unapprovedPersonalMsgs: Record<string, any>;
21
+ unapprovedPersonalMsgs: Record<string, SignatureRequest>;
22
22
  /**
23
23
  * Map of typed messages with the unapproved status, keyed by ID.
24
24
  * @deprecated - Use `signatureRequests` instead.
25
25
  */
26
- unapprovedTypedMessages: Record<string, any>;
26
+ unapprovedTypedMessages: Record<string, SignatureRequest>;
27
27
  /**
28
28
  * Number of unapproved personal messages.
29
29
  * @deprecated - Use `signatureRequests` instead.
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureController.d.cts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SignatureController.d.cts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"}
@@ -18,12 +18,12 @@ export type SignatureControllerState = {
18
18
  * Map of personal messages with the unapproved status, keyed by ID.
19
19
  * @deprecated - Use `signatureRequests` instead.
20
20
  */
21
- unapprovedPersonalMsgs: Record<string, any>;
21
+ unapprovedPersonalMsgs: Record<string, SignatureRequest>;
22
22
  /**
23
23
  * Map of typed messages with the unapproved status, keyed by ID.
24
24
  * @deprecated - Use `signatureRequests` instead.
25
25
  */
26
- unapprovedTypedMessages: Record<string, any>;
26
+ unapprovedTypedMessages: Record<string, SignatureRequest>;
27
27
  /**
28
28
  * Number of unapproved personal messages.
29
29
  * @deprecated - Use `signatureRequests` instead.
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureController.d.mts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SignatureController.d.mts","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ import EventEmitter from "events";
18
18
  import { v1 as random } from "uuid";
19
19
  import { projectLogger as log } from "./logger.mjs";
20
20
  import { SignatureRequestStatus, SignatureRequestType } from "./types.mjs";
21
+ import { normalizePersonalMessageParams, normalizeTypedMessageParams } from "./utils/normalize.mjs";
21
22
  import { validatePersonalSignatureRequest, validateTypedSignatureRequest } from "./utils/validation.mjs";
22
23
  const controllerName = 'SignatureController';
23
24
  const stateMetadata = {
@@ -129,9 +130,10 @@ export class SignatureController extends BaseController {
129
130
  */
130
131
  async newUnsignedPersonalMessage(messageParams, request, options = {}) {
131
132
  validatePersonalSignatureRequest(messageParams);
132
- messageParams.siwe = detectSIWE(messageParams);
133
+ const normalizedMessageParams = normalizePersonalMessageParams(messageParams);
134
+ normalizedMessageParams.siwe = detectSIWE(messageParams);
133
135
  return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
134
- messageParams,
136
+ messageParams: normalizedMessageParams,
135
137
  request,
136
138
  type: SignatureRequestType.PersonalSign,
137
139
  approvalType: ApprovalType.PersonalSign,
@@ -151,8 +153,9 @@ export class SignatureController extends BaseController {
151
153
  */
152
154
  async newUnsignedTypedMessage(messageParams, request, version, signingOptions, options = {}) {
153
155
  validateTypedSignatureRequest(messageParams, version, __classPrivateFieldGet(this, _SignatureController_getCurrentChainId, "f").call(this));
156
+ const normalizedMessageParams = normalizeTypedMessageParams(messageParams, version);
154
157
  return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
155
- messageParams,
158
+ messageParams: normalizedMessageParams,
156
159
  request,
157
160
  type: SignatureRequestType.TypedSign,
158
161
  approvalType: ApprovalType.EthSignTypedData,
@@ -168,9 +171,10 @@ export class SignatureController extends BaseController {
168
171
  * @param signatureRequestId - The ID of the signature request.
169
172
  * @param signature - The signature to provide.
170
173
  */
174
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
175
  setDeferredSignSuccess(signatureRequestId, signature) {
172
176
  const updatedSignatureRequest = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
173
- draftMetadata.signature = signature;
177
+ draftMetadata.rawSig = signature;
174
178
  draftMetadata.status = SignatureRequestStatus.Signed;
175
179
  });
176
180
  this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);
@@ -243,7 +247,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
243
247
  try {
244
248
  const metadata = {
245
249
  id: random(),
246
- request: finalMessageParams,
250
+ messageParams: finalMessageParams,
247
251
  securityAlertResponse,
248
252
  signingOptions,
249
253
  status: SignatureRequestStatus.Unapproved,
@@ -291,17 +295,17 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
291
295
  });
292
296
  await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signRequest).call(this, metadata));
293
297
  }, _SignatureController_signRequest = async function _SignatureController_signRequest(metadata) {
294
- const { id, request, signingOptions, type } = metadata;
298
+ const { id, messageParams, signingOptions, type } = metadata;
295
299
  try {
296
300
  let signature;
297
301
  switch (type) {
298
302
  case SignatureRequestType.PersonalSign:
299
- signature = await this.messagingSystem.call('KeyringController:signPersonalMessage', request);
303
+ signature = await this.messagingSystem.call('KeyringController:signPersonalMessage', messageParams);
300
304
  break;
301
305
  case SignatureRequestType.TypedSign:
302
306
  const finalRequest = signingOptions?.parseJsonData
303
- ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_parseTypedData).call(this, request, metadata.version)
304
- : request;
307
+ ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_parseTypedData).call(this, messageParams, metadata.version)
308
+ : messageParams;
305
309
  signature = await this.messagingSystem.call('KeyringController:signTypedMessage', finalRequest, metadata.version);
306
310
  break;
307
311
  /* istanbul ignore next */
@@ -309,14 +313,15 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
309
313
  throw new Error(`Unknown signature request type: ${type}`);
310
314
  }
311
315
  this.hub.emit(`${type}:signed`, { signature, messageId: id });
312
- if (request.deferSetAsSigned) {
316
+ if (messageParams.deferSetAsSigned) {
313
317
  return;
314
318
  }
315
319
  const finalMetadata = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, id, (draftMetadata) => {
316
- draftMetadata.signature = signature;
320
+ draftMetadata.rawSig = signature;
317
321
  draftMetadata.status = SignatureRequestStatus.Signed;
318
322
  });
319
323
  this.hub.emit(`${id}:finished`, finalMetadata);
324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
325
  }
321
326
  catch (error) {
322
327
  if (type === SignatureRequestType.TypedSign) {
@@ -342,21 +347,21 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
342
347
  }, _SignatureController_waitForSignatureRequestFinished = async function _SignatureController_waitForSignatureRequestFinished(id) {
343
348
  return new Promise((resolve, reject) => {
344
349
  this.hub.once(`${id}:finished`, (metadata) => {
345
- const { request, signature, status, type } = metadata;
350
+ const { messageParams, rawSig, status, type } = metadata;
346
351
  switch (status) {
347
352
  case SignatureRequestStatus.Signed:
348
- return resolve(signature);
353
+ return resolve(rawSig);
349
354
  case SignatureRequestStatus.Rejected:
350
355
  return reject(new Error(`MetaMask ${type} Signature: User denied message signature.`));
351
356
  /* istanbul ignore next */
352
357
  default:
353
- return reject(new Error(`MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(request)}`));
358
+ return reject(new Error(`MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(messageParams)}`));
354
359
  }
355
360
  });
356
361
  });
357
362
  }, _SignatureController_requestApproval = async function _SignatureController_requestApproval(metadata, type, { traceContext, actionId, }) {
358
- const { id, request } = metadata;
359
- const origin = request.origin || ORIGIN_METAMASK;
363
+ const { id, messageParams } = metadata;
364
+ const origin = messageParams.origin || ORIGIN_METAMASK;
360
365
  await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, {
361
366
  name: 'Notification Display',
362
367
  id: actionId,
@@ -366,7 +371,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
366
371
  id,
367
372
  origin,
368
373
  type,
369
- requestData: { ...request },
374
+ requestData: { ...messageParams },
370
375
  expectsResult: true,
371
376
  }, true));
372
377
  }, _SignatureController_updateMetadata = function _SignatureController_updateMetadata(id, callback) {
@@ -393,7 +398,7 @@ _SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_tra
393
398
  .filter((request) => request.type === type)
394
399
  .reduce((acc, request) => ({
395
400
  ...acc,
396
- [request.id]: { ...request, msgParams: request.request },
401
+ [request.id]: { ...request, msgParams: request.messageParams },
397
402
  }), {});
398
403
  }, _SignatureController_addLog = function _SignatureController_addLog(signatureRequestType, version, stage, signingData) {
399
404
  const signingMethod = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getSignTypeForLogger).call(this, signatureRequestType, version);
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureController.mjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } 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 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 { Hex, Json } from '@metamask/utils';\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} from './types';\nimport {\n validatePersonalSignatureRequest,\n validateTypedSignatureRequest,\n} from './utils/validation';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n signatureRequests: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\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 * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, any>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, any>;\n\n /**\n * Number of unapproved personal messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AddApprovalRequest\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction\n | AddLog;\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 = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * @deprecated No longer in use.\n */\n getAllState?: () => unknown;\n\n /**\n * Callback that returns the current chain ID.\n */\n getCurrentChainId: () => Hex;\n\n /**\n * Restricted controller 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 * 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 #getCurrentChainId: () => Hex;\n\n #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.getCurrentChainId - A function that returns the current chain ID.\n * @param options.messenger - The restricted controller 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 getCurrentChainId,\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.#getCurrentChainId = getCurrentChainId;\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\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 * @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 * @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) => metadata.status === 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) => metadata.status === 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 messageParams.siwe = detectSIWE(messageParams);\n\n return this.#processSignatureRequest({\n messageParams,\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 version - 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 version: string,\n signingOptions: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validateTypedSignatureRequest(\n messageParams,\n version as SignTypedDataVersion,\n this.#getCurrentChainId(),\n );\n\n return this.#processSignatureRequest({\n messageParams,\n request,\n type: SignatureRequestType.TypedSign,\n approvalType: ApprovalType.EthSignTypedData,\n version: version as SignTypedDataVersion,\n signingOptions,\n traceContext: options.traceContext,\n });\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 setDeferredSignSuccess(signatureRequestId: string, signature: any) {\n const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.signature = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\n }\n\n /**\n * Set custom metadata on a signature request.\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\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 messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n }: {\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const { securityAlertResponse } = request;\n\n const finalMessageParams = {\n ...messageParams,\n origin: request.origin,\n requestId: request.id,\n };\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n const metadata = {\n id: random(),\n request: finalMessageParams,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n const finishedPromise = this.#waitForSignatureRequestFinished(\n metadata.id,\n );\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 resultCallbacks = acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', metadata.id);\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(metadata.id);\n\n throw error;\n }\n\n await this.#approveAndSignRequest(metadata, traceContext);\n\n const signature = await finishedPromise;\n\n log('Signature request finished', { id: metadata.id, signature });\n\n this.#addLog(type, version, SigningStage.Signed, messageParams);\n\n resultCallbacks?.success(signature);\n\n return signature;\n } catch (error) {\n log('Signature request failed', error);\n resultCallbacks?.error(error as Error);\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, request, signingOptions, type } = metadata;\n\n try {\n let signature: string;\n\n switch (type) {\n case SignatureRequestType.PersonalSign:\n signature = await this.messagingSystem.call(\n 'KeyringController:signPersonalMessage',\n request,\n );\n break;\n\n case SignatureRequestType.TypedSign:\n const finalRequest = signingOptions?.parseJsonData\n ? this.#parseTypedData(request, metadata.version)\n : request;\n\n signature = await this.messagingSystem.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 (request.deferSetAsSigned) {\n return;\n }\n\n const finalMetadata = this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.signature = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n\n this.hub.emit(`${id}:finished`, finalMetadata);\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error.message;\n });\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw 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 #waitForSignatureRequestFinished(id: string): Promise<string> {\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n const { request, signature, status, type } = metadata;\n\n switch (status) {\n case SignatureRequestStatus.Signed:\n return resolve(signature as string);\n\n case SignatureRequestStatus.Rejected:\n return reject(\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n ),\n );\n\n /* istanbul ignore next */\n default:\n return reject(\n new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n request,\n )}`,\n ),\n );\n }\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, request } = metadata;\n const origin = request.origin || ORIGIN_METAMASK;\n\n await this.#trace({\n name: 'Notification Display',\n id: actionId,\n parentContext: traceContext,\n });\n\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: { ...request } as any,\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 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 callback(metadata);\n });\n\n return nextState.signatureRequests[id];\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n // eslint-disable-next-line n/callback-return, n/no-callback-literal\n callback(state as any);\n\n const unapprovedRequests = Object.values(\n state.signatureRequests as unknown as Record<string, SignatureRequest>,\n ).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n );\n\n state.unapprovedPersonalMsgs = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n state.unapprovedTypedMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n state.unapprovedPersonalMsgCount = Object.values(\n state.unapprovedPersonalMsgs,\n ).length;\n\n state.unapprovedTypedMessagesCount = Object.values(\n state.unapprovedTypedMessages,\n ).length;\n });\n }\n\n #generateLegacyState(\n unapprovedSignatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ) {\n return unapprovedSignatureRequests\n .filter((request) => request.type === type)\n .reduce(\n (acc, request) => ({\n ...acc,\n [request.id]: { ...request, msgParams: request.request },\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.messagingSystem.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"]}
1
+ {"version":3,"file":"SignatureController.mjs","sourceRoot":"","sources":["../src/SignatureController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AddApprovalRequest,\n AcceptResultCallbacks,\n AddResult,\n} from '@metamask/approval-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } 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 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 { Hex, Json } from '@metamask/utils';\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} from './types';\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: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n signatureRequests: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\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 * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgs: Record<string, SignatureRequest>;\n\n /**\n * Map of typed messages with the unapproved status, keyed by ID.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessages: Record<string, SignatureRequest>;\n\n /**\n * Number of unapproved personal messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedPersonalMsgCount: number;\n\n /**\n * Number of unapproved typed messages.\n * @deprecated - Use `signatureRequests` instead.\n */\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AddApprovalRequest\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction\n | AddLog;\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 = RestrictedControllerMessenger<\n typeof controllerName,\n SignatureControllerActions | AllowedActions,\n SignatureControllerEvents,\n AllowedActions['type'],\n never\n>;\n\nexport type SignatureControllerOptions = {\n /**\n * @deprecated No longer in use.\n */\n getAllState?: () => unknown;\n\n /**\n * Callback that returns the current chain ID.\n */\n getCurrentChainId: () => Hex;\n\n /**\n * Restricted controller 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 * 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 #getCurrentChainId: () => Hex;\n\n #trace: TraceCallback;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.getCurrentChainId - A function that returns the current chain ID.\n * @param options.messenger - The restricted controller 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 getCurrentChainId,\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.#getCurrentChainId = getCurrentChainId;\n this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\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 * @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 * @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) => metadata.status === 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) => metadata.status === 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(messageParams);\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 version - 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 version: string,\n signingOptions: TypedSigningOptions,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n validateTypedSignatureRequest(\n messageParams,\n version as SignTypedDataVersion,\n this.#getCurrentChainId(),\n );\n\n const normalizedMessageParams = normalizeTypedMessageParams(\n messageParams,\n version as SignTypedDataVersion,\n );\n\n return this.#processSignatureRequest({\n messageParams: normalizedMessageParams,\n request,\n type: SignatureRequestType.TypedSign,\n approvalType: ApprovalType.EthSignTypedData,\n version: version as SignTypedDataVersion,\n signingOptions,\n traceContext: options.traceContext,\n });\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\n }\n\n /**\n * Set custom metadata on a signature request.\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 const updatedSignatureRequest = this.#updateMetadata(\n signatureRequestId,\n (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Rejected;\n },\n );\n\n this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);\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 messageParams,\n request,\n type,\n approvalType,\n version,\n signingOptions,\n traceContext,\n }: {\n messageParams: MessageParams;\n request: OriginalRequest;\n type: SignatureRequestType;\n approvalType: ApprovalType;\n version?: SignTypedDataVersion;\n signingOptions?: TypedSigningOptions;\n traceContext?: TraceContext;\n }): Promise<string> {\n log('Processing signature request', {\n messageParams,\n request,\n type,\n version,\n });\n\n this.#addLog(type, version, SigningStage.Proposed, messageParams);\n\n const { securityAlertResponse } = request;\n\n const finalMessageParams = {\n ...messageParams,\n origin: request.origin,\n requestId: request.id,\n };\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n\n try {\n const metadata = {\n id: random(),\n messageParams: finalMessageParams,\n securityAlertResponse,\n signingOptions,\n status: SignatureRequestStatus.Unapproved,\n time: Date.now(),\n type,\n version,\n } as SignatureRequest;\n\n this.#updateState((state) => {\n state.signatureRequests[metadata.id] = metadata;\n });\n\n this.hub.emit('unapprovedMessage', {\n messageParams,\n metamaskId: metadata.id,\n });\n\n const finishedPromise = this.#waitForSignatureRequestFinished(\n metadata.id,\n );\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 resultCallbacks = acceptResult.resultCallbacks;\n } catch (error) {\n log('User rejected request', metadata.id);\n\n this.#addLog(type, version, SigningStage.Rejected, messageParams);\n this.#rejectSignatureRequest(metadata.id);\n\n throw error;\n }\n\n await this.#approveAndSignRequest(metadata, traceContext);\n\n const signature = await finishedPromise;\n\n log('Signature request finished', { id: metadata.id, signature });\n\n this.#addLog(type, version, SigningStage.Signed, messageParams);\n\n resultCallbacks?.success(signature);\n\n return signature;\n } catch (error) {\n log('Signature request failed', error);\n resultCallbacks?.error(error as Error);\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.messagingSystem.call(\n 'KeyringController:signPersonalMessage',\n messageParams,\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.messagingSystem.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 const finalMetadata = this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.rawSig = signature;\n draftMetadata.status = SignatureRequestStatus.Signed;\n });\n\n this.hub.emit(`${id}:finished`, finalMetadata);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (type === SignatureRequestType.TypedSign) {\n this.#updateMetadata(id, (draftMetadata) => {\n draftMetadata.status = SignatureRequestStatus.Errored;\n draftMetadata.error = error.message;\n });\n } else {\n this.#rejectSignatureRequest(id);\n }\n\n this.hub.emit(`${id}:signError`, { error });\n\n throw 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 #waitForSignatureRequestFinished(id: string): Promise<string> {\n return new Promise((resolve, reject) => {\n this.hub.once(`${id}:finished`, (metadata: SignatureRequest) => {\n const { messageParams, rawSig, status, type } = metadata;\n\n switch (status) {\n case SignatureRequestStatus.Signed:\n return resolve(rawSig as string);\n\n case SignatureRequestStatus.Rejected:\n return reject(\n new Error(\n `MetaMask ${type} Signature: User denied message signature.`,\n ),\n );\n\n /* istanbul ignore next */\n default:\n return reject(\n new Error(\n `MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(\n messageParams,\n )}`,\n ),\n );\n }\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.messagingSystem.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 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 callback(metadata);\n });\n\n return nextState.signatureRequests[id];\n }\n\n #updateState(callback: (state: SignatureControllerState) => void) {\n return this.update((state) => {\n // eslint-disable-next-line n/callback-return, n/no-callback-literal\n callback(state as unknown as SignatureControllerState);\n\n const unapprovedRequests = Object.values(\n state.signatureRequests as unknown as Record<string, SignatureRequest>,\n ).filter(\n (request) => request.status === SignatureRequestStatus.Unapproved,\n );\n\n state.unapprovedPersonalMsgs = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.PersonalSign,\n );\n\n state.unapprovedTypedMessages = this.#generateLegacyState(\n unapprovedRequests,\n SignatureRequestType.TypedSign,\n );\n\n state.unapprovedPersonalMsgCount = Object.values(\n state.unapprovedPersonalMsgs,\n ).length;\n\n state.unapprovedTypedMessagesCount = Object.values(\n state.unapprovedTypedMessages,\n ).length;\n });\n }\n\n #generateLegacyState(\n unapprovedSignatureRequests: SignatureRequest[],\n type: SignatureRequestType,\n ) {\n return unapprovedSignatureRequests\n .filter((request) => request.type === type)\n .reduce(\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.messagingSystem.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"]}
package/dist/index.cjs CHANGED
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./SignatureController.cjs"), exports);
18
+ __exportStar(require("./types.cjs"), exports);
18
19
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAAsC","sourcesContent":["export * from './SignatureController';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAAsC;AACtC,8CAAwB","sourcesContent":["export * from './SignatureController';\nexport * from './types';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./SignatureController.cjs";
2
+ export * from "./types.cjs";
2
3
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC;AACtC,4BAAwB"}
package/dist/index.d.mts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./SignatureController.mjs";
2
+ export * from "./types.mjs";
2
3
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC;AACtC,4BAAwB"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from "./SignatureController.mjs";
2
+ export * from "./types.mjs";
2
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC","sourcesContent":["export * from './SignatureController';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAAsC;AACtC,4BAAwB","sourcesContent":["export * from './SignatureController';\nexport * from './types';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AA4GvD,qCAAqC;AACrC,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,mDAAyB,CAAA;IACzB,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC;AAED,4CAA4C;AAC5C,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,sDAA8B,CAAA;IAC9B,uDAA+B,CAAA;AACjC,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\n\n/** Original client request that triggered the signature request. */\nexport type OriginalRequest = {\n /** Unique ID to identify the client request. */\n id?: number;\n\n /** Source of the client request. */\n origin?: string;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n};\n\n/** Options for signing typed data. */\nexport type TypedSigningOptions = {\n /** Whether to automatically convert JSON string data to an object. */\n parseJsonData: boolean;\n};\n\n/** The message parameters that were requested to be signed. */\nexport type MessageParams = {\n /** Whether to delay marking the request as signed until a signature is provided via `setDeferredSignSuccess`. */\n deferSetAsSigned?: boolean;\n\n /** Ethereum address to sign with. */\n from: string;\n\n /**\n * Source of the request.\n * Such as a hostname of a dApp.\n */\n origin?: string;\n\n /**\n * ID of the request that triggered this signature request.\n */\n requestId?: number;\n};\n\n/** Personal message parameters that were requested to be signed. */\nexport type MessageParamsPersonal = MessageParams & {\n /** Hexadecimal data to sign. */\n data: string;\n\n /** Sign-In With Ethereum data extracted from the data. */\n siwe?: any;\n};\n\n/** Typed message parameters that were requested to be signed. */\nexport type MessageParamsTyped = MessageParams & {\n /** Structured data to sign. */\n data:\n | Record<string, any>[]\n | string\n | {\n types: Record<string, any>;\n domain: Record<string, any>;\n primaryType: string;\n message: any;\n };\n};\n\ntype SignatureRequestBase = {\n /** Error message that occurred during the signing. */\n error?: string;\n\n /** Unique ID to identify this request. */\n id: string;\n\n /** Custom metadata stored with the request. */\n metadata?: Json;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n\n /** Signature hash resulting from the request. */\n signature?: string;\n\n /** Options used for signing. */\n signingOptions?: TypedSigningOptions;\n\n /** Current status of the request. */\n status: string;\n\n /** Time the request was created. */\n time: number;\n\n /** Version of the signTypedData request. */\n version?: SignTypedDataVersion;\n};\n\n/** Metadata concerning a request to sign data. */\nexport type SignatureRequest = SignatureRequestBase &\n (\n | {\n request: MessageParamsPersonal;\n type: SignatureRequestType.PersonalSign;\n }\n | {\n request: MessageParamsTyped;\n type: SignatureRequestType.TypedSign;\n }\n );\n\n/** Status of a signature request. */\nexport enum SignatureRequestStatus {\n Unapproved = 'unapproved',\n Approved = 'approved',\n Rejected = 'rejected',\n InProgress = 'inProgress',\n Signed = 'signed',\n Errored = 'errored',\n}\n\n/** Type of supported signature requests. */\nexport enum SignatureRequestType {\n PersonalSign = 'personal_sign',\n TypedSign = 'eth_signTypedData',\n}\n"]}
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AA4GvD,qCAAqC;AACrC,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,mDAAyB,CAAA;IACzB,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC;AAED,4CAA4C;AAC5C,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,sDAA8B,CAAA;IAC9B,uDAA+B,CAAA;AACjC,CAAC,EAHW,oBAAoB,oCAApB,oBAAoB,QAG/B","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\n\n/** Original client request that triggered the signature request. */\nexport type OriginalRequest = {\n /** Unique ID to identify the client request. */\n id?: number;\n\n /** Source of the client request. */\n origin?: string;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n};\n\n/** Options for signing typed data. */\nexport type TypedSigningOptions = {\n /** Whether to automatically convert JSON string data to an object. */\n parseJsonData: boolean;\n};\n\n/** The message parameters that were requested to be signed. */\nexport type MessageParams = {\n /** Whether to delay marking the request as signed until a signature is provided via `setDeferredSignSuccess`. */\n deferSetAsSigned?: boolean;\n\n /** Ethereum address to sign with. */\n from: string;\n\n /**\n * Source of the request.\n * Such as a hostname of a dApp.\n */\n origin?: string;\n\n /**\n * ID of the request that triggered this signature request.\n */\n requestId?: number;\n};\n\n/** Personal message parameters that were requested to be signed. */\nexport type MessageParamsPersonal = MessageParams & {\n /** Hexadecimal data to sign. */\n data: string;\n\n /** Sign-In With Ethereum data extracted from the data. */\n siwe?: any;\n};\n\n/** Typed message parameters that were requested to be signed. */\nexport type MessageParamsTyped = MessageParams & {\n /** Structured data to sign. */\n data:\n | Record<string, any>[]\n | string\n | {\n types: Record<string, any>;\n domain: Record<string, any>;\n primaryType: string;\n message: any;\n };\n};\n\ntype SignatureRequestBase = {\n /** Error message that occurred during the signing. */\n error?: string;\n\n /** Unique ID to identify this request. */\n id: string;\n\n /** Custom metadata stored with the request. */\n metadata?: Json;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n\n /** Signature hash resulting from the request. */\n rawSig?: string;\n\n /** Options used for signing. */\n signingOptions?: TypedSigningOptions;\n\n /** Current status of the request. */\n status: string;\n\n /** Time the request was created. */\n time: number;\n\n /** Version of the signTypedData request. */\n version?: SignTypedDataVersion;\n};\n\n/** Metadata concerning a request to sign data. */\nexport type SignatureRequest = SignatureRequestBase &\n (\n | {\n messageParams: MessageParamsPersonal;\n type: SignatureRequestType.PersonalSign;\n }\n | {\n messageParams: MessageParamsTyped;\n type: SignatureRequestType.TypedSign;\n }\n );\n\n/** Status of a signature request. */\nexport enum SignatureRequestStatus {\n Unapproved = 'unapproved',\n Approved = 'approved',\n Rejected = 'rejected',\n InProgress = 'inProgress',\n Signed = 'signed',\n Errored = 'errored',\n}\n\n/** Type of supported signature requests. */\nexport enum SignatureRequestType {\n PersonalSign = 'personal_sign',\n TypedSign = 'eth_signTypedData',\n}\n"]}
package/dist/types.d.cts CHANGED
@@ -57,7 +57,7 @@ type SignatureRequestBase = {
57
57
  /** Response following a security scan of the request. */
58
58
  securityAlertResponse?: Record<string, Json>;
59
59
  /** Signature hash resulting from the request. */
60
- signature?: string;
60
+ rawSig?: string;
61
61
  /** Options used for signing. */
62
62
  signingOptions?: TypedSigningOptions;
63
63
  /** Current status of the request. */
@@ -69,10 +69,10 @@ type SignatureRequestBase = {
69
69
  };
70
70
  /** Metadata concerning a request to sign data. */
71
71
  export type SignatureRequest = SignatureRequestBase & ({
72
- request: MessageParamsPersonal;
72
+ messageParams: MessageParamsPersonal;
73
73
  type: SignatureRequestType.PersonalSign;
74
74
  } | {
75
- request: MessageParamsTyped;
75
+ messageParams: MessageParamsTyped;
76
76
  type: SignatureRequestType.TypedSign;
77
77
  });
78
78
  /** Status of a signature request. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,+BAA+B;IAC/B,IAAI,EACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GACrB,MAAM,GACN;QACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,CAAC;KACd,CAAC;CACP,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GACjD,CACI;IACE,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC;CACzC,GACD;IACE,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;CACtC,CACJ,CAAC;AAEJ,qCAAqC;AACrC,oBAAY,sBAAsB;IAChC,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,oBAAY,oBAAoB;IAC9B,YAAY,kBAAkB;IAC9B,SAAS,sBAAsB;CAChC"}
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,+BAA+B;IAC/B,IAAI,EACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GACrB,MAAM,GACN;QACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,CAAC;KACd,CAAC;CACP,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GACjD,CACI;IACE,aAAa,EAAE,qBAAqB,CAAC;IACrC,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC;CACzC,GACD;IACE,aAAa,EAAE,kBAAkB,CAAC;IAClC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;CACtC,CACJ,CAAC;AAEJ,qCAAqC;AACrC,oBAAY,sBAAsB;IAChC,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,oBAAY,oBAAoB;IAC9B,YAAY,kBAAkB;IAC9B,SAAS,sBAAsB;CAChC"}
package/dist/types.d.mts CHANGED
@@ -57,7 +57,7 @@ type SignatureRequestBase = {
57
57
  /** Response following a security scan of the request. */
58
58
  securityAlertResponse?: Record<string, Json>;
59
59
  /** Signature hash resulting from the request. */
60
- signature?: string;
60
+ rawSig?: string;
61
61
  /** Options used for signing. */
62
62
  signingOptions?: TypedSigningOptions;
63
63
  /** Current status of the request. */
@@ -69,10 +69,10 @@ type SignatureRequestBase = {
69
69
  };
70
70
  /** Metadata concerning a request to sign data. */
71
71
  export type SignatureRequest = SignatureRequestBase & ({
72
- request: MessageParamsPersonal;
72
+ messageParams: MessageParamsPersonal;
73
73
  type: SignatureRequestType.PersonalSign;
74
74
  } | {
75
- request: MessageParamsTyped;
75
+ messageParams: MessageParamsTyped;
76
76
  type: SignatureRequestType.TypedSign;
77
77
  });
78
78
  /** Status of a signature request. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,+BAA+B;IAC/B,IAAI,EACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GACrB,MAAM,GACN;QACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,CAAC;KACd,CAAC;CACP,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GACjD,CACI;IACE,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC;CACzC,GACD;IACE,OAAO,EAAE,kBAAkB,CAAC;IAC5B,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;CACtC,CACJ,CAAC;AAEJ,qCAAqC;AACrC,oBAAY,sBAAsB;IAChC,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,oBAAY,oBAAoB;IAC9B,YAAY,kBAAkB;IAC9B,SAAS,sBAAsB;CAChC"}
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qCAAqC;AACzE,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG;IAC1B,iHAAiH;IACjH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,+BAA+B;IAC/B,IAAI,EACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GACrB,MAAM,GACN;QACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,CAAC;KACd,CAAC;CACP,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,yDAAyD;IACzD,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE7C,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GACjD,CACI;IACE,aAAa,EAAE,qBAAqB,CAAC;IACrC,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC;CACzC,GACD;IACE,aAAa,EAAE,kBAAkB,CAAC;IAClC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;CACtC,CACJ,CAAC;AAEJ,qCAAqC;AACrC,oBAAY,sBAAsB;IAChC,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,4CAA4C;AAC5C,oBAAY,oBAAoB;IAC9B,YAAY,kBAAkB;IAC9B,SAAS,sBAAsB;CAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA4GvD,qCAAqC;AACrC,MAAM,CAAN,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,mDAAyB,CAAA;IACzB,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAPW,sBAAsB,KAAtB,sBAAsB,QAOjC;AAED,4CAA4C;AAC5C,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,sDAA8B,CAAA;IAC9B,uDAA+B,CAAA;AACjC,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\n\n/** Original client request that triggered the signature request. */\nexport type OriginalRequest = {\n /** Unique ID to identify the client request. */\n id?: number;\n\n /** Source of the client request. */\n origin?: string;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n};\n\n/** Options for signing typed data. */\nexport type TypedSigningOptions = {\n /** Whether to automatically convert JSON string data to an object. */\n parseJsonData: boolean;\n};\n\n/** The message parameters that were requested to be signed. */\nexport type MessageParams = {\n /** Whether to delay marking the request as signed until a signature is provided via `setDeferredSignSuccess`. */\n deferSetAsSigned?: boolean;\n\n /** Ethereum address to sign with. */\n from: string;\n\n /**\n * Source of the request.\n * Such as a hostname of a dApp.\n */\n origin?: string;\n\n /**\n * ID of the request that triggered this signature request.\n */\n requestId?: number;\n};\n\n/** Personal message parameters that were requested to be signed. */\nexport type MessageParamsPersonal = MessageParams & {\n /** Hexadecimal data to sign. */\n data: string;\n\n /** Sign-In With Ethereum data extracted from the data. */\n siwe?: any;\n};\n\n/** Typed message parameters that were requested to be signed. */\nexport type MessageParamsTyped = MessageParams & {\n /** Structured data to sign. */\n data:\n | Record<string, any>[]\n | string\n | {\n types: Record<string, any>;\n domain: Record<string, any>;\n primaryType: string;\n message: any;\n };\n};\n\ntype SignatureRequestBase = {\n /** Error message that occurred during the signing. */\n error?: string;\n\n /** Unique ID to identify this request. */\n id: string;\n\n /** Custom metadata stored with the request. */\n metadata?: Json;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n\n /** Signature hash resulting from the request. */\n signature?: string;\n\n /** Options used for signing. */\n signingOptions?: TypedSigningOptions;\n\n /** Current status of the request. */\n status: string;\n\n /** Time the request was created. */\n time: number;\n\n /** Version of the signTypedData request. */\n version?: SignTypedDataVersion;\n};\n\n/** Metadata concerning a request to sign data. */\nexport type SignatureRequest = SignatureRequestBase &\n (\n | {\n request: MessageParamsPersonal;\n type: SignatureRequestType.PersonalSign;\n }\n | {\n request: MessageParamsTyped;\n type: SignatureRequestType.TypedSign;\n }\n );\n\n/** Status of a signature request. */\nexport enum SignatureRequestStatus {\n Unapproved = 'unapproved',\n Approved = 'approved',\n Rejected = 'rejected',\n InProgress = 'inProgress',\n Signed = 'signed',\n Errored = 'errored',\n}\n\n/** Type of supported signature requests. */\nexport enum SignatureRequestType {\n PersonalSign = 'personal_sign',\n TypedSign = 'eth_signTypedData',\n}\n"]}
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uDAAuD;AA4GvD,qCAAqC;AACrC,MAAM,CAAN,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,mDAAyB,CAAA;IACzB,+CAAqB,CAAA;IACrB,+CAAqB,CAAA;IACrB,mDAAyB,CAAA;IACzB,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAPW,sBAAsB,KAAtB,sBAAsB,QAOjC;AAED,4CAA4C;AAC5C,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,sDAA8B,CAAA;IAC9B,uDAA+B,CAAA;AACjC,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Json } from '@metamask/utils';\n\n/** Original client request that triggered the signature request. */\nexport type OriginalRequest = {\n /** Unique ID to identify the client request. */\n id?: number;\n\n /** Source of the client request. */\n origin?: string;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n};\n\n/** Options for signing typed data. */\nexport type TypedSigningOptions = {\n /** Whether to automatically convert JSON string data to an object. */\n parseJsonData: boolean;\n};\n\n/** The message parameters that were requested to be signed. */\nexport type MessageParams = {\n /** Whether to delay marking the request as signed until a signature is provided via `setDeferredSignSuccess`. */\n deferSetAsSigned?: boolean;\n\n /** Ethereum address to sign with. */\n from: string;\n\n /**\n * Source of the request.\n * Such as a hostname of a dApp.\n */\n origin?: string;\n\n /**\n * ID of the request that triggered this signature request.\n */\n requestId?: number;\n};\n\n/** Personal message parameters that were requested to be signed. */\nexport type MessageParamsPersonal = MessageParams & {\n /** Hexadecimal data to sign. */\n data: string;\n\n /** Sign-In With Ethereum data extracted from the data. */\n siwe?: any;\n};\n\n/** Typed message parameters that were requested to be signed. */\nexport type MessageParamsTyped = MessageParams & {\n /** Structured data to sign. */\n data:\n | Record<string, any>[]\n | string\n | {\n types: Record<string, any>;\n domain: Record<string, any>;\n primaryType: string;\n message: any;\n };\n};\n\ntype SignatureRequestBase = {\n /** Error message that occurred during the signing. */\n error?: string;\n\n /** Unique ID to identify this request. */\n id: string;\n\n /** Custom metadata stored with the request. */\n metadata?: Json;\n\n /** Response following a security scan of the request. */\n securityAlertResponse?: Record<string, Json>;\n\n /** Signature hash resulting from the request. */\n rawSig?: string;\n\n /** Options used for signing. */\n signingOptions?: TypedSigningOptions;\n\n /** Current status of the request. */\n status: string;\n\n /** Time the request was created. */\n time: number;\n\n /** Version of the signTypedData request. */\n version?: SignTypedDataVersion;\n};\n\n/** Metadata concerning a request to sign data. */\nexport type SignatureRequest = SignatureRequestBase &\n (\n | {\n messageParams: MessageParamsPersonal;\n type: SignatureRequestType.PersonalSign;\n }\n | {\n messageParams: MessageParamsTyped;\n type: SignatureRequestType.TypedSign;\n }\n );\n\n/** Status of a signature request. */\nexport enum SignatureRequestStatus {\n Unapproved = 'unapproved',\n Approved = 'approved',\n Rejected = 'rejected',\n InProgress = 'inProgress',\n Signed = 'signed',\n Errored = 'errored',\n}\n\n/** Type of supported signature requests. */\nexport enum SignatureRequestType {\n PersonalSign = 'personal_sign',\n TypedSign = 'eth_signTypedData',\n}\n"]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeTypedMessageParams = exports.normalizePersonalMessageParams = void 0;
4
+ const keyring_controller_1 = require("@metamask/keyring-controller");
5
+ const utils_1 = require("@metamask/utils");
6
+ /**
7
+ * Normalize personal message params.
8
+ * @param messageParams - The message params to normalize.
9
+ * @returns The normalized message params.
10
+ */
11
+ function normalizePersonalMessageParams(messageParams) {
12
+ return {
13
+ ...messageParams,
14
+ data: normalizePersonalMessageData(messageParams.data),
15
+ };
16
+ }
17
+ exports.normalizePersonalMessageParams = normalizePersonalMessageParams;
18
+ /**
19
+ * Normalize typed message params.
20
+ * @param messageParams - The message params to normalize.
21
+ * @param version - The version of the typed signature request.
22
+ * @returns The normalized message params.
23
+ */
24
+ function normalizeTypedMessageParams(messageParams, version) {
25
+ const normalizedMessageParams = { ...messageParams };
26
+ if (typeof messageParams.data !== 'string' &&
27
+ (version === keyring_controller_1.SignTypedDataVersion.V3 || version === keyring_controller_1.SignTypedDataVersion.V4)) {
28
+ normalizedMessageParams.data = JSON.stringify(messageParams.data);
29
+ }
30
+ return normalizedMessageParams;
31
+ }
32
+ exports.normalizeTypedMessageParams = normalizeTypedMessageParams;
33
+ /**
34
+ * Converts raw message data buffer to a hex, or just returns the data if
35
+ * it is already formatted as a hex.
36
+ *
37
+ * @param data - The buffer data to convert to a hex.
38
+ * @returns A hex string conversion of the buffer data.
39
+ */
40
+ function normalizePersonalMessageData(data) {
41
+ try {
42
+ const stripped = (0, utils_1.remove0x)(data);
43
+ if (stripped.match(/^[0-9A-Fa-f]+$/gu)) {
44
+ return (0, utils_1.add0x)(stripped);
45
+ }
46
+ }
47
+ catch (e) {
48
+ /* istanbul ignore next */
49
+ }
50
+ return (0, utils_1.bytesToHex)(Buffer.from(data, 'utf8'));
51
+ }
52
+ //# sourceMappingURL=normalize.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.cjs","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AACpE,2CAA8D;AAI9D;;;;GAIG;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;;;;;GAKG;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;QACA,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACnE;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAdD,kEAcC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,IAAY;IAChD,IAAI;QACF,MAAM,QAAQ,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YACtC,OAAO,IAAA,aAAK,EAAC,QAAQ,CAAC,CAAC;SACxB;KACF;IAAC,OAAO,CAAC,EAAE;QACV,0BAA0B;KAC3B;IAED,OAAO,IAAA,kBAAU,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { add0x, bytesToHex, remove0x } from '@metamask/utils';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Normalize personal message params.\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 * @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"]}
@@ -0,0 +1,16 @@
1
+ import { SignTypedDataVersion } from "@metamask/keyring-controller";
2
+ import type { MessageParamsPersonal, MessageParamsTyped } from "../types.cjs";
3
+ /**
4
+ * Normalize personal message params.
5
+ * @param messageParams - The message params to normalize.
6
+ * @returns The normalized message params.
7
+ */
8
+ export declare function normalizePersonalMessageParams(messageParams: MessageParamsPersonal): MessageParamsPersonal;
9
+ /**
10
+ * Normalize typed message params.
11
+ * @param messageParams - The message params to normalize.
12
+ * @param version - The version of the typed signature request.
13
+ * @returns The normalized message params.
14
+ */
15
+ export declare function normalizeTypedMessageParams(messageParams: MessageParamsTyped, version: SignTypedDataVersion): MessageParamsTyped;
16
+ //# sourceMappingURL=normalize.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.cts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAGpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,qBAAqB,GACnC,qBAAqB,CAKvB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAWpB"}
@@ -0,0 +1,16 @@
1
+ import { SignTypedDataVersion } from "@metamask/keyring-controller";
2
+ import type { MessageParamsPersonal, MessageParamsTyped } from "../types.mjs";
3
+ /**
4
+ * Normalize personal message params.
5
+ * @param messageParams - The message params to normalize.
6
+ * @returns The normalized message params.
7
+ */
8
+ export declare function normalizePersonalMessageParams(messageParams: MessageParamsPersonal): MessageParamsPersonal;
9
+ /**
10
+ * Normalize typed message params.
11
+ * @param messageParams - The message params to normalize.
12
+ * @param version - The version of the typed signature request.
13
+ * @returns The normalized message params.
14
+ */
15
+ export declare function normalizeTypedMessageParams(messageParams: MessageParamsTyped, version: SignTypedDataVersion): MessageParamsTyped;
16
+ //# sourceMappingURL=normalize.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.mts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AAGpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,qBAAqB,GACnC,qBAAqB,CAKvB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,kBAAkB,EACjC,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAWpB"}
@@ -0,0 +1,47 @@
1
+ import { SignTypedDataVersion } from "@metamask/keyring-controller";
2
+ import { add0x, bytesToHex, remove0x } from "@metamask/utils";
3
+ /**
4
+ * Normalize personal message params.
5
+ * @param messageParams - The message params to normalize.
6
+ * @returns The normalized message params.
7
+ */
8
+ export function normalizePersonalMessageParams(messageParams) {
9
+ return {
10
+ ...messageParams,
11
+ data: normalizePersonalMessageData(messageParams.data),
12
+ };
13
+ }
14
+ /**
15
+ * Normalize typed message params.
16
+ * @param messageParams - The message params to normalize.
17
+ * @param version - The version of the typed signature request.
18
+ * @returns The normalized message params.
19
+ */
20
+ export function normalizeTypedMessageParams(messageParams, version) {
21
+ const normalizedMessageParams = { ...messageParams };
22
+ if (typeof messageParams.data !== 'string' &&
23
+ (version === SignTypedDataVersion.V3 || version === SignTypedDataVersion.V4)) {
24
+ normalizedMessageParams.data = JSON.stringify(messageParams.data);
25
+ }
26
+ return normalizedMessageParams;
27
+ }
28
+ /**
29
+ * Converts raw message data buffer to a hex, or just returns the data if
30
+ * it is already formatted as a hex.
31
+ *
32
+ * @param data - The buffer data to convert to a hex.
33
+ * @returns A hex string conversion of the buffer data.
34
+ */
35
+ function normalizePersonalMessageData(data) {
36
+ try {
37
+ const stripped = remove0x(data);
38
+ if (stripped.match(/^[0-9A-Fa-f]+$/gu)) {
39
+ return add0x(stripped);
40
+ }
41
+ }
42
+ catch (e) {
43
+ /* istanbul ignore next */
44
+ }
45
+ return bytesToHex(Buffer.from(data, 'utf8'));
46
+ }
47
+ //# sourceMappingURL=normalize.mjs.map
@@ -0,0 +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,EAAE,QAAQ,EAAE,wBAAwB;AAI9D;;;;GAIG;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;;;;;GAKG;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;QACA,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACnE;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,IAAY;IAChD,IAAI;QACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YACtC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;SACxB;KACF;IAAC,OAAO,CAAC,EAAE;QACV,0BAA0B;KAC3B;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { add0x, bytesToHex, remove0x } from '@metamask/utils';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Normalize personal message params.\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 * @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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Validate a personal signature request.\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 * @param messageData - The message data to validate.\n * @param version - The version of the typed signature request.\n * @param currentChainId - The current chain ID.\n */\nexport function validateTypedSignatureRequest(\n messageData: MessageParamsTyped,\n version: SignTypedDataVersion,\n currentChainId: Hex | undefined,\n) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4(messageData, currentChainId);\n }\n}\n\n/**\n * Validate a V1 typed signature request.\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 messageData - The message data to validate.\n * @param currentChainId - The current chain ID.\n */\nfunction validateTypedSignatureRequestV3V4(\n messageData: MessageParamsTyped,\n currentChainId: Hex | undefined,\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\n/**\n * Validate an Ethereum address.\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"]}
1
+ {"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { type Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Validate a personal signature request.\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 * @param messageData - The message data to validate.\n * @param version - The version of the typed signature request.\n * @param currentChainId - The current chain ID.\n */\nexport function validateTypedSignatureRequest(\n messageData: MessageParamsTyped,\n version: SignTypedDataVersion,\n currentChainId: Hex | undefined,\n) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4(messageData, currentChainId);\n }\n}\n\n/**\n * Validate a V1 typed signature request.\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 messageData - The message data to validate.\n * @param currentChainId - The current chain ID.\n */\nfunction validateTypedSignatureRequestV3V4(\n messageData: MessageParamsTyped,\n currentChainId: Hex | undefined,\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\n/**\n * Validate an Ethereum address.\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"]}
@@ -1,5 +1,5 @@
1
1
  import { SignTypedDataVersion } from "@metamask/keyring-controller";
2
- import type { Hex } from "@metamask/utils";
2
+ import { type Hex } from "@metamask/utils";
3
3
  import type { MessageParamsPersonal, MessageParamsTyped } from "../types.cjs";
4
4
  /**
5
5
  * Validate a personal signature request.
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,GAAG,GAAG,SAAS,QAShC"}
1
+ {"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,GAAG,GAAG,SAAS,QAShC"}
@@ -1,5 +1,5 @@
1
1
  import { SignTypedDataVersion } from "@metamask/keyring-controller";
2
- import type { Hex } from "@metamask/utils";
2
+ import { type Hex } from "@metamask/utils";
3
3
  import type { MessageParamsPersonal, MessageParamsTyped } from "../types.mjs";
4
4
  /**
5
5
  * Validate a personal signature request.
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,GAAG,GAAG,SAAS,QAShC"}
1
+ {"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAiB;AAE1E;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,qBAAqB,QASnC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,GAAG,GAAG,SAAS,QAShC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport type { Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Validate a personal signature request.\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 * @param messageData - The message data to validate.\n * @param version - The version of the typed signature request.\n * @param currentChainId - The current chain ID.\n */\nexport function validateTypedSignatureRequest(\n messageData: MessageParamsTyped,\n version: SignTypedDataVersion,\n currentChainId: Hex | undefined,\n) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4(messageData, currentChainId);\n }\n}\n\n/**\n * Validate a V1 typed signature request.\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 messageData - The message data to validate.\n * @param currentChainId - The current chain ID.\n */\nfunction validateTypedSignatureRequestV3V4(\n messageData: MessageParamsTyped,\n currentChainId: Hex | undefined,\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\n/**\n * Validate an Ethereum address.\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"]}
1
+ {"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n TYPED_MESSAGE_SCHEMA,\n typedSignatureHash,\n} from '@metamask/eth-sig-util';\nimport { SignTypedDataVersion } from '@metamask/keyring-controller';\nimport { type Hex } from '@metamask/utils';\nimport { validate } from 'jsonschema';\n\nimport type { MessageParamsPersonal, MessageParamsTyped } from '../types';\n\n/**\n * Validate a personal signature request.\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 * @param messageData - The message data to validate.\n * @param version - The version of the typed signature request.\n * @param currentChainId - The current chain ID.\n */\nexport function validateTypedSignatureRequest(\n messageData: MessageParamsTyped,\n version: SignTypedDataVersion,\n currentChainId: Hex | undefined,\n) {\n validateAddress(messageData.from, 'from');\n\n if (version === SignTypedDataVersion.V1) {\n validateTypedSignatureRequestV1(messageData);\n } else {\n validateTypedSignatureRequestV3V4(messageData, currentChainId);\n }\n}\n\n/**\n * Validate a V1 typed signature request.\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 messageData - The message data to validate.\n * @param currentChainId - The current chain ID.\n */\nfunction validateTypedSignatureRequestV3V4(\n messageData: MessageParamsTyped,\n currentChainId: Hex | undefined,\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\n/**\n * Validate an Ethereum address.\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/signature-controller",
3
- "version": "19.1.0-preview-e46fca9e",
3
+ "version": "19.1.0-preview-2f4bcaa9",
4
4
  "description": "Processes signing requests in order to sign arbitrary and typed data",
5
5
  "keywords": [
6
6
  "MetaMask",