@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,7 +1,9 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
2
3
|
import type { GetSnapsResult } from "@metamask/snaps-sdk";
|
|
3
|
-
import type { PendingJsonRpcResponse } from "@metamask/utils";
|
|
4
|
-
import type {
|
|
4
|
+
import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
+
import type { SnapControllerGetPermittedSnapsAction } from "../types.cjs";
|
|
6
|
+
export type GetSnapsMethodActions = SnapControllerGetPermittedSnapsAction;
|
|
5
7
|
/**
|
|
6
8
|
* Get permitted and installed Snaps for the requesting origin.
|
|
7
9
|
*
|
|
@@ -24,29 +26,24 @@ import type { MethodHooksObject } from "../utils.cjs";
|
|
|
24
26
|
* ```
|
|
25
27
|
*/
|
|
26
28
|
export declare const getSnapsHandler: {
|
|
27
|
-
methodNames: ["wallet_getSnaps"];
|
|
28
29
|
implementation: typeof getSnapsImplementation;
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
export type GetSnapsHooks = {
|
|
32
|
-
/**
|
|
33
|
-
* @returns The permitted and installed snaps for the requesting origin.
|
|
34
|
-
*/
|
|
35
|
-
getSnaps: () => Promise<GetSnapsResult>;
|
|
30
|
+
actionNames: "SnapController:getPermittedSnaps"[];
|
|
36
31
|
};
|
|
37
32
|
/**
|
|
38
33
|
* The `wallet_getSnaps` method implementation.
|
|
39
34
|
* Fetches available snaps for the requesting origin and adds them to the JSON-RPC response.
|
|
40
35
|
*
|
|
41
|
-
* @param
|
|
36
|
+
* @param req - The JSON-RPC request object.
|
|
42
37
|
* @param res - The JSON-RPC response object.
|
|
43
38
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
44
39
|
* function.
|
|
45
40
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
46
|
-
* @param
|
|
47
|
-
* @param
|
|
41
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
42
|
+
* @param messenger - The messenger used to call controller actions.
|
|
48
43
|
* @returns Nothing.
|
|
49
44
|
*/
|
|
50
|
-
declare function getSnapsImplementation(
|
|
45
|
+
declare function getSnapsImplementation(req: JsonRpcRequest & {
|
|
46
|
+
origin: string;
|
|
47
|
+
}, res: PendingJsonRpcResponse<GetSnapsResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, GetSnapsMethodActions>): Promise<void>;
|
|
51
48
|
export {};
|
|
52
49
|
//# sourceMappingURL=getSnaps.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSnaps.d.cts","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getSnaps.d.cts","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,4BAA4B;AAC1D,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAEzB,OAAO,KAAK,EAAE,qCAAqC,EAAE,qBAAiB;AAEtE,MAAM,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe;;;CAS3B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sBAAsB,CACnC,GAAG,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EACxC,GAAG,EAAE,sBAAsB,CAAC,cAAc,CAAC,EAC3C,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
2
3
|
import type { GetSnapsResult } from "@metamask/snaps-sdk";
|
|
3
|
-
import type { PendingJsonRpcResponse } from "@metamask/utils";
|
|
4
|
-
import type {
|
|
4
|
+
import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
|
|
5
|
+
import type { SnapControllerGetPermittedSnapsAction } from "../types.mjs";
|
|
6
|
+
export type GetSnapsMethodActions = SnapControllerGetPermittedSnapsAction;
|
|
5
7
|
/**
|
|
6
8
|
* Get permitted and installed Snaps for the requesting origin.
|
|
7
9
|
*
|
|
@@ -24,29 +26,24 @@ import type { MethodHooksObject } from "../utils.mjs";
|
|
|
24
26
|
* ```
|
|
25
27
|
*/
|
|
26
28
|
export declare const getSnapsHandler: {
|
|
27
|
-
methodNames: ["wallet_getSnaps"];
|
|
28
29
|
implementation: typeof getSnapsImplementation;
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
export type GetSnapsHooks = {
|
|
32
|
-
/**
|
|
33
|
-
* @returns The permitted and installed snaps for the requesting origin.
|
|
34
|
-
*/
|
|
35
|
-
getSnaps: () => Promise<GetSnapsResult>;
|
|
30
|
+
actionNames: "SnapController:getPermittedSnaps"[];
|
|
36
31
|
};
|
|
37
32
|
/**
|
|
38
33
|
* The `wallet_getSnaps` method implementation.
|
|
39
34
|
* Fetches available snaps for the requesting origin and adds them to the JSON-RPC response.
|
|
40
35
|
*
|
|
41
|
-
* @param
|
|
36
|
+
* @param req - The JSON-RPC request object.
|
|
42
37
|
* @param res - The JSON-RPC response object.
|
|
43
38
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
44
39
|
* function.
|
|
45
40
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
46
|
-
* @param
|
|
47
|
-
* @param
|
|
41
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
42
|
+
* @param messenger - The messenger used to call controller actions.
|
|
48
43
|
* @returns Nothing.
|
|
49
44
|
*/
|
|
50
|
-
declare function getSnapsImplementation(
|
|
45
|
+
declare function getSnapsImplementation(req: JsonRpcRequest & {
|
|
46
|
+
origin: string;
|
|
47
|
+
}, res: PendingJsonRpcResponse<GetSnapsResult>, _next: unknown, end: JsonRpcEngineEndCallback, _hooks: never, messenger: Messenger<string, GetSnapsMethodActions>): Promise<void>;
|
|
51
48
|
export {};
|
|
52
49
|
//# sourceMappingURL=getSnaps.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSnaps.d.mts","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getSnaps.d.mts","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,4BAA4B;AAC1D,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAEzB,OAAO,KAAK,EAAE,qCAAqC,EAAE,qBAAiB;AAEtE,MAAM,MAAM,qBAAqB,GAAG,qCAAqC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe;;;CAS3B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sBAAsB,CACnC,GAAG,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EACxC,GAAG,EAAE,sBAAsB,CAAC,cAAc,CAAC,EAC3C,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
const methodName = 'wallet_getSnaps';
|
|
2
|
-
const hookNames = {
|
|
3
|
-
getSnaps: true,
|
|
4
|
-
};
|
|
5
1
|
/**
|
|
6
2
|
* Get permitted and installed Snaps for the requesting origin.
|
|
7
3
|
*
|
|
@@ -24,26 +20,24 @@ const hookNames = {
|
|
|
24
20
|
* ```
|
|
25
21
|
*/
|
|
26
22
|
export const getSnapsHandler = {
|
|
27
|
-
methodNames: [methodName],
|
|
28
23
|
implementation: getSnapsImplementation,
|
|
29
|
-
|
|
24
|
+
actionNames: ['SnapController:getPermittedSnaps'],
|
|
30
25
|
};
|
|
31
26
|
/**
|
|
32
27
|
* The `wallet_getSnaps` method implementation.
|
|
33
28
|
* Fetches available snaps for the requesting origin and adds them to the JSON-RPC response.
|
|
34
29
|
*
|
|
35
|
-
* @param
|
|
30
|
+
* @param req - The JSON-RPC request object.
|
|
36
31
|
* @param res - The JSON-RPC response object.
|
|
37
32
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this
|
|
38
33
|
* function.
|
|
39
34
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
40
|
-
* @param
|
|
41
|
-
* @param
|
|
35
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
36
|
+
* @param messenger - The messenger used to call controller actions.
|
|
42
37
|
* @returns Nothing.
|
|
43
38
|
*/
|
|
44
|
-
async function getSnapsImplementation(
|
|
45
|
-
|
|
46
|
-
res.result = await getSnaps();
|
|
39
|
+
async function getSnapsImplementation(req, res, _next, end, _hooks, messenger) {
|
|
40
|
+
res.result = messenger.call('SnapController:getPermittedSnaps', req.origin);
|
|
47
41
|
return end();
|
|
48
42
|
}
|
|
49
43
|
//# sourceMappingURL=getSnaps.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSnaps.mjs","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getSnaps.mjs","sourceRoot":"","sources":["../../src/permitted/getSnaps.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,sBAAsB;IACtC,WAAW,EAAE,CAAC,kCAAkC,CAAC;CAOlD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,sBAAsB,CACnC,GAAwC,EACxC,GAA2C,EAC3C,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAAmD;IAEnD,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5E,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport type { GetSnapsResult } from '@metamask/snaps-sdk';\nimport type {\n JsonRpcParams,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport type { SnapControllerGetPermittedSnapsAction } from '../types';\n\nexport type GetSnapsMethodActions = SnapControllerGetPermittedSnapsAction;\n\n/**\n * Get permitted and installed Snaps for the requesting origin.\n *\n * @example\n * ```ts\n * const snaps = await snap.request({\n * method: 'wallet_getSnaps',\n * });\n * console.log(snaps);\n * // {\n * // 'npm:example-snap': {\n * // id: 'npm:example-snap',\n * // version: '1.0.0',\n * // initialPermissions: { ... },\n * // blocked: false,\n * // enabled: true,\n * // },\n * // ...,\n * // }\n * ```\n */\nexport const getSnapsHandler = {\n implementation: getSnapsImplementation,\n actionNames: ['SnapController:getPermittedSnaps'],\n} satisfies MethodHandler<\n never,\n GetSnapsMethodActions,\n JsonRpcParams,\n GetSnapsResult,\n { origin: string }\n>;\n\n/**\n * The `wallet_getSnaps` method implementation.\n * Fetches available snaps for the requesting origin and adds them to the JSON-RPC response.\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 getSnapsImplementation(\n req: JsonRpcRequest & { origin: string },\n res: PendingJsonRpcResponse<GetSnapsResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, GetSnapsMethodActions>,\n): Promise<void> {\n res.result = messenger.call('SnapController:getPermittedSnaps', req.origin);\n return end();\n}\n"]}
|
|
@@ -6,10 +6,7 @@ const superstruct_1 = require("@metamask/superstruct");
|
|
|
6
6
|
const utils_1 = require("@metamask/utils");
|
|
7
7
|
const manageState_1 = require("../restricted/manageState.cjs");
|
|
8
8
|
const utils_2 = require("../utils.cjs");
|
|
9
|
-
const methodName = 'snap_getState';
|
|
10
9
|
const hookNames = {
|
|
11
|
-
hasPermission: true,
|
|
12
|
-
getSnapState: true,
|
|
13
10
|
getUnlockPromise: true,
|
|
14
11
|
};
|
|
15
12
|
/**
|
|
@@ -37,9 +34,12 @@ const hookNames = {
|
|
|
37
34
|
* ```
|
|
38
35
|
*/
|
|
39
36
|
exports.getStateHandler = {
|
|
40
|
-
methodNames: [methodName],
|
|
41
37
|
implementation: getStateImplementation,
|
|
42
38
|
hookNames,
|
|
39
|
+
actionNames: [
|
|
40
|
+
'PermissionController:hasPermission',
|
|
41
|
+
'SnapController:getSnapState',
|
|
42
|
+
],
|
|
43
43
|
};
|
|
44
44
|
const GetStateParametersStruct = (0, superstruct_1.object)({
|
|
45
45
|
key: (0, superstruct_1.optional)(utils_2.StateKeyStruct),
|
|
@@ -54,10 +54,8 @@ const GetStateParametersStruct = (0, superstruct_1.object)({
|
|
|
54
54
|
* function.
|
|
55
55
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
56
56
|
* @param hooks - The RPC method hooks.
|
|
57
|
-
* @param hooks.hasPermission - Check whether a given origin has a given
|
|
58
|
-
* permission.
|
|
59
|
-
* @param hooks.getSnapState - Get the state of the requesting Snap.
|
|
60
57
|
* @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
|
|
58
|
+
* @param messenger - The messenger used to call controller actions.
|
|
61
59
|
* @returns Nothing.
|
|
62
60
|
*/
|
|
63
61
|
async function getStateImplementation(request,
|
|
@@ -66,9 +64,9 @@ async function getStateImplementation(request,
|
|
|
66
64
|
// We use `GetStateResult` here to make it clear that this is the expected
|
|
67
65
|
// type of the result.
|
|
68
66
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments
|
|
69
|
-
response, _next, end, {
|
|
70
|
-
const { params } = request;
|
|
71
|
-
if (!hasPermission
|
|
67
|
+
response, _next, end, { getUnlockPromise }, messenger) {
|
|
68
|
+
const { params, origin } = request;
|
|
69
|
+
if (!messenger.call('PermissionController:hasPermission', origin, manageState_1.manageStateBuilder.targetName)) {
|
|
72
70
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
73
71
|
}
|
|
74
72
|
try {
|
|
@@ -77,7 +75,7 @@ response, _next, end, { hasPermission, getSnapState, getUnlockPromise }) {
|
|
|
77
75
|
if (encrypted) {
|
|
78
76
|
await getUnlockPromise(true);
|
|
79
77
|
}
|
|
80
|
-
const state = await getSnapState
|
|
78
|
+
const state = await messenger.call('SnapController:getSnapState', origin, encrypted);
|
|
81
79
|
response.result = get(state, key);
|
|
82
80
|
}
|
|
83
81
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getState.cjs","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"getState.cjs","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":"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","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 { GetStateParams, GetStateResult } from '@metamask/snaps-sdk';\nimport { type InferMatching } from '@metamask/snaps-utils';\nimport {\n boolean,\n create,\n object,\n optional,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse, Json } from '@metamask/utils';\nimport { hasProperty, isObject } from '@metamask/utils';\n\nimport { manageStateBuilder } from '../restricted/manageState';\nimport type {\n JsonRpcRequestWithOrigin,\n SnapControllerGetSnapStateAction,\n} from '../types';\nimport type { MethodHooksObject } from '../utils';\nimport { FORBIDDEN_KEYS, StateKeyStruct } from '../utils';\n\nconst hookNames: MethodHooksObject<GetStateMethodHooks> = {\n getUnlockPromise: true,\n};\n\nexport type GetStateMethodHooks = {\n /**\n * Wait for the extension to be unlocked.\n *\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n};\n\nexport type GetStateMethodActions =\n | PermissionControllerHasPermissionAction\n | SnapControllerGetSnapStateAction;\n\n/**\n * Get the state of the Snap, or a specific value within the state. By default,\n * the data is automatically encrypted using a Snap-specific key and\n * automatically decrypted when retrieved. You can set `encrypted` to `false` to\n * use unencrypted storage (available when the client is locked).\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"snap_manageState\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * const state = await snap.request({\n * method: 'snap_getState',\n * params: {\n * key: 'some.nested.value', // Optional, defaults to entire state\n * encrypted: true, // Optional, defaults to `true`\n * },\n * });\n * ```\n */\nexport const getStateHandler = {\n implementation: getStateImplementation,\n hookNames,\n actionNames: [\n 'PermissionController:hasPermission',\n 'SnapController:getSnapState',\n ],\n} satisfies MethodHandler<\n GetStateMethodHooks,\n GetStateMethodActions,\n GetStateParameters,\n GetStateResult,\n { origin: string }\n>;\n\nconst GetStateParametersStruct = object({\n key: optional(StateKeyStruct),\n encrypted: optional(boolean()),\n});\n\nexport type GetStateParameters = InferMatching<\n typeof GetStateParametersStruct,\n GetStateParams\n>;\n\n/**\n * The `snap_getState` method implementation.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.getUnlockPromise - Wait for the extension to be unlocked.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function getStateImplementation(\n request: JsonRpcRequestWithOrigin<GetStateParameters>,\n // `GetStateResult` is an alias for `Json` (which is the default type argument\n // for `PendingJsonRpcResponse`), but that may not be the case in the future.\n // We use `GetStateResult` here to make it clear that this is the expected\n // type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n response: PendingJsonRpcResponse<GetStateResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { getUnlockPromise }: GetStateMethodHooks,\n messenger: Messenger<string, GetStateMethodActions>,\n): Promise<void> {\n const { params, origin } = request;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n manageStateBuilder.targetName,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n const { key, encrypted = true } = validatedParams;\n\n if (encrypted) {\n await getUnlockPromise(true);\n }\n\n const state = await messenger.call(\n 'SnapController:getSnapState',\n origin,\n encrypted,\n );\n response.result = get(state, key);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters of the `snap_getState` method.\n *\n * @param params - The parameters to validate.\n * @returns The validated parameters.\n */\nfunction getValidatedParams(params?: unknown) {\n try {\n return create(params, GetStateParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n\n/**\n * Get the value of a key in an object. The key may contain Lodash-style path\n * syntax, e.g., `a.b.c` (with the exception of array syntax). If the key does\n * not exist, `null` is returned.\n *\n * This is a simplified version of Lodash's `get` function, but Lodash doesn't\n * seem to be maintained anymore, so we're using our own implementation.\n *\n * @param value - The object to get the key from.\n * @param key - The key to get.\n * @returns The value of the key in the object, or `null` if the key does not\n * exist.\n */\nexport function get(\n value: Record<string, Json> | null,\n key?: string | undefined,\n): Json {\n if (key === undefined) {\n return value;\n }\n\n const keys = key.split('.');\n let result: Json = value;\n\n // Intentionally using a classic for loop here for performance reasons.\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < keys.length; i++) {\n const currentKey = keys[i];\n if (FORBIDDEN_KEYS.includes(currentKey)) {\n throw rpcErrors.invalidParams(\n 'Invalid params: Key contains forbidden characters.',\n );\n }\n\n if (isObject(result)) {\n if (!hasProperty(result, currentKey)) {\n return null;\n }\n\n result = result[currentKey];\n continue;\n }\n\n return null;\n }\n\n return result;\n}\n"]}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
2
4
|
import type { GetStateParams, GetStateResult } from "@metamask/snaps-sdk";
|
|
3
5
|
import { type InferMatching } from "@metamask/snaps-utils";
|
|
4
|
-
import type { PendingJsonRpcResponse, Json
|
|
6
|
+
import type { PendingJsonRpcResponse, Json } from "@metamask/utils";
|
|
7
|
+
import type { JsonRpcRequestWithOrigin, SnapControllerGetSnapStateAction } from "../types.cjs";
|
|
5
8
|
import type { MethodHooksObject } from "../utils.cjs";
|
|
9
|
+
export type GetStateMethodHooks = {
|
|
10
|
+
/**
|
|
11
|
+
* Wait for the extension to be unlocked.
|
|
12
|
+
*
|
|
13
|
+
* @returns A promise that resolves once the extension is unlocked.
|
|
14
|
+
*/
|
|
15
|
+
getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
export type GetStateMethodActions = PermissionControllerHasPermissionAction | SnapControllerGetSnapStateAction;
|
|
6
18
|
/**
|
|
7
19
|
* Get the state of the Snap, or a specific value within the state. By default,
|
|
8
20
|
* the data is automatically encrypted using a Snap-specific key and
|
|
@@ -28,30 +40,9 @@ import type { MethodHooksObject } from "../utils.cjs";
|
|
|
28
40
|
* ```
|
|
29
41
|
*/
|
|
30
42
|
export declare const getStateHandler: {
|
|
31
|
-
methodNames: ["snap_getState"];
|
|
32
43
|
implementation: typeof getStateImplementation;
|
|
33
|
-
hookNames: MethodHooksObject<
|
|
34
|
-
|
|
35
|
-
export type GetStateHooks = {
|
|
36
|
-
/**
|
|
37
|
-
* Check if the requesting origin has a given permission.
|
|
38
|
-
*
|
|
39
|
-
* @param permissionName - The name of the permission to check.
|
|
40
|
-
* @returns Whether the origin has the permission.
|
|
41
|
-
*/
|
|
42
|
-
hasPermission: (permissionName: string) => boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Get the state of the requesting Snap.
|
|
45
|
-
*
|
|
46
|
-
* @returns The current state of the Snap.
|
|
47
|
-
*/
|
|
48
|
-
getSnapState: (encrypted: boolean) => Promise<Record<string, Json>>;
|
|
49
|
-
/**
|
|
50
|
-
* Wait for the extension to be unlocked.
|
|
51
|
-
*
|
|
52
|
-
* @returns A promise that resolves once the extension is unlocked.
|
|
53
|
-
*/
|
|
54
|
-
getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
|
|
44
|
+
hookNames: MethodHooksObject<GetStateMethodHooks>;
|
|
45
|
+
actionNames: ("SnapController:getSnapState" | "PermissionController:hasPermission")[];
|
|
55
46
|
};
|
|
56
47
|
declare const GetStateParametersStruct: import("@metamask/superstruct").Struct<{
|
|
57
48
|
encrypted?: boolean | undefined;
|
|
@@ -70,13 +61,11 @@ export type GetStateParameters = InferMatching<typeof GetStateParametersStruct,
|
|
|
70
61
|
* function.
|
|
71
62
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
72
63
|
* @param hooks - The RPC method hooks.
|
|
73
|
-
* @param hooks.hasPermission - Check whether a given origin has a given
|
|
74
|
-
* permission.
|
|
75
|
-
* @param hooks.getSnapState - Get the state of the requesting Snap.
|
|
76
64
|
* @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
|
|
65
|
+
* @param messenger - The messenger used to call controller actions.
|
|
77
66
|
* @returns Nothing.
|
|
78
67
|
*/
|
|
79
|
-
declare function getStateImplementation(request:
|
|
68
|
+
declare function getStateImplementation(request: JsonRpcRequestWithOrigin<GetStateParameters>, response: PendingJsonRpcResponse<GetStateResult>, _next: unknown, end: JsonRpcEngineEndCallback, { getUnlockPromise }: GetStateMethodHooks, messenger: Messenger<string, GetStateMethodActions>): Promise<void>;
|
|
80
69
|
/**
|
|
81
70
|
* Get the value of a key in an object. The key may contain Lodash-style path
|
|
82
71
|
* syntax, e.g., `a.b.c` (with the exception of array syntax). If the key does
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getState.d.cts","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getState.d.cts","sourceRoot":"","sources":["../../src/permitted/getState.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,EAAE,cAAc,EAAE,cAAc,EAAE,4BAA4B;AAC1E,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAQ3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,wBAAwB;AAIpE,OAAO,KAAK,EACV,wBAAwB,EACxB,gCAAgC,EACjC,qBAAiB;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAOlD,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,uCAAuC,GACvC,gCAAgC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,eAAe;;;;CAa3B,CAAC;AAEF,QAAA,MAAM,wBAAwB;;;;;;EAG5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAC5C,OAAO,wBAAwB,EAC/B,cAAc,CACf,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sBAAsB,CACnC,OAAO,EAAE,wBAAwB,CAAC,kBAAkB,CAAC,EAMrD,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,EAChD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,gBAAgB,EAAE,EAAE,mBAAmB,EACzC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAuBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,EAClC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GACvB,IAAI,CA+BN"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
|
|
2
|
+
import type { Messenger } from "@metamask/messenger";
|
|
3
|
+
import type { PermissionControllerHasPermissionAction } from "@metamask/permission-controller";
|
|
2
4
|
import type { GetStateParams, GetStateResult } from "@metamask/snaps-sdk";
|
|
3
5
|
import { type InferMatching } from "@metamask/snaps-utils";
|
|
4
|
-
import type { PendingJsonRpcResponse, Json
|
|
6
|
+
import type { PendingJsonRpcResponse, Json } from "@metamask/utils";
|
|
7
|
+
import type { JsonRpcRequestWithOrigin, SnapControllerGetSnapStateAction } from "../types.mjs";
|
|
5
8
|
import type { MethodHooksObject } from "../utils.mjs";
|
|
9
|
+
export type GetStateMethodHooks = {
|
|
10
|
+
/**
|
|
11
|
+
* Wait for the extension to be unlocked.
|
|
12
|
+
*
|
|
13
|
+
* @returns A promise that resolves once the extension is unlocked.
|
|
14
|
+
*/
|
|
15
|
+
getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
export type GetStateMethodActions = PermissionControllerHasPermissionAction | SnapControllerGetSnapStateAction;
|
|
6
18
|
/**
|
|
7
19
|
* Get the state of the Snap, or a specific value within the state. By default,
|
|
8
20
|
* the data is automatically encrypted using a Snap-specific key and
|
|
@@ -28,30 +40,9 @@ import type { MethodHooksObject } from "../utils.mjs";
|
|
|
28
40
|
* ```
|
|
29
41
|
*/
|
|
30
42
|
export declare const getStateHandler: {
|
|
31
|
-
methodNames: ["snap_getState"];
|
|
32
43
|
implementation: typeof getStateImplementation;
|
|
33
|
-
hookNames: MethodHooksObject<
|
|
34
|
-
|
|
35
|
-
export type GetStateHooks = {
|
|
36
|
-
/**
|
|
37
|
-
* Check if the requesting origin has a given permission.
|
|
38
|
-
*
|
|
39
|
-
* @param permissionName - The name of the permission to check.
|
|
40
|
-
* @returns Whether the origin has the permission.
|
|
41
|
-
*/
|
|
42
|
-
hasPermission: (permissionName: string) => boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Get the state of the requesting Snap.
|
|
45
|
-
*
|
|
46
|
-
* @returns The current state of the Snap.
|
|
47
|
-
*/
|
|
48
|
-
getSnapState: (encrypted: boolean) => Promise<Record<string, Json>>;
|
|
49
|
-
/**
|
|
50
|
-
* Wait for the extension to be unlocked.
|
|
51
|
-
*
|
|
52
|
-
* @returns A promise that resolves once the extension is unlocked.
|
|
53
|
-
*/
|
|
54
|
-
getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
|
|
44
|
+
hookNames: MethodHooksObject<GetStateMethodHooks>;
|
|
45
|
+
actionNames: ("SnapController:getSnapState" | "PermissionController:hasPermission")[];
|
|
55
46
|
};
|
|
56
47
|
declare const GetStateParametersStruct: import("@metamask/superstruct").Struct<{
|
|
57
48
|
encrypted?: boolean | undefined;
|
|
@@ -70,13 +61,11 @@ export type GetStateParameters = InferMatching<typeof GetStateParametersStruct,
|
|
|
70
61
|
* function.
|
|
71
62
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
72
63
|
* @param hooks - The RPC method hooks.
|
|
73
|
-
* @param hooks.hasPermission - Check whether a given origin has a given
|
|
74
|
-
* permission.
|
|
75
|
-
* @param hooks.getSnapState - Get the state of the requesting Snap.
|
|
76
64
|
* @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
|
|
65
|
+
* @param messenger - The messenger used to call controller actions.
|
|
77
66
|
* @returns Nothing.
|
|
78
67
|
*/
|
|
79
|
-
declare function getStateImplementation(request:
|
|
68
|
+
declare function getStateImplementation(request: JsonRpcRequestWithOrigin<GetStateParameters>, response: PendingJsonRpcResponse<GetStateResult>, _next: unknown, end: JsonRpcEngineEndCallback, { getUnlockPromise }: GetStateMethodHooks, messenger: Messenger<string, GetStateMethodActions>): Promise<void>;
|
|
80
69
|
/**
|
|
81
70
|
* Get the value of a key in an object. The key may contain Lodash-style path
|
|
82
71
|
* syntax, e.g., `a.b.c` (with the exception of array syntax). If the key does
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getState.d.mts","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"getState.d.mts","sourceRoot":"","sources":["../../src/permitted/getState.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,EAAE,cAAc,EAAE,cAAc,EAAE,4BAA4B;AAC1E,OAAO,EAAE,KAAK,aAAa,EAAE,8BAA8B;AAQ3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,wBAAwB;AAIpE,OAAO,KAAK,EACV,wBAAwB,EACxB,gCAAgC,EACjC,qBAAiB;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAOlD,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,uBAAuB,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,uCAAuC,GACvC,gCAAgC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,eAAe;;;;CAa3B,CAAC;AAEF,QAAA,MAAM,wBAAwB;;;;;;EAG5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAC5C,OAAO,wBAAwB,EAC/B,cAAc,CACf,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,sBAAsB,CACnC,OAAO,EAAE,wBAAwB,CAAC,kBAAkB,CAAC,EAMrD,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,EAChD,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,gBAAgB,EAAE,EAAE,mBAAmB,EACzC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAuBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,EAClC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GACvB,IAAI,CA+BN"}
|
|
@@ -3,10 +3,7 @@ import { boolean, create, object, optional, StructError } from "@metamask/supers
|
|
|
3
3
|
import { hasProperty, isObject } from "@metamask/utils";
|
|
4
4
|
import { manageStateBuilder } from "../restricted/manageState.mjs";
|
|
5
5
|
import { FORBIDDEN_KEYS, StateKeyStruct } from "../utils.mjs";
|
|
6
|
-
const methodName = 'snap_getState';
|
|
7
6
|
const hookNames = {
|
|
8
|
-
hasPermission: true,
|
|
9
|
-
getSnapState: true,
|
|
10
7
|
getUnlockPromise: true,
|
|
11
8
|
};
|
|
12
9
|
/**
|
|
@@ -34,9 +31,12 @@ const hookNames = {
|
|
|
34
31
|
* ```
|
|
35
32
|
*/
|
|
36
33
|
export const getStateHandler = {
|
|
37
|
-
methodNames: [methodName],
|
|
38
34
|
implementation: getStateImplementation,
|
|
39
35
|
hookNames,
|
|
36
|
+
actionNames: [
|
|
37
|
+
'PermissionController:hasPermission',
|
|
38
|
+
'SnapController:getSnapState',
|
|
39
|
+
],
|
|
40
40
|
};
|
|
41
41
|
const GetStateParametersStruct = object({
|
|
42
42
|
key: optional(StateKeyStruct),
|
|
@@ -51,10 +51,8 @@ const GetStateParametersStruct = object({
|
|
|
51
51
|
* function.
|
|
52
52
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
53
53
|
* @param hooks - The RPC method hooks.
|
|
54
|
-
* @param hooks.hasPermission - Check whether a given origin has a given
|
|
55
|
-
* permission.
|
|
56
|
-
* @param hooks.getSnapState - Get the state of the requesting Snap.
|
|
57
54
|
* @param hooks.getUnlockPromise - Wait for the extension to be unlocked.
|
|
55
|
+
* @param messenger - The messenger used to call controller actions.
|
|
58
56
|
* @returns Nothing.
|
|
59
57
|
*/
|
|
60
58
|
async function getStateImplementation(request,
|
|
@@ -63,9 +61,9 @@ async function getStateImplementation(request,
|
|
|
63
61
|
// We use `GetStateResult` here to make it clear that this is the expected
|
|
64
62
|
// type of the result.
|
|
65
63
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments
|
|
66
|
-
response, _next, end, {
|
|
67
|
-
const { params } = request;
|
|
68
|
-
if (!hasPermission
|
|
64
|
+
response, _next, end, { getUnlockPromise }, messenger) {
|
|
65
|
+
const { params, origin } = request;
|
|
66
|
+
if (!messenger.call('PermissionController:hasPermission', origin, manageStateBuilder.targetName)) {
|
|
69
67
|
return end(providerErrors.unauthorized());
|
|
70
68
|
}
|
|
71
69
|
try {
|
|
@@ -74,7 +72,7 @@ response, _next, end, { hasPermission, getSnapState, getUnlockPromise }) {
|
|
|
74
72
|
if (encrypted) {
|
|
75
73
|
await getUnlockPromise(true);
|
|
76
74
|
}
|
|
77
|
-
const state = await getSnapState
|
|
75
|
+
const state = await messenger.call('SnapController:getSnapState', origin, encrypted);
|
|
78
76
|
response.result = get(state, key);
|
|
79
77
|
}
|
|
80
78
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getState.mjs","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getState.mjs","sourceRoot":"","sources":["../../src/permitted/getState.ts"],"names":[],"mappings":"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","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 { GetStateParams, GetStateResult } from '@metamask/snaps-sdk';\nimport { type InferMatching } from '@metamask/snaps-utils';\nimport {\n boolean,\n create,\n object,\n optional,\n StructError,\n} from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse, Json } from '@metamask/utils';\nimport { hasProperty, isObject } from '@metamask/utils';\n\nimport { manageStateBuilder } from '../restricted/manageState';\nimport type {\n JsonRpcRequestWithOrigin,\n SnapControllerGetSnapStateAction,\n} from '../types';\nimport type { MethodHooksObject } from '../utils';\nimport { FORBIDDEN_KEYS, StateKeyStruct } from '../utils';\n\nconst hookNames: MethodHooksObject<GetStateMethodHooks> = {\n getUnlockPromise: true,\n};\n\nexport type GetStateMethodHooks = {\n /**\n * Wait for the extension to be unlocked.\n *\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n};\n\nexport type GetStateMethodActions =\n | PermissionControllerHasPermissionAction\n | SnapControllerGetSnapStateAction;\n\n/**\n * Get the state of the Snap, or a specific value within the state. By default,\n * the data is automatically encrypted using a Snap-specific key and\n * automatically decrypted when retrieved. You can set `encrypted` to `false` to\n * use unencrypted storage (available when the client is locked).\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"snap_manageState\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * const state = await snap.request({\n * method: 'snap_getState',\n * params: {\n * key: 'some.nested.value', // Optional, defaults to entire state\n * encrypted: true, // Optional, defaults to `true`\n * },\n * });\n * ```\n */\nexport const getStateHandler = {\n implementation: getStateImplementation,\n hookNames,\n actionNames: [\n 'PermissionController:hasPermission',\n 'SnapController:getSnapState',\n ],\n} satisfies MethodHandler<\n GetStateMethodHooks,\n GetStateMethodActions,\n GetStateParameters,\n GetStateResult,\n { origin: string }\n>;\n\nconst GetStateParametersStruct = object({\n key: optional(StateKeyStruct),\n encrypted: optional(boolean()),\n});\n\nexport type GetStateParameters = InferMatching<\n typeof GetStateParametersStruct,\n GetStateParams\n>;\n\n/**\n * The `snap_getState` method implementation.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.getUnlockPromise - Wait for the extension to be unlocked.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function getStateImplementation(\n request: JsonRpcRequestWithOrigin<GetStateParameters>,\n // `GetStateResult` is an alias for `Json` (which is the default type argument\n // for `PendingJsonRpcResponse`), but that may not be the case in the future.\n // We use `GetStateResult` here to make it clear that this is the expected\n // type of the result.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-arguments\n response: PendingJsonRpcResponse<GetStateResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { getUnlockPromise }: GetStateMethodHooks,\n messenger: Messenger<string, GetStateMethodActions>,\n): Promise<void> {\n const { params, origin } = request;\n\n if (\n !messenger.call(\n 'PermissionController:hasPermission',\n origin,\n manageStateBuilder.targetName,\n )\n ) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n const { key, encrypted = true } = validatedParams;\n\n if (encrypted) {\n await getUnlockPromise(true);\n }\n\n const state = await messenger.call(\n 'SnapController:getSnapState',\n origin,\n encrypted,\n );\n response.result = get(state, key);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters of the `snap_getState` method.\n *\n * @param params - The parameters to validate.\n * @returns The validated parameters.\n */\nfunction getValidatedParams(params?: unknown) {\n try {\n return create(params, GetStateParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n\n/**\n * Get the value of a key in an object. The key may contain Lodash-style path\n * syntax, e.g., `a.b.c` (with the exception of array syntax). If the key does\n * not exist, `null` is returned.\n *\n * This is a simplified version of Lodash's `get` function, but Lodash doesn't\n * seem to be maintained anymore, so we're using our own implementation.\n *\n * @param value - The object to get the key from.\n * @param key - The key to get.\n * @returns The value of the key in the object, or `null` if the key does not\n * exist.\n */\nexport function get(\n value: Record<string, Json> | null,\n key?: string | undefined,\n): Json {\n if (key === undefined) {\n return value;\n }\n\n const keys = key.split('.');\n let result: Json = value;\n\n // Intentionally using a classic for loop here for performance reasons.\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < keys.length; i++) {\n const currentKey = keys[i];\n if (FORBIDDEN_KEYS.includes(currentKey)) {\n throw rpcErrors.invalidParams(\n 'Invalid params: Key contains forbidden characters.',\n );\n }\n\n if (isObject(result)) {\n if (!hasProperty(result, currentKey)) {\n return null;\n }\n\n result = result[currentKey];\n continue;\n }\n\n return null;\n }\n\n return result;\n}\n"]}
|
|
@@ -3,11 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getWebSocketsHandler = void 0;
|
|
4
4
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
5
5
|
const endowments_1 = require("../endowments/index.cjs");
|
|
6
|
-
const methodName = 'snap_getWebSockets';
|
|
7
|
-
const hookNames = {
|
|
8
|
-
hasPermission: true,
|
|
9
|
-
getWebSockets: true,
|
|
10
|
-
};
|
|
11
6
|
/**
|
|
12
7
|
* Get the connected WebSockets for the Snap.
|
|
13
8
|
*
|
|
@@ -38,28 +33,30 @@ const hookNames = {
|
|
|
38
33
|
* ```
|
|
39
34
|
*/
|
|
40
35
|
exports.getWebSocketsHandler = {
|
|
41
|
-
methodNames: [methodName],
|
|
42
36
|
implementation: getWebSocketsImplementation,
|
|
43
|
-
|
|
37
|
+
actionNames: [
|
|
38
|
+
'PermissionController:hasPermission',
|
|
39
|
+
'WebSocketService:getAll',
|
|
40
|
+
],
|
|
44
41
|
};
|
|
45
42
|
/**
|
|
46
43
|
* The `snap_getWebSockets` method implementation.
|
|
47
44
|
*
|
|
48
|
-
* @param
|
|
45
|
+
* @param req - The JSON-RPC request object.
|
|
49
46
|
* @param res - The JSON-RPC response object.
|
|
50
47
|
* @param _next - The `json-rpc-engine` "next" callback. Not used by this function.
|
|
51
48
|
* @param end - The `json-rpc-engine` "end" callback.
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
* @param hooks.getWebSockets - The function to get the connected WebSockets for the origin.
|
|
49
|
+
* @param _hooks - The RPC method hooks. Not used by this function.
|
|
50
|
+
* @param messenger - The messenger used to call controller actions.
|
|
55
51
|
* @returns Nothing.
|
|
56
52
|
*/
|
|
57
|
-
function getWebSocketsImplementation(
|
|
58
|
-
|
|
53
|
+
function getWebSocketsImplementation(req, res, _next, end, _hooks, messenger) {
|
|
54
|
+
const { origin } = req;
|
|
55
|
+
if (!messenger.call('PermissionController:hasPermission', origin, endowments_1.SnapEndowments.NetworkAccess)) {
|
|
59
56
|
return end(rpc_errors_1.providerErrors.unauthorized());
|
|
60
57
|
}
|
|
61
58
|
try {
|
|
62
|
-
res.result =
|
|
59
|
+
res.result = messenger.call('WebSocketService:getAll', origin);
|
|
63
60
|
}
|
|
64
61
|
catch (error) {
|
|
65
62
|
return end(error);
|