@metamask-previews/signature-controller 13.0.0-preview.e5c396b → 13.0.0-preview.eb2135e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,516 +1,7 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
- if (kind === "m") throw new TypeError("Private method is not writable");
13
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
- };
17
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
- };
22
- var __rest = (this && this.__rest) || function (s, e) {
23
- var t = {};
24
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
25
- t[p] = s[p];
26
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
27
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
28
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
29
- t[p[i]] = s[p[i]];
30
- }
31
- return t;
32
- };
33
- var __importDefault = (this && this.__importDefault) || function (mod) {
34
- return (mod && mod.__esModule) ? mod : { "default": mod };
35
- };
36
- var _SignatureController_instances, _SignatureController_isEthSignEnabled, _SignatureController_getAllState, _SignatureController_messageManager, _SignatureController_personalMessageManager, _SignatureController_typedMessageManager, _SignatureController_validateUnsignedMessage, _SignatureController_newUnsignedAbstractMessage, _SignatureController_signMessage, _SignatureController_signPersonalMessage, _SignatureController_signTypedMessage, _SignatureController_tryForEachMessageManager, _SignatureController_trySetDeferredSignSuccess, _SignatureController_trySetMessageMetadata, _SignatureController_trySetDeferredSignError, _SignatureController_rejectUnapproved, _SignatureController_clearUnapproved, _SignatureController_signAbstractMessage, _SignatureController_errorMessage, _SignatureController_cancelAbstractMessage, _SignatureController_handleMessageManagerEvents, _SignatureController_subscribeToMessageState, _SignatureController_migrateMessages, _SignatureController_migrateMessage, _SignatureController_normalizeMsgData, _SignatureController_getMessage, _SignatureController_requestApproval, _SignatureController_removeJsonData, _SignatureController_addLog, _SignatureController_getSignTypeForLogger;
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.SignatureController = void 0;
39
- const base_controller_1 = require("@metamask/base-controller");
40
- const controller_utils_1 = require("@metamask/controller-utils");
41
- const logging_controller_1 = require("@metamask/logging-controller");
42
- const message_manager_1 = require("@metamask/message-manager");
43
- const rpc_errors_1 = require("@metamask/rpc-errors");
44
- const utils_1 = require("@metamask/utils");
45
- const events_1 = __importDefault(require("events"));
46
- const lodash_1 = require("lodash");
47
- const controllerName = 'SignatureController';
48
- const stateMetadata = {
49
- unapprovedMsgs: { persist: false, anonymous: false },
50
- unapprovedPersonalMsgs: { persist: false, anonymous: false },
51
- unapprovedTypedMessages: { persist: false, anonymous: false },
52
- unapprovedMsgCount: { persist: false, anonymous: false },
53
- unapprovedPersonalMsgCount: { persist: false, anonymous: false },
54
- unapprovedTypedMessagesCount: { persist: false, anonymous: false },
55
- };
56
- const getDefaultState = () => ({
57
- unapprovedMsgs: {},
58
- unapprovedPersonalMsgs: {},
59
- unapprovedTypedMessages: {},
60
- unapprovedMsgCount: 0,
61
- unapprovedPersonalMsgCount: 0,
62
- unapprovedTypedMessagesCount: 0,
63
- });
64
- /**
65
- * Controller for creating signing requests requiring user approval.
66
- */
67
- class SignatureController extends base_controller_1.BaseController {
68
- /**
69
- * Construct a Sign controller.
70
- *
71
- * @param options - The controller options.
72
- * @param options.messenger - The restricted controller messenger for the sign controller.
73
- * @param options.isEthSignEnabled - Callback to return true if eth_sign is enabled.
74
- * @param options.getAllState - Callback to retrieve all user state.
75
- * @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.
76
- * @param options.getCurrentChainId - A function for retrieving the current chainId.
77
- */
78
- constructor({ messenger, isEthSignEnabled, getAllState, securityProviderRequest, getCurrentChainId, }) {
79
- super({
80
- name: controllerName,
81
- metadata: stateMetadata,
82
- messenger,
83
- state: getDefaultState(),
84
- });
85
- _SignatureController_instances.add(this);
86
- _SignatureController_isEthSignEnabled.set(this, void 0);
87
- // TODO: Replace `any` with type
88
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
89
- _SignatureController_getAllState.set(this, void 0);
90
- _SignatureController_messageManager.set(this, void 0);
91
- _SignatureController_personalMessageManager.set(this, void 0);
92
- _SignatureController_typedMessageManager.set(this, void 0);
93
- __classPrivateFieldSet(this, _SignatureController_isEthSignEnabled, isEthSignEnabled, "f");
94
- __classPrivateFieldSet(this, _SignatureController_getAllState, getAllState, "f");
95
- this.hub = new events_1.default();
96
- __classPrivateFieldSet(this, _SignatureController_messageManager, new message_manager_1.MessageManager(undefined, undefined, securityProviderRequest), "f");
97
- __classPrivateFieldSet(this, _SignatureController_personalMessageManager, new message_manager_1.PersonalMessageManager(undefined, undefined, securityProviderRequest), "f");
98
- __classPrivateFieldSet(this, _SignatureController_typedMessageManager, new message_manager_1.TypedMessageManager(undefined, undefined, securityProviderRequest, undefined, getCurrentChainId), "f");
99
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), 'unapprovedMessage');
100
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), 'unapprovedPersonalMessage');
101
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), 'unapprovedTypedMessage');
102
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), (state, newMessages, messageCount) => {
103
- state.unapprovedMsgs = newMessages;
104
- state.unapprovedMsgCount = messageCount;
105
- });
106
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), (state, newMessages, messageCount) => {
107
- state.unapprovedPersonalMsgs = newMessages;
108
- state.unapprovedPersonalMsgCount = messageCount;
109
- });
110
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), (state, newMessages, messageCount) => {
111
- state.unapprovedTypedMessages = newMessages;
112
- state.unapprovedTypedMessagesCount = messageCount;
113
- });
114
- }
115
- /**
116
- * A getter for the number of 'unapproved' Messages in this.messages.
117
- *
118
- * @returns The number of 'unapproved' Messages in this.messages
119
- */
120
- get unapprovedMsgCount() {
121
- return __classPrivateFieldGet(this, _SignatureController_messageManager, "f").getUnapprovedMessagesCount();
122
- }
123
- /**
124
- * A getter for the number of 'unapproved' PersonalMessages in this.messages.
125
- *
126
- * @returns The number of 'unapproved' PersonalMessages in this.messages
127
- */
128
- get unapprovedPersonalMessagesCount() {
129
- return __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").getUnapprovedMessagesCount();
130
- }
131
- /**
132
- * A getter for the number of 'unapproved' TypedMessages in this.messages.
133
- *
134
- * @returns The number of 'unapproved' TypedMessages in this.messages
135
- */
136
- get unapprovedTypedMessagesCount() {
137
- return __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").getUnapprovedMessagesCount();
138
- }
139
- /**
140
- * A getter for returning all messages.
141
- *
142
- * @returns The object containing all messages.
143
- */
144
- get messages() {
145
- const messages = [
146
- ...__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").getAllMessages(),
147
- ...__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").getAllMessages(),
148
- ...__classPrivateFieldGet(this, _SignatureController_messageManager, "f").getAllMessages(),
149
- ];
150
- const messagesObject = messages.reduce((acc, message) => {
151
- acc[message.id] = message;
152
- return acc;
153
- }, {});
154
- return messagesObject;
155
- }
156
- /**
157
- * Reset the controller state to the initial state.
158
- */
159
- resetState() {
160
- this.update(() => getDefaultState());
161
- }
162
- /**
163
- * Reject all unapproved messages of any type.
164
- *
165
- * @param reason - A message to indicate why.
166
- */
167
- rejectUnapproved(reason) {
168
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), reason);
169
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), reason);
170
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), reason);
171
- }
172
- /**
173
- * Clears all unapproved messages from memory.
174
- */
175
- clearUnapproved() {
176
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_clearUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"));
177
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_clearUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"));
178
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_clearUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"));
179
- }
180
- /**
181
- * Called when a Dapp uses the eth_sign method, to request user approval.
182
- * eth_sign is a pure signature of arbitrary data. It is on a deprecation
183
- * path, since this data can be a transaction, or can leak private key
184
- * information.
185
- *
186
- * @param messageParams - The params passed to eth_sign.
187
- * @param [req] - The original request, containing the origin.
188
- * @returns Promise resolving to the raw data of the signature request.
189
- */
190
- newUnsignedMessage(messageParams, req) {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, logging_controller_1.SigningMethod.EthSign, 'Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signMessage).bind(this), messageParams, req, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_validateUnsignedMessage).bind(this));
193
- });
194
- }
195
- /**
196
- * Called when a dapp uses the personal_sign method.
197
- * This is identical to the Geth eth_sign method, and may eventually replace
198
- * eth_sign.
199
- *
200
- * We currently define our eth_sign and personal_sign mostly for legacy Dapps.
201
- *
202
- * @param messageParams - The params of the message to sign & return to the Dapp.
203
- * @param req - The original request, containing the origin.
204
- * @returns Promise resolving to the raw data of the signature request.
205
- */
206
- newUnsignedPersonalMessage(messageParams, req) {
207
- return __awaiter(this, void 0, void 0, function* () {
208
- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, logging_controller_1.SigningMethod.PersonalSign, 'Personal Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signPersonalMessage).bind(this), messageParams, req);
209
- });
210
- }
211
- /**
212
- * Called when a dapp uses the eth_signTypedData method, per EIP 712.
213
- *
214
- * @param messageParams - The params passed to eth_signTypedData.
215
- * @param req - The original request, containing the origin.
216
- * @param version - The version indicating the format of the typed data.
217
- * @param signingOpts - An options bag for signing.
218
- * @param signingOpts.parseJsonData - Whether to parse the JSON before signing.
219
- * @returns Promise resolving to the raw data of the signature request.
220
- */
221
- newUnsignedTypedMessage(messageParams, req, version, signingOpts) {
222
- return __awaiter(this, void 0, void 0, function* () {
223
- const signTypeForLogger = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getSignTypeForLogger).call(this, version);
224
- return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, signTypeForLogger, 'Typed Message', __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signTypedMessage).bind(this), messageParams, req, undefined, version, signingOpts);
225
- });
226
- }
227
- /**
228
- * Called to update the message status as signed.
229
- *
230
- * @param messageId - The id of the Message to update.
231
- * @param signature - The data to update the message with.
232
- */
233
- // TODO: Replace `any` with type
234
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
- setDeferredSignSuccess(messageId, signature) {
236
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetDeferredSignSuccess), messageId, signature);
237
- }
238
- /**
239
- * Called when the message metadata needs to be updated.
240
- *
241
- * @param messageId - The id of the message to update.
242
- * @param metadata - The data to update the metadata property in the message.
243
- */
244
- setMessageMetadata(messageId, metadata) {
245
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetMessageMetadata), messageId, metadata);
246
- }
247
- /**
248
- * Called to cancel a signing message.
249
- *
250
- * @param messageId - The id of the Message to update.
251
- */
252
- setDeferredSignError(messageId) {
253
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetDeferredSignError), messageId);
254
- }
255
- setTypedMessageInProgress(messageId) {
256
- __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").setMessageStatusInProgress(messageId);
257
- }
258
- setPersonalMessageInProgress(messageId) {
259
- __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").setMessageStatusInProgress(messageId);
260
- }
261
- }
262
- exports.SignatureController = SignatureController;
263
- _SignatureController_isEthSignEnabled = new WeakMap(), _SignatureController_getAllState = new WeakMap(), _SignatureController_messageManager = new WeakMap(), _SignatureController_personalMessageManager = new WeakMap(), _SignatureController_typedMessageManager = new WeakMap(), _SignatureController_instances = new WeakSet(), _SignatureController_validateUnsignedMessage = function _SignatureController_validateUnsignedMessage(messageParams) {
264
- if (!__classPrivateFieldGet(this, _SignatureController_isEthSignEnabled, "f").call(this)) {
265
- throw rpc_errors_1.rpcErrors.methodNotFound('eth_sign has been disabled. You must enable it in the advanced settings');
266
- }
267
- const data = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_normalizeMsgData).call(this, messageParams.data);
268
- // 64 hex + "0x" at the beginning
269
- // This is needed because Ethereum's EcSign works only on 32 byte numbers
270
- // For 67 length see: https://github.com/MetaMask/metamask-extension/pull/12679/files#r749479607
271
- if (data.length !== 66 && data.length !== 67) {
272
- throw rpc_errors_1.rpcErrors.invalidParams('eth_sign requires 32 byte message hash');
273
- }
274
- }, _SignatureController_newUnsignedAbstractMessage = function _SignatureController_newUnsignedAbstractMessage(messageManager, approvalType, signTypeForLogger, messageName, signMessage, messageParams, req, validateMessage, version, signingOpts) {
275
- return __awaiter(this, void 0, void 0, function* () {
276
- if (validateMessage) {
277
- validateMessage(messageParams);
278
- }
279
- let resultCallbacks;
280
- try {
281
- const messageId = yield messageManager.addUnapprovedMessage(messageParams, req, version);
282
- const messageParamsWithId = Object.assign(Object.assign(Object.assign({}, messageParams), { metamaskId: messageId }), (version && { version }));
283
- const signaturePromise = messageManager.waitForFinishStatus(messageParamsWithId, messageName);
284
- try {
285
- // Signature request is proposed to the user
286
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, logging_controller_1.SigningStage.Proposed, messageParamsWithId);
287
- const acceptResult = yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_requestApproval).call(this, messageParamsWithId, approvalType);
288
- resultCallbacks = acceptResult.resultCallbacks;
289
- }
290
- catch (_a) {
291
- // User rejected the signature request
292
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, logging_controller_1.SigningStage.Rejected, messageParamsWithId);
293
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
294
- throw rpc_errors_1.providerErrors.userRejectedRequest('User rejected the request.');
295
- }
296
- yield signMessage(messageParamsWithId, signingOpts);
297
- const signatureResult = yield signaturePromise;
298
- // Signature operation is completed
299
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, logging_controller_1.SigningStage.Signed, messageParamsWithId);
300
- /* istanbul ignore next */
301
- resultCallbacks === null || resultCallbacks === void 0 ? void 0 : resultCallbacks.success(signatureResult);
302
- return signatureResult;
303
- }
304
- catch (error) {
305
- resultCallbacks === null || resultCallbacks === void 0 ? void 0 : resultCallbacks.error(error);
306
- throw error;
307
- }
308
- });
309
- }, _SignatureController_signMessage = function _SignatureController_signMessage(msgParams) {
310
- return __awaiter(this, void 0, void 0, function* () {
311
- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_messageManager, "f"), controller_utils_1.ApprovalType.EthSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () {
312
- return yield this.messagingSystem.call('KeyringController:signMessage', cleanMsgParams);
313
- }));
314
- });
315
- }, _SignatureController_signPersonalMessage = function _SignatureController_signPersonalMessage(msgParams) {
316
- return __awaiter(this, void 0, void 0, function* () {
317
- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () {
318
- return yield this.messagingSystem.call('KeyringController:signPersonalMessage', cleanMsgParams);
319
- }));
320
- });
321
- }, _SignatureController_signTypedMessage = function _SignatureController_signTypedMessage(msgParams,
322
- /* istanbul ignore next */
323
- opts = { parseJsonData: true }) {
324
- return __awaiter(this, void 0, void 0, function* () {
325
- const { version } = msgParams;
326
- return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () {
327
- const finalMessageParams = opts.parseJsonData
328
- ? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_removeJsonData).call(this, cleanMsgParams, version)
329
- : cleanMsgParams;
330
- return yield this.messagingSystem.call('KeyringController:signTypedMessage', finalMessageParams, version);
331
- }));
332
- });
333
- }, _SignatureController_tryForEachMessageManager = function _SignatureController_tryForEachMessageManager(callbackFn,
334
- // TODO: Replace `any` with type
335
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
336
- ...args) {
337
- const messageManagers = [
338
- __classPrivateFieldGet(this, _SignatureController_messageManager, "f"),
339
- __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"),
340
- __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"),
341
- ];
342
- for (const manager of messageManagers) {
343
- if (callbackFn(manager, ...args)) {
344
- return true;
345
- }
346
- }
347
- throw new Error('Message not found');
348
- }, _SignatureController_trySetDeferredSignSuccess = function _SignatureController_trySetDeferredSignSuccess(
349
- // TODO: Replace `any` with type
350
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
351
- messageManager, messageId,
352
- // TODO: Replace `any` with type
353
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
- signature) {
355
- try {
356
- messageManager.setMessageStatusSigned(messageId, signature);
357
- return true;
358
- }
359
- catch (error) {
360
- return false;
361
- }
362
- }, _SignatureController_trySetMessageMetadata = function _SignatureController_trySetMessageMetadata(
363
- // TODO: Replace `any` with type
364
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
365
- messageManager, messageId, metadata) {
366
- try {
367
- messageManager.setMetadata(messageId, metadata);
368
- return true;
369
- }
370
- catch (error) {
371
- return false;
372
- }
373
- }, _SignatureController_trySetDeferredSignError = function _SignatureController_trySetDeferredSignError(
374
- // TODO: Replace `any` with type
375
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
376
- messageManager, messageId) {
377
- try {
378
- messageManager.rejectMessage(messageId);
379
- return true;
380
- }
381
- catch (error) {
382
- return false;
383
- }
384
- }, _SignatureController_rejectUnapproved = function _SignatureController_rejectUnapproved(messageManager, reason) {
385
- Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {
386
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId, reason);
387
- });
388
- }, _SignatureController_clearUnapproved = function _SignatureController_clearUnapproved(messageManager) {
389
- messageManager.update({
390
- unapprovedMessages: {},
391
- unapprovedMessagesCount: 0,
392
- });
393
- }, _SignatureController_signAbstractMessage = function _SignatureController_signAbstractMessage(messageManager, methodName, msgParams,
394
- // TODO: Replace `any` with type
395
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
396
- getSignature) {
397
- return __awaiter(this, void 0, void 0, function* () {
398
- console.info(`MetaMaskController - ${methodName}`);
399
- const messageId = msgParams.metamaskId;
400
- try {
401
- const cleanMessageParams = yield messageManager.approveMessage(msgParams);
402
- try {
403
- const signature = yield getSignature(cleanMessageParams);
404
- this.hub.emit(`${methodName}:signed`, { signature, messageId });
405
- if (!cleanMessageParams.deferSetAsSigned) {
406
- messageManager.setMessageStatusSigned(messageId, signature);
407
- }
408
- return signature;
409
- }
410
- catch (error) {
411
- this.hub.emit(`${messageId}:signError`, { error });
412
- throw error;
413
- }
414
- // TODO: Replace `any` with type
415
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
416
- }
417
- catch (error) {
418
- console.info(`MetaMaskController - ${methodName} failed.`, error);
419
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_errorMessage).call(this, messageManager, messageId, error.message);
420
- throw error;
421
- }
422
- });
423
- }, _SignatureController_errorMessage = function _SignatureController_errorMessage(messageManager, messageId, error) {
424
- if (messageManager instanceof message_manager_1.TypedMessageManager) {
425
- messageManager.setMessageStatusErrored(messageId, error);
426
- }
427
- else {
428
- __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
429
- }
430
- }, _SignatureController_cancelAbstractMessage = function _SignatureController_cancelAbstractMessage(messageManager, messageId, reason) {
431
- if (reason) {
432
- const message = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getMessage).call(this, messageId);
433
- this.hub.emit('cancelWithReason', { message, reason });
434
- }
435
- messageManager.rejectMessage(messageId);
436
- }, _SignatureController_handleMessageManagerEvents = function _SignatureController_handleMessageManagerEvents(messageManager, eventName) {
437
- messageManager.hub.on('updateBadge', () => {
438
- this.hub.emit('updateBadge');
439
- });
440
- messageManager.hub.on('unapprovedMessage', (msgParams) => {
441
- this.hub.emit(eventName, msgParams);
442
- });
443
- }, _SignatureController_subscribeToMessageState = function _SignatureController_subscribeToMessageState(messageManager, updateState) {
444
- messageManager.subscribe((state) => {
445
- const newMessages = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_migrateMessages).call(this,
446
- // TODO: Replace `any` with type
447
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
448
- state.unapprovedMessages);
449
- this.update(() => {
450
- const newState = Object.assign({}, this.state);
451
- updateState(newState, newMessages, state.unapprovedMessagesCount);
452
- return newState;
453
- });
454
- });
455
- }, _SignatureController_migrateMessages = function _SignatureController_migrateMessages(coreMessages) {
456
- const stateMessages = {};
457
- for (const messageId of Object.keys(coreMessages)) {
458
- const coreMessage = coreMessages[messageId];
459
- const stateMessage = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_migrateMessage).call(this, coreMessage);
460
- stateMessages[messageId] = stateMessage;
461
- }
462
- return stateMessages;
463
- }, _SignatureController_migrateMessage = function _SignatureController_migrateMessage(coreMessage) {
464
- const { messageParams } = coreMessage, coreMessageData = __rest(coreMessage, ["messageParams"]);
465
- // Core message managers use messageParams but frontend uses msgParams with lots of references
466
- const stateMessage = Object.assign(Object.assign({}, coreMessageData), { msgParams: messageParams });
467
- return stateMessage;
468
- }, _SignatureController_normalizeMsgData = function _SignatureController_normalizeMsgData(data) {
469
- if (data.startsWith('0x')) {
470
- // data is already hex
471
- return data;
472
- }
473
- // data is unicode, convert to hex
474
- return (0, utils_1.bytesToHex)(Buffer.from(data, 'utf8'));
475
- }, _SignatureController_getMessage = function _SignatureController_getMessage(messageId) {
476
- return Object.assign(Object.assign(Object.assign({}, this.state.unapprovedMsgs), this.state.unapprovedPersonalMsgs), this.state.unapprovedTypedMessages)[messageId];
477
- }, _SignatureController_requestApproval = function _SignatureController_requestApproval(msgParams, type) {
478
- return __awaiter(this, void 0, void 0, function* () {
479
- const id = msgParams.metamaskId;
480
- const origin = msgParams.origin || controller_utils_1.ORIGIN_METAMASK;
481
- // We are explicitly cloning the message params here to prevent the mutation errors on development mode
482
- // Because sending it through the messaging system will make the object read only
483
- const clonedMsgParams = (0, lodash_1.cloneDeep)(msgParams);
484
- return (yield this.messagingSystem.call('ApprovalController:addRequest', {
485
- id,
486
- origin,
487
- type,
488
- requestData: clonedMsgParams,
489
- expectsResult: true,
490
- }, true));
491
- });
492
- }, _SignatureController_removeJsonData = function _SignatureController_removeJsonData(messageParams, version) {
493
- if (version === 'V1' || typeof messageParams.data !== 'string') {
494
- return messageParams;
495
- }
496
- return Object.assign(Object.assign({}, messageParams), { data: JSON.parse(messageParams.data) });
497
- }, _SignatureController_addLog = function _SignatureController_addLog(signingMethod, stage, signingData) {
498
- this.messagingSystem.call('LoggingController:add', {
499
- type: logging_controller_1.LogType.EthSignLog,
500
- data: {
501
- signingMethod,
502
- stage,
503
- signingData,
504
- },
505
- });
506
- }, _SignatureController_getSignTypeForLogger = function _SignatureController_getSignTypeForLogger(version) {
507
- let signTypeForLogger = logging_controller_1.SigningMethod.EthSignTypedData;
508
- if (version === 'V3') {
509
- signTypeForLogger = logging_controller_1.SigningMethod.EthSignTypedDataV3;
510
- }
511
- else if (version === 'V4') {
512
- signTypeForLogger = logging_controller_1.SigningMethod.EthSignTypedDataV4;
513
- }
514
- return signTypeForLogger;
515
- };
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkGPIBH7A3js = require('./chunk-GPIBH7A3.js');
4
+
5
+
6
+ exports.SignatureController = _chunkGPIBH7A3js.SignatureController;
516
7
  //# sourceMappingURL=SignatureController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureController.js","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 { ApprovalType, ORIGIN_METAMASK } from '@metamask/controller-utils';\nimport type {\n KeyringControllerSignMessageAction,\n KeyringControllerSignPersonalMessageAction,\n KeyringControllerSignTypedMessageAction,\n SignTypedDataVersion,\n} from '@metamask/keyring-controller';\nimport {\n SigningMethod,\n SigningStage,\n LogType,\n} from '@metamask/logging-controller';\nimport type { AddLog } from '@metamask/logging-controller';\nimport type {\n MessageParams,\n MessageParamsMetamask,\n PersonalMessageParams,\n PersonalMessageParamsMetamask,\n TypedMessageParams,\n TypedMessageParamsMetamask,\n AbstractMessageManager,\n AbstractMessage,\n MessageManagerState,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n TypedMessage,\n PersonalMessage,\n Message,\n} from '@metamask/message-manager';\nimport {\n MessageManager,\n PersonalMessageManager,\n TypedMessageManager,\n} from '@metamask/message-manager';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type { Hex, Json } from '@metamask/utils';\nimport { bytesToHex } from '@metamask/utils';\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\n unapprovedMsgs: { persist: false, anonymous: false },\n unapprovedPersonalMsgs: { persist: false, anonymous: false },\n unapprovedTypedMessages: { persist: false, anonymous: false },\n unapprovedMsgCount: { persist: false, anonymous: false },\n unapprovedPersonalMsgCount: { persist: false, anonymous: false },\n unapprovedTypedMessagesCount: { persist: false, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n unapprovedMsgs: {},\n unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\n unapprovedMsgCount: 0,\n unapprovedPersonalMsgCount: 0,\n unapprovedTypedMessagesCount: 0,\n});\n\ntype CoreMessage = AbstractMessage & {\n messageParams: AbstractMessageParams;\n};\n\ntype StateMessage = Required<AbstractMessage> & {\n msgParams: Required<AbstractMessageParams>;\n};\n\ntype SignatureControllerState = {\n unapprovedMsgs: Record<string, StateMessage>;\n unapprovedPersonalMsgs: Record<string, StateMessage>;\n unapprovedTypedMessages: Record<string, StateMessage>;\n unapprovedMsgCount: number;\n unapprovedPersonalMsgCount: number;\n unapprovedTypedMessagesCount: number;\n};\n\ntype AllowedActions =\n | AddApprovalRequest\n | KeyringControllerSignMessageAction\n | KeyringControllerSignPersonalMessageAction\n | KeyringControllerSignTypedMessageAction\n | AddLog;\n\ntype TypedMessageSigningOptions = {\n parseJsonData: boolean;\n};\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 messenger: SignatureControllerMessenger;\n isEthSignEnabled: () => boolean;\n getAllState: () => unknown;\n securityProviderRequest?: (\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n requestData: any,\n methodName: string,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => Promise<any>;\n getCurrentChainId: () => Hex;\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 #isEthSignEnabled: () => boolean;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getAllState: () => any;\n\n #messageManager: MessageManager;\n\n #personalMessageManager: PersonalMessageManager;\n\n #typedMessageManager: TypedMessageManager;\n\n /**\n * Construct a Sign controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the sign controller.\n * @param options.isEthSignEnabled - Callback to return true if eth_sign is enabled.\n * @param options.getAllState - Callback to retrieve all user state.\n * @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.\n * @param options.getCurrentChainId - A function for retrieving the current chainId.\n */\n constructor({\n messenger,\n isEthSignEnabled,\n getAllState,\n securityProviderRequest,\n getCurrentChainId,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: getDefaultState(),\n });\n\n this.#isEthSignEnabled = isEthSignEnabled;\n this.#getAllState = getAllState;\n\n this.hub = new EventEmitter();\n this.#messageManager = new MessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#personalMessageManager = new PersonalMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n );\n this.#typedMessageManager = new TypedMessageManager(\n undefined,\n undefined,\n securityProviderRequest,\n undefined,\n getCurrentChainId,\n );\n\n this.#handleMessageManagerEvents(this.#messageManager, 'unapprovedMessage');\n this.#handleMessageManagerEvents(\n this.#personalMessageManager,\n 'unapprovedPersonalMessage',\n );\n this.#handleMessageManagerEvents(\n this.#typedMessageManager,\n 'unapprovedTypedMessage',\n );\n\n this.#subscribeToMessageState(\n this.#messageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedMsgs = newMessages;\n state.unapprovedMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#personalMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedPersonalMsgs = newMessages;\n state.unapprovedPersonalMsgCount = messageCount;\n },\n );\n\n this.#subscribeToMessageState(\n this.#typedMessageManager,\n (state, newMessages, messageCount) => {\n state.unapprovedTypedMessages = newMessages;\n state.unapprovedTypedMessagesCount = messageCount;\n },\n );\n }\n\n /**\n * A getter for the number of 'unapproved' Messages in this.messages.\n *\n * @returns The number of 'unapproved' Messages in this.messages\n */\n get unapprovedMsgCount(): number {\n return this.#messageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' PersonalMessages in this.messages.\n *\n * @returns The number of 'unapproved' PersonalMessages in this.messages\n */\n get unapprovedPersonalMessagesCount(): number {\n return this.#personalMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for the number of 'unapproved' TypedMessages in this.messages.\n *\n * @returns The number of 'unapproved' TypedMessages in this.messages\n */\n get unapprovedTypedMessagesCount(): number {\n return this.#typedMessageManager.getUnapprovedMessagesCount();\n }\n\n /**\n * A getter for returning all messages.\n *\n * @returns The object containing all messages.\n */\n get messages(): { [id: string]: Message | PersonalMessage | TypedMessage } {\n const messages = [\n ...this.#typedMessageManager.getAllMessages(),\n ...this.#personalMessageManager.getAllMessages(),\n ...this.#messageManager.getAllMessages(),\n ];\n\n const messagesObject = messages.reduce<{\n [id: string]: Message | PersonalMessage | TypedMessage;\n }>((acc, message) => {\n acc[message.id] = message;\n return acc;\n }, {});\n\n return messagesObject;\n }\n\n /**\n * Reset the controller state to the initial state.\n */\n resetState() {\n this.update(() => getDefaultState());\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 this.#rejectUnapproved(this.#messageManager, reason);\n this.#rejectUnapproved(this.#personalMessageManager, reason);\n this.#rejectUnapproved(this.#typedMessageManager, reason);\n }\n\n /**\n * Clears all unapproved messages from memory.\n */\n clearUnapproved() {\n this.#clearUnapproved(this.#messageManager);\n this.#clearUnapproved(this.#personalMessageManager);\n this.#clearUnapproved(this.#typedMessageManager);\n }\n\n /**\n * Called when a Dapp uses the eth_sign method, to request user approval.\n * eth_sign is a pure signature of arbitrary data. It is on a deprecation\n * path, since this data can be a transaction, or can leak private key\n * information.\n *\n * @param messageParams - The params passed to eth_sign.\n * @param [req] - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedMessage(\n messageParams: MessageParams,\n req: OriginalRequest,\n ): Promise<string> {\n return this.#newUnsignedAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n SigningMethod.EthSign,\n 'Message',\n this.#signMessage.bind(this),\n messageParams,\n req,\n this.#validateUnsignedMessage.bind(this),\n );\n }\n\n /**\n * Called when a dapp uses the personal_sign method.\n * This is identical to the Geth eth_sign method, and may eventually replace\n * eth_sign.\n *\n * We currently define our eth_sign and personal_sign mostly for legacy Dapps.\n *\n * @param messageParams - The params of the message to sign & return to the Dapp.\n * @param req - The original request, containing the origin.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: PersonalMessageParams,\n req: OriginalRequest,\n ): Promise<string> {\n return this.#newUnsignedAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n SigningMethod.PersonalSign,\n 'Personal Message',\n this.#signPersonalMessage.bind(this),\n messageParams,\n req,\n );\n }\n\n /**\n * Called when a dapp uses the eth_signTypedData method, per EIP 712.\n *\n * @param messageParams - The params passed to eth_signTypedData.\n * @param req - The original request, containing the origin.\n * @param version - The version indicating the format of the typed data.\n * @param signingOpts - An options bag for signing.\n * @param signingOpts.parseJsonData - Whether to parse the JSON before signing.\n * @returns Promise resolving to the raw data of the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: TypedMessageParams,\n req: OriginalRequest,\n version: string,\n signingOpts: TypedMessageSigningOptions,\n ): Promise<string> {\n const signTypeForLogger = this.#getSignTypeForLogger(version);\n return this.#newUnsignedAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n signTypeForLogger,\n 'Typed Message',\n this.#signTypedMessage.bind(this),\n messageParams,\n req,\n undefined,\n version,\n signingOpts,\n );\n }\n\n /**\n * Called to update the message status as signed.\n *\n * @param messageId - The id of the Message to update.\n * @param signature - The data to update the message with.\n */\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setDeferredSignSuccess(messageId: string, signature: any) {\n this.#tryForEachMessageManager(\n this.#trySetDeferredSignSuccess,\n messageId,\n signature,\n );\n }\n\n /**\n * Called when the message metadata needs to be updated.\n *\n * @param messageId - The id of the message to update.\n * @param metadata - The data to update the metadata property in the message.\n */\n setMessageMetadata(messageId: string, metadata: Json) {\n this.#tryForEachMessageManager(\n this.#trySetMessageMetadata,\n messageId,\n metadata,\n );\n }\n\n /**\n * Called to cancel a signing message.\n *\n * @param messageId - The id of the Message to update.\n */\n setDeferredSignError(messageId: string) {\n this.#tryForEachMessageManager(this.#trySetDeferredSignError, messageId);\n }\n\n setTypedMessageInProgress(messageId: string) {\n this.#typedMessageManager.setMessageStatusInProgress(messageId);\n }\n\n setPersonalMessageInProgress(messageId: string) {\n this.#personalMessageManager.setMessageStatusInProgress(messageId);\n }\n\n #validateUnsignedMessage(messageParams: MessageParamsMetamask): void {\n if (!this.#isEthSignEnabled()) {\n throw rpcErrors.methodNotFound(\n 'eth_sign has been disabled. You must enable it in the advanced settings',\n );\n }\n const data = this.#normalizeMsgData(messageParams.data);\n // 64 hex + \"0x\" at the beginning\n // This is needed because Ethereum's EcSign works only on 32 byte numbers\n // For 67 length see: https://github.com/MetaMask/metamask-extension/pull/12679/files#r749479607\n if (data.length !== 66 && data.length !== 67) {\n throw rpcErrors.invalidParams('eth_sign requires 32 byte message hash');\n }\n }\n\n async #newUnsignedAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n SO,\n >(\n messageManager: AbstractMessageManager<M, P, PM>,\n approvalType: ApprovalType,\n signTypeForLogger: SigningMethod,\n messageName: string,\n signMessage: (messageParams: PM, signingOpts?: SO) => void,\n messageParams: PM,\n req: OriginalRequest,\n validateMessage?: (params: PM) => void,\n version?: string,\n signingOpts?: SO,\n ) {\n if (validateMessage) {\n validateMessage(messageParams);\n }\n\n let resultCallbacks: AcceptResultCallbacks | undefined;\n try {\n const messageId = await messageManager.addUnapprovedMessage(\n messageParams,\n req,\n version,\n );\n\n const messageParamsWithId = {\n ...messageParams,\n metamaskId: messageId,\n ...(version && { version }),\n };\n\n const signaturePromise = messageManager.waitForFinishStatus(\n messageParamsWithId,\n messageName,\n );\n\n try {\n // Signature request is proposed to the user\n this.#addLog(\n signTypeForLogger,\n SigningStage.Proposed,\n messageParamsWithId,\n );\n\n const acceptResult = await this.#requestApproval(\n messageParamsWithId,\n approvalType,\n );\n\n resultCallbacks = acceptResult.resultCallbacks;\n } catch {\n // User rejected the signature request\n this.#addLog(\n signTypeForLogger,\n SigningStage.Rejected,\n messageParamsWithId,\n );\n\n this.#cancelAbstractMessage(messageManager, messageId);\n throw providerErrors.userRejectedRequest('User rejected the request.');\n }\n\n await signMessage(messageParamsWithId, signingOpts);\n\n const signatureResult = await signaturePromise;\n\n // Signature operation is completed\n this.#addLog(signTypeForLogger, SigningStage.Signed, messageParamsWithId);\n\n /* istanbul ignore next */\n resultCallbacks?.success(signatureResult);\n\n return signatureResult;\n } catch (error) {\n resultCallbacks?.error(error as Error);\n throw error;\n }\n }\n\n /**\n * Signifies user intent to complete an eth_sign method.\n *\n * @param msgParams - The params passed to eth_call.\n * @returns Signature result from signing.\n */\n async #signMessage(msgParams: MessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#messageManager,\n ApprovalType.EthSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.messagingSystem.call(\n 'KeyringController:signMessage',\n cleanMsgParams,\n ),\n );\n }\n\n /**\n * Signifies a user's approval to sign a personal_sign message in queue.\n * Triggers signing, and the callback function from newUnsignedPersonalMessage.\n *\n * @param msgParams - The params of the message to sign & return to the Dapp.\n * @returns Signature result from signing.\n */\n async #signPersonalMessage(msgParams: PersonalMessageParamsMetamask) {\n return await this.#signAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n msgParams,\n async (cleanMsgParams) =>\n await this.messagingSystem.call(\n 'KeyringController:signPersonalMessage',\n cleanMsgParams,\n ),\n );\n }\n\n /**\n * The method for a user approving a call to eth_signTypedData, per EIP 712.\n * Triggers the callback in newUnsignedTypedMessage.\n *\n * @param msgParams - The params passed to eth_signTypedData.\n * @param opts - The options for the method.\n * @param opts.parseJsonData - Whether to parse JSON data before calling the KeyringController.\n * @returns Signature result from signing.\n */\n async #signTypedMessage(\n msgParams: TypedMessageParamsMetamask,\n /* istanbul ignore next */\n opts = { parseJsonData: true },\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n const { version } = msgParams;\n return await this.#signAbstractMessage(\n this.#typedMessageManager,\n ApprovalType.EthSignTypedData,\n msgParams,\n async (cleanMsgParams) => {\n const finalMessageParams = opts.parseJsonData\n ? this.#removeJsonData(cleanMsgParams, version as string)\n : cleanMsgParams;\n\n return await this.messagingSystem.call(\n 'KeyringController:signTypedMessage',\n finalMessageParams,\n version as SignTypedDataVersion,\n );\n },\n );\n }\n\n #tryForEachMessageManager(\n callbackFn: (\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageManager: AbstractMessageManager<any, any, any>,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any[]\n ) => boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: any\n ) {\n const messageManagers = [\n this.#messageManager,\n this.#personalMessageManager,\n this.#typedMessageManager,\n ];\n\n for (const manager of messageManagers) {\n if (callbackFn(manager, ...args)) {\n return true;\n }\n }\n throw new Error('Message not found');\n }\n\n #trySetDeferredSignSuccess(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageManager: AbstractMessageManager<any, any, any>,\n messageId: string,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n signature: any,\n ) {\n try {\n messageManager.setMessageStatusSigned(messageId, signature);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n #trySetMessageMetadata(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageManager: AbstractMessageManager<any, any, any>,\n messageId: string,\n metadata: Json,\n ) {\n try {\n messageManager.setMetadata(messageId, metadata);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n #trySetDeferredSignError(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n messageManager: AbstractMessageManager<any, any, any>,\n messageId: string,\n ) {\n try {\n messageManager.rejectMessage(messageId);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n #rejectUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager<M, P, PM>, reason?: string) {\n Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {\n this.#cancelAbstractMessage(messageManager, messageId, reason);\n });\n }\n\n #clearUnapproved<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager<M, P, PM>) {\n messageManager.update({\n unapprovedMessages: {},\n unapprovedMessagesCount: 0,\n });\n }\n\n async #signAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager<M, P, PM>,\n methodName: string,\n msgParams: PM,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getSignature: (cleanMessageParams: P) => Promise<any>,\n ) {\n console.info(`MetaMaskController - ${methodName}`);\n\n const messageId = msgParams.metamaskId as string;\n\n try {\n const cleanMessageParams = await messageManager.approveMessage(msgParams);\n\n try {\n const signature = await getSignature(cleanMessageParams);\n\n this.hub.emit(`${methodName}:signed`, { signature, messageId });\n\n if (!cleanMessageParams.deferSetAsSigned) {\n messageManager.setMessageStatusSigned(messageId, signature);\n }\n\n return signature;\n } catch (error) {\n this.hub.emit(`${messageId}:signError`, { error });\n throw error;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n console.info(`MetaMaskController - ${methodName} failed.`, error);\n this.#errorMessage(messageManager, messageId, error.message);\n throw error;\n }\n }\n\n #errorMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager<M, P, PM>,\n messageId: string,\n error: string,\n ) {\n if (messageManager instanceof TypedMessageManager) {\n messageManager.setMessageStatusErrored(messageId, error);\n } else {\n this.#cancelAbstractMessage(messageManager, messageId);\n }\n }\n\n #cancelAbstractMessage<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager<M, P, PM>,\n messageId: string,\n reason?: string,\n ) {\n if (reason) {\n const message = this.#getMessage(messageId);\n this.hub.emit('cancelWithReason', { message, reason });\n }\n messageManager.rejectMessage(messageId);\n }\n\n #handleMessageManagerEvents<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(messageManager: AbstractMessageManager<M, P, PM>, eventName: string) {\n messageManager.hub.on('updateBadge', () => {\n this.hub.emit('updateBadge');\n });\n\n messageManager.hub.on(\n 'unapprovedMessage',\n (msgParams: AbstractMessageParamsMetamask) => {\n this.hub.emit(eventName, msgParams);\n },\n );\n }\n\n #subscribeToMessageState<\n M extends AbstractMessage,\n P extends AbstractMessageParams,\n PM extends AbstractMessageParamsMetamask,\n >(\n messageManager: AbstractMessageManager<M, P, PM>,\n updateState: (\n state: SignatureControllerState,\n newMessages: Record<string, StateMessage>,\n messageCount: number,\n ) => void,\n ) {\n messageManager.subscribe((state: MessageManagerState<AbstractMessage>) => {\n const newMessages = this.#migrateMessages(\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n state.unapprovedMessages as any,\n );\n\n this.update(() => {\n const newState = { ...this.state };\n updateState(newState, newMessages, state.unapprovedMessagesCount);\n return newState;\n });\n });\n }\n\n #migrateMessages(\n coreMessages: Record<string, CoreMessage>,\n ): Record<string, StateMessage> {\n const stateMessages: Record<string, StateMessage> = {};\n\n for (const messageId of Object.keys(coreMessages)) {\n const coreMessage = coreMessages[messageId];\n const stateMessage = this.#migrateMessage(coreMessage);\n\n stateMessages[messageId] = stateMessage;\n }\n\n return stateMessages;\n }\n\n #migrateMessage(coreMessage: CoreMessage): StateMessage {\n const { messageParams, ...coreMessageData } = coreMessage;\n\n // Core message managers use messageParams but frontend uses msgParams with lots of references\n const stateMessage = {\n ...coreMessageData,\n msgParams: messageParams,\n };\n\n return stateMessage as StateMessage;\n }\n\n #normalizeMsgData(data: string) {\n if (data.startsWith('0x')) {\n // data is already hex\n return data;\n }\n // data is unicode, convert to hex\n return bytesToHex(Buffer.from(data, 'utf8'));\n }\n\n #getMessage(messageId: string): StateMessage {\n return {\n ...this.state.unapprovedMsgs,\n ...this.state.unapprovedPersonalMsgs,\n ...this.state.unapprovedTypedMessages,\n }[messageId];\n }\n\n async #requestApproval(\n msgParams: AbstractMessageParamsMetamask,\n type: ApprovalType,\n ): Promise<AddResult> {\n const id = msgParams.metamaskId as string;\n const origin = msgParams.origin || ORIGIN_METAMASK;\n\n // We are explicitly cloning the message params here to prevent the mutation errors on development mode\n // Because sending it through the messaging system will make the object read only\n const clonedMsgParams = cloneDeep(msgParams);\n return (await this.messagingSystem.call(\n 'ApprovalController:addRequest',\n {\n id,\n origin,\n type,\n requestData: clonedMsgParams as Required<AbstractMessageParamsMetamask>,\n expectsResult: true,\n },\n true,\n )) as Promise<AddResult>;\n }\n\n #removeJsonData(\n messageParams: TypedMessageParams,\n version: string,\n ): TypedMessageParams {\n if (version === 'V1' || typeof messageParams.data !== 'string') {\n return messageParams;\n }\n\n return {\n ...messageParams,\n data: JSON.parse(messageParams.data),\n };\n }\n\n #addLog(\n signingMethod: SigningMethod,\n stage: SigningStage,\n signingData: AbstractMessageParamsMetamask,\n ): void {\n this.messagingSystem.call('LoggingController:add', {\n type: LogType.EthSignLog,\n data: {\n signingMethod,\n stage,\n signingData,\n },\n });\n }\n\n #getSignTypeForLogger(version: string): SigningMethod {\n let signTypeForLogger = SigningMethod.EthSignTypedData;\n if (version === 'V3') {\n signTypeForLogger = SigningMethod.EthSignTypedDataV3;\n } else if (version === 'V4') {\n signTypeForLogger = SigningMethod.EthSignTypedDataV4;\n }\n return signTypeForLogger;\n }\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import {
2
+ SignatureController
3
+ } from "./chunk-ENUR4WHB.mjs";
4
+ export {
5
+ SignatureController
6
+ };
7
+ //# sourceMappingURL=SignatureController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}