better-auth
Version:
The most comprehensive authentication framework for TypeScript.
58 lines (57 loc) • 1.73 kB
JavaScript
import { parseSetCookieHeader, toCookieOptions } from "../cookies/cookie-utils.mjs";
import { PACKAGE_VERSION } from "../version.mjs";
import { warnIfCookiePluginNotLast } from "./cookie-plugin-guard.mjs";
import { createAuthMiddleware } from "@better-auth/core/api";
//#region src/integrations/tanstack-start-solid.ts
/**
* TanStack Start cookie plugin for Solid.js.
*
* This plugin automatically handles cookie setting for TanStack Start with Solid.js.
* It uses `@tanstack/solid-start-server` to set cookies.
*
* For React, use `better-auth/tanstack-start` instead.
*
* @example
* ```ts
* import { tanstackStartCookies } from "better-auth/tanstack-start/solid";
*
* const auth = betterAuth({
* plugins: [tanstackStartCookies()],
* });
* ```
*/
const tanstackStartCookies = () => {
let hasWarned = false;
return {
id: "tanstack-start-cookies-solid",
version: PACKAGE_VERSION,
hooks: { after: [{
matcher(ctx) {
return true;
},
handler: createAuthMiddleware(async (ctx) => {
if (!hasWarned) {
warnIfCookiePluginNotLast(ctx.context, "tanstack-start-cookies-solid");
hasWarned = true;
}
const returned = ctx.context.responseHeaders;
if ("_flag" in ctx && ctx._flag === "router") return;
if (returned instanceof Headers) {
const setCookies = returned?.get("set-cookie");
if (!setCookies) return;
const parsed = parseSetCookieHeader(setCookies);
const { setCookie } = await import("@tanstack/solid-start/server");
parsed.forEach((value, key) => {
if (!key) return;
try {
setCookie(key, value.value, toCookieOptions(value));
} catch {}
});
return;
}
})
}] }
};
};
//#endregion
export { tanstackStartCookies };