@metamask-previews/eth-json-rpc-middleware 21.0.0-preview-a345102 → 21.0.0-preview-317c0a9f
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 -7
- package/dist/block-cache.cjs +27 -15
- package/dist/block-cache.cjs.map +1 -1
- package/dist/block-cache.d.cts +3 -5
- package/dist/block-cache.d.cts.map +1 -1
- package/dist/block-cache.d.mts +3 -5
- package/dist/block-cache.d.mts.map +1 -1
- package/dist/block-cache.mjs +27 -15
- 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 -11
- package/dist/methods/wallet-request-execution-permissions.cjs.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.cts +3 -4
- package/dist/methods/wallet-request-execution-permissions.d.cts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.mts +3 -4
- package/dist/methods/wallet-request-execution-permissions.d.mts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.mjs +7 -9
- package/dist/methods/wallet-request-execution-permissions.mjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.cjs +11 -14
- package/dist/methods/wallet-revoke-execution-permission.cjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.cts +5 -9
- package/dist/methods/wallet-revoke-execution-permission.d.cts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.mts +5 -9
- package/dist/methods/wallet-revoke-execution-permission.d.mts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.mjs +8 -11
- package/dist/methods/wallet-revoke-execution-permission.mjs.map +1 -1
- package/dist/providerAsMiddleware.cjs +1 -5
- package/dist/providerAsMiddleware.cjs.map +1 -1
- package/dist/providerAsMiddleware.d.cts +3 -5
- package/dist/providerAsMiddleware.d.cts.map +1 -1
- package/dist/providerAsMiddleware.d.mts +3 -5
- package/dist/providerAsMiddleware.d.mts.map +1 -1
- package/dist/providerAsMiddleware.mjs +0 -3
- package/dist/providerAsMiddleware.mjs.map +1 -1
- package/dist/retryOnEmpty.cjs +16 -9
- 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 +16 -9
- 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/wallet.cjs +89 -84
- package/dist/wallet.cjs.map +1 -1
- package/dist/wallet.d.cts +4 -3
- package/dist/wallet.d.cts.map +1 -1
- package/dist/wallet.d.mts +4 -3
- package/dist/wallet.d.mts.map +1 -1
- package/dist/wallet.mjs +90 -85
- package/dist/wallet.mjs.map +1 -1
- package/package.json +1 -3
package/dist/wallet.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as sigUtil from "@metamask/eth-sig-util";
|
|
2
|
-
import { createScaffoldMiddleware } from "@metamask/json-rpc-engine
|
|
2
|
+
import { createAsyncMiddleware, createScaffoldMiddleware } from "@metamask/json-rpc-engine";
|
|
3
3
|
import { rpcErrors } from "@metamask/rpc-errors";
|
|
4
4
|
import { isValidHexAddress } from "@metamask/utils";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { walletRequestExecutionPermissions } from "./methods/wallet-request-execution-permissions.mjs";
|
|
6
|
+
import { walletRevokeExecutionPermission } from "./methods/wallet-revoke-execution-permission.mjs";
|
|
7
7
|
import { stripArrayTypeIfPresent } from "./utils/common.mjs";
|
|
8
8
|
import { normalizeTypedMessage, parseTypedMessage } from "./utils/normalize.mjs";
|
|
9
9
|
import { resemblesAddress, validateAndNormalizeKeyholder as validateKeyholder } from "./utils/validation.mjs";
|
|
@@ -13,87 +13,87 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
13
13
|
}
|
|
14
14
|
return createScaffoldMiddleware({
|
|
15
15
|
// account lookups
|
|
16
|
-
eth_accounts: lookupAccounts,
|
|
17
|
-
eth_coinbase: lookupDefaultAccount,
|
|
16
|
+
eth_accounts: createAsyncMiddleware(lookupAccounts),
|
|
17
|
+
eth_coinbase: createAsyncMiddleware(lookupDefaultAccount),
|
|
18
18
|
// tx signatures
|
|
19
|
-
eth_sendTransaction: sendTransaction,
|
|
20
|
-
eth_signTransaction: signTransaction,
|
|
19
|
+
eth_sendTransaction: createAsyncMiddleware(sendTransaction),
|
|
20
|
+
eth_signTransaction: createAsyncMiddleware(signTransaction),
|
|
21
21
|
// message signatures
|
|
22
|
-
eth_signTypedData: signTypedData,
|
|
23
|
-
eth_signTypedData_v3: signTypedDataV3,
|
|
24
|
-
eth_signTypedData_v4: signTypedDataV4,
|
|
25
|
-
personal_sign: personalSign,
|
|
26
|
-
eth_getEncryptionPublicKey: encryptionPublicKey,
|
|
27
|
-
eth_decrypt: decryptMessage,
|
|
28
|
-
personal_ecRecover: personalRecover,
|
|
22
|
+
eth_signTypedData: createAsyncMiddleware(signTypedData),
|
|
23
|
+
eth_signTypedData_v3: createAsyncMiddleware(signTypedDataV3),
|
|
24
|
+
eth_signTypedData_v4: createAsyncMiddleware(signTypedDataV4),
|
|
25
|
+
personal_sign: createAsyncMiddleware(personalSign),
|
|
26
|
+
eth_getEncryptionPublicKey: createAsyncMiddleware(encryptionPublicKey),
|
|
27
|
+
eth_decrypt: createAsyncMiddleware(decryptMessage),
|
|
28
|
+
personal_ecRecover: createAsyncMiddleware(personalRecover),
|
|
29
29
|
// EIP-7715
|
|
30
|
-
wallet_requestExecutionPermissions:
|
|
30
|
+
wallet_requestExecutionPermissions: createAsyncMiddleware(async (req, res) => walletRequestExecutionPermissions(req, res, {
|
|
31
31
|
processRequestExecutionPermissions,
|
|
32
|
-
}),
|
|
33
|
-
wallet_revokeExecutionPermission:
|
|
32
|
+
})),
|
|
33
|
+
wallet_revokeExecutionPermission: createAsyncMiddleware(async (req, res) => walletRevokeExecutionPermission(req, res, {
|
|
34
34
|
processRevokeExecutionPermission,
|
|
35
|
-
}),
|
|
35
|
+
})),
|
|
36
36
|
});
|
|
37
37
|
//
|
|
38
38
|
// account lookups
|
|
39
39
|
//
|
|
40
|
-
async function lookupAccounts(
|
|
41
|
-
|
|
40
|
+
async function lookupAccounts(req, res) {
|
|
41
|
+
res.result = await getAccounts(req);
|
|
42
42
|
}
|
|
43
|
-
async function lookupDefaultAccount(
|
|
44
|
-
const accounts = await getAccounts(
|
|
45
|
-
|
|
43
|
+
async function lookupDefaultAccount(req, res) {
|
|
44
|
+
const accounts = await getAccounts(req);
|
|
45
|
+
res.result = accounts[0] || null;
|
|
46
46
|
}
|
|
47
47
|
//
|
|
48
48
|
// transaction signatures
|
|
49
49
|
//
|
|
50
|
-
async function sendTransaction(
|
|
50
|
+
async function sendTransaction(req, res) {
|
|
51
51
|
if (!processTransaction) {
|
|
52
52
|
throw rpcErrors.methodNotSupported();
|
|
53
53
|
}
|
|
54
|
-
if (!
|
|
55
|
-
!Array.isArray(
|
|
56
|
-
!(
|
|
54
|
+
if (!req.params ||
|
|
55
|
+
!Array.isArray(req.params) ||
|
|
56
|
+
!(req.params.length >= 1)) {
|
|
57
57
|
throw rpcErrors.invalidInput();
|
|
58
58
|
}
|
|
59
|
-
const params =
|
|
59
|
+
const params = req.params[0];
|
|
60
60
|
const txParams = {
|
|
61
61
|
...params,
|
|
62
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
62
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
63
63
|
};
|
|
64
|
-
|
|
64
|
+
res.result = await processTransaction(txParams, req);
|
|
65
65
|
}
|
|
66
|
-
async function signTransaction(
|
|
66
|
+
async function signTransaction(req, res) {
|
|
67
67
|
if (!processSignTransaction) {
|
|
68
68
|
throw rpcErrors.methodNotSupported();
|
|
69
69
|
}
|
|
70
|
-
if (!
|
|
71
|
-
!Array.isArray(
|
|
72
|
-
!(
|
|
70
|
+
if (!req.params ||
|
|
71
|
+
!Array.isArray(req.params) ||
|
|
72
|
+
!(req.params.length >= 1)) {
|
|
73
73
|
throw rpcErrors.invalidInput();
|
|
74
74
|
}
|
|
75
|
-
const params =
|
|
75
|
+
const params = req.params[0];
|
|
76
76
|
const txParams = {
|
|
77
77
|
...params,
|
|
78
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
78
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
79
79
|
};
|
|
80
|
-
|
|
80
|
+
res.result = await processSignTransaction(txParams, req);
|
|
81
81
|
}
|
|
82
82
|
//
|
|
83
83
|
// message signatures
|
|
84
84
|
//
|
|
85
|
-
async function signTypedData(
|
|
85
|
+
async function signTypedData(req, res) {
|
|
86
86
|
if (!processTypedMessage) {
|
|
87
87
|
throw rpcErrors.methodNotSupported();
|
|
88
88
|
}
|
|
89
|
-
if (!
|
|
90
|
-
!Array.isArray(
|
|
91
|
-
!(
|
|
89
|
+
if (!req?.params ||
|
|
90
|
+
!Array.isArray(req.params) ||
|
|
91
|
+
!(req.params.length >= 2)) {
|
|
92
92
|
throw rpcErrors.invalidInput();
|
|
93
93
|
}
|
|
94
|
-
const params =
|
|
94
|
+
const params = req.params;
|
|
95
95
|
const message = params[0];
|
|
96
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
96
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
97
97
|
const version = 'V1';
|
|
98
98
|
const extraParams = params[2] || {};
|
|
99
99
|
const msgParams = {
|
|
@@ -103,19 +103,19 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
103
103
|
signatureMethod: 'eth_signTypedData',
|
|
104
104
|
version,
|
|
105
105
|
};
|
|
106
|
-
|
|
106
|
+
res.result = await processTypedMessage(msgParams, req, version);
|
|
107
107
|
}
|
|
108
|
-
async function signTypedDataV3(
|
|
108
|
+
async function signTypedDataV3(req, res) {
|
|
109
109
|
if (!processTypedMessageV3) {
|
|
110
110
|
throw rpcErrors.methodNotSupported();
|
|
111
111
|
}
|
|
112
|
-
if (!
|
|
113
|
-
!Array.isArray(
|
|
114
|
-
!(
|
|
112
|
+
if (!req?.params ||
|
|
113
|
+
!Array.isArray(req.params) ||
|
|
114
|
+
!(req.params.length >= 2)) {
|
|
115
115
|
throw rpcErrors.invalidInput();
|
|
116
116
|
}
|
|
117
|
-
const params =
|
|
118
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
117
|
+
const params = req.params;
|
|
118
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
119
119
|
const message = normalizeTypedMessage(params[1]);
|
|
120
120
|
validatePrimaryType(message);
|
|
121
121
|
validateVerifyingContract(message);
|
|
@@ -126,19 +126,19 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
126
126
|
version,
|
|
127
127
|
signatureMethod: 'eth_signTypedData_v3',
|
|
128
128
|
};
|
|
129
|
-
|
|
129
|
+
res.result = await processTypedMessageV3(msgParams, req, version);
|
|
130
130
|
}
|
|
131
|
-
async function signTypedDataV4(
|
|
131
|
+
async function signTypedDataV4(req, res) {
|
|
132
132
|
if (!processTypedMessageV4) {
|
|
133
133
|
throw rpcErrors.methodNotSupported();
|
|
134
134
|
}
|
|
135
|
-
if (!
|
|
136
|
-
!Array.isArray(
|
|
137
|
-
!(
|
|
135
|
+
if (!req?.params ||
|
|
136
|
+
!Array.isArray(req.params) ||
|
|
137
|
+
!(req.params.length >= 2)) {
|
|
138
138
|
throw rpcErrors.invalidInput();
|
|
139
139
|
}
|
|
140
|
-
const params =
|
|
141
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
140
|
+
const params = req.params;
|
|
141
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
142
142
|
const message = normalizeTypedMessage(params[1]);
|
|
143
143
|
validatePrimaryType(message);
|
|
144
144
|
validateVerifyingContract(message);
|
|
@@ -149,18 +149,18 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
149
149
|
version,
|
|
150
150
|
signatureMethod: 'eth_signTypedData_v4',
|
|
151
151
|
};
|
|
152
|
-
|
|
152
|
+
res.result = await processTypedMessageV4(msgParams, req, version);
|
|
153
153
|
}
|
|
154
|
-
async function personalSign(
|
|
154
|
+
async function personalSign(req, res) {
|
|
155
155
|
if (!processPersonalMessage) {
|
|
156
156
|
throw rpcErrors.methodNotSupported();
|
|
157
157
|
}
|
|
158
|
-
if (!
|
|
159
|
-
!Array.isArray(
|
|
160
|
-
!(
|
|
158
|
+
if (!req?.params ||
|
|
159
|
+
!Array.isArray(req.params) ||
|
|
160
|
+
!(req.params.length >= 2)) {
|
|
161
161
|
throw rpcErrors.invalidInput();
|
|
162
162
|
}
|
|
163
|
-
const params =
|
|
163
|
+
const params = req.params;
|
|
164
164
|
// process normally
|
|
165
165
|
const firstParam = params[0];
|
|
166
166
|
const secondParam = params[1];
|
|
@@ -175,6 +175,11 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
175
175
|
// and the second param is definitely not, but is hex.
|
|
176
176
|
let address, message;
|
|
177
177
|
if (resemblesAddress(firstParam) && !resemblesAddress(secondParam)) {
|
|
178
|
+
let warning = `The eth_personalSign method requires params ordered `;
|
|
179
|
+
warning += `[message, address]. This was previously handled incorrectly, `;
|
|
180
|
+
warning += `and has been corrected automatically. `;
|
|
181
|
+
warning += `Please switch this param order for smooth behavior in the future.`;
|
|
182
|
+
res.warning = warning;
|
|
178
183
|
address = firstParam;
|
|
179
184
|
message = secondParam;
|
|
180
185
|
}
|
|
@@ -182,62 +187,62 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
182
187
|
message = firstParam;
|
|
183
188
|
address = secondParam;
|
|
184
189
|
}
|
|
185
|
-
address = await validateAndNormalizeKeyholder(address,
|
|
190
|
+
address = await validateAndNormalizeKeyholder(address, req);
|
|
186
191
|
const msgParams = {
|
|
187
192
|
...extraParams,
|
|
188
193
|
from: address,
|
|
189
194
|
data: message,
|
|
190
195
|
signatureMethod: 'personal_sign',
|
|
191
196
|
};
|
|
192
|
-
|
|
197
|
+
res.result = await processPersonalMessage(msgParams, req);
|
|
193
198
|
}
|
|
194
|
-
async function personalRecover(
|
|
195
|
-
if (!
|
|
196
|
-
!Array.isArray(
|
|
197
|
-
!(
|
|
199
|
+
async function personalRecover(req, res) {
|
|
200
|
+
if (!req?.params ||
|
|
201
|
+
!Array.isArray(req.params) ||
|
|
202
|
+
!(req.params.length >= 2)) {
|
|
198
203
|
throw rpcErrors.invalidInput();
|
|
199
204
|
}
|
|
200
|
-
const params =
|
|
205
|
+
const params = req.params;
|
|
201
206
|
const message = params[0];
|
|
202
207
|
const signature = params[1];
|
|
203
208
|
const signerAddress = sigUtil.recoverPersonalSignature({
|
|
204
209
|
data: message,
|
|
205
210
|
signature,
|
|
206
211
|
});
|
|
207
|
-
|
|
212
|
+
res.result = signerAddress;
|
|
208
213
|
}
|
|
209
|
-
async function encryptionPublicKey(
|
|
214
|
+
async function encryptionPublicKey(req, res) {
|
|
210
215
|
if (!processEncryptionPublicKey) {
|
|
211
216
|
throw rpcErrors.methodNotSupported();
|
|
212
217
|
}
|
|
213
|
-
if (!
|
|
214
|
-
!Array.isArray(
|
|
215
|
-
!(
|
|
218
|
+
if (!req?.params ||
|
|
219
|
+
!Array.isArray(req.params) ||
|
|
220
|
+
!(req.params.length >= 1)) {
|
|
216
221
|
throw rpcErrors.invalidInput();
|
|
217
222
|
}
|
|
218
|
-
const params =
|
|
219
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
220
|
-
|
|
223
|
+
const params = req.params;
|
|
224
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
225
|
+
res.result = await processEncryptionPublicKey(address, req);
|
|
221
226
|
}
|
|
222
|
-
async function decryptMessage(
|
|
227
|
+
async function decryptMessage(req, res) {
|
|
223
228
|
if (!processDecryptMessage) {
|
|
224
229
|
throw rpcErrors.methodNotSupported();
|
|
225
230
|
}
|
|
226
|
-
if (!
|
|
227
|
-
!Array.isArray(
|
|
228
|
-
!(
|
|
231
|
+
if (!req?.params ||
|
|
232
|
+
!Array.isArray(req.params) ||
|
|
233
|
+
!(req.params.length >= 1)) {
|
|
229
234
|
throw rpcErrors.invalidInput();
|
|
230
235
|
}
|
|
231
|
-
const params =
|
|
236
|
+
const params = req.params;
|
|
232
237
|
const ciphertext = params[0];
|
|
233
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
238
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
234
239
|
const extraParams = params[2] || {};
|
|
235
240
|
const msgParams = {
|
|
236
241
|
...extraParams,
|
|
237
242
|
from: address,
|
|
238
243
|
data: ciphertext,
|
|
239
244
|
};
|
|
240
|
-
|
|
245
|
+
res.result = await processDecryptMessage(msgParams, req);
|
|
241
246
|
}
|
|
242
247
|
//
|
|
243
248
|
// utility
|
package/dist/wallet.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.mjs","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 MiddlewareParams,\n} from '@metamask/json-rpc-engine/v2';\nimport { createScaffoldMiddleware } from '@metamask/json-rpc-engine/v2';\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: (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<JsonRpcRequest, Json> {\n if (!getAccounts) {\n throw new Error('opts.getAccounts is required');\n }\n\n return createScaffoldMiddleware({\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 async function lookupAccounts({\n request,\n }: MiddlewareParams<JsonRpcRequest>): Promise<Json> {\n return await getAccounts(request);\n }\n\n async function lookupDefaultAccount({\n request,\n }: MiddlewareParams<JsonRpcRequest>): Promise<Json> {\n const accounts = await getAccounts(request);\n return accounts[0] || null;\n }\n\n //\n // transaction signatures\n //\n\n async function sendTransaction({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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 || '', request),\n };\n return await processTransaction(txParams, request);\n }\n\n async function signTransaction({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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 || '', request),\n };\n return await processSignTransaction(txParams, request);\n }\n\n //\n // message signatures\n //\n\n async function signTypedData({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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], request);\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, version);\n }\n\n async function signTypedDataV3({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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], request);\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, version);\n }\n\n async function signTypedDataV4({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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], request);\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, version);\n }\n\n async function personalSign({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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, request);\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);\n }\n\n async function personalRecover({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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 async function encryptionPublicKey({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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], request);\n\n return await processEncryptionPublicKey(address, request);\n }\n\n async function decryptMessage({\n request,\n }: MiddlewareParams<JsonRpcRequest>): 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 request,\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, request);\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"]}
|
|
1
|
+
{"version":3,"file":"wallet.mjs","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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/eth-json-rpc-middleware",
|
|
3
|
-
"version": "21.0.0-preview-
|
|
3
|
+
"version": "21.0.0-preview-317c0a9f",
|
|
4
4
|
"description": "Ethereum-related json-rpc-engine middleware",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -37,7 +37,6 @@
|
|
|
37
37
|
],
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
|
|
40
|
-
"build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
|
|
41
40
|
"build:docs": "typedoc",
|
|
42
41
|
"changelog:update": "../../scripts/update-changelog.sh @metamask/eth-json-rpc-middleware --tag-prefix-before-package-rename eth-json-rpc-middleware@ --version-before-package-rename 6.1.0",
|
|
43
42
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/eth-json-rpc-middleware --tag-prefix-before-package-rename eth-json-rpc-middleware@ --version-before-package-rename 6.1.0",
|
|
@@ -70,7 +69,6 @@
|
|
|
70
69
|
"@metamask/auto-changelog": "^3.4.4",
|
|
71
70
|
"@metamask/error-reporting-service": "^3.0.0",
|
|
72
71
|
"@metamask/network-controller": "^25.0.0",
|
|
73
|
-
"@ts-bridge/cli": "^0.6.4",
|
|
74
72
|
"@types/jest": "^27.4.1",
|
|
75
73
|
"@types/pify": "^5.0.2",
|
|
76
74
|
"deepmerge": "^4.2.2",
|