{"version":3,"sources":["../src/cli/commands/status.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { checkApiKey } from \"../utils/apiKey\";\nimport {\n  createLangWatchApiClient,\n} from \"@/internal/api/client\";\nimport { buildAuthHeaders, isPersonalAccessToken } from \"@/internal/api/auth\";\nimport { formatApiErrorMessage } from \"@/client-sdk/services/_shared/format-api-error\";\nimport { resolveControlPlaneUrl } from \"@/cli/utils/governance/resolveEndpoint\";\n\nexport const statusCommand = async (options?: { format?: string }): Promise<void> => {\n  checkApiKey();\n\n  const apiClient = createLangWatchApiClient();\n  const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n  const endpoint = resolveControlPlaneUrl();\n  const spinner = ora(\"Fetching project status...\").start();\n\n  const results: Record<string, { count: number; error?: string; status?: number }> = {};\n\n  async function fetchCount(url: string): Promise<{ data: unknown; error?: unknown; status?: number }> {\n    const response = await fetch(`${endpoint}${url}`, {\n      headers: buildAuthHeaders({ apiKey }),\n    });\n    if (!response.ok) {\n      let body: unknown;\n      try {\n        body = await response.json();\n      } catch {\n        body = undefined;\n      }\n      return { data: null, error: body ?? response.statusText, status: response.status };\n    }\n    const data = await response.json();\n    return { data, error: undefined };\n  }\n\n  // Fetch counts for all major resources in parallel\n  const fetchers = [\n    { key: \"evaluators\", fn: () => apiClient.GET(\"/api/evaluators\") },\n    { key: \"scenarios\", fn: () => apiClient.GET(\"/api/scenarios\") },\n    { key: \"suites\", fn: () => fetchCount(\"/api/suites\") },\n    { key: \"datasets\", fn: () => apiClient.GET(\"/api/dataset\") },\n    { key: \"agents\", fn: () => apiClient.GET(\"/api/agents\") },\n    { key: \"workflows\", fn: () => apiClient.GET(\"/api/workflows\") },\n    { key: \"dashboards\", fn: () => apiClient.GET(\"/api/dashboards\") },\n    { key: \"triggers\", fn: () => fetchCount(\"/api/triggers\") },\n    { key: \"monitors\", fn: () => fetchCount(\"/api/monitors\") },\n    { key: \"secrets\", fn: () => fetchCount(\"/api/secrets\") },\n  ];\n\n  await Promise.allSettled(\n    fetchers.map(async ({ key, fn }) => {\n      try {\n        const result = await fn();\n        const { data, error } = result;\n        const status = (result as { status?: number; response?: { status?: number } }).status\n          ?? (result as { response?: { status?: number } }).response?.status;\n        if (error) {\n          results[key] = {\n            count: 0,\n            error: formatApiErrorMessage({ error, options: { status } }),\n            status,\n          };\n          return;\n        }\n        if (Array.isArray(data)) {\n          results[key] = { count: data.length };\n        } else if (data && typeof data === \"object\" && \"data\" in (data as Record<string, unknown>)) {\n          const arr = (data as { data: unknown[] }).data;\n          results[key] = { count: Array.isArray(arr) ? arr.length : 0 };\n        } else if (data && typeof data === \"object\" && \"pagination\" in (data as Record<string, unknown>)) {\n          const pagination = (data as { pagination: { total: number } }).pagination;\n          results[key] = { count: pagination.total };\n        } else {\n          results[key] = { count: 0 };\n        }\n      } catch (err) {\n        results[key] = { count: 0, error: formatApiErrorMessage({ error: err }) };\n      }\n    }),\n  );\n\n  const errorCount = Object.values(results).filter((r) => r.error).length;\n  const totalCount = Object.values(results).length;\n\n  if (errorCount === totalCount && totalCount > 0) {\n    spinner.fail(\"Project status — all resource fetches failed\");\n  } else {\n    spinner.succeed(\"Project status\");\n  }\n\n  if (options?.format === \"json\") {\n    console.log(JSON.stringify(results, null, 2));\n    return;\n  }\n\n  // If every resource failed — likely auth/endpoint/server issue. Show a\n  // clear diagnostic so the user knows what to check instead of puzzling\n  // over a grid of red error messages.\n  if (errorCount === totalCount && totalCount > 0) {\n    const sampleError = Object.values(results).find((r) => r.error)?.error ?? \"\";\n    const statuses = Object.values(results)\n      .map((r) => r.status)\n      .filter((s): s is number => typeof s === \"number\");\n    const allUnauthorized = statuses.length > 0 && statuses.every((s) => s === 401 || s === 403);\n    console.log();\n    console.log(chalk.red(\"  ✗ Could not fetch any project resources.\"));\n    console.log(chalk.gray(`    Reason: ${sampleError}`));\n    console.log();\n    if (allUnauthorized && isPersonalAccessToken(apiKey) && !process.env.LANGWATCH_PROJECT_ID) {\n      console.log(chalk.gray(`    Your PAT requires ${chalk.cyan(\"LANGWATCH_PROJECT_ID\")} to be set.`));\n      console.log(chalk.gray(`    Set it via: ${chalk.cyan(\"export LANGWATCH_PROJECT_ID=<your-project-id>\")}`));\n      console.log(chalk.gray(`    Or add to .env: ${chalk.cyan(\"LANGWATCH_PROJECT_ID=<your-project-id>\")}`));\n    } else if (allUnauthorized) {\n      console.log(chalk.gray(`    Your API key appears to be invalid or revoked. Re-run ${chalk.cyan(\"langwatch login\")} or check ${chalk.cyan(\"LANGWATCH_API_KEY\")}.`));\n    } else {\n      console.log(chalk.gray(`    Check ${chalk.cyan(\"LANGWATCH_API_KEY\")} (current endpoint: ${chalk.cyan(endpoint)}).`));\n    }\n    console.log();\n    process.exit(1);\n  }\n\n  console.log();\n  console.log(chalk.bold(\"  Resource Counts:\"));\n\n  const order = [\"evaluators\", \"scenarios\", \"suites\", \"datasets\", \"agents\", \"workflows\", \"dashboards\", \"triggers\", \"monitors\", \"secrets\"];\n  for (const key of order) {\n    const r = results[key];\n    if (!r) continue;\n    const countStr = r.error\n      ? chalk.red(r.error)\n      : chalk.cyan(String(r.count));\n    console.log(`    ${chalk.gray(key + \":\")} ${\" \".repeat(14 - key.length)}${countStr}`);\n  }\n\n  console.log();\n  console.log(chalk.gray(\"  Available CLI commands:\"));\n  console.log(chalk.gray(\"    langwatch evaluator list    langwatch scenario list\"));\n  console.log(chalk.gray(\"    langwatch dataset list      langwatch agent list\"));\n  console.log(chalk.gray(\"    langwatch workflow list      langwatch dashboard list\"));\n  console.log(chalk.gray(\"    langwatch suite list        langwatch trigger list\"));\n  console.log(chalk.gray(\"    langwatch monitor list      langwatch secret list\"));\n  console.log(chalk.gray(\"    langwatch graph list        langwatch simulation-run list\"));\n  console.log(chalk.gray(\"    langwatch trace search      langwatch analytics query\"));\n  console.log(chalk.gray(\"    langwatch annotation list   langwatch model-provider list\"));\n  console.log();\n  console.log(chalk.gray(\"  Execution:\"));\n  console.log(chalk.gray(\"    langwatch experiment run <slug> [--wait]\"));\n  console.log(chalk.gray(\"    langwatch suite run <id> [--wait]\"));\n  console.log(chalk.gray(\"    langwatch scenario run <id> --target <type>:<ref>\"));\n  console.log(chalk.gray(\"    langwatch agent run <id> --input <json>\"));\n  console.log(chalk.gray(\"    langwatch workflow run <id> --input <json>\"));\n  console.log();\n};\n"],"mappings":"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","names":["_a","_b"]}