@metamask/keyring-api 0.1.0 → 0.1.2

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
@@ -6,6 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.1.2]
10
+ ### Changed
11
+ - Update snaps dependencies. ([#21](https://github.com/MetaMask/keyring-api/pull/21))
12
+
13
+ ## [0.1.1]
14
+ ### Added
15
+ - Validate snap responses for type correctness. ([#15](https://github.com/MetaMask/keyring-api/pull/15))
16
+
17
+ ### Changed
18
+ - Rename RPC handling functions. ([#16](https://github.com/MetaMask/keyring-api/pull/16))
19
+
9
20
  ## [0.1.0] - 2023-06-20
10
21
  ### Added
11
22
  - Usage examples to [`README.md`](./README.md).
@@ -14,5 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
14
25
  - SnapController keyring client. It is intended to be used by MetaMask to talk to the snap.
15
26
  - Helper functions to create keyring handler in the snap.
16
27
 
17
- [Unreleased]: https://github.com/MetaMask/keyring-api/compare/v0.1.0...HEAD
28
+ [Unreleased]: https://github.com/MetaMask/keyring-api/compare/v0.1.2...HEAD
29
+ [0.1.2]: https://github.com/MetaMask/keyring-api/compare/v0.1.1...v0.1.2
30
+ [0.1.1]: https://github.com/MetaMask/keyring-api/compare/v0.1.0...v0.1.1
18
31
  [0.1.0]: https://github.com/MetaMask/keyring-api/releases/tag/v0.1.0
@@ -1,8 +1,8 @@
1
1
  import type { Json } from '@metamask/utils';
2
2
  import { Keyring, KeyringAccount, KeyringRequest, SubmitRequestResponse } from './keyring-api';
3
- import { InternalRequest } from './keyring-internal-api';
3
+ import { InternalRequest, InternalResponse } from './keyring-internal-api';
4
4
  export declare type Sender = {
5
- send<Response extends Json>(request: InternalRequest): Promise<Response>;
5
+ send(request: InternalRequest): Promise<InternalResponse>;
6
6
  };
7
7
  export declare class KeyringClient implements Keyring {
8
8
  #private;
@@ -15,7 +15,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.KeyringClient = void 0;
16
16
  const superstruct_1 = require("superstruct");
17
17
  const uuid_1 = require("uuid");
18
+ const keyring_api_1 = require("./keyring-api");
18
19
  const keyring_internal_api_1 = require("./keyring-internal-api");
20
+ const utils_1 = require("./utils");
19
21
  class KeyringClient {
20
22
  /**
21
23
  * Create a new instance of `KeyringClient`.
@@ -28,68 +30,68 @@ class KeyringClient {
28
30
  __classPrivateFieldSet(this, _KeyringClient_sender, sender, "f");
29
31
  }
30
32
  async listAccounts() {
31
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
33
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
32
34
  method: 'keyring_listAccounts',
33
- });
35
+ }), keyring_internal_api_1.ListAccountsResponseStruct);
34
36
  }
35
37
  async getAccount(id) {
36
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
38
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
37
39
  method: 'keyring_getAccount',
38
40
  params: { id },
39
- });
41
+ }), keyring_internal_api_1.GetAccountResponseStruct);
40
42
  }
41
43
  async createAccount(name, options = null) {
42
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
44
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
43
45
  method: 'keyring_createAccount',
44
46
  params: { name, options },
45
- });
47
+ }), keyring_internal_api_1.CreateAccountResponseStruct);
46
48
  }
47
49
  async filterAccountChains(id, chains) {
48
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
50
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
49
51
  method: 'keyring_filterAccountChains',
50
52
  params: { id, chains },
51
- });
53
+ }), keyring_internal_api_1.FilterAccountChainsResponseStruct);
52
54
  }
53
55
  async updateAccount(account) {
54
- await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
56
+ (0, superstruct_1.assert)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
55
57
  method: 'keyring_updateAccount',
56
58
  params: { account },
57
- });
59
+ }), keyring_internal_api_1.UpdateAccountResponseStruct);
58
60
  }
59
61
  async deleteAccount(id) {
60
- await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
62
+ (0, superstruct_1.assert)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
61
63
  method: 'keyring_deleteAccount',
62
64
  params: { id },
63
- });
65
+ }), keyring_internal_api_1.DeleteAccountResponseStruct);
64
66
  }
65
67
  async listRequests() {
66
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
68
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
67
69
  method: 'keyring_listRequests',
68
- });
70
+ }), keyring_internal_api_1.ListRequestsResponseStruct);
69
71
  }
70
72
  async getRequest(id) {
71
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
73
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
72
74
  method: 'keyring_getRequest',
73
75
  params: { id },
74
- });
76
+ }), keyring_internal_api_1.GetRequestResponseStruct);
75
77
  }
76
78
  async submitRequest(request) {
77
- return await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
79
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
78
80
  method: 'keyring_submitRequest',
79
81
  params: request,
80
- });
82
+ }), keyring_api_1.SubmitRequestResponseStruct);
81
83
  }
82
84
  async approveRequest(id) {
83
- await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
85
+ (0, superstruct_1.assert)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
84
86
  method: 'keyring_approveRequest',
85
87
  params: { id },
86
- });
88
+ }), keyring_internal_api_1.ApproveRequestResponseStruct);
87
89
  }
88
90
  async rejectRequest(id) {
89
- await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
91
+ (0, superstruct_1.assert)(await __classPrivateFieldGet(this, _KeyringClient_instances, "m", _KeyringClient_send).call(this, {
90
92
  method: 'keyring_rejectRequest',
91
93
  params: { id },
92
- });
94
+ }), keyring_internal_api_1.RejectRequestResponseStruct);
93
95
  }
94
96
  }
95
97
  exports.KeyringClient = KeyringClient;
@@ -101,12 +103,10 @@ _KeyringClient_sender = new WeakMap(), _KeyringClient_instances = new WeakSet(),
101
103
  * @returns A promise that resolves to the response to the request.
102
104
  */
103
105
  async function _KeyringClient_send(partial) {
104
- const request = {
106
+ return await __classPrivateFieldGet(this, _KeyringClient_sender, "f").send({
105
107
  jsonrpc: '2.0',
106
108
  id: (0, uuid_1.v4)(),
107
109
  ...partial,
108
- };
109
- (0, superstruct_1.assert)(request, keyring_internal_api_1.InternalRequestStruct);
110
- return await __classPrivateFieldGet(this, _KeyringClient_sender, "f").send(request);
110
+ });
111
111
  };
112
112
  //# sourceMappingURL=keyring-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyring-client.js","sourceRoot":"","sources":["../src/keyring-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Json } from '@metamask/utils';\nimport { assert } from 'superstruct';\nimport { v4 as uuid } from 'uuid';\n\nimport {\n Keyring,\n KeyringAccount,\n KeyringRequest,\n SubmitRequestResponse,\n} from './keyring-api';\nimport { InternalRequest, InternalRequestStruct } from './keyring-internal-api';\nimport { OmitUnion } from './utils';\n\nexport type Sender = {\n send<Response extends Json>(request: InternalRequest): Promise<Response>;\n};\n\nexport class KeyringClient implements Keyring {\n #sender: Sender;\n\n /**\n * Create a new instance of `KeyringClient`.\n *\n * @param sender - The `Sender` instance to use to send requests to the snap.\n */\n constructor(sender: Sender) {\n this.#sender = sender;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param partial - Partial internal request (method and params).\n * @returns A promise that resolves to the response to the request.\n */\n async #send<Response extends Json>(\n partial: OmitUnion<InternalRequest, 'jsonrpc' | 'id'>,\n ): Promise<Response> {\n const request = {\n jsonrpc: '2.0',\n id: uuid(),\n ...partial,\n };\n assert(request, InternalRequestStruct);\n return await this.#sender.send<Response>(request);\n }\n\n async listAccounts(): Promise<KeyringAccount[]> {\n return await this.#send<KeyringAccount[]>({\n method: 'keyring_listAccounts',\n });\n }\n\n async getAccount(id: string): Promise<KeyringAccount> {\n return await this.#send<KeyringAccount>({\n method: 'keyring_getAccount',\n params: { id },\n });\n }\n\n async createAccount(\n name: string,\n options: Record<string, Json> | null = null,\n ): Promise<KeyringAccount> {\n return await this.#send<KeyringAccount>({\n method: 'keyring_createAccount',\n params: { name, options },\n });\n }\n\n async filterAccountChains(id: string, chains: string[]): Promise<string[]> {\n return await this.#send<string[]>({\n method: 'keyring_filterAccountChains',\n params: { id, chains },\n });\n }\n\n async updateAccount(account: KeyringAccount): Promise<void> {\n await this.#send<null>({\n method: 'keyring_updateAccount',\n params: { account },\n });\n }\n\n async deleteAccount(id: string): Promise<void> {\n await this.#send<null>({\n method: 'keyring_deleteAccount',\n params: { id },\n });\n }\n\n async listRequests(): Promise<KeyringRequest[]> {\n return await this.#send<KeyringRequest[]>({\n method: 'keyring_listRequests',\n });\n }\n\n async getRequest(id: string): Promise<KeyringRequest> {\n return await this.#send<KeyringRequest>({\n method: 'keyring_getRequest',\n params: { id },\n });\n }\n\n async submitRequest(request: KeyringRequest): Promise<SubmitRequestResponse> {\n return await this.#send<SubmitRequestResponse>({\n method: 'keyring_submitRequest',\n params: request,\n });\n }\n\n async approveRequest(id: string): Promise<void> {\n await this.#send<null>({\n method: 'keyring_approveRequest',\n params: { id },\n });\n }\n\n async rejectRequest(id: string): Promise<void> {\n await this.#send<null>({\n method: 'keyring_rejectRequest',\n params: { id },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"keyring-client.js","sourceRoot":"","sources":["../src/keyring-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Json } from '@metamask/utils';\nimport { assert } from 'superstruct';\nimport { v4 as uuid } from 'uuid';\n\nimport {\n Keyring,\n KeyringAccount,\n KeyringRequest,\n SubmitRequestResponse,\n SubmitRequestResponseStruct,\n} from './keyring-api';\nimport {\n ApproveRequestResponseStruct,\n CreateAccountResponseStruct,\n DeleteAccountResponseStruct,\n FilterAccountChainsResponseStruct,\n GetAccountResponseStruct,\n GetRequestResponseStruct,\n InternalRequest,\n InternalResponse,\n ListAccountsResponseStruct,\n ListRequestsResponseStruct,\n RejectRequestResponseStruct,\n UpdateAccountResponseStruct,\n} from './keyring-internal-api';\nimport { OmitUnion, strictMask } from './utils';\n\nexport type Sender = {\n send(request: InternalRequest): Promise<InternalResponse>;\n};\n\nexport class KeyringClient implements Keyring {\n #sender: Sender;\n\n /**\n * Create a new instance of `KeyringClient`.\n *\n * @param sender - The `Sender` instance to use to send requests to the snap.\n */\n constructor(sender: Sender) {\n this.#sender = sender;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param partial - Partial internal request (method and params).\n * @returns A promise that resolves to the response to the request.\n */\n async #send(\n partial: OmitUnion<InternalRequest, 'jsonrpc' | 'id'>,\n ): Promise<InternalResponse> {\n return await this.#sender.send({\n jsonrpc: '2.0',\n id: uuid(),\n ...partial,\n });\n }\n\n async listAccounts(): Promise<KeyringAccount[]> {\n return strictMask(\n await this.#send({\n method: 'keyring_listAccounts',\n }),\n ListAccountsResponseStruct,\n );\n }\n\n async getAccount(id: string): Promise<KeyringAccount> {\n return strictMask(\n await this.#send({\n method: 'keyring_getAccount',\n params: { id },\n }),\n GetAccountResponseStruct,\n );\n }\n\n async createAccount(\n name: string,\n options: Record<string, Json> | null = null,\n ): Promise<KeyringAccount> {\n return strictMask(\n await this.#send({\n method: 'keyring_createAccount',\n params: { name, options },\n }),\n CreateAccountResponseStruct,\n );\n }\n\n async filterAccountChains(id: string, chains: string[]): Promise<string[]> {\n return strictMask(\n await this.#send({\n method: 'keyring_filterAccountChains',\n params: { id, chains },\n }),\n FilterAccountChainsResponseStruct,\n );\n }\n\n async updateAccount(account: KeyringAccount): Promise<void> {\n assert(\n await this.#send({\n method: 'keyring_updateAccount',\n params: { account },\n }),\n UpdateAccountResponseStruct,\n );\n }\n\n async deleteAccount(id: string): Promise<void> {\n assert(\n await this.#send({\n method: 'keyring_deleteAccount',\n params: { id },\n }),\n DeleteAccountResponseStruct,\n );\n }\n\n async listRequests(): Promise<KeyringRequest[]> {\n return strictMask(\n await this.#send({\n method: 'keyring_listRequests',\n }),\n ListRequestsResponseStruct,\n );\n }\n\n async getRequest(id: string): Promise<KeyringRequest> {\n return strictMask(\n await this.#send({\n method: 'keyring_getRequest',\n params: { id },\n }),\n GetRequestResponseStruct,\n );\n }\n\n async submitRequest(request: KeyringRequest): Promise<SubmitRequestResponse> {\n return strictMask(\n await this.#send({\n method: 'keyring_submitRequest',\n params: request,\n }),\n SubmitRequestResponseStruct,\n );\n }\n\n async approveRequest(id: string): Promise<void> {\n assert(\n await this.#send({\n method: 'keyring_approveRequest',\n params: { id },\n }),\n ApproveRequestResponseStruct,\n );\n }\n\n async rejectRequest(id: string): Promise<void> {\n assert(\n await this.#send({\n method: 'keyring_rejectRequest',\n params: { id },\n }),\n RejectRequestResponseStruct,\n );\n }\n}\n"]}
@@ -2,23 +2,11 @@ import { Infer } from 'superstruct';
2
2
  export declare const ListAccountsRequestStruct: import("superstruct").Struct<{
3
3
  id: string;
4
4
  jsonrpc: "2.0";
5
- method: "keyring_listAccounts" | "keyring_getAccount" | "keyring_createAccount" | "keyring_filterAccountChains" | "keyring_updateAccount" | "keyring_deleteAccount" | "keyring_listRequests" | "keyring_getRequest" | "keyring_submitRequest" | "keyring_approveRequest" | "keyring_rejectRequest";
5
+ method: "keyring_listAccounts";
6
6
  }, {
7
7
  id: import("superstruct").Struct<string, null>;
8
8
  jsonrpc: import("superstruct").Struct<"2.0", "2.0">;
9
- method: import("superstruct").Struct<"keyring_listAccounts" | "keyring_getAccount" | "keyring_createAccount" | "keyring_filterAccountChains" | "keyring_updateAccount" | "keyring_deleteAccount" | "keyring_listRequests" | "keyring_getRequest" | "keyring_submitRequest" | "keyring_approveRequest" | "keyring_rejectRequest", {
10
- keyring_listAccounts: "keyring_listAccounts";
11
- keyring_getAccount: "keyring_getAccount";
12
- keyring_createAccount: "keyring_createAccount";
13
- keyring_filterAccountChains: "keyring_filterAccountChains";
14
- keyring_updateAccount: "keyring_updateAccount";
15
- keyring_deleteAccount: "keyring_deleteAccount";
16
- keyring_listRequests: "keyring_listRequests";
17
- keyring_getRequest: "keyring_getRequest";
18
- keyring_submitRequest: "keyring_submitRequest";
19
- keyring_approveRequest: "keyring_approveRequest";
20
- keyring_rejectRequest: "keyring_rejectRequest";
21
- }>;
9
+ method: import("superstruct").Struct<"keyring_listAccounts", "keyring_listAccounts">;
22
10
  }>;
23
11
  export declare type ListAccountsRequest = Infer<typeof ListAccountsRequestStruct>;
24
12
  export declare const ListAccountsResponseStruct: import("superstruct").Struct<{
@@ -449,7 +437,7 @@ export declare type RejectRequestResponse = Infer<typeof RejectRequestResponseSt
449
437
  export declare const InternalRequestStruct: import("superstruct").Struct<{
450
438
  id: string;
451
439
  jsonrpc: "2.0";
452
- method: "keyring_listAccounts" | "keyring_getAccount" | "keyring_createAccount" | "keyring_filterAccountChains" | "keyring_updateAccount" | "keyring_deleteAccount" | "keyring_listRequests" | "keyring_getRequest" | "keyring_submitRequest" | "keyring_approveRequest" | "keyring_rejectRequest";
440
+ method: "keyring_listAccounts";
453
441
  } | {
454
442
  id: string;
455
443
  jsonrpc: "2.0";
@@ -10,19 +10,7 @@ const utils_2 = require("./utils");
10
10
  exports.ListAccountsRequestStruct = (0, superstruct_1.object)({
11
11
  id: utils_2.UuidStruct,
12
12
  jsonrpc: (0, superstruct_1.literal)('2.0'),
13
- method: (0, superstruct_1.enums)([
14
- 'keyring_listAccounts',
15
- 'keyring_getAccount',
16
- 'keyring_createAccount',
17
- 'keyring_filterAccountChains',
18
- 'keyring_updateAccount',
19
- 'keyring_deleteAccount',
20
- 'keyring_listRequests',
21
- 'keyring_getRequest',
22
- 'keyring_submitRequest',
23
- 'keyring_approveRequest',
24
- 'keyring_rejectRequest',
25
- ]),
13
+ method: (0, superstruct_1.literal)('keyring_listAccounts'),
26
14
  });
27
15
  exports.ListAccountsResponseStruct = (0, superstruct_1.array)(keyring_api_1.KeyringAccountStruct);
28
16
  // ----------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"keyring-internal-api.js","sourceRoot":"","sources":["../src/keyring-internal-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonStruct } from '@metamask/utils';\nimport {\n array,\n enums,\n Infer,\n literal,\n never,\n nullable,\n object,\n record,\n string,\n union,\n} from 'superstruct';\n\nimport {\n KeyringAccountStruct,\n KeyringRequestStruct,\n SubmitRequestResponseStruct,\n} from './keyring-api';\nimport { UuidStruct } from './utils';\n\n// ----------------------------------------------------------------------------\n// List accounts\n\nexport const ListAccountsRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: enums([\n 'keyring_listAccounts',\n 'keyring_getAccount',\n 'keyring_createAccount',\n 'keyring_filterAccountChains',\n 'keyring_updateAccount',\n 'keyring_deleteAccount',\n 'keyring_listRequests',\n 'keyring_getRequest',\n 'keyring_submitRequest',\n 'keyring_approveRequest',\n 'keyring_rejectRequest',\n ]),\n});\n\nexport type ListAccountsRequest = Infer<typeof ListAccountsRequestStruct>;\n\nexport const ListAccountsResponseStruct = array(KeyringAccountStruct);\n\nexport type ListAccountsResponse = Infer<typeof ListAccountsResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Get account\n\nexport const GetAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_getAccount'),\n params: object({\n id: string(),\n }),\n});\n\nexport type GetAccountRequest = Infer<typeof GetAccountRequestStruct>;\n\nexport const GetAccountResponseStruct = KeyringAccountStruct;\n\nexport type GetAccountResponse = Infer<typeof GetAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Create account\n\nexport const CreateAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_createAccount'),\n params: object({\n name: string(),\n options: nullable(record(string(), JsonStruct)),\n }),\n});\n\nexport type CreateAccountRequest = Infer<typeof CreateAccountRequestStruct>;\n\nexport const CreateAccountResponseStruct = KeyringAccountStruct;\n\nexport type CreateAccountResponse = Infer<typeof CreateAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Filter account chains\n\nexport const FilterAccountChainsStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_filterAccountChains'),\n params: object({\n id: string(),\n chains: array(string()),\n }),\n});\n\nexport type FilterAccountChainsRequest = Infer<\n typeof FilterAccountChainsStruct\n>;\n\nexport const FilterAccountChainsResponseStruct = array(string());\n\nexport type FilterAccountChainsResponse = Infer<\n typeof FilterAccountChainsResponseStruct\n>;\n\n// ----------------------------------------------------------------------------\n// Update account\n\nexport const UpdateAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_updateAccount'),\n params: object({\n account: KeyringAccountStruct,\n }),\n});\n\nexport type UpdateAccountRequest = Infer<typeof UpdateAccountRequestStruct>;\n\nexport const UpdateAccountResponseStruct = nullable(never());\n\nexport type UpdateAccountResponse = Infer<typeof UpdateAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Delete account\n\nexport const DeleteAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_deleteAccount'),\n params: object({\n id: string(),\n }),\n});\n\nexport type DeleteAccountRequest = Infer<typeof DeleteAccountRequestStruct>;\n\nexport const DeleteAccountResponseStruct = nullable(never());\n\nexport type DeleteAccountResponse = Infer<typeof DeleteAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// List requests\n\nexport const ListRequestsRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_listRequests'),\n});\n\nexport type ListRequestsRequest = Infer<typeof ListRequestsRequestStruct>;\n\nexport const ListRequestsResponseStruct = array(KeyringRequestStruct);\n\nexport type ListRequestsResponse = Infer<typeof ListRequestsResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Get request\n\nexport const GetRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_getRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type GetRequestRequest = Infer<typeof GetRequestRequestStruct>;\n\nexport const GetRequestResponseStruct = KeyringRequestStruct;\n\nexport type GetRequestResponse = Infer<typeof GetRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Submit request\n\nexport const SubmitRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_submitRequest'),\n params: KeyringRequestStruct,\n});\n\nexport type SubmitRequestRequest = Infer<typeof SubmitRequestRequestStruct>;\n\n// The response type is already defined in the `keyring-api.ts` file since it\n// is used by the `Keyring` interface.\n\n// ----------------------------------------------------------------------------\n// Approve request\n\nexport const ApproveRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_approveRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type ApproveRequestRequest = Infer<typeof ApproveRequestRequestStruct>;\n\nexport const ApproveRequestResponseStruct = nullable(never());\n\nexport type ApproveRequestResponse = Infer<typeof ApproveRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Reject request\n\nexport const RejectRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_rejectRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type RejectRequestRequest = Infer<typeof RejectRequestRequestStruct>;\n\nexport const RejectRequestResponseStruct = nullable(never());\n\nexport type RejectRequestResponse = Infer<typeof RejectRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Internal request\n\nexport const InternalRequestStruct = union([\n ListAccountsRequestStruct,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n FilterAccountChainsStruct,\n UpdateAccountRequestStruct,\n DeleteAccountRequestStruct,\n ListRequestsRequestStruct,\n GetRequestRequestStruct,\n SubmitRequestRequestStruct,\n ApproveRequestRequestStruct,\n RejectRequestRequestStruct,\n]);\n\nexport type InternalRequest = Infer<typeof InternalRequestStruct>;\n\n// ----------------------------------------------------------------------------\n// Internal response\n\nexport const InternalResponseStruct = union([\n ListAccountsResponseStruct,\n GetAccountResponseStruct,\n CreateAccountResponseStruct,\n FilterAccountChainsResponseStruct,\n UpdateAccountResponseStruct,\n DeleteAccountResponseStruct,\n ListRequestsResponseStruct,\n GetRequestResponseStruct,\n SubmitRequestResponseStruct,\n ApproveRequestResponseStruct,\n RejectRequestResponseStruct,\n]);\n\nexport type InternalResponse = Infer<typeof InternalResponseStruct>;\n"]}
1
+ {"version":3,"file":"keyring-internal-api.js","sourceRoot":"","sources":["../src/keyring-internal-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonStruct } from '@metamask/utils';\nimport {\n array,\n Infer,\n literal,\n never,\n nullable,\n object,\n record,\n string,\n union,\n} from 'superstruct';\n\nimport {\n KeyringAccountStruct,\n KeyringRequestStruct,\n SubmitRequestResponseStruct,\n} from './keyring-api';\nimport { UuidStruct } from './utils';\n\n// ----------------------------------------------------------------------------\n// List accounts\n\nexport const ListAccountsRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_listAccounts'),\n});\n\nexport type ListAccountsRequest = Infer<typeof ListAccountsRequestStruct>;\n\nexport const ListAccountsResponseStruct = array(KeyringAccountStruct);\n\nexport type ListAccountsResponse = Infer<typeof ListAccountsResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Get account\n\nexport const GetAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_getAccount'),\n params: object({\n id: string(),\n }),\n});\n\nexport type GetAccountRequest = Infer<typeof GetAccountRequestStruct>;\n\nexport const GetAccountResponseStruct = KeyringAccountStruct;\n\nexport type GetAccountResponse = Infer<typeof GetAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Create account\n\nexport const CreateAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_createAccount'),\n params: object({\n name: string(),\n options: nullable(record(string(), JsonStruct)),\n }),\n});\n\nexport type CreateAccountRequest = Infer<typeof CreateAccountRequestStruct>;\n\nexport const CreateAccountResponseStruct = KeyringAccountStruct;\n\nexport type CreateAccountResponse = Infer<typeof CreateAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Filter account chains\n\nexport const FilterAccountChainsStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_filterAccountChains'),\n params: object({\n id: string(),\n chains: array(string()),\n }),\n});\n\nexport type FilterAccountChainsRequest = Infer<\n typeof FilterAccountChainsStruct\n>;\n\nexport const FilterAccountChainsResponseStruct = array(string());\n\nexport type FilterAccountChainsResponse = Infer<\n typeof FilterAccountChainsResponseStruct\n>;\n\n// ----------------------------------------------------------------------------\n// Update account\n\nexport const UpdateAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_updateAccount'),\n params: object({\n account: KeyringAccountStruct,\n }),\n});\n\nexport type UpdateAccountRequest = Infer<typeof UpdateAccountRequestStruct>;\n\nexport const UpdateAccountResponseStruct = nullable(never());\n\nexport type UpdateAccountResponse = Infer<typeof UpdateAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Delete account\n\nexport const DeleteAccountRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_deleteAccount'),\n params: object({\n id: string(),\n }),\n});\n\nexport type DeleteAccountRequest = Infer<typeof DeleteAccountRequestStruct>;\n\nexport const DeleteAccountResponseStruct = nullable(never());\n\nexport type DeleteAccountResponse = Infer<typeof DeleteAccountResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// List requests\n\nexport const ListRequestsRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_listRequests'),\n});\n\nexport type ListRequestsRequest = Infer<typeof ListRequestsRequestStruct>;\n\nexport const ListRequestsResponseStruct = array(KeyringRequestStruct);\n\nexport type ListRequestsResponse = Infer<typeof ListRequestsResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Get request\n\nexport const GetRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_getRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type GetRequestRequest = Infer<typeof GetRequestRequestStruct>;\n\nexport const GetRequestResponseStruct = KeyringRequestStruct;\n\nexport type GetRequestResponse = Infer<typeof GetRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Submit request\n\nexport const SubmitRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_submitRequest'),\n params: KeyringRequestStruct,\n});\n\nexport type SubmitRequestRequest = Infer<typeof SubmitRequestRequestStruct>;\n\n// The response type is already defined in the `keyring-api.ts` file since it\n// is used by the `Keyring` interface.\n\n// ----------------------------------------------------------------------------\n// Approve request\n\nexport const ApproveRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_approveRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type ApproveRequestRequest = Infer<typeof ApproveRequestRequestStruct>;\n\nexport const ApproveRequestResponseStruct = nullable(never());\n\nexport type ApproveRequestResponse = Infer<typeof ApproveRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Reject request\n\nexport const RejectRequestRequestStruct = object({\n id: UuidStruct,\n jsonrpc: literal('2.0'),\n method: literal('keyring_rejectRequest'),\n params: object({\n id: string(),\n }),\n});\n\nexport type RejectRequestRequest = Infer<typeof RejectRequestRequestStruct>;\n\nexport const RejectRequestResponseStruct = nullable(never());\n\nexport type RejectRequestResponse = Infer<typeof RejectRequestResponseStruct>;\n\n// ----------------------------------------------------------------------------\n// Internal request\n\nexport const InternalRequestStruct = union([\n ListAccountsRequestStruct,\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n FilterAccountChainsStruct,\n UpdateAccountRequestStruct,\n DeleteAccountRequestStruct,\n ListRequestsRequestStruct,\n GetRequestRequestStruct,\n SubmitRequestRequestStruct,\n ApproveRequestRequestStruct,\n RejectRequestRequestStruct,\n]);\n\nexport type InternalRequest = Infer<typeof InternalRequestStruct>;\n\n// ----------------------------------------------------------------------------\n// Internal response\n\nexport const InternalResponseStruct = union([\n ListAccountsResponseStruct,\n GetAccountResponseStruct,\n CreateAccountResponseStruct,\n FilterAccountChainsResponseStruct,\n UpdateAccountResponseStruct,\n DeleteAccountResponseStruct,\n ListRequestsResponseStruct,\n GetRequestResponseStruct,\n SubmitRequestResponseStruct,\n ApproveRequestResponseStruct,\n RejectRequestResponseStruct,\n]);\n\nexport type InternalResponse = Infer<typeof InternalResponseStruct>;\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { OnRpcRequestHandler } from '@metamask/snaps-utils';
2
- import type { Json, JsonRpcRequest } from '@metamask/utils';
2
+ import { type Json, JsonRpcRequest } from '@metamask/utils';
3
3
  import type { Keyring } from './keyring-api';
4
4
  /**
5
5
  * Error thrown when a keyring JSON-RPC method is not supported.
@@ -19,7 +19,7 @@ export declare class MethodNotSupportedError extends Error {
19
19
  * @param handlers - Handlers to chain.
20
20
  * @returns A handler that chains the given handlers.
21
21
  */
22
- export declare function chainHandlers(...handlers: OnRpcRequestHandler[]): OnRpcRequestHandler;
22
+ export declare function buildHandlersChain(...handlers: OnRpcRequestHandler[]): OnRpcRequestHandler;
23
23
  /**
24
24
  * Handles a keyring JSON-RPC request.
25
25
  *
@@ -27,4 +27,4 @@ export declare function chainHandlers(...handlers: OnRpcRequestHandler[]): OnRpc
27
27
  * @param request - Keyring JSON-RPC request.
28
28
  * @returns A promise that resolves to the keyring response.
29
29
  */
30
- export declare function keyringRpcDispatcher(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
30
+ export declare function handleKeyringRequest(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.keyringRpcDispatcher = exports.chainHandlers = exports.MethodNotSupportedError = void 0;
3
+ exports.handleKeyringRequest = exports.buildHandlersChain = exports.MethodNotSupportedError = void 0;
4
+ const utils_1 = require("@metamask/utils");
4
5
  const superstruct_1 = require("superstruct");
5
6
  const keyring_internal_api_1 = require("./keyring-internal-api");
6
7
  /**
@@ -24,7 +25,7 @@ exports.MethodNotSupportedError = MethodNotSupportedError;
24
25
  * @param handlers - Handlers to chain.
25
26
  * @returns A handler that chains the given handlers.
26
27
  */
27
- function chainHandlers(...handlers) {
28
+ function buildHandlersChain(...handlers) {
28
29
  return async ({ origin, request }) => {
29
30
  for (const handler of handlers) {
30
31
  try {
@@ -40,7 +41,7 @@ function chainHandlers(...handlers) {
40
41
  throw new MethodNotSupportedError(request.method);
41
42
  };
42
43
  }
43
- exports.chainHandlers = chainHandlers;
44
+ exports.buildHandlersChain = buildHandlersChain;
44
45
  /**
45
46
  * Handles a keyring JSON-RPC request.
46
47
  *
@@ -48,10 +49,15 @@ exports.chainHandlers = chainHandlers;
48
49
  * @param request - Keyring JSON-RPC request.
49
50
  * @returns A promise that resolves to the keyring response.
50
51
  */
51
- async function keyringRpcDispatcher(keyring, request) {
52
+ async function handleKeyringRequest(keyring, request) {
53
+ // We first have to make sure that the request is a valid JSON-RPC request so
54
+ // we can check its method name.
55
+ (0, superstruct_1.assert)(request, utils_1.JsonRpcRequestStruct);
52
56
  switch (request.method) {
53
- case 'keyring_listAccounts':
57
+ case 'keyring_listAccounts': {
58
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.ListAccountsRequestStruct);
54
59
  return await keyring.listAccounts();
60
+ }
55
61
  case 'keyring_getAccount': {
56
62
  (0, superstruct_1.assert)(request, keyring_internal_api_1.GetAccountRequestStruct);
57
63
  return await keyring.getAccount(request.params.id);
@@ -72,8 +78,10 @@ async function keyringRpcDispatcher(keyring, request) {
72
78
  (0, superstruct_1.assert)(request, keyring_internal_api_1.DeleteAccountRequestStruct);
73
79
  return await keyring.deleteAccount(request.params.id);
74
80
  }
75
- case 'keyring_listRequests':
81
+ case 'keyring_listRequests': {
82
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.ListRequestsRequestStruct);
76
83
  return await keyring.listRequests();
84
+ }
77
85
  case 'keyring_getRequest': {
78
86
  (0, superstruct_1.assert)(request, keyring_internal_api_1.GetRequestRequestStruct);
79
87
  return await keyring.getRequest(request.params.id);
@@ -90,9 +98,10 @@ async function keyringRpcDispatcher(keyring, request) {
90
98
  (0, superstruct_1.assert)(request, keyring_internal_api_1.RejectRequestRequestStruct);
91
99
  return await keyring.rejectRequest(request.params.id);
92
100
  }
93
- default:
101
+ default: {
94
102
  throw new MethodNotSupportedError(request.method);
103
+ }
95
104
  }
96
105
  }
97
- exports.keyringRpcDispatcher = keyringRpcDispatcher;
106
+ exports.handleKeyringRequest = handleKeyringRequest;
98
107
  //# sourceMappingURL=keyring-rpc-dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyring-rpc-dispatcher.js","sourceRoot":"","sources":["../src/keyring-rpc-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OnRpcRequestHandler } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\nimport { assert } from 'superstruct';\n\nimport type { Keyring } from './keyring-api';\nimport {\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsStruct,\n} from './keyring-internal-api';\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 * Build a chain of handlers for a JSON-RPC request.\n *\n * If a handler throws a MethodNotSupportedError, the next handler in the chain\n * is called. If all handlers throw a MethodNotSupportedError, the error is re-\n * thrown.\n *\n * Any other error thrown by a handler is re-thrown.\n *\n * @param handlers - Handlers to chain.\n * @returns A handler that chains the given handlers.\n */\nexport function chainHandlers(\n ...handlers: OnRpcRequestHandler[]\n): OnRpcRequestHandler {\n return async ({ origin, request }) => {\n for (const handler of handlers) {\n try {\n return await handler({ origin, request });\n } catch (error) {\n if (!(error instanceof MethodNotSupportedError)) {\n throw error;\n }\n }\n }\n\n // All handlers failed to handle the request.\n throw new MethodNotSupportedError(request.method);\n };\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n */\nexport async function keyringRpcDispatcher(\n keyring: Keyring,\n request: JsonRpcRequest,\n): Promise<Json | void> {\n switch (request.method) {\n case 'keyring_listAccounts':\n return await keyring.listAccounts();\n\n case 'keyring_getAccount': {\n assert(request, GetAccountRequestStruct);\n return await keyring.getAccount(request.params.id);\n }\n\n case 'keyring_createAccount': {\n assert(request, CreateAccountRequestStruct);\n return await keyring.createAccount(\n request.params.name,\n request.params.options,\n );\n }\n\n case 'keyring_filterAccountChains': {\n assert(request, FilterAccountChainsStruct);\n return await keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case 'keyring_updateAccount': {\n assert(request, UpdateAccountRequestStruct);\n return await keyring.updateAccount(request.params.account);\n }\n\n case 'keyring_deleteAccount': {\n assert(request, DeleteAccountRequestStruct);\n return await keyring.deleteAccount(request.params.id);\n }\n\n case 'keyring_listRequests':\n return await keyring.listRequests();\n\n case 'keyring_getRequest': {\n assert(request, GetRequestRequestStruct);\n return await keyring.getRequest(request.params.id);\n }\n\n case 'keyring_submitRequest': {\n assert(request, SubmitRequestRequestStruct);\n return await keyring.submitRequest(request.params);\n }\n\n case 'keyring_approveRequest': {\n assert(request, ApproveRequestRequestStruct);\n return await keyring.approveRequest(request.params.id);\n }\n\n case 'keyring_rejectRequest': {\n assert(request, RejectRequestRequestStruct);\n return await keyring.rejectRequest(request.params.id);\n }\n\n default:\n throw new MethodNotSupportedError(request.method);\n }\n}\n"]}
1
+ {"version":3,"file":"keyring-rpc-dispatcher.js","sourceRoot":"","sources":["../src/keyring-rpc-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OnRpcRequestHandler } from '@metamask/snaps-utils';\nimport {\n JsonRpcRequestStruct,\n type Json,\n JsonRpcRequest,\n} from '@metamask/utils';\nimport { assert } from 'superstruct';\n\nimport type { Keyring } from './keyring-api';\nimport {\n GetAccountRequestStruct,\n CreateAccountRequestStruct,\n ApproveRequestRequestStruct,\n DeleteAccountRequestStruct,\n GetRequestRequestStruct,\n RejectRequestRequestStruct,\n SubmitRequestRequestStruct,\n UpdateAccountRequestStruct,\n FilterAccountChainsStruct,\n ListAccountsRequestStruct,\n ListRequestsRequestStruct,\n} from './keyring-internal-api';\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 * Build a chain of handlers for a JSON-RPC request.\n *\n * If a handler throws a MethodNotSupportedError, the next handler in the chain\n * is called. If all handlers throw a MethodNotSupportedError, the error is re-\n * thrown.\n *\n * Any other error thrown by a handler is re-thrown.\n *\n * @param handlers - Handlers to chain.\n * @returns A handler that chains the given handlers.\n */\nexport function buildHandlersChain(\n ...handlers: OnRpcRequestHandler[]\n): OnRpcRequestHandler {\n return async ({ origin, request }) => {\n for (const handler of handlers) {\n try {\n return await handler({ origin, request });\n } catch (error) {\n if (!(error instanceof MethodNotSupportedError)) {\n throw error;\n }\n }\n }\n\n // All handlers failed to handle the request.\n throw new MethodNotSupportedError(request.method);\n };\n}\n\n/**\n * Handles a keyring JSON-RPC request.\n *\n * @param keyring - Keyring instance.\n * @param request - Keyring JSON-RPC request.\n * @returns A promise that resolves to the keyring response.\n */\nexport async function handleKeyringRequest(\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 switch (request.method) {\n case 'keyring_listAccounts': {\n assert(request, ListAccountsRequestStruct);\n return await keyring.listAccounts();\n }\n\n case 'keyring_getAccount': {\n assert(request, GetAccountRequestStruct);\n return await keyring.getAccount(request.params.id);\n }\n\n case 'keyring_createAccount': {\n assert(request, CreateAccountRequestStruct);\n return await keyring.createAccount(\n request.params.name,\n request.params.options,\n );\n }\n\n case 'keyring_filterAccountChains': {\n assert(request, FilterAccountChainsStruct);\n return await keyring.filterAccountChains(\n request.params.id,\n request.params.chains,\n );\n }\n\n case 'keyring_updateAccount': {\n assert(request, UpdateAccountRequestStruct);\n return await keyring.updateAccount(request.params.account);\n }\n\n case 'keyring_deleteAccount': {\n assert(request, DeleteAccountRequestStruct);\n return await keyring.deleteAccount(request.params.id);\n }\n\n case 'keyring_listRequests': {\n assert(request, ListRequestsRequestStruct);\n return await keyring.listRequests();\n }\n\n case 'keyring_getRequest': {\n assert(request, GetRequestRequestStruct);\n return await keyring.getRequest(request.params.id);\n }\n\n case 'keyring_submitRequest': {\n assert(request, SubmitRequestRequestStruct);\n return await keyring.submitRequest(request.params);\n }\n\n case 'keyring_approveRequest': {\n assert(request, ApproveRequestRequestStruct);\n return await keyring.approveRequest(request.params.id);\n }\n\n case 'keyring_rejectRequest': {\n assert(request, RejectRequestRequestStruct);\n return await keyring.rejectRequest(request.params.id);\n }\n\n default: {\n throw new MethodNotSupportedError(request.method);\n }\n }\n}\n"]}
@@ -13,9 +13,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  var _SnapControllerSender_snapId, _SnapControllerSender_origin, _SnapControllerSender_controller, _SnapControllerSender_handler, _KeyringSnapControllerClient_controller;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.KeyringSnapControllerClient = void 0;
16
- const superstruct_1 = require("superstruct");
17
16
  const keyring_client_1 = require("./keyring-client");
18
17
  const keyring_internal_api_1 = require("./keyring-internal-api");
18
+ const utils_1 = require("./utils");
19
19
  /**
20
20
  * Implementation of the `Sender` interface that can be used to send requests
21
21
  * to a snap through a `SnapController`.
@@ -46,13 +46,12 @@ class SnapControllerSender {
46
46
  * @returns A promise that resolves to the response of the request.
47
47
  */
48
48
  async send(request) {
49
- (0, superstruct_1.assert)(request, keyring_internal_api_1.InternalRequestStruct);
50
- return (await __classPrivateFieldGet(this, _SnapControllerSender_controller, "f").handleRequest({
49
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _SnapControllerSender_controller, "f").handleRequest({
51
50
  snapId: __classPrivateFieldGet(this, _SnapControllerSender_snapId, "f"),
52
51
  origin: __classPrivateFieldGet(this, _SnapControllerSender_origin, "f"),
53
52
  handler: __classPrivateFieldGet(this, _SnapControllerSender_handler, "f"),
54
53
  request,
55
- }));
54
+ }), keyring_internal_api_1.InternalResponseStruct);
56
55
  }
57
56
  }
58
57
  _SnapControllerSender_snapId = new WeakMap(), _SnapControllerSender_origin = new WeakMap(), _SnapControllerSender_controller = new WeakMap(), _SnapControllerSender_handler = new WeakMap();
@@ -1 +1 @@
1
- {"version":3,"file":"keyring-snap-controller-client.js","sourceRoot":"","sources":["../src/keyring-snap-controller-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,6CAAqC;AAErC,qDAAyD;AACzD,iEAAgF;AAEhF;;;GAGG;AACH,MAAM,oBAAoB;IASxB;;;;;;;OAOG;IACH,YACE,UAAe,EACf,MAAc,EACd,MAAc,EACd,OAAoB;QApBtB,+CAAgB;QAEhB,+CAAgB;QAEhB,mDAA4B;QAE5B,gDAAsB;QAgBpB,uBAAA,IAAI,oCAAe,UAAU,MAAA,CAAC;QAC9B,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,iCAAY,OAAO,MAAA,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CACR,OAAwB;QAExB,IAAA,oBAAM,EAAC,OAAO,EAAE,4CAAqB,CAAC,CAAC;QACvC,OAAO,CAAC,MAAM,uBAAA,IAAI,wCAAY,CAAC,aAAa,CAAC;YAC3C,MAAM,EAAE,uBAAA,IAAI,oCAA2B;YACvC,MAAM,EAAE,uBAAA,IAAI,oCAAQ;YACpB,OAAO,EAAE,uBAAA,IAAI,qCAAS;YACtB,OAAO;SACR,CAAC,CAAa,CAAC;IAClB,CAAC;CACF;;AAED;;;GAGG;AACH,MAAa,2BAA4B,SAAQ,8BAAa;IAG5D;;;;;;;;;;;;OAYG;IACH,YAAY,EACV,UAAU,EACV,MAAM,GAAG,WAAW,EACpB,MAAM,GAAG,UAAU,EACnB,OAAO,GAAG,cAA6B,GAMxC;QACC,KAAK,CAAC,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QA1BvE,0DAA4B;QA2B1B,uBAAA,IAAI,2CAAe,UAAU,MAAA,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,2BAA2B,CAAC;YACrC,UAAU,EAAE,uBAAA,IAAI,+CAAY;YAC5B,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF;AA7CD,kEA6CC","sourcesContent":["import type { SnapController } from '@metamask/snaps-controllers';\nimport type { HandlerType, ValidatedSnapId } from '@metamask/snaps-utils';\nimport type { Json } from '@metamask/utils';\nimport { assert } from 'superstruct';\n\nimport { KeyringClient, Sender } from './keyring-client';\nimport { InternalRequest, InternalRequestStruct } from './keyring-internal-api';\n\n/**\n * Implementation of the `Sender` interface that can be used to send requests\n * to a snap through a `SnapController`.\n */\nclass SnapControllerSender implements Sender {\n #snapId: string;\n\n #origin: string;\n\n #controller: SnapController;\n\n #handler: HandlerType;\n\n /**\n * Create a new instance of `SnapControllerSender`.\n *\n * @param controller - The `SnapController` instance to send requests to.\n * @param snapId - The ID of the snap to use.\n * @param origin - The sender's origin.\n * @param handler - The handler type.\n */\n constructor(\n controller: any,\n snapId: string,\n origin: string,\n handler: HandlerType,\n ) {\n this.#controller = controller;\n this.#snapId = snapId;\n this.#origin = origin;\n this.#handler = handler;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param request - JSON-RPC request to send to the snap.\n * @returns A promise that resolves to the response of the request.\n */\n async send<Response extends Json>(\n request: InternalRequest,\n ): Promise<Response> {\n assert(request, InternalRequestStruct);\n return (await this.#controller.handleRequest({\n snapId: this.#snapId as ValidatedSnapId,\n origin: this.#origin,\n handler: this.#handler,\n request,\n })) as Response;\n }\n}\n\n/**\n * A `KeyringClient` that allows the communication with a snap through the\n * `SnapController`.\n */\nexport class KeyringSnapControllerClient extends KeyringClient {\n #controller: SnapController;\n\n /**\n * Create a new instance of `KeyringSnapControllerClient`.\n *\n * The `handlerType` argument has a hard-coded default `string` value instead\n * of a `HandlerType` value to prevent the `@metamask/snaps-utils` module\n * from being required at runtime.\n *\n * @param args - Constructor arguments.\n * @param args.controller - The `SnapController` instance to use.\n * @param args.snapId - The ID of the snap to use (default: `'undefined'`).\n * @param args.origin - The sender's origin (default: `'metamask'`).\n * @param args.handler - The handler type (default: `'onRpcRequest'`).\n */\n constructor({\n controller,\n snapId = 'undefined',\n origin = 'metamask',\n handler = 'onRpcRequest' as HandlerType,\n }: {\n controller: SnapController;\n snapId?: string;\n origin?: string;\n handler?: HandlerType;\n }) {\n super(new SnapControllerSender(controller, snapId, origin, handler));\n this.#controller = controller;\n }\n\n /**\n * Create a new instance of `KeyringSnapControllerClient` with the specified\n * `snapId`.\n *\n * @param snapId - The ID of the snap to use in the new instance.\n * @returns A new instance of `KeyringSnapControllerClient` with the\n * specified snap ID.\n */\n withSnapId(snapId: string): KeyringSnapControllerClient {\n return new KeyringSnapControllerClient({\n controller: this.#controller,\n snapId,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"keyring-snap-controller-client.js","sourceRoot":"","sources":["../src/keyring-snap-controller-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,qDAAyD;AACzD,iEAIgC;AAChC,mCAAqC;AAErC;;;GAGG;AACH,MAAM,oBAAoB;IASxB;;;;;;;OAOG;IACH,YACE,UAAe,EACf,MAAc,EACd,MAAc,EACd,OAAoB;QApBtB,+CAAgB;QAEhB,+CAAgB;QAEhB,mDAA4B;QAE5B,gDAAsB;QAgBpB,uBAAA,IAAI,oCAAe,UAAU,MAAA,CAAC;QAC9B,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,iCAAY,OAAO,MAAA,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,OAAO,IAAA,kBAAU,EACf,MAAM,uBAAA,IAAI,wCAAY,CAAC,aAAa,CAAC;YACnC,MAAM,EAAE,uBAAA,IAAI,oCAA2B;YACvC,MAAM,EAAE,uBAAA,IAAI,oCAAQ;YACpB,OAAO,EAAE,uBAAA,IAAI,qCAAS;YACtB,OAAO;SACR,CAAC,EACF,6CAAsB,CACvB,CAAC;IACJ,CAAC;CACF;;AAED;;;GAGG;AACH,MAAa,2BAA4B,SAAQ,8BAAa;IAG5D;;;;;;;;;;;;OAYG;IACH,YAAY,EACV,UAAU,EACV,MAAM,GAAG,WAAW,EACpB,MAAM,GAAG,UAAU,EACnB,OAAO,GAAG,cAA6B,GAMxC;QACC,KAAK,CAAC,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QA1BvE,0DAA4B;QA2B1B,uBAAA,IAAI,2CAAe,UAAU,MAAA,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,2BAA2B,CAAC;YACrC,UAAU,EAAE,uBAAA,IAAI,+CAAY;YAC5B,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF;AA7CD,kEA6CC","sourcesContent":["import type { SnapController } from '@metamask/snaps-controllers';\nimport type { HandlerType, ValidatedSnapId } from '@metamask/snaps-utils';\n\nimport { KeyringClient, Sender } from './keyring-client';\nimport {\n InternalRequest,\n InternalResponse,\n InternalResponseStruct,\n} from './keyring-internal-api';\nimport { strictMask } from './utils';\n\n/**\n * Implementation of the `Sender` interface that can be used to send requests\n * to a snap through a `SnapController`.\n */\nclass SnapControllerSender implements Sender {\n #snapId: string;\n\n #origin: string;\n\n #controller: SnapController;\n\n #handler: HandlerType;\n\n /**\n * Create a new instance of `SnapControllerSender`.\n *\n * @param controller - The `SnapController` instance to send requests to.\n * @param snapId - The ID of the snap to use.\n * @param origin - The sender's origin.\n * @param handler - The handler type.\n */\n constructor(\n controller: any,\n snapId: string,\n origin: string,\n handler: HandlerType,\n ) {\n this.#controller = controller;\n this.#snapId = snapId;\n this.#origin = origin;\n this.#handler = handler;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param request - JSON-RPC request to send to the snap.\n * @returns A promise that resolves to the response of the request.\n */\n async send(request: InternalRequest): Promise<InternalResponse> {\n return strictMask(\n await this.#controller.handleRequest({\n snapId: this.#snapId as ValidatedSnapId,\n origin: this.#origin,\n handler: this.#handler,\n request,\n }),\n InternalResponseStruct,\n );\n }\n}\n\n/**\n * A `KeyringClient` that allows the communication with a snap through the\n * `SnapController`.\n */\nexport class KeyringSnapControllerClient extends KeyringClient {\n #controller: SnapController;\n\n /**\n * Create a new instance of `KeyringSnapControllerClient`.\n *\n * The `handlerType` argument has a hard-coded default `string` value instead\n * of a `HandlerType` value to prevent the `@metamask/snaps-utils` module\n * from being required at runtime.\n *\n * @param args - Constructor arguments.\n * @param args.controller - The `SnapController` instance to use.\n * @param args.snapId - The ID of the snap to use (default: `'undefined'`).\n * @param args.origin - The sender's origin (default: `'metamask'`).\n * @param args.handler - The handler type (default: `'onRpcRequest'`).\n */\n constructor({\n controller,\n snapId = 'undefined',\n origin = 'metamask',\n handler = 'onRpcRequest' as HandlerType,\n }: {\n controller: SnapController;\n snapId?: string;\n origin?: string;\n handler?: HandlerType;\n }) {\n super(new SnapControllerSender(controller, snapId, origin, handler));\n this.#controller = controller;\n }\n\n /**\n * Create a new instance of `KeyringSnapControllerClient` with the specified\n * `snapId`.\n *\n * @param snapId - The ID of the snap to use in the new instance.\n * @returns A new instance of `KeyringSnapControllerClient` with the\n * specified snap ID.\n */\n withSnapId(snapId: string): KeyringSnapControllerClient {\n return new KeyringSnapControllerClient({\n controller: this.#controller,\n snapId,\n });\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import type { MetaMaskInpageProvider } from '@metamask/providers';
2
- import type { Json } from '@metamask/utils';
3
2
  import { KeyringClient, Sender } from './keyring-client';
4
- import type { InternalRequest } from './keyring-internal-api';
3
+ import { type InternalRequest, InternalResponse } from './keyring-internal-api';
5
4
  /**
6
5
  * Implementation of the `Sender` interface that can be used to send requests
7
6
  * to a snap through the snap JSON-RPC API.
@@ -21,7 +20,7 @@ export declare class SnapRpcSender implements Sender {
21
20
  * @param request - The JSON-RPC request to send to the snap.
22
21
  * @returns A promise that resolves to the response of the request.
23
22
  */
24
- send<Response extends Json>(request: InternalRequest): Promise<Response>;
23
+ send(request: InternalRequest): Promise<InternalResponse>;
25
24
  }
26
25
  /**
27
26
  * A `KeyringClient` that allows the communication with a snap through the snap
@@ -14,6 +14,8 @@ var _SnapRpcSender_origin, _SnapRpcSender_provider;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.KeyringSnapRpcClient = exports.SnapRpcSender = void 0;
16
16
  const keyring_client_1 = require("./keyring-client");
17
+ const keyring_internal_api_1 = require("./keyring-internal-api");
18
+ const utils_1 = require("./utils");
17
19
  /**
18
20
  * Implementation of the `Sender` interface that can be used to send requests
19
21
  * to a snap through the snap JSON-RPC API.
@@ -38,14 +40,13 @@ class SnapRpcSender {
38
40
  * @returns A promise that resolves to the response of the request.
39
41
  */
40
42
  async send(request) {
41
- const response = await __classPrivateFieldGet(this, _SnapRpcSender_provider, "f").request({
43
+ return (0, utils_1.strictMask)(await __classPrivateFieldGet(this, _SnapRpcSender_provider, "f").request({
42
44
  method: 'wallet_invokeSnap',
43
45
  params: {
44
46
  snapId: __classPrivateFieldGet(this, _SnapRpcSender_origin, "f"),
45
47
  request,
46
48
  },
47
- });
48
- return response;
49
+ }), keyring_internal_api_1.InternalResponseStruct);
49
50
  }
50
51
  }
51
52
  exports.SnapRpcSender = SnapRpcSender;
@@ -1 +1 @@
1
- {"version":3,"file":"keyring-snap-rpc-client.js","sourceRoot":"","sources":["../src/keyring-snap-rpc-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,qDAAyD;AAGzD;;;GAGG;AACH,MAAa,aAAa;IAKxB;;;;;OAKG;IACH,YAAY,MAAc,EAAE,QAAgC;QAV5D,wCAAgB;QAEhB,0CAAkC;QAShC,uBAAA,IAAI,yBAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,2BAAa,QAAQ,MAAA,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CACR,OAAwB;QAExB,MAAM,QAAQ,GAAG,MAAM,uBAAA,IAAI,+BAAU,CAAC,OAAO,CAAC;YAC5C,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE;gBACN,MAAM,EAAE,uBAAA,IAAI,6BAAQ;gBACpB,OAAO;aACR;SACF,CAAC,CAAC;QACH,OAAO,QAAoB,CAAC;IAC9B,CAAC;CACF;AAlCD,sCAkCC;;AAED;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,8BAAa;IACrD;;;;;OAKG;IACH,YAAY,MAAc,EAAE,QAAgC;QAC1D,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAVD,oDAUC","sourcesContent":["import type { MetaMaskInpageProvider } from '@metamask/providers';\nimport type { Json } from '@metamask/utils';\n\nimport { KeyringClient, Sender } from './keyring-client';\nimport type { InternalRequest } from './keyring-internal-api';\n\n/**\n * Implementation of the `Sender` interface that can be used to send requests\n * to a snap through the snap JSON-RPC API.\n */\nexport class SnapRpcSender implements Sender {\n #origin: string;\n\n #provider: MetaMaskInpageProvider;\n\n /**\n * Create a new instance of `SnapRpcSender`.\n *\n * @param origin - The caller's origin.\n * @param provider - The `MetaMaskInpageProvider` instance to use.\n */\n constructor(origin: string, provider: MetaMaskInpageProvider) {\n this.#origin = origin;\n this.#provider = provider;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param request - The JSON-RPC request to send to the snap.\n * @returns A promise that resolves to the response of the request.\n */\n async send<Response extends Json>(\n request: InternalRequest,\n ): Promise<Response> {\n const response = await this.#provider.request({\n method: 'wallet_invokeSnap',\n params: {\n snapId: this.#origin,\n request,\n },\n });\n return response as Response;\n }\n}\n\n/**\n * A `KeyringClient` that allows the communication with a snap through the snap\n * JSON-RPC API.\n */\nexport class KeyringSnapRpcClient extends KeyringClient {\n /**\n * Create a new instance of `KeyringSnapRpcClient`.\n *\n * @param origin - Caller's origin.\n * @param provider - The `MetaMaskInpageProvider` instance to use.\n */\n constructor(origin: string, provider: MetaMaskInpageProvider) {\n super(new SnapRpcSender(origin, provider));\n }\n}\n"]}
1
+ {"version":3,"file":"keyring-snap-rpc-client.js","sourceRoot":"","sources":["../src/keyring-snap-rpc-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,qDAAyD;AACzD,iEAIgC;AAChC,mCAAqC;AAErC;;;GAGG;AACH,MAAa,aAAa;IAKxB;;;;;OAKG;IACH,YAAY,MAAc,EAAE,QAAgC;QAV5D,wCAAgB;QAEhB,0CAAkC;QAShC,uBAAA,IAAI,yBAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,2BAAa,QAAQ,MAAA,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,OAAO,IAAA,kBAAU,EACf,MAAM,uBAAA,IAAI,+BAAU,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE;gBACN,MAAM,EAAE,uBAAA,IAAI,6BAAQ;gBACpB,OAAO;aACR;SACF,CAAC,EACF,6CAAsB,CACvB,CAAC;IACJ,CAAC;CACF;AAlCD,sCAkCC;;AAED;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,8BAAa;IACrD;;;;;OAKG;IACH,YAAY,MAAc,EAAE,QAAgC;QAC1D,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAVD,oDAUC","sourcesContent":["import type { MetaMaskInpageProvider } from '@metamask/providers';\n\nimport { KeyringClient, Sender } from './keyring-client';\nimport {\n InternalResponseStruct,\n type InternalRequest,\n InternalResponse,\n} from './keyring-internal-api';\nimport { strictMask } from './utils';\n\n/**\n * Implementation of the `Sender` interface that can be used to send requests\n * to a snap through the snap JSON-RPC API.\n */\nexport class SnapRpcSender implements Sender {\n #origin: string;\n\n #provider: MetaMaskInpageProvider;\n\n /**\n * Create a new instance of `SnapRpcSender`.\n *\n * @param origin - The caller's origin.\n * @param provider - The `MetaMaskInpageProvider` instance to use.\n */\n constructor(origin: string, provider: MetaMaskInpageProvider) {\n this.#origin = origin;\n this.#provider = provider;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param request - The JSON-RPC request to send to the snap.\n * @returns A promise that resolves to the response of the request.\n */\n async send(request: InternalRequest): Promise<InternalResponse> {\n return strictMask(\n await this.#provider.request({\n method: 'wallet_invokeSnap',\n params: {\n snapId: this.#origin,\n request,\n },\n }),\n InternalResponseStruct,\n );\n }\n}\n\n/**\n * A `KeyringClient` that allows the communication with a snap through the snap\n * JSON-RPC API.\n */\nexport class KeyringSnapRpcClient extends KeyringClient {\n /**\n * Create a new instance of `KeyringSnapRpcClient`.\n *\n * @param origin - Caller's origin.\n * @param provider - The `MetaMaskInpageProvider` instance to use.\n */\n constructor(origin: string, provider: MetaMaskInpageProvider) {\n super(new SnapRpcSender(origin, provider));\n }\n}\n"]}
package/dist/utils.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { Struct } from 'superstruct';
1
2
  /**
2
3
  * UUIDv4 struct.
3
4
  */
4
- export declare const UuidStruct: import("superstruct").Struct<string, null>;
5
+ export declare const UuidStruct: Struct<string, null>;
5
6
  /**
6
7
  * Omit keys from a union type.
7
8
  *
@@ -11,3 +12,15 @@ export declare const UuidStruct: import("superstruct").Struct<string, null>;
11
12
  * See: <https://github.com/microsoft/TypeScript/issues/31501#issuecomment-1280579305>
12
13
  */
13
14
  export declare type OmitUnion<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
15
+ /**
16
+ * Assert that a value is valid according to a struct.
17
+ *
18
+ * It is similar to superstruct's mask function, but it does not ignore extra
19
+ * properties.
20
+ *
21
+ * @param value - Value to check.
22
+ * @param struct - Struct to validate the value against.
23
+ * @param message - Error message to throw if the value is not valid.
24
+ * @returns The value if it is valid.
25
+ */
26
+ export declare function strictMask<T, S>(value: unknown, struct: Struct<T, S>, message?: string): T;
package/dist/utils.js CHANGED
@@ -1,9 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UuidStruct = void 0;
3
+ exports.strictMask = exports.UuidStruct = void 0;
4
4
  const superstruct_1 = require("superstruct");
5
5
  /**
6
6
  * UUIDv4 struct.
7
7
  */
8
8
  exports.UuidStruct = (0, superstruct_1.pattern)((0, superstruct_1.string)(), /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu);
9
+ /**
10
+ * Assert that a value is valid according to a struct.
11
+ *
12
+ * It is similar to superstruct's mask function, but it does not ignore extra
13
+ * properties.
14
+ *
15
+ * @param value - Value to check.
16
+ * @param struct - Struct to validate the value against.
17
+ * @param message - Error message to throw if the value is not valid.
18
+ * @returns The value if it is valid.
19
+ */
20
+ function strictMask(value, struct, message) {
21
+ (0, superstruct_1.assert)(value, struct, message);
22
+ return value;
23
+ }
24
+ exports.strictMask = strictMask;
9
25
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAE9C;;GAEG;AACU,QAAA,UAAU,GAAG,IAAA,qBAAO,EAC/B,IAAA,oBAAM,GAAE,EACR,yEAAyE,CAC1E,CAAC","sourcesContent":["import { pattern, string } from 'superstruct';\n\n/**\n * UUIDv4 struct.\n */\nexport const UuidStruct = pattern(\n string(),\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,\n);\n\n/**\n * Omit keys from a union type.\n *\n * The normal `Omit` type does not distribute over unions. So we use this\n * workaround that applies `Omit` to each member of the union.\n *\n * See: <https://github.com/microsoft/TypeScript/issues/31501#issuecomment-1280579305>\n */\nexport type OmitUnion<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,6CAA8D;AAE9D;;GAEG;AACU,QAAA,UAAU,GAAG,IAAA,qBAAO,EAC/B,IAAA,oBAAM,GAAE,EACR,yEAAyE,CAC1E,CAAC;AAcF;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CACxB,KAAc,EACd,MAAoB,EACpB,OAAgB;IAEhB,IAAA,oBAAM,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,gCAOC","sourcesContent":["import { Struct, assert, pattern, string } from 'superstruct';\n\n/**\n * UUIDv4 struct.\n */\nexport const UuidStruct = pattern(\n string(),\n /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,\n);\n\n/**\n * Omit keys from a union type.\n *\n * The normal `Omit` type does not distribute over unions. So we use this\n * workaround that applies `Omit` to each member of the union.\n *\n * See: <https://github.com/microsoft/TypeScript/issues/31501#issuecomment-1280579305>\n */\nexport type OmitUnion<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n\n/**\n * Assert that a value is valid according to a struct.\n *\n * It is similar to superstruct's mask function, but it does not ignore extra\n * properties.\n *\n * @param value - Value to check.\n * @param struct - Struct to validate the value against.\n * @param message - Error message to throw if the value is not valid.\n * @returns The value if it is valid.\n */\nexport function strictMask<T, S>(\n value: unknown,\n struct: Struct<T, S>,\n message?: string,\n): T {\n assert(value, struct, message);\n return value;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/keyring-api",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "MetaMask Keyring API",
5
5
  "homepage": "https://github.com/MetaMask/keyring-api#readme",
6
6
  "bugs": {
@@ -32,8 +32,8 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@metamask/providers": "^11.0.0",
35
- "@metamask/snaps-controllers": "^0.34.1-flask.1",
36
- "@metamask/snaps-utils": "^0.34.1-flask.1",
35
+ "@metamask/snaps-controllers": "^1.0.0-prerelease.1",
36
+ "@metamask/snaps-utils": "^1.0.0-prerelease.1",
37
37
  "@metamask/utils": "^6.0.1",
38
38
  "@types/uuid": "^9.0.1",
39
39
  "superstruct": "^1.0.3",