{"version":3,"file":"schema-cache-DwDvPy4e.mjs","names":[],"sources":["../src/mcp/schema-cache.ts"],"sourcesContent":["import { readFile, writeFile, mkdir } from 'node:fs/promises'\nimport path from 'node:path'\nimport os from 'node:os'\n\nconst TTL_MS = 24 * 60 * 60 * 1000 // 24 hours\n\nexport interface McpTool {\n  name: string\n  title?: string\n  description?: string\n  inputSchema?: Record<string, unknown>\n  outputSchema?: Record<string, unknown>\n  _meta?: Record<string, unknown>\n}\n\ninterface SchemaCache {\n  tools: McpTool[]\n  cachedAt: number\n  endpoint?: string\n}\n\n// Derived at call time so tests can override HOME via process.env['HOME']\nfunction schemaPath(): string {\n  return path.join(os.homedir(), '.chain-insights', 'mcp-schema.json')\n}\n\nexport async function loadSchema(endpoint?: string): Promise<McpTool[] | null> {\n  try {\n    const raw = await readFile(schemaPath(), 'utf8')\n    const cache = JSON.parse(raw) as SchemaCache // JSON parse errors propagate\n    if (Date.now() - cache.cachedAt > TTL_MS) return null // TTL expired\n    if (endpoint && cache.endpoint !== endpoint) return null\n    return cache.tools\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null\n    throw err // re-throw JSON parse or other errors\n  }\n}\n\nexport async function saveSchema(tools: McpTool[], endpoint?: string): Promise<void> {\n  const p = schemaPath()\n  await mkdir(path.dirname(p), { recursive: true })\n  const cache: SchemaCache = { tools, cachedAt: Date.now(), ...(endpoint ? { endpoint } : {}) }\n  await writeFile(p, JSON.stringify(cache, null, 2) + '\\n', { mode: 0o600 })\n}\n"],"mappings":";;;;AAIA,MAAM,SAAS,OAAU,KAAK;AAkB9B,SAAS,aAAqB;CAC5B,OAAO,KAAK,KAAK,GAAG,QAAQ,GAAG,mBAAmB,iBAAiB;AACrE;AAEA,eAAsB,WAAW,UAA8C;CAC7E,IAAI;EACF,MAAM,MAAM,MAAM,SAAS,WAAW,GAAG,MAAM;EAC/C,MAAM,QAAQ,KAAK,MAAM,GAAG;EAC5B,IAAI,KAAK,IAAI,IAAI,MAAM,WAAW,QAAQ,OAAO;EACjD,IAAI,YAAY,MAAM,aAAa,UAAU,OAAO;EACpD,OAAO,MAAM;CACf,SAAS,KAAK;EACZ,IAAK,IAA8B,SAAS,UAAU,OAAO;EAC7D,MAAM;CACR;AACF;AAEA,eAAsB,WAAW,OAAkB,UAAkC;CACnF,MAAM,IAAI,WAAW;CACrB,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC;CAChD,MAAM,QAAqB;EAAE;EAAO,UAAU,KAAK,IAAI;EAAG,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CAAG;CAC5F,MAAM,UAAU,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,IAAI,MAAM,EAAE,MAAM,IAAM,CAAC;AAC3E"}