@metamask/snaps-rpc-methods
Version:
MetaMask Snaps JSON-RPC method implementations
1 lines • 3.68 kB
Source Map (JSON)
{"version":3,"file":"getWebSockets.cjs","sourceRoot":"","sources":["../../src/permitted/getWebSockets.ts"],"names":[],"mappings":";;;AAMA,qDAAsD;AAOtD,wDAA+C;AAU/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACU,QAAA,oBAAoB,GAAG;IAClC,cAAc,EAAE,2BAA2B;IAC3C,WAAW,EAAE;QACX,oCAAoC;QACpC,yBAAyB;KAC1B;CAOF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,2BAA2B,CAClC,GAAkD,EAClD,GAAgD,EAChD,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAAwD;IAExD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,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,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,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 { PermissionControllerHasPermissionAction } from '@metamask/permission-controller';\nimport { providerErrors } from '@metamask/rpc-errors';\nimport type {\n GetWebSocketsParams,\n GetWebSocketsResult,\n} from '@metamask/snaps-sdk';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport type {\n JsonRpcRequestWithOrigin,\n WebSocketServiceGetAllAction,\n} from '../types';\n\nexport type GetWebSocketsMethodActions =\n | PermissionControllerHasPermissionAction\n | WebSocketServiceGetAllAction;\n\n/**\n * Get the connected WebSockets for the Snap.\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n * \"initialPermissions\": {\n * \"endowment:network-access\": {}\n * }\n * }\n * ```\n * ```ts name=\"Usage\"\n * const webSockets = await snap.request({ method: 'snap_getWebSockets' });\n * console.log(webSockets);\n * // Example output:\n * // [\n * // {\n * // id: 'websocket-1',\n * // url: 'wss://example.com/socket',\n * // protocols: ['protocol1', 'protocol2'],\n * // },\n * // {\n * // id: 'websocket-2',\n * // url: 'ws://example.org/endpoint',\n * // protocols: [],\n * // },\n * // ]\n * ```\n */\nexport const getWebSocketsHandler = {\n implementation: getWebSocketsImplementation,\n actionNames: [\n 'PermissionController:hasPermission',\n 'WebSocketService:getAll',\n ],\n} satisfies MethodHandler<\n never,\n GetWebSocketsMethodActions,\n GetWebSocketsParams,\n GetWebSocketsResult,\n { origin: string }\n>;\n\n/**\n * The `snap_getWebSockets` 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 */\nfunction getWebSocketsImplementation(\n req: JsonRpcRequestWithOrigin<GetWebSocketsParams>,\n res: PendingJsonRpcResponse<GetWebSocketsResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n _hooks: never,\n messenger: Messenger<string, GetWebSocketsMethodActions>,\n): void {\n const { 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 res.result = messenger.call('WebSocketService:getAll', origin);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n"]}