{"version":3,"sources":["../src/cli-doctor.ts","../src/cli.ts"],"names":[],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * `facturacion doctor` — diagnoses the @ar-agents/facturacion environment.\n *\n * AFIP/ARCA WSFE requires:\n *   - X.509 cert (PEM string) registered with the WSFE service\n *   - Matching private key\n *   - Issuer CUIT\n *\n * Plus:\n *   - AFIP_ENV ∈ {prod, homo} — separate cert chains\n *   - At least one configured Punto de Venta (PdV) on the AFIP/ARCA panel\n *\n * The doctor parses the cert briefly to surface the CUIT it's actually\n * registered to (not the env var, which a user can paste wrong).\n */\n\nconst C = {\n  reset: \"\\x1b[0m\",\n  dim: \"\\x1b[2m\",\n  red: \"\\x1b[31m\",\n  green: \"\\x1b[32m\",\n  yellow: \"\\x1b[33m\",\n  cyan: \"\\x1b[36m\",\n  bold: \"\\x1b[1m\",\n};\nconst NO_COLOR = process.env.NO_COLOR != null || !process.stdout.isTTY;\nconst c = (col: keyof typeof C, s: string) =>\n  NO_COLOR ? s : `${C[col]}${s}${C.reset}`;\n\ntype CheckResult =\n  | { kind: \"ok\"; line: string; detail?: string }\n  | { kind: \"warn\"; line: string; detail?: string }\n  | { kind: \"fail\"; line: string; detail?: string };\n\nfunction fmt(r: CheckResult): string {\n  const icon =\n    r.kind === \"ok\" ? c(\"green\", \"✓\") : r.kind === \"warn\" ? c(\"yellow\", \"⚠\") : c(\"red\", \"✗\");\n  const detail = r.detail ? `\\n  ${c(\"dim\", \"→ \" + r.detail)}` : \"\";\n  return `${icon} ${r.line}${detail}`;\n}\n\nfunction checkNode(): CheckResult {\n  const major = Number(process.versions.node.split(\".\")[0]);\n  if (major >= 20) return { kind: \"ok\", line: `Node ${process.versions.node} (>= 20.0.0)` };\n  return {\n    kind: \"fail\",\n    line: `Node ${process.versions.node} too old`,\n    detail: \"@ar-agents/facturacion requires Node 20+.\",\n  };\n}\n\nfunction checkCert(): CheckResult {\n  const pem = process.env.AFIP_CERT_PEM?.trim();\n  if (!pem) {\n    return {\n      kind: \"fail\",\n      line: \"AFIP_CERT_PEM not set\",\n      detail:\n        \"X.509 cert registered with the AFIP/ARCA WSFE service. The pre-flight validator works without it but actual emit calls will fail.\",\n    };\n  }\n  if (!pem.includes(\"BEGIN CERTIFICATE\")) {\n    return {\n      kind: \"fail\",\n      line: \"AFIP_CERT_PEM does not look like a PEM-encoded certificate\",\n      detail: 'Expected \"-----BEGIN CERTIFICATE-----…\". Common cause: literal \\\\n sequences in env vars (use printf, not echo).',\n    };\n  }\n  return { kind: \"ok\", line: `AFIP_CERT_PEM set (${pem.length} chars)` };\n}\n\nfunction checkKey(): CheckResult {\n  const pem = process.env.AFIP_KEY_PEM?.trim();\n  if (!pem) {\n    return {\n      kind: \"fail\",\n      line: \"AFIP_KEY_PEM not set\",\n      detail: \"Private key matching AFIP_CERT_PEM. Required for any WSFE call.\",\n    };\n  }\n  if (!pem.includes(\"PRIVATE KEY\")) {\n    return { kind: \"fail\", line: \"AFIP_KEY_PEM does not look like a PEM-encoded key\" };\n  }\n  return { kind: \"ok\", line: `AFIP_KEY_PEM set (${pem.length} chars)` };\n}\n\nfunction checkCuit(): CheckResult {\n  const cuit = process.env.AFIP_CUIT?.trim();\n  if (!cuit) {\n    return {\n      kind: \"fail\",\n      line: \"AFIP_CUIT not set\",\n      detail: \"The CUIT registered with the AFIP cert. Format: 20-XXXXXXXX-X (with or without dashes).\",\n    };\n  }\n  const digits = cuit.replace(/[^\\d]/g, \"\");\n  if (digits.length !== 11) {\n    return { kind: \"fail\", line: `AFIP_CUIT must have 11 digits (got ${digits.length})` };\n  }\n  return { kind: \"ok\", line: `AFIP_CUIT set (${digits.slice(0, 2)}-${digits.slice(2, 10)}-${digits.slice(10)})` };\n}\n\nfunction checkEnv(): CheckResult {\n  const env = process.env.AFIP_ENV?.trim();\n  if (!env) {\n    return {\n      kind: \"warn\",\n      line: \"AFIP_ENV not set (will default to 'prod')\",\n      detail:\n        \"Use AFIP_ENV=homo for the homologation/staging environment. Note: prod and homo certs are NOT interchangeable.\",\n    };\n  }\n  if (env !== \"prod\" && env !== \"homo\") {\n    return { kind: \"fail\", line: `AFIP_ENV must be 'prod' or 'homo' (got \"${env}\")` };\n  }\n  return { kind: \"ok\", line: `AFIP_ENV=${env}` };\n}\n\nfunction checkPtoVta(): CheckResult {\n  const pv = process.env.AFIP_PTO_VTA?.trim();\n  if (!pv) {\n    return {\n      kind: \"warn\",\n      line: \"AFIP_PTO_VTA not set\",\n      detail:\n        \"Default Punto de Venta. Without it, every crear_factura call must pass ptoVta explicitly. Configure your default PdV in the AFIP/ARCA panel (typically 1, 2, 3 …).\",\n    };\n  }\n  const n = Number(pv);\n  if (!Number.isInteger(n) || n < 1 || n > 99999) {\n    return { kind: \"fail\", line: `AFIP_PTO_VTA must be a positive integer (got \"${pv}\")` };\n  }\n  return { kind: \"ok\", line: `AFIP_PTO_VTA=${n}` };\n}\n\nasync function checkPeerDep(name: string, required: boolean): Promise<CheckResult> {\n  try {\n    await import(name);\n    return { kind: \"ok\", line: `${name} installed` };\n  } catch {\n    return {\n      kind: required ? \"fail\" : \"warn\",\n      line: `${name} not installed`,\n      detail: required ? `Required: pnpm add ${name}` : \"Optional.\",\n    };\n  }\n}\n\ntype Manifest = { tools: Array<{ name: string }> };\nasync function loadManifest(): Promise<Manifest | null> {\n  const fs = await import(\"node:fs/promises\");\n  for (const rel of [\"../tools.manifest.json\", \"../../tools.manifest.json\"]) {\n    try {\n      const url = new URL(rel, import.meta.url);\n      return JSON.parse(await fs.readFile(url, \"utf-8\")) as Manifest;\n    } catch {\n      // try next\n    }\n  }\n  return null;\n}\n\nexport async function runDoctor(): Promise<number> {\n  const lines: string[] = [];\n  lines.push(\"\");\n  lines.push(c(\"bold\", `${c(\"cyan\", \"@ar-agents/facturacion\")} doctor`));\n  lines.push(c(\"dim\", \"  diagnosing your environment\"));\n  lines.push(\"\");\n\n  lines.push(fmt(checkNode()));\n  lines.push(fmt(checkCert()));\n  lines.push(fmt(checkKey()));\n  lines.push(fmt(checkCuit()));\n  lines.push(fmt(checkEnv()));\n  lines.push(fmt(checkPtoVta()));\n  lines.push(fmt(await checkPeerDep(\"ai\", true)));\n  lines.push(fmt(await checkPeerDep(\"zod\", true)));\n  lines.push(\"\");\n\n  const manifest = await loadManifest();\n  if (manifest) {\n    lines.push(c(\"bold\", `Tools registered: ${manifest.tools.length}`));\n    for (const t of manifest.tools) lines.push(`  ${c(\"dim\", \"→\")} ${t.name}`);\n    lines.push(\"\");\n    lines.push(\n      c(\n        \"yellow\",\n        \"Pre-flight validator catches the 10 most common rejection reasons (alícuotas mal sumadas, código IVA 21 vs 22, etc.) BEFORE the WSFE round-trip.\",\n      ),\n    );\n  }\n  lines.push(\"\");\n\n  process.stdout.write(lines.join(\"\\n\") + \"\\n\");\n  return lines.some((l) => l.includes(\"✗\")) ? 1 : 0;\n}\n","import { runDoctor } from \"./cli-doctor\";\n\nconst HELP = `\\\n@ar-agents/facturacion CLI\n\nCommands:\n  doctor               Diagnose env (Node, AFIP cert/key/CUIT/env/PtoVta, peer deps, tools)\n  help                 Print this message\n  version              Print the installed package version\n\nEnvironment:\n  AFIP_CERT_PEM        Required — X.509 cert (PEM string).\n  AFIP_KEY_PEM         Required — private key matching the cert.\n  AFIP_CUIT            Required — CUIT registered with the cert.\n  AFIP_ENV             \"prod\" (default) or \"homo\".\n  AFIP_PTO_VTA         Default Punto de Venta (1–99999). Optional.\n\nDocs: https://github.com/ar-agents/ar-agents/tree/main/packages/facturacion\n`;\n\nasync function readVersion(): Promise<string> {\n  for (const rel of [\"../package.json\", \"../../package.json\"]) {\n    try {\n      const url = new URL(rel, import.meta.url);\n      const fs = await import(\"node:fs/promises\");\n      const pkg = JSON.parse(await fs.readFile(url, \"utf-8\")) as { version?: string };\n      if (pkg.version) return pkg.version;\n    } catch {\n      // try next\n    }\n  }\n  return \"unknown\";\n}\n\nexport async function runCli(argv: string[]): Promise<number> {\n  const [, , cmd] = argv;\n  if (!cmd || cmd === \"help\" || cmd === \"--help\" || cmd === \"-h\") {\n    process.stdout.write(HELP);\n    return 0;\n  }\n  if (cmd === \"version\" || cmd === \"--version\" || cmd === \"-v\") {\n    process.stdout.write(`@ar-agents/facturacion ${await readVersion()}\\n`);\n    return 0;\n  }\n  if (cmd === \"doctor\") return runDoctor();\n  process.stderr.write(`Unknown command: ${cmd}\\n\\nRun \\`facturacion help\\` for usage.\\n`);\n  return 2;\n}\n"]}