@convex-dev/better-auth
Version:
A Better Auth component for Convex.
43 lines • 2.04 kB
JavaScript
import { createCookieGetter } from "better-auth/cookies";
import { JWT_COOKIE_NAME } from "../plugins/convex";
export const getToken = async (createAuth) => {
const { cookies } = await import("next/headers");
const cookieStore = await cookies();
const auth = createAuth({});
const createCookie = createCookieGetter(auth.options);
const cookie = createCookie(JWT_COOKIE_NAME);
const tokenCookie = cookieStore.get(cookie.name);
// Warn if there's a secure cookie mismatch between Convex and Next.js
if (!tokenCookie?.value) {
const isSecure = cookie.name.startsWith("__Secure-");
const insecureCookieName = cookie.name.replace("__Secure-", "");
const insecureCookie = cookieStore.get(insecureCookieName);
const secureCookieName = isSecure
? cookie.name
: `__Secure-${insecureCookieName}`;
const secureCookie = cookieStore.get(secureCookieName);
if (isSecure && insecureCookie) {
console.warn(`Looking for secure cookie ${cookie.name} but found insecure cookie ${insecureCookie.name}`);
}
if (!isSecure && secureCookie) {
console.warn(`Looking for insecure cookie ${cookie.name} but found secure cookie ${secureCookie.name}`);
}
}
return tokenCookie?.value;
};
const handler = (request, opts) => {
const requestUrl = new URL(request.url);
const convexSiteUrl = opts?.convexSiteUrl ?? process.env.NEXT_PUBLIC_CONVEX_SITE_URL;
if (!convexSiteUrl) {
throw new Error("NEXT_PUBLIC_CONVEX_SITE_URL is not set");
}
const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
const newRequest = new Request(nextUrl, request);
newRequest.headers.set("accept-encoding", "application/json");
return fetch(newRequest, { method: request.method, redirect: "manual" });
};
export const nextJsHandler = (opts) => ({
GET: (request) => handler(request, opts),
POST: (request) => handler(request, opts),
});
//# sourceMappingURL=index.js.map