{"version":3,"sources":["../src/client-sdk/services/virtual-keys/virtual-keys-api.service.ts"],"sourcesContent":["import { formatApiErrorForOperation } from \"@/client-sdk/services/_shared/format-api-error\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\nexport type VirtualKeyScopeType = \"ORGANIZATION\" | \"TEAM\" | \"PROJECT\";\n\nexport interface VirtualKeyScope {\n  scope_type: VirtualKeyScopeType;\n  scope_id: string;\n}\n\nexport interface VirtualKey {\n  id: string;\n  name: string;\n  description: string | null;\n  environment: \"live\" | \"test\";\n  prefix: string;\n  last_four: string;\n  status: \"ACTIVE\" | \"REVOKED\";\n  principal_user_id: string | null;\n  organization_id: string;\n  /**\n   * Single-PROJECT-scope shorthand: present when the VK has exactly one\n   * PROJECT scope row. Null for ORG/TEAM-only VKs and for multi-project\n   * VKs (use `scopes[]` for the authoritative scope list in those cases).\n   * See vk-config-bundle.feature.\n   */\n  project_id: string | null;\n  scopes: VirtualKeyScope[];\n  routing_policy_id: string | null;\n  config: Record<string, unknown>;\n  created_at: string;\n  updated_at: string;\n  revoked_at: string | null;\n  last_used_at: string | null;\n}\n\nexport interface CreateVirtualKeyInput {\n  name: string;\n  description?: string;\n  environment?: \"live\" | \"test\";\n  principal_user_id?: string | null;\n  scopes: VirtualKeyScope[];\n  routing_policy_id?: string | null;\n  config?: Record<string, unknown>;\n}\n\nexport interface UpdateVirtualKeyInput {\n  name?: string;\n  description?: string | null;\n  scopes?: VirtualKeyScope[];\n  routing_policy_id?: string | null;\n  config?: Record<string, unknown>;\n}\n\nexport interface VirtualKeyWithSecret {\n  virtual_key: VirtualKey;\n  secret: string;\n}\n\nexport class VirtualKeysApiError extends Error {\n  constructor(\n    message: string,\n    public readonly operation: string,\n    public readonly originalError?: unknown,\n  ) {\n    super(message);\n    this.name = \"VirtualKeysApiError\";\n  }\n}\n\nexport class VirtualKeysApiService {\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 VirtualKeysApiError(message, operation, parsedBody);\n    }\n    return (await response.json()) as T;\n  }\n\n  async list(): Promise<VirtualKey[]> {\n    const { data } = await this.request<{ data: VirtualKey[] }>(\n      \"list virtual keys\",\n      \"/api/gateway/v1/virtual-keys\",\n    );\n    return data;\n  }\n\n  async get(id: string): Promise<VirtualKey> {\n    const { virtual_key } = await this.request<{ virtual_key: VirtualKey }>(\n      `get virtual key \"${id}\"`,\n      `/api/gateway/v1/virtual-keys/${encodeURIComponent(id)}`,\n    );\n    return virtual_key;\n  }\n\n  async create(input: CreateVirtualKeyInput): Promise<VirtualKeyWithSecret> {\n    return this.request<VirtualKeyWithSecret>(\n      \"create virtual key\",\n      \"/api/gateway/v1/virtual-keys\",\n      { method: \"POST\", body: JSON.stringify(input) },\n    );\n  }\n\n  async update(id: string, input: UpdateVirtualKeyInput): Promise<VirtualKey> {\n    const { virtual_key } = await this.request<{ virtual_key: VirtualKey }>(\n      `update virtual key \"${id}\"`,\n      `/api/gateway/v1/virtual-keys/${encodeURIComponent(id)}`,\n      { method: \"PATCH\", body: JSON.stringify(input) },\n    );\n    return virtual_key;\n  }\n\n  async rotate(id: string): Promise<VirtualKeyWithSecret> {\n    return this.request<VirtualKeyWithSecret>(\n      `rotate virtual key \"${id}\"`,\n      `/api/gateway/v1/virtual-keys/${encodeURIComponent(id)}/rotate`,\n      { method: \"POST\" },\n    );\n  }\n\n  async revoke(id: string): Promise<VirtualKey> {\n    const { virtual_key } = await this.request<{ virtual_key: VirtualKey }>(\n      `revoke virtual key \"${id}\"`,\n      `/api/gateway/v1/virtual-keys/${encodeURIComponent(id)}/revoke`,\n      { method: \"POST\" },\n    );\n    return virtual_key;\n  }\n}\n"],"mappings":";;;;;;;;;;;;AA2DO,IAAM,sBAAN,cAAkC,MAAM;AAAA,EAC7C,YACE,SACgB,WACA,eAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,wBAAN,MAA4B;AAAA,EAIjC,YAAY,QAAiD;AA1E/D;AA2EI,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;AAtF5F;AAuFI,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,oBAAoB,SAAS,WAAW,UAAU;AAAA,IAC9D;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,OAA8B;AAClC,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,IAAiC;AACzC,UAAM,EAAE,YAAY,IAAI,MAAM,KAAK;AAAA,MACjC,oBAAoB,EAAE;AAAA,MACtB,gCAAgC,mBAAmB,EAAE,CAAC;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,OAA6D;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,IAAY,OAAmD;AAC1E,UAAM,EAAE,YAAY,IAAI,MAAM,KAAK;AAAA,MACjC,uBAAuB,EAAE;AAAA,MACzB,gCAAgC,mBAAmB,EAAE,CAAC;AAAA,MACtD,EAAE,QAAQ,SAAS,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,IAA2C;AACtD,WAAO,KAAK;AAAA,MACV,uBAAuB,EAAE;AAAA,MACzB,gCAAgC,mBAAmB,EAAE,CAAC;AAAA,MACtD,EAAE,QAAQ,OAAO;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,IAAiC;AAC5C,UAAM,EAAE,YAAY,IAAI,MAAM,KAAK;AAAA,MACjC,uBAAuB,EAAE;AAAA,MACzB,gCAAgC,mBAAmB,EAAE,CAAC;AAAA,MACtD,EAAE,QAAQ,OAAO;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AACF;","names":[]}