UNPKG

kitcn

Version:

kitcn - React Query integration and CLI tools for Convex

47 lines (44 loc) 1.47 kB
import { t as JWT_COOKIE_NAME } from "./convex-plugin-BHVCqWTH.js"; import { betterFetch } from "@better-fetch/fetch"; import { getSessionCookie } from "better-auth/cookies"; import * as jose from "jose"; //#region src/auth/internal/token-utils.ts const TRAILING_SLASH_RE = /\/$/; const resolveConvexTokenPath = (basePath) => { return `${basePath && basePath !== "/" ? basePath.replace(TRAILING_SLASH_RE, "") : "/api/auth"}/convex/token`; }; const isTokenExpired = (exp, expirationToleranceSeconds = 60, now = Math.floor(Date.now() / 1e3)) => { if (!exp) return true; return now >= exp - expirationToleranceSeconds; }; //#endregion //#region src/auth/internal/token.ts const getToken = async (siteUrl, headers, opts) => { const fetchToken = async () => { const { data } = await betterFetch(resolveConvexTokenPath(opts?.basePath), { baseURL: siteUrl, headers }); return { isFresh: true, token: data?.token }; }; if (!opts?.jwtCache?.enabled || opts.forceRefresh) return await fetchToken(); const token = getSessionCookie(new Headers(headers), { cookieName: JWT_COOKIE_NAME, cookiePrefix: opts?.cookiePrefix }); if (!token) return await fetchToken(); try { if (!isTokenExpired(jose.decodeJwt(token)?.exp, opts?.jwtCache?.expirationToleranceSeconds ?? 60)) return { isFresh: false, token }; } catch (error) { console.error("Error decoding JWT", error); } return await fetchToken(); }; //#endregion export { getToken as t };