@metamask-previews/signature-controller 19.0.0-preview-cf09c0a → 19.0.0-preview-09a2ffd5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SignatureController.js +7 -0
- package/dist/SignatureController.js.map +1 -0
- package/dist/SignatureController.mjs +5 -454
- package/dist/SignatureController.mjs.map +1 -1
- package/dist/chunk-XG24TXHN.js +537 -0
- package/dist/chunk-XG24TXHN.js.map +1 -0
- package/dist/chunk-YRIMGOP3.mjs +537 -0
- package/dist/chunk-YRIMGOP3.mjs.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6 -1
- package/dist/index.mjs.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/{SignatureController.d.mts → types/SignatureController.d.ts} +15 -25
- package/dist/types/SignatureController.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +7 -12
- package/dist/SignatureController.cjs +0 -462
- package/dist/SignatureController.cjs.map +0 -1
- package/dist/SignatureController.d.cts +0 -141
- package/dist/SignatureController.d.cts.map +0 -1
- package/dist/SignatureController.d.mts.map +0 -1
- package/dist/index.cjs +0 -18
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -2
- package/dist/index.d.mts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -1,456 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
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");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _SignatureController_instances, _SignatureController_getAllState, _SignatureController_personalMessageManager, _SignatureController_typedMessageManager, _SignatureController_trace, _SignatureController_newUnsignedAbstractMessage, _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_getMessage, _SignatureController_requestApproval, _SignatureController_removeJsonData, _SignatureController_addLog, _SignatureController_getSignTypeForLogger;
|
|
13
|
-
import { BaseController } from "@metamask/base-controller";
|
|
14
|
-
import { ApprovalType, ORIGIN_METAMASK } from "@metamask/controller-utils";
|
|
15
|
-
import { SigningMethod, SigningStage, LogType } from "@metamask/logging-controller";
|
|
16
|
-
import { PersonalMessageManager, TypedMessageManager } from "@metamask/message-manager";
|
|
17
|
-
import EventEmitter from "events";
|
|
18
|
-
import $lodash from "lodash";
|
|
19
|
-
const { cloneDeep } = $lodash;
|
|
20
|
-
const controllerName = 'SignatureController';
|
|
21
|
-
const stateMetadata = {
|
|
22
|
-
unapprovedPersonalMsgs: { persist: false, anonymous: false },
|
|
23
|
-
unapprovedTypedMessages: { persist: false, anonymous: false },
|
|
24
|
-
unapprovedPersonalMsgCount: { persist: false, anonymous: false },
|
|
25
|
-
unapprovedTypedMessagesCount: { persist: false, anonymous: false },
|
|
26
|
-
};
|
|
27
|
-
const getDefaultState = () => ({
|
|
28
|
-
unapprovedPersonalMsgs: {},
|
|
29
|
-
unapprovedTypedMessages: {},
|
|
30
|
-
unapprovedPersonalMsgCount: 0,
|
|
31
|
-
unapprovedTypedMessagesCount: 0,
|
|
32
|
-
});
|
|
33
|
-
/**
|
|
34
|
-
* Controller for creating signing requests requiring user approval.
|
|
35
|
-
*/
|
|
36
|
-
export class SignatureController extends BaseController {
|
|
37
|
-
/**
|
|
38
|
-
* Construct a Sign controller.
|
|
39
|
-
*
|
|
40
|
-
* @param options - The controller options.
|
|
41
|
-
* @param options.messenger - The restricted controller messenger for the sign controller.
|
|
42
|
-
* @param options.getAllState - Callback to retrieve all user state.
|
|
43
|
-
* @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.
|
|
44
|
-
* @param options.getCurrentChainId - A function for retrieving the current chainId.
|
|
45
|
-
* @param options.trace - Callback to generate trace information.
|
|
46
|
-
*/
|
|
47
|
-
constructor({ getAllState, getCurrentChainId, messenger, securityProviderRequest, trace, }) {
|
|
48
|
-
super({
|
|
49
|
-
name: controllerName,
|
|
50
|
-
metadata: stateMetadata,
|
|
51
|
-
messenger,
|
|
52
|
-
state: getDefaultState(),
|
|
53
|
-
});
|
|
54
|
-
_SignatureController_instances.add(this);
|
|
55
|
-
// TODO: Replace `any` with type
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
-
_SignatureController_getAllState.set(this, void 0);
|
|
58
|
-
_SignatureController_personalMessageManager.set(this, void 0);
|
|
59
|
-
_SignatureController_typedMessageManager.set(this, void 0);
|
|
60
|
-
_SignatureController_trace.set(this, void 0);
|
|
61
|
-
__classPrivateFieldSet(this, _SignatureController_getAllState, getAllState, "f");
|
|
62
|
-
this.hub = new EventEmitter();
|
|
63
|
-
__classPrivateFieldSet(this, _SignatureController_personalMessageManager, new PersonalMessageManager(undefined, undefined, securityProviderRequest), "f");
|
|
64
|
-
__classPrivateFieldSet(this, _SignatureController_typedMessageManager, new TypedMessageManager(undefined, undefined, securityProviderRequest, undefined, getCurrentChainId), "f");
|
|
65
|
-
__classPrivateFieldSet(this, _SignatureController_trace, trace ?? ((_request, fn) => fn?.()), "f");
|
|
66
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), 'unapprovedPersonalMessage');
|
|
67
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), 'unapprovedTypedMessage');
|
|
68
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), (state, newMessages, messageCount) => {
|
|
69
|
-
state.unapprovedPersonalMsgs = newMessages;
|
|
70
|
-
state.unapprovedPersonalMsgCount = messageCount;
|
|
71
|
-
});
|
|
72
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), (state, newMessages, messageCount) => {
|
|
73
|
-
state.unapprovedTypedMessages = newMessages;
|
|
74
|
-
state.unapprovedTypedMessagesCount = messageCount;
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* A getter for the number of 'unapproved' PersonalMessages in this.messages.
|
|
79
|
-
*
|
|
80
|
-
* @returns The number of 'unapproved' PersonalMessages in this.messages
|
|
81
|
-
*/
|
|
82
|
-
get unapprovedPersonalMessagesCount() {
|
|
83
|
-
return __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").getUnapprovedMessagesCount();
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* A getter for the number of 'unapproved' TypedMessages in this.messages.
|
|
87
|
-
*
|
|
88
|
-
* @returns The number of 'unapproved' TypedMessages in this.messages
|
|
89
|
-
*/
|
|
90
|
-
get unapprovedTypedMessagesCount() {
|
|
91
|
-
return __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").getUnapprovedMessagesCount();
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* A getter for returning all messages.
|
|
95
|
-
*
|
|
96
|
-
* @returns The object containing all messages.
|
|
97
|
-
*/
|
|
98
|
-
get messages() {
|
|
99
|
-
const messages = [
|
|
100
|
-
...__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").getAllMessages(),
|
|
101
|
-
...__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").getAllMessages(),
|
|
102
|
-
];
|
|
103
|
-
const messagesObject = messages.reduce((acc, message) => {
|
|
104
|
-
acc[message.id] = message;
|
|
105
|
-
return acc;
|
|
106
|
-
}, {});
|
|
107
|
-
return messagesObject;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Reset the controller state to the initial state.
|
|
111
|
-
*/
|
|
112
|
-
resetState() {
|
|
113
|
-
this.update(() => getDefaultState());
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Reject all unapproved messages of any type.
|
|
117
|
-
*
|
|
118
|
-
* @param reason - A message to indicate why.
|
|
119
|
-
*/
|
|
120
|
-
rejectUnapproved(reason) {
|
|
121
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), reason);
|
|
122
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), reason);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Clears all unapproved messages from memory.
|
|
126
|
-
*/
|
|
127
|
-
clearUnapproved() {
|
|
128
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_clearUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"));
|
|
129
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_clearUnapproved).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"));
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Called when a dapp uses the personal_sign method.
|
|
133
|
-
*
|
|
134
|
-
* We currently define personal_sign mostly for legacy Dapps.
|
|
135
|
-
*
|
|
136
|
-
* @param messageParams - The params of the message to sign & return to the Dapp.
|
|
137
|
-
* @param req - The original request, containing the origin.
|
|
138
|
-
* @param options - An options bag for the method.
|
|
139
|
-
* @param options.traceContext - The parent context for any new traces.
|
|
140
|
-
* @returns Promise resolving to the raw data of the signature request.
|
|
141
|
-
*/
|
|
142
|
-
async newUnsignedPersonalMessage(messageParams, req, options = {}) {
|
|
143
|
-
return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, SigningMethod.PersonalSign, 'Personal Message',
|
|
144
|
-
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
145
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
146
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signPersonalMessage).bind(this), messageParams, req, undefined, undefined, options.traceContext);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Called when a dapp uses the eth_signTypedData method, per EIP 712.
|
|
150
|
-
*
|
|
151
|
-
* @param messageParams - The params passed to eth_signTypedData.
|
|
152
|
-
* @param req - The original request, containing the origin.
|
|
153
|
-
* @param version - The version indicating the format of the typed data.
|
|
154
|
-
* @param signingOpts - An options bag for signing.
|
|
155
|
-
* @param signingOpts.parseJsonData - Whether to parse the JSON before signing.
|
|
156
|
-
* @param options - An options bag for the method.
|
|
157
|
-
* @param options.traceContext - The parent context for any new traces.
|
|
158
|
-
* @returns Promise resolving to the raw data of the signature request.
|
|
159
|
-
*/
|
|
160
|
-
async newUnsignedTypedMessage(messageParams, req, version, signingOpts, options = {}) {
|
|
161
|
-
const signTypeForLogger = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getSignTypeForLogger).call(this, version);
|
|
162
|
-
return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_newUnsignedAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, signTypeForLogger, 'Typed Message',
|
|
163
|
-
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
164
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
165
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signTypedMessage).bind(this), messageParams, req, version, signingOpts, options.traceContext);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Called to update the message status as signed.
|
|
169
|
-
*
|
|
170
|
-
* @param messageId - The id of the Message to update.
|
|
171
|
-
* @param signature - The data to update the message with.
|
|
172
|
-
*/
|
|
173
|
-
// TODO: Replace `any` with type
|
|
174
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
175
|
-
setDeferredSignSuccess(messageId, signature) {
|
|
176
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetDeferredSignSuccess), messageId, signature);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Called when the message metadata needs to be updated.
|
|
180
|
-
*
|
|
181
|
-
* @param messageId - The id of the message to update.
|
|
182
|
-
* @param metadata - The data to update the metadata property in the message.
|
|
183
|
-
*/
|
|
184
|
-
setMessageMetadata(messageId, metadata) {
|
|
185
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetMessageMetadata), messageId, metadata);
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Called to cancel a signing message.
|
|
189
|
-
*
|
|
190
|
-
* @param messageId - The id of the Message to update.
|
|
191
|
-
*/
|
|
192
|
-
setDeferredSignError(messageId) {
|
|
193
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_tryForEachMessageManager).call(this, __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_trySetDeferredSignError), messageId);
|
|
194
|
-
}
|
|
195
|
-
setTypedMessageInProgress(messageId) {
|
|
196
|
-
__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").setMessageStatusInProgress(messageId);
|
|
197
|
-
}
|
|
198
|
-
setPersonalMessageInProgress(messageId) {
|
|
199
|
-
__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").setMessageStatusInProgress(messageId);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
_SignatureController_getAllState = new WeakMap(), _SignatureController_personalMessageManager = new WeakMap(), _SignatureController_typedMessageManager = new WeakMap(), _SignatureController_trace = new WeakMap(), _SignatureController_instances = new WeakSet(), _SignatureController_newUnsignedAbstractMessage = async function _SignatureController_newUnsignedAbstractMessage(messageManager, approvalType, signTypeForLogger, messageName, signMessage, messageParams, req, version, signingOpts, traceContext) {
|
|
203
|
-
let resultCallbacks;
|
|
204
|
-
try {
|
|
205
|
-
const messageId = await messageManager.addUnapprovedMessage(messageParams, req, version);
|
|
206
|
-
const messageParamsWithId = {
|
|
207
|
-
...messageParams,
|
|
208
|
-
metamaskId: messageId,
|
|
209
|
-
...(version && { version }),
|
|
210
|
-
};
|
|
211
|
-
const signaturePromise = messageManager.waitForFinishStatus(messageParamsWithId, messageName);
|
|
212
|
-
try {
|
|
213
|
-
// Signature request is proposed to the user
|
|
214
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, SigningStage.Proposed, messageParamsWithId);
|
|
215
|
-
const acceptResult = await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, { name: 'Await Approval', parentContext: traceContext }, (context) => __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_requestApproval).call(this, messageParamsWithId, approvalType, {
|
|
216
|
-
traceContext: context,
|
|
217
|
-
actionId: req?.id?.toString(),
|
|
218
|
-
}));
|
|
219
|
-
resultCallbacks = acceptResult.resultCallbacks;
|
|
220
|
-
}
|
|
221
|
-
catch (error) {
|
|
222
|
-
// User rejected the signature request
|
|
223
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, SigningStage.Rejected, messageParamsWithId);
|
|
224
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
|
|
225
|
-
throw error;
|
|
226
|
-
}
|
|
227
|
-
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
228
|
-
// eslint-disable-next-line @typescript-eslint/await-thenable
|
|
229
|
-
await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => signMessage(messageParamsWithId, signingOpts));
|
|
230
|
-
const signatureResult = await signaturePromise;
|
|
231
|
-
// Signature operation is completed
|
|
232
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, SigningStage.Signed, messageParamsWithId);
|
|
233
|
-
/* istanbul ignore next */
|
|
234
|
-
resultCallbacks?.success(signatureResult);
|
|
235
|
-
return signatureResult;
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
resultCallbacks?.error(error);
|
|
239
|
-
throw error;
|
|
240
|
-
}
|
|
241
|
-
}, _SignatureController_signPersonalMessage =
|
|
242
|
-
/**
|
|
243
|
-
* Signifies a user's approval to sign a personal_sign message in queue.
|
|
244
|
-
* Triggers signing, and the callback function from newUnsignedPersonalMessage.
|
|
245
|
-
*
|
|
246
|
-
* @param msgParams - The params of the message to sign & return to the Dapp.
|
|
247
|
-
* @returns Signature result from signing.
|
|
248
|
-
*/
|
|
249
|
-
async function _SignatureController_signPersonalMessage(msgParams) {
|
|
250
|
-
return await __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), ApprovalType.PersonalSign, msgParams, async (cleanMsgParams) => await this.messagingSystem.call('KeyringController:signPersonalMessage', cleanMsgParams));
|
|
251
|
-
}, _SignatureController_signTypedMessage =
|
|
252
|
-
/**
|
|
253
|
-
* The method for a user approving a call to eth_signTypedData, per EIP 712.
|
|
254
|
-
* Triggers the callback in newUnsignedTypedMessage.
|
|
255
|
-
*
|
|
256
|
-
* @param msgParams - The params passed to eth_signTypedData.
|
|
257
|
-
* @param opts - The options for the method.
|
|
258
|
-
* @param opts.parseJsonData - Whether to parse JSON data before calling the KeyringController.
|
|
259
|
-
* @returns Signature result from signing.
|
|
260
|
-
*/
|
|
261
|
-
async function _SignatureController_signTypedMessage(msgParams,
|
|
262
|
-
/* istanbul ignore next */
|
|
263
|
-
opts = { parseJsonData: true }) {
|
|
264
|
-
const { version } = msgParams;
|
|
265
|
-
return await __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), ApprovalType.EthSignTypedData, msgParams, async (cleanMsgParams) => {
|
|
266
|
-
const finalMessageParams = opts.parseJsonData
|
|
267
|
-
? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_removeJsonData).call(this, cleanMsgParams, version)
|
|
268
|
-
: cleanMsgParams;
|
|
269
|
-
return await this.messagingSystem.call('KeyringController:signTypedMessage', finalMessageParams, version);
|
|
270
|
-
});
|
|
271
|
-
}, _SignatureController_tryForEachMessageManager = function _SignatureController_tryForEachMessageManager(callbackFn,
|
|
272
|
-
// TODO: Replace `any` with type
|
|
273
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
274
|
-
...args) {
|
|
275
|
-
const messageManagers = [
|
|
276
|
-
__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"),
|
|
277
|
-
__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"),
|
|
278
|
-
];
|
|
279
|
-
for (const manager of messageManagers) {
|
|
280
|
-
if (callbackFn(manager, ...args)) {
|
|
281
|
-
return true;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
throw new Error('Message not found');
|
|
285
|
-
}, _SignatureController_trySetDeferredSignSuccess = function _SignatureController_trySetDeferredSignSuccess(
|
|
286
|
-
// TODO: Replace `any` with type
|
|
287
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
288
|
-
messageManager, messageId,
|
|
289
|
-
// TODO: Replace `any` with type
|
|
290
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
291
|
-
signature) {
|
|
292
|
-
try {
|
|
293
|
-
messageManager.setMessageStatusSigned(messageId, signature);
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
}, _SignatureController_trySetMessageMetadata = function _SignatureController_trySetMessageMetadata(
|
|
300
|
-
// TODO: Replace `any` with type
|
|
301
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
302
|
-
messageManager, messageId, metadata) {
|
|
303
|
-
try {
|
|
304
|
-
messageManager.setMetadata(messageId, metadata);
|
|
305
|
-
return true;
|
|
306
|
-
}
|
|
307
|
-
catch (error) {
|
|
308
|
-
return false;
|
|
309
|
-
}
|
|
310
|
-
}, _SignatureController_trySetDeferredSignError = function _SignatureController_trySetDeferredSignError(
|
|
311
|
-
// TODO: Replace `any` with type
|
|
312
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
313
|
-
messageManager, messageId) {
|
|
314
|
-
try {
|
|
315
|
-
messageManager.rejectMessage(messageId);
|
|
316
|
-
return true;
|
|
317
|
-
}
|
|
318
|
-
catch (error) {
|
|
319
|
-
return false;
|
|
320
|
-
}
|
|
321
|
-
}, _SignatureController_rejectUnapproved = function _SignatureController_rejectUnapproved(messageManager, reason) {
|
|
322
|
-
Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {
|
|
323
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId, reason);
|
|
324
|
-
});
|
|
325
|
-
}, _SignatureController_clearUnapproved = function _SignatureController_clearUnapproved(messageManager) {
|
|
326
|
-
messageManager.update({
|
|
327
|
-
unapprovedMessages: {},
|
|
328
|
-
unapprovedMessagesCount: 0,
|
|
329
|
-
});
|
|
330
|
-
}, _SignatureController_signAbstractMessage = async function _SignatureController_signAbstractMessage(messageManager, methodName, msgParams,
|
|
331
|
-
// TODO: Replace `any` with type
|
|
332
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
333
|
-
getSignature) {
|
|
334
|
-
console.info(`MetaMaskController - ${methodName}`);
|
|
335
|
-
const messageId = msgParams.metamaskId;
|
|
336
|
-
try {
|
|
337
|
-
const cleanMessageParams = await messageManager.approveMessage(msgParams);
|
|
338
|
-
try {
|
|
339
|
-
const signature = await getSignature(cleanMessageParams);
|
|
340
|
-
this.hub.emit(`${methodName}:signed`, { signature, messageId });
|
|
341
|
-
if (!cleanMessageParams.deferSetAsSigned) {
|
|
342
|
-
messageManager.setMessageStatusSigned(messageId, signature);
|
|
343
|
-
}
|
|
344
|
-
return signature;
|
|
345
|
-
}
|
|
346
|
-
catch (error) {
|
|
347
|
-
this.hub.emit(`${messageId}:signError`, { error });
|
|
348
|
-
throw error;
|
|
349
|
-
}
|
|
350
|
-
// TODO: Replace `any` with type
|
|
351
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
console.info(`MetaMaskController - ${methodName} failed.`, error);
|
|
355
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_errorMessage).call(this, messageManager, messageId, error.message);
|
|
356
|
-
throw error;
|
|
357
|
-
}
|
|
358
|
-
}, _SignatureController_errorMessage = function _SignatureController_errorMessage(messageManager, messageId, error) {
|
|
359
|
-
if (messageManager instanceof TypedMessageManager) {
|
|
360
|
-
messageManager.setMessageStatusErrored(messageId, error);
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
363
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
|
|
364
|
-
}
|
|
365
|
-
}, _SignatureController_cancelAbstractMessage = function _SignatureController_cancelAbstractMessage(messageManager, messageId, reason) {
|
|
366
|
-
if (reason) {
|
|
367
|
-
const message = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getMessage).call(this, messageId);
|
|
368
|
-
this.hub.emit('cancelWithReason', { message, reason });
|
|
369
|
-
}
|
|
370
|
-
messageManager.rejectMessage(messageId);
|
|
371
|
-
}, _SignatureController_handleMessageManagerEvents = function _SignatureController_handleMessageManagerEvents(messageManager, eventName) {
|
|
372
|
-
messageManager.hub.on('updateBadge', () => {
|
|
373
|
-
this.hub.emit('updateBadge');
|
|
374
|
-
});
|
|
375
|
-
messageManager.hub.on('unapprovedMessage', (msgParams) => {
|
|
376
|
-
this.hub.emit(eventName, msgParams);
|
|
377
|
-
});
|
|
378
|
-
}, _SignatureController_subscribeToMessageState = function _SignatureController_subscribeToMessageState(messageManager, updateState) {
|
|
379
|
-
messageManager.subscribe((state) => {
|
|
380
|
-
const newMessages = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_migrateMessages).call(this,
|
|
381
|
-
// TODO: Replace `any` with type
|
|
382
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
383
|
-
state.unapprovedMessages);
|
|
384
|
-
this.update(() => {
|
|
385
|
-
const newState = { ...this.state };
|
|
386
|
-
updateState(newState, newMessages, state.unapprovedMessagesCount);
|
|
387
|
-
return newState;
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
}, _SignatureController_migrateMessages = function _SignatureController_migrateMessages(coreMessages) {
|
|
391
|
-
const stateMessages = {};
|
|
392
|
-
for (const messageId of Object.keys(coreMessages)) {
|
|
393
|
-
const coreMessage = coreMessages[messageId];
|
|
394
|
-
const stateMessage = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_migrateMessage).call(this, coreMessage);
|
|
395
|
-
stateMessages[messageId] = stateMessage;
|
|
396
|
-
}
|
|
397
|
-
return stateMessages;
|
|
398
|
-
}, _SignatureController_migrateMessage = function _SignatureController_migrateMessage(coreMessage) {
|
|
399
|
-
const { messageParams, ...coreMessageData } = coreMessage;
|
|
400
|
-
// Core message managers use messageParams but frontend uses msgParams with lots of references
|
|
401
|
-
const stateMessage = {
|
|
402
|
-
...coreMessageData,
|
|
403
|
-
msgParams: messageParams,
|
|
404
|
-
};
|
|
405
|
-
return stateMessage;
|
|
406
|
-
}, _SignatureController_getMessage = function _SignatureController_getMessage(messageId) {
|
|
407
|
-
return {
|
|
408
|
-
...this.state.unapprovedPersonalMsgs,
|
|
409
|
-
...this.state.unapprovedTypedMessages,
|
|
410
|
-
}[messageId];
|
|
411
|
-
}, _SignatureController_requestApproval = async function _SignatureController_requestApproval(msgParams, type, { traceContext, actionId, }) {
|
|
412
|
-
const id = msgParams.metamaskId;
|
|
413
|
-
const origin = msgParams.origin || ORIGIN_METAMASK;
|
|
414
|
-
// We are explicitly cloning the message params here to prevent the mutation errors on development mode
|
|
415
|
-
// Because sending it through the messaging system will make the object read only
|
|
416
|
-
const clonedMsgParams = cloneDeep(msgParams);
|
|
417
|
-
await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, {
|
|
418
|
-
name: 'Notification Display',
|
|
419
|
-
id: actionId,
|
|
420
|
-
parentContext: traceContext,
|
|
421
|
-
});
|
|
422
|
-
return (await this.messagingSystem.call('ApprovalController:addRequest', {
|
|
423
|
-
id,
|
|
424
|
-
origin,
|
|
425
|
-
type,
|
|
426
|
-
requestData: clonedMsgParams,
|
|
427
|
-
expectsResult: true,
|
|
428
|
-
}, true));
|
|
429
|
-
}, _SignatureController_removeJsonData = function _SignatureController_removeJsonData(messageParams, version) {
|
|
430
|
-
if (version === 'V1' || typeof messageParams.data !== 'string') {
|
|
431
|
-
return messageParams;
|
|
432
|
-
}
|
|
433
|
-
return {
|
|
434
|
-
...messageParams,
|
|
435
|
-
data: JSON.parse(messageParams.data),
|
|
436
|
-
};
|
|
437
|
-
}, _SignatureController_addLog = function _SignatureController_addLog(signingMethod, stage, signingData) {
|
|
438
|
-
this.messagingSystem.call('LoggingController:add', {
|
|
439
|
-
type: LogType.EthSignLog,
|
|
440
|
-
data: {
|
|
441
|
-
signingMethod,
|
|
442
|
-
stage,
|
|
443
|
-
signingData,
|
|
444
|
-
},
|
|
445
|
-
});
|
|
446
|
-
}, _SignatureController_getSignTypeForLogger = function _SignatureController_getSignTypeForLogger(version) {
|
|
447
|
-
let signTypeForLogger = SigningMethod.EthSignTypedData;
|
|
448
|
-
if (version === 'V3') {
|
|
449
|
-
signTypeForLogger = SigningMethod.EthSignTypedDataV3;
|
|
450
|
-
}
|
|
451
|
-
else if (version === 'V4') {
|
|
452
|
-
signTypeForLogger = SigningMethod.EthSignTypedDataV4;
|
|
453
|
-
}
|
|
454
|
-
return signTypeForLogger;
|
|
1
|
+
import {
|
|
2
|
+
SignatureController
|
|
3
|
+
} from "./chunk-YRIMGOP3.mjs";
|
|
4
|
+
export {
|
|
5
|
+
SignatureController
|
|
455
6
|
};
|
|
456
7
|
//# sourceMappingURL=SignatureController.mjs.map
|
|
@@ -1 +1 @@
|
|
|
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 { ApprovalType, ORIGIN_METAMASK } from '@metamask/controller-utils';\nimport type { TraceCallback, TraceContext } 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 PersonalMessageParams,\n PersonalMessageParamsMetamask,\n TypedMessageParams,\n TypedMessageParamsMetamask,\n AbstractMessageManager,\n AbstractMessage,\n MessageManagerState,\n AbstractMessageParams,\n AbstractMessageParamsMetamask,\n OriginalRequest,\n TypedMessage,\n PersonalMessage,\n} from '@metamask/message-manager';\nimport {\n PersonalMessageManager,\n TypedMessageManager,\n} from '@metamask/message-manager';\nimport type { Hex, Json } from '@metamask/utils';\nimport EventEmitter from 'events';\nimport { cloneDeep } from 'lodash';\n\nconst controllerName = 'SignatureController';\n\nconst stateMetadata = {\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 unapprovedPersonalMsgs: {},\n unapprovedTypedMessages: {},\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 unapprovedPersonalMsgs: Record<string, StateMessage>;\n unapprovedTypedMessages: Record<string, StateMessage>;\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 getAllState: () => unknown;\n getCurrentChainId: () => Hex;\n messenger: SignatureControllerMessenger;\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 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 // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getAllState: () => any;\n\n #personalMessageManager: PersonalMessageManager;\n\n #typedMessageManager: TypedMessageManager;\n\n #trace: TraceCallback;\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.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 * @param options.trace - Callback to generate trace information.\n */\n constructor({\n getAllState,\n getCurrentChainId,\n messenger,\n securityProviderRequest,\n trace,\n }: SignatureControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: getDefaultState(),\n });\n\n this.#getAllState = getAllState;\n\n this.hub = new EventEmitter();\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 this.#trace = trace ?? (((_request, fn) => fn?.()) as TraceCallback);\n\n this.#handleMessageManagerEvents(\n this.#personalMessageManager,\n 'unapprovedPersonalMessage',\n );\n this.#handleMessageManagerEvents(\n this.#typedMessageManager,\n 'unapprovedTypedMessage',\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' 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]: PersonalMessage | TypedMessage } {\n const messages = [\n ...this.#typedMessageManager.getAllMessages(),\n ...this.#personalMessageManager.getAllMessages(),\n ];\n\n const messagesObject = messages.reduce<{\n [id: string]: 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.#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.#personalMessageManager);\n this.#clearUnapproved(this.#typedMessageManager);\n }\n\n /**\n * Called when a dapp uses the personal_sign method.\n *\n * We currently define 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 * @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 data of the signature request.\n */\n async newUnsignedPersonalMessage(\n messageParams: PersonalMessageParams,\n req: OriginalRequest,\n options: { traceContext?: TraceContext } = {},\n ): Promise<string> {\n return this.#newUnsignedAbstractMessage(\n this.#personalMessageManager,\n ApprovalType.PersonalSign,\n SigningMethod.PersonalSign,\n 'Personal Message',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#signPersonalMessage.bind(this),\n messageParams,\n req,\n undefined,\n undefined,\n 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 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 * @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 data of the signature request.\n */\n async newUnsignedTypedMessage(\n messageParams: TypedMessageParams,\n req: OriginalRequest,\n version: string,\n signingOpts: TypedMessageSigningOptions,\n options: { traceContext?: TraceContext } = {},\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#signTypedMessage.bind(this),\n messageParams,\n req,\n version,\n signingOpts,\n options.traceContext,\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 async #newUnsignedAbstractMessage<\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n PM extends AbstractMessageParamsMetamask,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 version?: string,\n signingOpts?: SO,\n traceContext?: TraceContext,\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.#trace(\n { name: 'Await Approval', parentContext: traceContext },\n (context) =>\n this.#requestApproval(messageParamsWithId, approvalType, {\n traceContext: context,\n actionId: req?.id?.toString(),\n }),\n );\n\n resultCallbacks = acceptResult.resultCallbacks;\n } catch (error) {\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 error;\n }\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/await-thenable\n\n await this.#trace({ name: 'Sign', parentContext: traceContext }, () =>\n signMessage(messageParamsWithId, signingOpts),\n );\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 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.#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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n M extends AbstractMessage,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n P extends AbstractMessageParams,\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\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 #getMessage(messageId: string): StateMessage {\n return {\n ...this.state.unapprovedPersonalMsgs,\n ...this.state.unapprovedTypedMessages,\n }[messageId];\n }\n\n async #requestApproval(\n msgParams: AbstractMessageParamsMetamask,\n type: ApprovalType,\n {\n traceContext,\n actionId,\n }: { traceContext?: TraceContext; actionId?: string },\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\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: 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":[],"sourcesContent":[],"mappings":"","names":[]}
|