@metamask-previews/eth-json-rpc-middleware 21.0.0-preview-5a558267 → 21.0.0-preview-fe4c2215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -3
- package/dist/block-cache.cjs +32 -41
- package/dist/block-cache.cjs.map +1 -1
- package/dist/block-cache.d.cts +3 -12
- package/dist/block-cache.d.cts.map +1 -1
- package/dist/block-cache.d.mts +3 -12
- package/dist/block-cache.d.mts.map +1 -1
- package/dist/block-cache.mjs +32 -41
- package/dist/block-cache.mjs.map +1 -1
- package/dist/block-ref-rewrite.cjs +8 -12
- package/dist/block-ref-rewrite.cjs.map +1 -1
- package/dist/block-ref-rewrite.d.cts +3 -3
- package/dist/block-ref-rewrite.d.cts.map +1 -1
- package/dist/block-ref-rewrite.d.mts +3 -3
- package/dist/block-ref-rewrite.d.mts.map +1 -1
- package/dist/block-ref-rewrite.mjs +8 -12
- package/dist/block-ref-rewrite.mjs.map +1 -1
- package/dist/block-ref.cjs +10 -17
- package/dist/block-ref.cjs.map +1 -1
- package/dist/block-ref.d.cts +3 -12
- package/dist/block-ref.d.cts.map +1 -1
- package/dist/block-ref.d.mts +3 -12
- package/dist/block-ref.d.mts.map +1 -1
- package/dist/block-ref.mjs +10 -17
- package/dist/block-ref.mjs.map +1 -1
- package/dist/block-tracker-inspector.cjs +25 -28
- package/dist/block-tracker-inspector.cjs.map +1 -1
- package/dist/block-tracker-inspector.d.cts +3 -3
- package/dist/block-tracker-inspector.d.cts.map +1 -1
- package/dist/block-tracker-inspector.d.mts +3 -3
- package/dist/block-tracker-inspector.d.mts.map +1 -1
- package/dist/block-tracker-inspector.mjs +25 -28
- package/dist/block-tracker-inspector.mjs.map +1 -1
- package/dist/fetch.cjs +12 -8
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -5
- package/dist/fetch.d.cts.map +1 -1
- package/dist/fetch.d.mts +3 -5
- package/dist/fetch.d.mts.map +1 -1
- package/dist/fetch.mjs +12 -8
- package/dist/fetch.mjs.map +1 -1
- package/dist/inflight-cache.cjs +45 -61
- package/dist/inflight-cache.cjs.map +1 -1
- package/dist/inflight-cache.d.cts +3 -12
- package/dist/inflight-cache.d.cts.map +1 -1
- package/dist/inflight-cache.d.mts +3 -12
- package/dist/inflight-cache.d.mts.map +1 -1
- package/dist/inflight-cache.mjs +45 -61
- package/dist/inflight-cache.mjs.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.cjs +9 -20
- package/dist/methods/wallet-request-execution-permissions.cjs.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.cts +3 -14
- package/dist/methods/wallet-request-execution-permissions.d.cts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.d.mts +3 -14
- package/dist/methods/wallet-request-execution-permissions.d.mts.map +1 -1
- package/dist/methods/wallet-request-execution-permissions.mjs +7 -18
- package/dist/methods/wallet-request-execution-permissions.mjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.cjs +11 -23
- package/dist/methods/wallet-revoke-execution-permission.cjs.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.cts +5 -19
- package/dist/methods/wallet-revoke-execution-permission.d.cts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.d.mts +5 -19
- package/dist/methods/wallet-revoke-execution-permission.d.mts.map +1 -1
- package/dist/methods/wallet-revoke-execution-permission.mjs +8 -20
- package/dist/methods/wallet-revoke-execution-permission.mjs.map +1 -1
- package/dist/providerAsMiddleware.cjs +1 -18
- package/dist/providerAsMiddleware.cjs.map +1 -1
- package/dist/providerAsMiddleware.d.cts +3 -18
- package/dist/providerAsMiddleware.d.cts.map +1 -1
- package/dist/providerAsMiddleware.d.mts +3 -18
- package/dist/providerAsMiddleware.d.mts.map +1 -1
- package/dist/providerAsMiddleware.mjs +0 -16
- package/dist/providerAsMiddleware.mjs.map +1 -1
- package/dist/retryOnEmpty.cjs +11 -8
- package/dist/retryOnEmpty.cjs.map +1 -1
- package/dist/retryOnEmpty.d.cts +3 -3
- package/dist/retryOnEmpty.d.cts.map +1 -1
- package/dist/retryOnEmpty.d.mts +3 -3
- package/dist/retryOnEmpty.d.mts.map +1 -1
- package/dist/retryOnEmpty.mjs +11 -8
- package/dist/retryOnEmpty.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +5 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +5 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/error.cjs +0 -7
- package/dist/utils/error.cjs.map +1 -1
- package/dist/utils/error.d.cts +0 -7
- package/dist/utils/error.d.cts.map +1 -1
- package/dist/utils/error.d.mts +0 -7
- package/dist/utils/error.d.mts.map +1 -1
- package/dist/utils/error.mjs +0 -7
- package/dist/utils/error.mjs.map +1 -1
- package/dist/utils/normalize.cjs +2 -7
- package/dist/utils/normalize.cjs.map +1 -1
- package/dist/utils/normalize.d.cts.map +1 -1
- package/dist/utils/normalize.d.mts.map +1 -1
- package/dist/utils/normalize.mjs +2 -7
- package/dist/utils/normalize.mjs.map +1 -1
- package/dist/utils/validation.cjs +2 -34
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +3 -29
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +3 -29
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +2 -34
- package/dist/utils/validation.mjs.map +1 -1
- package/dist/wallet.cjs +92 -199
- package/dist/wallet.cjs.map +1 -1
- package/dist/wallet.d.cts +13 -40
- package/dist/wallet.d.cts.map +1 -1
- package/dist/wallet.d.mts +13 -40
- package/dist/wallet.d.mts.map +1 -1
- package/dist/wallet.mjs +93 -200
- package/dist/wallet.mjs.map +1 -1
- package/package.json +1 -4
package/dist/wallet.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,8 +1,8 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware
|
|
2
|
-
import type {
|
|
3
|
-
import type { JsonRpcRequest, Json } from "@metamask/utils";
|
|
1
|
+
import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { JsonRpcRequest } from "@metamask/utils";
|
|
4
3
|
import { type ProcessRequestExecutionPermissionsHook } from "./methods/wallet-request-execution-permissions.mjs";
|
|
5
4
|
import { type ProcessRevokeExecutionPermissionHook } from "./methods/wallet-revoke-execution-permission.mjs";
|
|
5
|
+
import type { Block } from "./types.mjs";
|
|
6
6
|
export type TransactionParams = {
|
|
7
7
|
from: string;
|
|
8
8
|
};
|
|
@@ -17,44 +17,17 @@ export type TypedMessageV1Params = Omit<TypedMessageParams, 'data'> & {
|
|
|
17
17
|
data: Record<string, unknown>[];
|
|
18
18
|
};
|
|
19
19
|
export type WalletMiddlewareOptions = {
|
|
20
|
-
getAccounts: (
|
|
21
|
-
processDecryptMessage?: (msgParams: MessageParams, req:
|
|
22
|
-
processEncryptionPublicKey?: (address: string, req:
|
|
23
|
-
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest
|
|
24
|
-
processTransaction?: (txParams: TransactionParams, req: JsonRpcRequest
|
|
25
|
-
processSignTransaction?: (txParams: TransactionParams, req: JsonRpcRequest
|
|
26
|
-
processTypedMessage?: (msgParams: TypedMessageV1Params, req: JsonRpcRequest,
|
|
27
|
-
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JsonRpcRequest,
|
|
28
|
-
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JsonRpcRequest,
|
|
20
|
+
getAccounts: (req: JsonRpcRequest) => Promise<string[]>;
|
|
21
|
+
processDecryptMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
22
|
+
processEncryptionPublicKey?: (address: string, req: JsonRpcRequest) => Promise<string>;
|
|
23
|
+
processPersonalMessage?: (msgParams: MessageParams, req: JsonRpcRequest) => Promise<string>;
|
|
24
|
+
processTransaction?: (txParams: TransactionParams, req: JsonRpcRequest) => Promise<string>;
|
|
25
|
+
processSignTransaction?: (txParams: TransactionParams, req: JsonRpcRequest) => Promise<string>;
|
|
26
|
+
processTypedMessage?: (msgParams: TypedMessageV1Params, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
27
|
+
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
28
|
+
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JsonRpcRequest, version: string) => Promise<string>;
|
|
29
29
|
processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;
|
|
30
30
|
processRevokeExecutionPermission?: ProcessRevokeExecutionPermissionHook;
|
|
31
31
|
};
|
|
32
|
-
export
|
|
33
|
-
networkClientId: string;
|
|
34
|
-
origin: string;
|
|
35
|
-
securityAlertResponse?: Record<string, Json>;
|
|
36
|
-
traceContext?: unknown;
|
|
37
|
-
};
|
|
38
|
-
export type WalletMiddlewareContext = MiddlewareContext<WalletMiddlewareKeyValues>;
|
|
39
|
-
export type WalletMiddlewareParams = MiddlewareParams<JsonRpcRequest, WalletMiddlewareContext>;
|
|
40
|
-
/**
|
|
41
|
-
* Creates a JSON-RPC middleware that handles "wallet"-related JSON-RPC methods.
|
|
42
|
-
* "Wallet" may have had a specific meaning at some point in the distant past,
|
|
43
|
-
* but at this point it's just an arbitrary label.
|
|
44
|
-
*
|
|
45
|
-
* @param options - The options for the middleware.
|
|
46
|
-
* @param options.getAccounts - The function to get the accounts for the origin.
|
|
47
|
-
* @param options.processDecryptMessage - The function to process the decrypt message request.
|
|
48
|
-
* @param options.processEncryptionPublicKey - The function to process the encryption public key request.
|
|
49
|
-
* @param options.processPersonalMessage - The function to process the personal message request.
|
|
50
|
-
* @param options.processTransaction - The function to process the transaction request.
|
|
51
|
-
* @param options.processSignTransaction - The function to process the sign transaction request.
|
|
52
|
-
* @param options.processTypedMessage - The function to process the typed message request.
|
|
53
|
-
* @param options.processTypedMessageV3 - The function to process the typed message v3 request.
|
|
54
|
-
* @param options.processTypedMessageV4 - The function to process the typed message v4 request.
|
|
55
|
-
* @param options.processRequestExecutionPermissions - The function to process the request execution permissions request.
|
|
56
|
-
* @param options.processRevokeExecutionPermission - The function to process the revoke execution permission request.
|
|
57
|
-
* @returns A JSON-RPC middleware that handles wallet-related JSON-RPC methods.
|
|
58
|
-
*/
|
|
59
|
-
export declare function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }: WalletMiddlewareOptions): JsonRpcMiddleware<JsonRpcRequest, Json, WalletMiddlewareContext>;
|
|
32
|
+
export declare function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }: WalletMiddlewareOptions): JsonRpcMiddleware<any, Block>;
|
|
60
33
|
//# sourceMappingURL=wallet.d.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"}
|
package/dist/wallet.mjs
CHANGED
|
@@ -1,156 +1,99 @@
|
|
|
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";
|
|
10
|
-
/**
|
|
11
|
-
* Creates a JSON-RPC middleware that handles "wallet"-related JSON-RPC methods.
|
|
12
|
-
* "Wallet" may have had a specific meaning at some point in the distant past,
|
|
13
|
-
* but at this point it's just an arbitrary label.
|
|
14
|
-
*
|
|
15
|
-
* @param options - The options for the middleware.
|
|
16
|
-
* @param options.getAccounts - The function to get the accounts for the origin.
|
|
17
|
-
* @param options.processDecryptMessage - The function to process the decrypt message request.
|
|
18
|
-
* @param options.processEncryptionPublicKey - The function to process the encryption public key request.
|
|
19
|
-
* @param options.processPersonalMessage - The function to process the personal message request.
|
|
20
|
-
* @param options.processTransaction - The function to process the transaction request.
|
|
21
|
-
* @param options.processSignTransaction - The function to process the sign transaction request.
|
|
22
|
-
* @param options.processTypedMessage - The function to process the typed message request.
|
|
23
|
-
* @param options.processTypedMessageV3 - The function to process the typed message v3 request.
|
|
24
|
-
* @param options.processTypedMessageV4 - The function to process the typed message v4 request.
|
|
25
|
-
* @param options.processRequestExecutionPermissions - The function to process the request execution permissions request.
|
|
26
|
-
* @param options.processRevokeExecutionPermission - The function to process the revoke execution permission request.
|
|
27
|
-
* @returns A JSON-RPC middleware that handles wallet-related JSON-RPC methods.
|
|
28
|
-
*/
|
|
29
10
|
export function createWalletMiddleware({ getAccounts, processDecryptMessage, processEncryptionPublicKey, processPersonalMessage, processTransaction, processSignTransaction, processTypedMessage, processTypedMessageV3, processTypedMessageV4, processRequestExecutionPermissions, processRevokeExecutionPermission, }) {
|
|
30
11
|
if (!getAccounts) {
|
|
31
12
|
throw new Error('opts.getAccounts is required');
|
|
32
13
|
}
|
|
33
14
|
return createScaffoldMiddleware({
|
|
34
15
|
// account lookups
|
|
35
|
-
eth_accounts: lookupAccounts,
|
|
36
|
-
eth_coinbase: lookupDefaultAccount,
|
|
16
|
+
eth_accounts: createAsyncMiddleware(lookupAccounts),
|
|
17
|
+
eth_coinbase: createAsyncMiddleware(lookupDefaultAccount),
|
|
37
18
|
// tx signatures
|
|
38
|
-
eth_sendTransaction: sendTransaction,
|
|
39
|
-
eth_signTransaction: signTransaction,
|
|
19
|
+
eth_sendTransaction: createAsyncMiddleware(sendTransaction),
|
|
20
|
+
eth_signTransaction: createAsyncMiddleware(signTransaction),
|
|
40
21
|
// message signatures
|
|
41
|
-
eth_signTypedData: signTypedData,
|
|
42
|
-
eth_signTypedData_v3: signTypedDataV3,
|
|
43
|
-
eth_signTypedData_v4: signTypedDataV4,
|
|
44
|
-
personal_sign: personalSign,
|
|
45
|
-
eth_getEncryptionPublicKey: encryptionPublicKey,
|
|
46
|
-
eth_decrypt: decryptMessage,
|
|
47
|
-
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),
|
|
48
29
|
// EIP-7715
|
|
49
|
-
wallet_requestExecutionPermissions:
|
|
30
|
+
wallet_requestExecutionPermissions: createAsyncMiddleware(async (req, res) => walletRequestExecutionPermissions(req, res, {
|
|
50
31
|
processRequestExecutionPermissions,
|
|
51
|
-
}),
|
|
52
|
-
wallet_revokeExecutionPermission:
|
|
32
|
+
})),
|
|
33
|
+
wallet_revokeExecutionPermission: createAsyncMiddleware(async (req, res) => walletRevokeExecutionPermission(req, res, {
|
|
53
34
|
processRevokeExecutionPermission,
|
|
54
|
-
}),
|
|
35
|
+
})),
|
|
55
36
|
});
|
|
56
37
|
//
|
|
57
38
|
// account lookups
|
|
58
39
|
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
*
|
|
62
|
-
* @param options - Options bag.
|
|
63
|
-
* @param options.context - The context of the request.
|
|
64
|
-
* @returns The accounts for the origin.
|
|
65
|
-
*/
|
|
66
|
-
async function lookupAccounts({ context, }) {
|
|
67
|
-
return await getAccounts(context.assertGet('origin'));
|
|
40
|
+
async function lookupAccounts(req, res) {
|
|
41
|
+
res.result = await getAccounts(req);
|
|
68
42
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
* @param options - Options bag.
|
|
73
|
-
* @param options.context - The context of the request.
|
|
74
|
-
* @returns The default account for the origin.
|
|
75
|
-
*/
|
|
76
|
-
async function lookupDefaultAccount({ context, }) {
|
|
77
|
-
const accounts = await getAccounts(context.assertGet('origin'));
|
|
78
|
-
return accounts[0] || null;
|
|
43
|
+
async function lookupDefaultAccount(req, res) {
|
|
44
|
+
const accounts = await getAccounts(req);
|
|
45
|
+
res.result = accounts[0] || null;
|
|
79
46
|
}
|
|
80
47
|
//
|
|
81
48
|
// transaction signatures
|
|
82
49
|
//
|
|
83
|
-
|
|
84
|
-
* Sends a transaction.
|
|
85
|
-
*
|
|
86
|
-
* @param options - Options bag.
|
|
87
|
-
* @param options.request - The request.
|
|
88
|
-
* @param options.context - The context of the request.
|
|
89
|
-
* @returns The transaction hash.
|
|
90
|
-
*/
|
|
91
|
-
async function sendTransaction({ request, context, }) {
|
|
50
|
+
async function sendTransaction(req, res) {
|
|
92
51
|
if (!processTransaction) {
|
|
93
52
|
throw rpcErrors.methodNotSupported();
|
|
94
53
|
}
|
|
95
|
-
if (!
|
|
96
|
-
!Array.isArray(
|
|
97
|
-
!(
|
|
54
|
+
if (!req.params ||
|
|
55
|
+
!Array.isArray(req.params) ||
|
|
56
|
+
!(req.params.length >= 1)) {
|
|
98
57
|
throw rpcErrors.invalidInput();
|
|
99
58
|
}
|
|
100
|
-
const params =
|
|
59
|
+
const params = req.params[0];
|
|
101
60
|
const txParams = {
|
|
102
61
|
...params,
|
|
103
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
62
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
104
63
|
};
|
|
105
|
-
|
|
64
|
+
res.result = await processTransaction(txParams, req);
|
|
106
65
|
}
|
|
107
|
-
|
|
108
|
-
* Signs a transaction.
|
|
109
|
-
*
|
|
110
|
-
* @param options - Options bag.
|
|
111
|
-
* @param options.request - The request.
|
|
112
|
-
* @param options.context - The context of the request.
|
|
113
|
-
* @returns The signed transaction.
|
|
114
|
-
*/
|
|
115
|
-
async function signTransaction({ request, context, }) {
|
|
66
|
+
async function signTransaction(req, res) {
|
|
116
67
|
if (!processSignTransaction) {
|
|
117
68
|
throw rpcErrors.methodNotSupported();
|
|
118
69
|
}
|
|
119
|
-
if (!
|
|
120
|
-
!Array.isArray(
|
|
121
|
-
!(
|
|
70
|
+
if (!req.params ||
|
|
71
|
+
!Array.isArray(req.params) ||
|
|
72
|
+
!(req.params.length >= 1)) {
|
|
122
73
|
throw rpcErrors.invalidInput();
|
|
123
74
|
}
|
|
124
|
-
const params =
|
|
75
|
+
const params = req.params[0];
|
|
125
76
|
const txParams = {
|
|
126
77
|
...params,
|
|
127
|
-
from: await validateAndNormalizeKeyholder(params?.from || '',
|
|
78
|
+
from: await validateAndNormalizeKeyholder(params?.from || '', req),
|
|
128
79
|
};
|
|
129
|
-
|
|
80
|
+
res.result = await processSignTransaction(txParams, req);
|
|
130
81
|
}
|
|
131
82
|
//
|
|
132
83
|
// message signatures
|
|
133
84
|
//
|
|
134
|
-
|
|
135
|
-
* Signs a `eth_signTypedData` message.
|
|
136
|
-
*
|
|
137
|
-
* @param options - Options bag.
|
|
138
|
-
* @param options.request - The request.
|
|
139
|
-
* @param options.context - The context of the request.
|
|
140
|
-
* @returns The signed message.
|
|
141
|
-
*/
|
|
142
|
-
async function signTypedData({ request, context, }) {
|
|
85
|
+
async function signTypedData(req, res) {
|
|
143
86
|
if (!processTypedMessage) {
|
|
144
87
|
throw rpcErrors.methodNotSupported();
|
|
145
88
|
}
|
|
146
|
-
if (!
|
|
147
|
-
!Array.isArray(
|
|
148
|
-
!(
|
|
89
|
+
if (!req?.params ||
|
|
90
|
+
!Array.isArray(req.params) ||
|
|
91
|
+
!(req.params.length >= 2)) {
|
|
149
92
|
throw rpcErrors.invalidInput();
|
|
150
93
|
}
|
|
151
|
-
const params =
|
|
94
|
+
const params = req.params;
|
|
152
95
|
const message = params[0];
|
|
153
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
96
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
154
97
|
const version = 'V1';
|
|
155
98
|
const extraParams = params[2] || {};
|
|
156
99
|
const msgParams = {
|
|
@@ -160,27 +103,19 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
160
103
|
signatureMethod: 'eth_signTypedData',
|
|
161
104
|
version,
|
|
162
105
|
};
|
|
163
|
-
|
|
106
|
+
res.result = await processTypedMessage(msgParams, req, version);
|
|
164
107
|
}
|
|
165
|
-
|
|
166
|
-
* Signs a `eth_signTypedData_v3` message.
|
|
167
|
-
*
|
|
168
|
-
* @param options - Options bag.
|
|
169
|
-
* @param options.request - The request.
|
|
170
|
-
* @param options.context - The context of the request.
|
|
171
|
-
* @returns The signed message.
|
|
172
|
-
*/
|
|
173
|
-
async function signTypedDataV3({ request, context, }) {
|
|
108
|
+
async function signTypedDataV3(req, res) {
|
|
174
109
|
if (!processTypedMessageV3) {
|
|
175
110
|
throw rpcErrors.methodNotSupported();
|
|
176
111
|
}
|
|
177
|
-
if (!
|
|
178
|
-
!Array.isArray(
|
|
179
|
-
!(
|
|
112
|
+
if (!req?.params ||
|
|
113
|
+
!Array.isArray(req.params) ||
|
|
114
|
+
!(req.params.length >= 2)) {
|
|
180
115
|
throw rpcErrors.invalidInput();
|
|
181
116
|
}
|
|
182
|
-
const params =
|
|
183
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
117
|
+
const params = req.params;
|
|
118
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
184
119
|
const message = normalizeTypedMessage(params[1]);
|
|
185
120
|
validatePrimaryType(message);
|
|
186
121
|
validateVerifyingContract(message);
|
|
@@ -191,27 +126,19 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
191
126
|
version,
|
|
192
127
|
signatureMethod: 'eth_signTypedData_v3',
|
|
193
128
|
};
|
|
194
|
-
|
|
129
|
+
res.result = await processTypedMessageV3(msgParams, req, version);
|
|
195
130
|
}
|
|
196
|
-
|
|
197
|
-
* Signs a `eth_signTypedData_v4` message.
|
|
198
|
-
*
|
|
199
|
-
* @param options - Options bag.
|
|
200
|
-
* @param options.request - The request.
|
|
201
|
-
* @param options.context - The context of the request.
|
|
202
|
-
* @returns The signed message.
|
|
203
|
-
*/
|
|
204
|
-
async function signTypedDataV4({ request, context, }) {
|
|
131
|
+
async function signTypedDataV4(req, res) {
|
|
205
132
|
if (!processTypedMessageV4) {
|
|
206
133
|
throw rpcErrors.methodNotSupported();
|
|
207
134
|
}
|
|
208
|
-
if (!
|
|
209
|
-
!Array.isArray(
|
|
210
|
-
!(
|
|
135
|
+
if (!req?.params ||
|
|
136
|
+
!Array.isArray(req.params) ||
|
|
137
|
+
!(req.params.length >= 2)) {
|
|
211
138
|
throw rpcErrors.invalidInput();
|
|
212
139
|
}
|
|
213
|
-
const params =
|
|
214
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
140
|
+
const params = req.params;
|
|
141
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
215
142
|
const message = normalizeTypedMessage(params[1]);
|
|
216
143
|
validatePrimaryType(message);
|
|
217
144
|
validateVerifyingContract(message);
|
|
@@ -222,26 +149,18 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
222
149
|
version,
|
|
223
150
|
signatureMethod: 'eth_signTypedData_v4',
|
|
224
151
|
};
|
|
225
|
-
|
|
152
|
+
res.result = await processTypedMessageV4(msgParams, req, version);
|
|
226
153
|
}
|
|
227
|
-
|
|
228
|
-
* Signs a `personal_sign` message.
|
|
229
|
-
*
|
|
230
|
-
* @param options - Options bag.
|
|
231
|
-
* @param options.request - The request.
|
|
232
|
-
* @param options.context - The context of the request.
|
|
233
|
-
* @returns The signed message.
|
|
234
|
-
*/
|
|
235
|
-
async function personalSign({ request, context, }) {
|
|
154
|
+
async function personalSign(req, res) {
|
|
236
155
|
if (!processPersonalMessage) {
|
|
237
156
|
throw rpcErrors.methodNotSupported();
|
|
238
157
|
}
|
|
239
|
-
if (!
|
|
240
|
-
!Array.isArray(
|
|
241
|
-
!(
|
|
158
|
+
if (!req?.params ||
|
|
159
|
+
!Array.isArray(req.params) ||
|
|
160
|
+
!(req.params.length >= 2)) {
|
|
242
161
|
throw rpcErrors.invalidInput();
|
|
243
162
|
}
|
|
244
|
-
const params =
|
|
163
|
+
const params = req.params;
|
|
245
164
|
// process normally
|
|
246
165
|
const firstParam = params[0];
|
|
247
166
|
const secondParam = params[1];
|
|
@@ -256,6 +175,11 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
256
175
|
// and the second param is definitely not, but is hex.
|
|
257
176
|
let address, message;
|
|
258
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;
|
|
259
183
|
address = firstParam;
|
|
260
184
|
message = secondParam;
|
|
261
185
|
}
|
|
@@ -263,93 +187,62 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
263
187
|
message = firstParam;
|
|
264
188
|
address = secondParam;
|
|
265
189
|
}
|
|
266
|
-
address = await validateAndNormalizeKeyholder(address,
|
|
190
|
+
address = await validateAndNormalizeKeyholder(address, req);
|
|
267
191
|
const msgParams = {
|
|
268
192
|
...extraParams,
|
|
269
193
|
from: address,
|
|
270
194
|
data: message,
|
|
271
195
|
signatureMethod: 'personal_sign',
|
|
272
196
|
};
|
|
273
|
-
|
|
197
|
+
res.result = await processPersonalMessage(msgParams, req);
|
|
274
198
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
* @param options.request - The request.
|
|
280
|
-
* @returns The recovered signer address.
|
|
281
|
-
*/
|
|
282
|
-
async function personalRecover({ request, }) {
|
|
283
|
-
if (!request.params ||
|
|
284
|
-
!Array.isArray(request.params) ||
|
|
285
|
-
!(request.params.length >= 2)) {
|
|
199
|
+
async function personalRecover(req, res) {
|
|
200
|
+
if (!req?.params ||
|
|
201
|
+
!Array.isArray(req.params) ||
|
|
202
|
+
!(req.params.length >= 2)) {
|
|
286
203
|
throw rpcErrors.invalidInput();
|
|
287
204
|
}
|
|
288
|
-
const params =
|
|
205
|
+
const params = req.params;
|
|
289
206
|
const message = params[0];
|
|
290
207
|
const signature = params[1];
|
|
291
208
|
const signerAddress = sigUtil.recoverPersonalSignature({
|
|
292
209
|
data: message,
|
|
293
210
|
signature,
|
|
294
211
|
});
|
|
295
|
-
|
|
212
|
+
res.result = signerAddress;
|
|
296
213
|
}
|
|
297
|
-
|
|
298
|
-
* Gets the encryption public key for an address.
|
|
299
|
-
*
|
|
300
|
-
* @param options - Options bag.
|
|
301
|
-
* @param options.request - The request.
|
|
302
|
-
* @param options.context - The context of the request.
|
|
303
|
-
* @returns The encryption public key.
|
|
304
|
-
*/
|
|
305
|
-
async function encryptionPublicKey({ request, context, }) {
|
|
214
|
+
async function encryptionPublicKey(req, res) {
|
|
306
215
|
if (!processEncryptionPublicKey) {
|
|
307
216
|
throw rpcErrors.methodNotSupported();
|
|
308
217
|
}
|
|
309
|
-
if (!
|
|
310
|
-
!Array.isArray(
|
|
311
|
-
!(
|
|
218
|
+
if (!req?.params ||
|
|
219
|
+
!Array.isArray(req.params) ||
|
|
220
|
+
!(req.params.length >= 1)) {
|
|
312
221
|
throw rpcErrors.invalidInput();
|
|
313
222
|
}
|
|
314
|
-
const params =
|
|
315
|
-
const address = await validateAndNormalizeKeyholder(params[0],
|
|
316
|
-
|
|
317
|
-
id: request.id,
|
|
318
|
-
origin: context.assertGet('origin'),
|
|
319
|
-
securityAlertResponse: context.get('securityAlertResponse'),
|
|
320
|
-
});
|
|
223
|
+
const params = req.params;
|
|
224
|
+
const address = await validateAndNormalizeKeyholder(params[0], req);
|
|
225
|
+
res.result = await processEncryptionPublicKey(address, req);
|
|
321
226
|
}
|
|
322
|
-
|
|
323
|
-
* Decrypts a message.
|
|
324
|
-
*
|
|
325
|
-
* @param options - Options bag.
|
|
326
|
-
* @param options.request - The request.
|
|
327
|
-
* @param options.context - The context of the request.
|
|
328
|
-
* @returns The decrypted message.
|
|
329
|
-
*/
|
|
330
|
-
async function decryptMessage({ request, context, }) {
|
|
227
|
+
async function decryptMessage(req, res) {
|
|
331
228
|
if (!processDecryptMessage) {
|
|
332
229
|
throw rpcErrors.methodNotSupported();
|
|
333
230
|
}
|
|
334
|
-
if (!
|
|
335
|
-
!Array.isArray(
|
|
336
|
-
!(
|
|
231
|
+
if (!req?.params ||
|
|
232
|
+
!Array.isArray(req.params) ||
|
|
233
|
+
!(req.params.length >= 1)) {
|
|
337
234
|
throw rpcErrors.invalidInput();
|
|
338
235
|
}
|
|
339
|
-
const params =
|
|
236
|
+
const params = req.params;
|
|
340
237
|
const ciphertext = params[0];
|
|
341
|
-
const address = await validateAndNormalizeKeyholder(params[1],
|
|
238
|
+
const address = await validateAndNormalizeKeyholder(params[1], req);
|
|
342
239
|
const extraParams = params[2] || {};
|
|
343
240
|
const msgParams = {
|
|
344
241
|
...extraParams,
|
|
345
242
|
from: address,
|
|
346
243
|
data: ciphertext,
|
|
347
244
|
};
|
|
348
|
-
|
|
349
|
-
id: request.id,
|
|
350
|
-
origin: context.assertGet('origin'),
|
|
351
|
-
securityAlertResponse: context.get('securityAlertResponse'),
|
|
352
|
-
});
|
|
245
|
+
res.result = await processDecryptMessage(msgParams, req);
|
|
353
246
|
}
|
|
354
247
|
//
|
|
355
248
|
// utility
|
|
@@ -359,12 +252,12 @@ export function createWalletMiddleware({ getAccounts, processDecryptMessage, pro
|
|
|
359
252
|
* copy of it.
|
|
360
253
|
*
|
|
361
254
|
* @param address - The address to validate and normalize.
|
|
362
|
-
* @param
|
|
255
|
+
* @param req - The request object.
|
|
363
256
|
* @returns The normalized address, if valid. Otherwise, throws
|
|
364
257
|
* an error
|
|
365
258
|
*/
|
|
366
|
-
async function validateAndNormalizeKeyholder(address,
|
|
367
|
-
return validateKeyholder(address,
|
|
259
|
+
async function validateAndNormalizeKeyholder(address, req) {
|
|
260
|
+
return validateKeyholder(address, req, { getAccounts });
|
|
368
261
|
}
|
|
369
262
|
}
|
|
370
263
|
/**
|