@metamask-previews/eth-json-rpc-middleware 21.0.0-preview-64d897d9 → 21.0.0-preview-fe4c2215
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/CHANGELOG.md +0 -3
- package/dist/block-cache.cjs +32 -41
- package/dist/block-cache.cjs.map +1 -1
- package/dist/block-cache.d.cts +3 -12
- package/dist/block-cache.d.cts.map +1 -1
- package/dist/block-cache.d.mts +3 -12
- package/dist/block-cache.d.mts.map +1 -1
- package/dist/block-cache.mjs +32 -41
- package/dist/block-cache.mjs.map +1 -1
- package/dist/block-ref-rewrite.cjs +8 -12
- package/dist/block-ref-rewrite.cjs.map +1 -1
- package/dist/block-ref-rewrite.d.cts +3 -3
- package/dist/block-ref-rewrite.d.cts.map +1 -1
- package/dist/block-ref-rewrite.d.mts +3 -3
- package/dist/block-ref-rewrite.d.mts.map +1 -1
- package/dist/block-ref-rewrite.mjs +8 -12
- package/dist/block-ref-rewrite.mjs.map +1 -1
- package/dist/block-ref.cjs +10 -17
- package/dist/block-ref.cjs.map +1 -1
- package/dist/block-ref.d.cts +3 -12
- package/dist/block-ref.d.cts.map +1 -1
- package/dist/block-ref.d.mts +3 -12
- package/dist/block-ref.d.mts.map +1 -1
- package/dist/block-ref.mjs +10 -17
- package/dist/block-ref.mjs.map +1 -1
- package/dist/block-tracker-inspector.cjs +25 -28
- package/dist/block-tracker-inspector.cjs.map +1 -1
- package/dist/block-tracker-inspector.d.cts +3 -3
- package/dist/block-tracker-inspector.d.cts.map +1 -1
- package/dist/block-tracker-inspector.d.mts +3 -3
- package/dist/block-tracker-inspector.d.mts.map +1 -1
- package/dist/block-tracker-inspector.mjs +25 -28
- package/dist/block-tracker-inspector.mjs.map +1 -1
- package/dist/fetch.cjs +12 -8
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -5
- package/dist/fetch.d.cts.map +1 -1
- package/dist/fetch.d.mts +3 -5
- package/dist/fetch.d.mts.map +1 -1
- package/dist/fetch.mjs +12 -8
- package/dist/fetch.mjs.map +1 -1
- package/dist/inflight-cache.cjs +45 -61
- package/dist/inflight-cache.cjs.map +1 -1
- package/dist/inflight-cache.d.cts +3 -12
- package/dist/inflight-cache.d.cts.map +1 -1
- package/dist/inflight-cache.d.mts +3 -12
- package/dist/inflight-cache.d.mts.map +1 -1
- package/dist/inflight-cache.mjs +45 -61
- package/dist/inflight-cache.mjs.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.cjs +9 -20
- package/dist/methods/wallet-request-execution-permissions.cjs.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.cts +3 -14
- package/dist/methods/wallet-request-execution-permissions.d.cts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.mts +3 -14
- package/dist/methods/wallet-request-execution-permissions.d.mts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.mjs +7 -18
- package/dist/methods/wallet-request-execution-permissions.mjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.cjs +11 -23
- package/dist/methods/wallet-revoke-execution-permission.cjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.cts +5 -19
- package/dist/methods/wallet-revoke-execution-permission.d.cts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.mts +5 -19
- package/dist/methods/wallet-revoke-execution-permission.d.mts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.mjs +8 -20
- package/dist/methods/wallet-revoke-execution-permission.mjs.map +1 -1
- package/dist/providerAsMiddleware.cjs +1 -18
- package/dist/providerAsMiddleware.cjs.map +1 -1
- package/dist/providerAsMiddleware.d.cts +3 -18
- package/dist/providerAsMiddleware.d.cts.map +1 -1
- package/dist/providerAsMiddleware.d.mts +3 -18
- package/dist/providerAsMiddleware.d.mts.map +1 -1
- package/dist/providerAsMiddleware.mjs +0 -16
- package/dist/providerAsMiddleware.mjs.map +1 -1
- package/dist/retryOnEmpty.cjs +11 -8
- package/dist/retryOnEmpty.cjs.map +1 -1
- package/dist/retryOnEmpty.d.cts +3 -3
- package/dist/retryOnEmpty.d.cts.map +1 -1
- package/dist/retryOnEmpty.d.mts +3 -3
- package/dist/retryOnEmpty.d.mts.map +1 -1
- package/dist/retryOnEmpty.mjs +11 -8
- package/dist/retryOnEmpty.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +5 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +5 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/error.cjs +0 -7
- package/dist/utils/error.cjs.map +1 -1
- package/dist/utils/error.d.cts +0 -7
- package/dist/utils/error.d.cts.map +1 -1
- package/dist/utils/error.d.mts +0 -7
- package/dist/utils/error.d.mts.map +1 -1
- package/dist/utils/error.mjs +0 -7
- package/dist/utils/error.mjs.map +1 -1
- package/dist/utils/normalize.cjs +2 -7
- package/dist/utils/normalize.cjs.map +1 -1
- package/dist/utils/normalize.d.cts.map +1 -1
- package/dist/utils/normalize.d.mts.map +1 -1
- package/dist/utils/normalize.mjs +2 -7
- package/dist/utils/normalize.mjs.map +1 -1
- package/dist/utils/validation.cjs +2 -34
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +3 -29
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +3 -29
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +2 -34
- package/dist/utils/validation.mjs.map +1 -1
- package/dist/wallet.cjs +92 -199
- package/dist/wallet.cjs.map +1 -1
- package/dist/wallet.d.cts +13 -40
- package/dist/wallet.d.cts.map +1 -1
- package/dist/wallet.d.mts +13 -40
- package/dist/wallet.d.mts.map +1 -1
- package/dist/wallet.mjs +93 -200
- package/dist/wallet.mjs.map +1 -1
- package/package.json +1 -4
package/dist/wallet.cjs
CHANGED
|
@@ -25,7 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.createWalletMiddleware = void 0;
|
|
27
27
|
const sigUtil = __importStar(require("@metamask/eth-sig-util"));
|
|
28
|
-
const
|
|
28
|
+
const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
|
|
29
29
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
30
30
|
const utils_1 = require("@metamask/utils");
|
|
31
31
|
const wallet_request_execution_permissions_1 = require("./methods/wallet-request-execution-permissions.cjs");
|
|
@@ -33,150 +33,93 @@ const wallet_revoke_execution_permission_1 = require("./methods/wallet-revoke-ex
|
|
|
33
33
|
const common_1 = require("./utils/common.cjs");
|
|
34
34
|
const normalize_1 = require("./utils/normalize.cjs");
|
|
35
35
|
const validation_1 = require("./utils/validation.cjs");
|
|
36
|
-
/**
|
|
37
|
-
* Creates a JSON-RPC middleware that handles "wallet"-related JSON-RPC methods.
|
|
38
|
-
* "Wallet" may have had a specific meaning at some point in the distant past,
|
|
39
|
-
* but at this point it's just an arbitrary label.
|
|
40
|
-
*
|
|
41
|
-
* @param options - The options for the middleware.
|
|
42
|
-
* @param options.getAccounts - The function to get the accounts for the origin.
|
|
43
|
-
* @param options.processDecryptMessage - The function to process the decrypt message request.
|
|
44
|
-
* @param options.processEncryptionPublicKey - The function to process the encryption public key request.
|
|
45
|
-
* @param options.processPersonalMessage - The function to process the personal message request.
|
|
46
|
-
* @param options.processTransaction - The function to process the transaction request.
|
|
47
|
-
* @param options.processSignTransaction - The function to process the sign transaction request.
|
|
48
|
-
* @param options.processTypedMessage - The function to process the typed message request.
|
|
49
|
-
* @param options.processTypedMessageV3 - The function to process the typed message v3 request.
|
|
50
|
-
* @param options.processTypedMessageV4 - The function to process the typed message v4 request.
|
|
51
|
-
* @param options.processRequestExecutionPermissions - The function to process the request execution permissions request.
|
|
52
|
-
* @param options.processRevokeExecutionPermission - The function to process the revoke execution permission request.
|
|
53
|
-
* @returns A JSON-RPC middleware that handles wallet-related JSON-RPC methods.
|
|
54
|
-
*/
|
|
55
36
|
function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }) {
|
|
56
37
|
if (!getAccounts) {
|
|
57
38
|
throw new Error('opts.getAccounts is required');
|
|
58
39
|
}
|
|
59
|
-
return (0,
|
|
40
|
+
return (0, json_rpc_engine_1.createScaffoldMiddleware)({
|
|
60
41
|
// account lookups
|
|
61
|
-
eth_accounts: lookupAccounts,
|
|
62
|
-
eth_coinbase: lookupDefaultAccount,
|
|
42
|
+
eth_accounts: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupAccounts),
|
|
43
|
+
eth_coinbase: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupDefaultAccount),
|
|
63
44
|
// tx signatures
|
|
64
|
-
eth_sendTransaction: sendTransaction,
|
|
65
|
-
eth_signTransaction: signTransaction,
|
|
45
|
+
eth_sendTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(sendTransaction),
|
|
46
|
+
eth_signTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(signTransaction),
|
|
66
47
|
// message signatures
|
|
67
|
-
eth_signTypedData: signTypedData,
|
|
68
|
-
eth_signTypedData_v3: signTypedDataV3,
|
|
69
|
-
eth_signTypedData_v4: signTypedDataV4,
|
|
70
|
-
personal_sign: personalSign,
|
|
71
|
-
eth_getEncryptionPublicKey: encryptionPublicKey,
|
|
72
|
-
eth_decrypt: decryptMessage,
|
|
73
|
-
personal_ecRecover: personalRecover,
|
|
48
|
+
eth_signTypedData: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedData),
|
|
49
|
+
eth_signTypedData_v3: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedDataV3),
|
|
50
|
+
eth_signTypedData_v4: (0, json_rpc_engine_1.createAsyncMiddleware)(signTypedDataV4),
|
|
51
|
+
personal_sign: (0, json_rpc_engine_1.createAsyncMiddleware)(personalSign),
|
|
52
|
+
eth_getEncryptionPublicKey: (0, json_rpc_engine_1.createAsyncMiddleware)(encryptionPublicKey),
|
|
53
|
+
eth_decrypt: (0, json_rpc_engine_1.createAsyncMiddleware)(decryptMessage),
|
|
54
|
+
personal_ecRecover: (0, json_rpc_engine_1.createAsyncMiddleware)(personalRecover),
|
|
74
55
|
// EIP-7715
|
|
75
|
-
wallet_requestExecutionPermissions: (0, wallet_request_execution_permissions_1.
|
|
56
|
+
wallet_requestExecutionPermissions: (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res) => (0, wallet_request_execution_permissions_1.walletRequestExecutionPermissions)(req, res, {
|
|
76
57
|
processRequestExecutionPermissions,
|
|
77
|
-
}),
|
|
78
|
-
wallet_revokeExecutionPermission: (0, wallet_revoke_execution_permission_1.
|
|
58
|
+
})),
|
|
59
|
+
wallet_revokeExecutionPermission: (0, json_rpc_engine_1.createAsyncMiddleware)(async (req, res) => (0, wallet_revoke_execution_permission_1.walletRevokeExecutionPermission)(req, res, {
|
|
79
60
|
processRevokeExecutionPermission,
|
|
80
|
-
}),
|
|
61
|
+
})),
|
|
81
62
|
});
|
|
82
63
|
//
|
|
83
64
|
// account lookups
|
|
84
65
|
//
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
*
|
|
88
|
-
* @param options - Options bag.
|
|
89
|
-
* @param options.context - The context of the request.
|
|
90
|
-
* @returns The accounts for the origin.
|
|
91
|
-
*/
|
|
92
|
-
async function lookupAccounts({ context, }) {
|
|
93
|
-
return await getAccounts(context.assertGet('origin'));
|
|
66
|
+
async function lookupAccounts(req, res) {
|
|
67
|
+
res.result = await getAccounts(req);
|
|
94
68
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
* @param options - Options bag.
|
|
99
|
-
* @param options.context - The context of the request.
|
|
100
|
-
* @returns The default account for the origin.
|
|
101
|
-
*/
|
|
102
|
-
async function lookupDefaultAccount({ context, }) {
|
|
103
|
-
const accounts = await getAccounts(context.assertGet('origin'));
|
|
104
|
-
return accounts[0] || null;
|
|
69
|
+
async function lookupDefaultAccount(req, res) {
|
|
70
|
+
const accounts = await getAccounts(req);
|
|
71
|
+
res.result = accounts[0] || null;
|
|
105
72
|
}
|
|
106
73
|
//
|
|
107
74
|
// transaction signatures
|
|
108
75
|
//
|
|
109
|
-
|
|
110
|
-
* Sends a transaction.
|
|
111
|
-
*
|
|
112
|
-
* @param options - Options bag.
|
|
113
|
-
* @param options.request - The request.
|
|
114
|
-
* @param options.context - The context of the request.
|
|
115
|
-
* @returns The transaction hash.
|
|
116
|
-
*/
|
|
117
|
-
async function sendTransaction({ request, context, }) {
|
|
76
|
+
async function sendTransaction(req, res) {
|
|
118
77
|
if (!processTransaction) {
|
|
119
78
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
120
79
|
}
|
|
121
|
-
if (!
|
|
122
|
-
!Array.isArray(
|
|
123
|
-
!(
|
|
80
|
+
if (!req.params ||
|
|
81
|
+
!Array.isArray(req.params) ||
|
|
82
|
+
!(req.params.length >= 1)) {
|
|
124
83
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
125
84
|
}
|
|
126
|
-
const params =
|
|
85
|
+
const params = req.params[0];
|
|
127
86
|
const txParams = {
|
|
128
87
|
...params,
|
|
129
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
88
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
130
89
|
};
|
|
131
|
-
|
|
90
|
+
res.result = await processTransaction(txParams, req);
|
|
132
91
|
}
|
|
133
|
-
|
|
134
|
-
* Signs a transaction.
|
|
135
|
-
*
|
|
136
|
-
* @param options - Options bag.
|
|
137
|
-
* @param options.request - The request.
|
|
138
|
-
* @param options.context - The context of the request.
|
|
139
|
-
* @returns The signed transaction.
|
|
140
|
-
*/
|
|
141
|
-
async function signTransaction({ request, context, }) {
|
|
92
|
+
async function signTransaction(req, res) {
|
|
142
93
|
if (!processSignTransaction) {
|
|
143
94
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
144
95
|
}
|
|
145
|
-
if (!
|
|
146
|
-
!Array.isArray(
|
|
147
|
-
!(
|
|
96
|
+
if (!req.params ||
|
|
97
|
+
!Array.isArray(req.params) ||
|
|
98
|
+
!(req.params.length >= 1)) {
|
|
148
99
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
149
100
|
}
|
|
150
|
-
const params =
|
|
101
|
+
const params = req.params[0];
|
|
151
102
|
const txParams = {
|
|
152
103
|
...params,
|
|
153
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
104
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
154
105
|
};
|
|
155
|
-
|
|
106
|
+
res.result = await processSignTransaction(txParams, req);
|
|
156
107
|
}
|
|
157
108
|
//
|
|
158
109
|
// message signatures
|
|
159
110
|
//
|
|
160
|
-
|
|
161
|
-
* Signs a `eth_signTypedData` message.
|
|
162
|
-
*
|
|
163
|
-
* @param options - Options bag.
|
|
164
|
-
* @param options.request - The request.
|
|
165
|
-
* @param options.context - The context of the request.
|
|
166
|
-
* @returns The signed message.
|
|
167
|
-
*/
|
|
168
|
-
async function signTypedData({ request, context, }) {
|
|
111
|
+
async function signTypedData(req, res) {
|
|
169
112
|
if (!processTypedMessage) {
|
|
170
113
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
171
114
|
}
|
|
172
|
-
if (!
|
|
173
|
-
!Array.isArray(
|
|
174
|
-
!(
|
|
115
|
+
if (!req?.params ||
|
|
116
|
+
!Array.isArray(req.params) ||
|
|
117
|
+
!(req.params.length >= 2)) {
|
|
175
118
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
176
119
|
}
|
|
177
|
-
const params =
|
|
120
|
+
const params = req.params;
|
|
178
121
|
const message = params[0];
|
|
179
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
122
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
180
123
|
const version = 'V1';
|
|
181
124
|
const extraParams = params[2] || {};
|
|
182
125
|
const msgParams = {
|
|
@@ -186,27 +129,19 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
186
129
|
signatureMethod: 'eth_signTypedData',
|
|
187
130
|
version,
|
|
188
131
|
};
|
|
189
|
-
|
|
132
|
+
res.result = await processTypedMessage(msgParams, req, version);
|
|
190
133
|
}
|
|
191
|
-
|
|
192
|
-
* Signs a `eth_signTypedData_v3` message.
|
|
193
|
-
*
|
|
194
|
-
* @param options - Options bag.
|
|
195
|
-
* @param options.request - The request.
|
|
196
|
-
* @param options.context - The context of the request.
|
|
197
|
-
* @returns The signed message.
|
|
198
|
-
*/
|
|
199
|
-
async function signTypedDataV3({ request, context, }) {
|
|
134
|
+
async function signTypedDataV3(req, res) {
|
|
200
135
|
if (!processTypedMessageV3) {
|
|
201
136
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
202
137
|
}
|
|
203
|
-
if (!
|
|
204
|
-
!Array.isArray(
|
|
205
|
-
!(
|
|
138
|
+
if (!req?.params ||
|
|
139
|
+
!Array.isArray(req.params) ||
|
|
140
|
+
!(req.params.length >= 2)) {
|
|
206
141
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
207
142
|
}
|
|
208
|
-
const params =
|
|
209
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
143
|
+
const params = req.params;
|
|
144
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
210
145
|
const message = (0, normalize_1.normalizeTypedMessage)(params[1]);
|
|
211
146
|
validatePrimaryType(message);
|
|
212
147
|
validateVerifyingContract(message);
|
|
@@ -217,27 +152,19 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
217
152
|
version,
|
|
218
153
|
signatureMethod: 'eth_signTypedData_v3',
|
|
219
154
|
};
|
|
220
|
-
|
|
155
|
+
res.result = await processTypedMessageV3(msgParams, req, version);
|
|
221
156
|
}
|
|
222
|
-
|
|
223
|
-
* Signs a `eth_signTypedData_v4` message.
|
|
224
|
-
*
|
|
225
|
-
* @param options - Options bag.
|
|
226
|
-
* @param options.request - The request.
|
|
227
|
-
* @param options.context - The context of the request.
|
|
228
|
-
* @returns The signed message.
|
|
229
|
-
*/
|
|
230
|
-
async function signTypedDataV4({ request, context, }) {
|
|
157
|
+
async function signTypedDataV4(req, res) {
|
|
231
158
|
if (!processTypedMessageV4) {
|
|
232
159
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
233
160
|
}
|
|
234
|
-
if (!
|
|
235
|
-
!Array.isArray(
|
|
236
|
-
!(
|
|
161
|
+
if (!req?.params ||
|
|
162
|
+
!Array.isArray(req.params) ||
|
|
163
|
+
!(req.params.length >= 2)) {
|
|
237
164
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
238
165
|
}
|
|
239
|
-
const params =
|
|
240
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
166
|
+
const params = req.params;
|
|
167
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
241
168
|
const message = (0, normalize_1.normalizeTypedMessage)(params[1]);
|
|
242
169
|
validatePrimaryType(message);
|
|
243
170
|
validateVerifyingContract(message);
|
|
@@ -248,26 +175,18 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
248
175
|
version,
|
|
249
176
|
signatureMethod: 'eth_signTypedData_v4',
|
|
250
177
|
};
|
|
251
|
-
|
|
178
|
+
res.result = await processTypedMessageV4(msgParams, req, version);
|
|
252
179
|
}
|
|
253
|
-
|
|
254
|
-
* Signs a `personal_sign` message.
|
|
255
|
-
*
|
|
256
|
-
* @param options - Options bag.
|
|
257
|
-
* @param options.request - The request.
|
|
258
|
-
* @param options.context - The context of the request.
|
|
259
|
-
* @returns The signed message.
|
|
260
|
-
*/
|
|
261
|
-
async function personalSign({ request, context, }) {
|
|
180
|
+
async function personalSign(req, res) {
|
|
262
181
|
if (!processPersonalMessage) {
|
|
263
182
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
264
183
|
}
|
|
265
|
-
if (!
|
|
266
|
-
!Array.isArray(
|
|
267
|
-
!(
|
|
184
|
+
if (!req?.params ||
|
|
185
|
+
!Array.isArray(req.params) ||
|
|
186
|
+
!(req.params.length >= 2)) {
|
|
268
187
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
269
188
|
}
|
|
270
|
-
const params =
|
|
189
|
+
const params = req.params;
|
|
271
190
|
// process normally
|
|
272
191
|
const firstParam = params[0];
|
|
273
192
|
const secondParam = params[1];
|
|
@@ -282,6 +201,11 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
282
201
|
// and the second param is definitely not, but is hex.
|
|
283
202
|
let address, message;
|
|
284
203
|
if ((0, validation_1.resemblesAddress)(firstParam) && !(0, validation_1.resemblesAddress)(secondParam)) {
|
|
204
|
+
let warning = `The eth_personalSign method requires params ordered `;
|
|
205
|
+
warning += `[message, address]. This was previously handled incorrectly, `;
|
|
206
|
+
warning += `and has been corrected automatically. `;
|
|
207
|
+
warning += `Please switch this param order for smooth behavior in the future.`;
|
|
208
|
+
res.warning = warning;
|
|
285
209
|
address = firstParam;
|
|
286
210
|
message = secondParam;
|
|
287
211
|
}
|
|
@@ -289,93 +213,62 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
289
213
|
message = firstParam;
|
|
290
214
|
address = secondParam;
|
|
291
215
|
}
|
|
292
|
-
address = await validateAndNormalizeKeyholder(address,
|
|
216
|
+
address = await validateAndNormalizeKeyholder(address, req);
|
|
293
217
|
const msgParams = {
|
|
294
218
|
...extraParams,
|
|
295
219
|
from: address,
|
|
296
220
|
data: message,
|
|
297
221
|
signatureMethod: 'personal_sign',
|
|
298
222
|
};
|
|
299
|
-
|
|
223
|
+
res.result = await processPersonalMessage(msgParams, req);
|
|
300
224
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
* @param options.request - The request.
|
|
306
|
-
* @returns The recovered signer address.
|
|
307
|
-
*/
|
|
308
|
-
async function personalRecover({ request, }) {
|
|
309
|
-
if (!request.params ||
|
|
310
|
-
!Array.isArray(request.params) ||
|
|
311
|
-
!(request.params.length >= 2)) {
|
|
225
|
+
async function personalRecover(req, res) {
|
|
226
|
+
if (!req?.params ||
|
|
227
|
+
!Array.isArray(req.params) ||
|
|
228
|
+
!(req.params.length >= 2)) {
|
|
312
229
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
313
230
|
}
|
|
314
|
-
const params =
|
|
231
|
+
const params = req.params;
|
|
315
232
|
const message = params[0];
|
|
316
233
|
const signature = params[1];
|
|
317
234
|
const signerAddress = sigUtil.recoverPersonalSignature({
|
|
318
235
|
data: message,
|
|
319
236
|
signature,
|
|
320
237
|
});
|
|
321
|
-
|
|
238
|
+
res.result = signerAddress;
|
|
322
239
|
}
|
|
323
|
-
|
|
324
|
-
* Gets the encryption public key for an address.
|
|
325
|
-
*
|
|
326
|
-
* @param options - Options bag.
|
|
327
|
-
* @param options.request - The request.
|
|
328
|
-
* @param options.context - The context of the request.
|
|
329
|
-
* @returns The encryption public key.
|
|
330
|
-
*/
|
|
331
|
-
async function encryptionPublicKey({ request, context, }) {
|
|
240
|
+
async function encryptionPublicKey(req, res) {
|
|
332
241
|
if (!processEncryptionPublicKey) {
|
|
333
242
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
334
243
|
}
|
|
335
|
-
if (!
|
|
336
|
-
!Array.isArray(
|
|
337
|
-
!(
|
|
244
|
+
if (!req?.params ||
|
|
245
|
+
!Array.isArray(req.params) ||
|
|
246
|
+
!(req.params.length >= 1)) {
|
|
338
247
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
339
248
|
}
|
|
340
|
-
const params =
|
|
341
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
342
|
-
|
|
343
|
-
id: request.id,
|
|
344
|
-
origin: context.assertGet('origin'),
|
|
345
|
-
securityAlertResponse: context.assertGet('securityAlertResponse'),
|
|
346
|
-
});
|
|
249
|
+
const params = req.params;
|
|
250
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
251
|
+
res.result = await processEncryptionPublicKey(address, req);
|
|
347
252
|
}
|
|
348
|
-
|
|
349
|
-
* Decrypts a message.
|
|
350
|
-
*
|
|
351
|
-
* @param options - Options bag.
|
|
352
|
-
* @param options.request - The request.
|
|
353
|
-
* @param options.context - The context of the request.
|
|
354
|
-
* @returns The decrypted message.
|
|
355
|
-
*/
|
|
356
|
-
async function decryptMessage({ request, context, }) {
|
|
253
|
+
async function decryptMessage(req, res) {
|
|
357
254
|
if (!processDecryptMessage) {
|
|
358
255
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
359
256
|
}
|
|
360
|
-
if (!
|
|
361
|
-
!Array.isArray(
|
|
362
|
-
!(
|
|
257
|
+
if (!req?.params ||
|
|
258
|
+
!Array.isArray(req.params) ||
|
|
259
|
+
!(req.params.length >= 1)) {
|
|
363
260
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
364
261
|
}
|
|
365
|
-
const params =
|
|
262
|
+
const params = req.params;
|
|
366
263
|
const ciphertext = params[0];
|
|
367
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
264
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
368
265
|
const extraParams = params[2] || {};
|
|
369
266
|
const msgParams = {
|
|
370
267
|
...extraParams,
|
|
371
268
|
from: address,
|
|
372
269
|
data: ciphertext,
|
|
373
270
|
};
|
|
374
|
-
|
|
375
|
-
id: request.id,
|
|
376
|
-
origin: context.assertGet('origin'),
|
|
377
|
-
securityAlertResponse: context.assertGet('securityAlertResponse'),
|
|
378
|
-
});
|
|
271
|
+
res.result = await processDecryptMessage(msgParams, req);
|
|
379
272
|
}
|
|
380
273
|
//
|
|
381
274
|
// utility
|
|
@@ -385,12 +278,12 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
385
278
|
* copy of it.
|
|
386
279
|
*
|
|
387
280
|
* @param address - The address to validate and normalize.
|
|
388
|
-
* @param
|
|
281
|
+
* @param req - The request object.
|
|
389
282
|
* @returns The normalized address, if valid. Otherwise, throws
|
|
390
283
|
* an error
|
|
391
284
|
*/
|
|
392
|
-
async function validateAndNormalizeKeyholder(address,
|
|
393
|
-
return (0, validation_1.validateAndNormalizeKeyholder)(address,
|
|
285
|
+
async function validateAndNormalizeKeyholder(address, req) {
|
|
286
|
+
return (0, validation_1.validateAndNormalizeKeyholder)(address, req, { getAccounts });
|
|
394
287
|
}
|
|
395
288
|
}
|
|
396
289
|
exports.createWalletMiddleware = createWalletMiddleware;
|
package/dist/wallet.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sigUtil from '@metamask/eth-sig-util';\nimport type {\n JsonRpcMiddleware,\n MiddlewareContext,\n MiddlewareParams,\n} from '@metamask/json-rpc-engine/v2';\nimport { createScaffoldMiddleware } from '@metamask/json-rpc-engine/v2';\nimport type { MessageRequest } from '@metamask/message-manager';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { isValidHexAddress } from '@metamask/utils';\nimport type { JsonRpcRequest, Json, Hex } from '@metamask/utils';\n\nimport {\n createWalletRequestExecutionPermissionsHandler,\n type ProcessRequestExecutionPermissionsHook,\n} from './methods/wallet-request-execution-permissions';\nimport {\n type ProcessRevokeExecutionPermissionHook,\n createWalletRevokeExecutionPermissionHandler,\n} from './methods/wallet-revoke-execution-permission';\nimport { stripArrayTypeIfPresent } from './utils/common';\nimport { normalizeTypedMessage, parseTypedMessage } from './utils/normalize';\nimport {\n resemblesAddress,\n validateAndNormalizeKeyholder as validateKeyholder,\n} from './utils/validation';\n\nexport type TransactionParams = {\n from: string;\n};\n\nexport type MessageParams = TransactionParams & {\n data: string;\n signatureMethod?: string;\n};\n\nexport type TypedMessageParams = MessageParams & {\n version: string;\n};\n\nexport type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {\n data: Record<string, unknown>[];\n};\n\nexport type WalletMiddlewareOptions = {\n getAccounts: (origin: string) => Promise<string[]>;\n processDecryptMessage?: (\n msgParams: MessageParams,\n req: MessageRequest,\n ) => Promise<string>;\n processEncryptionPublicKey?: (\n address: string,\n req: MessageRequest,\n ) => Promise<string>;\n processPersonalMessage?: (\n msgParams: MessageParams,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n ) => Promise<string>;\n processTransaction?: (\n txParams: TransactionParams,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n ) => Promise<string>;\n processSignTransaction?: (\n txParams: TransactionParams,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n ) => Promise<string>;\n processTypedMessage?: (\n msgParams: TypedMessageV1Params,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n version: string,\n ) => Promise<string>;\n processTypedMessageV3?: (\n msgParams: TypedMessageParams,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n version: string,\n ) => Promise<string>;\n processTypedMessageV4?: (\n msgParams: TypedMessageParams,\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n version: string,\n ) => Promise<string>;\n processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;\n processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;\n};\n\nexport type WalletMiddlewareKeyValues = {\n networkClientId: string;\n origin: string;\n securityAlertResponse?: Record<string, Json>;\n traceContext?: unknown;\n};\n\nexport type WalletMiddlewareContext =\n MiddlewareContext<WalletMiddlewareKeyValues>;\n\nexport type WalletMiddlewareParams = MiddlewareParams<\n JsonRpcRequest,\n WalletMiddlewareContext\n>;\n\n/**\n * Creates a JSON-RPC middleware that handles \"wallet\"-related JSON-RPC methods.\n * \"Wallet\" may have had a specific meaning at some point in the distant past,\n * but at this point it's just an arbitrary label.\n *\n * @param options - The options for the middleware.\n * @param options.getAccounts - The function to get the accounts for the origin.\n * @param options.processDecryptMessage - The function to process the decrypt message request.\n * @param options.processEncryptionPublicKey - The function to process the encryption public key request.\n * @param options.processPersonalMessage - The function to process the personal message request.\n * @param options.processTransaction - The function to process the transaction request.\n * @param options.processSignTransaction - The function to process the sign transaction request.\n * @param options.processTypedMessage - The function to process the typed message request.\n * @param options.processTypedMessageV3 - The function to process the typed message v3 request.\n * @param options.processTypedMessageV4 - The function to process the typed message v4 request.\n * @param options.processRequestExecutionPermissions - The function to process the request execution permissions request.\n * @param options.processRevokeExecutionPermission - The function to process the revoke execution permission request.\n * @returns A JSON-RPC middleware that handles wallet-related JSON-RPC methods.\n */\nexport function createWalletMiddleware({\n getAccounts,\n processDecryptMessage,\n processEncryptionPublicKey,\n processPersonalMessage,\n processTransaction,\n processSignTransaction,\n processTypedMessage,\n processTypedMessageV3,\n processTypedMessageV4,\n processRequestExecutionPermissions,\n processRevokeExecutionPermission,\n}: WalletMiddlewareOptions): JsonRpcMiddleware<\n JsonRpcRequest,\n Json,\n WalletMiddlewareContext\n> {\n if (!getAccounts) {\n throw new Error('opts.getAccounts is required');\n }\n\n return createScaffoldMiddleware<WalletMiddlewareContext>({\n // account lookups\n eth_accounts: lookupAccounts,\n eth_coinbase: lookupDefaultAccount,\n\n // tx signatures\n eth_sendTransaction: sendTransaction,\n eth_signTransaction: signTransaction,\n\n // message signatures\n eth_signTypedData: signTypedData,\n eth_signTypedData_v3: signTypedDataV3,\n eth_signTypedData_v4: signTypedDataV4,\n personal_sign: personalSign,\n eth_getEncryptionPublicKey: encryptionPublicKey,\n eth_decrypt: decryptMessage,\n personal_ecRecover: personalRecover,\n\n // EIP-7715\n wallet_requestExecutionPermissions:\n createWalletRequestExecutionPermissionsHandler({\n processRequestExecutionPermissions,\n }),\n wallet_revokeExecutionPermission:\n createWalletRevokeExecutionPermissionHandler({\n processRevokeExecutionPermission,\n }),\n });\n\n //\n // account lookups\n //\n\n /**\n * Gets the accounts for the origin.\n *\n * @param options - Options bag.\n * @param options.context - The context of the request.\n * @returns The accounts for the origin.\n */\n async function lookupAccounts({\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n return await getAccounts(context.assertGet('origin'));\n }\n\n /**\n * Gets the default account (i.e. first in the list) for the origin.\n *\n * @param options - Options bag.\n * @param options.context - The context of the request.\n * @returns The default account for the origin.\n */\n async function lookupDefaultAccount({\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n const accounts = await getAccounts(context.assertGet('origin'));\n return accounts[0] || null;\n }\n\n //\n // transaction signatures\n //\n\n /**\n * Sends a transaction.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The transaction hash.\n */\n async function sendTransaction({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processTransaction) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params[0] as TransactionParams | undefined;\n const txParams: TransactionParams = {\n ...params,\n from: await validateAndNormalizeKeyholder(params?.from || '', context),\n };\n return await processTransaction(txParams, request, context);\n }\n\n /**\n * Signs a transaction.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The signed transaction.\n */\n async function signTransaction({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processSignTransaction) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params[0] as TransactionParams | undefined;\n const txParams: TransactionParams = {\n ...params,\n from: await validateAndNormalizeKeyholder(params?.from || '', context),\n };\n return await processSignTransaction(txParams, request, context);\n }\n\n //\n // message signatures\n //\n\n /**\n * Signs a `eth_signTypedData` message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The signed message.\n */\n async function signTypedData({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processTypedMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [\n Record<string, unknown>[],\n string,\n Record<string, string>?,\n ];\n const message = params[0];\n const address = await validateAndNormalizeKeyholder(params[1], context);\n const version = 'V1';\n const extraParams = params[2] || {};\n const msgParams: TypedMessageV1Params = {\n ...extraParams,\n from: address,\n data: message,\n signatureMethod: 'eth_signTypedData',\n version,\n };\n\n return await processTypedMessage(msgParams, request, context, version);\n }\n\n /**\n * Signs a `eth_signTypedData_v3` message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The signed message.\n */\n async function signTypedDataV3({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processTypedMessageV3) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [string, string];\n\n const address = await validateAndNormalizeKeyholder(params[0], context);\n const message = normalizeTypedMessage(params[1]);\n validatePrimaryType(message);\n validateVerifyingContract(message);\n const version = 'V3';\n const msgParams: TypedMessageParams = {\n data: message,\n from: address,\n version,\n signatureMethod: 'eth_signTypedData_v3',\n };\n\n return await processTypedMessageV3(msgParams, request, context, version);\n }\n\n /**\n * Signs a `eth_signTypedData_v4` message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The signed message.\n */\n async function signTypedDataV4({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processTypedMessageV4) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [string, string];\n\n const address = await validateAndNormalizeKeyholder(params[0], context);\n const message = normalizeTypedMessage(params[1]);\n validatePrimaryType(message);\n validateVerifyingContract(message);\n const version = 'V4';\n const msgParams: TypedMessageParams = {\n data: message,\n from: address,\n version,\n signatureMethod: 'eth_signTypedData_v4',\n };\n\n return await processTypedMessageV4(msgParams, request, context, version);\n }\n\n /**\n * Signs a `personal_sign` message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The signed message.\n */\n async function personalSign({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processPersonalMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [string, string, TransactionParams?];\n\n // process normally\n const firstParam = params[0];\n const secondParam = params[1];\n // non-standard \"extraParams\" to be appended to our \"msgParams\" obj\n const extraParams = params[2] || {};\n\n // We initially incorrectly ordered these parameters.\n // To gracefully respect users who adopted this API early,\n // we are currently gracefully recovering from the wrong param order\n // when it is clearly identifiable.\n //\n // That means when the first param is definitely an address,\n // and the second param is definitely not, but is hex.\n let address: string, message: string;\n if (resemblesAddress(firstParam) && !resemblesAddress(secondParam)) {\n address = firstParam;\n message = secondParam;\n } else {\n message = firstParam;\n address = secondParam;\n }\n address = await validateAndNormalizeKeyholder(address, context);\n\n const msgParams: MessageParams = {\n ...extraParams,\n from: address,\n data: message,\n signatureMethod: 'personal_sign',\n };\n\n return await processPersonalMessage(msgParams, request, context);\n }\n\n /**\n * Recovers the signer address from a `personal_sign` message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @returns The recovered signer address.\n */\n async function personalRecover({\n request,\n }: WalletMiddlewareParams): Promise<Json> {\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [string, string];\n const message = params[0];\n const signature = params[1];\n const signerAddress = sigUtil.recoverPersonalSignature({\n data: message,\n signature,\n });\n\n return signerAddress;\n }\n\n /**\n * Gets the encryption public key for an address.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The encryption public key.\n */\n async function encryptionPublicKey({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processEncryptionPublicKey) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = request.params as [string];\n\n const address = await validateAndNormalizeKeyholder(params[0], context);\n\n return await processEncryptionPublicKey(address, {\n id: request.id as string | number,\n origin: context.assertGet('origin'),\n securityAlertResponse: context.assertGet('securityAlertResponse'),\n });\n }\n\n /**\n * Decrypts a message.\n *\n * @param options - Options bag.\n * @param options.request - The request.\n * @param options.context - The context of the request.\n * @returns The decrypted message.\n */\n async function decryptMessage({\n request,\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n if (!processDecryptMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !request.params ||\n !Array.isArray(request.params) ||\n !(request.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n const params = request.params as [string, string, Record<string, Json>?];\n\n const ciphertext: string = params[0];\n const address: string = await validateAndNormalizeKeyholder(\n params[1],\n context,\n );\n const extraParams = params[2] || {};\n const msgParams: MessageParams = {\n ...extraParams,\n from: address,\n data: ciphertext,\n };\n\n return await processDecryptMessage(msgParams, {\n id: request.id as string | number,\n origin: context.assertGet('origin'),\n securityAlertResponse: context.assertGet('securityAlertResponse'),\n });\n }\n\n //\n // utility\n //\n\n /**\n * Validates the keyholder address, and returns a normalized (i.e. lowercase)\n * copy of it.\n *\n * @param address - The address to validate and normalize.\n * @param context - The context of the request.\n * @returns The normalized address, if valid. Otherwise, throws\n * an error\n */\n async function validateAndNormalizeKeyholder(\n address: string,\n context: WalletMiddlewareContext,\n ): Promise<string> {\n return validateKeyholder(address as Hex, context, { getAccounts });\n }\n}\n\n/**\n * Validates primary of typedSignMessage, to ensure that it's type definition is present in message.\n *\n * @param data - The data passed in typedSign request.\n */\nfunction validatePrimaryType(data: string) {\n const { primaryType, types } = parseTypedMessage(data);\n if (!types) {\n throw rpcErrors.invalidInput();\n }\n\n // Primary type can be an array.\n const baseType = stripArrayTypeIfPresent(primaryType);\n\n // Return if the base type is not defined in the types\n const baseTypeDefinitions = types[baseType];\n if (!baseTypeDefinitions) {\n throw rpcErrors.invalidInput();\n }\n}\n\n/**\n * Validates verifyingContract of typedSignMessage.\n *\n * @param data - The data passed in typedSign request.\n * This function allows the verifyingContract to be either:\n * - A valid hex address\n * - The string \"cosmos\" (as it is hard-coded in some Cosmos ecosystem's EVM adapters)\n * - An empty string\n */\nfunction validateVerifyingContract(data: string) {\n const { domain: { verifyingContract } = {} } = parseTypedMessage(data);\n // Explicit check for cosmos here has been added to address this issue\n // https://github.com/MetaMask/eth-json-rpc-middleware/issues/337\n if (\n verifyingContract &&\n (verifyingContract as string) !== 'cosmos' &&\n !isValidHexAddress(verifyingContract)\n ) {\n throw rpcErrors.invalidInput();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sigUtil from '@metamask/eth-sig-util';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n} from '@metamask/json-rpc-engine';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { isValidHexAddress } from '@metamask/utils';\nimport type {\n JsonRpcRequest,\n PendingJsonRpcResponse,\n Json,\n Hex,\n} from '@metamask/utils';\n\nimport {\n type ProcessRequestExecutionPermissionsHook,\n walletRequestExecutionPermissions,\n} from './methods/wallet-request-execution-permissions';\nimport {\n type ProcessRevokeExecutionPermissionHook,\n walletRevokeExecutionPermission,\n} from './methods/wallet-revoke-execution-permission';\nimport type { Block } from './types';\nimport { stripArrayTypeIfPresent } from './utils/common';\nimport { normalizeTypedMessage, parseTypedMessage } from './utils/normalize';\nimport {\n resemblesAddress,\n validateAndNormalizeKeyholder as validateKeyholder,\n} from './utils/validation';\n\n/*\nexport type TransactionParams = {\n [prop: string]: Json;\n from: string;\n}\n*/\n\n/*\nexport type TransactionParams = JsonRpcParams & {\n from: string;\n}\n*/\n\nexport type TransactionParams = {\n from: string;\n};\n\nexport type MessageParams = TransactionParams & {\n data: string;\n signatureMethod?: string;\n};\n\nexport type TypedMessageParams = MessageParams & {\n version: string;\n};\n\nexport type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {\n data: Record<string, unknown>[];\n};\n\nexport type WalletMiddlewareOptions = {\n getAccounts: (req: JsonRpcRequest) => Promise<string[]>;\n processDecryptMessage?: (\n msgParams: MessageParams,\n req: JsonRpcRequest,\n ) => Promise<string>;\n processEncryptionPublicKey?: (\n address: string,\n req: JsonRpcRequest,\n ) => Promise<string>;\n processPersonalMessage?: (\n msgParams: MessageParams,\n req: JsonRpcRequest,\n ) => Promise<string>;\n processTransaction?: (\n txParams: TransactionParams,\n req: JsonRpcRequest,\n ) => Promise<string>;\n processSignTransaction?: (\n txParams: TransactionParams,\n req: JsonRpcRequest,\n ) => Promise<string>;\n processTypedMessage?: (\n msgParams: TypedMessageV1Params,\n req: JsonRpcRequest,\n version: string,\n ) => Promise<string>;\n processTypedMessageV3?: (\n msgParams: TypedMessageParams,\n req: JsonRpcRequest,\n version: string,\n ) => Promise<string>;\n processTypedMessageV4?: (\n msgParams: TypedMessageParams,\n req: JsonRpcRequest,\n version: string,\n ) => Promise<string>;\n processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;\n processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;\n};\n\nexport function createWalletMiddleware({\n getAccounts,\n processDecryptMessage,\n processEncryptionPublicKey,\n processPersonalMessage,\n processTransaction,\n processSignTransaction,\n processTypedMessage,\n processTypedMessageV3,\n processTypedMessageV4,\n processRequestExecutionPermissions,\n processRevokeExecutionPermission,\n}: // }: WalletMiddlewareOptions): JsonRpcMiddleware<string, Block> {\nWalletMiddlewareOptions): JsonRpcMiddleware<any, Block> {\n if (!getAccounts) {\n throw new Error('opts.getAccounts is required');\n }\n\n return createScaffoldMiddleware({\n // account lookups\n eth_accounts: createAsyncMiddleware(lookupAccounts),\n eth_coinbase: createAsyncMiddleware(lookupDefaultAccount),\n\n // tx signatures\n eth_sendTransaction: createAsyncMiddleware(sendTransaction),\n eth_signTransaction: createAsyncMiddleware(signTransaction),\n\n // message signatures\n eth_signTypedData: createAsyncMiddleware(signTypedData),\n eth_signTypedData_v3: createAsyncMiddleware(signTypedDataV3),\n eth_signTypedData_v4: createAsyncMiddleware(signTypedDataV4),\n personal_sign: createAsyncMiddleware(personalSign),\n eth_getEncryptionPublicKey: createAsyncMiddleware(encryptionPublicKey),\n eth_decrypt: createAsyncMiddleware(decryptMessage),\n personal_ecRecover: createAsyncMiddleware(personalRecover),\n\n // EIP-7715\n wallet_requestExecutionPermissions: createAsyncMiddleware(\n async (req, res) =>\n walletRequestExecutionPermissions(req, res, {\n processRequestExecutionPermissions,\n }),\n ),\n wallet_revokeExecutionPermission: createAsyncMiddleware(async (req, res) =>\n walletRevokeExecutionPermission(req, res, {\n processRevokeExecutionPermission,\n }),\n ),\n });\n\n //\n // account lookups\n //\n\n async function lookupAccounts(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n res.result = await getAccounts(req);\n }\n\n async function lookupDefaultAccount(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n const accounts = await getAccounts(req);\n res.result = accounts[0] || null;\n }\n\n //\n // transaction signatures\n //\n\n async function sendTransaction(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processTransaction) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params[0] as TransactionParams | undefined;\n const txParams: TransactionParams = {\n ...params,\n from: await validateAndNormalizeKeyholder(params?.from || '', req),\n };\n res.result = await processTransaction(txParams, req);\n }\n\n async function signTransaction(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processSignTransaction) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params[0] as TransactionParams | undefined;\n const txParams: TransactionParams = {\n ...params,\n from: await validateAndNormalizeKeyholder(params?.from || '', req),\n };\n res.result = await processSignTransaction(txParams, req);\n }\n\n //\n // message signatures\n //\n async function signTypedData(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processTypedMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [\n Record<string, unknown>[],\n string,\n Record<string, string>?,\n ];\n const message = params[0];\n const address = await validateAndNormalizeKeyholder(params[1], req);\n const version = 'V1';\n const extraParams = params[2] || {};\n const msgParams: TypedMessageV1Params = {\n ...extraParams,\n from: address,\n data: message,\n signatureMethod: 'eth_signTypedData',\n version,\n };\n\n res.result = await processTypedMessage(msgParams, req, version);\n }\n\n async function signTypedDataV3(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processTypedMessageV3) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [string, string];\n\n const address = await validateAndNormalizeKeyholder(params[0], req);\n const message = normalizeTypedMessage(params[1]);\n validatePrimaryType(message);\n validateVerifyingContract(message);\n const version = 'V3';\n const msgParams: TypedMessageParams = {\n data: message,\n from: address,\n version,\n signatureMethod: 'eth_signTypedData_v3',\n };\n\n res.result = await processTypedMessageV3(msgParams, req, version);\n }\n\n async function signTypedDataV4(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processTypedMessageV4) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [string, string];\n\n const address = await validateAndNormalizeKeyholder(params[0], req);\n const message = normalizeTypedMessage(params[1]);\n validatePrimaryType(message);\n validateVerifyingContract(message);\n const version = 'V4';\n const msgParams: TypedMessageParams = {\n data: message,\n from: address,\n version,\n signatureMethod: 'eth_signTypedData_v4',\n };\n\n res.result = await processTypedMessageV4(msgParams, req, version);\n }\n\n async function personalSign(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processPersonalMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [string, string, TransactionParams?];\n\n // process normally\n const firstParam = params[0];\n const secondParam = params[1];\n // non-standard \"extraParams\" to be appended to our \"msgParams\" obj\n const extraParams = params[2] || {};\n\n // We initially incorrectly ordered these parameters.\n // To gracefully respect users who adopted this API early,\n // we are currently gracefully recovering from the wrong param order\n // when it is clearly identifiable.\n //\n // That means when the first param is definitely an address,\n // and the second param is definitely not, but is hex.\n let address: string, message: string;\n if (resemblesAddress(firstParam) && !resemblesAddress(secondParam)) {\n let warning = `The eth_personalSign method requires params ordered `;\n warning += `[message, address]. This was previously handled incorrectly, `;\n warning += `and has been corrected automatically. `;\n warning += `Please switch this param order for smooth behavior in the future.`;\n (res as any).warning = warning;\n\n address = firstParam;\n message = secondParam;\n } else {\n message = firstParam;\n address = secondParam;\n }\n address = await validateAndNormalizeKeyholder(address, req);\n\n const msgParams: MessageParams = {\n ...extraParams,\n from: address,\n data: message,\n signatureMethod: 'personal_sign',\n };\n\n res.result = await processPersonalMessage(msgParams, req);\n }\n\n async function personalRecover(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 2)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [string, string];\n const message = params[0];\n const signature = params[1];\n const signerAddress = sigUtil.recoverPersonalSignature({\n data: message,\n signature,\n });\n\n res.result = signerAddress;\n }\n\n async function encryptionPublicKey(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processEncryptionPublicKey) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n\n const params = req.params as [string];\n\n const address = await validateAndNormalizeKeyholder(params[0], req);\n\n res.result = await processEncryptionPublicKey(address, req);\n }\n\n async function decryptMessage(\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n ): Promise<void> {\n if (!processDecryptMessage) {\n throw rpcErrors.methodNotSupported();\n }\n if (\n !req?.params ||\n !Array.isArray(req.params) ||\n !(req.params.length >= 1)\n ) {\n throw rpcErrors.invalidInput();\n }\n const params = req.params as [string, string, Record<string, Json>?];\n\n const ciphertext: string = params[0];\n const address: string = await validateAndNormalizeKeyholder(params[1], req);\n const extraParams = params[2] || {};\n const msgParams: MessageParams = {\n ...extraParams,\n from: address,\n data: ciphertext,\n };\n\n res.result = await processDecryptMessage(msgParams, req);\n }\n\n //\n // utility\n //\n\n /**\n * Validates the keyholder address, and returns a normalized (i.e. lowercase)\n * copy of it.\n *\n * @param address - The address to validate and normalize.\n * @param req - The request object.\n * @returns The normalized address, if valid. Otherwise, throws\n * an error\n */\n async function validateAndNormalizeKeyholder(\n address: string,\n req: JsonRpcRequest,\n ): Promise<string> {\n return validateKeyholder(address as Hex, req, { getAccounts });\n }\n}\n\n/**\n * Validates primary of typedSignMessage, to ensure that it's type definition is present in message.\n *\n * @param data - The data passed in typedSign request.\n */\nfunction validatePrimaryType(data: string) {\n const { primaryType, types } = parseTypedMessage(data);\n if (!types) {\n throw rpcErrors.invalidInput();\n }\n\n // Primary type can be an array.\n const baseType = stripArrayTypeIfPresent(primaryType);\n\n // Return if the base type is not defined in the types\n const baseTypeDefinitions = types[baseType];\n if (!baseTypeDefinitions) {\n throw rpcErrors.invalidInput();\n }\n}\n\n/**\n * Validates verifyingContract of typedSignMessage.\n *\n * @param data - The data passed in typedSign request.\n * This function allows the verifyingContract to be either:\n * - A valid hex address\n * - The string \"cosmos\" (as it is hard-coded in some Cosmos ecosystem's EVM adapters)\n * - An empty string\n */\nfunction validateVerifyingContract(data: string) {\n const { domain: { verifyingContract } = {} } = parseTypedMessage(data);\n // Explicit check for cosmos here has been added to address this issue\n // https://github.com/MetaMask/eth-json-rpc-middleware/issues/337\n if (\n verifyingContract &&\n (verifyingContract as string) !== 'cosmos' &&\n !isValidHexAddress(verifyingContract)\n ) {\n throw rpcErrors.invalidInput();\n }\n}\n"]}
|
package/dist/wallet.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware
|
|
2
|
-
import type {
|
|
3
|
-
import type { JsonRpcRequest, Json } from "@metamask/utils";
|
|
1
|
+
import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { JsonRpcRequest } from "@metamask/utils";
|
|
4
3
|
import { type ProcessRequestExecutionPermissionsHook } from "./methods/wallet-request-execution-permissions.cjs";
|
|
5
4
|
import { type ProcessRevokeExecutionPermissionHook } from "./methods/wallet-revoke-execution-permission.cjs";
|
|
5
|
+
import type { Block } from "./types.cjs";
|
|
6
6
|
export type TransactionParams = {
|
|
7
7
|
from: string;
|
|
8
8
|
};
|
|
@@ -17,44 +17,17 @@ export type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {
|
|
|
17
17
|
data: Record<string, unknown>[];
|
|
18
18
|
};
|
|
19
19
|
export type WalletMiddlewareOptions = {
|
|
20
|
-
getAccounts: (
|
|
21
|
-
processDecryptMessage?: (msgParams: MessageParams, req:
|
|
22
|
-
processEncryptionPublicKey?: (address: string, req:
|
|
23
|
-
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest
|
|
24
|
-
processTransaction?: (txParams: TransactionParams, req: JsonRpcRequest
|
|
25
|
-
processSignTransaction?: (txParams: TransactionParams, req: JsonRpcRequest
|
|
26
|
-
processTypedMessage?: (msgParams: TypedMessageV1Params, req: JsonRpcRequest,
|
|
27
|
-
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JsonRpcRequest,
|
|
28
|
-
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JsonRpcRequest,
|
|
20
|
+
getAccounts: (req: JsonRpcRequest) => Promise<string[]>;
|
|
21
|
+
processDecryptMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
22
|
+
processEncryptionPublicKey?: (address: string, req: JsonRpcRequest) => Promise<string>;
|
|
23
|
+
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
24
|
+
processTransaction?: (txParams: TransactionParams, req: JsonRpcRequest) => Promise<string>;
|
|
25
|
+
processSignTransaction?: (txParams: TransactionParams, req: JsonRpcRequest) => Promise<string>;
|
|
26
|
+
processTypedMessage?: (msgParams: TypedMessageV1Params, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
27
|
+
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
28
|
+
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
29
29
|
processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;
|
|
30
30
|
processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;
|
|
31
31
|
};
|
|
32
|
-
export
|
|
33
|
-
networkClientId: string;
|
|
34
|
-
origin: string;
|
|
35
|
-
securityAlertResponse?: Record<string, Json>;
|
|
36
|
-
traceContext?: unknown;
|
|
37
|
-
};
|
|
38
|
-
export type WalletMiddlewareContext = MiddlewareContext<WalletMiddlewareKeyValues>;
|
|
39
|
-
export type WalletMiddlewareParams = MiddlewareParams<JsonRpcRequest, WalletMiddlewareContext>;
|
|
40
|
-
/**
|
|
41
|
-
* Creates a JSON-RPC middleware that handles "wallet"-related JSON-RPC methods.
|
|
42
|
-
* "Wallet" may have had a specific meaning at some point in the distant past,
|
|
43
|
-
* but at this point it's just an arbitrary label.
|
|
44
|
-
*
|
|
45
|
-
* @param options - The options for the middleware.
|
|
46
|
-
* @param options.getAccounts - The function to get the accounts for the origin.
|
|
47
|
-
* @param options.processDecryptMessage - The function to process the decrypt message request.
|
|
48
|
-
* @param options.processEncryptionPublicKey - The function to process the encryption public key request.
|
|
49
|
-
* @param options.processPersonalMessage - The function to process the personal message request.
|
|
50
|
-
* @param options.processTransaction - The function to process the transaction request.
|
|
51
|
-
* @param options.processSignTransaction - The function to process the sign transaction request.
|
|
52
|
-
* @param options.processTypedMessage - The function to process the typed message request.
|
|
53
|
-
* @param options.processTypedMessageV3 - The function to process the typed message v3 request.
|
|
54
|
-
* @param options.processTypedMessageV4 - The function to process the typed message v4 request.
|
|
55
|
-
* @param options.processRequestExecutionPermissions - The function to process the request execution permissions request.
|
|
56
|
-
* @param options.processRevokeExecutionPermission - The function to process the revoke execution permission request.
|
|
57
|
-
* @returns A JSON-RPC middleware that handles wallet-related JSON-RPC methods.
|
|
58
|
-
*/
|
|
59
|
-
export declare function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }: WalletMiddlewareOptions): JsonRpcMiddleware<JsonRpcRequest, Json, WalletMiddlewareContext>;
|
|
32
|
+
export declare function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }: WalletMiddlewareOptions): JsonRpcMiddleware<any, Block>;
|
|
60
33
|
//# sourceMappingURL=wallet.d.cts.map
|