better-auth
Version:
The most comprehensive authentication framework for TypeScript.
89 lines (87 loc) • 3.02 kB
JavaScript
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