better-auth
Version:
The most comprehensive authentication framework for TypeScript.
52 lines (51 loc) • 2.07 kB
JavaScript
import { getBaseURL, getOrigin, isDynamicBaseURLConfig } from "../utils/url.mjs";
import { getTrustedOrigins, getTrustedProviders, resolveDynamicTrustedProxyHeaders, resolveRequestContext } from "../context/helpers.mjs";
import { getEndpoints, router } from "../api/index.mjs";
import { runWithAdapter } from "@better-auth/core/context";
import { BASE_ERROR_CODES, BetterAuthError } from "@better-auth/core/error";
//#region src/auth/base.ts
const createBetterAuth = (options, initFn) => {
const authContext = initFn(options);
const { api } = getEndpoints(authContext, options);
return {
handler: async (request) => {
const ctx = await authContext;
const basePath = ctx.options.basePath || "/api/auth";
let handlerCtx;
if (isDynamicBaseURLConfig(options.baseURL)) handlerCtx = await resolveRequestContext(ctx, request, resolveDynamicTrustedProxyHeaders(ctx.options));
else {
handlerCtx = Object.create(Object.getPrototypeOf(ctx), Object.getOwnPropertyDescriptors(ctx));
let trustOptions = ctx.options;
if (!ctx.options.baseURL) {
const baseURL = getBaseURL(void 0, basePath, request, void 0, ctx.options.advanced?.trustedProxyHeaders);
if (!baseURL) throw new BetterAuthError("Could not get base URL from request. Please provide a valid base URL.");
handlerCtx.baseURL = baseURL;
handlerCtx.options = {
...ctx.options,
baseURL: getOrigin(baseURL) || void 0
};
trustOptions = handlerCtx.options;
}
handlerCtx.trustedOrigins = await getTrustedOrigins(trustOptions, request);
handlerCtx.trustedProviders = await getTrustedProviders(trustOptions, request);
}
const { handler } = router(handlerCtx, options);
return runWithAdapter(handlerCtx.adapter, () => handler(request));
},
api,
options,
$context: authContext,
$ERROR_CODES: {
...options.plugins?.reduce((acc, plugin) => {
if (plugin.$ERROR_CODES) return {
...acc,
...plugin.$ERROR_CODES
};
return acc;
}, {}),
...BASE_ERROR_CODES
}
};
};
//#endregion
export { createBetterAuth };