{"version":3,"sources":["../src/client-sdk/services/projects/projects-api.service.ts"],"sourcesContent":["import { formatApiErrorForOperation } from \"@/client-sdk/services/_shared/format-api-error\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\nexport interface Project {\n  id: string;\n  name: string;\n  slug: string;\n  language: string;\n  framework: string;\n  teamId: string;\n  piiRedactionLevel: string;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface CreateProjectInput {\n  name: string;\n  language: string;\n  framework: string;\n  teamId?: string;\n  newTeamName?: string;\n}\n\nexport interface UpdateProjectInput {\n  name?: string;\n  language?: string;\n  framework?: string;\n  piiRedactionLevel?: \"STRICT\" | \"ESSENTIAL\" | \"DISABLED\";\n}\n\nexport interface ProjectWithServiceKey extends Project {\n  serviceApiKey: string;\n  serviceApiKeyId: string;\n}\n\nexport interface PaginatedProjects {\n  data: Project[];\n  pagination: {\n    page: number;\n    limit: number;\n    total: number;\n    totalPages: number;\n  };\n}\n\nexport interface ArchivedProject {\n  id: string;\n  name: string;\n  archivedAt: string;\n}\n\nexport class ProjectsApiError extends Error {\n  constructor(\n    message: string,\n    public readonly operation: string,\n    public readonly originalError?: unknown,\n  ) {\n    super(message);\n    this.name = \"ProjectsApiError\";\n  }\n}\n\nexport class ProjectsApiService {\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 ProjectsApiError(message, operation, parsedBody);\n    }\n    return (await response.json()) as T;\n  }\n\n  async list(options?: { page?: number; limit?: number }): Promise<PaginatedProjects> {\n    const params = new URLSearchParams();\n    if (options?.page) params.set(\"page\", String(options.page));\n    if (options?.limit) params.set(\"limit\", String(options.limit));\n    const qs = params.toString();\n    return this.request<PaginatedProjects>(\n      \"list projects\",\n      `/api/projects${qs ? `?${qs}` : \"\"}`,\n    );\n  }\n\n  async get(id: string): Promise<Project> {\n    return this.request<Project>(\n      `get project \"${id}\"`,\n      `/api/projects/${encodeURIComponent(id)}`,\n    );\n  }\n\n  async create(input: CreateProjectInput): Promise<ProjectWithServiceKey> {\n    return this.request<ProjectWithServiceKey>(\n      \"create project\",\n      \"/api/projects\",\n      { method: \"POST\", body: JSON.stringify(input) },\n    );\n  }\n\n  async update(id: string, input: UpdateProjectInput): Promise<Project> {\n    return this.request<Project>(\n      `update project \"${id}\"`,\n      `/api/projects/${encodeURIComponent(id)}`,\n      { method: \"PATCH\", body: JSON.stringify(input) },\n    );\n  }\n\n  async archive(id: string): Promise<ArchivedProject> {\n    return this.request<ArchivedProject>(\n      `archive project \"${id}\"`,\n      `/api/projects/${encodeURIComponent(id)}`,\n      { method: \"DELETE\" },\n    );\n  }\n}\n"],"mappings":";;;;;;;;;;;;AAmDO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YACE,SACgB,WACA,eAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,MAAyB;AAAA,EAI9B,YAAY,QAAiD;AAlE/D;AAmEI,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;AA9E5F;AA+EI,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,iBAAiB,SAAS,WAAW,UAAU;AAAA,IAC3D;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,SAAyE;AAClF,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,mCAAS,KAAM,QAAO,IAAI,QAAQ,OAAO,QAAQ,IAAI,CAAC;AAC1D,QAAI,mCAAS,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC7D,UAAM,KAAK,OAAO,SAAS;AAC3B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,gBAAgB,KAAK,IAAI,EAAE,KAAK,EAAE;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,IAA8B;AACtC,WAAO,KAAK;AAAA,MACV,gBAAgB,EAAE;AAAA,MAClB,iBAAiB,mBAAmB,EAAE,CAAC;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAA2D;AACtE,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,OAA6C;AACpE,WAAO,KAAK;AAAA,MACV,mBAAmB,EAAE;AAAA,MACrB,iBAAiB,mBAAmB,EAAE,CAAC;AAAA,MACvC,EAAE,QAAQ,SAAS,MAAM,KAAK,UAAU,KAAK,EAAE;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,IAAsC;AAClD,WAAO,KAAK;AAAA,MACV,oBAAoB,EAAE;AAAA,MACtB,iBAAiB,mBAAmB,EAAE,CAAC;AAAA,MACvC,EAAE,QAAQ,SAAS;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}