{"version":3,"file":"getFile.mjs","sourceRoot":"","sources":["../../src/permitted/getFile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAEjD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,4BAA4B;AAEvE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,8BAA8B;AAExE,OAAO,EAAE,YAAY,EAAE,wBAAwB;AAO/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE;IACd,QAAQ,EAAE,QAAQ,CAChB,KAAK,CAAC;QACJ,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC;QACvC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC;QACpC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC;KACtC,CAAC,CACH;CACF,CAAC,CAAC;AASH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc;IACd,WAAW,EAAE,CAAC,4BAA4B,CAAC;CAO5C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,cAAc,CAC3B,GAAoD,EACpD,GAA0C,EAC1C,KAAc,EACd,GAA6B,EAC7B,MAAa,EACb,SAAkD;IAElD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE/B,YAAY,CACV,MAAM,EACN,iBAAiB,EACjB,mCAAmC,EACnC,SAAS,CAAC,aAAa,CACxB,CAAC;IAEF,IAAI,CAAC;QACH,GAAG,CAAC,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAC/B,4BAA4B,EAC5B,MAAM,EACN,MAAM,CAAC,IAAI,EACV,MAAM,CAAC,QAAkC;YACxC,qBAAqB,CAAC,MAAM,CAC/B,CAAC;IACJ,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 { rpcErrors } from '@metamask/rpc-errors';\nimport type { GetFileParams, GetFileResult } from '@metamask/snaps-sdk';\nimport { AuxiliaryFileEncoding, enumValue } from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport { object, optional, string, union } from '@metamask/superstruct';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\nimport { assertStruct } from '@metamask/utils';\n\nimport type {\n  JsonRpcRequestWithOrigin,\n  SnapControllerGetSnapFileAction,\n} from '../types';\n\nexport const GetFileArgsStruct = object({\n  path: string(),\n  encoding: optional(\n    union([\n      enumValue(AuxiliaryFileEncoding.Base64),\n      enumValue(AuxiliaryFileEncoding.Hex),\n      enumValue(AuxiliaryFileEncoding.Utf8),\n    ]),\n  ),\n});\n\nexport type InferredGetFileParams = InferMatching<\n  typeof GetFileArgsStruct,\n  GetFileParams\n>;\n\nexport type GetFileMethodActions = SnapControllerGetSnapFileAction;\n\n/**\n * Gets a static file's content in UTF-8, Base64, or hexadecimal.\n *\n * The file must be specified in [the Snap's manifest file](https://docs.metamask.io/snaps/features/static-files/).\n *\n * @example\n * ```json name=\"Manifest\"\n * {\n *   \"source\": {\n *     \"files\": [\"./files/my-file.bin\"]\n *   }\n * }\n * ```\n * ```ts name=\"Usage\"\n * const contents = await snap.request({\n *   method: 'snap_getFile',\n *   params: {\n *     path: './files/myfile.bin',\n *     encoding: 'hex',\n *   },\n * })\n *\n * // '0x...'\n * console.log(contents)\n * ```\n */\nexport const getFileHandler = {\n  implementation,\n  actionNames: ['SnapController:getSnapFile'],\n} satisfies MethodHandler<\n  never,\n  GetFileMethodActions,\n  InferredGetFileParams,\n  GetFileResult,\n  { origin: string }\n>;\n\n/**\n * The `snap_getFile` 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 implementation(\n  req: JsonRpcRequestWithOrigin<InferredGetFileParams>,\n  res: PendingJsonRpcResponse<GetFileResult>,\n  _next: unknown,\n  end: JsonRpcEngineEndCallback,\n  _hooks: never,\n  messenger: Messenger<string, GetFileMethodActions>,\n): Promise<void> {\n  const { params, origin } = req;\n\n  assertStruct(\n    params,\n    GetFileArgsStruct,\n    'Invalid \"snap_getFile\" parameters',\n    rpcErrors.invalidParams,\n  );\n\n  try {\n    res.result = await messenger.call(\n      'SnapController:getSnapFile',\n      origin,\n      params.path,\n      (params.encoding as AuxiliaryFileEncoding) ??\n        AuxiliaryFileEncoding.Base64,\n    );\n  } catch (error) {\n    return end(error);\n  }\n\n  return end();\n}\n"]}