@metamask-previews/keyring-snap-sdk 8.0.0-018fb62 → 8.0.0-5c366be

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 CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - Add `handleKeyringRequestV2` function for dispatching keyring v2 JSON-RPC requests ([#408](https://github.com/MetaMask/accounts/pull/408))
13
+
10
14
  ### Changed
11
15
 
12
16
  - Bump `@metamask/utils` from `^11.1.0` to `^11.10.0` ([#489](https://github.com/MetaMask/accounts/pull/489))
package/dist/index.cjs CHANGED
@@ -18,4 +18,5 @@ __exportStar(require("./rpc-handler.cjs"), exports);
18
18
  __exportStar(require("./snap-utils.cjs"), exports);
19
19
  __exportStar(require("./time.cjs"), exports);
20
20
  __exportStar(require("./methods.cjs"), exports);
21
+ __exportStar(require("./v2/index.cjs"), exports);
21
22
  //# 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;AACvB,gDAA0B","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAA8B;AAC9B,mDAA6B;AAC7B,6CAAuB;AACvB,gDAA0B;AAC1B,iDAAqB","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\nexport * from './v2';\n"]}
package/dist/index.d.cts CHANGED
@@ -2,4 +2,5 @@ export * from "./rpc-handler.cjs";
2
2
  export * from "./snap-utils.cjs";
3
3
  export * from "./time.cjs";
4
4
  export * from "./methods.cjs";
5
+ export * from "./v2/index.cjs";
5
6
  //# 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;AACvB,8BAA0B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B;AAC1B,+BAAqB"}
package/dist/index.d.mts CHANGED
@@ -2,4 +2,5 @@ export * from "./rpc-handler.mjs";
2
2
  export * from "./snap-utils.mjs";
3
3
  export * from "./time.mjs";
4
4
  export * from "./methods.mjs";
5
+ export * from "./v2/index.mjs";
5
6
  //# 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;AACvB,8BAA0B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B;AAC1B,+BAAqB"}
package/dist/index.mjs CHANGED
@@ -2,4 +2,5 @@ export * from "./rpc-handler.mjs";
2
2
  export * from "./snap-utils.mjs";
3
3
  export * from "./time.mjs";
4
4
  export * from "./methods.mjs";
5
+ export * from "./v2/index.mjs";
5
6
  //# 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;AACvB,8BAA0B","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kCAA8B;AAC9B,iCAA6B;AAC7B,2BAAuB;AACvB,8BAA0B;AAC1B,+BAAqB","sourcesContent":["export * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './time';\nexport * from './methods';\nexport * from './v2';\n"]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./rpc-handler.cjs"), exports);
18
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAA8B","sourcesContent":["export * from './rpc-handler';\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./rpc-handler.cjs";
2
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,kCAA8B"}
@@ -0,0 +1,2 @@
1
+ export * from "./rpc-handler.mjs";
2
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,kCAA8B"}
@@ -0,0 +1,2 @@
1
+ export * from "./rpc-handler.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,kCAA8B","sourcesContent":["export * from './rpc-handler';\n"]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleKeyringRequestV2 = handleKeyringRequestV2;
4
+ const keyring_api_1 = require("@metamask/keyring-api");
5
+ const keyring_utils_1 = require("@metamask/keyring-utils");
6
+ const superstruct_1 = require("@metamask/superstruct");
7
+ const errors_1 = require("../errors.cjs");
8
+ const rpc_handler_1 = require("../rpc-handler.cjs");
9
+ // ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why.
10
+ /* eslint-disable @typescript-eslint/only-throw-error */
11
+ /**
12
+ * Inner function that dispatches JSON-RPC request to the associated Keyring
13
+ * methods.
14
+ *
15
+ * @param keyring - Keyring instance.
16
+ * @param request - Keyring JSON-RPC request.
17
+ * @returns A promise that resolves to the keyring response.
18
+ */
19
+ async function dispatchKeyringRequestV2(keyring, request) {
20
+ // We first have to make sure that the request is a valid JSON-RPC request so
21
+ // we can check its method name.
22
+ (0, superstruct_1.assert)(request, keyring_utils_1.JsonRpcRequestStruct);
23
+ switch (request.method) {
24
+ case `${keyring_api_1.KeyringRpcV2Method.GetAccounts}`: {
25
+ (0, superstruct_1.assert)(request, keyring_api_1.GetAccountsV2RequestStruct);
26
+ return keyring.getAccounts();
27
+ }
28
+ case `${keyring_api_1.KeyringRpcV2Method.GetAccount}`: {
29
+ (0, superstruct_1.assert)(request, keyring_api_1.GetAccountV2RequestStruct);
30
+ return keyring.getAccount(request.params.id);
31
+ }
32
+ case `${keyring_api_1.KeyringRpcV2Method.CreateAccounts}`: {
33
+ (0, superstruct_1.assert)(request, keyring_api_1.CreateAccountsV2RequestStruct);
34
+ return keyring.createAccounts(request.params);
35
+ }
36
+ case `${keyring_api_1.KeyringRpcV2Method.DeleteAccount}`: {
37
+ (0, superstruct_1.assert)(request, keyring_api_1.DeleteAccountV2RequestStruct);
38
+ return keyring.deleteAccount(request.params.id);
39
+ }
40
+ case `${keyring_api_1.KeyringRpcV2Method.ExportAccount}`: {
41
+ if (keyring.exportAccount === undefined) {
42
+ throw new rpc_handler_1.MethodNotSupportedError(request.method);
43
+ }
44
+ (0, superstruct_1.assert)(request, keyring_api_1.ExportAccountV2RequestStruct);
45
+ return keyring.exportAccount(request.params.id, request.params.options);
46
+ }
47
+ case `${keyring_api_1.KeyringRpcV2Method.SubmitRequest}`: {
48
+ (0, superstruct_1.assert)(request, keyring_api_1.SubmitRequestV2RequestStruct);
49
+ return keyring.submitRequest(request.params);
50
+ }
51
+ default: {
52
+ throw new rpc_handler_1.MethodNotSupportedError(request.method);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Handles a keyring (v2) JSON-RPC request.
58
+ *
59
+ * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests
60
+ * in an Accounts Snap.
61
+ *
62
+ * @param keyring - Keyring instance.
63
+ * @param request - Keyring JSON-RPC request.
64
+ * @returns A promise that resolves to the keyring response.
65
+ * @example
66
+ * ```ts
67
+ * export const onKeyringRequest: OnKeyringRequestHandler = async ({
68
+ * origin,
69
+ * request,
70
+ * }) => {
71
+ * return await handleKeyringRequestV2(keyring, request);
72
+ * };
73
+ * ```
74
+ */
75
+ async function handleKeyringRequestV2(keyring, request) {
76
+ try {
77
+ return await dispatchKeyringRequestV2(keyring, request);
78
+ }
79
+ catch (error) {
80
+ if ((0, errors_1.isSnapError)(error)) {
81
+ throw error;
82
+ }
83
+ const message = error instanceof Error && typeof error.message === 'string'
84
+ ? error.message
85
+ : 'An unknown error occurred while handling the keyring (v2) request';
86
+ throw new Error(message);
87
+ }
88
+ }
89
+ //# sourceMappingURL=rpc-handler.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-handler.cjs","sourceRoot":"","sources":["../../src/v2/rpc-handler.ts"],"names":[],"mappings":";;AAgGA,wDAkBC;AAjHD,uDAQ+B;AAE/B,2DAA+D;AAC/D,uDAA+C;AAG/C,0CAAwC;AACxC,oDAAyD;AAEzD,mHAAmH;AACnH,wDAAwD;AAExD;;;;;;;GAOG;AACH,KAAK,UAAU,wBAAwB,CACrC,OAAkB,EAClB,OAAuB;IAEvB,6EAA6E;IAC7E,gCAAgC;IAChC,IAAA,oBAAM,EAAC,OAAO,EAAE,oCAAoB,CAAC,CAAC;IAEtC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,GAAG,gCAAkB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACzC,IAAA,oBAAM,EAAC,OAAO,EAAE,wCAA0B,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC;QAED,KAAK,GAAG,gCAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxC,IAAA,oBAAM,EAAC,OAAO,EAAE,uCAAyB,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,KAAK,GAAG,gCAAkB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC5C,IAAA,oBAAM,EAAC,OAAO,EAAE,2CAA6B,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,GAAG,gCAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAA,oBAAM,EAAC,OAAO,EAAE,0CAA4B,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,GAAG,gCAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,qCAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,IAAA,oBAAM,EAAC,OAAO,EAAE,0CAA4B,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,GAAG,gCAAkB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAA,oBAAM,EAAC,OAAO,EAAE,0CAA4B,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,qCAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAkB,EAClB,OAAuB;IAEvB,IAAI,CAAC;QACH,OAAO,MAAM,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,oBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACzD,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,mEAAmE,CAAC;QAE1E,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC","sourcesContent":["import type { KeyringV2 } from '@metamask/keyring-api';\nimport {\n KeyringRpcV2Method,\n GetAccountsV2RequestStruct,\n GetAccountV2RequestStruct,\n CreateAccountsV2RequestStruct,\n DeleteAccountV2RequestStruct,\n ExportAccountV2RequestStruct,\n SubmitRequestV2RequestStruct,\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\nimport { isSnapError } from '../errors';\nimport { MethodNotSupportedError } from '../rpc-handler';\n\n// ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why.\n/* eslint-disable @typescript-eslint/only-throw-error */\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 dispatchKeyringRequestV2(\n keyring: KeyringV2,\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 `${KeyringRpcV2Method.GetAccounts}`: {\n assert(request, GetAccountsV2RequestStruct);\n return keyring.getAccounts();\n }\n\n case `${KeyringRpcV2Method.GetAccount}`: {\n assert(request, GetAccountV2RequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcV2Method.CreateAccounts}`: {\n assert(request, CreateAccountsV2RequestStruct);\n return keyring.createAccounts(request.params);\n }\n\n case `${KeyringRpcV2Method.DeleteAccount}`: {\n assert(request, DeleteAccountV2RequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcV2Method.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountV2RequestStruct);\n return keyring.exportAccount(request.params.id, request.params.options);\n }\n\n case `${KeyringRpcV2Method.SubmitRequest}`: {\n assert(request, SubmitRequestV2RequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring (v2) JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring (v2) 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 handleKeyringRequestV2(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequestV2(\n keyring: KeyringV2,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n try {\n return await dispatchKeyringRequestV2(keyring, request);\n } catch (error) {\n if (isSnapError(error)) {\n throw error;\n }\n\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring (v2) request';\n\n throw new Error(message);\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import type { KeyringV2 } from "@metamask/keyring-api";
2
+ import type { JsonRpcRequest } from "@metamask/keyring-utils";
3
+ import type { Json } from "@metamask/utils";
4
+ /**
5
+ * Handles a keyring (v2) JSON-RPC request.
6
+ *
7
+ * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests
8
+ * in an Accounts Snap.
9
+ *
10
+ * @param keyring - Keyring instance.
11
+ * @param request - Keyring JSON-RPC request.
12
+ * @returns A promise that resolves to the keyring response.
13
+ * @example
14
+ * ```ts
15
+ * export const onKeyringRequest: OnKeyringRequestHandler = async ({
16
+ * origin,
17
+ * request,
18
+ * }) => {
19
+ * return await handleKeyringRequestV2(keyring, request);
20
+ * };
21
+ * ```
22
+ */
23
+ export declare function handleKeyringRequestV2(keyring: KeyringV2, request: JsonRpcRequest): Promise<Json | void>;
24
+ //# sourceMappingURL=rpc-handler.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-handler.d.cts","sourceRoot":"","sources":["../../src/v2/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,8BAA8B;AAUvD,OAAO,KAAK,EAAE,cAAc,EAAE,gCAAgC;AAG9D,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAgE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAetB"}
@@ -0,0 +1,24 @@
1
+ import type { KeyringV2 } from "@metamask/keyring-api";
2
+ import type { JsonRpcRequest } from "@metamask/keyring-utils";
3
+ import type { Json } from "@metamask/utils";
4
+ /**
5
+ * Handles a keyring (v2) JSON-RPC request.
6
+ *
7
+ * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests
8
+ * in an Accounts Snap.
9
+ *
10
+ * @param keyring - Keyring instance.
11
+ * @param request - Keyring JSON-RPC request.
12
+ * @returns A promise that resolves to the keyring response.
13
+ * @example
14
+ * ```ts
15
+ * export const onKeyringRequest: OnKeyringRequestHandler = async ({
16
+ * origin,
17
+ * request,
18
+ * }) => {
19
+ * return await handleKeyringRequestV2(keyring, request);
20
+ * };
21
+ * ```
22
+ */
23
+ export declare function handleKeyringRequestV2(keyring: KeyringV2, request: JsonRpcRequest): Promise<Json | void>;
24
+ //# sourceMappingURL=rpc-handler.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-handler.d.mts","sourceRoot":"","sources":["../../src/v2/rpc-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,8BAA8B;AAUvD,OAAO,KAAK,EAAE,cAAc,EAAE,gCAAgC;AAG9D,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAgE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAetB"}
@@ -0,0 +1,86 @@
1
+ import { KeyringRpcV2Method, GetAccountsV2RequestStruct, GetAccountV2RequestStruct, CreateAccountsV2RequestStruct, DeleteAccountV2RequestStruct, ExportAccountV2RequestStruct, SubmitRequestV2RequestStruct } from "@metamask/keyring-api";
2
+ import { JsonRpcRequestStruct } from "@metamask/keyring-utils";
3
+ import { assert } from "@metamask/superstruct";
4
+ import { isSnapError } from "../errors.mjs";
5
+ import { MethodNotSupportedError } from "../rpc-handler.mjs";
6
+ // ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why.
7
+ /* eslint-disable @typescript-eslint/only-throw-error */
8
+ /**
9
+ * Inner function that dispatches JSON-RPC request to the associated Keyring
10
+ * methods.
11
+ *
12
+ * @param keyring - Keyring instance.
13
+ * @param request - Keyring JSON-RPC request.
14
+ * @returns A promise that resolves to the keyring response.
15
+ */
16
+ async function dispatchKeyringRequestV2(keyring, request) {
17
+ // We first have to make sure that the request is a valid JSON-RPC request so
18
+ // we can check its method name.
19
+ assert(request, JsonRpcRequestStruct);
20
+ switch (request.method) {
21
+ case `${KeyringRpcV2Method.GetAccounts}`: {
22
+ assert(request, GetAccountsV2RequestStruct);
23
+ return keyring.getAccounts();
24
+ }
25
+ case `${KeyringRpcV2Method.GetAccount}`: {
26
+ assert(request, GetAccountV2RequestStruct);
27
+ return keyring.getAccount(request.params.id);
28
+ }
29
+ case `${KeyringRpcV2Method.CreateAccounts}`: {
30
+ assert(request, CreateAccountsV2RequestStruct);
31
+ return keyring.createAccounts(request.params);
32
+ }
33
+ case `${KeyringRpcV2Method.DeleteAccount}`: {
34
+ assert(request, DeleteAccountV2RequestStruct);
35
+ return keyring.deleteAccount(request.params.id);
36
+ }
37
+ case `${KeyringRpcV2Method.ExportAccount}`: {
38
+ if (keyring.exportAccount === undefined) {
39
+ throw new MethodNotSupportedError(request.method);
40
+ }
41
+ assert(request, ExportAccountV2RequestStruct);
42
+ return keyring.exportAccount(request.params.id, request.params.options);
43
+ }
44
+ case `${KeyringRpcV2Method.SubmitRequest}`: {
45
+ assert(request, SubmitRequestV2RequestStruct);
46
+ return keyring.submitRequest(request.params);
47
+ }
48
+ default: {
49
+ throw new MethodNotSupportedError(request.method);
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Handles a keyring (v2) JSON-RPC request.
55
+ *
56
+ * This function is meant to be used as a handler for Keyring (v2) JSON-RPC requests
57
+ * in an Accounts Snap.
58
+ *
59
+ * @param keyring - Keyring instance.
60
+ * @param request - Keyring JSON-RPC request.
61
+ * @returns A promise that resolves to the keyring response.
62
+ * @example
63
+ * ```ts
64
+ * export const onKeyringRequest: OnKeyringRequestHandler = async ({
65
+ * origin,
66
+ * request,
67
+ * }) => {
68
+ * return await handleKeyringRequestV2(keyring, request);
69
+ * };
70
+ * ```
71
+ */
72
+ export async function handleKeyringRequestV2(keyring, request) {
73
+ try {
74
+ return await dispatchKeyringRequestV2(keyring, request);
75
+ }
76
+ catch (error) {
77
+ if (isSnapError(error)) {
78
+ throw error;
79
+ }
80
+ const message = error instanceof Error && typeof error.message === 'string'
81
+ ? error.message
82
+ : 'An unknown error occurred while handling the keyring (v2) request';
83
+ throw new Error(message);
84
+ }
85
+ }
86
+ //# sourceMappingURL=rpc-handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-handler.mjs","sourceRoot":"","sources":["../../src/v2/rpc-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeyringV2 } from '@metamask/keyring-api';\nimport {\n KeyringRpcV2Method,\n GetAccountsV2RequestStruct,\n GetAccountV2RequestStruct,\n CreateAccountsV2RequestStruct,\n DeleteAccountV2RequestStruct,\n ExportAccountV2RequestStruct,\n SubmitRequestV2RequestStruct,\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\nimport { isSnapError } from '../errors';\nimport { MethodNotSupportedError } from '../rpc-handler';\n\n// ESLint does not like our custom error classes in this repo for some reason, they do extend Error, so unsure why.\n/* eslint-disable @typescript-eslint/only-throw-error */\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 dispatchKeyringRequestV2(\n keyring: KeyringV2,\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 `${KeyringRpcV2Method.GetAccounts}`: {\n assert(request, GetAccountsV2RequestStruct);\n return keyring.getAccounts();\n }\n\n case `${KeyringRpcV2Method.GetAccount}`: {\n assert(request, GetAccountV2RequestStruct);\n return keyring.getAccount(request.params.id);\n }\n\n case `${KeyringRpcV2Method.CreateAccounts}`: {\n assert(request, CreateAccountsV2RequestStruct);\n return keyring.createAccounts(request.params);\n }\n\n case `${KeyringRpcV2Method.DeleteAccount}`: {\n assert(request, DeleteAccountV2RequestStruct);\n return keyring.deleteAccount(request.params.id);\n }\n\n case `${KeyringRpcV2Method.ExportAccount}`: {\n if (keyring.exportAccount === undefined) {\n throw new MethodNotSupportedError(request.method);\n }\n assert(request, ExportAccountV2RequestStruct);\n return keyring.exportAccount(request.params.id, request.params.options);\n }\n\n case `${KeyringRpcV2Method.SubmitRequest}`: {\n assert(request, SubmitRequestV2RequestStruct);\n return keyring.submitRequest(request.params);\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n\n/**\n * Handles a keyring (v2) JSON-RPC request.\n *\n * This function is meant to be used as a handler for Keyring (v2) 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 handleKeyringRequestV2(keyring, request);\n * };\n * ```\n */\nexport async function handleKeyringRequestV2(\n keyring: KeyringV2,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n try {\n return await dispatchKeyringRequestV2(keyring, request);\n } catch (error) {\n if (isSnapError(error)) {\n throw error;\n }\n\n const message =\n error instanceof Error && typeof error.message === 'string'\n ? error.message\n : 'An unknown error occurred while handling the keyring (v2) 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": "8.0.0-018fb62",
3
+ "version": "8.0.0-5c366be",
4
4
  "description": "MetaMask Keyring Snap SDK",
5
5
  "keywords": [
6
6
  "metamask",