{"version":3,"sources":["../src/client-sdk/services/model-defaults/model-defaults-api.service.ts"],"sourcesContent":["import { DEFAULT_ENDPOINT } from \"@/internal/constants\";\nimport { buildAuthHeaders } from \"@/internal/api/auth\";\nimport { formatApiErrorMessage } from \"@/client-sdk/services/_shared/format-api-error\";\n\nexport type ModelDefaultScopeType = \"ORGANIZATION\" | \"TEAM\" | \"PROJECT\";\n\nexport interface ModelDefaultScopeRef {\n  scopeType: ModelDefaultScopeType;\n  scopeId: string;\n}\n\nexport interface ConfigRow {\n  id: string;\n  config: Record<string, string>;\n  scopes: Array<{ type: ModelDefaultScopeType; id: string; name: string }>;\n  createdAt: string;\n  updatedAt: string;\n}\n\nexport interface EffectiveResolution {\n  model: string;\n  source: string;\n  scope: string | null;\n}\n\nexport interface ModelDefaultsSnapshot {\n  scope: {\n    projectId: string;\n    teamId: string | null;\n    organizationId: string | null;\n    organizationName: string | null;\n  };\n  effective: {\n    DEFAULT: EffectiveResolution | null;\n    FAST: EffectiveResolution | null;\n    EMBEDDINGS: EffectiveResolution | null;\n  };\n  configs: ConfigRow[];\n}\n\nexport interface CreateConfigBody {\n  config: Record<string, string>;\n  scopes: ModelDefaultScopeRef[];\n}\n\nexport interface UpdateConfigBody {\n  config?: Record<string, string>;\n  scopes?: ModelDefaultScopeRef[];\n}\n\nexport class ModelDefaultsApiError extends Error {\n  constructor(\n    message: string,\n    public readonly operation: string,\n    public readonly originalError?: unknown,\n  ) {\n    super(message);\n    this.name = \"ModelDefaultsApiError\";\n  }\n}\n\nexport class ModelDefaultsApiService {\n  private readonly apiKey: string;\n  private readonly endpoint: string;\n\n  constructor(config?: { apiKey?: string; endpoint?: string }) {\n    this.apiKey = config?.apiKey ?? process.env.LANGWATCH_API_KEY ?? \"\";\n    this.endpoint =\n      config?.endpoint ?? process.env.LANGWATCH_ENDPOINT ?? DEFAULT_ENDPOINT;\n  }\n\n  private async request<T>(\n    path: string,\n    options?: RequestInit & { allowNoContent?: boolean },\n  ): Promise<T> {\n    const response = await fetch(`${this.endpoint}${path}`, {\n      ...options,\n      headers: {\n        ...buildAuthHeaders({ apiKey: this.apiKey }),\n        \"Content-Type\": \"application/json\",\n        ...options?.headers,\n      },\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      let parsed: unknown = errorText;\n      try {\n        parsed = JSON.parse(errorText);\n      } catch {\n        // leave as raw text\n      }\n      const message = formatApiErrorMessage({\n        error: parsed,\n        options: { status: response.status },\n      });\n      throw new ModelDefaultsApiError(\n        `HTTP ${response.status}: ${message}`,\n        options?.method ?? \"GET\",\n        parsed,\n      );\n    }\n\n    if (response.status === 204 || options?.allowNoContent) {\n      return undefined as T;\n    }\n    return response.json() as Promise<T>;\n  }\n\n  async getSnapshot(): Promise<ModelDefaultsSnapshot> {\n    return this.request<ModelDefaultsSnapshot>(\"/api/model-defaults\");\n  }\n\n  async createConfig(body: CreateConfigBody): Promise<{ id: string }> {\n    return this.request<{ id: string }>(\"/api/model-defaults\", {\n      method: \"POST\",\n      body: JSON.stringify(body),\n    });\n  }\n\n  async updateConfig(id: string, body: UpdateConfigBody): Promise<void> {\n    await this.request<void>(\n      `/api/model-defaults/${encodeURIComponent(id)}`,\n      {\n        method: \"PUT\",\n        body: JSON.stringify(body),\n        allowNoContent: true,\n      },\n    );\n  }\n\n  async deleteConfig(id: string): Promise<void> {\n    await this.request<void>(\n      `/api/model-defaults/${encodeURIComponent(id)}`,\n      {\n        method: \"DELETE\",\n        allowNoContent: true,\n      },\n    );\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkDO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YACE,SACgB,WACA,eAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,0BAAN,MAA8B;AAAA,EAInC,YAAY,QAAiD;AAjE/D;AAkEI,SAAK,UAAS,4CAAQ,WAAR,YAAkB,QAAQ,IAAI,sBAA9B,YAAmD;AACjE,SAAK,YACH,4CAAQ,aAAR,YAAoB,QAAQ,IAAI,uBAAhC,YAAsD;AAAA,EAC1D;AAAA,EAEA,MAAc,QACZ,MACA,SACY;AA1EhB;AA2EI,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,QAAQ,GAAG,IAAI,IAAI,iCACnD,UADmD;AAAA,MAEtD,SAAS,gDACJ,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC,IADpC;AAAA,QAEP,gBAAgB;AAAA,UACb,mCAAS;AAAA,IAEhB,EAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,UAAI,SAAkB;AACtB,UAAI;AACF,iBAAS,KAAK,MAAM,SAAS;AAAA,MAC/B,SAAQ;AAAA,MAER;AACA,YAAM,UAAU,sBAAsB;AAAA,QACpC,OAAO;AAAA,QACP,SAAS,EAAE,QAAQ,SAAS,OAAO;AAAA,MACrC,CAAC;AACD,YAAM,IAAI;AAAA,QACR,QAAQ,SAAS,MAAM,KAAK,OAAO;AAAA,SACnC,wCAAS,WAAT,YAAmB;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,QAAO,mCAAS,iBAAgB;AACtD,aAAO;AAAA,IACT;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,cAA8C;AAClD,WAAO,KAAK,QAA+B,qBAAqB;AAAA,EAClE;AAAA,EAEA,MAAM,aAAa,MAAiD;AAClE,WAAO,KAAK,QAAwB,uBAAuB;AAAA,MACzD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,IAAY,MAAuC;AACpE,UAAM,KAAK;AAAA,MACT,uBAAuB,mBAAmB,EAAE,CAAC;AAAA,MAC7C;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,IAAI;AAAA,QACzB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAA2B;AAC5C,UAAM,KAAK;AAAA,MACT,uBAAuB,mBAAmB,EAAE,CAAC;AAAA,MAC7C;AAAA,QACE,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}