@convex-dev/better-auth
Version:
A Better Auth component for Convex.
59 lines • 2.29 kB
JavaScript
import { createCookieGetter } from "better-auth/cookies";
import { betterFetch } from "@better-fetch/fetch";
import { JWT_COOKIE_NAME } from "../plugins/convex";
import { oneLine } from "common-tags";
export const getCookieName = async (createAuth) => {
const auth = createAuth({});
const createCookie = createCookieGetter(auth.options);
const cookie = createCookie(JWT_COOKIE_NAME);
return cookie.name;
};
const requireConvexSiteUrl = (opts, calledFrom) => {
if (!opts.convexSiteUrl) {
throw new Error(`${calledFrom}: opts.convexSiteUrl is required`);
}
if (opts.verbose) {
console.log(`${calledFrom}: opts.convexSiteUrl: ${opts.convexSiteUrl}`);
}
return opts.convexSiteUrl;
};
export const fetchSession = async (request, opts) => {
if (!request) {
throw new Error("No request found");
}
const convexSiteUrl = requireConvexSiteUrl(opts, "fetchSession");
const { data: session } = await betterFetch("/api/auth/get-session", {
baseURL: convexSiteUrl,
headers: {
cookie: request.headers.get("cookie") ?? "",
},
});
return {
session,
};
};
export const reactStartHandler = (request, opts) => {
const requestUrl = new URL(request.url);
const convexSiteUrl = requireConvexSiteUrl(opts, "reactStartHandler");
const nextUrl = `${convexSiteUrl}${requestUrl.pathname}${requestUrl.search}`;
request.headers.set("accept-encoding", "application/json");
return fetch(nextUrl, new Request(request, { redirect: "manual" }));
};
export const reactStartHelpers = (createAuth, opts) => {
if (!opts.convexSiteUrl) {
throw new Error("opts.convexSiteUrl is required");
}
if (opts.convexSiteUrl.endsWith(".convex.cloud")) {
throw new Error(oneLine(`
opts.convexSiteUrl ends with .convex.cloud, which is your cloud URL.
Use your Convex site URL instead.
https://docs.convex.dev/production/environment-variables#system-environment-variables
`));
}
return {
fetchSession: (request) => fetchSession(request, opts),
reactStartHandler: (request) => reactStartHandler(request, opts),
getCookieName: () => getCookieName(createAuth),
};
};
//# sourceMappingURL=index.js.map