UNPKG

better-auth

Version:

The most comprehensive authentication framework for TypeScript.

89 lines (87 loc) 3.02 kB
import { getBaseURL } from "../utils/url.mjs"; import { redirectPlugin } from "./fetch-plugins.mjs"; import { parseJSON } from "./parser.mjs"; import { getSessionAtom } from "./session-atom.mjs"; import { createFetch } from "@better-fetch/fetch"; //#region src/client/config.ts const getClientConfig = (options, loadEnv) => { const isCredentialsSupported = "credentials" in Request.prototype; const baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? "/api/auth"; const pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || []; const lifeCyclePlugin = { id: "lifecycle-hooks", name: "lifecycle-hooks", hooks: { onSuccess: options?.fetchOptions?.onSuccess, onError: options?.fetchOptions?.onError, onRequest: options?.fetchOptions?.onRequest, onResponse: options?.fetchOptions?.onResponse } }; const { onSuccess: _onSuccess, onError: _onError, onRequest: _onRequest, onResponse: _onResponse, ...restOfFetchOptions } = options?.fetchOptions || {}; const $fetch = createFetch({ baseURL, ...isCredentialsSupported ? { credentials: "include" } : {}, method: "GET", jsonParser(text) { if (!text) return null; return parseJSON(text, { strict: false }); }, customFetchImpl: fetch, ...restOfFetchOptions, plugins: [ lifeCyclePlugin, ...restOfFetchOptions.plugins || [], ...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin], ...pluginsFetchPlugins ] }); const { $sessionSignal, session } = getSessionAtom($fetch, options); const plugins = options?.plugins || []; let pluginsActions = {}; let pluginsAtoms = { $sessionSignal, session }; let pluginPathMethods = { "/sign-out": "POST", "/revoke-sessions": "POST", "/revoke-other-sessions": "POST", "/delete-user": "POST" }; const atomListeners = [{ signal: "$sessionSignal", matcher(path) { return path === "/sign-out" || path === "/update-user" || path === "/sign-up/email" || path === "/sign-in/email" || path === "/delete-user" || path === "/verify-email" || path === "/revoke-sessions" || path === "/revoke-session" || path === "/change-email"; } }]; for (const plugin of plugins) { if (plugin.getAtoms) Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch)); if (plugin.pathMethods) Object.assign(pluginPathMethods, plugin.pathMethods); if (plugin.atomListeners) atomListeners.push(...plugin.atomListeners); } const $store = { notify: (signal) => { pluginsAtoms[signal].set(!pluginsAtoms[signal].get()); }, listen: (signal, listener) => { pluginsAtoms[signal].subscribe(listener); }, atoms: pluginsAtoms }; for (const plugin of plugins) if (plugin.getActions) Object.assign(pluginsActions, plugin.getActions?.($fetch, $store, options)); return { get baseURL() { return baseURL; }, pluginsActions, pluginsAtoms, pluginPathMethods, atomListeners, $fetch, $store }; }; //#endregion export { getClientConfig }; //# sourceMappingURL=config.mjs.map