@metamask/snaps-rpc-methods 13.4.0 → 13.5.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.
- package/CHANGELOG.md +16 -1
- package/dist/permitted/sendWebSocketMessage.cjs +2 -2
- package/dist/permitted/sendWebSocketMessage.cjs.map +1 -1
- package/dist/permitted/sendWebSocketMessage.d.cts +1 -1
- package/dist/permitted/sendWebSocketMessage.d.cts.map +1 -1
- package/dist/permitted/sendWebSocketMessage.d.mts +1 -1
- package/dist/permitted/sendWebSocketMessage.d.mts.map +1 -1
- package/dist/permitted/sendWebSocketMessage.mjs +2 -2
- package/dist/permitted/sendWebSocketMessage.mjs.map +1 -1
- package/dist/permitted/trackError.cjs +2 -7
- package/dist/permitted/trackError.cjs.map +1 -1
- package/dist/permitted/trackError.d.cts +2 -3
- package/dist/permitted/trackError.d.cts.map +1 -1
- package/dist/permitted/trackError.d.mts +2 -3
- package/dist/permitted/trackError.d.mts.map +1 -1
- package/dist/permitted/trackError.mjs +2 -7
- package/dist/permitted/trackError.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [13.5.1]
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Await `sendWebSocketMessage` promise ([#3608](https://github.com/MetaMask/snaps/pull/3608))
|
|
15
|
+
- Errors were not previously being thrown when calling `snap_sendWebSocketMessage`, this also fixes that.
|
|
16
|
+
|
|
17
|
+
## [13.5.0]
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Use `TrackableErrorStruct` from `@metamask/snaps-utils` ([#3546](https://github.com/MetaMask/snaps/pull/3546))
|
|
22
|
+
|
|
10
23
|
## [13.4.0]
|
|
11
24
|
|
|
12
25
|
### Added
|
|
@@ -487,7 +500,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
487
500
|
- The version of the package no longer needs to match the version of all other
|
|
488
501
|
MetaMask Snaps packages.
|
|
489
502
|
|
|
490
|
-
[Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.
|
|
503
|
+
[Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.5.1...HEAD
|
|
504
|
+
[13.5.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.5.0...@metamask/snaps-rpc-methods@13.5.1
|
|
505
|
+
[13.5.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.4.0...@metamask/snaps-rpc-methods@13.5.0
|
|
491
506
|
[13.4.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.3.0...@metamask/snaps-rpc-methods@13.4.0
|
|
492
507
|
[13.3.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.2.0...@metamask/snaps-rpc-methods@13.3.0
|
|
493
508
|
[13.2.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-rpc-methods@13.1.0...@metamask/snaps-rpc-methods@13.2.0
|
|
@@ -33,14 +33,14 @@ exports.sendWebSocketMessageHandler = {
|
|
|
33
33
|
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
34
34
|
* @returns Nothing.
|
|
35
35
|
*/
|
|
36
|
-
function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
|
|
36
|
+
async function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
|
|
37
37
|
if (!hasPermission(endowments_1.SnapEndowments.NetworkAccess)) {
|
|
38
38
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
39
39
|
}
|
|
40
40
|
const { params } = req;
|
|
41
41
|
try {
|
|
42
42
|
const { id, message } = getValidatedParams(params);
|
|
43
|
-
sendWebSocketMessage(id, message);
|
|
43
|
+
await sendWebSocketMessage(id, message);
|
|
44
44
|
res.result = null;
|
|
45
45
|
}
|
|
46
46
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AAMjE,mDAA4C;AAE5C,uDAO+B;AAG/B,wDAA+C;AAG/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,IAAA,oBAAM,EAAC;IAClD,EAAE,EAAE,IAAA,oBAAM,GAAE;IACZ,OAAO,EAAE,IAAA,iBAAK,EAAC,CAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;GAEG;AACU,QAAA,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;AAEA,qDAAiE;AAMjE,mDAA4C;AAE5C,uDAO+B;AAG/B,wDAA+C;AAG/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,IAAA,oBAAM,EAAC;IAClD,EAAE,EAAE,IAAA,oBAAM,GAAE;IACZ,OAAO,EAAE,IAAA,iBAAK,EAAC,CAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,mBAAK,EAAC,IAAA,oBAAM,GAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;GAEG;AACU,QAAA,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAAmD,EACnD,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAmC;IAExE,IAAI,CAAC,aAAa,CAAC,2BAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;YACjC,MAAM,sBAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,sBAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\n JsonRpcRequest,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks> = {\n hasPermission: true,\n sendWebSocketMessage: true,\n};\n\nexport type SendWebSocketMessageMethodHooks = {\n hasPermission: (permissionName: string) => boolean;\n sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;\n};\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Handler for the `snap_sendWebSocketMessage` method.\n */\nexport const sendWebSocketMessageHandler: PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n> = {\n methodNames: ['snap_sendWebSocketMessage'],\n implementation: sendWebSocketMessageImplementation,\n hookNames,\n};\n\n/**\n * The `snap_sendWebSocketMessage` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.\n * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequest<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks,\n): Promise<void> {\n if (!hasPermission(SnapEndowments.NetworkAccess)) {\n return end(providerErrors.unauthorized());\n }\n\n const { params } = req;\n\n try {\n const { id, message } = getValidatedParams(params);\n await sendWebSocketMessage(id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@me
|
|
|
3
3
|
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
4
|
export type SendWebSocketMessageMethodHooks = {
|
|
5
5
|
hasPermission: (permissionName: string) => boolean;
|
|
6
|
-
sendWebSocketMessage: (id: string, data: string | number[]) => void
|
|
6
|
+
sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
|
|
7
7
|
};
|
|
8
8
|
declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
|
|
9
9
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E,CAAC;AAEF,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,sBAAsB,CAC9D,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,CAK3B,CAAC"}
|
|
@@ -3,7 +3,7 @@ import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@me
|
|
|
3
3
|
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
4
|
export type SendWebSocketMessageMethodHooks = {
|
|
5
5
|
hasPermission: (permissionName: string) => boolean;
|
|
6
|
-
sendWebSocketMessage: (id: string, data: string | number[]) => void
|
|
6
|
+
sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
|
|
7
7
|
};
|
|
8
8
|
declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
|
|
9
9
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAmB3D,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E,CAAC;AAEF,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,sBAAsB,CAC9D,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,CAK3B,CAAC"}
|
|
@@ -30,14 +30,14 @@ export const sendWebSocketMessageHandler = {
|
|
|
30
30
|
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
31
31
|
* @returns Nothing.
|
|
32
32
|
*/
|
|
33
|
-
function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
|
|
33
|
+
async function sendWebSocketMessageImplementation(req, res, _next, end, { hasPermission, sendWebSocketMessage }) {
|
|
34
34
|
if (!hasPermission(SnapEndowments.NetworkAccess)) {
|
|
35
35
|
return end(providerErrors.unauthorized());
|
|
36
36
|
}
|
|
37
37
|
const { params } = req;
|
|
38
38
|
try {
|
|
39
39
|
const { id, message } = getValidatedParams(params);
|
|
40
|
-
sendWebSocketMessage(id, message);
|
|
40
|
+
await sendWebSocketMessage(id, message);
|
|
41
41
|
res.result = null;
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAMjE,OAAO,EAAE,KAAK,EAAE,4BAA4B;AAE5C,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACZ,8BAA8B;AAG/B,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAG/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,MAAM,CAAC;IAClD,EAAE,EAAE,MAAM,EAAE;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAMjE,OAAO,EAAE,KAAK,EAAE,4BAA4B;AAE5C,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACZ,8BAA8B;AAG/B,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAG/C,MAAM,SAAS,GAAuD;IACpE,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAOF,MAAM,oCAAoC,GAAG,MAAM,CAAC;IAClD,EAAE,EAAE,MAAM,EAAE;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAIpC;IACF,WAAW,EAAE,CAAC,2BAA2B,CAAC;IAC1C,cAAc,EAAE,kCAAkC;IAClD,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAAmD,EACnD,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,EAAE,aAAa,EAAE,oBAAoB,EAAmC;IAExE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,oBAAoB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,0BAA0B;QAC1B,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\n JsonRpcRequest,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n} from '@metamask/snaps-sdk';\nimport { union } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n create,\n object,\n number,\n string,\n array,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<SendWebSocketMessageMethodHooks> = {\n hasPermission: true,\n sendWebSocketMessage: true,\n};\n\nexport type SendWebSocketMessageMethodHooks = {\n hasPermission: (permissionName: string) => boolean;\n sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;\n};\n\nconst SendWebSocketMessageParametersStruct = object({\n id: string(),\n message: union([string(), array(number())]),\n});\n\nexport type SendWebSocketMessageParameters = InferMatching<\n typeof SendWebSocketMessageParametersStruct,\n SendWebSocketMessageParams\n>;\n\n/**\n * Handler for the `snap_sendWebSocketMessage` method.\n */\nexport const sendWebSocketMessageHandler: PermittedHandlerExport<\n SendWebSocketMessageMethodHooks,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult\n> = {\n methodNames: ['snap_sendWebSocketMessage'],\n implementation: sendWebSocketMessageImplementation,\n hookNames,\n};\n\n/**\n * The `snap_sendWebSocketMessage` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:network-access` permission.\n * @param hooks.sendWebSocketMessage - The function to send a WebSocket message.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequest<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { hasPermission, sendWebSocketMessage }: SendWebSocketMessageMethodHooks,\n): Promise<void> {\n if (!hasPermission(SnapEndowments.NetworkAccess)) {\n return end(providerErrors.unauthorized());\n }\n\n const { params } = req;\n\n try {\n const { id, message } = getValidatedParams(params);\n await sendWebSocketMessage(id, message);\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validates the parameters for the snap_sendWebSocketMessage method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): SendWebSocketMessageParameters {\n try {\n return create(params, SendWebSocketMessageParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
|
|
@@ -2,19 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.trackErrorHandler = void 0;
|
|
4
4
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
5
|
+
const snaps_utils_1 = require("@metamask/snaps-utils");
|
|
5
6
|
const superstruct_1 = require("@metamask/superstruct");
|
|
6
7
|
const hookNames = {
|
|
7
8
|
trackError: true,
|
|
8
9
|
getSnap: true,
|
|
9
10
|
};
|
|
10
|
-
const TrackableErrorStruct = (0, superstruct_1.object)({
|
|
11
|
-
name: (0, superstruct_1.string)(),
|
|
12
|
-
message: (0, superstruct_1.string)(),
|
|
13
|
-
stack: (0, superstruct_1.nullable)((0, superstruct_1.string)()),
|
|
14
|
-
cause: (0, superstruct_1.nullable)((0, superstruct_1.lazy)(() => TrackableErrorStruct)),
|
|
15
|
-
});
|
|
16
11
|
const TrackErrorParametersStruct = (0, superstruct_1.object)({
|
|
17
|
-
error: TrackableErrorStruct,
|
|
12
|
+
error: snaps_utils_1.TrackableErrorStruct,
|
|
18
13
|
});
|
|
19
14
|
/**
|
|
20
15
|
* Handler for the `snap_trackError` method.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackError.cjs","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;
|
|
1
|
+
{"version":3,"file":"trackError.cjs","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":";;;AAEA,qDAAiD;AAQjD,uDAA6D;AAC7D,uDAAoE;AAKpE,MAAM,SAAS,GAA6C;IAC1D,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;CACd,CAAC;AAoBF,MAAM,0BAA0B,GAAG,IAAA,oBAAM,EAAC;IACxC,KAAK,EAAE,kCAAoB;CAC5B,CAAC,CAAC;AAOH;;GAEG;AACU,QAAA,iBAAiB,GAI1B;IACF,WAAW,EAAE,CAAC,iBAAiB,CAAC;IAChC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAS,2BAA2B,CAClC,OAA6C,EAC7C,QAAkD,EAClD,KAAc,EACd,GAA6B,EAC7B,EAAE,UAAU,EAAE,OAAO,EAAyB;IAE9C,MAAM,IAAI,GAAG,OAAO,CACjB,OAAiE,CAAC,MAAM,CAC1E,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,sBAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEtD,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,IAAA,oBAAM,EAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;YACjC,MAAM,sBAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,sBAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAqB;IAC7C,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,iBAAiB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;IACnD,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;QACnC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n JsonRpcRequest,\n TrackableError,\n TrackErrorParams,\n TrackErrorResult,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching, Snap } from '@metamask/snaps-utils';\nimport { TrackableErrorStruct } from '@metamask/snaps-utils';\nimport { create, object, StructError } from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<TrackErrorMethodHooks> = {\n trackError: true,\n getSnap: true,\n};\n\nexport type TrackErrorMethodHooks = {\n /**\n * Track an error.\n *\n * @param error - The error object to track.\n * @returns The ID of the tracked error, as returned by the Sentry instance\n * in the client.\n */\n trackError: (error: Error) => string;\n\n /**\n * Get Snap metadata.\n *\n * @param snapId - The ID of a Snap.\n */\n getSnap: (snapId: string) => Snap | undefined;\n};\n\nconst TrackErrorParametersStruct = object({\n error: TrackableErrorStruct,\n});\n\nexport type TrackErrorParameters = InferMatching<\n typeof TrackErrorParametersStruct,\n TrackErrorParams\n>;\n\n/**\n * Handler for the `snap_trackError` method.\n */\nexport const trackErrorHandler: PermittedHandlerExport<\n TrackErrorMethodHooks,\n TrackErrorParameters,\n TrackErrorResult\n> = {\n methodNames: ['snap_trackError'],\n implementation: getTrackErrorImplementation,\n hookNames,\n};\n\n/**\n * The `snap_trackError` method implementation. This method allows preinstalled\n * Snaps to send errors to the Sentry instance in the client for tracking.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.trackError - The hook function to track an error.\n * @param hooks.getSnap - The hook function to get Snap metadata.\n * @returns Nothing.\n */\nfunction getTrackErrorImplementation(\n request: JsonRpcRequest<TrackErrorParameters>,\n response: PendingJsonRpcResponse<TrackErrorResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { trackError, getSnap }: TrackErrorMethodHooks,\n): void {\n const snap = getSnap(\n (request as JsonRpcRequest<TrackErrorParams> & { origin: string }).origin,\n );\n\n if (!snap?.preinstalled) {\n return end(rpcErrors.methodNotFound());\n }\n\n const { params } = request;\n\n try {\n const validatedParams = getValidatedParams(params);\n const error = deserializeError(validatedParams.error);\n\n response.result = trackError(error);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters for the `snap_trackError` method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): TrackErrorParameters {\n try {\n return create(params, TrackErrorParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n\n/**\n * Deserialize a {@link TrackableError} into a standard {@link Error} object.\n *\n * @param error - The error to deserialize.\n * @returns A standard {@link Error} object with the same properties as the\n * original {@link TrackableError}.\n */\nfunction deserializeError(error: TrackableError): Error {\n const deserializedError = new Error(error.message);\n deserializedError.name = error.name;\n deserializedError.stack = error.stack ?? undefined;\n deserializedError.cause = error.cause\n ? deserializeError(error.cause)\n : undefined;\n\n return deserializedError;\n}\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { PermittedHandlerExport } from "@metamask/permission-controller";
|
|
2
2
|
import type { TrackableError, TrackErrorParams, TrackErrorResult } from "@metamask/snaps-sdk";
|
|
3
3
|
import type { InferMatching, Snap } from "@metamask/snaps-utils";
|
|
4
|
-
import type { Struct } from "@metamask/superstruct";
|
|
5
4
|
export type TrackErrorMethodHooks = {
|
|
6
5
|
/**
|
|
7
6
|
* Track an error.
|
|
@@ -18,10 +17,10 @@ export type TrackErrorMethodHooks = {
|
|
|
18
17
|
*/
|
|
19
18
|
getSnap: (snapId: string) => Snap | undefined;
|
|
20
19
|
};
|
|
21
|
-
declare const TrackErrorParametersStruct: Struct<{
|
|
20
|
+
declare const TrackErrorParametersStruct: import("@metamask/superstruct").Struct<{
|
|
22
21
|
error: TrackableError;
|
|
23
22
|
}, {
|
|
24
|
-
error: Struct<TrackableError, unknown>;
|
|
23
|
+
error: import("@metamask/superstruct").Struct<TrackableError, unknown>;
|
|
25
24
|
}>;
|
|
26
25
|
export type TrackErrorParameters = InferMatching<typeof TrackErrorParametersStruct, TrackErrorParams>;
|
|
27
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackError.d.cts","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,8BAA8B;
|
|
1
|
+
{"version":3,"file":"trackError.d.cts","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,8BAA8B;AAYjE,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAErC;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,QAAA,MAAM,0BAA0B;;;;EAE9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAC9C,OAAO,0BAA0B,EACjC,gBAAgB,CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAAsB,CACpD,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,CAKjB,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { PermittedHandlerExport } from "@metamask/permission-controller";
|
|
2
2
|
import type { TrackableError, TrackErrorParams, TrackErrorResult } from "@metamask/snaps-sdk";
|
|
3
3
|
import type { InferMatching, Snap } from "@metamask/snaps-utils";
|
|
4
|
-
import type { Struct } from "@metamask/superstruct";
|
|
5
4
|
export type TrackErrorMethodHooks = {
|
|
6
5
|
/**
|
|
7
6
|
* Track an error.
|
|
@@ -18,10 +17,10 @@ export type TrackErrorMethodHooks = {
|
|
|
18
17
|
*/
|
|
19
18
|
getSnap: (snapId: string) => Snap | undefined;
|
|
20
19
|
};
|
|
21
|
-
declare const TrackErrorParametersStruct: Struct<{
|
|
20
|
+
declare const TrackErrorParametersStruct: import("@metamask/superstruct").Struct<{
|
|
22
21
|
error: TrackableError;
|
|
23
22
|
}, {
|
|
24
|
-
error: Struct<TrackableError, unknown>;
|
|
23
|
+
error: import("@metamask/superstruct").Struct<TrackableError, unknown>;
|
|
25
24
|
}>;
|
|
26
25
|
export type TrackErrorParameters = InferMatching<typeof TrackErrorParametersStruct, TrackErrorParams>;
|
|
27
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackError.d.mts","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,8BAA8B;
|
|
1
|
+
{"version":3,"file":"trackError.d.mts","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,8BAA8B;AAYjE,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IAErC;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,QAAA,MAAM,0BAA0B;;;;EAE9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAC9C,OAAO,0BAA0B,EACjC,gBAAgB,CACjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAAsB,CACpD,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,CAKjB,CAAC"}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { rpcErrors } from "@metamask/rpc-errors";
|
|
2
|
-
import {
|
|
2
|
+
import { TrackableErrorStruct } from "@metamask/snaps-utils";
|
|
3
|
+
import { create, object, StructError } from "@metamask/superstruct";
|
|
3
4
|
const hookNames = {
|
|
4
5
|
trackError: true,
|
|
5
6
|
getSnap: true,
|
|
6
7
|
};
|
|
7
|
-
const TrackableErrorStruct = object({
|
|
8
|
-
name: string(),
|
|
9
|
-
message: string(),
|
|
10
|
-
stack: nullable(string()),
|
|
11
|
-
cause: nullable(lazy(() => TrackableErrorStruct)),
|
|
12
|
-
});
|
|
13
8
|
const TrackErrorParametersStruct = object({
|
|
14
9
|
error: TrackableErrorStruct,
|
|
15
10
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackError.mjs","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,6BAA6B;
|
|
1
|
+
{"version":3,"file":"trackError.mjs","sourceRoot":"","sources":["../../src/permitted/trackError.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAQjD,OAAO,EAAE,oBAAoB,EAAE,8BAA8B;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,8BAA8B;AAKpE,MAAM,SAAS,GAA6C;IAC1D,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI;CACd,CAAC;AAoBF,MAAM,0BAA0B,GAAG,MAAM,CAAC;IACxC,KAAK,EAAE,oBAAoB;CAC5B,CAAC,CAAC;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAI1B;IACF,WAAW,EAAE,CAAC,iBAAiB,CAAC;IAChC,cAAc,EAAE,2BAA2B;IAC3C,SAAS;CACV,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAS,2BAA2B,CAClC,OAA6C,EAC7C,QAAkD,EAClD,KAAc,EACd,GAA6B,EAC7B,EAAE,UAAU,EAAE,OAAO,EAAyB;IAE9C,MAAM,IAAI,GAAG,OAAO,CACjB,OAAiE,CAAC,MAAM,CAC1E,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEtD,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,EAAE,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,CAAC,aAAa,CAAC;gBAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,OAAO,GAAG;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAqB;IAC7C,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,iBAAiB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;IACnD,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;QACnC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n JsonRpcRequest,\n TrackableError,\n TrackErrorParams,\n TrackErrorResult,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching, Snap } from '@metamask/snaps-utils';\nimport { TrackableErrorStruct } from '@metamask/snaps-utils';\nimport { create, object, StructError } from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<TrackErrorMethodHooks> = {\n trackError: true,\n getSnap: true,\n};\n\nexport type TrackErrorMethodHooks = {\n /**\n * Track an error.\n *\n * @param error - The error object to track.\n * @returns The ID of the tracked error, as returned by the Sentry instance\n * in the client.\n */\n trackError: (error: Error) => string;\n\n /**\n * Get Snap metadata.\n *\n * @param snapId - The ID of a Snap.\n */\n getSnap: (snapId: string) => Snap | undefined;\n};\n\nconst TrackErrorParametersStruct = object({\n error: TrackableErrorStruct,\n});\n\nexport type TrackErrorParameters = InferMatching<\n typeof TrackErrorParametersStruct,\n TrackErrorParams\n>;\n\n/**\n * Handler for the `snap_trackError` method.\n */\nexport const trackErrorHandler: PermittedHandlerExport<\n TrackErrorMethodHooks,\n TrackErrorParameters,\n TrackErrorResult\n> = {\n methodNames: ['snap_trackError'],\n implementation: getTrackErrorImplementation,\n hookNames,\n};\n\n/**\n * The `snap_trackError` method implementation. This method allows preinstalled\n * Snaps to send errors to the Sentry instance in the client for tracking.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.trackError - The hook function to track an error.\n * @param hooks.getSnap - The hook function to get Snap metadata.\n * @returns Nothing.\n */\nfunction getTrackErrorImplementation(\n request: JsonRpcRequest<TrackErrorParameters>,\n response: PendingJsonRpcResponse<TrackErrorResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { trackError, getSnap }: TrackErrorMethodHooks,\n): void {\n const snap = getSnap(\n (request as JsonRpcRequest<TrackErrorParams> & { origin: string }).origin,\n );\n\n if (!snap?.preinstalled) {\n return end(rpcErrors.methodNotFound());\n }\n\n const { params } = request;\n\n try {\n const validatedParams = getValidatedParams(params);\n const error = deserializeError(validatedParams.error);\n\n response.result = trackError(error);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters for the `snap_trackError` method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): TrackErrorParameters {\n try {\n return create(params, TrackErrorParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n\n/**\n * Deserialize a {@link TrackableError} into a standard {@link Error} object.\n *\n * @param error - The error to deserialize.\n * @returns A standard {@link Error} object with the same properties as the\n * original {@link TrackableError}.\n */\nfunction deserializeError(error: TrackableError): Error {\n const deserializedError = new Error(error.message);\n deserializedError.name = error.name;\n deserializedError.stack = error.stack ?? undefined;\n deserializedError.cause = error.cause\n ? deserializeError(error.cause)\n : undefined;\n\n return deserializedError;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/snaps-rpc-methods",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.5.1",
|
|
4
4
|
"description": "MetaMask Snaps JSON-RPC method implementations",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@metamask/permission-controller": "^11.0.6",
|
|
60
60
|
"@metamask/rpc-errors": "^7.0.3",
|
|
61
61
|
"@metamask/snaps-sdk": "^9.3.0",
|
|
62
|
-
"@metamask/snaps-utils": "^11.
|
|
62
|
+
"@metamask/snaps-utils": "^11.5.0",
|
|
63
63
|
"@metamask/superstruct": "^3.2.1",
|
|
64
64
|
"@metamask/utils": "^11.4.2",
|
|
65
65
|
"@noble/hashes": "^1.7.1"
|