UNPKG

supakit

Version:

A Supabase auth helper for SvelteKit.

45 lines (44 loc) 2.27 kB
import { createClient } from "@supabase/supabase-js"; import { env } from '$env/dynamic/public'; import { decodeBase64URL, isAuthToken } from '../utils.js'; import { CookieStorage } from "./storage.js"; import { getSupabaseServerClientOptions } from '../config/index.js'; export const locals = (async ({ event, resolve }) => { const { cookies, locals } = event; const temp_session = cookies.get('sb-temp-session') ? JSON.parse(cookies.get('sb-temp-session') || '') : null; const auth_cookie_exists = cookies.getAll().find(cookie => isAuthToken(cookie.name)); const session = auth_cookie_exists ? JSON.parse(cookies.get(auth_cookie_exists.name) || '') : temp_session; const provider_token = cookies.get('sb-provider-token') ? JSON.parse(cookies.get('sb-provider-token') || '') : null; const provider_refresh_token = cookies.get('sb-provider-refresh-token') ? JSON.parse(cookies.get('sb-provider-refresh-token') || '') : null; const { client_options, cookie_options } = getSupabaseServerClientOptions(); const jwt = session ? JSON.parse(decodeBase64URL(session.access_token.split('.')[1])) : null; locals.cookie_options = cookie_options; locals.session = session ? { provider_token, provider_refresh_token, access_token: session.access_token, refresh_token: session.refresh_token, expires_in: Math.floor(jwt.exp - (Date.now() / 1000)), expires_at: jwt.exp, token_type: 'bearer', user: session.user } : null; locals.supabase = locals.supabase ?? createClient(env.PUBLIC_SUPABASE_URL || '', env.PUBLIC_SUPABASE_ANON_KEY || '', { auth: { autoRefreshToken: false, detectSessionInUrl: false, persistSession: true, storage: new CookieStorage({ cookies, cookie_options }), flowType: client_options?.auth?.flowType ?? 'pkce', debug: client_options?.auth?.debug ?? false, ...(cookie_options?.name ? { storageKey: cookie_options.name } : {}) } }); if (session) { await locals.supabase.auth.setSession({ access_token: session.access_token, refresh_token: session.refresh_token }); } return await resolve(event); });