@metamask/keyring-api 0.1.0

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.
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InternalResponseStruct = exports.InternalRequestStruct = exports.RejectRequestResponseStruct = exports.RejectRequestRequestStruct = exports.ApproveRequestResponseStruct = exports.ApproveRequestRequestStruct = exports.SubmitRequestRequestStruct = exports.GetRequestResponseStruct = exports.GetRequestRequestStruct = exports.ListRequestsResponseStruct = exports.ListRequestsRequestStruct = exports.DeleteAccountResponseStruct = exports.DeleteAccountRequestStruct = exports.UpdateAccountResponseStruct = exports.UpdateAccountRequestStruct = exports.FilterAccountChainsResponseStruct = exports.FilterAccountChainsStruct = exports.CreateAccountResponseStruct = exports.CreateAccountRequestStruct = exports.GetAccountResponseStruct = exports.GetAccountRequestStruct = exports.ListAccountsResponseStruct = exports.ListAccountsRequestStruct = void 0;
4
+ const utils_1 = require("@metamask/utils");
5
+ const superstruct_1 = require("superstruct");
6
+ const keyring_api_1 = require("./keyring-api");
7
+ const utils_2 = require("./utils");
8
+ // ----------------------------------------------------------------------------
9
+ // List accounts
10
+ exports.ListAccountsRequestStruct = (0, superstruct_1.object)({
11
+ id: utils_2.UuidStruct,
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
+ ]),
26
+ });
27
+ exports.ListAccountsResponseStruct = (0, superstruct_1.array)(keyring_api_1.KeyringAccountStruct);
28
+ // ----------------------------------------------------------------------------
29
+ // Get account
30
+ exports.GetAccountRequestStruct = (0, superstruct_1.object)({
31
+ id: utils_2.UuidStruct,
32
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
33
+ method: (0, superstruct_1.literal)('keyring_getAccount'),
34
+ params: (0, superstruct_1.object)({
35
+ id: (0, superstruct_1.string)(),
36
+ }),
37
+ });
38
+ exports.GetAccountResponseStruct = keyring_api_1.KeyringAccountStruct;
39
+ // ----------------------------------------------------------------------------
40
+ // Create account
41
+ exports.CreateAccountRequestStruct = (0, superstruct_1.object)({
42
+ id: utils_2.UuidStruct,
43
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
44
+ method: (0, superstruct_1.literal)('keyring_createAccount'),
45
+ params: (0, superstruct_1.object)({
46
+ name: (0, superstruct_1.string)(),
47
+ options: (0, superstruct_1.nullable)((0, superstruct_1.record)((0, superstruct_1.string)(), utils_1.JsonStruct)),
48
+ }),
49
+ });
50
+ exports.CreateAccountResponseStruct = keyring_api_1.KeyringAccountStruct;
51
+ // ----------------------------------------------------------------------------
52
+ // Filter account chains
53
+ exports.FilterAccountChainsStruct = (0, superstruct_1.object)({
54
+ id: utils_2.UuidStruct,
55
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
56
+ method: (0, superstruct_1.literal)('keyring_filterAccountChains'),
57
+ params: (0, superstruct_1.object)({
58
+ id: (0, superstruct_1.string)(),
59
+ chains: (0, superstruct_1.array)((0, superstruct_1.string)()),
60
+ }),
61
+ });
62
+ exports.FilterAccountChainsResponseStruct = (0, superstruct_1.array)((0, superstruct_1.string)());
63
+ // ----------------------------------------------------------------------------
64
+ // Update account
65
+ exports.UpdateAccountRequestStruct = (0, superstruct_1.object)({
66
+ id: utils_2.UuidStruct,
67
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
68
+ method: (0, superstruct_1.literal)('keyring_updateAccount'),
69
+ params: (0, superstruct_1.object)({
70
+ account: keyring_api_1.KeyringAccountStruct,
71
+ }),
72
+ });
73
+ exports.UpdateAccountResponseStruct = (0, superstruct_1.nullable)((0, superstruct_1.never)());
74
+ // ----------------------------------------------------------------------------
75
+ // Delete account
76
+ exports.DeleteAccountRequestStruct = (0, superstruct_1.object)({
77
+ id: utils_2.UuidStruct,
78
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
79
+ method: (0, superstruct_1.literal)('keyring_deleteAccount'),
80
+ params: (0, superstruct_1.object)({
81
+ id: (0, superstruct_1.string)(),
82
+ }),
83
+ });
84
+ exports.DeleteAccountResponseStruct = (0, superstruct_1.nullable)((0, superstruct_1.never)());
85
+ // ----------------------------------------------------------------------------
86
+ // List requests
87
+ exports.ListRequestsRequestStruct = (0, superstruct_1.object)({
88
+ id: utils_2.UuidStruct,
89
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
90
+ method: (0, superstruct_1.literal)('keyring_listRequests'),
91
+ });
92
+ exports.ListRequestsResponseStruct = (0, superstruct_1.array)(keyring_api_1.KeyringRequestStruct);
93
+ // ----------------------------------------------------------------------------
94
+ // Get request
95
+ exports.GetRequestRequestStruct = (0, superstruct_1.object)({
96
+ id: utils_2.UuidStruct,
97
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
98
+ method: (0, superstruct_1.literal)('keyring_getRequest'),
99
+ params: (0, superstruct_1.object)({
100
+ id: (0, superstruct_1.string)(),
101
+ }),
102
+ });
103
+ exports.GetRequestResponseStruct = keyring_api_1.KeyringRequestStruct;
104
+ // ----------------------------------------------------------------------------
105
+ // Submit request
106
+ exports.SubmitRequestRequestStruct = (0, superstruct_1.object)({
107
+ id: utils_2.UuidStruct,
108
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
109
+ method: (0, superstruct_1.literal)('keyring_submitRequest'),
110
+ params: keyring_api_1.KeyringRequestStruct,
111
+ });
112
+ // The response type is already defined in the `keyring-api.ts` file since it
113
+ // is used by the `Keyring` interface.
114
+ // ----------------------------------------------------------------------------
115
+ // Approve request
116
+ exports.ApproveRequestRequestStruct = (0, superstruct_1.object)({
117
+ id: utils_2.UuidStruct,
118
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
119
+ method: (0, superstruct_1.literal)('keyring_approveRequest'),
120
+ params: (0, superstruct_1.object)({
121
+ id: (0, superstruct_1.string)(),
122
+ }),
123
+ });
124
+ exports.ApproveRequestResponseStruct = (0, superstruct_1.nullable)((0, superstruct_1.never)());
125
+ // ----------------------------------------------------------------------------
126
+ // Reject request
127
+ exports.RejectRequestRequestStruct = (0, superstruct_1.object)({
128
+ id: utils_2.UuidStruct,
129
+ jsonrpc: (0, superstruct_1.literal)('2.0'),
130
+ method: (0, superstruct_1.literal)('keyring_rejectRequest'),
131
+ params: (0, superstruct_1.object)({
132
+ id: (0, superstruct_1.string)(),
133
+ }),
134
+ });
135
+ exports.RejectRequestResponseStruct = (0, superstruct_1.nullable)((0, superstruct_1.never)());
136
+ // ----------------------------------------------------------------------------
137
+ // Internal request
138
+ exports.InternalRequestStruct = (0, superstruct_1.union)([
139
+ exports.ListAccountsRequestStruct,
140
+ exports.GetAccountRequestStruct,
141
+ exports.CreateAccountRequestStruct,
142
+ exports.FilterAccountChainsStruct,
143
+ exports.UpdateAccountRequestStruct,
144
+ exports.DeleteAccountRequestStruct,
145
+ exports.ListRequestsRequestStruct,
146
+ exports.GetRequestRequestStruct,
147
+ exports.SubmitRequestRequestStruct,
148
+ exports.ApproveRequestRequestStruct,
149
+ exports.RejectRequestRequestStruct,
150
+ ]);
151
+ // ----------------------------------------------------------------------------
152
+ // Internal response
153
+ exports.InternalResponseStruct = (0, superstruct_1.union)([
154
+ exports.ListAccountsResponseStruct,
155
+ exports.GetAccountResponseStruct,
156
+ exports.CreateAccountResponseStruct,
157
+ exports.FilterAccountChainsResponseStruct,
158
+ exports.UpdateAccountResponseStruct,
159
+ exports.DeleteAccountResponseStruct,
160
+ exports.ListRequestsResponseStruct,
161
+ exports.GetRequestResponseStruct,
162
+ keyring_api_1.SubmitRequestResponseStruct,
163
+ exports.ApproveRequestResponseStruct,
164
+ exports.RejectRequestResponseStruct,
165
+ ]);
166
+ //# sourceMappingURL=keyring-internal-api.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,30 @@
1
+ import type { OnRpcRequestHandler } from '@metamask/snaps-utils';
2
+ import type { Json, JsonRpcRequest } from '@metamask/utils';
3
+ import type { Keyring } from './keyring-api';
4
+ /**
5
+ * Error thrown when a keyring JSON-RPC method is not supported.
6
+ */
7
+ export declare class MethodNotSupportedError extends Error {
8
+ constructor(method: string);
9
+ }
10
+ /**
11
+ * Build a chain of handlers for a JSON-RPC request.
12
+ *
13
+ * If a handler throws a MethodNotSupportedError, the next handler in the chain
14
+ * is called. If all handlers throw a MethodNotSupportedError, the error is re-
15
+ * thrown.
16
+ *
17
+ * Any other error thrown by a handler is re-thrown.
18
+ *
19
+ * @param handlers - Handlers to chain.
20
+ * @returns A handler that chains the given handlers.
21
+ */
22
+ export declare function chainHandlers(...handlers: OnRpcRequestHandler[]): OnRpcRequestHandler;
23
+ /**
24
+ * Handles a keyring JSON-RPC request.
25
+ *
26
+ * @param keyring - Keyring instance.
27
+ * @param request - Keyring JSON-RPC request.
28
+ * @returns A promise that resolves to the keyring response.
29
+ */
30
+ export declare function keyringRpcDispatcher(keyring: Keyring, request: JsonRpcRequest): Promise<Json | void>;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keyringRpcDispatcher = exports.chainHandlers = exports.MethodNotSupportedError = void 0;
4
+ const superstruct_1 = require("superstruct");
5
+ const keyring_internal_api_1 = require("./keyring-internal-api");
6
+ /**
7
+ * Error thrown when a keyring JSON-RPC method is not supported.
8
+ */
9
+ class MethodNotSupportedError extends Error {
10
+ constructor(method) {
11
+ super(`Method not supported: ${method}`);
12
+ }
13
+ }
14
+ exports.MethodNotSupportedError = MethodNotSupportedError;
15
+ /**
16
+ * Build a chain of handlers for a JSON-RPC request.
17
+ *
18
+ * If a handler throws a MethodNotSupportedError, the next handler in the chain
19
+ * is called. If all handlers throw a MethodNotSupportedError, the error is re-
20
+ * thrown.
21
+ *
22
+ * Any other error thrown by a handler is re-thrown.
23
+ *
24
+ * @param handlers - Handlers to chain.
25
+ * @returns A handler that chains the given handlers.
26
+ */
27
+ function chainHandlers(...handlers) {
28
+ return async ({ origin, request }) => {
29
+ for (const handler of handlers) {
30
+ try {
31
+ return await handler({ origin, request });
32
+ }
33
+ catch (error) {
34
+ if (!(error instanceof MethodNotSupportedError)) {
35
+ throw error;
36
+ }
37
+ }
38
+ }
39
+ // All handlers failed to handle the request.
40
+ throw new MethodNotSupportedError(request.method);
41
+ };
42
+ }
43
+ exports.chainHandlers = chainHandlers;
44
+ /**
45
+ * Handles a keyring JSON-RPC request.
46
+ *
47
+ * @param keyring - Keyring instance.
48
+ * @param request - Keyring JSON-RPC request.
49
+ * @returns A promise that resolves to the keyring response.
50
+ */
51
+ async function keyringRpcDispatcher(keyring, request) {
52
+ switch (request.method) {
53
+ case 'keyring_listAccounts':
54
+ return await keyring.listAccounts();
55
+ case 'keyring_getAccount': {
56
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.GetAccountRequestStruct);
57
+ return await keyring.getAccount(request.params.id);
58
+ }
59
+ case 'keyring_createAccount': {
60
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.CreateAccountRequestStruct);
61
+ return await keyring.createAccount(request.params.name, request.params.options);
62
+ }
63
+ case 'keyring_filterAccountChains': {
64
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.FilterAccountChainsStruct);
65
+ return await keyring.filterAccountChains(request.params.id, request.params.chains);
66
+ }
67
+ case 'keyring_updateAccount': {
68
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.UpdateAccountRequestStruct);
69
+ return await keyring.updateAccount(request.params.account);
70
+ }
71
+ case 'keyring_deleteAccount': {
72
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.DeleteAccountRequestStruct);
73
+ return await keyring.deleteAccount(request.params.id);
74
+ }
75
+ case 'keyring_listRequests':
76
+ return await keyring.listRequests();
77
+ case 'keyring_getRequest': {
78
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.GetRequestRequestStruct);
79
+ return await keyring.getRequest(request.params.id);
80
+ }
81
+ case 'keyring_submitRequest': {
82
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.SubmitRequestRequestStruct);
83
+ return await keyring.submitRequest(request.params);
84
+ }
85
+ case 'keyring_approveRequest': {
86
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.ApproveRequestRequestStruct);
87
+ return await keyring.approveRequest(request.params.id);
88
+ }
89
+ case 'keyring_rejectRequest': {
90
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.RejectRequestRequestStruct);
91
+ return await keyring.rejectRequest(request.params.id);
92
+ }
93
+ default:
94
+ throw new MethodNotSupportedError(request.method);
95
+ }
96
+ }
97
+ exports.keyringRpcDispatcher = keyringRpcDispatcher;
98
+ //# sourceMappingURL=keyring-rpc-dispatcher.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,38 @@
1
+ import type { SnapController } from '@metamask/snaps-controllers';
2
+ import type { HandlerType } from '@metamask/snaps-utils';
3
+ import { KeyringClient } from './keyring-client';
4
+ /**
5
+ * A `KeyringClient` that allows the communication with a snap through the
6
+ * `SnapController`.
7
+ */
8
+ export declare class KeyringSnapControllerClient extends KeyringClient {
9
+ #private;
10
+ /**
11
+ * Create a new instance of `KeyringSnapControllerClient`.
12
+ *
13
+ * The `handlerType` argument has a hard-coded default `string` value instead
14
+ * of a `HandlerType` value to prevent the `@metamask/snaps-utils` module
15
+ * from being required at runtime.
16
+ *
17
+ * @param args - Constructor arguments.
18
+ * @param args.controller - The `SnapController` instance to use.
19
+ * @param args.snapId - The ID of the snap to use (default: `'undefined'`).
20
+ * @param args.origin - The sender's origin (default: `'metamask'`).
21
+ * @param args.handler - The handler type (default: `'onRpcRequest'`).
22
+ */
23
+ constructor({ controller, snapId, origin, handler, }: {
24
+ controller: SnapController;
25
+ snapId?: string;
26
+ origin?: string;
27
+ handler?: HandlerType;
28
+ });
29
+ /**
30
+ * Create a new instance of `KeyringSnapControllerClient` with the specified
31
+ * `snapId`.
32
+ *
33
+ * @param snapId - The ID of the snap to use in the new instance.
34
+ * @returns A new instance of `KeyringSnapControllerClient` with the
35
+ * specified snap ID.
36
+ */
37
+ withSnapId(snapId: string): KeyringSnapControllerClient;
38
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _SnapControllerSender_snapId, _SnapControllerSender_origin, _SnapControllerSender_controller, _SnapControllerSender_handler, _KeyringSnapControllerClient_controller;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.KeyringSnapControllerClient = void 0;
16
+ const superstruct_1 = require("superstruct");
17
+ const keyring_client_1 = require("./keyring-client");
18
+ const keyring_internal_api_1 = require("./keyring-internal-api");
19
+ /**
20
+ * Implementation of the `Sender` interface that can be used to send requests
21
+ * to a snap through a `SnapController`.
22
+ */
23
+ class SnapControllerSender {
24
+ /**
25
+ * Create a new instance of `SnapControllerSender`.
26
+ *
27
+ * @param controller - The `SnapController` instance to send requests to.
28
+ * @param snapId - The ID of the snap to use.
29
+ * @param origin - The sender's origin.
30
+ * @param handler - The handler type.
31
+ */
32
+ constructor(controller, snapId, origin, handler) {
33
+ _SnapControllerSender_snapId.set(this, void 0);
34
+ _SnapControllerSender_origin.set(this, void 0);
35
+ _SnapControllerSender_controller.set(this, void 0);
36
+ _SnapControllerSender_handler.set(this, void 0);
37
+ __classPrivateFieldSet(this, _SnapControllerSender_controller, controller, "f");
38
+ __classPrivateFieldSet(this, _SnapControllerSender_snapId, snapId, "f");
39
+ __classPrivateFieldSet(this, _SnapControllerSender_origin, origin, "f");
40
+ __classPrivateFieldSet(this, _SnapControllerSender_handler, handler, "f");
41
+ }
42
+ /**
43
+ * Send a request to the snap and return the response.
44
+ *
45
+ * @param request - JSON-RPC request to send to the snap.
46
+ * @returns A promise that resolves to the response of the request.
47
+ */
48
+ async send(request) {
49
+ (0, superstruct_1.assert)(request, keyring_internal_api_1.InternalRequestStruct);
50
+ return (await __classPrivateFieldGet(this, _SnapControllerSender_controller, "f").handleRequest({
51
+ snapId: __classPrivateFieldGet(this, _SnapControllerSender_snapId, "f"),
52
+ origin: __classPrivateFieldGet(this, _SnapControllerSender_origin, "f"),
53
+ handler: __classPrivateFieldGet(this, _SnapControllerSender_handler, "f"),
54
+ request,
55
+ }));
56
+ }
57
+ }
58
+ _SnapControllerSender_snapId = new WeakMap(), _SnapControllerSender_origin = new WeakMap(), _SnapControllerSender_controller = new WeakMap(), _SnapControllerSender_handler = new WeakMap();
59
+ /**
60
+ * A `KeyringClient` that allows the communication with a snap through the
61
+ * `SnapController`.
62
+ */
63
+ class KeyringSnapControllerClient extends keyring_client_1.KeyringClient {
64
+ /**
65
+ * Create a new instance of `KeyringSnapControllerClient`.
66
+ *
67
+ * The `handlerType` argument has a hard-coded default `string` value instead
68
+ * of a `HandlerType` value to prevent the `@metamask/snaps-utils` module
69
+ * from being required at runtime.
70
+ *
71
+ * @param args - Constructor arguments.
72
+ * @param args.controller - The `SnapController` instance to use.
73
+ * @param args.snapId - The ID of the snap to use (default: `'undefined'`).
74
+ * @param args.origin - The sender's origin (default: `'metamask'`).
75
+ * @param args.handler - The handler type (default: `'onRpcRequest'`).
76
+ */
77
+ constructor({ controller, snapId = 'undefined', origin = 'metamask', handler = 'onRpcRequest', }) {
78
+ super(new SnapControllerSender(controller, snapId, origin, handler));
79
+ _KeyringSnapControllerClient_controller.set(this, void 0);
80
+ __classPrivateFieldSet(this, _KeyringSnapControllerClient_controller, controller, "f");
81
+ }
82
+ /**
83
+ * Create a new instance of `KeyringSnapControllerClient` with the specified
84
+ * `snapId`.
85
+ *
86
+ * @param snapId - The ID of the snap to use in the new instance.
87
+ * @returns A new instance of `KeyringSnapControllerClient` with the
88
+ * specified snap ID.
89
+ */
90
+ withSnapId(snapId) {
91
+ return new KeyringSnapControllerClient({
92
+ controller: __classPrivateFieldGet(this, _KeyringSnapControllerClient_controller, "f"),
93
+ snapId,
94
+ });
95
+ }
96
+ }
97
+ exports.KeyringSnapControllerClient = KeyringSnapControllerClient;
98
+ _KeyringSnapControllerClient_controller = new WeakMap();
99
+ //# sourceMappingURL=keyring-snap-controller-client.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,38 @@
1
+ import type { MetaMaskInpageProvider } from '@metamask/providers';
2
+ import type { Json } from '@metamask/utils';
3
+ import { KeyringClient, Sender } from './keyring-client';
4
+ import type { InternalRequest } from './keyring-internal-api';
5
+ /**
6
+ * Implementation of the `Sender` interface that can be used to send requests
7
+ * to a snap through the snap JSON-RPC API.
8
+ */
9
+ export declare class SnapRpcSender implements Sender {
10
+ #private;
11
+ /**
12
+ * Create a new instance of `SnapRpcSender`.
13
+ *
14
+ * @param origin - The caller's origin.
15
+ * @param provider - The `MetaMaskInpageProvider` instance to use.
16
+ */
17
+ constructor(origin: string, provider: MetaMaskInpageProvider);
18
+ /**
19
+ * Send a request to the snap and return the response.
20
+ *
21
+ * @param request - The JSON-RPC request to send to the snap.
22
+ * @returns A promise that resolves to the response of the request.
23
+ */
24
+ send<Response extends Json>(request: InternalRequest): Promise<Response>;
25
+ }
26
+ /**
27
+ * A `KeyringClient` that allows the communication with a snap through the snap
28
+ * JSON-RPC API.
29
+ */
30
+ export declare class KeyringSnapRpcClient extends KeyringClient {
31
+ /**
32
+ * Create a new instance of `KeyringSnapRpcClient`.
33
+ *
34
+ * @param origin - Caller's origin.
35
+ * @param provider - The `MetaMaskInpageProvider` instance to use.
36
+ */
37
+ constructor(origin: string, provider: MetaMaskInpageProvider);
38
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _SnapRpcSender_origin, _SnapRpcSender_provider;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.KeyringSnapRpcClient = exports.SnapRpcSender = void 0;
16
+ const keyring_client_1 = require("./keyring-client");
17
+ /**
18
+ * Implementation of the `Sender` interface that can be used to send requests
19
+ * to a snap through the snap JSON-RPC API.
20
+ */
21
+ class SnapRpcSender {
22
+ /**
23
+ * Create a new instance of `SnapRpcSender`.
24
+ *
25
+ * @param origin - The caller's origin.
26
+ * @param provider - The `MetaMaskInpageProvider` instance to use.
27
+ */
28
+ constructor(origin, provider) {
29
+ _SnapRpcSender_origin.set(this, void 0);
30
+ _SnapRpcSender_provider.set(this, void 0);
31
+ __classPrivateFieldSet(this, _SnapRpcSender_origin, origin, "f");
32
+ __classPrivateFieldSet(this, _SnapRpcSender_provider, provider, "f");
33
+ }
34
+ /**
35
+ * Send a request to the snap and return the response.
36
+ *
37
+ * @param request - The JSON-RPC request to send to the snap.
38
+ * @returns A promise that resolves to the response of the request.
39
+ */
40
+ async send(request) {
41
+ const response = await __classPrivateFieldGet(this, _SnapRpcSender_provider, "f").request({
42
+ method: 'wallet_invokeSnap',
43
+ params: {
44
+ snapId: __classPrivateFieldGet(this, _SnapRpcSender_origin, "f"),
45
+ request,
46
+ },
47
+ });
48
+ return response;
49
+ }
50
+ }
51
+ exports.SnapRpcSender = SnapRpcSender;
52
+ _SnapRpcSender_origin = new WeakMap(), _SnapRpcSender_provider = new WeakMap();
53
+ /**
54
+ * A `KeyringClient` that allows the communication with a snap through the snap
55
+ * JSON-RPC API.
56
+ */
57
+ class KeyringSnapRpcClient extends keyring_client_1.KeyringClient {
58
+ /**
59
+ * Create a new instance of `KeyringSnapRpcClient`.
60
+ *
61
+ * @param origin - Caller's origin.
62
+ * @param provider - The `MetaMaskInpageProvider` instance to use.
63
+ */
64
+ constructor(origin, provider) {
65
+ super(new SnapRpcSender(origin, provider));
66
+ }
67
+ }
68
+ exports.KeyringSnapRpcClient = KeyringSnapRpcClient;
69
+ //# sourceMappingURL=keyring-snap-rpc-client.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * UUIDv4 struct.
3
+ */
4
+ export declare const UuidStruct: import("superstruct").Struct<string, null>;
5
+ /**
6
+ * Omit keys from a union type.
7
+ *
8
+ * The normal `Omit` type does not distribute over unions. So we use this
9
+ * workaround that applies `Omit` to each member of the union.
10
+ *
11
+ * See: <https://github.com/microsoft/TypeScript/issues/31501#issuecomment-1280579305>
12
+ */
13
+ export declare type OmitUnion<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
package/dist/utils.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UuidStruct = void 0;
4
+ const superstruct_1 = require("superstruct");
5
+ /**
6
+ * UUIDv4 struct.
7
+ */
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
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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"]}