@metamask-previews/keyring-snap-sdk 7.0.0-45ee2b8 → 7.0.0-582d075

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/dist/index.cjs CHANGED
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./rpc-handler.cjs"), exports);
18
18
  __exportStar(require("./snap-utils.cjs"), exports);
19
19
  __exportStar(require("./time.cjs"), exports);
20
+ __exportStar(require("./methods.cjs"), exports);
20
21
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAA8B;AAC9B,mDAA6B;AAC7B,6CAAuB","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAA8B;AAC9B,mDAA6B;AAC7B,6CAAuB;AACvB,gDAA0B","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./rpc-handler.cjs";
2
2
  export * from "./snap-utils.cjs";
3
3
  export * from "./time.cjs";
4
+ export * from "./methods.cjs";
4
5
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./rpc-handler.mjs";
2
2
  export * from "./snap-utils.mjs";
3
3
  export * from "./time.mjs";
4
+ export * from "./methods.mjs";
4
5
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./rpc-handler.mjs";
2
2
  export * from "./snap-utils.mjs";
3
3
  export * from "./time.mjs";
4
+ export * from "./methods.mjs";
4
5
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\n"]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSelectedAccountsResponseStruct = exports.GetSelectedAccountsRequestStruct = exports.SnapManageAccountsMethod = void 0;
4
+ const superstruct_1 = require("@metamask/superstruct");
5
+ var SnapManageAccountsMethod;
6
+ (function (SnapManageAccountsMethod) {
7
+ SnapManageAccountsMethod["GetSelectedAccounts"] = "getSelectedAccounts";
8
+ })(SnapManageAccountsMethod || (exports.SnapManageAccountsMethod = SnapManageAccountsMethod = {}));
9
+ exports.GetSelectedAccountsRequestStruct = (0, superstruct_1.object)({
10
+ method: (0, superstruct_1.literal)(SnapManageAccountsMethod.GetSelectedAccounts),
11
+ });
12
+ exports.GetSelectedAccountsResponseStruct = (0, superstruct_1.array)((0, superstruct_1.string)());
13
+ //# sourceMappingURL=methods.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.cjs","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":";;;AAAA,uDAM+B;AAE/B,IAAY,wBAEX;AAFD,WAAY,wBAAwB;IAClC,uEAA2C,CAAA;AAC7C,CAAC,EAFW,wBAAwB,wCAAxB,wBAAwB,QAEnC;AAEY,QAAA,gCAAgC,GAAG,IAAA,oBAAM,EAAC;IACrD,MAAM,EAAE,IAAA,qBAAO,EAAC,wBAAwB,CAAC,mBAAmB,CAAC;CAC9D,CAAC,CAAC;AAEU,QAAA,iCAAiC,GAAG,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC,CAAC","sourcesContent":["import {\n array,\n literal,\n object,\n string,\n type Infer,\n} from '@metamask/superstruct';\n\nexport enum SnapManageAccountsMethod {\n GetSelectedAccounts = 'getSelectedAccounts',\n}\n\nexport const GetSelectedAccountsRequestStruct = object({\n method: literal(SnapManageAccountsMethod.GetSelectedAccounts),\n});\n\nexport const GetSelectedAccountsResponseStruct = array(string());\n\nexport type GetSelectedAccountsResponse = Infer<\n typeof GetSelectedAccountsResponseStruct\n>;\n"]}
@@ -0,0 +1,12 @@
1
+ import { type Infer } from "@metamask/superstruct";
2
+ export declare enum SnapManageAccountsMethod {
3
+ GetSelectedAccounts = "getSelectedAccounts"
4
+ }
5
+ export declare const GetSelectedAccountsRequestStruct: import("@metamask/superstruct").Struct<{
6
+ method: SnapManageAccountsMethod;
7
+ }, {
8
+ method: import("@metamask/superstruct").Struct<SnapManageAccountsMethod, SnapManageAccountsMethod>;
9
+ }>;
10
+ export declare const GetSelectedAccountsResponseStruct: import("@metamask/superstruct").Struct<string[], import("@metamask/superstruct").Struct<string, null>>;
11
+ export type GetSelectedAccountsResponse = Infer<typeof GetSelectedAccountsResponseStruct>;
12
+ //# sourceMappingURL=methods.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.cts","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,KAAK,EACX,8BAA8B;AAE/B,oBAAY,wBAAwB;IAClC,mBAAmB,wBAAwB;CAC5C;AAED,eAAO,MAAM,gCAAgC;;;;EAE3C,CAAC;AAEH,eAAO,MAAM,iCAAiC,wGAAkB,CAAC;AAEjE,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAC7C,OAAO,iCAAiC,CACzC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Infer } from "@metamask/superstruct";
2
+ export declare enum SnapManageAccountsMethod {
3
+ GetSelectedAccounts = "getSelectedAccounts"
4
+ }
5
+ export declare const GetSelectedAccountsRequestStruct: import("@metamask/superstruct").Struct<{
6
+ method: SnapManageAccountsMethod;
7
+ }, {
8
+ method: import("@metamask/superstruct").Struct<SnapManageAccountsMethod, SnapManageAccountsMethod>;
9
+ }>;
10
+ export declare const GetSelectedAccountsResponseStruct: import("@metamask/superstruct").Struct<string[], import("@metamask/superstruct").Struct<string, null>>;
11
+ export type GetSelectedAccountsResponse = Infer<typeof GetSelectedAccountsResponseStruct>;
12
+ //# sourceMappingURL=methods.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.mts","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,KAAK,EACX,8BAA8B;AAE/B,oBAAY,wBAAwB;IAClC,mBAAmB,wBAAwB;CAC5C;AAED,eAAO,MAAM,gCAAgC;;;;EAE3C,CAAC;AAEH,eAAO,MAAM,iCAAiC,wGAAkB,CAAC;AAEjE,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAC7C,OAAO,iCAAiC,CACzC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { array, literal, object, string } from "@metamask/superstruct";
2
+ export var SnapManageAccountsMethod;
3
+ (function (SnapManageAccountsMethod) {
4
+ SnapManageAccountsMethod["GetSelectedAccounts"] = "getSelectedAccounts";
5
+ })(SnapManageAccountsMethod || (SnapManageAccountsMethod = {}));
6
+ export const GetSelectedAccountsRequestStruct = object({
7
+ method: literal(SnapManageAccountsMethod.GetSelectedAccounts),
8
+ });
9
+ export const GetSelectedAccountsResponseStruct = array(string());
10
+ //# sourceMappingURL=methods.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.mjs","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EAEP,8BAA8B;AAE/B,MAAM,CAAN,IAAY,wBAEX;AAFD,WAAY,wBAAwB;IAClC,uEAA2C,CAAA;AAC7C,CAAC,EAFW,wBAAwB,KAAxB,wBAAwB,QAEnC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;IACrD,MAAM,EAAE,OAAO,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC","sourcesContent":["import {\n array,\n literal,\n object,\n string,\n type Infer,\n} from '@metamask/superstruct';\n\nexport enum SnapManageAccountsMethod {\n GetSelectedAccounts = 'getSelectedAccounts',\n}\n\nexport const GetSelectedAccountsRequestStruct = object({\n method: literal(SnapManageAccountsMethod.GetSelectedAccounts),\n});\n\nexport const GetSelectedAccountsResponseStruct = array(string());\n\nexport type GetSelectedAccountsResponse = Infer<\n typeof GetSelectedAccountsResponseStruct\n>;\n"]}
@@ -20,10 +20,9 @@ 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.
24
23
  * @returns A promise that resolves to the keyring response.
