@metamask-previews/signature-controller 19.1.0-preview-d33a5c02 → 19.1.0-preview-e46fca9e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SignatureController.cjs +260 -293
- package/dist/SignatureController.cjs.map +1 -1
- package/dist/SignatureController.d.cts +89 -48
- package/dist/SignatureController.d.cts.map +1 -1
- package/dist/SignatureController.d.mts +89 -48
- package/dist/SignatureController.d.mts.map +1 -1
- package/dist/SignatureController.mjs +262 -296
- package/dist/SignatureController.mjs.map +1 -1
- package/dist/logger.cjs +8 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +5 -0
- package/dist/logger.d.cts.map +1 -0
- package/dist/logger.d.mts +5 -0
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +5 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/types.cjs +21 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +93 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +93 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +18 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/validation.cjs +113 -0
- package/dist/utils/validation.cjs.map +1 -0
- package/dist/utils/validation.d.cts +16 -0
- package/dist/utils/validation.d.cts.map +1 -0
- package/dist/utils/validation.d.mts +16 -0
- package/dist/utils/validation.d.mts.map +1 -0
- package/dist/utils/validation.mjs +109 -0
- package/dist/utils/validation.mjs.map +1 -0
- package/package.json +5 -3
|
@@ -13,23 +13,28 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _SignatureController_instances,
|
|
16
|
+
var _SignatureController_instances, _SignatureController_getCurrentChainId, _SignatureController_trace, _SignatureController_parseTypedData, _SignatureController_processSignatureRequest, _SignatureController_approveAndSignRequest, _SignatureController_signRequest, _SignatureController_rejectSignatureRequest, _SignatureController_waitForSignatureRequestFinished, _SignatureController_requestApproval, _SignatureController_updateMetadata, _SignatureController_updateState, _SignatureController_generateLegacyState, _SignatureController_addLog, _SignatureController_getSignTypeForLogger;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.SignatureController = void 0;
|
|
19
19
|
const base_controller_1 = require("@metamask/base-controller");
|
|
20
20
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
21
|
+
const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
21
22
|
const logging_controller_1 = require("@metamask/logging-controller");
|
|
22
|
-
const message_manager_1 = require("@metamask/message-manager");
|
|
23
23
|
const events_1 = __importDefault(require("events"));
|
|
24
|
-
const
|
|
24
|
+
const uuid_1 = require("uuid");
|
|
25
|
+
const logger_1 = require("./logger.cjs");
|
|
26
|
+
const types_1 = require("./types.cjs");
|
|
27
|
+
const validation_1 = require("./utils/validation.cjs");
|
|
25
28
|
const controllerName = 'SignatureController';
|
|
26
29
|
const stateMetadata = {
|
|
30
|
+
signatureRequests: { persist: false, anonymous: false },
|
|
27
31
|
unapprovedPersonalMsgs: { persist: false, anonymous: false },
|
|
28
32
|
unapprovedTypedMessages: { persist: false, anonymous: false },
|
|
29
33
|
unapprovedPersonalMsgCount: { persist: false, anonymous: false },
|
|
30
34
|
unapprovedTypedMessagesCount: { persist: false, anonymous: false },
|
|
31
35
|
};
|
|
32
36
|
const getDefaultState = () => ({
|
|
37
|
+
signatureRequests: {},
|
|
33
38
|
unapprovedPersonalMsgs: {},
|
|
34
39
|
unapprovedTypedMessages: {},
|
|
35
40
|
unapprovedPersonalMsgCount: 0,
|
|
@@ -43,79 +48,59 @@ class SignatureController extends base_controller_1.BaseController {
|
|
|
43
48
|
* Construct a Sign controller.
|
|
44
49
|
*
|
|
45
50
|
* @param options - The controller options.
|
|
51
|
+
* @param options.getCurrentChainId - A function that returns the current chain ID.
|
|
46
52
|
* @param options.messenger - The restricted controller messenger for the sign controller.
|
|
47
|
-
* @param options.
|
|
48
|
-
* @param options.securityProviderRequest - A function for verifying a message, whether it is malicious or not.
|
|
49
|
-
* @param options.getCurrentChainId - A function for retrieving the current chainId.
|
|
53
|
+
* @param options.state - Initial state to set on this controller.
|
|
50
54
|
* @param options.trace - Callback to generate trace information.
|
|
51
55
|
*/
|
|
52
|
-
constructor({
|
|
56
|
+
constructor({ getCurrentChainId, messenger, state, trace, }) {
|
|
53
57
|
super({
|
|
54
58
|
name: controllerName,
|
|
55
59
|
metadata: stateMetadata,
|
|
56
60
|
messenger,
|
|
57
|
-
state:
|
|
61
|
+
state: {
|
|
62
|
+
...getDefaultState(),
|
|
63
|
+
...state,
|
|
64
|
+
},
|
|
58
65
|
});
|
|
59
66
|
_SignatureController_instances.add(this);
|
|
60
|
-
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
-
_SignatureController_getAllState.set(this, void 0);
|
|
63
|
-
_SignatureController_personalMessageManager.set(this, void 0);
|
|
64
|
-
_SignatureController_typedMessageManager.set(this, void 0);
|
|
67
|
+
_SignatureController_getCurrentChainId.set(this, void 0);
|
|
65
68
|
_SignatureController_trace.set(this, void 0);
|
|
66
|
-
__classPrivateFieldSet(this, _SignatureController_getAllState, getAllState, "f");
|
|
67
69
|
this.hub = new events_1.default();
|
|
68
|
-
__classPrivateFieldSet(this,
|
|
69
|
-
__classPrivateFieldSet(this, _SignatureController_typedMessageManager, new message_manager_1.TypedMessageManager(undefined, undefined, securityProviderRequest, undefined, getCurrentChainId), "f");
|
|
70
|
+
__classPrivateFieldSet(this, _SignatureController_getCurrentChainId, getCurrentChainId, "f");
|
|
70
71
|
__classPrivateFieldSet(this, _SignatureController_trace, trace ?? ((_request, fn) => fn?.()), "f");
|
|
71
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), 'unapprovedPersonalMessage');
|
|
72
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_handleMessageManagerEvents).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), 'unapprovedTypedMessage');
|
|
73
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), (state, newMessages, messageCount) => {
|
|
74
|
-
state.unapprovedPersonalMsgs = newMessages;
|
|
75
|
-
state.unapprovedPersonalMsgCount = messageCount;
|
|
76
|
-
});
|
|
77
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_subscribeToMessageState).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), (state, newMessages, messageCount) => {
|
|
78
|
-
state.unapprovedTypedMessages = newMessages;
|
|
79
|
-
state.unapprovedTypedMessagesCount = messageCount;
|
|
80
|
-
});
|
|
81
72
|
}
|
|
82
73
|
/**
|
|
83
74
|
* A getter for the number of 'unapproved' PersonalMessages in this.messages.
|
|
84
|
-
*
|
|
75
|
+
* @deprecated Use `signatureRequests` state instead.
|
|
85
76
|
* @returns The number of 'unapproved' PersonalMessages in this.messages
|
|
86
77
|
*/
|
|
87
78
|
get unapprovedPersonalMessagesCount() {
|
|
88
|
-
return
|
|
79
|
+
return this.state.unapprovedPersonalMsgCount;
|
|
89
80
|
}
|
|
90
81
|
/**
|
|
91
82
|
* A getter for the number of 'unapproved' TypedMessages in this.messages.
|
|
92
|
-
*
|
|
83
|
+
* @deprecated Use `signatureRequests` state instead.
|
|
93
84
|
* @returns The number of 'unapproved' TypedMessages in this.messages
|
|
94
85
|
*/
|
|
95
86
|
get unapprovedTypedMessagesCount() {
|
|
96
|
-
return
|
|
87
|
+
return this.state.unapprovedTypedMessagesCount;
|
|
97
88
|
}
|
|
98
89
|
/**
|
|
99
90
|
* A getter for returning all messages.
|
|
100
|
-
*
|
|
91
|
+
* @deprecated Use `signatureRequests` state instead.
|
|
101
92
|
* @returns The object containing all messages.
|
|
102
93
|
*/
|
|
103
94
|
get messages() {
|
|
104
|
-
|
|
105
|
-
...__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f").getAllMessages(),
|
|
106
|
-
...__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f").getAllMessages(),
|
|
107
|
-
];
|
|
108
|
-
const messagesObject = messages.reduce((acc, message) => {
|
|
109
|
-
acc[message.id] = message;
|
|
110
|
-
return acc;
|
|
111
|
-
}, {});
|
|
112
|
-
return messagesObject;
|
|
95
|
+
return this.state.signatureRequests;
|
|
113
96
|
}
|
|
114
97
|
/**
|
|
115
98
|
* Reset the controller state to the initial state.
|
|
116
99
|
*/
|
|
117
100
|
resetState() {
|
|
118
|
-
this.
|
|
101
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateState).call(this, (state) => {
|
|
102
|
+
Object.assign(state, getDefaultState());
|
|
103
|
+
});
|
|
119
104
|
}
|
|
120
105
|
/**
|
|
121
106
|
* Reject all unapproved messages of any type.
|
|
@@ -123,303 +108,262 @@ class SignatureController extends base_controller_1.BaseController {
|
|
|
123
108
|
* @param reason - A message to indicate why.
|
|
124
109
|
*/
|
|
125
110
|
rejectUnapproved(reason) {
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
const unapprovedSignatureRequests = Object.values(this.state.signatureRequests).filter((metadata) => metadata.status === types_1.SignatureRequestStatus.Unapproved);
|
|
112
|
+
for (const metadata of unapprovedSignatureRequests) {
|
|
113
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectSignatureRequest).call(this, metadata.id, reason);
|
|
114
|
+
}
|
|
128
115
|
}
|
|
129
116
|
/**
|
|
130
117
|
* Clears all unapproved messages from memory.
|
|
131
118
|
*/
|
|
132
119
|
clearUnapproved() {
|
|
133
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m",
|
|
134
|
-
|
|
120
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateState).call(this, (state) => {
|
|
121
|
+
Object.values(state.signatureRequests)
|
|
122
|
+
.filter((metadata) => metadata.status === types_1.SignatureRequestStatus.Unapproved)
|
|
123
|
+
.forEach((metadata) => delete state.signatureRequests[metadata.id]);
|
|
124
|
+
});
|
|
135
125
|
}
|
|
136
126
|
/**
|
|
137
|
-
* Called when a
|
|
127
|
+
* Called when a dApp uses the personal_sign method.
|
|
128
|
+
* We currently provide personal_sign mostly for legacy dApps.
|
|
138
129
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* @param messageParams - The params of the message to sign & return to the Dapp.
|
|
142
|
-
* @param req - The original request, containing the origin.
|
|
130
|
+
* @param messageParams - The params of the message to sign and return to the dApp.
|
|
131
|
+
* @param request - The original request, containing the origin.
|
|
143
132
|
* @param options - An options bag for the method.
|
|
144
133
|
* @param options.traceContext - The parent context for any new traces.
|
|
145
|
-
* @returns Promise resolving to the raw
|
|
134
|
+
* @returns Promise resolving to the raw signature hash generated from the signature request.
|
|
146
135
|
*/
|
|
147
|
-
async newUnsignedPersonalMessage(messageParams,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
136
|
+
async newUnsignedPersonalMessage(messageParams, request, options = {}) {
|
|
137
|
+
(0, validation_1.validatePersonalSignatureRequest)(messageParams);
|
|
138
|
+
messageParams.siwe = (0, controller_utils_1.detectSIWE)(messageParams);
|
|
139
|
+
return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
|
|
140
|
+
messageParams,
|
|
141
|
+
request,
|
|
142
|
+
type: types_1.SignatureRequestType.PersonalSign,
|
|
143
|
+
approvalType: controller_utils_1.ApprovalType.PersonalSign,
|
|
144
|
+
traceContext: options.traceContext,
|
|
145
|
+
});
|
|
152
146
|
}
|
|
153
147
|
/**
|
|
154
|
-
* Called when a dapp uses the eth_signTypedData method, per EIP
|
|
148
|
+
* Called when a dapp uses the eth_signTypedData method, per EIP-712.
|
|
155
149
|
*
|
|
156
|
-
* @param messageParams - The params
|
|
157
|
-
* @param
|
|
158
|
-
* @param version - The version
|
|
159
|
-
* @param
|
|
160
|
-
* @param signingOpts.parseJsonData - Whether to parse the JSON before signing.
|
|
150
|
+
* @param messageParams - The params of the message to sign and return to the dApp.
|
|
151
|
+
* @param request - The original request, containing the origin.
|
|
152
|
+
* @param version - The version of the signTypedData request.
|
|
153
|
+
* @param signingOptions - Options for signing the typed message.
|
|
161
154
|
* @param options - An options bag for the method.
|
|
162
155
|
* @param options.traceContext - The parent context for any new traces.
|
|
163
|
-
* @returns Promise resolving to the raw
|
|
156
|
+
* @returns Promise resolving to the raw signature hash generated from the signature request.
|
|
164
157
|
*/
|
|
165
|
-
async newUnsignedTypedMessage(messageParams,
|
|
166
|
-
|
|
167
|
-
return __classPrivateFieldGet(this, _SignatureController_instances, "m",
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
158
|
+
async newUnsignedTypedMessage(messageParams, request, version, signingOptions, options = {}) {
|
|
159
|
+
(0, validation_1.validateTypedSignatureRequest)(messageParams, version, __classPrivateFieldGet(this, _SignatureController_getCurrentChainId, "f").call(this));
|
|
160
|
+
return __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_processSignatureRequest).call(this, {
|
|
161
|
+
messageParams,
|
|
162
|
+
request,
|
|
163
|
+
type: types_1.SignatureRequestType.TypedSign,
|
|
164
|
+
approvalType: controller_utils_1.ApprovalType.EthSignTypedData,
|
|
165
|
+
version: version,
|
|
166
|
+
signingOptions,
|
|
167
|
+
traceContext: options.traceContext,
|
|
168
|
+
});
|
|
171
169
|
}
|
|
172
170
|
/**
|
|
173
|
-
*
|
|
171
|
+
* Provide a signature for a pending signature request that used `deferSetAsSigned`.
|
|
172
|
+
* Changes the status of the signature request to `signed`.
|
|
174
173
|
*
|
|
175
|
-
* @param
|
|
176
|
-
* @param signature - The
|
|
174
|
+
* @param signatureRequestId - The ID of the signature request.
|
|
175
|
+
* @param signature - The signature to provide.
|
|
177
176
|
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
setDeferredSignSuccess(signatureRequestId, signature) {
|
|
178
|
+
const updatedSignatureRequest = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
|
|
179
|
+
draftMetadata.signature = signature;
|
|
180
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Signed;
|
|
181
|
+
});
|
|
182
|
+
this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);
|
|
182
183
|
}
|
|
183
184
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* @param
|
|
187
|
-
* @param metadata - The data to update the metadata property in the message.
|
|
185
|
+
* Set custom metadata on a signature request.
|
|
186
|
+
* @param signatureRequestId - The ID of the signature request.
|
|
187
|
+
* @param metadata - The custom metadata to set.
|
|
188
188
|
*/
|
|
189
|
-
setMessageMetadata(
|
|
190
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m",
|
|
189
|
+
setMessageMetadata(signatureRequestId, metadata) {
|
|
190
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
|
|
191
|
+
draftMetadata.metadata = metadata;
|
|
192
|
+
});
|
|
191
193
|
}
|
|
192
194
|
/**
|
|
193
|
-
*
|
|
195
|
+
* Reject a pending signature request that used `deferSetAsSigned`.
|
|
196
|
+
* Changes the status of the signature request to `rejected`.
|
|
194
197
|
*
|
|
195
|
-
* @param
|
|
198
|
+
* @param signatureRequestId - The ID of the signature request.
|
|
196
199
|
*/
|
|
197
|
-
setDeferredSignError(
|
|
198
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m",
|
|
200
|
+
setDeferredSignError(signatureRequestId) {
|
|
201
|
+
const updatedSignatureRequest = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
|
|
202
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Rejected;
|
|
203
|
+
});
|
|
204
|
+
this.hub.emit(`${signatureRequestId}:finished`, updatedSignatureRequest);
|
|
199
205
|
}
|
|
200
|
-
|
|
201
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Set the status of a signature request to 'inProgress'.
|
|
208
|
+
*
|
|
209
|
+
* @param signatureRequestId - The ID of the signature request.
|
|
210
|
+
*/
|
|
211
|
+
setTypedMessageInProgress(signatureRequestId) {
|
|
212
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
|
|
213
|
+
draftMetadata.status = types_1.SignatureRequestStatus.InProgress;
|
|
214
|
+
});
|
|
202
215
|
}
|
|
203
|
-
|
|
204
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Set the status of a signature request to 'inProgress'.
|
|
218
|
+
*
|
|
219
|
+
* @param signatureRequestId - The ID of the signature request.
|
|
220
|
+
*/
|
|
221
|
+
setPersonalMessageInProgress(signatureRequestId) {
|
|
222
|
+
this.setTypedMessageInProgress(signatureRequestId);
|
|
205
223
|
}
|
|
206
224
|
}
|
|
207
225
|
exports.SignatureController = SignatureController;
|
|
208
|
-
|
|
226
|
+
_SignatureController_getCurrentChainId = new WeakMap(), _SignatureController_trace = new WeakMap(), _SignatureController_instances = new WeakSet(), _SignatureController_parseTypedData = function _SignatureController_parseTypedData(messageParams, version) {
|
|
227
|
+
if (![keyring_controller_1.SignTypedDataVersion.V3, keyring_controller_1.SignTypedDataVersion.V4].includes(version) ||
|
|
228
|
+
typeof messageParams.data !== 'string') {
|
|
229
|
+
return messageParams;
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
...messageParams,
|
|
233
|
+
data: JSON.parse(messageParams.data),
|
|
234
|
+
};
|
|
235
|
+
}, _SignatureController_processSignatureRequest = async function _SignatureController_processSignatureRequest({ messageParams, request, type, approvalType, version, signingOptions, traceContext, }) {
|
|
236
|
+
(0, logger_1.projectLogger)('Processing signature request', {
|
|
237
|
+
messageParams,
|
|
238
|
+
request,
|
|
239
|
+
type,
|
|
240
|
+
version,
|
|
241
|
+
});
|
|
242
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, type, version, logging_controller_1.SigningStage.Proposed, messageParams);
|
|
243
|
+
const { securityAlertResponse } = request;
|
|
244
|
+
const finalMessageParams = {
|
|
245
|
+
...messageParams,
|
|
246
|
+
origin: request.origin,
|
|
247
|
+
requestId: request.id,
|
|
248
|
+
};
|
|
209
249
|
let resultCallbacks;
|
|
210
250
|
try {
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
251
|
+
const metadata = {
|
|
252
|
+
id: (0, uuid_1.v1)(),
|
|
253
|
+
request: finalMessageParams,
|
|
254
|
+
securityAlertResponse,
|
|
255
|
+
signingOptions,
|
|
256
|
+
status: types_1.SignatureRequestStatus.Unapproved,
|
|
257
|
+
time: Date.now(),
|
|
258
|
+
type,
|
|
259
|
+
version,
|
|
216
260
|
};
|
|
217
|
-
|
|
261
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateState).call(this, (state) => {
|
|
262
|
+
state.signatureRequests[metadata.id] = metadata;
|
|
263
|
+
});
|
|
264
|
+
this.hub.emit('unapprovedMessage', {
|
|
265
|
+
messageParams,
|
|
266
|
+
metamaskId: metadata.id,
|
|
267
|
+
});
|
|
268
|
+
const finishedPromise = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_waitForSignatureRequestFinished).call(this, metadata.id);
|
|
218
269
|
try {
|
|
219
|
-
|
|
220
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, signTypeForLogger, logging_controller_1.SigningStage.Proposed, messageParamsWithId);
|
|
221
|
-
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, {
|
|
270
|
+
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, metadata, approvalType, {
|
|
222
271
|
traceContext: context,
|
|
223
|
-
actionId:
|
|
272
|
+
actionId: request?.id?.toString(),
|
|
224
273
|
}));
|
|
225
274
|
resultCallbacks = acceptResult.resultCallbacks;
|
|
226
275
|
}
|
|
227
276
|
catch (error) {
|
|
228
|
-
|
|
229
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this,
|
|
230
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m",
|
|
277
|
+
(0, logger_1.projectLogger)('User rejected request', metadata.id);
|
|
278
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, type, version, logging_controller_1.SigningStage.Rejected, messageParams);
|
|
279
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectSignatureRequest).call(this, metadata.id);
|
|
231
280
|
throw error;
|
|
232
281
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
/* istanbul ignore next */
|
|
240
|
-
resultCallbacks?.success(signatureResult);
|
|
241
|
-
return signatureResult;
|
|
282
|
+
await __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_approveAndSignRequest).call(this, metadata, traceContext);
|
|
283
|
+
const signature = await finishedPromise;
|
|
284
|
+
(0, logger_1.projectLogger)('Signature request finished', { id: metadata.id, signature });
|
|
285
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_addLog).call(this, type, version, logging_controller_1.SigningStage.Signed, messageParams);
|
|
286
|
+
resultCallbacks?.success(signature);
|
|
287
|
+
return signature;
|
|
242
288
|
}
|
|
243
289
|
catch (error) {
|
|
290
|
+
(0, logger_1.projectLogger)('Signature request failed', error);
|
|
244
291
|
resultCallbacks?.error(error);
|
|
245
292
|
throw error;
|
|
246
293
|
}
|
|
247
|
-
},
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
*
|
|
252
|
-
* @param msgParams - The params of the message to sign & return to the Dapp.
|
|
253
|
-
* @returns Signature result from signing.
|
|
254
|
-
*/
|
|
255
|
-
async function _SignatureController_signPersonalMessage(msgParams) {
|
|
256
|
-
return await __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, msgParams, async (cleanMsgParams) => await this.messagingSystem.call('KeyringController:signPersonalMessage', cleanMsgParams));
|
|
257
|
-
}, _SignatureController_signTypedMessage =
|
|
258
|
-
/**
|
|
259
|
-
* The method for a user approving a call to eth_signTypedData, per EIP 712.
|
|
260
|
-
* Triggers the callback in newUnsignedTypedMessage.
|
|
261
|
-
*
|
|
262
|
-
* @param msgParams - The params passed to eth_signTypedData.
|
|
263
|
-
* @param opts - The options for the method.
|
|
264
|
-
* @param opts.parseJsonData - Whether to parse JSON data before calling the KeyringController.
|
|
265
|
-
* @returns Signature result from signing.
|
|
266
|
-
*/
|
|
267
|
-
async function _SignatureController_signTypedMessage(msgParams,
|
|
268
|
-
/* istanbul ignore next */
|
|
269
|
-
opts = { parseJsonData: true }) {
|
|
270
|
-
const { version } = msgParams;
|
|
271
|
-
return await __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"), controller_utils_1.ApprovalType.EthSignTypedData, msgParams, async (cleanMsgParams) => {
|
|
272
|
-
const finalMessageParams = opts.parseJsonData
|
|
273
|
-
? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_removeJsonData).call(this, cleanMsgParams, version)
|
|
274
|
-
: cleanMsgParams;
|
|
275
|
-
return await this.messagingSystem.call('KeyringController:signTypedMessage', finalMessageParams, version);
|
|
276
|
-
});
|
|
277
|
-
}, _SignatureController_tryForEachMessageManager = function _SignatureController_tryForEachMessageManager(callbackFn,
|
|
278
|
-
// TODO: Replace `any` with type
|
|
279
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
280
|
-
...args) {
|
|
281
|
-
const messageManagers = [
|
|
282
|
-
__classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"),
|
|
283
|
-
__classPrivateFieldGet(this, _SignatureController_typedMessageManager, "f"),
|
|
284
|
-
];
|
|
285
|
-
for (const manager of messageManagers) {
|
|
286
|
-
if (callbackFn(manager, ...args)) {
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
throw new Error('Message not found');
|
|
291
|
-
}, _SignatureController_trySetDeferredSignSuccess = function _SignatureController_trySetDeferredSignSuccess(
|
|
292
|
-
// TODO: Replace `any` with type
|
|
293
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
294
|
-
messageManager, messageId,
|
|
295
|
-
// TODO: Replace `any` with type
|
|
296
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
297
|
-
signature) {
|
|
298
|
-
try {
|
|
299
|
-
messageManager.setMessageStatusSigned(messageId, signature);
|
|
300
|
-
return true;
|
|
301
|
-
}
|
|
302
|
-
catch (error) {
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
}, _SignatureController_trySetMessageMetadata = function _SignatureController_trySetMessageMetadata(
|
|
306
|
-
// TODO: Replace `any` with type
|
|
307
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
308
|
-
messageManager, messageId, metadata) {
|
|
309
|
-
try {
|
|
310
|
-
messageManager.setMetadata(messageId, metadata);
|
|
311
|
-
return true;
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
316
|
-
}, _SignatureController_trySetDeferredSignError = function _SignatureController_trySetDeferredSignError(
|
|
317
|
-
// TODO: Replace `any` with type
|
|
318
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
319
|
-
messageManager, messageId) {
|
|
320
|
-
try {
|
|
321
|
-
messageManager.rejectMessage(messageId);
|
|
322
|
-
return true;
|
|
323
|
-
}
|
|
324
|
-
catch (error) {
|
|
325
|
-
return false;
|
|
326
|
-
}
|
|
327
|
-
}, _SignatureController_rejectUnapproved = function _SignatureController_rejectUnapproved(messageManager, reason) {
|
|
328
|
-
Object.keys(messageManager.getUnapprovedMessages()).forEach((messageId) => {
|
|
329
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId, reason);
|
|
330
|
-
});
|
|
331
|
-
}, _SignatureController_clearUnapproved = function _SignatureController_clearUnapproved(messageManager) {
|
|
332
|
-
messageManager.update({
|
|
333
|
-
unapprovedMessages: {},
|
|
334
|
-
unapprovedMessagesCount: 0,
|
|
294
|
+
}, _SignatureController_approveAndSignRequest = async function _SignatureController_approveAndSignRequest(metadata, traceContext) {
|
|
295
|
+
const { id } = metadata;
|
|
296
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, id, (draftMetadata) => {
|
|
297
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Approved;
|
|
335
298
|
});
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
getSignature) {
|
|
340
|
-
console.info(`MetaMaskController - ${methodName}`);
|
|
341
|
-
const messageId = msgParams.metamaskId;
|
|
299
|
+
await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signRequest).call(this, metadata));
|
|
300
|
+
}, _SignatureController_signRequest = async function _SignatureController_signRequest(metadata) {
|
|
301
|
+
const { id, request, signingOptions, type } = metadata;
|
|
342
302
|
try {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
303
|
+
let signature;
|
|
304
|
+
switch (type) {
|
|
305
|
+
case types_1.SignatureRequestType.PersonalSign:
|
|
306
|
+
signature = await this.messagingSystem.call('KeyringController:signPersonalMessage', request);
|
|
307
|
+
break;
|
|
308
|
+
case types_1.SignatureRequestType.TypedSign:
|
|
309
|
+
const finalRequest = signingOptions?.parseJsonData
|
|
310
|
+
? __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_parseTypedData).call(this, request, metadata.version)
|
|
311
|
+
: request;
|
|
312
|
+
signature = await this.messagingSystem.call('KeyringController:signTypedMessage', finalRequest, metadata.version);
|
|
313
|
+
break;
|
|
314
|
+
/* istanbul ignore next */
|
|
315
|
+
default:
|
|
316
|
+
throw new Error(`Unknown signature request type: ${type}`);
|
|
351
317
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
318
|
+
this.hub.emit(`${type}:signed`, { signature, messageId: id });
|
|
319
|
+
if (request.deferSetAsSigned) {
|
|
320
|
+
return;
|
|
355
321
|
}
|
|
356
|
-
|
|
357
|
-
|
|
322
|
+
const finalMetadata = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, id, (draftMetadata) => {
|
|
323
|
+
draftMetadata.signature = signature;
|
|
324
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Signed;
|
|
325
|
+
});
|
|
326
|
+
this.hub.emit(`${id}:finished`, finalMetadata);
|
|
358
327
|
}
|
|
359
328
|
catch (error) {
|
|
360
|
-
|
|
361
|
-
|
|
329
|
+
if (type === types_1.SignatureRequestType.TypedSign) {
|
|
330
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, id, (draftMetadata) => {
|
|
331
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Errored;
|
|
332
|
+
draftMetadata.error = error.message;
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_rejectSignatureRequest).call(this, id);
|
|
337
|
+
}
|
|
338
|
+
this.hub.emit(`${id}:signError`, { error });
|
|
362
339
|
throw error;
|
|
363
340
|
}
|
|
364
|
-
},
|
|
365
|
-
if (messageManager instanceof message_manager_1.TypedMessageManager) {
|
|
366
|
-
messageManager.setMessageStatusErrored(messageId, error);
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
|
|
370
|
-
}
|
|
371
|
-
}, _SignatureController_cancelAbstractMessage = function _SignatureController_cancelAbstractMessage(messageManager, messageId, reason) {
|
|
341
|
+
}, _SignatureController_rejectSignatureRequest = function _SignatureController_rejectSignatureRequest(signatureRequestId, reason) {
|
|
372
342
|
if (reason) {
|
|
373
|
-
const
|
|
374
|
-
this.hub.emit('cancelWithReason', {
|
|
343
|
+
const metadata = this.state.signatureRequests[signatureRequestId];
|
|
344
|
+
this.hub.emit('cancelWithReason', { metadata, reason });
|
|
375
345
|
}
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
messageManager.hub.on('updateBadge', () => {
|
|
379
|
-
this.hub.emit('updateBadge');
|
|
380
|
-
});
|
|
381
|
-
messageManager.hub.on('unapprovedMessage', (msgParams) => {
|
|
382
|
-
this.hub.emit(eventName, msgParams);
|
|
346
|
+
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateMetadata).call(this, signatureRequestId, (draftMetadata) => {
|
|
347
|
+
draftMetadata.status = types_1.SignatureRequestStatus.Rejected;
|
|
383
348
|
});
|
|
384
|
-
},
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
349
|
+
}, _SignatureController_waitForSignatureRequestFinished = async function _SignatureController_waitForSignatureRequestFinished(id) {
|
|
350
|
+
return new Promise((resolve, reject) => {
|
|
351
|
+
this.hub.once(`${id}:finished`, (metadata) => {
|
|
352
|
+
const { request, signature, status, type } = metadata;
|
|
353
|
+
switch (status) {
|
|
354
|
+
case types_1.SignatureRequestStatus.Signed:
|
|
355
|
+
return resolve(signature);
|
|
356
|
+
case types_1.SignatureRequestStatus.Rejected:
|
|
357
|
+
return reject(new Error(`MetaMask ${type} Signature: User denied message signature.`));
|
|
358
|
+
/* istanbul ignore next */
|
|
359
|
+
default:
|
|
360
|
+
return reject(new Error(`MetaMask ${type} Signature: Unknown problem: ${JSON.stringify(request)}`));
|
|
361
|
+
}
|
|
394
362
|
});
|
|
395
363
|
});
|
|
396
|
-
},
|
|
397
|
-
const
|
|
398
|
-
|
|
399
|
-
const coreMessage = coreMessages[messageId];
|
|
400
|
-
const stateMessage = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_migrateMessage).call(this, coreMessage);
|
|
401
|
-
stateMessages[messageId] = stateMessage;
|
|
402
|
-
}
|
|
403
|
-
return stateMessages;
|
|
404
|
-
}, _SignatureController_migrateMessage = function _SignatureController_migrateMessage(coreMessage) {
|
|
405
|
-
const { messageParams, ...coreMessageData } = coreMessage;
|
|
406
|
-
// Core message managers use messageParams but frontend uses msgParams with lots of references
|
|
407
|
-
const stateMessage = {
|
|
408
|
-
...coreMessageData,
|
|
409
|
-
msgParams: messageParams,
|
|
410
|
-
};
|
|
411
|
-
return stateMessage;
|
|
412
|
-
}, _SignatureController_getMessage = function _SignatureController_getMessage(messageId) {
|
|
413
|
-
return {
|
|
414
|
-
...this.state.unapprovedPersonalMsgs,
|
|
415
|
-
...this.state.unapprovedTypedMessages,
|
|
416
|
-
}[messageId];
|
|
417
|
-
}, _SignatureController_requestApproval = async function _SignatureController_requestApproval(msgParams, type, { traceContext, actionId, }) {
|
|
418
|
-
const id = msgParams.metamaskId;
|
|
419
|
-
const origin = msgParams.origin || controller_utils_1.ORIGIN_METAMASK;
|
|
420
|
-
// We are explicitly cloning the message params here to prevent the mutation errors on development mode
|
|
421
|
-
// Because sending it through the messaging system will make the object read only
|
|
422
|
-
const clonedMsgParams = (0, lodash_1.cloneDeep)(msgParams);
|
|
364
|
+
}, _SignatureController_requestApproval = async function _SignatureController_requestApproval(metadata, type, { traceContext, actionId, }) {
|
|
365
|
+
const { id, request } = metadata;
|
|
366
|
+
const origin = request.origin || controller_utils_1.ORIGIN_METAMASK;
|
|
423
367
|
await __classPrivateFieldGet(this, _SignatureController_trace, "f").call(this, {
|
|
424
368
|
name: 'Notification Display',
|
|
425
369
|
id: actionId,
|
|
@@ -429,18 +373,37 @@ getSignature) {
|
|
|
429
373
|
id,
|
|
430
374
|
origin,
|
|
431
375
|
type,
|
|
432
|
-
requestData:
|
|
376
|
+
requestData: { ...request },
|
|
433
377
|
expectsResult: true,
|
|
434
378
|
}, true));
|
|
435
|
-
},
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
};
|
|
443
|
-
|
|
379
|
+
}, _SignatureController_updateMetadata = function _SignatureController_updateMetadata(id, callback) {
|
|
380
|
+
const { nextState } = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_updateState).call(this, (state) => {
|
|
381
|
+
const metadata = state.signatureRequests[id];
|
|
382
|
+
if (!metadata) {
|
|
383
|
+
throw new Error(`Signature request with id ${id} not found`);
|
|
384
|
+
}
|
|
385
|
+
callback(metadata);
|
|
386
|
+
});
|
|
387
|
+
return nextState.signatureRequests[id];
|
|
388
|
+
}, _SignatureController_updateState = function _SignatureController_updateState(callback) {
|
|
389
|
+
return this.update((state) => {
|
|
390
|
+
// eslint-disable-next-line n/callback-return, n/no-callback-literal
|
|
391
|
+
callback(state);
|
|
392
|
+
const unapprovedRequests = Object.values(state.signatureRequests).filter((request) => request.status === types_1.SignatureRequestStatus.Unapproved);
|
|
393
|
+
state.unapprovedPersonalMsgs = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_generateLegacyState).call(this, unapprovedRequests, types_1.SignatureRequestType.PersonalSign);
|
|
394
|
+
state.unapprovedTypedMessages = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_generateLegacyState).call(this, unapprovedRequests, types_1.SignatureRequestType.TypedSign);
|
|
395
|
+
state.unapprovedPersonalMsgCount = Object.values(state.unapprovedPersonalMsgs).length;
|
|
396
|
+
state.unapprovedTypedMessagesCount = Object.values(state.unapprovedTypedMessages).length;
|
|
397
|
+
});
|
|
398
|
+
}, _SignatureController_generateLegacyState = function _SignatureController_generateLegacyState(unapprovedSignatureRequests, type) {
|
|
399
|
+
return unapprovedSignatureRequests
|
|
400
|
+
.filter((request) => request.type === type)
|
|
401
|
+
.reduce((acc, request) => ({
|
|
402
|
+
...acc,
|
|
403
|
+
[request.id]: { ...request, msgParams: request.request },
|
|
404
|
+
}), {});
|
|
405
|
+
}, _SignatureController_addLog = function _SignatureController_addLog(signatureRequestType, version, stage, signingData) {
|
|
406
|
+
const signingMethod = __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_getSignTypeForLogger).call(this, signatureRequestType, version);
|
|
444
407
|
this.messagingSystem.call('LoggingController:add', {
|
|
445
408
|
type: logging_controller_1.LogType.EthSignLog,
|
|
446
409
|
data: {
|
|
@@ -449,14 +412,18 @@ getSignature) {
|
|
|
449
412
|
signingData,
|
|
450
413
|
},
|
|
451
414
|
});
|
|
452
|
-
}, _SignatureController_getSignTypeForLogger = function _SignatureController_getSignTypeForLogger(version) {
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
415
|
+
}, _SignatureController_getSignTypeForLogger = function _SignatureController_getSignTypeForLogger(requestType, version) {
|
|
416
|
+
if (requestType === types_1.SignatureRequestType.PersonalSign) {
|
|
417
|
+
return logging_controller_1.SigningMethod.PersonalSign;
|
|
418
|
+
}
|
|
419
|
+
if (requestType === types_1.SignatureRequestType.TypedSign &&
|
|
420
|
+
version === keyring_controller_1.SignTypedDataVersion.V3) {
|
|
421
|
+
return logging_controller_1.SigningMethod.EthSignTypedDataV3;
|
|
456
422
|
}
|
|
457
|
-
|
|
458
|
-
|
|
423
|
+
if (requestType === types_1.SignatureRequestType.TypedSign &&
|
|
424
|
+
version === keyring_controller_1.SignTypedDataVersion.V4) {
|
|
425
|
+
return logging_controller_1.SigningMethod.EthSignTypedDataV4;
|
|
459
426
|
}
|
|
460
|
-
return
|
|
427
|
+
return logging_controller_1.SigningMethod.EthSignTypedData;
|
|
461
428
|
};
|
|
462
429
|
//# sourceMappingURL=SignatureController.cjs.map
|