import { redirect, type Cookies } from '@sveltejs/kit'; export interface ClientOptions { id: string; secret: string; redirectURI: string; } export interface CallbackOptions { url: URL; cookies: Cookies; cookie: string; authorise: string; redirect?: string; client: ClientOptions; verifier?: string; } export const callback = async (options: CallbackOptions) => { const { url, cookies, cookie, authorise, client } = options; const formData = new FormData(); formData.append('grant_type', 'authorization_code'); formData.append('client_id', client.id); formData.append('client_secret', client.secret); formData.append('redirect_uri', client.redirectURI); formData.append('code', url.searchParams.get('code') || 'null'); if (options.verifier) formData.append('code_verifier', options.verifier); cookies.set( cookie, JSON.stringify( await ( await fetch(authorise, { method: 'POST', body: formData }) ).json() ), { path: '/', maxAge: 31536000 / 2, httpOnly: false, sameSite: 'lax', secure: false } ); redirect(303, options.redirect ?? '/'); };