{"version":3,"sources":["../../src/createRpcHttpServer.ts","../../src/createRpcRequestHandler.ts"],"sourcesContent":["import HTTP from 'node:http'\n\nimport { type JsonRpcEngineV2, JsonRpcServer } from '@metamask/json-rpc-engine/v2'\n\n/** Result returned by createRpcHttpServer. */\nexport interface RpcHttpServer {\n  close: () => Promise<void>\n  port: number\n  server: HTTP.Server\n}\n\n/** Creates a standalone Node.js HTTP server that handles JSON-RPC requests at POST /rpc. */\nexport function createRpcHttpServer(options: { engine: JsonRpcEngineV2; port: number }): Promise<RpcHttpServer> {\n  const { engine, port } = options\n  const rpcServer = new JsonRpcServer({ engine })\n\n  return new Promise((resolve, reject) => {\n    const server = HTTP.createServer((req, res) => {\n      res.setHeader('Access-Control-Allow-Origin', '*')\n      res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS')\n      res.setHeader('Access-Control-Allow-Headers', 'Content-Type')\n\n      if (req.method === 'OPTIONS') {\n        res.writeHead(204)\n        res.end()\n        return\n      }\n\n      if (req.method !== 'POST' || req.url !== '/rpc') {\n        res.writeHead(404, { 'Content-Type': 'application/json' })\n        res.end(JSON.stringify({ error: 'Not found' }))\n        return\n      }\n\n      let body = ''\n      req.on('data', (chunk: Buffer) => {\n        body += chunk.toString()\n      })\n\n      req.on('end', () => {\n        const parsed = JSON.parse(body)\n        rpcServer.handle(parsed)\n          .then((response) => {\n            res.writeHead(200, { 'Content-Type': 'application/json' })\n            res.end(JSON.stringify(response))\n          })\n          .catch((error: unknown) => {\n            res.writeHead(500, { 'Content-Type': 'application/json' })\n            res.end(JSON.stringify({ error: (error as Error).message }))\n          })\n      })\n    })\n\n    server.on('error', reject)\n\n    server.listen(port, () => {\n      resolve({\n        server,\n        port,\n        close: () => new Promise<void>((resolveClose, rejectClose) => {\n          server.close((err) => {\n            if (err) {\n              rejectClose(err)\n            } else {\n              resolveClose()\n            }\n          })\n        }),\n      })\n    })\n  })\n}\n","import type { JsonRpcEngineV2, JsonRpcRequest } from '@metamask/json-rpc-engine/v2'\n\n/** Creates a framework-agnostic RPC request handler from a JSON-RPC engine. */\nexport function createRpcRequestHandler(engine: JsonRpcEngineV2): (body: unknown) => Promise<unknown> {\n  return async (body: unknown) => {\n    const request = body as JsonRpcRequest\n    try {\n      const result = await engine.handle(request)\n      return {\n        jsonrpc: '2.0', id: request.id, result,\n      }\n    } catch (error) {\n      return {\n        jsonrpc: '2.0',\n        id: request.id,\n        error: { code: -32_603, message: (error as Error).message },\n      }\n    }\n  }\n}\n"],"mappings":";AAAA,OAAO,UAAU;AAEjB,SAA+B,qBAAqB;AAU7C,SAAS,oBAAoB,SAA4E;AAC9G,QAAM,EAAE,QAAQ,KAAK,IAAI;AACzB,QAAM,YAAY,IAAI,cAAc,EAAE,OAAO,CAAC;AAE9C,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,KAAK,aAAa,CAAC,KAAK,QAAQ;AAC7C,UAAI,UAAU,+BAA+B,GAAG;AAChD,UAAI,UAAU,gCAAgC,eAAe;AAC7D,UAAI,UAAU,gCAAgC,cAAc;AAE5D,UAAI,IAAI,WAAW,WAAW;AAC5B,YAAI,UAAU,GAAG;AACjB,YAAI,IAAI;AACR;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,UAAU,IAAI,QAAQ,QAAQ;AAC/C,YAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,YAAI,IAAI,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,CAAC;AAC9C;AAAA,MACF;AAEA,UAAI,OAAO;AACX,UAAI,GAAG,QAAQ,CAAC,UAAkB;AAChC,gBAAQ,MAAM,SAAS;AAAA,MACzB,CAAC;AAED,UAAI,GAAG,OAAO,MAAM;AAClB,cAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,kBAAU,OAAO,MAAM,EACpB,KAAK,CAAC,aAAa;AAClB,cAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,cAAI,IAAI,KAAK,UAAU,QAAQ,CAAC;AAAA,QAClC,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,cAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,cAAI,IAAI,KAAK,UAAU,EAAE,OAAQ,MAAgB,QAAQ,CAAC,CAAC;AAAA,QAC7D,CAAC;AAAA,MACL,CAAC;AAAA,IACH,CAAC;AAED,WAAO,GAAG,SAAS,MAAM;AAEzB,WAAO,OAAO,MAAM,MAAM;AACxB,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA,OAAO,MAAM,IAAI,QAAc,CAAC,cAAc,gBAAgB;AAC5D,iBAAO,MAAM,CAAC,QAAQ;AACpB,gBAAI,KAAK;AACP,0BAAY,GAAG;AAAA,YACjB,OAAO;AACL,2BAAa;AAAA,YACf;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;ACpEO,SAAS,wBAAwB,QAA8D;AACpG,SAAO,OAAO,SAAkB;AAC9B,UAAM,UAAU;AAChB,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,OAAO,OAAO;AAC1C,aAAO;AAAA,QACL,SAAS;AAAA,QAAO,IAAI,QAAQ;AAAA,QAAI;AAAA,MAClC;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT,IAAI,QAAQ;AAAA,QACZ,OAAO,EAAE,MAAM,QAAS,SAAU,MAAgB,QAAQ;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AACF;","names":[]}