25
24
  */
26
- async function dispatchRequest(keyring, request, handleBatch) {
25
+ async function dispatchRequest(keyring, request) {
27
26
  // We first have to make sure that the request is a valid JSON-RPC request so
28
27
  // we can check its method name.
29
28
  (0, superstruct_1.assert)(request, keyring_utils_1.JsonRpcRequestStruct);
@@ -75,8 +74,15 @@ async function dispatchRequest(keyring, request, handleBatch) {
75
74
  (0, superstruct_1.assert)(request, keyring_api_1.ResolveAccountAddressRequestStruct);
76
75
  return keyring.resolveAccountAddress(request.params.scope, request.params.request);
77
76
  }
77
+ case `${keyring_api_1.KeyringRpcMethod.SetSelectedAccounts}`: {
78
+ if (keyring.setSelectedAccounts === undefined) {
79
+ throw new MethodNotSupportedError(request.method);
80
+ }
81
+ (0, superstruct_1.assert)(request, keyring_api_1.SetSelectedAccountsRequestStruct);
82
+ return keyring.setSelectedAccounts(request.params.accounts);
83
+ }
78
84
  case `${keyring_api_1.KeyringRpcMethod.FilterAccountChains}`: {
79
- (0, superstruct_1.assert)(request, keyring_api_1.FilterAccountChainsRequestStruct);
85
+ (0, superstruct_1.assert)(request, keyring_api_1.FilterAccountChainsStruct);
80
86
  return keyring.filterAccountChains(request.params.id, request.params.chains);
81
87
  }
82
88
  case `${keyring_api_1.KeyringRpcMethod.UpdateAccount}`: {
@@ -126,29 +132,6 @@ async function dispatchRequest(keyring, request, handleBatch) {
126
132
  (0, superstruct_1.assert)(request, keyring_api_1.RejectRequestRequestStruct);
127
133
  return keyring.rejectRequest(request.params.id);
128
134
  }
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
- }
152
135
  default: {
153
136
  throw new MethodNotSupportedError(request.method);
154
137
  }
@@ -162,7 +145,6 @@ async function dispatchRequest(keyring, request, handleBatch) {
162
145
  *
163
146
  * @param keyring - Keyring instance.
164
147
  * @param request - Keyring JSON-RPC request.
165
- * @param handleBatch - Batched requests handler.
166
148
  * @returns A promise that resolves to the keyring response.
167
149
  * @example
168
150
  * ```ts
@@ -174,9 +156,9 @@ async function dispatchRequest(keyring, request, handleBatch) {
174
156
  * };
175
157
  * ```
176
158
  */
177
- async function handleKeyringRequest(keyring, request, handleBatch) {
159
+ async function handleKeyringRequest(keyring, request) {
178
160
  try {
179
- return await dispatchRequest(keyring, request, handleBatch);
161
+ return await dispatchRequest(keyring, request);
180
162
  }
181
163
  catch (error) {
182
164
  const message = error instanceof Error && typeof error.message === 'string'
@@ -1 +1 @@
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"]}
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 SetSelectedAccountsRequestStruct,\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.SetSelectedAccounts}`: {\n if (keyring.setSelectedAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, SetSelectedAccountsRequestStruct);\n return keyring.setSelectedAccounts(request.params.accounts);\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,4 +1,4 @@
1
- import type { Keyring, BatchRequest, BatchResponse } from "@metamask/keyring-api";
1
+ import type { Keyring } from "@metamask/keyring-api";
2
2
  import type { JsonRpcRequest } from "@metamask/keyring-utils";
3
3
  import type { Json } from "@metamask/utils";
4
4
  /**
@@ -15,7 +15,6 @@ 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.
19
18
  * @returns A promise that resolves to the keyring response.
20
19
  * @example
21
20
  * ```ts
@@ -27,5 +26,5 @@ export declare class MethodNotSupportedError extends Error {
27
26
  * };
28
27
  * ```
29
28
  */
30
- export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest, handleBatch?: (batched: BatchRequest) => BatchResponse): Promise<Json | void>;
29
+ export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
31
30
  //# 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,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"}
1
+ {"version":3,"file":"rpc-handler.d.cts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,8BAA8B;AAsBrD,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;AAoKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB"}
@@ -1,4 +1,4 @@
1
- import type { Keyring, BatchRequest, BatchResponse } from "@metamask/keyring-api";
1
+ import type { Keyring } from "@metamask/keyring-api";
2
2
  import type { JsonRpcRequest } from "@metamask/keyring-utils";
3
3
  import type { Json } from "@metamask/utils";
4
4
  /**
@@ -15,7 +15,6 @@ 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.
19
18
  * @returns A promise that resolves to the keyring response.
20
19
  * @example
21
20
  * ```ts
@@ -27,5 +26,5 @@ export declare class MethodNotSupportedError extends Error {
27
26
  * };
28
27
  * ```
29
28
  */
30
- export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest, handleBatch?: (batched: BatchRequest) => BatchResponse): Promise<Json | void>;
29
+ export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
31
30
  //# 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,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"}
1
+ {"version":3,"file":"rpc-handler.d.mts","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,8BAA8B;AAsBrD,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;AAoKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB"}
@@ -1,4 +1,4 @@
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";
1
+ import { KeyringRpcMethod, GetAccountRequestStruct, CreateAccountRequestStruct, ListAccountTransactionsRequestStruct, ApproveRequestRequestStruct, DeleteAccountRequestStruct, ExportAccountRequestStruct, GetRequestRequestStruct, RejectRequestRequestStruct, SubmitRequestRequestStruct, UpdateAccountRequestStruct, FilterAccountChainsStruct, ListAccountsRequestStruct, ListRequestsRequestStruct, GetAccountBalancesRequestStruct, ListAccountAssetsRequestStruct, ResolveAccountAddressRequestStruct, DiscoverAccountsRequestStruct, SetSelectedAccountsRequestStruct } from "@metamask/keyring-api";
2
2
  import { JsonRpcRequestStruct } from "@metamask/keyring-utils";
3
3
  import { assert } from "@metamask/superstruct";
4
4
  /**
@@ -15,10 +15,9 @@ 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.
19
18
  * @returns A promise that resolves to the keyring response.
20
19
  */
21
- async function dispatchRequest(keyring, request, handleBatch) {
20
+ async function dispatchRequest(keyring, request) {
22
21
  // We first have to make sure that the request is a valid JSON-RPC request so
23
22
  // we can check its method name.
24
23
  assert(request, JsonRpcRequestStruct);
@@ -70,8 +69,15 @@ async function dispatchRequest(keyring, request, handleBatch) {
70
69
  assert(request, ResolveAccountAddressRequestStruct);
71
70
  return keyring.resolveAccountAddress(request.params.scope, request.params.request);
72
71
  }
72
+ case `${KeyringRpcMethod.SetSelectedAccounts}`: {
73
+ if (keyring.setSelectedAccounts === undefined) {
74
+ throw new MethodNotSupportedError(request.method);
75
+ }
76
+ assert(request, SetSelectedAccountsRequestStruct);
77
+ return keyring.setSelectedAccounts(request.params.accounts);
78
+ }
73
79
  case `${KeyringRpcMethod.FilterAccountChains}`: {
74
- assert(request, FilterAccountChainsRequestStruct);
80
+ assert(request, FilterAccountChainsStruct);
75
81
  return keyring.filterAccountChains(request.params.id, request.params.chains);
76
82
  }
77
83
  case `${KeyringRpcMethod.UpdateAccount}`: {
@@ -121,29 +127,6 @@ async function dispatchRequest(keyring, request, handleBatch) {
121
127
  assert(request, RejectRequestRequestStruct);
122
128
  return keyring.rejectRequest(request.params.id);
123
129
  }
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
- }
147
130
  default: {
148
131
  throw new MethodNotSupportedError(request.method);
149
132
  }
@@ -157,7 +140,6 @@ async function dispatchRequest(keyring, request, handleBatch) {
157
140
  *
158
141
  * @param keyring - Keyring instance.
159
142
  * @param request - Keyring JSON-RPC request.
160
- * @param handleBatch - Batched requests handler.
161
143
  * @returns A promise that resolves to the keyring response.
162
144
  * @example
163
145
  * ```ts
@@ -169,9 +151,9 @@ async function dispatchRequest(keyring, request, handleBatch) {
169
151
  * };
170
152
  * ```
171
153
  */
172
- export async function handleKeyringRequest(keyring, request, handleBatch) {
154
+ export async function handleKeyringRequest(keyring, request) {
173
155
  try {
174
- return await dispatchRequest(keyring, request, handleBatch);
156
+ return await dispatchRequest(keyring, request);
175
157
  }
176
158
  catch (error) {
177
159
  const message = error instanceof Error && typeof error.message === 'string'
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"rpc-handler.mjs","sourceRoot":"","sources":["../src/rpc-handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAC1B,oCAAoC,EACpC,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,kCAAkC,EAClC,6BAA6B,EAC7B,gCAAgC,EACjC,8BAA8B;AAE/B,OAAO,EAAE,oBAAoB,EAAE,gCAAgC;AAC/D,OAAO,EAAE,MAAM,EAAE,8BAA8B;AAG/C;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,MAAc;QACxB,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,eAAe,CAC5B,OAAgB,EAChB,OAAuB;IAEvB,6EAA6E;IAC7E,gCAAgC;IAChC,MAAM,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAEtC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,gBAAgB,CAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAC5B,OAAO,CAAC,MAAM,CAAC,UAAU,CAC1B,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,uBAAuB,CACpC,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,MAAM,CAAC,UAAU,CAC1B,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC5C,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;YACjD,OAAO,OAAO,CAAC,kBAAkB,CAC/B,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CACtB,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBAChD,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;YACpD,OAAO,OAAO,CAAC,qBAAqB,CAClC,OAAO,CAAC,MAAM,CAAC,KAAK,EACpB,OAAO,CAAC,MAAM,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBAC9C,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;YAClD,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,mBAAmB,CAChC,OAAO,CAAC,MAAM,CAAC,EAAE,EACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CACtB,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;YAC7C,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,GAAG,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,OAAuB;IAEvB,IAAI,CAAC;QACH,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACzD,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,8DAA8D,CAAC;QAErE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC","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 SetSelectedAccountsRequestStruct,\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.SetSelectedAccounts}`: {\n if (keyring.setSelectedAccounts === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, SetSelectedAccountsRequestStruct);\n return keyring.setSelectedAccounts(request.params.accounts);\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,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.emitSnapKeyringEvent = emitSnapKeyringEvent;
4
+ exports.getSelectedAccounts = getSelectedAccounts;
5
+ const superstruct_1 = require("@metamask/superstruct");
6
+ const methods_1 = require("./methods.cjs");
4
7
  /**
5
8
  * Emit a keyring event from a snap.
6
9
  *
@@ -17,4 +20,20 @@ async function emitSnapKeyringEvent(snap, event, data) {
17
20
  },
18
21
  });
19
22
  }
23
+ /**
24
+ * Get the selected accounts from a snap.
25
+ *
26
+ * @param snap - The global snap object.
27
+ * @returns The selected accounts.
28
+ */
29
+ async function getSelectedAccounts(snap) {
30
+ const response = await snap.request({
31
+ method: 'snap_manageAccounts',
32
+ params: {
33
+ method: methods_1.SnapManageAccountsMethod.GetSelectedAccounts,
34
+ },
35
+ });
36
+ (0, superstruct_1.assert)(response, methods_1.GetSelectedAccountsResponseStruct);
37
+ return response;
38
+ }
20
39
  //# sourceMappingURL=snap-utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"snap-utils.cjs","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":";;AAUA,oDAYC;AAnBD;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,IAAmB,EACnB,KAAY,EACZ,IAAgC;IAEhC,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE;SACpB;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { KeyringEvent, KeyringEventPayload } from '@metamask/keyring-api';\nimport type { SnapsProvider } from '@metamask/snaps-sdk';\n\n/**\n * Emit a keyring event from a snap.\n *\n * @param snap - The global snap object.\n * @param event - The event name.\n * @param data - The event data.\n */\nexport async function emitSnapKeyringEvent<Event extends KeyringEvent>(\n snap: SnapsProvider,\n event: Event,\n data: KeyringEventPayload<Event>,\n): Promise<void> {\n await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: event,\n params: { ...data },\n },\n });\n}\n"]}
1
+ {"version":3,"file":"snap-utils.cjs","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":";;AAoBA,oDAYC;AAQD,kDAWC;AA9CD,uDAA+C;AAE/C,2CAImB;AAEnB;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,IAAmB,EACnB,KAAY,EACZ,IAAgC;IAEhC,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE;SACpB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,mBAAmB,CACvC,IAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,kCAAwB,CAAC,mBAAmB;SACrD;KACF,CAAC,CAAC;IACH,IAAA,oBAAM,EAAC,QAAQ,EAAE,2CAAiC,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import {\n type KeyringEvent,\n type KeyringEventPayload,\n} from '@metamask/keyring-api';\nimport type { SnapsProvider } from '@metamask/snaps-sdk';\nimport { assert } from '@metamask/superstruct';\n\nimport {\n type GetSelectedAccountsResponse,\n GetSelectedAccountsResponseStruct,\n SnapManageAccountsMethod,\n} from './methods';\n\n/**\n * Emit a keyring event from a snap.\n *\n * @param snap - The global snap object.\n * @param event - The event name.\n * @param data - The event data.\n */\nexport async function emitSnapKeyringEvent<Event extends KeyringEvent>(\n snap: SnapsProvider,\n event: Event,\n data: KeyringEventPayload<Event>,\n): Promise<void> {\n await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: event,\n params: { ...data },\n },\n });\n}\n\n/**\n * Get the selected accounts from a snap.\n *\n * @param snap - The global snap object.\n * @returns The selected accounts.\n */\nexport async function getSelectedAccounts(\n snap: SnapsProvider,\n): Promise<GetSelectedAccountsResponse> {\n const response = await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: SnapManageAccountsMethod.GetSelectedAccounts,\n },\n });\n assert(response, GetSelectedAccountsResponseStruct);\n return response;\n}\n"]}
@@ -1,5 +1,6 @@
1
- import type { KeyringEvent, KeyringEventPayload } from "@metamask/keyring-api";
1
+ import { type KeyringEvent, type KeyringEventPayload } from "@metamask/keyring-api";
2
2
  import type { SnapsProvider } from "@metamask/snaps-sdk";
3
+ import { type GetSelectedAccountsResponse } from "./methods.cjs";
3
4
  /**
4
5
  * Emit a keyring event from a snap.
5
6
  *
@@ -8,4 +9,11 @@ import type { SnapsProvider } from "@metamask/snaps-sdk";
8
9
  * @param data - The event data.
9
10
  */
10
11
  export declare function emitSnapKeyringEvent<Event extends KeyringEvent>(snap: SnapsProvider, event: Event, data: KeyringEventPayload<Event>): Promise<void>;
12
+ /**
13
+ * Get the selected accounts from a snap.
14
+ *
15
+ * @param snap - The global snap object.
16
+ * @returns The selected accounts.
17
+ */
18
+ export declare function getSelectedAccounts(snap: SnapsProvider): Promise<GetSelectedAccountsResponse>;
11
19
  //# sourceMappingURL=snap-utils.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snap-utils.d.cts","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B;AAEzD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EACnE,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"snap-utils.d.cts","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,8BAA8B;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B;AAGzD,OAAO,EACL,KAAK,2BAA2B,EAGjC,sBAAkB;AAEnB;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EACnE,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,2BAA2B,CAAC,CAStC"}
@@ -1,5 +1,6 @@
1
- import type { KeyringEvent, KeyringEventPayload } from "@metamask/keyring-api";
1
+ import { type KeyringEvent, type KeyringEventPayload } from "@metamask/keyring-api";
2
2
  import type { SnapsProvider } from "@metamask/snaps-sdk";
3
+ import { type GetSelectedAccountsResponse } from "./methods.mjs";
3
4
  /**
4
5
  * Emit a keyring event from a snap.
5
6
  *
@@ -8,4 +9,11 @@ import type { SnapsProvider } from "@metamask/snaps-sdk";
8
9
  * @param data - The event data.
9
10
  */
10
11
  export declare function emitSnapKeyringEvent<Event extends KeyringEvent>(snap: SnapsProvider, event: Event, data: KeyringEventPayload<Event>): Promise<void>;
12
+ /**
13
+ * Get the selected accounts from a snap.
14
+ *
15
+ * @param snap - The global snap object.
16
+ * @returns The selected accounts.
17
+ */
18
+ export declare function getSelectedAccounts(snap: SnapsProvider): Promise<GetSelectedAccountsResponse>;
11
19
  //# sourceMappingURL=snap-utils.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snap-utils.d.mts","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B;AAEzD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EACnE,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"snap-utils.d.mts","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,8BAA8B;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B;AAGzD,OAAO,EACL,KAAK,2BAA2B,EAGjC,sBAAkB;AAEnB;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EACnE,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,2BAA2B,CAAC,CAStC"}
@@ -1,3 +1,5 @@
1
+ import { assert } from "@metamask/superstruct";
2
+ import { GetSelectedAccountsResponseStruct, SnapManageAccountsMethod } from "./methods.mjs";
1
3
  /**
2
4
  * Emit a keyring event from a snap.
3
5
  *
@@ -14,4 +16,20 @@ export async function emitSnapKeyringEvent(snap, event, data) {
14
16
  },
15
17
  });
16
18
  }
19
+ /**
20
+ * Get the selected accounts from a snap.
21
+ *
22
+ * @param snap - The global snap object.
23
+ * @returns The selected accounts.
24
+ */
25
+ export async function getSelectedAccounts(snap) {
26
+ const response = await snap.request({
27
+ method: 'snap_manageAccounts',
28
+ params: {
29
+ method: SnapManageAccountsMethod.GetSelectedAccounts,
30
+ },
31
+ });
32
+ assert(response, GetSelectedAccountsResponseStruct);
33
+ return response;
34
+ }
17
35
  //# sourceMappingURL=snap-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"snap-utils.mjs","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAmB,EACnB,KAAY,EACZ,IAAgC;IAEhC,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE;SACpB;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { KeyringEvent, KeyringEventPayload } from '@metamask/keyring-api';\nimport type { SnapsProvider } from '@metamask/snaps-sdk';\n\n/**\n * Emit a keyring event from a snap.\n *\n * @param snap - The global snap object.\n * @param event - The event name.\n * @param data - The event data.\n */\nexport async function emitSnapKeyringEvent<Event extends KeyringEvent>(\n snap: SnapsProvider,\n event: Event,\n data: KeyringEventPayload<Event>,\n): Promise<void> {\n await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: event,\n params: { ...data },\n },\n });\n}\n"]}
1
+ {"version":3,"file":"snap-utils.mjs","sourceRoot":"","sources":["../src/snap-utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,8BAA8B;AAE/C,OAAO,EAEL,iCAAiC,EACjC,wBAAwB,EACzB,sBAAkB;AAEnB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAmB,EACnB,KAAY,EACZ,IAAgC;IAEhC,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE;SACpB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;QAClC,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE;YACN,MAAM,EAAE,wBAAwB,CAAC,mBAAmB;SACrD;KACF,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import {\n type KeyringEvent,\n type KeyringEventPayload,\n} from '@metamask/keyring-api';\nimport type { SnapsProvider } from '@metamask/snaps-sdk';\nimport { assert } from '@metamask/superstruct';\n\nimport {\n type GetSelectedAccountsResponse,\n GetSelectedAccountsResponseStruct,\n SnapManageAccountsMethod,\n} from './methods';\n\n/**\n * Emit a keyring event from a snap.\n *\n * @param snap - The global snap object.\n * @param event - The event name.\n * @param data - The event data.\n */\nexport async function emitSnapKeyringEvent<Event extends KeyringEvent>(\n snap: SnapsProvider,\n event: Event,\n data: KeyringEventPayload<Event>,\n): Promise<void> {\n await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: event,\n params: { ...data },\n },\n });\n}\n\n/**\n * Get the selected accounts from a snap.\n *\n * @param snap - The global snap object.\n * @returns The selected accounts.\n */\nexport async function getSelectedAccounts(\n snap: SnapsProvider,\n): Promise<GetSelectedAccountsResponse> {\n const response = await snap.request({\n method: 'snap_manageAccounts',\n params: {\n method: SnapManageAccountsMethod.GetSelectedAccounts,\n },\n });\n assert(response, GetSelectedAccountsResponseStruct);\n return response;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/keyring-snap-sdk",
3
- "version": "7.0.0-45ee2b8",
3
+ "version": "7.0.0-582d075",
4
4
  "description": "MetaMask Keyring Snap SDK",
5
5
  "keywords": [
6
6
  "metamask",