supakit
Version:
A Supabase auth helper for SvelteKit.
64 lines (63 loc) • 2.09 kB
JavaScript
import { merge, stringToBoolean } from '../utils.js';
import { serialize } from 'cookie';
const COOKIE_DEFAULTS = {
path: '/',
maxAge: 60 * 60 * 24 * 365
};
const SERVER_CLIENT_DEFAULTS = {
auth: {
autoRefreshToken: false,
detectSessionInUrl: false,
flowType: 'pkce'
}
};
let load_client_cookie_options;
let server_client_options;
const SERVER_DEFAULTS = {
cookie_options: COOKIE_DEFAULTS,
client_options: SERVER_CLIENT_DEFAULTS
};
export const rememberMe = () => {
const _get = () => {
const remember_me_cookie = document.cookie
.split('; ')
.find((cookie) => cookie.match('supakit-rememberme'))
?.split('=')[1];
return remember_me_cookie ? stringToBoolean(remember_me_cookie) : _set(true);
};
const _set = (value) => {
document.cookie = serialize('supakit-rememberme', JSON.stringify(value), {
...(server_client_options ?? COOKIE_DEFAULTS),
httpOnly: false,
maxAge: 60 * 60 * 24 * 365 * 100,
sameSite: 'lax'
});
return value;
};
const _toggle = () => {
const current = _get();
return _set(!current);
};
return {
get value() { return _get(); },
set value(v) { _set(v); },
get toggle() { return _toggle(); }
};
};
export const getSupabaseLoadClientCookieOptions = () => {
return load_client_cookie_options ?? COOKIE_DEFAULTS;
};
export const setSupabaseLoadClientCookieOptions = (value) => {
if (typeof value !== 'object')
throw new Error('Cookie options must be an object');
load_client_cookie_options = merge(COOKIE_DEFAULTS, value);
};
export const getSupabaseServerClientOptions = () => {
return server_client_options ?? SERVER_DEFAULTS;
};
export const setSupabaseServerClientOptions = (value) => {
if (typeof value !== 'object')
throw new Error('Server options must be an object');
if (value.client_options || value.cookie_options)
server_client_options = merge(SERVER_DEFAULTS, value);
};