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 ?? "/"); };