UNPKG

better-auth

Version:

The most comprehensive authentication framework for TypeScript.

51 lines (49 loc) 1.87 kB
import { setOAuthState } from "../api/middlewares/oauth.mjs"; import { generateRandomString } from "../crypto/random.mjs"; import "../crypto/index.mjs"; import { StateError, generateGenericState, parseGenericState } from "../state.mjs"; import { APIError } from "better-call"; //#region src/oauth2/state.ts async function generateState(c, link, additionalData) { const callbackURL = c.body?.callbackURL || c.context.options.baseURL; if (!callbackURL) throw new APIError("BAD_REQUEST", { message: "callbackURL is required" }); const codeVerifier = generateRandomString(128); const stateData = { ...additionalData ? additionalData : {}, callbackURL, codeVerifier, errorURL: c.body?.errorCallbackURL, newUserURL: c.body?.newUserCallbackURL, link, expiresAt: Date.now() + 600 * 1e3, requestSignUp: c.body?.requestSignUp }; await setOAuthState(stateData); try { return generateGenericState(c, stateData); } catch (error) { c.context.logger.error("Failed to create verification", error); throw new APIError("INTERNAL_SERVER_ERROR", { message: "Unable to create verification", cause: error }); } } async function parseState(c) { const state = c.query.state || c.body.state; const errorURL = c.context.options.onAPIError?.errorURL || `${c.context.baseURL}/error`; let parsedData; try { parsedData = await parseGenericState(c, state); } catch (error) { c.context.logger.error("Failed to parse state", error); if (error instanceof StateError && error.code === "state_security_mismatch") throw c.redirect(`${errorURL}?error=state_mismatch`); throw c.redirect(`${errorURL}?error=please_restart_the_process`); } if (!parsedData.errorURL) parsedData.errorURL = errorURL; if (parsedData) await setOAuthState(parsedData); return parsedData; } //#endregion export { generateState, parseState }; //# sourceMappingURL=state.mjs.map