{"version":3,"sources":["../src/cli/commands/graphs/create.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { formatFetchError } from \"../../utils/formatFetchError\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { buildAuthHeaders } from \"@/internal/api/auth\";\n\nimport { resolveControlPlaneUrl } from \"@/cli/utils/governance/resolveEndpoint\";\nexport const createGraphCommand = async (\n  name: string,\n  options: {\n    dashboardId?: string;\n    graph?: string;\n    filters?: string;\n    colSpan?: string;\n    rowSpan?: string;\n    format?: string;\n  },\n): Promise<void> => {\n  checkApiKey();\n\n  const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n  const endpoint = resolveControlPlaneUrl();\n\n  const spinner = ora(`Creating graph \"${name}\"...`).start();\n\n  try {\n    let graphDef: Record<string, unknown> = {};\n    if (options.graph) {\n      graphDef = JSON.parse(options.graph) as Record<string, unknown>;\n    }\n\n    const response = await fetch(`${endpoint}/api/graphs`, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        ...buildAuthHeaders({ apiKey }),\n      },\n      body: JSON.stringify({\n        name,\n        graph: graphDef,\n        dashboardId: options.dashboardId,\n        ...(options.filters && { filters: JSON.parse(options.filters) }),\n        ...(options.colSpan && { colSpan: parseInt(options.colSpan, 10) }),\n        ...(options.rowSpan && { rowSpan: parseInt(options.rowSpan, 10) }),\n      }),\n    });\n\n    if (!response.ok) {\n      const message = await formatFetchError(response);\n      spinner.fail(`Failed to create graph: ${message}`);\n      process.exit(1);\n    }\n\n    const graph = await response.json() as { id: string; name: string; dashboardId: string | null };\n    spinner.succeed(`Graph \"${graph.name}\" created (${graph.id})`);\n\n    if (options.format === \"json\") {\n      console.log(JSON.stringify(graph, null, 2));\n      return;\n    }\n\n    console.log();\n    console.log(`  ${chalk.gray(\"ID:\")}        ${chalk.green(graph.id)}`);\n    console.log(`  ${chalk.gray(\"Dashboard:\")} ${graph.dashboardId ?? chalk.gray(\"—\")}`);\n    console.log();\n  } catch (error) {\n    if (error instanceof SyntaxError) {\n      spinner.fail(chalk.red(\"--graph must be valid JSON\"));\n    } else {\n      failSpinner({ spinner, error, action: \"create graph\" });\n    }\n    process.exit(1);\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,SAAS;AAOT,IAAM,qBAAqB,OAChC,MACA,YAQkB;AAlBpB;AAmBE,cAAY;AAEZ,QAAM,UAAS,aAAQ,IAAI,sBAAZ,YAAiC;AAChD,QAAM,WAAW,uBAAuB;AAExC,QAAM,UAAU,IAAI,mBAAmB,IAAI,MAAM,EAAE,MAAM;AAEzD,MAAI;AACF,QAAI,WAAoC,CAAC;AACzC,QAAI,QAAQ,OAAO;AACjB,iBAAW,KAAK,MAAM,QAAQ,KAAK;AAAA,IACrC;AAEA,UAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,eAAe;AAAA,MACrD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,SACb,iBAAiB,EAAE,OAAO,CAAC;AAAA,MAEhC,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,OAAO;AAAA,QACP,aAAa,QAAQ;AAAA,SACjB,QAAQ,WAAW,EAAE,SAAS,KAAK,MAAM,QAAQ,OAAO,EAAE,IAC1D,QAAQ,WAAW,EAAE,SAAS,SAAS,QAAQ,SAAS,EAAE,EAAE,IAC5D,QAAQ,WAAW,EAAE,SAAS,SAAS,QAAQ,SAAS,EAAE,EAAE,EACjE;AAAA,IACH,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,UAAU,MAAM,iBAAiB,QAAQ;AAC/C,cAAQ,KAAK,2BAA2B,OAAO,EAAE;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,YAAQ,QAAQ,UAAU,MAAM,IAAI,cAAc,MAAM,EAAE,GAAG;AAE7D,QAAI,QAAQ,WAAW,QAAQ;AAC7B,cAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC1C;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC,WAAW,MAAM,MAAM,MAAM,EAAE,CAAC,EAAE;AACpE,YAAQ,IAAI,KAAK,MAAM,KAAK,YAAY,CAAC,KAAI,WAAM,gBAAN,YAAqB,MAAM,KAAK,QAAG,CAAC,EAAE;AACnF,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,QAAI,iBAAiB,aAAa;AAChC,cAAQ,KAAK,MAAM,IAAI,4BAA4B,CAAC;AAAA,IACtD,OAAO;AACL,kBAAY,EAAE,SAAS,OAAO,QAAQ,eAAe,CAAC;AAAA,IACxD;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}