kitcn
Version:
kitcn - React Query integration and CLI tools for Convex
47 lines (44 loc) • 1.47 kB
JavaScript
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 };