UNPKG

assistant-cloud

Version:

Cloud integration for assistant-ui

77 lines (76 loc) 2.89 kB
import { AssistantCloudAPIKeyAuthStrategy, AssistantCloudAnonymousAuthStrategy, AssistantCloudJWTAuthStrategy } from "./AssistantCloudAuthStrategy.js"; //#region src/AssistantCloudAPI.ts var CloudAPIError = class extends Error { status; constructor(message, status) { super(message); this.status = status; this.name = "CloudAPIError"; } }; const normalizeBaseUrl = (baseUrl) => { if (!baseUrl || !baseUrl.endsWith("/")) return baseUrl; return baseUrl.slice(0, -1); }; var AssistantCloudAPI = class { _auth; _baseUrl; constructor(config) { if ("authToken" in config) { this._baseUrl = normalizeBaseUrl(config.baseUrl); this._auth = new AssistantCloudJWTAuthStrategy(config.authToken); } else if ("apiKey" in config) { this._baseUrl = normalizeBaseUrl(config.baseUrl ?? "https://backend.assistant-api.com"); this._auth = new AssistantCloudAPIKeyAuthStrategy(config.apiKey, config.userId, config.workspaceId); } else if ("anonymous" in config) { this._baseUrl = normalizeBaseUrl(config.baseUrl); this._auth = new AssistantCloudAnonymousAuthStrategy(this._baseUrl); } else throw new Error("Invalid configuration: Must provide authToken, apiKey, or anonymous configuration"); } async initializeAuth() { return !!await this._auth.getAuthHeaders(); } async makeRawRequest(endpoint, options = {}) { const authHeaders = await this._auth.getAuthHeaders(); if (!authHeaders) throw new Error("Authorization failed"); const headers = { ...authHeaders, ...options.headers, "Content-Type": "application/json" }; const queryParams = new URLSearchParams(); if (options.query) for (const [key, value] of Object.entries(options.query)) { if (value === false) continue; if (value === true) queryParams.set(key, "true"); else queryParams.set(key, value.toString()); } const url = new URL(`${this._baseUrl}/v1${endpoint}`); url.search = queryParams.toString(); const response = await fetch(url, { method: options.method ?? "GET", headers, body: options.body ? JSON.stringify(options.body) : null }); this._auth.readAuthHeaders(response.headers); if (!response.ok) { const text = await response.text(); try { throw new CloudAPIError(JSON.parse(text).message, response.status); } catch (error) { if (error instanceof CloudAPIError) throw error; throw new CloudAPIError(`Request failed with status ${response.status}, ${text}`, response.status); } } return response; } async makeRequest(endpoint, options = {}) { const response = await this.makeRawRequest(endpoint, options); if (response.status === 204 || response.headers.get("content-length") === "0") return void 0; const text = await response.text(); if (text.trim() === "") return void 0; return JSON.parse(text); } }; //#endregion export { AssistantCloudAPI, CloudAPIError }; //# sourceMappingURL=AssistantCloudAPI.js.map