@metamask/snaps-rpc-methods 15.1.0 → 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 +34 -4
- package/dist/endowments/keyring.cjs +2 -5
- package/dist/endowments/keyring.cjs.map +1 -1
- package/dist/endowments/keyring.d.cts +0 -2
- package/dist/endowments/keyring.d.cts.map +1 -1
- package/dist/endowments/keyring.d.mts +0 -2
- package/dist/endowments/keyring.d.mts.map +1 -1
- package/dist/endowments/keyring.mjs +3 -6
- package/dist/endowments/keyring.mjs.map +1 -1
- 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
|
@@ -2,11 +2,6 @@ import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
|
|
|
2
2
|
import { StructError, create, object, string } from "@metamask/superstruct";
|
|
3
3
|
import { JsonStruct } from "@metamask/utils";
|
|
4
4
|
import { UI_PERMISSIONS } from "../utils.mjs";
|
|
5
|
-
const methodName = 'snap_resolveInterface';
|
|
6
|
-
const hookNames = {
|
|
7
|
-
hasPermission: true,
|
|
8
|
-
resolveInterface: true,
|
|
9
|
-
};
|
|
10
5
|
/**
|
|
11
6
|
* Resolve an interactive interface. For use in
|
|
12
7
|
* [custom dialogs](https://docs.metamask.io/snaps/features/custom-ui/dialogs/#display-a-custom-dialog).
|
|
@@ -34,9 +29,11 @@ const hookNames = {
|
|
|
34
29
|
* ```
|
|
35
30
|
*/
|
|
36
31
|
export const resolveInterfaceHandler = {
|
|
37
|
-
methodNames: [methodName],
|
|
38
32
|
implementation: getResolveInterfaceImplementation,
|
|
39
|
-
|
|
33
|
+
actionNames: [
|
|
34
|
+
'PermissionController:hasPermission',
|
|
35
|
+
'SnapInterfaceController:resolveInterface',
|
|
36
|
+
],
|
|
40
37
|
};
|
|
41
38
|
const ResolveInterfaceParametersStruct = object({
|
|
42
39
|
id: string(),
|
|
@@ -50,23 +47,22 @@ const ResolveInterfaceParametersStruct = object({
|
|
|
50
47
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
51
48
|
* function.
|
|
52
49
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
53
|
-
* @param
|
|
54
|
-
* @param
|
|
55
|
-
* permission.
|
|
56
|
-
* @param hooks.resolveInterface - The function to resolve the interface.
|
|
50
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
51
|
+
* @param messenger - The messenger used to call controller actions.
|
|
57
52
|
* @returns Nothing.
|
|
58
53
|
*/
|
|
59
|
-
async function getResolveInterfaceImplementation(req, res, _next, end,
|
|
60
|
-
|
|
54
|
+
async function getResolveInterfaceImplementation(req, res, _next, end, _hooks, messenger) {
|
|
55
|
+
const { params, origin } = req;
|
|
56
|
+
const isPermitted = UI_PERMISSIONS.some((permission) => messenger.call('PermissionController:hasPermission', origin, permission));
|
|
57
|
+
if (!isPermitted) {
|
|
61
58
|
return end(providerErrors.unauthorized({
|
|
62
59
|
message: `This method can only be used if the Snap has one of the following permissions: ${UI_PERMISSIONS.join(', ')}.`,
|
|
63
60
|
}));
|
|
64
61
|
}
|
|
65
|
-
const { params } = req;
|
|
66
62
|
try {
|
|
67
63
|
const validatedParams = getValidatedParams(params);
|
|
68
64
|
const { id, value } = validatedParams;
|
|
69
|
-
await resolveInterface
|
|
65
|
+
await messenger.call('SnapInterfaceController:resolveInterface', origin, id, value);
|
|
70
66
|
res.result = null;
|
|
71
67
|
}
|
|
72
68
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveInterface.mjs","sourceRoot":"","sources":["../../src/permitted/resolveInterface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveInterface.mjs","sourceRoot":"","sources":["../../src/permitted/resolveInterface.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AAMjE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,8BAA8B;AAE5E,OAAO,EAAE,UAAU,EAAE,wBAAwB;AAM7C,OAAO,EAAE,cAAc,EAAE,qBAAiB;AAM1C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc,EAAE,iCAAiC;IACjD,WAAW,EAAE;QACX,oCAAoC;QACpC,0CAA0C;KAC3C;CAOF,CAAC;AAEF,MAAM,gCAAgC,GAAG,MAAM,CAAC;IAC9C,EAAE,EAAE,MAAM,EAAE;IACZ,KAAK,EAAE,UAAU;CAClB,CAAC,CAAC;AAOH;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,iCAAiC,CAC9C,GAAyD,EACzD,GAAmD,EACnD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAA2D;IAE3D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CAAC,oCAAoC,EAAE,MAAM,EAAE,UAAU,CAAC,CACzE,CAAC;IAEF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,CACR,cAAc,CAAC,YAAY,CAAC;YAC1B,OAAO,EAAE,kFAAkF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SACxH,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEnD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;QAEtC,MAAM,SAAS,CAAC,IAAI,CAClB,0CAA0C,EAC1C,MAAM,EACN,EAAE,EACF,KAAK,CACN,CAAC;QACF,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,gCAAgC,CAAC,CAAC;IAC1D,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 ResolveInterfaceParams,\n ResolveInterfaceResult,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport { StructError, create, object, string } from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\nimport { JsonStruct } from '@metamask/utils';\n\nimport type {\n JsonRpcRequestWithOrigin,\n SnapInterfaceControllerResolveInterfaceAction,\n} from '../types';\nimport { UI_PERMISSIONS } from '../utils';\n\nexport type ResolveInterfaceMethodActions =\n | PermissionControllerHasPermissionAction\n | SnapInterfaceControllerResolveInterfaceAction;\n\n/**\n * Resolve an interactive interface. For use in\n * [custom dialogs](https://docs.metamask.io/snaps/features/custom-ui/dialogs/#display-a-custom-dialog).\n *\n * @example\n * ```ts\n * const id = await snap.request({\n * method: 'snap_createInterface',\n * params: {\n * // The parameters to create the interface with.\n * },\n * });\n *\n * // Later, when the user has interacted with the interface, and you want to\n * // resolve it:\n * await snap.request({\n * method: 'snap_resolveInterface',\n * params: {\n * id: interfaceId,\n * value: {\n * // The value to resolve the interface with.\n * },\n * },\n * });\n * ```\n */\nexport const resolveInterfaceHandler = {\n implementation: getResolveInterfaceImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'SnapInterfaceController:resolveInterface',\n ],\n} satisfies MethodHandler<\n never,\n ResolveInterfaceMethodActions,\n ResolveInterfaceParameters,\n ResolveInterfaceResult,\n { origin: string }\n>;\n\nconst ResolveInterfaceParametersStruct = object({\n id: string(),\n value: JsonStruct,\n});\n\nexport type ResolveInterfaceParameters = InferMatching<\n typeof ResolveInterfaceParametersStruct,\n ResolveInterfaceParams\n>;\n\n/**\n * The `snap_resolveInterface` 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 Nothing.\n */\nasync function getResolveInterfaceImplementation(\n req: JsonRpcRequestWithOrigin<ResolveInterfaceParameters>,\n res: PendingJsonRpcResponse<ResolveInterfaceResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, ResolveInterfaceMethodActions>,\n): Promise<void> {\n const { params, origin } = req;\n\n const isPermitted = UI_PERMISSIONS.some((permission) =>\n messenger.call('PermissionController:hasPermission', origin, permission),\n );\n\n if (!isPermitted) {\n return end(\n providerErrors.unauthorized({\n message: `This method can only be used if the Snap has one of the following permissions: ${UI_PERMISSIONS.join(', ')}.`,\n }),\n );\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { id, value } = validatedParams;\n\n await messenger.call(\n 'SnapInterfaceController:resolveInterface',\n origin,\n id,\n value,\n );\n res.result = null;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the resolveInterface 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(params: unknown): ResolveInterfaceParameters {\n try {\n return create(params, ResolveInterfaceParametersStruct);\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"]}
|
|
@@ -7,11 +7,6 @@ const snaps_utils_1 = require("@metamask/snaps-utils");
|
|
|
7
7
|
const superstruct_1 = require("@metamask/superstruct");
|
|
8
8
|
const utils_1 = require("@metamask/utils");
|
|
9
9
|
const endowments_1 = require("../endowments/index.cjs");
|
|
10
|
-
const methodName = 'snap_scheduleBackgroundEvent';
|
|
11
|
-
const hookNames = {
|
|
12
|
-
scheduleBackgroundEvent: true,
|
|
13
|
-
hasPermission: true,
|
|
14
|
-
};
|
|
15
10
|
/**
|
|
16
11
|
* Schedule a background event for a Snap. The background event will trigger a
|
|
17
12
|
* JSON-RPC request to the Snap at the scheduled time, handled by the
|
|
@@ -39,9 +34,11 @@ const hookNames = {
|
|
|
39
34
|
* ```
|
|
40
35
|
*/
|
|
41
36
|
exports.scheduleBackgroundEventHandler = {
|
|
42
|
-
methodNames: [methodName],
|
|
43
37
|
implementation: getScheduleBackgroundEventImplementation,
|
|
44
|
-
|
|
38
|
+
actionNames: [
|
|
39
|
+
'PermissionController:hasPermission',
|
|
40
|
+
'CronjobController:schedule',
|
|
41
|
+
],
|
|
45
42
|
};
|
|
46
43
|
const ScheduleBackgroundEventParametersWithDateStruct = (0, superstruct_1.object)({
|
|
47
44
|
date: snaps_utils_1.ISO8601DateStruct,
|
|
@@ -78,21 +75,21 @@ function getSchedule(params) {
|
|
|
78
75
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
79
76
|
* function.
|
|
80
77
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
81
|
-
* @param
|
|
82
|
-
* @param
|
|
83
|
-
* @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.
|
|
78
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
79
|
+
* @param messenger - The messenger used to call controller actions.
|
|
84
80
|
* @returns An id representing the background event.
|
|
85
81
|
*/
|
|
86
|
-
async function getScheduleBackgroundEventImplementation(req, res, _next, end,
|
|
87
|
-
const { params } = req;
|
|
88
|
-
if (!hasPermission
|
|
82
|
+
async function getScheduleBackgroundEventImplementation(req, res, _next, end, _hooks, messenger) {
|
|
83
|
+
const { params, origin } = req;
|
|
84
|
+
if (!messenger.call('PermissionController:hasPermission', origin, endowments_1.SnapEndowments.Cronjob)) {
|
|
89
85
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
90
86
|
}
|
|
91
87
|
try {
|
|
92
88
|
const validatedParams = getValidatedParams(params);
|
|
93
89
|
const { request } = validatedParams;
|
|
94
90
|
const schedule = getSchedule(validatedParams);
|
|
95
|
-
const id =
|
|
91
|
+
const id = messenger.call('CronjobController:schedule', {
|
|
92
|
+
snapId: origin,
|
|
96
93
|
schedule,
|
|
97
94
|
request,
|
|
98
95
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduleBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"scheduleBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":";;;AAMA,qDAAiE;AACjE,mDAK6B;AAE7B,uDAI+B;AAC/B,uDAAoE;AACpE,2CAA2E;AAE3E,wDAA+C;AAU/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACU,QAAA,8BAA8B,GAAG;IAC5C,cAAc,EAAE,wCAAwC;IACxD,WAAW,EAAE;QACX,oCAAoC;QACpC,4BAA4B;KAC7B;CAOF,CAAC;AAEF,MAAM,+CAA+C,GAAG,IAAA,oBAAM,EAAC;IAC7D,IAAI,EAAE,+BAAiB;IACvB,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,mDAAmD,GAAG,IAAA,oBAAM,EAAC;IACjE,QAAQ,EAAE,mCAAqB;IAC/B,OAAO,EAAE,qCAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,uCAAuC,GAAG,IAAA,0BAAc,EAAC,CAAC,GAAG,EAAE,EAAE;IACrE,IAAI,IAAA,mBAAW,EAAC,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,IAAA,mBAAW,EAAC,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,2BAAc,CAAC,OAAO,CACvB,EACD,CAAC;QACD,OAAO,GAAG,CAAC,2BAAc,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,IAAA,oBAAM,EAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IACjE,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 {\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"]}
|
|
@@ -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"}
|