{"version":3,"sources":["../src/cli/commands/gateway-budgets/create.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n  type BudgetOnBreach,\n  type BudgetWindow,\n  type CreateGatewayBudgetScope,\n  GatewayBudgetsApiService,\n} from \"@/client-sdk/services/gateway-budgets/gateway-budgets-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { failSpinner } from \"../../utils/spinnerError\";\n\nexport interface CreateGatewayBudgetOptions {\n  name: string;\n  description?: string;\n  scope: \"organization\" | \"team\" | \"project\" | \"virtual-key\" | \"principal\";\n  organization?: string;\n  team?: string;\n  project?: string;\n  virtualKey?: string;\n  principal?: string;\n  window: string;\n  limit: string;\n  onBreach?: \"block\" | \"warn\";\n  timezone?: string;\n  format?: string;\n}\n\nconst ALLOWED_WINDOWS: BudgetWindow[] = [\"MINUTE\", \"HOUR\", \"DAY\", \"WEEK\", \"MONTH\", \"TOTAL\"];\n\nfunction buildScope(options: CreateGatewayBudgetOptions): CreateGatewayBudgetScope {\n  switch (options.scope) {\n    case \"organization\":\n      if (!options.organization) {\n        throw new Error(\"--organization <id> required for scope=organization\");\n      }\n      return { kind: \"ORGANIZATION\", organization_id: options.organization };\n    case \"team\":\n      if (!options.team) throw new Error(\"--team <id> required for scope=team\");\n      return { kind: \"TEAM\", team_id: options.team };\n    case \"project\":\n      if (!options.project) throw new Error(\"--project <id> required for scope=project\");\n      return { kind: \"PROJECT\", project_id: options.project };\n    case \"virtual-key\":\n      if (!options.virtualKey) throw new Error(\"--virtual-key <id> required for scope=virtual-key\");\n      return { kind: \"VIRTUAL_KEY\", virtual_key_id: options.virtualKey };\n    case \"principal\":\n      if (!options.principal) throw new Error(\"--principal <id> required for scope=principal\");\n      return { kind: \"PRINCIPAL\", principal_user_id: options.principal };\n  }\n}\n\nexport const createGatewayBudgetCommand = async (\n  options: CreateGatewayBudgetOptions,\n): Promise<void> => {\n  checkApiKey();\n\n  const upperWindow = options.window.toUpperCase() as BudgetWindow;\n  if (!ALLOWED_WINDOWS.includes(upperWindow)) {\n    console.error(\n      chalk.red(`Error: --window must be one of ${ALLOWED_WINDOWS.join(\", \").toLowerCase()}`),\n    );\n    process.exit(1);\n  }\n\n  let scope: CreateGatewayBudgetScope;\n  try {\n    scope = buildScope(options);\n  } catch (err) {\n    console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));\n    process.exit(1);\n  }\n\n  const onBreach: BudgetOnBreach | undefined = options.onBreach\n    ? (options.onBreach.toUpperCase() as BudgetOnBreach)\n    : undefined;\n\n  const service = new GatewayBudgetsApiService();\n  const spinner = ora(`Creating budget \"${options.name}\"...`).start();\n\n  try {\n    const budget = await service.create({\n      name: options.name,\n      description: options.description,\n      scope,\n      window: upperWindow,\n      limit_usd: options.limit,\n      on_breach: onBreach,\n      timezone: options.timezone ?? null,\n    });\n\n    spinner.succeed(`Created budget \"${chalk.cyan(budget.name)}\"`);\n\n    if (options.format === \"json\") {\n      console.log(JSON.stringify(budget, null, 2));\n      return;\n    }\n\n    console.log();\n    console.log(`${chalk.bold(\"ID:\")}       ${budget.id}`);\n    console.log(`${chalk.bold(\"Scope:\")}    ${budget.scope_type.toLowerCase()}:${budget.scope_id}`);\n    console.log(`${chalk.bold(\"Window:\")}   ${budget.window.toLowerCase()}`);\n    console.log(`${chalk.bold(\"Limit:\")}    $${budget.limit_usd}`);\n    console.log(`${chalk.bold(\"Breach:\")}   ${budget.on_breach.toLowerCase()}`);\n    console.log(`${chalk.bold(\"Resets:\")}   ${new Date(budget.resets_at).toLocaleString()}`);\n    console.log();\n  } catch (error) {\n    failSpinner({ spinner, error, action: \"create gateway budget\" });\n    process.exit(1);\n  }\n};\n"],"mappings":"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","names":[]}