UNPKG

@assistant-ui/react

Version:

Typescript/React library for AI Chat

166 lines (165 loc) 5.69 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/cloud/AssistantCloudAuthStrategy.tsx var AssistantCloudAuthStrategy_exports = {}; __export(AssistantCloudAuthStrategy_exports, { AssistantCloudAPIKeyAuthStrategy: () => AssistantCloudAPIKeyAuthStrategy, AssistantCloudAnonymousAuthStrategy: () => AssistantCloudAnonymousAuthStrategy, AssistantCloudJWTAuthStrategy: () => AssistantCloudJWTAuthStrategy }); module.exports = __toCommonJS(AssistantCloudAuthStrategy_exports); var getJwtExpiry = (jwt) => { try { const parts = jwt.split("."); const bodyPart = parts[1]; if (!bodyPart) { throw new Error("Invalid JWT format"); } let base64 = bodyPart.replace(/-/g, "+").replace(/_/g, "/"); while (base64.length % 4 !== 0) { base64 += "="; } const payload = atob(base64); const payloadObj = JSON.parse(payload); const exp = payloadObj.exp; if (!exp || typeof exp !== "number") { throw new Error('JWT does not contain a valid "exp" field'); } return exp * 1e3; } catch (error) { throw new Error("Unable to determine the token expiry: " + error); } }; var AssistantCloudJWTAuthStrategy = class { strategy = "jwt"; cachedToken = null; tokenExpiry = null; #authTokenCallback; constructor(authTokenCallback) { this.#authTokenCallback = authTokenCallback; } async getAuthHeaders() { const currentTime = Date.now(); if (this.cachedToken && this.tokenExpiry && this.tokenExpiry - currentTime > 30 * 1e3) { return { Authorization: `Bearer ${this.cachedToken}` }; } const newToken = await this.#authTokenCallback(); if (!newToken) return false; this.cachedToken = newToken; this.tokenExpiry = getJwtExpiry(newToken); return { Authorization: `Bearer ${newToken}` }; } readAuthHeaders(headers) { const authHeader = headers.get("Authorization"); if (!authHeader) return; const [scheme, token] = authHeader.split(" "); if (scheme !== "Bearer" || !token) { throw new Error("Invalid auth header received"); } this.cachedToken = token; this.tokenExpiry = getJwtExpiry(token); } }; var AssistantCloudAPIKeyAuthStrategy = class { strategy = "api-key"; #apiKey; #userId; #workspaceId; constructor(apiKey, userId, workspaceId) { this.#apiKey = apiKey; this.#userId = userId; this.#workspaceId = workspaceId; } async getAuthHeaders() { return { Authorization: `Bearer ${this.#apiKey}`, "Aui-User-Id": this.#userId, "Aui-Workspace-Id": this.#workspaceId }; } readAuthHeaders() { } }; var AUI_REFRESH_TOKEN_NAME = "aui:refresh_token"; var AssistantCloudAnonymousAuthStrategy = class { strategy = "anon"; baseUrl; jwtStrategy; constructor(baseUrl) { this.baseUrl = baseUrl; this.jwtStrategy = new AssistantCloudJWTAuthStrategy(async () => { const currentTime = Date.now(); const storedRefreshTokenJson = localStorage.getItem( AUI_REFRESH_TOKEN_NAME ); const storedRefreshToken = storedRefreshTokenJson ? JSON.parse(storedRefreshTokenJson) : void 0; if (storedRefreshToken) { const refreshExpiry = new Date(storedRefreshToken.expires_at).getTime(); if (refreshExpiry - currentTime > 30 * 1e3) { const response2 = await fetch( `${this.baseUrl}/v1/auth/tokens/refresh`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ refresh_token: storedRefreshToken.token }) } ); if (response2.ok) { const data2 = await response2.json(); const { access_token: access_token2, refresh_token: refresh_token2 } = data2; if (refresh_token2) { localStorage.setItem( AUI_REFRESH_TOKEN_NAME, JSON.stringify(refresh_token2) ); } return access_token2; } } else { localStorage.removeItem(AUI_REFRESH_TOKEN_NAME); } } const response = await fetch(`${this.baseUrl}/v1/auth/tokens/anonymous`, { method: "POST" }); if (!response.ok) return null; const data = await response.json(); const { access_token, refresh_token } = data; if (!access_token || !refresh_token) return null; localStorage.setItem( AUI_REFRESH_TOKEN_NAME, JSON.stringify(refresh_token) ); return access_token; }); } async getAuthHeaders() { return this.jwtStrategy.getAuthHeaders(); } readAuthHeaders(headers) { this.jwtStrategy.readAuthHeaders(headers); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { AssistantCloudAPIKeyAuthStrategy, AssistantCloudAnonymousAuthStrategy, AssistantCloudJWTAuthStrategy }); //# sourceMappingURL=AssistantCloudAuthStrategy.js.map