{"version":3,"file":"getWebSockets.mjs","sourceRoot":"","sources":["../../src/permitted/getWebSockets.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,6BAA6B;AAOtD,OAAO,EAAE,cAAc,EAAE,gCAAsB;AAU/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,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,cAAc,CAAC,aAAa,CAC7B,EACD,CAAC;QACD,OAAO,GAAG,CAAC,cAAc,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"]}