@metamask-previews/eth-json-rpc-middleware 21.0.0-preview-c96ff8f → 21.0.0-preview-6b15e01
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 +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 -5
- package/dist/methods/wallet-request-execution-permissions.d.cts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.mts +3 -5
- 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 -10
- package/dist/methods/wallet-revoke-execution-permission.d.cts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.mts +5 -10
- 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 +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/validation.cjs +2 -2
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +3 -6
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +3 -6
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +2 -2
- package/dist/utils/validation.mjs.map +1 -1
- package/dist/wallet.cjs +92 -87
- package/dist/wallet.cjs.map +1 -1
- package/dist/wallet.d.cts +5 -8
- package/dist/wallet.d.cts.map +1 -1
- package/dist/wallet.d.mts +5 -8
- package/dist/wallet.d.mts.map +1 -1
- package/dist/wallet.mjs +93 -88
- package/dist/wallet.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAe,8BAA8B;AAEjE,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,wBAAwB;AAE3D,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,cAAc,EACnB,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC3E,OAAO,CAAC,GAAG,CAAC,CA0Bd;AAED,wBAAgB,cAAc,CAAC,UAAU,EACvC,KAAK,EAAE,OAAO,GAAG,UAAU,EAC3B,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,GACzB,OAAO,CAAC,KAAK,IAAI,UAAU,CAQ7B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGrD"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
|
|
2
2
|
import { validate } from "@metamask/superstruct";
|
|
3
|
-
export async function validateAndNormalizeKeyholder(address,
|
|
3
|
+
export async function validateAndNormalizeKeyholder(address, req, { getAccounts }) {
|
|
4
4
|
if (typeof address === 'string' &&
|
|
5
5
|
address.length > 0 &&
|
|
6
6
|
resemblesAddress(address)) {
|
|
7
7
|
// Ensure that an "unauthorized" error is thrown if the requester
|
|
8
8
|
// does not have the `eth_accounts` permission.
|
|
9
|
-
const accounts = await getAccounts(
|
|
9
|
+
const accounts = await getAccounts(req);
|
|
10
10
|
const normalizedAccounts = accounts.map((_address) => _address.toLowerCase());
|
|
11
11
|
const normalizedAddress = address.toLowerCase();
|
|
12
12
|
if (normalizedAccounts.includes(normalizedAddress)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAEjE,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AAGjD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAY,EACZ,GAAmB,EACnB,EAAE,WAAW,EAA+D;IAE5E,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,gBAAgB,CAAC,OAAO,CAAC,EACzB;QACA,iEAAiE;QACjE,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QAExC,MAAM,kBAAkB,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC7D,QAAQ,CAAC,WAAW,EAAE,CACvB,CAAC;QAEF,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAS,CAAC;QAEvD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;YAClD,OAAO,iBAAiB,CAAC;SAC1B;QAED,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;KACrC;IAED,MAAM,SAAS,CAAC,aAAa,CAAC;QAC5B,OAAO,EAAE,uDAAuD;KACjE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAA2B,EAC3B,MAA0B;IAE1B,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAExC,IAAI,KAAK,EAAE;QACT,MAAM,SAAS,CAAC,aAAa,CAC3B,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAC/C,CAAC;KACH;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,0BAA0B;IAC1B,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAkB,EAAE,OAAe;IAChE,OAAO,GAAG,OAAO,OAAO,KAAK;SAC1B,QAAQ,EAAE;SACV,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CACxE;SACA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClB,CAAC","sourcesContent":["import { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type { Struct, StructError } from '@metamask/superstruct';\nimport { validate } from '@metamask/superstruct';\nimport type { Hex, JsonRpcRequest } from '@metamask/utils';\n\nexport async function validateAndNormalizeKeyholder(\n address: Hex,\n req: JsonRpcRequest,\n { getAccounts }: { getAccounts: (req: JsonRpcRequest) => Promise<string[]> },\n): Promise<Hex> {\n if (\n typeof address === 'string' &&\n address.length > 0 &&\n resemblesAddress(address)\n ) {\n // Ensure that an \"unauthorized\" error is thrown if the requester\n // does not have the `eth_accounts` permission.\n const accounts = await getAccounts(req);\n\n const normalizedAccounts: string[] = accounts.map((_address) =>\n _address.toLowerCase(),\n );\n\n const normalizedAddress = address.toLowerCase() as Hex;\n\n if (normalizedAccounts.includes(normalizedAddress)) {\n return normalizedAddress;\n }\n\n throw providerErrors.unauthorized();\n }\n\n throw rpcErrors.invalidParams({\n message: `Invalid parameters: must provide an Ethereum address.`,\n });\n}\n\nexport function validateParams<ParamsType>(\n value: unknown | ParamsType,\n struct: Struct<ParamsType>,\n): asserts value is ParamsType {\n const [error] = validate(value, struct);\n\n if (error) {\n throw rpcErrors.invalidParams(\n formatValidationError(error, `Invalid params`),\n );\n }\n}\n\nexport function resemblesAddress(str: string): boolean {\n // hex prefix 2 + 20 bytes\n return str.length === 2 + 20 * 2;\n}\n\nfunction formatValidationError(error: StructError, message: string): string {\n return `${message}\\n\\n${error\n .failures()\n .map(\n (f) => `${f.path.join(' > ')}${f.path.length ? ' - ' : ''}${f.message}`,\n )\n .join('\\n')}`;\n}\n"]}
|
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");
|
|
@@ -37,89 +37,89 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
37
37
|
if (!getAccounts) {
|
|
38
38
|
throw new Error('opts.getAccounts is required');
|
|
39
39
|
}
|
|
40
|
-
return (0,
|
|
40
|
+
return (0, json_rpc_engine_1.createScaffoldMiddleware)({
|
|
41
41
|
// account lookups
|
|
42
|
-
eth_accounts: lookupAccounts,
|
|
43
|
-
eth_coinbase: lookupDefaultAccount,
|
|
42
|
+
eth_accounts: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupAccounts),
|
|
43
|
+
eth_coinbase: (0, json_rpc_engine_1.createAsyncMiddleware)(lookupDefaultAccount),
|
|
44
44
|
// tx signatures
|
|
45
|
-
eth_sendTransaction: sendTransaction,
|
|
46
|
-
eth_signTransaction: signTransaction,
|
|
45
|
+
eth_sendTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(sendTransaction),
|
|
46
|
+
eth_signTransaction: (0, json_rpc_engine_1.createAsyncMiddleware)(signTransaction),
|
|
47
47
|
// message signatures
|
|
48
|
-
eth_signTypedData: signTypedData,
|
|
49
|
-
eth_signTypedData_v3: signTypedDataV3,
|
|
50
|
-
eth_signTypedData_v4: signTypedDataV4,
|
|
51
|
-
personal_sign: personalSign,
|
|
52
|
-
eth_getEncryptionPublicKey: encryptionPublicKey,
|
|
53
|
-
eth_decrypt: decryptMessage,
|
|
54
|
-
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),
|
|
55
55
|
// EIP-7715
|
|
56
|
-
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, {
|
|
57
57
|
processRequestExecutionPermissions,
|
|
58
|
-
}),
|
|
59
|
-
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, {
|
|
60
60
|
processRevokeExecutionPermission,
|
|
61
|
-
}),
|
|
61
|
+
})),
|
|
62
62
|
});
|
|
63
63
|
//
|
|
64
64
|
// account lookups
|
|
65
65
|
//
|
|
66
|
-
async function lookupAccounts(
|
|
67
|
-
|
|
66
|
+
async function lookupAccounts(req, res) {
|
|
67
|
+
res.result = await getAccounts(req);
|
|
68
68
|
}
|
|
69
|
-
async function lookupDefaultAccount(
|
|
70
|
-
const accounts = await getAccounts(
|
|
71
|
-
|
|
69
|
+
async function lookupDefaultAccount(req, res) {
|
|
70
|
+
const accounts = await getAccounts(req);
|
|
71
|
+
res.result = accounts[0] || null;
|
|
72
72
|
}
|
|
73
73
|
//
|
|
74
74
|
// transaction signatures
|
|
75
75
|
//
|
|
76
|
-
async function sendTransaction(
|
|
76
|
+
async function sendTransaction(req, res) {
|
|
77
77
|
if (!processTransaction) {
|
|
78
78
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
79
79
|
}
|
|
80
|
-
if (!
|
|
81
|
-
!Array.isArray(
|
|
82
|
-
!(
|
|
80
|
+
if (!req.params ||
|
|
81
|
+
!Array.isArray(req.params) ||
|
|
82
|
+
!(req.params.length >= 1)) {
|
|
83
83
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
84
84
|
}
|
|
85
|
-
const params =
|
|
85
|
+
const params = req.params[0];
|
|
86
86
|
const txParams = {
|
|
87
87
|
...params,
|
|
88
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
88
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
89
89
|
};
|
|
90
|
-
|
|
90
|
+
res.result = await processTransaction(txParams, req);
|
|
91
91
|
}
|
|
92
|
-
async function signTransaction(
|
|
92
|
+
async function signTransaction(req, res) {
|
|
93
93
|
if (!processSignTransaction) {
|
|
94
94
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
95
95
|
}
|
|
96
|
-
if (!
|
|
97
|
-
!Array.isArray(
|
|
98
|
-
!(
|
|
96
|
+
if (!req.params ||
|
|
97
|
+
!Array.isArray(req.params) ||
|
|
98
|
+
!(req.params.length >= 1)) {
|
|
99
99
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
100
100
|
}
|
|
101
|
-
const params =
|
|
101
|
+
const params = req.params[0];
|
|
102
102
|
const txParams = {
|
|
103
103
|
...params,
|
|
104
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
104
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
105
105
|
};
|
|
106
|
-
|
|
106
|
+
res.result = await processSignTransaction(txParams, req);
|
|
107
107
|
}
|
|
108
108
|
//
|
|
109
109
|
// message signatures
|
|
110
110
|
//
|
|
111
|
-
async function signTypedData(
|
|
111
|
+
async function signTypedData(req, res) {
|
|
112
112
|
if (!processTypedMessage) {
|
|
113
113
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
114
114
|
}
|
|
115
|
-
if (!
|
|
116
|
-
!Array.isArray(
|
|
117
|
-
!(
|
|
115
|
+
if (!req?.params ||
|
|
116
|
+
!Array.isArray(req.params) ||
|
|
117
|
+
!(req.params.length >= 2)) {
|
|
118
118
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
119
119
|
}
|
|
120
|
-
const params =
|
|
120
|
+
const params = req.params;
|
|
121
121
|
const message = params[0];
|
|
122
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
122
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
123
123
|
const version = 'V1';
|
|
124
124
|
const extraParams = params[2] || {};
|
|
125
125
|
const msgParams = {
|
|
@@ -129,19 +129,19 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
129
129
|
signatureMethod: 'eth_signTypedData',
|
|
130
130
|
version,
|
|
131
131
|
};
|
|
132
|
-
|
|
132
|
+
res.result = await processTypedMessage(msgParams, req, version);
|
|
133
133
|
}
|
|
134
|
-
async function signTypedDataV3(
|
|
134
|
+
async function signTypedDataV3(req, res) {
|
|
135
135
|
if (!processTypedMessageV3) {
|
|
136
136
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
137
137
|
}
|
|
138
|
-
if (!
|
|
139
|
-
!Array.isArray(
|
|
140
|
-
!(
|
|
138
|
+
if (!req?.params ||
|
|
139
|
+
!Array.isArray(req.params) ||
|
|
140
|
+
!(req.params.length >= 2)) {
|
|
141
141
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
142
142
|
}
|
|
143
|
-
const params =
|
|
144
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
143
|
+
const params = req.params;
|
|
144
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
145
145
|
const message = (0, normalize_1.normalizeTypedMessage)(params[1]);
|
|
146
146
|
validatePrimaryType(message);
|
|
147
147
|
validateVerifyingContract(message);
|
|
@@ -152,19 +152,19 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
152
152
|
version,
|
|
153
153
|
signatureMethod: 'eth_signTypedData_v3',
|
|
154
154
|
};
|
|
155
|
-
|
|
155
|
+
res.result = await processTypedMessageV3(msgParams, req, version);
|
|
156
156
|
}
|
|
157
|
-
async function signTypedDataV4(
|
|
157
|
+
async function signTypedDataV4(req, res) {
|
|
158
158
|
if (!processTypedMessageV4) {
|
|
159
159
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
160
160
|
}
|
|
161
|
-
if (!
|
|
162
|
-
!Array.isArray(
|
|
163
|
-
!(
|
|
161
|
+
if (!req?.params ||
|
|
162
|
+
!Array.isArray(req.params) ||
|
|
163
|
+
!(req.params.length >= 2)) {
|
|
164
164
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
165
165
|
}
|
|
166
|
-
const params =
|
|
167
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
166
|
+
const params = req.params;
|
|
167
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
168
168
|
const message = (0, normalize_1.normalizeTypedMessage)(params[1]);
|
|
169
169
|
validatePrimaryType(message);
|
|
170
170
|
validateVerifyingContract(message);
|
|
@@ -175,18 +175,18 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
175
175
|
version,
|
|
176
176
|
signatureMethod: 'eth_signTypedData_v4',
|
|
177
177
|
};
|
|
178
|
-
|
|
178
|
+
res.result = await processTypedMessageV4(msgParams, req, version);
|
|
179
179
|
}
|
|
180
|
-
async function personalSign(
|
|
180
|
+
async function personalSign(req, res) {
|
|
181
181
|
if (!processPersonalMessage) {
|
|
182
182
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
183
183
|
}
|
|
184
|
-
if (!
|
|
185
|
-
!Array.isArray(
|
|
186
|
-
!(
|
|
184
|
+
if (!req?.params ||
|
|
185
|
+
!Array.isArray(req.params) ||
|
|
186
|
+
!(req.params.length >= 2)) {
|
|
187
187
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
188
188
|
}
|
|
189
|
-
const params =
|
|
189
|
+
const params = req.params;
|
|
190
190
|
// process normally
|
|
191
191
|
const firstParam = params[0];
|
|
192
192
|
const secondParam = params[1];
|
|
@@ -201,6 +201,11 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
201
201
|
// and the second param is definitely not, but is hex.
|
|
202
202
|
let address, message;
|
|
203
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;
|
|
204
209
|
address = firstParam;
|
|
205
210
|
message = secondParam;
|
|
206
211
|
}
|
|
@@ -208,62 +213,62 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
208
213
|
message = firstParam;
|
|
209
214
|
address = secondParam;
|
|
210
215
|
}
|
|
211
|
-
address = await validateAndNormalizeKeyholder(address,
|
|
216
|
+
address = await validateAndNormalizeKeyholder(address, req);
|
|
212
217
|
const msgParams = {
|
|
213
218
|
...extraParams,
|
|
214
219
|
from: address,
|
|
215
220
|
data: message,
|
|
216
221
|
signatureMethod: 'personal_sign',
|
|
217
222
|
};
|
|
218
|
-
|
|
223
|
+
res.result = await processPersonalMessage(msgParams, req);
|
|
219
224
|
}
|
|
220
|
-
async function personalRecover(
|
|
221
|
-
if (!
|
|
222
|
-
!Array.isArray(
|
|
223
|
-
!(
|
|
225
|
+
async function personalRecover(req, res) {
|
|
226
|
+
if (!req?.params ||
|
|
227
|
+
!Array.isArray(req.params) ||
|
|
228
|
+
!(req.params.length >= 2)) {
|
|
224
229
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
225
230
|
}
|
|
226
|
-
const params =
|
|
231
|
+
const params = req.params;
|
|
227
232
|
const message = params[0];
|
|
228
233
|
const signature = params[1];
|
|
229
234
|
const signerAddress = sigUtil.recoverPersonalSignature({
|
|
230
235
|
data: message,
|
|
231
236
|
signature,
|
|
232
237
|
});
|
|
233
|
-
|
|
238
|
+
res.result = signerAddress;
|
|
234
239
|
}
|
|
235
|
-
async function encryptionPublicKey(
|
|
240
|
+
async function encryptionPublicKey(req, res) {
|
|
236
241
|
if (!processEncryptionPublicKey) {
|
|
237
242
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
238
243
|
}
|
|
239
|
-
if (!
|
|
240
|
-
!Array.isArray(
|
|
241
|
-
!(
|
|
244
|
+
if (!req?.params ||
|
|
245
|
+
!Array.isArray(req.params) ||
|
|
246
|
+
!(req.params.length >= 1)) {
|
|
242
247
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
243
248
|
}
|
|
244
|
-
const params =
|
|
245
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
246
|
-
|
|
249
|
+
const params = req.params;
|
|
250
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
251
|
+
res.result = await processEncryptionPublicKey(address, req);
|
|
247
252
|
}
|
|
248
|
-
async function decryptMessage(
|
|
253
|
+
async function decryptMessage(req, res) {
|
|
249
254
|
if (!processDecryptMessage) {
|
|
250
255
|
throw rpc_errors_1.rpcErrors.methodNotSupported();
|
|
251
256
|
}
|
|
252
|
-
if (!
|
|
253
|
-
!Array.isArray(
|
|
254
|
-
!(
|
|
257
|
+
if (!req?.params ||
|
|
258
|
+
!Array.isArray(req.params) ||
|
|
259
|
+
!(req.params.length >= 1)) {
|
|
255
260
|
throw rpc_errors_1.rpcErrors.invalidInput();
|
|
256
261
|
}
|
|
257
|
-
const params =
|
|
262
|
+
const params = req.params;
|
|
258
263
|
const ciphertext = params[0];
|
|
259
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
264
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
260
265
|
const extraParams = params[2] || {};
|
|
261
266
|
const msgParams = {
|
|
262
267
|
...extraParams,
|
|
263
268
|
from: address,
|
|
264
269
|
data: ciphertext,
|
|
265
270
|
};
|
|
266
|
-
|
|
271
|
+
res.result = await processDecryptMessage(msgParams, req);
|
|
267
272
|
}
|
|
268
273
|
//
|
|
269
274
|
// utility
|
|
@@ -273,12 +278,12 @@ function createWalletMiddleware({ getAccounts, processDecryptMessage, processEnc
|
|
|
273
278
|
* copy of it.
|
|
274
279
|
*
|
|
275
280
|
* @param address - The address to validate and normalize.
|
|
276
|
-
* @param
|
|
281
|
+
* @param req - The request object.
|
|
277
282
|
* @returns The normalized address, if valid. Otherwise, throws
|
|
278
283
|
* an error
|
|
279
284
|
*/
|
|
280
|
-
async function validateAndNormalizeKeyholder(address,
|
|
281
|
-
return (0, validation_1.validateAndNormalizeKeyholder)(address,
|
|
285
|
+
async function validateAndNormalizeKeyholder(address, req) {
|
|
286
|
+
return (0, validation_1.validateAndNormalizeKeyholder)(address, req, { getAccounts });
|
|
282
287
|
}
|
|
283
288
|
}
|
|
284
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 { 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: 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 type WalletMiddlewareContext = MiddlewareContext<{ origin: string }>;\nexport type WalletMiddlewareParams = MiddlewareParams<\n JsonRpcRequest,\n WalletMiddlewareContext\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<\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 async function lookupAccounts({\n context,\n }: WalletMiddlewareParams): Promise<Json> {\n return await getAccounts(context.assertGet('origin'));\n }\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 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);\n }\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);\n }\n\n //\n // message signatures\n //\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, version);\n }\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, version);\n }\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, version);\n }\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);\n }\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 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, request);\n }\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, 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 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,7 +1,8 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware
|
|
2
|
-
import type { JsonRpcRequest
|
|
1
|
+
import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { JsonRpcRequest } from "@metamask/utils";
|
|
3
3
|
import { type ProcessRequestExecutionPermissionsHook } from "./methods/wallet-request-execution-permissions.cjs";
|
|
4
4
|
import { type ProcessRevokeExecutionPermissionHook } from "./methods/wallet-revoke-execution-permission.cjs";
|
|
5
|
+
import type { Block } from "./types.cjs";
|
|
5
6
|
export type TransactionParams = {
|
|
6
7
|
from: string;
|
|
7
8
|
};
|
|
@@ -16,7 +17,7 @@ export type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {
|
|
|
16
17
|
data: Record<string, unknown>[];
|
|
17
18
|
};
|
|
18
19
|
export type WalletMiddlewareOptions = {
|
|
19
|
-
getAccounts: (
|
|
20
|
+
getAccounts: (req: JsonRpcRequest) => Promise<string[]>;
|
|
20
21
|
processDecryptMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
21
22
|
processEncryptionPublicKey?: (address: string, req: JsonRpcRequest) => Promise<string>;
|
|
22
23
|
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
@@ -28,9 +29,5 @@ export type WalletMiddlewareOptions = {
|
|
|
28
29
|
processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;
|
|
29
30
|
processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;
|
|
30
31
|
};
|
|
31
|
-
export
|
|
32
|
-
origin: string;
|
|
33
|
-
}>;
|
|
34
|
-
export type WalletMiddlewareParams = MiddlewareParams<JsonRpcRequest, WalletMiddlewareContext>;
|
|
35
|
-
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>;
|
|
36
33
|
//# sourceMappingURL=wallet.d.cts.map
|
package/dist/wallet.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AAOnE,OAAO,KAAK,EACV,cAAc,EAIf,wBAAwB;AAEzB,OAAO,EACL,KAAK,sCAAsC,EAE5C,2DAAuD;AACxD,OAAO,EACL,KAAK,oCAAoC,EAE1C,yDAAqD;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAgB;AAqBrC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,CAAC,EAAE,CACvB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,kBAAkB,CAAC,EAAE,CACnB,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,CAAC,EAAE,CACvB,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,mBAAmB,CAAC,EAAE,CACpB,SAAS,EAAE,oBAAoB,EAC/B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,kBAAkB,EAC7B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,kBAAkB,EAC7B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,kCAAkC,CAAC,EAAE,sCAAsC,CAAC;IAC5E,gCAAgC,CAAC,EAAE,oCAAoC,CAAC;CACzE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kCAAkC,EAClC,gCAAgC,GACjC,EACD,uBAAuB,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAoWtD"}
|
package/dist/wallet.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware
|
|
2
|
-
import type { JsonRpcRequest
|
|
1
|
+
import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { JsonRpcRequest } from "@metamask/utils";
|
|
3
3
|
import { type ProcessRequestExecutionPermissionsHook } from "./methods/wallet-request-execution-permissions.mjs";
|
|
4
4
|
import { type ProcessRevokeExecutionPermissionHook } from "./methods/wallet-revoke-execution-permission.mjs";
|
|
5
|
+
import type { Block } from "./types.mjs";
|
|
5
6
|
export type TransactionParams = {
|
|
6
7
|
from: string;
|
|
7
8
|
};
|
|
@@ -16,7 +17,7 @@ export type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {
|
|
|
16
17
|
data: Record<string, unknown>[];
|
|
17
18
|
};
|
|
18
19
|
export type WalletMiddlewareOptions = {
|
|
19
|
-
getAccounts: (
|
|
20
|
+
getAccounts: (req: JsonRpcRequest) => Promise<string[]>;
|
|
20
21
|
processDecryptMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
21
22
|
processEncryptionPublicKey?: (address: string, req: JsonRpcRequest) => Promise<string>;
|
|
22
23
|
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
@@ -28,9 +29,5 @@ export type WalletMiddlewareOptions = {
|
|
|
28
29
|
processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;
|
|
29
30
|
processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;
|
|
30
31
|
};
|
|
31
|
-
export
|
|
32
|
-
origin: string;
|
|
33
|
-
}>;
|
|
34
|
-
export type WalletMiddlewareParams = MiddlewareParams<JsonRpcRequest, WalletMiddlewareContext>;
|
|
35
|
-
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>;
|
|
36
33
|
//# sourceMappingURL=wallet.d.mts.map
|
package/dist/wallet.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AAOnE,OAAO,KAAK,EACV,cAAc,EAIf,wBAAwB;AAEzB,OAAO,EACL,KAAK,sCAAsC,EAE5C,2DAAuD;AACxD,OAAO,EACL,KAAK,oCAAoC,EAE1C,yDAAqD;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAgB;AAqBrC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,0BAA0B,CAAC,EAAE,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,CAAC,EAAE,CACvB,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,kBAAkB,CAAC,EAAE,CACnB,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,CAAC,EAAE,CACvB,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,mBAAmB,CAAC,EAAE,CACpB,SAAS,EAAE,oBAAoB,EAC/B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,kBAAkB,EAC7B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,SAAS,EAAE,kBAAkB,EAC7B,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,kCAAkC,CAAC,EAAE,sCAAsC,CAAC;IAC5E,gCAAgC,CAAC,EAAE,oCAAoC,CAAC;CACzE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kCAAkC,EAClC,gCAAgC,GACjC,EACD,uBAAuB,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAoWtD"}
|