@metamask/snaps-rpc-methods 15.1.1 → 16.0.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.
- package/CHANGELOG.md +27 -4
- package/dist/index.cjs +1 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/permissions.cjs +18 -8
- package/dist/permissions.cjs.map +1 -1
- package/dist/permissions.d.cts +3 -2
- package/dist/permissions.d.cts.map +1 -1
- package/dist/permissions.d.mts +3 -2
- package/dist/permissions.d.mts.map +1 -1
- package/dist/permissions.mjs +17 -7
- package/dist/permissions.mjs.map +1 -1
- package/dist/permitted/cancelBackgroundEvent.cjs +10 -14
- package/dist/permitted/cancelBackgroundEvent.cjs.map +1 -1
- package/dist/permitted/cancelBackgroundEvent.d.cts +9 -12
- package/dist/permitted/cancelBackgroundEvent.d.cts.map +1 -1
- package/dist/permitted/cancelBackgroundEvent.d.mts +9 -12
- package/dist/permitted/cancelBackgroundEvent.d.mts.map +1 -1
- package/dist/permitted/cancelBackgroundEvent.mjs +10 -14
- package/dist/permitted/cancelBackgroundEvent.mjs.map +1 -1
- package/dist/permitted/clearState.cjs +10 -16
- package/dist/permitted/clearState.cjs.map +1 -1
- package/dist/permitted/clearState.d.cts +9 -23
- package/dist/permitted/clearState.d.cts.map +1 -1
- package/dist/permitted/clearState.d.mts +9 -23
- package/dist/permitted/clearState.d.mts.map +1 -1
- package/dist/permitted/clearState.mjs +10 -16
- package/dist/permitted/clearState.mjs.map +1 -1
- package/dist/permitted/closeWebSocket.cjs +7 -14
- package/dist/permitted/closeWebSocket.cjs.map +1 -1
- package/dist/permitted/closeWebSocket.d.cts +9 -12
- package/dist/permitted/closeWebSocket.d.cts.map +1 -1
- package/dist/permitted/closeWebSocket.d.mts +9 -12
- package/dist/permitted/closeWebSocket.d.mts.map +1 -1
- package/dist/permitted/closeWebSocket.mjs +7 -14
- package/dist/permitted/closeWebSocket.mjs.map +1 -1
- package/dist/permitted/createInterface.cjs +11 -15
- package/dist/permitted/createInterface.cjs.map +1 -1
- package/dist/permitted/createInterface.d.cts +23 -37
- package/dist/permitted/createInterface.d.cts.map +1 -1
- package/dist/permitted/createInterface.d.mts +23 -37
- package/dist/permitted/createInterface.d.mts.map +1 -1
- package/dist/permitted/createInterface.mjs +11 -15
- package/dist/permitted/createInterface.mjs.map +1 -1
- package/dist/permitted/endTrace.cjs +4 -6
- package/dist/permitted/endTrace.cjs.map +1 -1
- package/dist/permitted/endTrace.d.cts +8 -11
- package/dist/permitted/endTrace.d.cts.map +1 -1
- package/dist/permitted/endTrace.d.mts +8 -11
- package/dist/permitted/endTrace.d.mts.map +1 -1
- package/dist/permitted/endTrace.mjs +4 -6
- package/dist/permitted/endTrace.mjs.map +1 -1
- package/dist/permitted/getAllSnaps.cjs +5 -11
- package/dist/permitted/getAllSnaps.cjs.map +1 -1
- package/dist/permitted/getAllSnaps.d.cts +10 -14
- package/dist/permitted/getAllSnaps.d.cts.map +1 -1
- package/dist/permitted/getAllSnaps.d.mts +10 -14
- package/dist/permitted/getAllSnaps.d.mts.map +1 -1
- package/dist/permitted/getAllSnaps.mjs +5 -11
- package/dist/permitted/getAllSnaps.mjs.map +1 -1
- package/dist/permitted/getBackgroundEvents.cjs +8 -15
- package/dist/permitted/getBackgroundEvents.cjs.map +1 -1
- package/dist/permitted/getBackgroundEvents.d.cts +10 -13
- package/dist/permitted/getBackgroundEvents.d.cts.map +1 -1
- package/dist/permitted/getBackgroundEvents.d.mts +10 -13
- package/dist/permitted/getBackgroundEvents.d.mts.map +1 -1
- package/dist/permitted/getBackgroundEvents.mjs +8 -15
- package/dist/permitted/getBackgroundEvents.mjs.map +1 -1
- package/dist/permitted/getClientStatus.cjs +5 -6
- package/dist/permitted/getClientStatus.cjs.map +1 -1
- package/dist/permitted/getClientStatus.d.cts +17 -18
- package/dist/permitted/getClientStatus.d.cts.map +1 -1
- package/dist/permitted/getClientStatus.d.mts +17 -18
- package/dist/permitted/getClientStatus.d.mts.map +1 -1
- package/dist/permitted/getClientStatus.mjs +5 -6
- package/dist/permitted/getClientStatus.mjs.map +1 -1
- package/dist/permitted/getFile.cjs +7 -11
- package/dist/permitted/getFile.cjs.map +1 -1
- package/dist/permitted/getFile.d.cts +8 -10
- package/dist/permitted/getFile.d.cts.map +1 -1
- package/dist/permitted/getFile.d.mts +8 -10
- package/dist/permitted/getFile.d.mts.map +1 -1
- package/dist/permitted/getFile.mjs +7 -11
- package/dist/permitted/getFile.mjs.map +1 -1
- package/dist/permitted/getInterfaceContext.cjs +12 -15
- package/dist/permitted/getInterfaceContext.cjs.map +1 -1
- package/dist/permitted/getInterfaceContext.d.cts +9 -21
- package/dist/permitted/getInterfaceContext.d.cts.map +1 -1
- package/dist/permitted/getInterfaceContext.d.mts +9 -21
- package/dist/permitted/getInterfaceContext.d.mts.map +1 -1
- package/dist/permitted/getInterfaceContext.mjs +12 -15
- package/dist/permitted/getInterfaceContext.mjs.map +1 -1
- package/dist/permitted/getInterfaceState.cjs +11 -15
- package/dist/permitted/getInterfaceState.cjs.map +1 -1
- package/dist/permitted/getInterfaceState.d.cts +9 -21
- package/dist/permitted/getInterfaceState.d.cts.map +1 -1
- package/dist/permitted/getInterfaceState.d.mts +9 -21
- package/dist/permitted/getInterfaceState.d.mts.map +1 -1
- package/dist/permitted/getInterfaceState.mjs +11 -15
- package/dist/permitted/getInterfaceState.mjs.map +1 -1
- package/dist/permitted/getSnaps.cjs +6 -12
- package/dist/permitted/getSnaps.cjs.map +1 -1
- package/dist/permitted/getSnaps.d.cts +11 -14
- package/dist/permitted/getSnaps.d.cts.map +1 -1
- package/dist/permitted/getSnaps.d.mts +11 -14
- package/dist/permitted/getSnaps.d.mts.map +1 -1
- package/dist/permitted/getSnaps.mjs +6 -12
- package/dist/permitted/getSnaps.mjs.map +1 -1
- package/dist/permitted/getState.cjs +9 -11
- package/dist/permitted/getState.cjs.map +1 -1
- package/dist/permitted/getState.d.cts +17 -28
- package/dist/permitted/getState.d.cts.map +1 -1
- package/dist/permitted/getState.d.mts +17 -28
- package/dist/permitted/getState.d.mts.map +1 -1
- package/dist/permitted/getState.mjs +9 -11
- package/dist/permitted/getState.mjs.map +1 -1
- package/dist/permitted/getWebSockets.cjs +11 -14
- package/dist/permitted/getWebSockets.cjs.map +1 -1
- package/dist/permitted/getWebSockets.d.cts +10 -13
- package/dist/permitted/getWebSockets.d.cts.map +1 -1
- package/dist/permitted/getWebSockets.d.mts +10 -13
- package/dist/permitted/getWebSockets.d.mts.map +1 -1
- package/dist/permitted/getWebSockets.mjs +11 -14
- package/dist/permitted/getWebSockets.mjs.map +1 -1
- package/dist/permitted/index.cjs +0 -1
- package/dist/permitted/index.cjs.map +1 -1
- package/dist/permitted/index.d.cts +29 -25
- package/dist/permitted/index.d.cts.map +1 -1
- package/dist/permitted/index.d.mts +29 -25
- package/dist/permitted/index.d.mts.map +1 -1
- package/dist/permitted/index.mjs +0 -1
- package/dist/permitted/index.mjs.map +1 -1
- package/dist/permitted/invokeKeyring.cjs +12 -13
- package/dist/permitted/invokeKeyring.cjs.map +1 -1
- package/dist/permitted/invokeKeyring.d.cts +17 -16
- package/dist/permitted/invokeKeyring.d.cts.map +1 -1
- package/dist/permitted/invokeKeyring.d.mts +17 -16
- package/dist/permitted/invokeKeyring.d.mts.map +1 -1
- package/dist/permitted/invokeKeyring.mjs +12 -13
- package/dist/permitted/invokeKeyring.mjs.map +1 -1
- package/dist/permitted/invokeSnapSugar.cjs +6 -10
- package/dist/permitted/invokeSnapSugar.cjs.map +1 -1
- package/dist/permitted/invokeSnapSugar.d.cts +9 -12
- package/dist/permitted/invokeSnapSugar.d.cts.map +1 -1
- package/dist/permitted/invokeSnapSugar.d.mts +9 -12
- package/dist/permitted/invokeSnapSugar.d.mts.map +1 -1
- package/dist/permitted/invokeSnapSugar.mjs +6 -10
- package/dist/permitted/invokeSnapSugar.mjs.map +1 -1
- package/dist/permitted/listEntropySources.cjs +28 -12
- package/dist/permitted/listEntropySources.cjs.map +1 -1
- package/dist/permitted/listEntropySources.d.cts +12 -23
- package/dist/permitted/listEntropySources.d.cts.map +1 -1
- package/dist/permitted/listEntropySources.d.mts +12 -23
- package/dist/permitted/listEntropySources.d.mts.map +1 -1
- package/dist/permitted/listEntropySources.mjs +28 -12
- package/dist/permitted/listEntropySources.mjs.map +1 -1
- package/dist/permitted/middleware.cjs +70 -20
- package/dist/permitted/middleware.cjs.map +1 -1
- package/dist/permitted/middleware.d.cts +5 -2
- package/dist/permitted/middleware.d.cts.map +1 -1
- package/dist/permitted/middleware.d.mts +5 -2
- package/dist/permitted/middleware.d.mts.map +1 -1
- package/dist/permitted/middleware.mjs +70 -20
- package/dist/permitted/middleware.mjs.map +1 -1
- package/dist/permitted/openWebSocket.cjs +7 -14
- package/dist/permitted/openWebSocket.cjs.map +1 -1
- package/dist/permitted/openWebSocket.d.cts +9 -12
- package/dist/permitted/openWebSocket.d.cts.map +1 -1
- package/dist/permitted/openWebSocket.d.mts +9 -12
- package/dist/permitted/openWebSocket.d.mts.map +1 -1
- package/dist/permitted/openWebSocket.mjs +7 -14
- package/dist/permitted/openWebSocket.mjs.map +1 -1
- package/dist/permitted/requestSnaps.cjs +14 -19
- package/dist/permitted/requestSnaps.cjs.map +1 -1
- package/dist/permitted/requestSnaps.d.cts +9 -36
- package/dist/permitted/requestSnaps.d.cts.map +1 -1
- package/dist/permitted/requestSnaps.d.mts +9 -36
- package/dist/permitted/requestSnaps.d.mts.map +1 -1
- package/dist/permitted/requestSnaps.mjs +15 -20
- package/dist/permitted/requestSnaps.mjs.map +1 -1
- package/dist/permitted/resolveInterface.cjs +11 -15
- package/dist/permitted/resolveInterface.cjs.map +1 -1
- package/dist/permitted/resolveInterface.d.cts +12 -24
- package/dist/permitted/resolveInterface.d.cts.map +1 -1
- package/dist/permitted/resolveInterface.d.mts +12 -24
- package/dist/permitted/resolveInterface.d.mts.map +1 -1
- package/dist/permitted/resolveInterface.mjs +11 -15
- package/dist/permitted/resolveInterface.mjs.map +1 -1
- package/dist/permitted/scheduleBackgroundEvent.cjs +11 -14
- package/dist/permitted/scheduleBackgroundEvent.cjs.map +1 -1
- package/dist/permitted/scheduleBackgroundEvent.d.cts +10 -17
- package/dist/permitted/scheduleBackgroundEvent.d.cts.map +1 -1
- package/dist/permitted/scheduleBackgroundEvent.d.mts +10 -17
- package/dist/permitted/scheduleBackgroundEvent.d.mts.map +1 -1
- package/dist/permitted/scheduleBackgroundEvent.mjs +11 -14
- package/dist/permitted/scheduleBackgroundEvent.mjs.map +1 -1
- package/dist/permitted/sendWebSocketMessage.cjs +10 -14
- package/dist/permitted/sendWebSocketMessage.cjs.map +1 -1
- package/dist/permitted/sendWebSocketMessage.d.cts +9 -12
- package/dist/permitted/sendWebSocketMessage.d.cts.map +1 -1
- package/dist/permitted/sendWebSocketMessage.d.mts +9 -12
- package/dist/permitted/sendWebSocketMessage.d.mts.map +1 -1
- package/dist/permitted/sendWebSocketMessage.mjs +10 -14
- package/dist/permitted/sendWebSocketMessage.mjs.map +1 -1
- package/dist/permitted/setState.cjs +18 -21
- package/dist/permitted/setState.cjs.map +1 -1
- package/dist/permitted/setState.d.cts +18 -45
- package/dist/permitted/setState.d.cts.map +1 -1
- package/dist/permitted/setState.d.mts +18 -45
- package/dist/permitted/setState.d.mts.map +1 -1
- package/dist/permitted/setState.mjs +18 -21
- package/dist/permitted/setState.mjs.map +1 -1
- package/dist/permitted/startTrace.cjs +4 -6
- package/dist/permitted/startTrace.cjs.map +1 -1
- package/dist/permitted/startTrace.d.cts +8 -11
- package/dist/permitted/startTrace.d.cts.map +1 -1
- package/dist/permitted/startTrace.d.mts +8 -11
- package/dist/permitted/startTrace.d.mts.map +1 -1
- package/dist/permitted/startTrace.mjs +4 -6
- package/dist/permitted/startTrace.mjs.map +1 -1
- package/dist/permitted/trackError.cjs +4 -6
- package/dist/permitted/trackError.cjs.map +1 -1
- package/dist/permitted/trackError.d.cts +8 -11
- package/dist/permitted/trackError.d.cts.map +1 -1
- package/dist/permitted/trackError.d.mts +8 -11
- package/dist/permitted/trackError.d.mts.map +1 -1
- package/dist/permitted/trackError.mjs +4 -6
- package/dist/permitted/trackError.mjs.map +1 -1
- package/dist/permitted/trackEvent.cjs +4 -6
- package/dist/permitted/trackEvent.cjs.map +1 -1
- package/dist/permitted/trackEvent.d.cts +8 -11
- package/dist/permitted/trackEvent.d.cts.map +1 -1
- package/dist/permitted/trackEvent.d.mts +8 -11
- package/dist/permitted/trackEvent.d.mts.map +1 -1
- package/dist/permitted/trackEvent.mjs +4 -6
- package/dist/permitted/trackEvent.mjs.map +1 -1
- package/dist/permitted/updateInterface.cjs +11 -15
- package/dist/permitted/updateInterface.cjs.map +1 -1
- package/dist/permitted/updateInterface.d.cts +9 -22
- package/dist/permitted/updateInterface.d.cts.map +1 -1
- package/dist/permitted/updateInterface.d.mts +9 -22
- package/dist/permitted/updateInterface.d.mts.map +1 -1
- package/dist/permitted/updateInterface.mjs +11 -15
- package/dist/permitted/updateInterface.mjs.map +1 -1
- package/dist/restricted/dialog.cjs +23 -30
- package/dist/restricted/dialog.cjs.map +1 -1
- package/dist/restricted/dialog.d.cts +10 -58
- package/dist/restricted/dialog.d.cts.map +1 -1
- package/dist/restricted/dialog.d.mts +10 -58
- package/dist/restricted/dialog.d.mts.map +1 -1
- package/dist/restricted/dialog.mjs +23 -30
- package/dist/restricted/dialog.mjs.map +1 -1
- package/dist/restricted/getBip32Entropy.cjs +15 -12
- package/dist/restricted/getBip32Entropy.cjs.map +1 -1
- package/dist/restricted/getBip32Entropy.d.cts +11 -24
- package/dist/restricted/getBip32Entropy.d.cts.map +1 -1
- package/dist/restricted/getBip32Entropy.d.mts +11 -24
- package/dist/restricted/getBip32Entropy.d.mts.map +1 -1
- package/dist/restricted/getBip32Entropy.mjs +16 -13
- package/dist/restricted/getBip32Entropy.mjs.map +1 -1
- package/dist/restricted/getBip32PublicKey.cjs +15 -12
- package/dist/restricted/getBip32PublicKey.cjs.map +1 -1
- package/dist/restricted/getBip32PublicKey.d.cts +11 -24
- package/dist/restricted/getBip32PublicKey.d.cts.map +1 -1
- package/dist/restricted/getBip32PublicKey.d.mts +11 -24
- package/dist/restricted/getBip32PublicKey.d.mts.map +1 -1
- package/dist/restricted/getBip32PublicKey.mjs +16 -13
- package/dist/restricted/getBip32PublicKey.mjs.map +1 -1
- package/dist/restricted/getBip44Entropy.cjs +14 -10
- package/dist/restricted/getBip44Entropy.cjs.map +1 -1
- package/dist/restricted/getBip44Entropy.d.cts +11 -15
- package/dist/restricted/getBip44Entropy.d.cts.map +1 -1
- package/dist/restricted/getBip44Entropy.d.mts +11 -15
- package/dist/restricted/getBip44Entropy.d.mts.map +1 -1
- package/dist/restricted/getBip44Entropy.mjs +15 -11
- package/dist/restricted/getBip44Entropy.mjs.map +1 -1
- package/dist/restricted/getEntropy.cjs +10 -10
- package/dist/restricted/getEntropy.cjs.map +1 -1
- package/dist/restricted/getEntropy.d.cts +11 -15
- package/dist/restricted/getEntropy.d.cts.map +1 -1
- package/dist/restricted/getEntropy.d.mts +11 -15
- package/dist/restricted/getEntropy.d.mts.map +1 -1
- package/dist/restricted/getEntropy.mjs +11 -11
- package/dist/restricted/getEntropy.mjs.map +1 -1
- package/dist/restricted/index.cjs.map +1 -1
- package/dist/restricted/index.d.cts +20 -160
- package/dist/restricted/index.d.cts.map +1 -1
- package/dist/restricted/index.d.mts +20 -160
- package/dist/restricted/index.d.mts.map +1 -1
- package/dist/restricted/index.mjs.map +1 -1
- package/dist/restricted/invokeSnap.cjs +11 -12
- package/dist/restricted/invokeSnap.cjs.map +1 -1
- package/dist/restricted/invokeSnap.d.cts +9 -13
- package/dist/restricted/invokeSnap.d.cts.map +1 -1
- package/dist/restricted/invokeSnap.d.mts +9 -13
- package/dist/restricted/invokeSnap.d.mts.map +1 -1
- package/dist/restricted/invokeSnap.mjs +11 -12
- package/dist/restricted/invokeSnap.mjs.map +1 -1
- package/dist/restricted/manageState.cjs +21 -20
- package/dist/restricted/manageState.cjs.map +1 -1
- package/dist/restricted/manageState.d.cts +12 -34
- package/dist/restricted/manageState.d.cts.map +1 -1
- package/dist/restricted/manageState.d.mts +12 -34
- package/dist/restricted/manageState.d.mts.map +1 -1
- package/dist/restricted/manageState.mjs +21 -20
- package/dist/restricted/manageState.mjs.map +1 -1
- package/dist/restricted/notify.cjs +31 -24
- package/dist/restricted/notify.cjs.map +1 -1
- package/dist/restricted/notify.d.cts +16 -25
- package/dist/restricted/notify.d.cts.map +1 -1
- package/dist/restricted/notify.d.mts +16 -25
- package/dist/restricted/notify.d.mts.map +1 -1
- package/dist/restricted/notify.mjs +32 -25
- package/dist/restricted/notify.mjs.map +1 -1
- package/dist/types.cjs +3 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +155 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +155 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils.cjs +78 -24
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +21 -13
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +21 -13
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +75 -22
- package/dist/utils.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/permitted/handlers.cjs +0 -63
- package/dist/permitted/handlers.cjs.map +0 -1
- package/dist/permitted/handlers.d.cts +0 -299
- package/dist/permitted/handlers.d.cts.map +0 -1
- package/dist/permitted/handlers.d.mts +0 -299
- package/dist/permitted/handlers.d.mts.map +0 -1
- package/dist/permitted/handlers.mjs +0 -60
- package/dist/permitted/handlers.mjs.map +0 -1
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
4
|
+
import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
|
|
5
|
+
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
6
|
import { type PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
-
import type {
|
|
6
|
-
type
|
|
7
|
-
schedule: string;
|
|
8
|
-
request: CronjobRpcRequest;
|
|
9
|
-
};
|
|
10
|
-
export type ScheduleBackgroundEventMethodHooks = {
|
|
11
|
-
scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
|
|
12
|
-
hasPermission: (permissionName: string) => boolean;
|
|
13
|
-
};
|
|
7
|
+
import type { CronjobControllerScheduleAction, JsonRpcRequestWithOrigin } from "../types.cjs";
|
|
8
|
+
export type ScheduleBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerScheduleAction;
|
|
14
9
|
/**
|
|
15
10
|
* Schedule a background event for a Snap. The background event will trigger a
|
|
16
11
|
* JSON-RPC request to the Snap at the scheduled time, handled by the
|
|
@@ -38,9 +33,8 @@ export type ScheduleBackgroundEventMethodHooks = {
|
|
|
38
33
|
* ```
|
|
39
34
|
*/
|
|
40
35
|
export declare const scheduleBackgroundEventHandler: {
|
|
41
|
-
methodNames: ["snap_scheduleBackgroundEvent"];
|
|
42
36
|
implementation: typeof getScheduleBackgroundEventImplementation;
|
|
43
|
-
|
|
37
|
+
actionNames: ("CronjobController:schedule" | "PermissionController:hasPermission")[];
|
|
44
38
|
};
|
|
45
39
|
declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
|
|
46
40
|
date: string;
|
|
@@ -68,11 +62,10 @@ export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBac
|
|
|
68
62
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
69
63
|
* function.
|
|
70
64
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
71
|
-
* @param
|
|
72
|
-
* @param
|
|
73
|
-
* @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
|
|
65
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
66
|
+
* @param messenger - The messenger used to call controller actions.
|
|
74
67
|
* @returns An id representing the background event.
|
|
75
68
|
*/
|
|
76
|
-
declare function getScheduleBackgroundEventImplementation(req:
|
|
69
|
+
declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, ScheduleBackgroundEventMethodActions>): Promise<void>;
|
|
77
70
|
export {};
|
|
78
71
|
//# sourceMappingURL=scheduleBackgroundEvent.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAEnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAO3D,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EACV,+BAA+B,EAC/B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,oCAAoC,GAC5C,uCAAuC,GACvC,+BAA+B,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;CAY1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;GAWG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,EAChE,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,oCAAoC,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
4
|
+
import { type ScheduleBackgroundEventParams, type ScheduleBackgroundEventResult } from "@metamask/snaps-sdk";
|
|
5
|
+
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
6
|
import { type PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
-
import type {
|
|
6
|
-
type
|
|
7
|
-
schedule: string;
|
|
8
|
-
request: CronjobRpcRequest;
|
|
9
|
-
};
|
|
10
|
-
export type ScheduleBackgroundEventMethodHooks = {
|
|
11
|
-
scheduleBackgroundEvent: (snapEvent: ScheduleBackgroundEventHookParams) => string;
|
|
12
|
-
hasPermission: (permissionName: string) => boolean;
|
|
13
|
-
};
|
|
7
|
+
import type { CronjobControllerScheduleAction, JsonRpcRequestWithOrigin } from "../types.mjs";
|
|
8
|
+
export type ScheduleBackgroundEventMethodActions = PermissionControllerHasPermissionAction | CronjobControllerScheduleAction;
|
|
14
9
|
/**
|
|
15
10
|
* Schedule a background event for a Snap. The background event will trigger a
|
|
16
11
|
* JSON-RPC request to the Snap at the scheduled time, handled by the
|
|
@@ -38,9 +33,8 @@ export type ScheduleBackgroundEventMethodHooks = {
|
|
|
38
33
|
* ```
|
|
39
34
|
*/
|
|
40
35
|
export declare const scheduleBackgroundEventHandler: {
|
|
41
|
-
methodNames: ["snap_scheduleBackgroundEvent"];
|
|
42
36
|
implementation: typeof getScheduleBackgroundEventImplementation;
|
|
43
|
-
|
|
37
|
+
actionNames: ("CronjobController:schedule" | "PermissionController:hasPermission")[];
|
|
44
38
|
};
|
|
45
39
|
declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superstruct").Struct<{
|
|
46
40
|
date: string;
|
|
@@ -68,11 +62,10 @@ export type ScheduleBackgroundEventParameters = InferMatching<typeof ScheduleBac
|
|
|
68
62
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
69
63
|
* function.
|
|
70
64
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
71
|
-
* @param
|
|
72
|
-
* @param
|
|
73
|
-
* @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
|
|
65
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
66
|
+
* @param messenger - The messenger used to call controller actions.
|
|
74
67
|
* @returns An id representing the background event.
|
|
75
68
|
*/
|
|
76
|
-
declare function getScheduleBackgroundEventImplementation(req:
|
|
69
|
+
declare function getScheduleBackgroundEventImplementation(req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>, res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, ScheduleBackgroundEventMethodActions>): Promise<void>;
|
|
77
70
|
export {};
|
|
78
71
|
//# sourceMappingURL=scheduleBackgroundEvent.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EAEnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAO3D,OAAO,EAAe,KAAK,sBAAsB,EAAE,wBAAwB;AAG3E,OAAO,KAAK,EACV,+BAA+B,EAC/B,wBAAwB,EACzB,qBAAiB;AAElB,MAAM,MAAM,oCAAoC,GAC5C,uCAAuC,GACvC,+BAA+B,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,8BAA8B;;;CAY1C,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC;AAiBF;;;;;;;;;;;GAWG;AACH,iBAAe,wCAAwC,CACrD,GAAG,EAAE,wBAAwB,CAAC,iCAAiC,CAAC,EAChE,GAAG,EAAE,sBAAsB,CAAC,6BAA6B,CAAC,EAC1D,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,oCAAoC,CAAC,GACjE,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -4,11 +4,6 @@ import { CronjobRpcRequestStruct, ISO8601DateStruct, ISO8601DurationStruct } fro
|
|
|
4
4
|
import { StructError, create, object } from "@metamask/superstruct";
|
|
5
5
|
import { hasProperty } from "@metamask/utils";
|
|
6
6
|
import { SnapEndowments } from "../endowments/index.mjs";
|
|
7
|
-
const methodName = 'snap_scheduleBackgroundEvent';
|
|
8
|
-
const hookNames = {
|
|
9
|
-
scheduleBackgroundEvent: true,
|
|
10
|
-
hasPermission: true,
|
|
11
|
-
};
|
|
12
7
|
/**
|
|
13
8
|
* Schedule a background event for a Snap. The background event will trigger a
|
|
14
9
|
* JSON-RPC request to the Snap at the scheduled time, handled by the
|
|
@@ -36,9 +31,11 @@ const hookNames = {
|
|
|
36
31
|
* ```
|
|
37
32
|
*/
|
|
38
33
|
export const scheduleBackgroundEventHandler = {
|
|
39
|
-
methodNames: [methodName],
|
|
40
34
|
implementation: getScheduleBackgroundEventImplementation,
|
|
41
|
-
|
|
35
|
+
actionNames: [
|
|
36
|
+
'PermissionController:hasPermission',
|
|
37
|
+
'CronjobController:schedule',
|
|
38
|
+
],
|
|
42
39
|
};
|
|
43
40
|
const ScheduleBackgroundEventParametersWithDateStruct = object({
|
|
44
41
|
date: ISO8601DateStruct,
|
|
@@ -75,21 +72,21 @@ function getSchedule(params) {
|
|
|
75
72
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
76
73
|
* function.
|
|
77
74
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
78
|
-
* @param
|
|
79
|
-
* @param
|
|
80
|
-
* @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
|
|
75
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
76
|
+
* @param messenger - The messenger used to call controller actions.
|
|
81
77
|
* @returns An id representing the background event.
|
|
82
78
|
*/
|
|
83
|
-
async function getScheduleBackgroundEventImplementation(req, res, _next, end,
|
|
84
|
-
const { params } = req;
|
|
85
|
-
if (!hasPermission
|
|
79
|
+
async function getScheduleBackgroundEventImplementation(req, res, _next, end, _hooks, messenger) {
|
|
80
|
+
const { params, origin } = req;
|
|
81
|
+
if (!messenger.call('PermissionController:hasPermission', origin, SnapEndowments.Cronjob)) {
|
|
86
82
|
return end(providerErrors.unauthorized());
|
|
87
83
|
}
|
|
88
84
|
try {
|
|
89
85
|
const validatedParams = getValidatedParams(params);
|
|
90
86
|
const { request } = validatedParams;
|
|
91
87
|
const schedule = getSchedule(validatedParams);
|
|
92
|
-
const id =
|
|
88
|
+
const id = messenger.call('CronjobController:schedule', {
|
|
89
|
+
snapId: origin,
|
|
93
90
|
schedule,
|
|
94
91
|
request,
|
|
95
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AACjE,OAAO,EACL,cAAc,EAIf,4BAA4B;AAE7B,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACtB,8BAA8B;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B;AACpE,OAAO,EAAE,WAAW,EAA+B,wBAAwB;AAE3E,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAU/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,cAAc,EAAE,wCAAwC;IACxD,WAAW,EAAE;QACX,oCAAoC;QACpC,4BAA4B;KAC7B;CAOF,CAAC;AAEF,MAAM,+CAA+C,GAAG,MAAM,CAAC;IAC7D,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,mDAAmD,GAAG,MAAM,CAAC;IACjE,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,uCAAuC,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE;IACrE,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,+CAA+C,CAAC;IACzD,CAAC;IACD,OAAO,mDAAmD,CAAC;AAC7D,CAAC,CAAC,CAAC;AAOH;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAyC;IAC5D,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAChC,iDAAiD;QACjD,OAAO,MAAM,CAAC,IAAc,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,wCAAwC,CACrD,GAAgE,EAChE,GAA0D,EAC1D,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAAkE;IAElE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,cAAc,CAAC,OAAO,CACvB,EACD,CAAC;QACD,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAClB,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,CACzB,MAAe;IAEf,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IACjE,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 {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerHasPermissionAction } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n type SnapId,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport {\n CronjobRpcRequestStruct,\n ISO8601DateStruct,\n ISO8601DurationStruct,\n} from '@metamask/snaps-utils';\nimport { StructError, create, object } from '@metamask/superstruct';\nimport { hasProperty, type PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n CronjobControllerScheduleAction,\n JsonRpcRequestWithOrigin,\n} from '../types';\n\nexport type ScheduleBackgroundEventMethodActions =\n | PermissionControllerHasPermissionAction\n | CronjobControllerScheduleAction;\n\n/**\n * Schedule a background event for a Snap. The background event will trigger a\n * JSON-RPC request to the Snap at the scheduled time, handled by the\n * `onCronjob` entry point in the Snap.\n *\n * The schedule can be defined using either an ISO 8601 date or duration string.\n * For example:\n *\n * - Using a date: `2026-12-31T23:59:59Z`\n * - Using a duration: `P1DT2H` (which represents a duration of 1 day and 2\n * hours)\n *\n * @example\n * ```ts\n * const id = await wallet.request({\n * method: 'snap_scheduleBackgroundEvent',\n * params: {\n * date: '2026-12-31T23:59:59Z',\n * request: {\n * method: 'mySnapMethod',\n * params: { foo: 'bar' },\n * },\n * },\n * });\n * ```\n */\nexport const scheduleBackgroundEventHandler = {\n implementation: getScheduleBackgroundEventImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'CronjobController:schedule',\n ],\n} satisfies MethodHandler<\n never,\n ScheduleBackgroundEventMethodActions,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult,\n { origin: SnapId }\n>;\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: ISO8601DateStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: ISO8601DurationStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Get the schedule for a background event based on the provided parameters.\n *\n * @param params - The parameters for the background event.\n * @returns The schedule parameters for the background event.\n */\nfunction getSchedule(params: ScheduleBackgroundEventParameters): string {\n if (hasProperty(params, 'date')) {\n // TODO: Check why `params.date` is not a string.\n return params.date as string;\n }\n\n return params.duration;\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` 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\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param _hooks - The RPC method hooks. Not used by this function.\n * @param messenger - The messenger used to call controller actions.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequestWithOrigin<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, ScheduleBackgroundEventMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.Cronjob,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n const { request } = validatedParams;\n const schedule = getSchedule(validatedParams);\n\n const id = messenger.call('CronjobController:schedule', {\n snapId: origin,\n schedule,\n request,\n });\n\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\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"]}
|
|
@@ -5,11 +5,6 @@ const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
|
5
5
|
const snaps_sdk_1 = require("@metamask/snaps-sdk");
|
|
6
6
|
const superstruct_1 = require("@metamask/superstruct");
|
|
7
7
|
const endowments_1 = require("../endowments/index.cjs");
|
|
8
|
-
const methodName = 'snap_sendWebSocketMessage';
|
|
9
|
-
const hookNames = {
|
|
10
|
-
hasPermission: true,
|
|
11
|
-
sendWebSocketMessage: true,
|
|
12
|
-
};
|
|
13
8
|
const SendWebSocketMessageParametersStruct = (0, superstruct_1.object)({
|
|
14
9
|
id: (0, superstruct_1.string)(),
|
|
15
10
|
message: (0, snaps_sdk_1.union)([(0, superstruct_1.string)(), (0, superstruct_1.array)((0, superstruct_1.number)())]),
|
|
@@ -39,9 +34,11 @@ const SendWebSocketMessageParametersStruct = (0, superstruct_1.object)({
|
|
|
39
34
|
* ```
|
|
40
35
|
*/
|
|
41
36
|
exports.sendWebSocketMessageHandler = {
|
|
42
|
-
methodNames: [methodName],
|
|
43
37
|
implementation: sendWebSocketMessageImplementation,
|
|
44
|
-
|
|
38
|
+
actionNames: [
|
|
39
|
+
'PermissionController:hasPermission',
|
|
40
|
+
'WebSocketService:sendMessage',
|
|
41
|
+
],
|
|
45
42
|
};
|
|
46
43
|
/**
|
|
47
44
|
* The `snap_sendWebSocketMessage` method implementation.
|
|
@@ -50,19 +47,18 @@ exports.sendWebSocketMessageHandler = {
|
|
|
50
47
|
* @param res - The JSON-RPC response object.
|
|
51
48
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
|
|
52
49
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
53
|
-
* @param
|
|
54
|
-
* @param
|
|
55
|
-
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
50
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
51
|
+
* @param messenger - The messenger used to call controller actions.
|
|
56
52
|
* @returns Nothing.
|
|
57
53
|
*/
|
|
58
|
-
async function sendWebSocketMessageImplementation(req, res, _next, end,
|
|
59
|
-
|
|
54
|
+
async function sendWebSocketMessageImplementation(req, res, _next, end, _hooks, messenger) {
|
|
55
|
+
const { params, origin } = req;
|
|
56
|
+
if (!messenger.call('PermissionController:hasPermission', origin, endowments_1.SnapEndowments.NetworkAccess)) {
|
|
60
57
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
61
58
|
}
|
|
62
|
-
const { params } = req;
|
|
63
59
|
try {
|
|
64
60
|
const { id, message } = getValidatedParams(params);
|
|
65
|
-
await
|
|
61
|
+
await messenger.call('WebSocketService:sendMessage', origin, id, message);
|
|
66
62
|
res.result = null;
|
|
67
63
|
}
|
|
68
64
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.cjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":";;;AAMA,qDAAiE;AAKjE,mDAA4C;AAE5C,uDAO+B;AAG/B,wDAA+C;AAU/C,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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,2BAA2B,GAAG;IACzC,cAAc,EAAE,kCAAkC;IAClD,WAAW,EAAE;QACX,oCAAoC;QACpC,8BAA8B;KAC/B;CAOF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAA6D,EAC7D,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAA+D;IAE/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,2BAAc,CAAC,aAAa,CAC7B,EACD,CAAC;QACD,OAAO,GAAG,CAAC,2BAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,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 {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerHasPermissionAction } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\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 {\n JsonRpcRequestWithOrigin,\n WebSocketServiceSendMessageAction,\n} from '../types';\n\nexport type SendWebSocketMessageMethodActions =\n | PermissionControllerHasPermissionAction\n | WebSocketServiceSendMessageAction;\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 * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n implementation: sendWebSocketMessageImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'WebSocketService:sendMessage',\n ],\n} satisfies MethodHandler<\n never,\n SendWebSocketMessageMethodActions,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n { origin: string }\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. Not used by this function.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, SendWebSocketMessageMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.NetworkAccess,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const { id, message } = getValidatedParams(params);\n await messenger.call('WebSocketService:sendMessage', origin, 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"]}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
4
|
+
import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
|
|
3
5
|
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
6
|
import type { PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
-
import type {
|
|
6
|
-
export type
|
|
7
|
-
hasPermission: (permissionName: string) => boolean;
|
|
8
|
-
sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
|
|
9
|
-
};
|
|
7
|
+
import type { JsonRpcRequestWithOrigin, WebSocketServiceSendMessageAction } from "../types.cjs";
|
|
8
|
+
export type SendWebSocketMessageMethodActions = PermissionControllerHasPermissionAction | WebSocketServiceSendMessageAction;
|
|
10
9
|
declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
|
|
11
10
|
id: string;
|
|
12
11
|
message: string | number[];
|
|
@@ -40,9 +39,8 @@ export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketM
|
|
|
40
39
|
* ```
|
|
41
40
|
*/
|
|
42
41
|
export declare const sendWebSocketMessageHandler: {
|
|
43
|
-
methodNames: ["snap_sendWebSocketMessage"];
|
|
44
42
|
implementation: typeof sendWebSocketMessageImplementation;
|
|
45
|
-
|
|
43
|
+
actionNames: ("WebSocketService:sendMessage" | "PermissionController:hasPermission")[];
|
|
46
44
|
};
|
|
47
45
|
/**
|
|
48
46
|
* The `snap_sendWebSocketMessage` method implementation.
|
|
@@ -51,11 +49,10 @@ export declare const sendWebSocketMessageHandler: {
|
|
|
51
49
|
* @param res - The JSON-RPC response object.
|
|
52
50
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
|
|
53
51
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
54
|
-
* @param
|
|
55
|
-
* @param
|
|
56
|
-
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
52
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
53
|
+
* @param messenger - The messenger used to call controller actions.
|
|
57
54
|
* @returns Nothing.
|
|
58
55
|
*/
|
|
59
|
-
declare function sendWebSocketMessageImplementation(req:
|
|
56
|
+
declare function sendWebSocketMessageImplementation(req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, SendWebSocketMessageMethodActions>): Promise<void>;
|
|
60
57
|
export {};
|
|
61
58
|
//# sourceMappingURL=sendWebSocketMessage.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.d.cts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EAClC,qBAAiB;AAElB,MAAM,MAAM,iCAAiC,GACzC,uCAAuC,GACvC,iCAAiC,CAAC;AAEtC,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;CAYvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,EAC7D,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
4
|
+
import type { SendWebSocketMessageParams, SendWebSocketMessageResult } from "@metamask/snaps-sdk";
|
|
3
5
|
import type { InferMatching } from "@metamask/snaps-utils";
|
|
4
6
|
import type { PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
-
import type {
|
|
6
|
-
export type
|
|
7
|
-
hasPermission: (permissionName: string) => boolean;
|
|
8
|
-
sendWebSocketMessage: (id: string, data: string | number[]) => Promise<void>;
|
|
9
|
-
};
|
|
7
|
+
import type { JsonRpcRequestWithOrigin, WebSocketServiceSendMessageAction } from "../types.mjs";
|
|
8
|
+
export type SendWebSocketMessageMethodActions = PermissionControllerHasPermissionAction | WebSocketServiceSendMessageAction;
|
|
10
9
|
declare const SendWebSocketMessageParametersStruct: import("@metamask/superstruct").Struct<{
|
|
11
10
|
id: string;
|
|
12
11
|
message: string | number[];
|
|
@@ -40,9 +39,8 @@ export type SendWebSocketMessageParameters = InferMatching<typeof SendWebSocketM
|
|
|
40
39
|
* ```
|
|
41
40
|
*/
|
|
42
41
|
export declare const sendWebSocketMessageHandler: {
|
|
43
|
-
methodNames: ["snap_sendWebSocketMessage"];
|
|
44
42
|
implementation: typeof sendWebSocketMessageImplementation;
|
|
45
|
-
|
|
43
|
+
actionNames: ("WebSocketService:sendMessage" | "PermissionController:hasPermission")[];
|
|
46
44
|
};
|
|
47
45
|
/**
|
|
48
46
|
* The `snap_sendWebSocketMessage` method implementation.
|
|
@@ -51,11 +49,10 @@ export declare const sendWebSocketMessageHandler: {
|
|
|
51
49
|
* @param res - The JSON-RPC response object.
|
|
52
50
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
|
|
53
51
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
54
|
-
* @param
|
|
55
|
-
* @param
|
|
56
|
-
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
52
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
53
|
+
* @param messenger - The messenger used to call controller actions.
|
|
57
54
|
* @returns Nothing.
|
|
58
55
|
*/
|
|
59
|
-
declare function sendWebSocketMessageImplementation(req:
|
|
56
|
+
declare function sendWebSocketMessageImplementation(req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>, res: PendingJsonRpcResponse<SendWebSocketMessageResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, SendWebSocketMessageMethodActions>): Promise<void>;
|
|
60
57
|
export {};
|
|
61
58
|
//# sourceMappingURL=sendWebSocketMessage.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.d.mts","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC3B,4BAA4B;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAS3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB;AAG9D,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EAClC,qBAAiB;AAElB,MAAM,MAAM,iCAAiC,GACzC,uCAAuC,GACvC,iCAAiC,CAAC;AAEtC,QAAA,MAAM,oCAAoC;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,aAAa,CACxD,OAAO,oCAAoC,EAC3C,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,2BAA2B;;;CAYvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAe,kCAAkC,CAC/C,GAAG,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,EAC7D,GAAG,EAAE,sBAAsB,CAAC,0BAA0B,CAAC,EACvD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,iCAAiC,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -2,11 +2,6 @@ import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
|
|
|
2
2
|
import { union } from "@metamask/snaps-sdk";
|
|
3
3
|
import { create, object, number, string, array, StructError } from "@metamask/superstruct";
|
|
4
4
|
import { SnapEndowments } from "../endowments/index.mjs";
|
|
5
|
-
const methodName = 'snap_sendWebSocketMessage';
|
|
6
|
-
const hookNames = {
|
|
7
|
-
hasPermission: true,
|
|
8
|
-
sendWebSocketMessage: true,
|
|
9
|
-
};
|
|
10
5
|
const SendWebSocketMessageParametersStruct = object({
|
|
11
6
|
id: string(),
|
|
12
7
|
message: union([string(), array(number())]),
|
|
@@ -36,9 +31,11 @@ const SendWebSocketMessageParametersStruct = object({
|
|
|
36
31
|
* ```
|
|
37
32
|
*/
|
|
38
33
|
export const sendWebSocketMessageHandler = {
|
|
39
|
-
methodNames: [methodName],
|
|
40
34
|
implementation: sendWebSocketMessageImplementation,
|
|
41
|
-
|
|
35
|
+
actionNames: [
|
|
36
|
+
'PermissionController:hasPermission',
|
|
37
|
+
'WebSocketService:sendMessage',
|
|
38
|
+
],
|
|
42
39
|
};
|
|
43
40
|
/**
|
|
44
41
|
* The `snap_sendWebSocketMessage` method implementation.
|
|
@@ -47,19 +44,18 @@ export const sendWebSocketMessageHandler = {
|
|
|
47
44
|
* @param res - The JSON-RPC response object.
|
|
48
45
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
|
|
49
46
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
50
|
-
* @param
|
|
51
|
-
* @param
|
|
52
|
-
* @param hooks.sendWebSocketMessage - The function to send a WebSocket message.
|
|
47
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
48
|
+
* @param messenger - The messenger used to call controller actions.
|
|
53
49
|
* @returns Nothing.
|
|
54
50
|
*/
|
|
55
|
-
async function sendWebSocketMessageImplementation(req, res, _next, end,
|
|
56
|
-
|
|
51
|
+
async function sendWebSocketMessageImplementation(req, res, _next, end, _hooks, messenger) {
|
|
52
|
+
const { params, origin } = req;
|
|
53
|
+
if (!messenger.call('PermissionController:hasPermission', origin, SnapEndowments.NetworkAccess)) {
|
|
57
54
|
return end(providerErrors.unauthorized());
|
|
58
55
|
}
|
|
59
|
-
const { params } = req;
|
|
60
56
|
try {
|
|
61
57
|
const { id, message } = getValidatedParams(params);
|
|
62
|
-
await
|
|
58
|
+
await messenger.call('WebSocketService:sendMessage', origin, id, message);
|
|
63
59
|
res.result = null;
|
|
64
60
|
}
|
|
65
61
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sendWebSocketMessage.mjs","sourceRoot":"","sources":["../../src/permitted/sendWebSocketMessage.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAKjE,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;AAU/C,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;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,kCAAkC;IAClD,WAAW,EAAE;QACX,oCAAoC;QACpC,8BAA8B;KAC/B;CAOF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,kCAAkC,CAC/C,GAA6D,EAC7D,GAAuD,EACvD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAA+D;IAE/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,IACE,CAAC,SAAS,CAAC,IAAI,CACb,oCAAoC,EACpC,MAAM,EACN,cAAc,CAAC,aAAa,CAC7B,EACD,CAAC;QACD,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,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 {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerHasPermissionAction } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport type {\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 {\n JsonRpcRequestWithOrigin,\n WebSocketServiceSendMessageAction,\n} from '../types';\n\nexport type SendWebSocketMessageMethodActions =\n | PermissionControllerHasPermissionAction\n | WebSocketServiceSendMessageAction;\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 * Send a message to an open WebSocket connection. The message will be sent to\n * the WebSocket connection with the specified ID, which must have been\n * previously opened by the Snap using the [`snap_openWebSocket`](https://docs.metamask.io/snaps/reference/snaps-api/snap_openwebsocket/)\n * method.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * await wallet.request({\n * method: 'snap_sendWebSocketMessage',\n * params: {\n * id: 'websocket-connection-id',\n * message: 'Hello, WebSocket!', // or message: [1, 2, 3] for binary data\n * },\n * });\n * ```\n */\nexport const sendWebSocketMessageHandler = {\n implementation: sendWebSocketMessageImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'WebSocketService:sendMessage',\n ],\n} satisfies MethodHandler<\n never,\n SendWebSocketMessageMethodActions,\n SendWebSocketMessageParams,\n SendWebSocketMessageResult,\n { origin: string }\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. Not used by this function.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function sendWebSocketMessageImplementation(\n req: JsonRpcRequestWithOrigin<SendWebSocketMessageParameters>,\n res: PendingJsonRpcResponse<SendWebSocketMessageResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, SendWebSocketMessageMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n SnapEndowments.NetworkAccess,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const { id, message } = getValidatedParams(params);\n await messenger.call('WebSocketService:sendMessage', origin, 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"]}
|
|
@@ -8,13 +8,8 @@ const utils_1 = require("@metamask/utils");
|
|
|
8
8
|
const async_mutex_1 = require("async-mutex");
|
|
9
9
|
const manageState_1 = require("../restricted/manageState.cjs");
|
|
10
10
|
const utils_2 = require("../utils.cjs");
|
|
11
|
-
const methodName = 'snap_setState';
|
|
12
11
|
const hookNames = {
|
|
13
|
-
hasPermission: true,
|
|
14
|
-
getSnapState: true,
|
|
15
12
|
getUnlockPromise: true,
|
|
16
|
-
updateSnapState: true,
|
|
17
|
-
getSnap: true,
|
|
18
13
|
};
|
|
19
14
|
/**
|
|
20
15
|
* Allow the Snap to persist up to 64 MB of data to disk and retrieve it at
|
|
@@ -65,9 +60,14 @@ const hookNames = {
|
|
|
65
60
|
* ```
|
|
66
61
|
*/
|
|
67
62
|
exports.setStateHandler = {
|
|
68
|
-
methodNames: [methodName],
|
|
69
63
|
implementation: setStateImplementation,
|
|
70
64
|
hookNames,
|
|
65
|
+
actionNames: [
|
|
66
|
+
'PermissionController:hasPermission',
|
|
67
|
+
'SnapController:getSnapState',
|
|
68
|
+
'SnapController:updateSnapState',
|
|
69
|
+
'SnapController:getSnap',
|
|
70
|
+
],
|
|
71
71
|
};
|
|
72
72
|
const mutexes = new Map();
|
|
73
73
|
/**
|
|
@@ -96,17 +96,13 @@ const SetStateParametersStruct = (0, superstruct_1.object)({
|
|
|
96
96
|
* function.
|
|
97
97
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
98
98
|
* @param hooks - The RPC method hooks.
|
|
99
|
-
* @param hooks.hasPermission - Check whether a given origin has a given
|
|
100
|
-
* permission.
|
|
101
|
-
* @param hooks.getSnapState - Get the state of the requesting Snap.
|
|
102
99
|
* @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
|
|
103
|
-
* @param
|
|
104
|
-
* @param hooks.getSnap - The hook function to get Snap metadata.
|
|
100
|
+
* @param messenger - The messenger used to call controller actions.
|
|
105
101
|
* @returns Nothing.
|
|
106
102
|
*/
|
|
107
|
-
async function setStateImplementation(request, response, _next, end, {
|
|
108
|
-
const { params } = request;
|
|
109
|
-
if (!hasPermission
|
|
103
|
+
async function setStateImplementation(request, response, _next, end, { getUnlockPromise }, messenger) {
|
|
104
|
+
const { params, origin } = request;
|
|
105
|
+
if (!messenger.call('PermissionController:hasPermission', origin, manageState_1.manageStateBuilder.targetName)) {
|
|
110
106
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
111
107
|
}
|
|
112
108
|
try {
|
|
@@ -118,14 +114,14 @@ async function setStateImplementation(request, response, _next, end, { hasPermis
|
|
|
118
114
|
if (encrypted) {
|
|
119
115
|
await getUnlockPromise(true);
|
|
120
116
|
}
|
|
121
|
-
const snapId =
|
|
117
|
+
const snapId = origin;
|
|
122
118
|
const mutex = getMutex(snapId);
|
|
123
119
|
// The expectation when using `snap_setState` is for the operation to safe
|
|
124
120
|
// to do in parallel. The mutex ensures that and prevents a bug that was
|
|
125
121
|
// mostly prevalent on mobile and caused data loss.
|
|
126
122
|
await mutex.runExclusive(async () => {
|
|
127
|
-
const newState = await getNewState(key, value, encrypted,
|
|
128
|
-
const snap = getSnap
|
|
123
|
+
const newState = await getNewState(snapId, key, value, encrypted, messenger);
|
|
124
|
+
const snap = messenger.call('SnapController:getSnap', origin);
|
|
129
125
|
if (!snap?.preinstalled) {
|
|
130
126
|
// We know that the state is valid JSON as per previous validation.
|
|
131
127
|
const size = (0, snaps_utils_1.getJsonSizeUnsafe)(newState, true);
|
|
@@ -135,7 +131,7 @@ async function setStateImplementation(request, response, _next, end, { hasPermis
|
|
|
135
131
|
});
|
|
136
132
|
}
|
|
137
133
|
}
|
|
138
|
-
await updateSnapState
|
|
134
|
+
await messenger.call('SnapController:updateSnapState', origin, newState, encrypted);
|
|
139
135
|
response.result = null;
|
|
140
136
|
});
|
|
141
137
|
}
|
|
@@ -174,18 +170,19 @@ function getValidatedParams(params) {
|
|
|
174
170
|
* the key does not exist, it is created (and any missing intermediate keys are
|
|
175
171
|
* created as well).
|
|
176
172
|
*
|
|
173
|
+
* @param snapId - The Snap ID.
|
|
177
174
|
* @param key - The key to set.
|
|
178
175
|
* @param value - The value to set the key to.
|
|
179
176
|
* @param encrypted - Whether the state is encrypted.
|
|
180
|
-
* @param
|
|
177
|
+
* @param messenger - The messenger used to call controller actions.
|
|
181
178
|
* @returns The new state of the Snap.
|
|
182
179
|
*/
|
|
183
|
-
async function getNewState(key, value, encrypted,
|
|
180
|
+
async function getNewState(snapId, key, value, encrypted, messenger) {
|
|
184
181
|
if (key === undefined) {
|
|
185
182
|
(0, utils_1.assert)((0, utils_1.isObject)(value));
|
|
186
183
|
return value;
|
|
187
184
|
}
|
|
188
|
-
const state = await getSnapState
|
|
185
|
+
const state = await messenger.call('SnapController:getSnapState', snapId, encrypted);
|
|
189
186
|
return set(state, key, value);
|
|
190
187
|
}
|
|
191
188
|
/**
|