@metamask-previews/keyring-snap-sdk 6.0.0-a621908 → 7.0.0-855692d
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 +8 -1
- package/dist/rpc-handler.cjs +29 -4
- package/dist/rpc-handler.cjs.map +1 -1
- package/dist/rpc-handler.d.cts +3 -2
- package/dist/rpc-handler.d.cts.map +1 -1
- package/dist/rpc-handler.d.mts +3 -2
- package/dist/rpc-handler.d.mts.map +1 -1
- package/dist/rpc-handler.mjs +30 -5
- package/dist/rpc-handler.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [7.0.0]
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **BREAKING:** Bump `@metamask/keyring-api` from `^20.0.0` to `^21.0.0` ([#355](https://github.com/MetaMask/accounts/pull/355)), ([#356](https://github.com/MetaMask/accounts/pull/356))
|
|
15
|
+
|
|
10
16
|
## [6.0.0]
|
|
11
17
|
|
|
12
18
|
### Changed
|
|
@@ -102,7 +108,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
102
108
|
- This new version fixes a bug with CJS re-exports.
|
|
103
109
|
- Initial release ([#24](https://github.com/MetaMask/accounts/pull/24))
|
|
104
110
|
|
|
105
|
-
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@
|
|
111
|
+
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@7.0.0...HEAD
|
|
112
|
+
[7.0.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@6.0.0...@metamask/keyring-snap-sdk@7.0.0
|
|
106
113
|
[6.0.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@5.0.0...@metamask/keyring-snap-sdk@6.0.0
|
|
107
114
|
[5.0.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@4.0.0...@metamask/keyring-snap-sdk@5.0.0
|
|
108
115
|
[4.0.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-snap-sdk@3.2.0...@metamask/keyring-snap-sdk@4.0.0
|
package/dist/rpc-handler.cjs
CHANGED
|
@@ -20,9 +20,10 @@ exports.MethodNotSupportedError = MethodNotSupportedError;
|
|
|
20
20
|
*
|
|
21
21
|
* @param keyring - Keyring instance.
|
|
22
22
|
* @param request - Keyring JSON-RPC request.
|
|
23
|
+
* @param handleBatch - Batched requests handler.
|
|
23
24
|
* @returns A promise that resolves to the keyring response.
|
|
24
25
|
*/
|
|
25
|
-
async function dispatchRequest(keyring, request) {
|
|
26
|
+
async function dispatchRequest(keyring, request, handleBatch) {
|
|
26
27
|
// We first have to make sure that the request is a valid JSON-RPC request so
|
|
27
28
|
// we can check its method name.
|
|
28
29
|
(0, superstruct_1.assert)(request, keyring_utils_1.JsonRpcRequestStruct);
|
|
@@ -75,7 +76,7 @@ async function dispatchRequest(keyring, request) {
|
|
|
75
76
|
return keyring.resolveAccountAddress(request.params.scope, request.params.request);
|
|
76
77
|
}
|
|
77
78
|
case `${keyring_api_1.KeyringRpcMethod.FilterAccountChains}`: {
|
|
78
|
-
(0, superstruct_1.assert)(request, keyring_api_1.
|
|
79
|
+
(0, superstruct_1.assert)(request, keyring_api_1.FilterAccountChainsRequestStruct);
|
|
79
80
|
return keyring.filterAccountChains(request.params.id, request.params.chains);
|
|
80
81
|
}
|
|
81
82
|
case `${keyring_api_1.KeyringRpcMethod.UpdateAccount}`: {
|
|
@@ -125,6 +126,29 @@ async function dispatchRequest(keyring, request) {
|
|
|
125
126
|
(0, superstruct_1.assert)(request, keyring_api_1.RejectRequestRequestStruct);
|
|
126
127
|
return keyring.rejectRequest(request.params.id);
|
|
127
128
|
}
|
|
129
|
+
case `${keyring_api_1.KeyringRpcMethod.Batch}`: {
|
|
130
|
+
(0, superstruct_1.assert)(request, keyring_api_1.BatchRequestStruct);
|
|
131
|
+
if (handleBatch) {
|
|
132
|
+
return handleBatch(request);
|
|
133
|
+
}
|
|
134
|
+
// If there's no custom handler for batched requests, we just fallback by executing them 1
|
|
135
|
+
// by 1.
|
|
136
|
+
const responses = await Promise.all(request.params.requests.map(async (subRequest) => {
|
|
137
|
+
try {
|
|
138
|
+
let response = await dispatchRequest(keyring, subRequest);
|
|
139
|
+
// For batch responses, we "convert" any `void` return type to null so it can
|
|
140
|
+
// be casted to a normal `Json` type.
|
|
141
|
+
if (response === undefined) {
|
|
142
|
+
response = null;
|
|
143
|
+
}
|
|
144
|
+
return { response };
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return { error: error.message };
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
return responses;
|
|
151
|
+
}
|
|
128
152
|
default: {
|
|
129
153
|
throw new MethodNotSupportedError(request.method);
|
|
130
154
|
}
|
|
@@ -138,6 +162,7 @@ async function dispatchRequest(keyring, request) {
|
|
|
138
162
|
*
|
|
139
163
|
* @param keyring - Keyring instance.
|
|
140
164
|
* @param request - Keyring JSON-RPC request.
|
|
165
|
+
* @param handleBatch - Batched requests handler.
|
|
141
166
|
* @returns A promise that resolves to the keyring response.
|
|
142
167
|
* @example
|
|
143
168
|
* ```ts
|
|
@@ -149,9 +174,9 @@ async function dispatchRequest(keyring, request) {
|
|
|
149
174
|
* };
|
|
150
175
|
* ```
|
|
151
176
|
*/
|
|
152
|
-
async function handleKeyringRequest(keyring, request) {
|
|
177
|
+
async function handleKeyringRequest(keyring, request, handleBatch) {
|
|
153
178
|
try {
|
|
154
|
-
return await dispatchRequest(keyring, request);
|
|
179
|
+
return await dispatchRequest(keyring, request, handleBatch);
|
|
155
180
|
}
|
|
156
181
|
catch (error) {
|
|
157
182
|
const message = error instanceof Error && typeof error.message === 'string'
|
package/dist/rpc-handler.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-handler.cjs","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Keyring } from '@metamask/keyring-api';\nimport {\n KeyringRpcMethod,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ListAccountTransactionsRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n ExportAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsStruct,\n ListAccountsRequestStruct,\n ListRequestsRequestStruct,\n GetAccountBalancesRequestStruct,\n ListAccountAssetsRequestStruct,\n ResolveAccountAddressRequestStruct,\n DiscoverAccountsRequestStruct,\n} from '@metamask/keyring-api';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { JsonRpcRequestStruct } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Error thrown when a keyring JSON-RPC method is not supported.\n */\nexport class MethodNotSupportedError extends Error {\n constructor(method: string) {\n super(`Method not supported: ${method}`);\n }\n}\n\n/**\n * Inner function that dispatches JSON-RPC request to the associated Keyring\n * methods.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n */\nasync function dispatchRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n // We first have to make sure that the request is a valid JSON-RPC request so\n // we can check its method name.\n assert(request, JsonRpcRequestStruct);\n\n switch (request.method) {\n case `${KeyringRpcMethod.ListAccounts}`: {\n assert(request, ListAccountsRequestStruct);\n return keyring.listAccounts();\n }\n\n case `${KeyringRpcMethod.GetAccount}`: {\n assert(request, GetAccountRequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.CreateAccount}`: {\n assert(request, CreateAccountRequestStruct);\n return keyring.createAccount(request.params.options);\n }\n\n case `${KeyringRpcMethod.DiscoverAccounts}`: {\n if (keyring.discoverAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, DiscoverAccountsRequestStruct);\n return keyring.discoverAccounts(\n request.params.scopes,\n request.params.entropySource,\n request.params.groupIndex,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountTransactions}`: {\n if (keyring.listAccountTransactions === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountTransactionsRequestStruct);\n return keyring.listAccountTransactions(\n request.params.id,\n request.params.pagination,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountAssets}`: {\n if (keyring.listAccountAssets === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountAssetsRequestStruct);\n return keyring.listAccountAssets(request.params.id);\n }\n\n case `${KeyringRpcMethod.GetAccountBalances}`: {\n if (keyring.getAccountBalances === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetAccountBalancesRequestStruct);\n return keyring.getAccountBalances(\n request.params.id,\n request.params.assets,\n );\n }\n\n case `${KeyringRpcMethod.ResolveAccountAddress}`: {\n if (keyring.resolveAccountAddress === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ResolveAccountAddressRequestStruct);\n return keyring.resolveAccountAddress(\n request.params.scope,\n request.params.request,\n );\n }\n\n case `${KeyringRpcMethod.FilterAccountChains}`: {\n assert(request, FilterAccountChainsStruct);\n return keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case `${KeyringRpcMethod.UpdateAccount}`: {\n assert(request, UpdateAccountRequestStruct);\n return keyring.updateAccount(request.params.account);\n }\n\n case `${KeyringRpcMethod.DeleteAccount}`: {\n assert(request, DeleteAccountRequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountRequestStruct);\n return keyring.exportAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ListRequests}`: {\n if (keyring.listRequests === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListRequestsRequestStruct);\n return keyring.listRequests();\n }\n\n case `${KeyringRpcMethod.GetRequest}`: {\n if (keyring.getRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetRequestRequestStruct);\n return keyring.getRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.SubmitRequest}`: {\n assert(request, SubmitRequestRequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n case `${KeyringRpcMethod.ApproveRequest}`: {\n if (keyring.approveRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ApproveRequestRequestStruct);\n return keyring.approveRequest(request.params.id, request.params.data);\n }\n\n case `${KeyringRpcMethod.RejectRequest}`: {\n if (keyring.rejectRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, RejectRequestRequestStruct);\n return keyring.rejectRequest(request.params.id);\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring JSON-RPC requests\n * in an Accounts Snap.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n * @example\n * ```ts\n * export const onKeyringRequest: OnKeyringRequestHandler = async ({\n * origin,\n * request,\n * }) => {\n * return await handleKeyringRequest(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n try {\n return await dispatchRequest(keyring, request);\n } catch (error) {\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring request';\n\n throw new Error(message);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-handler.cjs","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Keyring,\n BatchRequest,\n BatchResponse,\n} from '@metamask/keyring-api';\nimport {\n KeyringRpcMethod,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ListAccountTransactionsRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n ExportAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsRequestStruct,\n ListAccountsRequestStruct,\n ListRequestsRequestStruct,\n GetAccountBalancesRequestStruct,\n ListAccountAssetsRequestStruct,\n ResolveAccountAddressRequestStruct,\n DiscoverAccountsRequestStruct,\n BatchRequestStruct,\n} from '@metamask/keyring-api';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { JsonRpcRequestStruct } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Error thrown when a keyring JSON-RPC method is not supported.\n */\nexport class MethodNotSupportedError extends Error {\n constructor(method: string) {\n super(`Method not supported: ${method}`);\n }\n}\n\n/**\n * Inner function that dispatches JSON-RPC request to the associated Keyring\n * methods.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @param handleBatch - Batched requests handler.\n * @returns A promise that resolves to the keyring response.\n */\nasync function dispatchRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n handleBatch?: (batched: BatchRequest) => BatchResponse,\n): Promise<Json | void> {\n // We first have to make sure that the request is a valid JSON-RPC request so\n // we can check its method name.\n assert(request, JsonRpcRequestStruct);\n\n switch (request.method) {\n case `${KeyringRpcMethod.ListAccounts}`: {\n assert(request, ListAccountsRequestStruct);\n return keyring.listAccounts();\n }\n\n case `${KeyringRpcMethod.GetAccount}`: {\n assert(request, GetAccountRequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.CreateAccount}`: {\n assert(request, CreateAccountRequestStruct);\n return keyring.createAccount(request.params.options);\n }\n\n case `${KeyringRpcMethod.DiscoverAccounts}`: {\n if (keyring.discoverAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, DiscoverAccountsRequestStruct);\n return keyring.discoverAccounts(\n request.params.scopes,\n request.params.entropySource,\n request.params.groupIndex,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountTransactions}`: {\n if (keyring.listAccountTransactions === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountTransactionsRequestStruct);\n return keyring.listAccountTransactions(\n request.params.id,\n request.params.pagination,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountAssets}`: {\n if (keyring.listAccountAssets === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountAssetsRequestStruct);\n return keyring.listAccountAssets(request.params.id);\n }\n\n case `${KeyringRpcMethod.GetAccountBalances}`: {\n if (keyring.getAccountBalances === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetAccountBalancesRequestStruct);\n return keyring.getAccountBalances(\n request.params.id,\n request.params.assets,\n );\n }\n\n case `${KeyringRpcMethod.ResolveAccountAddress}`: {\n if (keyring.resolveAccountAddress === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ResolveAccountAddressRequestStruct);\n return keyring.resolveAccountAddress(\n request.params.scope,\n request.params.request,\n );\n }\n\n case `${KeyringRpcMethod.FilterAccountChains}`: {\n assert(request, FilterAccountChainsRequestStruct);\n return keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case `${KeyringRpcMethod.UpdateAccount}`: {\n assert(request, UpdateAccountRequestStruct);\n return keyring.updateAccount(request.params.account);\n }\n\n case `${KeyringRpcMethod.DeleteAccount}`: {\n assert(request, DeleteAccountRequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountRequestStruct);\n return keyring.exportAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ListRequests}`: {\n if (keyring.listRequests === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListRequestsRequestStruct);\n return keyring.listRequests();\n }\n\n case `${KeyringRpcMethod.GetRequest}`: {\n if (keyring.getRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetRequestRequestStruct);\n return keyring.getRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.SubmitRequest}`: {\n assert(request, SubmitRequestRequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n case `${KeyringRpcMethod.ApproveRequest}`: {\n if (keyring.approveRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ApproveRequestRequestStruct);\n return keyring.approveRequest(request.params.id, request.params.data);\n }\n\n case `${KeyringRpcMethod.RejectRequest}`: {\n if (keyring.rejectRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, RejectRequestRequestStruct);\n return keyring.rejectRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.Batch}`: {\n assert(request, BatchRequestStruct);\n\n if (handleBatch) {\n return handleBatch(request);\n }\n\n // If there's no custom handler for batched requests, we just fallback by executing them 1\n // by 1.\n const responses: Json = await Promise.all(\n request.params.requests.map(async (subRequest) => {\n try {\n let response = await dispatchRequest(keyring, subRequest);\n\n // For batch responses, we \"convert\" any `void` return type to null so it can\n // be casted to a normal `Json` type.\n if (response === undefined) {\n response = null;\n }\n\n return { response };\n } catch (error) {\n return { error: (error as Error).message };\n }\n }),\n );\n\n return responses;\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring JSON-RPC requests\n * in an Accounts Snap.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @param handleBatch - Batched requests handler.\n * @returns A promise that resolves to the keyring response.\n * @example\n * ```ts\n * export const onKeyringRequest: OnKeyringRequestHandler = async ({\n * origin,\n * request,\n * }) => {\n * return await handleKeyringRequest(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n handleBatch?: (batched: BatchRequest) => BatchResponse,\n): Promise<Json | void> {\n try {\n return await dispatchRequest(keyring, request, handleBatch);\n } catch (error) {\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring request';\n\n throw new Error(message);\n }\n}\n"]}
|
package/dist/rpc-handler.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Keyring } from "@metamask/keyring-api";
|
|
1
|
+
import type { Keyring, BatchRequest, BatchResponse } from "@metamask/keyring-api";
|
|
2
2
|
import type { JsonRpcRequest } from "@metamask/keyring-utils";
|
|
3
3
|
import type { Json } from "@metamask/utils";
|
|
4
4
|
/**
|
|
@@ -15,6 +15,7 @@ export declare class MethodNotSupportedError extends Error {
|
|
|
15
15
|
*
|
|
16
16
|
* @param keyring - Keyring instance.
|
|
17
17
|
* @param request - Keyring JSON-RPC request.
|
|
18
|
+
* @param handleBatch - Batched requests handler.
|
|
18
19
|
* @returns A promise that resolves to the keyring response.
|
|
19
20
|
* @example
|
|
20
21
|
* ```ts
|
|
@@ -26,5 +27,5 @@ export declare class MethodNotSupportedError extends Error {
|
|
|
26
27
|
* };
|
|
27
28
|
* ```
|
|
28
29
|
*/
|
|
29
|
-
export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
|
|
30
|
+
export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest, handleBatch?: (batched: BatchRequest) => BatchResponse): Promise<Json | void>;
|
|
30
31
|
//# sourceMappingURL=rpc-handler.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-handler.d.cts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"rpc-handler.d.cts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EACd,8BAA8B;AAsB/B,OAAO,KAAK,EAAE,cAAc,EAAE,gCAAgC;AAG9D,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,MAAM,EAAE,MAAM;CAG3B;AA4LD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,EACvB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,aAAa,GACrD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB"}
|
package/dist/rpc-handler.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Keyring } from "@metamask/keyring-api";
|
|
1
|
+
import type { Keyring, BatchRequest, BatchResponse } from "@metamask/keyring-api";
|
|
2
2
|
import type { JsonRpcRequest } from "@metamask/keyring-utils";
|
|
3
3
|
import type { Json } from "@metamask/utils";
|
|
4
4
|
/**
|
|
@@ -15,6 +15,7 @@ export declare class MethodNotSupportedError extends Error {
|
|
|
15
15
|
*
|
|
16
16
|
* @param keyring - Keyring instance.
|
|
17
17
|
* @param request - Keyring JSON-RPC request.
|
|
18
|
+
* @param handleBatch - Batched requests handler.
|
|
18
19
|
* @returns A promise that resolves to the keyring response.
|
|
19
20
|
* @example
|
|
20
21
|
* ```ts
|
|
@@ -26,5 +27,5 @@ export declare class MethodNotSupportedError extends Error {
|
|
|
26
27
|
* };
|
|
27
28
|
* ```
|
|
28
29
|
*/
|
|
29
|
-
export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
|
|
30
|
+
export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest, handleBatch?: (batched: BatchRequest) => BatchResponse): Promise<Json | void>;
|
|
30
31
|
//# sourceMappingURL=rpc-handler.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-handler.d.mts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"rpc-handler.d.mts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EACd,8BAA8B;AAsB/B,OAAO,KAAK,EAAE,cAAc,EAAE,gCAAgC;AAG9D,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,MAAM,EAAE,MAAM;CAG3B;AA4LD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,EACvB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,aAAa,GACrD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB"}
|
package/dist/rpc-handler.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KeyringRpcMethod, GetAccountRequestStruct, CreateAccountRequestStruct, ListAccountTransactionsRequestStruct, ApproveRequestRequestStruct, DeleteAccountRequestStruct, ExportAccountRequestStruct, GetRequestRequestStruct, RejectRequestRequestStruct, SubmitRequestRequestStruct, UpdateAccountRequestStruct,
|
|
1
|
+
import { KeyringRpcMethod, GetAccountRequestStruct, CreateAccountRequestStruct, ListAccountTransactionsRequestStruct, ApproveRequestRequestStruct, DeleteAccountRequestStruct, ExportAccountRequestStruct, GetRequestRequestStruct, RejectRequestRequestStruct, SubmitRequestRequestStruct, UpdateAccountRequestStruct, FilterAccountChainsRequestStruct, ListAccountsRequestStruct, ListRequestsRequestStruct, GetAccountBalancesRequestStruct, ListAccountAssetsRequestStruct, ResolveAccountAddressRequestStruct, DiscoverAccountsRequestStruct, BatchRequestStruct } from "@metamask/keyring-api";
|
|
2
2
|
import { JsonRpcRequestStruct } from "@metamask/keyring-utils";
|
|
3
3
|
import { assert } from "@metamask/superstruct";
|
|
4
4
|
/**
|
|
@@ -15,9 +15,10 @@ export class MethodNotSupportedError extends Error {
|
|
|
15
15
|
*
|
|
16
16
|
* @param keyring - Keyring instance.
|
|
17
17
|
* @param request - Keyring JSON-RPC request.
|
|
18
|
+
* @param handleBatch - Batched requests handler.
|
|
18
19
|
* @returns A promise that resolves to the keyring response.
|
|
19
20
|
*/
|
|
20
|
-
async function dispatchRequest(keyring, request) {
|
|
21
|
+
async function dispatchRequest(keyring, request, handleBatch) {
|
|
21
22
|
// We first have to make sure that the request is a valid JSON-RPC request so
|
|
22
23
|
// we can check its method name.
|
|
23
24
|
assert(request, JsonRpcRequestStruct);
|
|
@@ -70,7 +71,7 @@ async function dispatchRequest(keyring, request) {
|
|
|
70
71
|
return keyring.resolveAccountAddress(request.params.scope, request.params.request);
|
|
71
72
|
}
|
|
72
73
|
case `${KeyringRpcMethod.FilterAccountChains}`: {
|
|
73
|
-
assert(request,
|
|
74
|
+
assert(request, FilterAccountChainsRequestStruct);
|
|
74
75
|
return keyring.filterAccountChains(request.params.id, request.params.chains);
|
|
75
76
|
}
|
|
76
77
|
case `${KeyringRpcMethod.UpdateAccount}`: {
|
|
@@ -120,6 +121,29 @@ async function dispatchRequest(keyring, request) {
|
|
|
120
121
|
assert(request, RejectRequestRequestStruct);
|
|
121
122
|
return keyring.rejectRequest(request.params.id);
|
|
122
123
|
}
|
|
124
|
+
case `${KeyringRpcMethod.Batch}`: {
|
|
125
|
+
assert(request, BatchRequestStruct);
|
|
126
|
+
if (handleBatch) {
|
|
127
|
+
return handleBatch(request);
|
|
128
|
+
}
|
|
129
|
+
// If there's no custom handler for batched requests, we just fallback by executing them 1
|
|
130
|
+
// by 1.
|
|
131
|
+
const responses = await Promise.all(request.params.requests.map(async (subRequest) => {
|
|
132
|
+
try {
|
|
133
|
+
let response = await dispatchRequest(keyring, subRequest);
|
|
134
|
+
// For batch responses, we "convert" any `void` return type to null so it can
|
|
135
|
+
// be casted to a normal `Json` type.
|
|
136
|
+
if (response === undefined) {
|
|
137
|
+
response = null;
|
|
138
|
+
}
|
|
139
|
+
return { response };
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return { error: error.message };
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
145
|
+
return responses;
|
|
146
|
+
}
|
|
123
147
|
default: {
|
|
124
148
|
throw new MethodNotSupportedError(request.method);
|
|
125
149
|
}
|
|
@@ -133,6 +157,7 @@ async function dispatchRequest(keyring, request) {
|
|
|
133
157
|
*
|
|
134
158
|
* @param keyring - Keyring instance.
|
|
135
159
|
* @param request - Keyring JSON-RPC request.
|
|
160
|
+
* @param handleBatch - Batched requests handler.
|
|
136
161
|
* @returns A promise that resolves to the keyring response.
|
|
137
162
|
* @example
|
|
138
163
|
* ```ts
|
|
@@ -144,9 +169,9 @@ async function dispatchRequest(keyring, request) {
|
|
|
144
169
|
* };
|
|
145
170
|
* ```
|
|
146
171
|
*/
|
|
147
|
-
export async function handleKeyringRequest(keyring, request) {
|
|
172
|
+
export async function handleKeyringRequest(keyring, request, handleBatch) {
|
|
148
173
|
try {
|
|
149
|
-
return await dispatchRequest(keyring, request);
|
|
174
|
+
return await dispatchRequest(keyring, request, handleBatch);
|
|
150
175
|
}
|
|
151
176
|
catch (error) {
|
|
152
177
|
const message = error instanceof Error && typeof error.message === 'string'
|
package/dist/rpc-handler.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-handler.mjs","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Keyring } from '@metamask/keyring-api';\nimport {\n KeyringRpcMethod,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ListAccountTransactionsRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n ExportAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsStruct,\n ListAccountsRequestStruct,\n ListRequestsRequestStruct,\n GetAccountBalancesRequestStruct,\n ListAccountAssetsRequestStruct,\n ResolveAccountAddressRequestStruct,\n DiscoverAccountsRequestStruct,\n} from '@metamask/keyring-api';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { JsonRpcRequestStruct } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Error thrown when a keyring JSON-RPC method is not supported.\n */\nexport class MethodNotSupportedError extends Error {\n constructor(method: string) {\n super(`Method not supported: ${method}`);\n }\n}\n\n/**\n * Inner function that dispatches JSON-RPC request to the associated Keyring\n * methods.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n */\nasync function dispatchRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n // We first have to make sure that the request is a valid JSON-RPC request so\n // we can check its method name.\n assert(request, JsonRpcRequestStruct);\n\n switch (request.method) {\n case `${KeyringRpcMethod.ListAccounts}`: {\n assert(request, ListAccountsRequestStruct);\n return keyring.listAccounts();\n }\n\n case `${KeyringRpcMethod.GetAccount}`: {\n assert(request, GetAccountRequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.CreateAccount}`: {\n assert(request, CreateAccountRequestStruct);\n return keyring.createAccount(request.params.options);\n }\n\n case `${KeyringRpcMethod.DiscoverAccounts}`: {\n if (keyring.discoverAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, DiscoverAccountsRequestStruct);\n return keyring.discoverAccounts(\n request.params.scopes,\n request.params.entropySource,\n request.params.groupIndex,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountTransactions}`: {\n if (keyring.listAccountTransactions === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountTransactionsRequestStruct);\n return keyring.listAccountTransactions(\n request.params.id,\n request.params.pagination,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountAssets}`: {\n if (keyring.listAccountAssets === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountAssetsRequestStruct);\n return keyring.listAccountAssets(request.params.id);\n }\n\n case `${KeyringRpcMethod.GetAccountBalances}`: {\n if (keyring.getAccountBalances === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetAccountBalancesRequestStruct);\n return keyring.getAccountBalances(\n request.params.id,\n request.params.assets,\n );\n }\n\n case `${KeyringRpcMethod.ResolveAccountAddress}`: {\n if (keyring.resolveAccountAddress === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ResolveAccountAddressRequestStruct);\n return keyring.resolveAccountAddress(\n request.params.scope,\n request.params.request,\n );\n }\n\n case `${KeyringRpcMethod.FilterAccountChains}`: {\n assert(request, FilterAccountChainsStruct);\n return keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case `${KeyringRpcMethod.UpdateAccount}`: {\n assert(request, UpdateAccountRequestStruct);\n return keyring.updateAccount(request.params.account);\n }\n\n case `${KeyringRpcMethod.DeleteAccount}`: {\n assert(request, DeleteAccountRequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountRequestStruct);\n return keyring.exportAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ListRequests}`: {\n if (keyring.listRequests === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListRequestsRequestStruct);\n return keyring.listRequests();\n }\n\n case `${KeyringRpcMethod.GetRequest}`: {\n if (keyring.getRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetRequestRequestStruct);\n return keyring.getRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.SubmitRequest}`: {\n assert(request, SubmitRequestRequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n case `${KeyringRpcMethod.ApproveRequest}`: {\n if (keyring.approveRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ApproveRequestRequestStruct);\n return keyring.approveRequest(request.params.id, request.params.data);\n }\n\n case `${KeyringRpcMethod.RejectRequest}`: {\n if (keyring.rejectRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, RejectRequestRequestStruct);\n return keyring.rejectRequest(request.params.id);\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring JSON-RPC requests\n * in an Accounts Snap.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n * @example\n * ```ts\n * export const onKeyringRequest: OnKeyringRequestHandler = async ({\n * origin,\n * request,\n * }) => {\n * return await handleKeyringRequest(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n try {\n return await dispatchRequest(keyring, request);\n } catch (error) {\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring request';\n\n throw new Error(message);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rpc-handler.mjs","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Keyring,\n BatchRequest,\n BatchResponse,\n} from '@metamask/keyring-api';\nimport {\n KeyringRpcMethod,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ListAccountTransactionsRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n ExportAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsRequestStruct,\n ListAccountsRequestStruct,\n ListRequestsRequestStruct,\n GetAccountBalancesRequestStruct,\n ListAccountAssetsRequestStruct,\n ResolveAccountAddressRequestStruct,\n DiscoverAccountsRequestStruct,\n BatchRequestStruct,\n} from '@metamask/keyring-api';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { JsonRpcRequestStruct } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\n/**\n * Error thrown when a keyring JSON-RPC method is not supported.\n */\nexport class MethodNotSupportedError extends Error {\n constructor(method: string) {\n super(`Method not supported: ${method}`);\n }\n}\n\n/**\n * Inner function that dispatches JSON-RPC request to the associated Keyring\n * methods.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @param handleBatch - Batched requests handler.\n * @returns A promise that resolves to the keyring response.\n */\nasync function dispatchRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n handleBatch?: (batched: BatchRequest) => BatchResponse,\n): Promise<Json | void> {\n // We first have to make sure that the request is a valid JSON-RPC request so\n // we can check its method name.\n assert(request, JsonRpcRequestStruct);\n\n switch (request.method) {\n case `${KeyringRpcMethod.ListAccounts}`: {\n assert(request, ListAccountsRequestStruct);\n return keyring.listAccounts();\n }\n\n case `${KeyringRpcMethod.GetAccount}`: {\n assert(request, GetAccountRequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.CreateAccount}`: {\n assert(request, CreateAccountRequestStruct);\n return keyring.createAccount(request.params.options);\n }\n\n case `${KeyringRpcMethod.DiscoverAccounts}`: {\n if (keyring.discoverAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, DiscoverAccountsRequestStruct);\n return keyring.discoverAccounts(\n request.params.scopes,\n request.params.entropySource,\n request.params.groupIndex,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountTransactions}`: {\n if (keyring.listAccountTransactions === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountTransactionsRequestStruct);\n return keyring.listAccountTransactions(\n request.params.id,\n request.params.pagination,\n );\n }\n\n case `${KeyringRpcMethod.ListAccountAssets}`: {\n if (keyring.listAccountAssets === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListAccountAssetsRequestStruct);\n return keyring.listAccountAssets(request.params.id);\n }\n\n case `${KeyringRpcMethod.GetAccountBalances}`: {\n if (keyring.getAccountBalances === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetAccountBalancesRequestStruct);\n return keyring.getAccountBalances(\n request.params.id,\n request.params.assets,\n );\n }\n\n case `${KeyringRpcMethod.ResolveAccountAddress}`: {\n if (keyring.resolveAccountAddress === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ResolveAccountAddressRequestStruct);\n return keyring.resolveAccountAddress(\n request.params.scope,\n request.params.request,\n );\n }\n\n case `${KeyringRpcMethod.FilterAccountChains}`: {\n assert(request, FilterAccountChainsRequestStruct);\n return keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case `${KeyringRpcMethod.UpdateAccount}`: {\n assert(request, UpdateAccountRequestStruct);\n return keyring.updateAccount(request.params.account);\n }\n\n case `${KeyringRpcMethod.DeleteAccount}`: {\n assert(request, DeleteAccountRequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountRequestStruct);\n return keyring.exportAccount(request.params.id);\n }\n\n case `${KeyringRpcMethod.ListRequests}`: {\n if (keyring.listRequests === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ListRequestsRequestStruct);\n return keyring.listRequests();\n }\n\n case `${KeyringRpcMethod.GetRequest}`: {\n if (keyring.getRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, GetRequestRequestStruct);\n return keyring.getRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.SubmitRequest}`: {\n assert(request, SubmitRequestRequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n case `${KeyringRpcMethod.ApproveRequest}`: {\n if (keyring.approveRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ApproveRequestRequestStruct);\n return keyring.approveRequest(request.params.id, request.params.data);\n }\n\n case `${KeyringRpcMethod.RejectRequest}`: {\n if (keyring.rejectRequest === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, RejectRequestRequestStruct);\n return keyring.rejectRequest(request.params.id);\n }\n\n case `${KeyringRpcMethod.Batch}`: {\n assert(request, BatchRequestStruct);\n\n if (handleBatch) {\n return handleBatch(request);\n }\n\n // If there's no custom handler for batched requests, we just fallback by executing them 1\n // by 1.\n const responses: Json = await Promise.all(\n request.params.requests.map(async (subRequest) => {\n try {\n let response = await dispatchRequest(keyring, subRequest);\n\n // For batch responses, we \"convert\" any `void` return type to null so it can\n // be casted to a normal `Json` type.\n if (response === undefined) {\n response = null;\n }\n\n return { response };\n } catch (error) {\n return { error: (error as Error).message };\n }\n }),\n );\n\n return responses;\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring JSON-RPC requests\n * in an Accounts Snap.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @param handleBatch - Batched requests handler.\n * @returns A promise that resolves to the keyring response.\n * @example\n * ```ts\n * export const onKeyringRequest: OnKeyringRequestHandler = async ({\n * origin,\n * request,\n * }) => {\n * return await handleKeyringRequest(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequest(\n keyring: Keyring,\n request: JsonRpcRequest,\n handleBatch?: (batched: BatchRequest) => BatchResponse,\n): Promise<Json | void> {\n try {\n return await dispatchRequest(keyring, request, handleBatch);\n } catch (error) {\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring request';\n\n throw new Error(message);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/keyring-snap-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0-855692d",
|
|
4
4
|
"description": "MetaMask Keyring Snap SDK",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"metamask",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"test:watch": "jest --watch"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@metamask/keyring-api": "
|
|
48
|
+
"@metamask/keyring-api": "21.0.0",
|
|
49
49
|
"@metamask/keyring-utils": "3.1.0",
|
|
50
50
|
"@metamask/snaps-sdk": "^9.0.0",
|
|
51
51
|
"@metamask/superstruct": "^3.1.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@lavamoat/allow-scripts": "^3.2.1",
|
|
57
57
|
"@lavamoat/preinstall-always-fail": "^2.1.0",
|
|
58
58
|
"@metamask/auto-changelog": "^3.4.4",
|
|
59
|
-
"@metamask/keyring-api": "
|
|
59
|
+
"@metamask/keyring-api": "21.0.0",
|
|
60
60
|
"@metamask/providers": "^19.0.0",
|
|
61
61
|
"@ts-bridge/cli": "^0.6.3",
|
|
62
62
|
"@types/jest": "^29.5.12",
|