import { AuthToken } from "./types"; import { ErrorResponse, isErrorResponse, ApiError, buildUnknownError, } from "./errors"; import { ESourceAuthorization } from "./resources/User"; export function createMethod(createRequest: (payload: P) => Request) { return async (payload: P): Promise => { const request = createRequest(payload); let source = ESourceAuthorization["aura.main.new"]; if (location.pathname.includes("/palmistry")) { source = ESourceAuthorization["aura.palmistry"]; } if (location.pathname.includes("/v1/palmistry")) { source = ESourceAuthorization["aura.palmistry.new"]; } if (location.pathname.includes("/chats")) { source = ESourceAuthorization["aura.chats"]; } const sessionId = localStorage.getItem(`${source}_sessionId`); if (sessionId?.length) { request.headers.append("session-id", sessionId); } const response = await fetch(request); const data: R | ErrorResponse = await response.json(); const statusCode = response.status; if (!response.ok) { const body = isErrorResponse(data) ? data : { error: buildUnknownError(statusCode) }; throw new ApiError({ body, statusCode, responseData: data }); } if (isErrorResponse(data)) { throw new ApiError({ body: data, statusCode, responseData: data }); } return data; }; } export function getBaseHeaders(): Headers { return new Headers({ "Content-Type": "application/json", }); } export function getAuthHeaders(token: AuthToken): Headers { const headers = getBaseHeaders(); headers.append("Authorization", `Bearer ${token}`); return headers; } export function getAuthOpenAIHeaders(token: AuthToken): Headers { const headers = getBaseHeaders(); headers.append("Authorization", `Bearer ${token}`); headers.append("OpenAI-Beta", "assistants=v1"); return headers; }