@metamask/keyring-api 0.1.3 → 0.2.1

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/dist/JsonRpcRequest.d.ts +15 -0
  3. package/dist/JsonRpcRequest.js +18 -0
  4. package/dist/JsonRpcRequest.js.map +1 -0
  5. package/dist/{keyring-client.d.ts → KeyringClient.d.ts} +7 -6
  6. package/dist/{keyring-client.js → KeyringClient.js} +25 -20
  7. package/dist/KeyringClient.js.map +1 -0
  8. package/dist/{keyring-snap-controller-client.d.ts → KeyringSnapControllerClient.d.ts} +7 -1
  9. package/dist/{keyring-snap-controller-client.js → KeyringSnapControllerClient.js} +13 -7
  10. package/dist/KeyringSnapControllerClient.js.map +1 -0
  11. package/dist/{keyring-snap-rpc-client.d.ts → KeyringSnapRpcClient.d.ts} +4 -3
  12. package/dist/{keyring-snap-rpc-client.js → KeyringSnapRpcClient.js} +5 -7
  13. package/dist/KeyringSnapRpcClient.js.map +1 -0
  14. package/dist/{keyring-api.d.ts → api.d.ts} +72 -52
  15. package/dist/api.js +110 -0
  16. package/dist/api.js.map +1 -0
  17. package/dist/events.d.ts +10 -0
  18. package/dist/events.js +17 -0
  19. package/dist/events.js.map +1 -0
  20. package/dist/index.d.ts +6 -5
  21. package/dist/index.js +6 -5
  22. package/dist/index.js.map +1 -1
  23. package/dist/{keyring-internal-api.d.ts → internal/api.d.ts} +129 -260
  24. package/dist/internal/api.js +126 -0
  25. package/dist/internal/api.js.map +1 -0
  26. package/dist/internal/events.d.ts +162 -0
  27. package/dist/internal/events.js +58 -0
  28. package/dist/internal/events.js.map +1 -0
  29. package/dist/internal/index.d.ts +2 -0
  30. package/dist/internal/index.js +19 -0
  31. package/dist/internal/index.js.map +1 -0
  32. package/dist/internal/types.d.ts +70 -0
  33. package/dist/internal/types.js +20 -0
  34. package/dist/internal/types.js.map +1 -0
  35. package/dist/{keyring-rpc-dispatcher.d.ts → rpc-handler.d.ts} +17 -2
  36. package/dist/rpc-handler.js +141 -0
  37. package/dist/rpc-handler.js.map +1 -0
  38. package/dist/snap-utils.d.ts +11 -0
  39. package/dist/snap-utils.js +21 -0
  40. package/dist/snap-utils.js.map +1 -0
  41. package/dist/utils.d.ts +3 -3
  42. package/dist/utils.js.map +1 -1
  43. package/package.json +14 -10
  44. package/dist/keyring-api.js +0 -81
  45. package/dist/keyring-api.js.map +0 -1
  46. package/dist/keyring-client.js.map +0 -1
  47. package/dist/keyring-internal-api.js +0 -154
  48. package/dist/keyring-internal-api.js.map +0 -1
  49. package/dist/keyring-rpc-dispatcher.js +0 -107
  50. package/dist/keyring-rpc-dispatcher.js.map +0 -1
  51. package/dist/keyring-snap-controller-client.js.map +0 -1
  52. package/dist/keyring-snap-rpc-client.js.map +0 -1
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleKeyringRequest = exports.buildHandlersChain = exports.MethodNotSupportedError = void 0;
4
- const utils_1 = require("@metamask/utils");
5
- const superstruct_1 = require("superstruct");
6
- const keyring_internal_api_1 = require("./keyring-internal-api");
7
- /**
8
- * Error thrown when a keyring JSON-RPC method is not supported.
9
- */
10
- class MethodNotSupportedError extends Error {
11
- constructor(method) {
12
- super(`Method not supported: ${method}`);
13
- }
14
- }
15
- exports.MethodNotSupportedError = MethodNotSupportedError;
16
- /**
17
- * Build a chain of handlers for a JSON-RPC request.
18
- *
19
- * If a handler throws a MethodNotSupportedError, the next handler in the chain
20
- * is called. If all handlers throw a MethodNotSupportedError, the error is re-
21
- * thrown.
22
- *
23
- * Any other error thrown by a handler is re-thrown.
24
- *
25
- * @param handlers - Handlers to chain.
26
- * @returns A handler that chains the given handlers.
27
- */
28
- function buildHandlersChain(...handlers) {
29
- return async ({ origin, request }) => {
30
- for (const handler of handlers) {
31
- try {
32
- return await handler({ origin, request });
33
- }
34
- catch (error) {
35
- if (!(error instanceof MethodNotSupportedError)) {
36
- throw error;
37
- }
38
- }
39
- }
40
- // All handlers failed to handle the request.
41
- throw new MethodNotSupportedError(request.method);
42
- };
43
- }
44
- exports.buildHandlersChain = buildHandlersChain;
45
- /**
46
- * Handles a keyring JSON-RPC request.
47
- *
48
- * @param keyring - Keyring instance.
49
- * @param request - Keyring JSON-RPC request.
50
- * @returns A promise that resolves to the keyring response.
51
- */
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);
56
- switch (request.method) {
57
- case 'keyring_listAccounts': {
58
- (0, superstruct_1.assert)(request, keyring_internal_api_1.ListAccountsRequestStruct);
59
- return await keyring.listAccounts();
60
- }
61
- case 'keyring_getAccount': {
62
- (0, superstruct_1.assert)(request, keyring_internal_api_1.GetAccountRequestStruct);
63
- return await keyring.getAccount(request.params.id);
64
- }
65
- case 'keyring_createAccount': {
66
- (0, superstruct_1.assert)(request, keyring_internal_api_1.CreateAccountRequestStruct);
67
- return await keyring.createAccount(request.params.name, request.params.options);
68
- }
69
- case 'keyring_filterAccountChains': {
70
- (0, superstruct_1.assert)(request, keyring_internal_api_1.FilterAccountChainsStruct);
71
- return await keyring.filterAccountChains(request.params.id, request.params.chains);
72
- }
73
- case 'keyring_updateAccount': {
74
- (0, superstruct_1.assert)(request, keyring_internal_api_1.UpdateAccountRequestStruct);
75
- return await keyring.updateAccount(request.params.account);
76
- }
77
- case 'keyring_deleteAccount': {
78
- (0, superstruct_1.assert)(request, keyring_internal_api_1.DeleteAccountRequestStruct);
79
- return await keyring.deleteAccount(request.params.id);
80
- }
81
- case 'keyring_listRequests': {
82
- (0, superstruct_1.assert)(request, keyring_internal_api_1.ListRequestsRequestStruct);
83
- return await keyring.listRequests();
84
- }
85
- case 'keyring_getRequest': {
86
- (0, superstruct_1.assert)(request, keyring_internal_api_1.GetRequestRequestStruct);
87
- return await keyring.getRequest(request.params.id);
88
- }
89
- case 'keyring_submitRequest': {
90
- (0, superstruct_1.assert)(request, keyring_internal_api_1.SubmitRequestRequestStruct);
91
- return await keyring.submitRequest(request.params);
92
- }
93
- case 'keyring_approveRequest': {
94
- (0, superstruct_1.assert)(request, keyring_internal_api_1.ApproveRequestRequestStruct);
95
- return await keyring.approveRequest(request.params.id);
96
- }
97
- case 'keyring_rejectRequest': {
98
- (0, superstruct_1.assert)(request, keyring_internal_api_1.RejectRequestRequestStruct);
99
- return await keyring.rejectRequest(request.params.id);
100
- }
101
- default: {
102
- throw new MethodNotSupportedError(request.method);
103
- }
104
- }
105
- }
106
- exports.handleKeyringRequest = handleKeyringRequest;
107
- //# sourceMappingURL=keyring-rpc-dispatcher.js.map
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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 +0,0 @@
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"]}