{"version":3,"sources":["../../src/cloud/AssistantCloudAPI.tsx"],"sourcesContent":["import {\n  AssistantCloudAuthStrategy,\n  AssistantCloudJWTAuthStrategy,\n  AssistantCloudAPIKeyAuthStrategy,\n  AssistantCloudAnonymousAuthStrategy,\n} from \"./AssistantCloudAuthStrategy\";\n\nexport type AssistantCloudConfig =\n  | {\n      baseUrl: string;\n      authToken: () => Promise<string | null>;\n    }\n  | {\n      apiKey: string;\n      userId: string;\n      workspaceId: string;\n    }\n  | {\n      baseUrl: string;\n      anonymous: true;\n    };\n\nclass CloudAPIError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"APIError\";\n  }\n}\n\ntype MakeRequestOptions = {\n  method?: \"POST\" | \"PUT\" | \"DELETE\" | undefined;\n  headers?: Record<string, string> | undefined;\n  query?: Record<string, string | number | boolean> | undefined;\n  body?: object | undefined;\n};\n\nexport class AssistantCloudAPI {\n  private _auth: AssistantCloudAuthStrategy;\n  private _baseUrl;\n\n  constructor(config: AssistantCloudConfig) {\n    if (\"authToken\" in config) {\n      this._baseUrl = config.baseUrl;\n      this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);\n    } else if (\"apiKey\" in config) {\n      this._baseUrl = \"https://backend.assistant-api.com\";\n      this._auth = new AssistantCloudAPIKeyAuthStrategy(\n        config.apiKey,\n        config.userId,\n        config.workspaceId,\n      );\n    } else if (\"anonymous\" in config) {\n      this._baseUrl = config.baseUrl;\n      this._auth = new AssistantCloudAnonymousAuthStrategy(config.baseUrl);\n    } else {\n      throw new Error(\n        \"Invalid configuration: Must provide authToken, apiKey, or anonymous configuration\",\n      );\n    }\n  }\n\n  public async initializeAuth() {\n    return !!this._auth.getAuthHeaders();\n  }\n\n  public async makeRawRequest(\n    endpoint: string,\n    options: MakeRequestOptions = {},\n  ) {\n    const authHeaders = await this._auth.getAuthHeaders();\n    if (!authHeaders) throw new Error(\"Authorization failed\");\n\n    const headers = {\n      ...authHeaders,\n      ...options.headers,\n      \"Content-Type\": \"application/json\",\n    };\n\n    const queryParams = new URLSearchParams();\n    if (options.query) {\n      for (const [key, value] of Object.entries(options.query)) {\n        if (value === false) continue;\n        if (value === true) {\n          queryParams.set(key, \"true\");\n        } else {\n          queryParams.set(key, value.toString());\n        }\n      }\n    }\n\n    const url = new URL(`${this._baseUrl}/v1${endpoint}`);\n    url.search = queryParams.toString();\n\n    const response = await fetch(url, {\n      method: options.method ?? \"GET\",\n      headers,\n      body: options.body ? JSON.stringify(options.body) : null,\n    });\n\n    this._auth.readAuthHeaders(response.headers);\n\n    if (!response.ok) {\n      const text = await response.text();\n      try {\n        const body = JSON.parse(text);\n        throw new CloudAPIError(body.message);\n      } catch {\n        throw new Error(\n          `Request failed with status ${response.status}, ${text}`,\n        );\n      }\n    }\n\n    return response;\n  }\n\n  public async makeRequest(endpoint: string, options: MakeRequestOptions = {}) {\n    const response = await this.makeRawRequest(endpoint, options);\n    return response.json();\n  }\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBP,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAChC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AASO,IAAM,oBAAN,MAAwB;AAAA,EACrB;AAAA,EACA;AAAA,EAER,YAAY,QAA8B;AACxC,QAAI,eAAe,QAAQ;AACzB,WAAK,WAAW,OAAO;AACvB,WAAK,QAAQ,IAAI,8BAA8B,OAAO,SAAS;AAAA,IACjE,WAAW,YAAY,QAAQ;AAC7B,WAAK,WAAW;AAChB,WAAK,QAAQ,IAAI;AAAA,QACf,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF,WAAW,eAAe,QAAQ;AAChC,WAAK,WAAW,OAAO;AACvB,WAAK,QAAQ,IAAI,oCAAoC,OAAO,OAAO;AAAA,IACrE,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,iBAAiB;AAC5B,WAAO,CAAC,CAAC,KAAK,MAAM,eAAe;AAAA,EACrC;AAAA,EAEA,MAAa,eACX,UACA,UAA8B,CAAC,GAC/B;AACA,UAAM,cAAc,MAAM,KAAK,MAAM,eAAe;AACpD,QAAI,CAAC,YAAa,OAAM,IAAI,MAAM,sBAAsB;AAExD,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,gBAAgB;AAAA,IAClB;AAEA,UAAM,cAAc,IAAI,gBAAgB;AACxC,QAAI,QAAQ,OAAO;AACjB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,MAAO;AACrB,YAAI,UAAU,MAAM;AAClB,sBAAY,IAAI,KAAK,MAAM;AAAA,QAC7B,OAAO;AACL,sBAAY,IAAI,KAAK,MAAM,SAAS,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,QAAQ,MAAM,QAAQ,EAAE;AACpD,QAAI,SAAS,YAAY,SAAS;AAElC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ,QAAQ,UAAU;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,OAAO,KAAK,UAAU,QAAQ,IAAI,IAAI;AAAA,IACtD,CAAC;AAED,SAAK,MAAM,gBAAgB,SAAS,OAAO;AAE3C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,cAAM,IAAI,cAAc,KAAK,OAAO;AAAA,MACtC,QAAQ;AACN,cAAM,IAAI;AAAA,UACR,8BAA8B,SAAS,MAAM,KAAK,IAAI;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,YAAY,UAAkB,UAA8B,CAAC,GAAG;AAC3E,UAAM,WAAW,MAAM,KAAK,eAAe,UAAU,OAAO;AAC5D,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;","names":[]}