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