{"version":3,"sources":["../src/client-sdk/services/gateway-budgets/gateway-budgets-api.service.ts"],"sourcesContent":["import { formatApiErrorForOperation } from \"@/client-sdk/services/_shared/format-api-error\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\nexport type BudgetScopeKind =\n  | \"ORGANIZATION\"\n  | \"TEAM\"\n  | \"PROJECT\"\n  | \"VIRTUAL_KEY\"\n  | \"PRINCIPAL\";\n\nexport type BudgetWindow = \"MINUTE\" | \"HOUR\" | \"DAY\" | \"WEEK\" | \"MONTH\" | \"TOTAL\";\nexport type BudgetOnBreach = \"BLOCK\" | \"WARN\";\n\nexport interface GatewayBudget {\n  id: string;\n  organization_id: string;\n  scope_type: BudgetScopeKind;\n  scope_id: string;\n  name: string;\n  description: string | null;\n  window: BudgetWindow;\n  on_breach: BudgetOnBreach;\n  limit_usd: string;\n  spent_usd: string;\n  timezone: string | null;\n  current_period_started_at: string;\n  resets_at: string;\n  last_reset_at: string | null;\n  archived_at: string | null;\n  created_at: string;\n}\n\nexport type CreateGatewayBudgetScope =\n  | { kind: \"ORGANIZATION\"; organization_id: string }\n  | { kind: \"TEAM\"; team_id: string }\n  | { kind: \"PROJECT\"; project_id: string }\n  | { kind: \"VIRTUAL_KEY\"; virtual_key_id: string }\n  | { kind: \"PRINCIPAL\"; principal_user_id: string };\n\nexport interface CreateGatewayBudgetInput {\n  scope: CreateGatewayBudgetScope;\n  name: string;\n  description?: string;\n  window: BudgetWindow;\n  limit_usd: number | string;\n  on_breach?: BudgetOnBreach;\n  timezone?: string | null;\n}\n\nexport interface UpdateGatewayBudgetInput {\n  name?: string;\n  description?: string | null;\n  limit_usd?: number | string;\n  on_breach?: BudgetOnBreach;\n  timezone?: string | null;\n}\n\nexport class GatewayBudgetsApiError extends Error {\n  constructor(\n    message: string,\n    public readonly operation: string,\n    public readonly originalError?: unknown,\n  ) {\n    super(message);\n    this.name = \"GatewayBudgetsApiError\";\n  }\n}\n\nexport class GatewayBudgetsApiService {\n  private readonly endpoint: string;\n  private readonly apiKey: string;\n\n  constructor(config?: { endpoint?: string; apiKey?: string }) {\n    this.endpoint = (config?.endpoint ?? process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n    this.apiKey = config?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n  }\n\n  private headers(): Record<string, string> {\n    return {\n      Authorization: `Bearer ${this.apiKey}`,\n      \"Content-Type\": \"application/json\",\n    };\n  }\n\n  private async request<T>(operation: string, path: string, init?: RequestInit): Promise<T> {\n    const response = await fetch(`${this.endpoint}${path}`, {\n      ...init,\n      headers: { ...this.headers(), ...(init?.headers ?? {}) },\n    });\n    if (!response.ok) {\n      let parsedBody: unknown;\n      try {\n        parsedBody = await response.json();\n      } catch {\n        parsedBody = await response.text();\n      }\n      const message = formatApiErrorForOperation({\n        operation,\n        error: parsedBody,\n        options: { status: response.status },\n      });\n      throw new GatewayBudgetsApiError(message, operation, parsedBody);\n    }\n    return (await response.json()) as T;\n  }\n\n  async list(): Promise<GatewayBudget[]> {\n    const { data } = await this.request<{ data: GatewayBudget[] }>(\n      \"list gateway budgets\",\n      \"/api/gateway/v1/budgets\",\n    );\n    return data;\n  }\n\n  async create(input: CreateGatewayBudgetInput): Promise<GatewayBudget> {\n    const { budget } = await this.request<{ budget: GatewayBudget }>(\n      \"create gateway budget\",\n      \"/api/gateway/v1/budgets\",\n      { method: \"POST\", body: JSON.stringify(input) },\n    );\n    return budget;\n  }\n\n  async update(id: string, input: UpdateGatewayBudgetInput): Promise<GatewayBudget> {\n    const { budget } = await this.request<{ budget: GatewayBudget }>(\n      `update gateway budget \"${id}\"`,\n      `/api/gateway/v1/budgets/${encodeURIComponent(id)}`,\n      { method: \"PATCH\", body: JSON.stringify(input) },\n    );\n    return budget;\n  }\n\n  async archive(id: string): Promise<GatewayBudget> {\n    const { budget } = await this.request<{ budget: GatewayBudget }>(\n      `archive gateway budget \"${id}\"`,\n      `/api/gateway/v1/budgets/${encodeURIComponent(id)}`,\n      { method: \"DELETE\" },\n    );\n    return budget;\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAyDO,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAChD,YACE,SACgB,WACA,eAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,2BAAN,MAA+B;AAAA,EAIpC,YAAY,QAAiD;AAxE/D;AAyEI,SAAK,aAAY,4CAAQ,aAAR,YAAoB,QAAQ,IAAI,uBAAhC,YAAsD,kBAAkB,QAAQ,QAAQ,EAAE;AAC3G,SAAK,UAAS,4CAAQ,WAAR,YAAkB,QAAQ,IAAI,sBAA9B,YAAmD;AAAA,EACnE;AAAA,EAEQ,UAAkC;AACxC,WAAO;AAAA,MACL,eAAe,UAAU,KAAK,MAAM;AAAA,MACpC,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAc,QAAW,WAAmB,MAAc,MAAgC;AApF5F;AAqFI,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,QAAQ,GAAG,IAAI,IAAI,iCACnD,OADmD;AAAA,MAEtD,SAAS,kCAAK,KAAK,QAAQ,KAAO,kCAAM,YAAN,YAAiB,CAAC;AAAA,IACtD,EAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,qBAAa,MAAM,SAAS,KAAK;AAAA,MACnC,SAAQ;AACN,qBAAa,MAAM,SAAS,KAAK;AAAA,MACnC;AACA,YAAM,UAAU,2BAA2B;AAAA,QACzC;AAAA,QACA,OAAO;AAAA,QACP,SAAS,EAAE,QAAQ,SAAS,OAAO;AAAA,MACrC,CAAC;AACD,YAAM,IAAI,uBAAuB,SAAS,WAAW,UAAU;AAAA,IACjE;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,OAAiC;AACrC,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,OAAyD;AACpE,UAAM,EAAE,OAAO,IAAI,MAAM,KAAK;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,IAAY,OAAyD;AAChF,UAAM,EAAE,OAAO,IAAI,MAAM,KAAK;AAAA,MAC5B,0BAA0B,EAAE;AAAA,MAC5B,2BAA2B,mBAAmB,EAAE,CAAC;AAAA,MACjD,EAAE,QAAQ,SAAS,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,IAAoC;AAChD,UAAM,EAAE,OAAO,IAAI,MAAM,KAAK;AAAA,MAC5B,2BAA2B,EAAE;AAAA,MAC7B,2BAA2B,mBAAmB,EAAE,CAAC;AAAA,MACjD,EAAE,QAAQ,SAAS;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AACF;","names":[]}