better-auth 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/base.ts","../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/proxy.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"sourcesContent":["import { createFetch } from \"@better-fetch/fetch\";\nimport type { Auth } from \"../auth\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferRoutes } from \"./path-to-object\";\nimport { createDynamicPathProxy, type AuthProxySignal } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { BetterAuthPlugin } from \"../types/plugins\";\n\n/**\n * used for plugins only\n */\n\nexport const createAuthFetch = (options?: ClientOptions) => {\n\tconst $baseFetch = createFetch();\n\treturn createFetch({\n\t\tmethod: \"GET\",\n\t\t...options,\n\t\tbaseURL: getBaseURL(options?.baseURL).withPath,\n\t\tplugins: [\n\t\t\t...(options?.plugins || []),\n\t\t\t...(options?.authPlugins\n\t\t\t\t?.flatMap((plugin) => plugin($baseFetch).fetchPlugins)\n\t\t\t\t.filter((plugin) => plugin !== undefined) || []),\n\t\t\t...(options?.csrfPlugin !== false ? [csrfPlugin] : []),\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t],\n\t});\n};\n\nexport const createAuthClient = <\n\tO extends ClientOptions = ClientOptions,\n\tAT extends Record<string, any> = {},\n>(\n\toptions?: O,\n\tadditionalActions = {} as AT,\n) => {\n\ttype API = O[\"authPlugins\"] extends Array<any>\n\t\t? (O[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t\t? UnionToIntersection<\n\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\t\t\tplugin: infer Plug;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t? Plug extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? Plug[\"endpoints\"]\n\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t: {}\n\t\t\t\t\t>\n\t\t\t\t: {}) &\n\t\t\t\tAuth[\"api\"]\n\t\t: Auth[\"api\"];\n\n\tconst $fetch = createAuthFetch(options);\n\n\ttype Plugins = O[\"authPlugins\"] extends Array<AuthPlugin>\n\t\t? Array<ReturnType<O[\"authPlugins\"][number]>[\"plugin\"]>\n\t\t: undefined;\n\t//@ts-expect-error\n\tconst { $session, $sessionSignal } = getSessionAtom<{\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t}>($fetch);\n\n\tlet pluginsActions = {} as Record<string, any>;\n\ttype PluginActions = UnionToIntersection<\n\t\tO[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t? //@ts-expect-error\n\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\tactions?: infer R;\n\t\t\t\t}\n\t\t\t\t? R\n\t\t\t\t: {}\n\t\t\t: {}\n\t>;\n\n\tconst pluginProxySignals: AuthProxySignal[] = [];\n\tlet pluginSignals: Record<string, PreinitializedWritableAtom<boolean>> = {};\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {};\n\n\tfor (const plugin of options?.authPlugins || []) {\n\t\tconst pl = plugin($fetch);\n\t\tif (pl.authProxySignal) {\n\t\t\tpluginProxySignals.push(...pl.authProxySignal);\n\t\t}\n\t\tif (pl.actions) {\n\t\t\tpluginsActions = {\n\t\t\t\t...pluginsActions,\n\t\t\t\t...pl.actions,\n\t\t\t};\n\t\t}\n\t\tif (pl.signals) {\n\t\t\tpluginSignals = {\n\t\t\t\t...pluginSignals,\n\t\t\t\t...pl.signals,\n\t\t\t};\n\t\t}\n\t\tif (pl.pathMethods) {\n\t\t\tpluginPathMethods = {\n\t\t\t\t...pluginPathMethods,\n\t\t\t\t...pl.pathMethods,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst actions = {\n\t\t$atoms: {\n\t\t\t$session,\n\t\t},\n\t\t$fetch,\n\t\t...(pluginsActions as object),\n\t\t...additionalActions,\n\t};\n\n\ttype Actions = typeof actions & PluginActions;\n\n\tconst proxy = createDynamicPathProxy(\n\t\tactions,\n\t\t$fetch,\n\t\t{\n\t\t\t...pluginPathMethods,\n\t\t\t\"/sign-out\": \"POST\",\n\t\t},\n\t\t[\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/organization/create\",\n\t\t\t\tatom: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) => path.startsWith(\"/organization\"),\n\t\t\t\tatom: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath.startsWith(\"/sign-up\") ||\n\t\t\t\t\tpath.startsWith(\"/sign-in\"),\n\t\t\t\tatom: \"$sessionSignal\",\n\t\t\t},\n\t\t\t...pluginProxySignals,\n\t\t],\n\t\t{\n\t\t\t$sessionSignal,\n\t\t\t...pluginSignals,\n\t\t},\n\t) as unknown as InferRoutes<API> & Actions;\n\treturn proxy;\n};\n","export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tconsole.error(\"Invalid URL:\", error);\n\t\treturn false;\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn {\n\t\t\tbaseURL: new URL(url).origin,\n\t\t\twithPath: url,\n\t\t};\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn {\n\t\tbaseURL: url,\n\t\twithPath: `${url}${path}`,\n\t};\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\t//@ts-ignore\n\tconst env: any =\n\t\ttypeof process !== \"undefined\"\n\t\t\t? process.env\n\t\t\t: typeof import.meta !== \"undefined\"\n\t\t\t\t? //@ts-ignore\n\t\t\t\t\timport.meta.env\n\t\t\t\t: {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tconst isDev =\n\t\t!fromEnv && (env.NODE_ENV === \"development\" || env.NODE_ENV === \"test\");\n\tif (isDev) {\n\t\treturn {\n\t\t\tbaseURL: \"http://localhost:3000\",\n\t\t\twithPath: \"http://localhost:3000/api/auth\",\n\t\t};\n\t}\n\tthrow new BetterAuthError(\n\t\t\"Could not infer baseURL from environment variables\",\n\t);\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\twindow.location.href = context.data.url;\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { LiteralUnion } from \"../types/helper\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: LiteralUnion<string, \"$sessionSignal\">;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\t$signal?: AuthProxySignal[],\n\t$signals?: Record<string, PreinitializedWritableAtom<boolean>>,\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? undefined : body,\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tconst signal = $signal?.find((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\tconst signalAtom = $signals?.[signal.atom];\n\t\t\t\t\t\tif (!signalAtom) return;\n\t\t\t\t\t\tsignalAtom.set(!signalAtom.get());\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\treturn createProxy() as T;\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, computed, task } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\n\nexport function getSessionAtom<Auth extends BetterAuth>(client: BetterFetch) {\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst $session = computed($signal, () =>\n\t\ttask(async () => {\n\t\t\tconst session = await client(\"/session\", {\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t});\n\t\t\treturn session.data as {\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t} | null;\n\t\t}),\n\t);\n\treturn { $session, $sessionSignal: $signal };\n}\n","import type { UnionToIntersection } from \"../types/helper\";\nimport { createAuthFetch, createAuthClient as createClient } from \"./base\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\n\nexport const createAuthClient = <Option extends ClientOptions>(\n\toptions?: Option,\n) => {\n\tconst $fetch = createAuthFetch(options);\n\tconst signals = options?.authPlugins?.reduce(\n\t\t(acc, plugin) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t...(plugin($fetch).integrations?.svelte?.() || {}),\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, any>,\n\t) as Option[\"authPlugins\"] extends Array<infer Pl>\n\t\t? Pl extends AuthPlugin\n\t\t\t? UnionToIntersection<\n\t\t\t\t\tReturnType<Pl>[\"integrations\"] extends\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tsvelte?: () => infer R;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? R\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttest1: ReturnType<Pl>[\"integrations\"];\n\t\t\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t: {}\n\t\t: {};\n\tconst client = createClient(options, {\n\t\t...signals,\n\t});\n\n\tconst obj = Object.assign(client, {\n\t\t$session: client.$atoms.$session,\n\t});\n\treturn obj;\n};\n"],"mappings":"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","names":["createAuthClient"]}
1
+ {"version":3,"sources":["../src/client/base.ts","../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/proxy.ts","../src/client/session-atom.ts","../src/client/svelte.ts"],"sourcesContent":["import { createFetch } from \"@better-fetch/fetch\";\nimport type { Auth } from \"../auth\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferRoutes } from \"./path-to-object\";\nimport { createDynamicPathProxy, type AuthProxySignal } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { BetterAuthPlugin } from \"../types/plugins\";\n\n/**\n * used for plugins only\n */\n\nexport const createAuthFetch = (options?: ClientOptions) => {\n\tconst $baseFetch = createFetch();\n\treturn createFetch({\n\t\tmethod: \"GET\",\n\t\t...options,\n\t\tbaseURL: getBaseURL(options?.baseURL).withPath,\n\t\tplugins: [\n\t\t\t...(options?.plugins || []),\n\t\t\t...(options?.authPlugins\n\t\t\t\t?.flatMap((plugin) => plugin($baseFetch).fetchPlugins)\n\t\t\t\t.filter((plugin) => plugin !== undefined) || []),\n\t\t\t...(options?.csrfPlugin !== false ? [csrfPlugin] : []),\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t],\n\t});\n};\n\nexport const createAuthClient = <\n\tO extends ClientOptions = ClientOptions,\n\tAT extends Record<string, any> = {},\n>(\n\toptions?: O,\n\tadditionalActions = {} as AT,\n) => {\n\ttype API = O[\"authPlugins\"] extends Array<any>\n\t\t? (O[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t\t? UnionToIntersection<\n\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\t\t\tplugin: infer Plug;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t? Plug extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? Plug[\"endpoints\"]\n\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t: {}\n\t\t\t\t\t>\n\t\t\t\t: {}) &\n\t\t\t\tAuth[\"api\"]\n\t\t: Auth[\"api\"];\n\n\tconst $fetch = createAuthFetch(options);\n\n\ttype Plugins = O[\"authPlugins\"] extends Array<AuthPlugin>\n\t\t? Array<ReturnType<O[\"authPlugins\"][number]>[\"plugin\"]>\n\t\t: undefined;\n\t//@ts-expect-error\n\tconst { $session, $sessionSignal } = getSessionAtom<{\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t}>($fetch);\n\n\tlet pluginsActions = {} as Record<string, any>;\n\ttype PluginActions = UnionToIntersection<\n\t\tO[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t? //@ts-expect-error\n\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\tactions?: infer R;\n\t\t\t\t}\n\t\t\t\t? R\n\t\t\t\t: {}\n\t\t\t: {}\n\t>;\n\n\tconst pluginProxySignals: AuthProxySignal[] = [];\n\tlet pluginSignals: Record<string, PreinitializedWritableAtom<boolean>> = {};\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {};\n\n\tfor (const plugin of options?.authPlugins || []) {\n\t\tconst pl = plugin($fetch);\n\t\tif (pl.authProxySignal) {\n\t\t\tpluginProxySignals.push(...pl.authProxySignal);\n\t\t}\n\t\tif (pl.actions) {\n\t\t\tpluginsActions = {\n\t\t\t\t...pluginsActions,\n\t\t\t\t...pl.actions,\n\t\t\t};\n\t\t}\n\t\tif (pl.signals) {\n\t\t\tpluginSignals = {\n\t\t\t\t...pluginSignals,\n\t\t\t\t...pl.signals,\n\t\t\t};\n\t\t}\n\t\tif (pl.pathMethods) {\n\t\t\tpluginPathMethods = {\n\t\t\t\t...pluginPathMethods,\n\t\t\t\t...pl.pathMethods,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst actions = {\n\t\t$atoms: {\n\t\t\t$session,\n\t\t},\n\t\t$fetch,\n\t\t...(pluginsActions as object),\n\t\t...additionalActions,\n\t};\n\n\ttype Actions = typeof actions & PluginActions;\n\n\tconst proxy = createDynamicPathProxy(\n\t\tactions,\n\t\t$fetch,\n\t\t{\n\t\t\t...pluginPathMethods,\n\t\t\t\"/sign-out\": \"POST\",\n\t\t},\n\t\t[\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/organization/create\",\n\t\t\t\tatom: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) => path.startsWith(\"/organization\"),\n\t\t\t\tatom: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath.startsWith(\"/sign-up\") ||\n\t\t\t\t\tpath.startsWith(\"/sign-in\"),\n\t\t\t\tatom: \"$sessionSignal\",\n\t\t\t},\n\t\t\t...pluginProxySignals,\n\t\t],\n\t\t{\n\t\t\t$sessionSignal,\n\t\t\t...pluginSignals,\n\t\t},\n\t) as unknown as InferRoutes<API> & Actions;\n\treturn proxy;\n};\n","export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tconsole.error(\"Invalid URL:\", error);\n\t\treturn false;\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn {\n\t\t\tbaseURL: new URL(url).origin,\n\t\t\twithPath: url,\n\t\t};\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn {\n\t\tbaseURL: url,\n\t\twithPath: `${url}${path}`,\n\t};\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tconst isDev =\n\t\t!fromEnv && (env.NODE_ENV === \"development\" || env.NODE_ENV === \"test\");\n\tif (isDev) {\n\t\treturn {\n\t\t\tbaseURL: \"http://localhost:3000\",\n\t\t\twithPath: \"http://localhost:3000/api/auth\",\n\t\t};\n\t}\n\tthrow new BetterAuthError(\n\t\t\"Could not infer baseURL from environment variables\",\n\t);\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\twindow.location.href = context.data.url;\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { LiteralUnion } from \"../types/helper\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: LiteralUnion<string, \"$sessionSignal\">;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\t$signal?: AuthProxySignal[],\n\t$signals?: Record<string, PreinitializedWritableAtom<boolean>>,\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? undefined : body,\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tconst signal = $signal?.find((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\tconst signalAtom = $signals?.[signal.atom];\n\t\t\t\t\t\tif (!signalAtom) return;\n\t\t\t\t\t\tsignalAtom.set(!signalAtom.get());\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\treturn createProxy() as T;\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, computed, task } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\n\nexport function getSessionAtom<Auth extends BetterAuth>(client: BetterFetch) {\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst $session = computed($signal, () =>\n\t\ttask(async () => {\n\t\t\tconst session = await client(\"/session\", {\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t});\n\t\t\treturn session.data as {\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t} | null;\n\t\t}),\n\t);\n\treturn { $session, $sessionSignal: $signal };\n}\n","import type { UnionToIntersection } from \"../types/helper\";\nimport { createAuthFetch, createAuthClient as createClient } from \"./base\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\n\nexport const createAuthClient = <Option extends ClientOptions>(\n\toptions?: Option,\n) => {\n\tconst $fetch = createAuthFetch(options);\n\tconst signals = options?.authPlugins?.reduce(\n\t\t(acc, plugin) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t...(plugin($fetch).integrations?.svelte?.() || {}),\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, any>,\n\t) as Option[\"authPlugins\"] extends Array<infer Pl>\n\t\t? Pl extends AuthPlugin\n\t\t\t? UnionToIntersection<\n\t\t\t\t\tReturnType<Pl>[\"integrations\"] extends\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tsvelte?: () => infer R;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? R\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttest1: ReturnType<Pl>[\"integrations\"];\n\t\t\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t: {}\n\t\t: {};\n\tconst client = createClient(options, {\n\t\t...signals,\n\t});\n\n\tconst obj = Object.assign(client, {\n\t\t$session: client.$atoms.$session,\n\t});\n\treturn obj;\n};\n"],"mappings":"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","names":["createAuthClient"]}
package/dist/vue.js CHANGED
@@ -39,10 +39,7 @@ function getBaseURL(url, path) {
39
39
  if (url) {
40
40
  return withPath(url, path);
41
41
  }
42
- const env = typeof process !== "undefined" ? process.env : typeof import.meta !== "undefined" ? (
43
- //@ts-ignore
44
- import.meta.env
45
- ) : {};
42
+ const env = typeof process !== "undefined" ? process.env : {};
46
43
  const fromEnv = env.BETTER_AUTH_URL || env.AUTH_URL || env.NEXT_PUBLIC_AUTH_URL || env.NEXT_PUBLIC_BETTER_AUTH_URL || env.PUBLIC_AUTH_URL || env.PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_AUTH_URL;
47
44
  if (fromEnv) {
48
45
  return withPath(fromEnv, path);
package/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/vue.ts","../src/client/base.ts","../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/proxy.ts","../src/client/session-atom.ts"],"sourcesContent":["import { useStore } from \"@nanostores/vue\";\nimport { createAuthFetch, createAuthClient as createClient } from \"./base\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nexport const createAuthClient = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createAuthFetch(options);\n\tconst hooks = options?.authPlugins?.reduce(\n\t\t(acc, plugin) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t...(plugin($fetch).integrations?.vue?.(useStore) || {}),\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, any>,\n\t) as O[\"authPlugins\"] extends Array<infer Pl>\n\t\t? Pl extends AuthPlugin\n\t\t\t? UnionToIntersection<\n\t\t\t\t\tReturnType<Pl>[\"integrations\"] extends\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tvue?: (useStore: any) => infer R;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? R\n\t\t\t\t\t\t: {}\n\t\t\t\t>\n\t\t\t: {}\n\t\t: {};\n\tconst client = createClient(options, hooks);\n\tfunction useSession() {\n\t\treturn useStore(client.$atoms.$session);\n\t}\n\tconst obj = Object.assign(client, {\n\t\tuseSession,\n\t\t...hooks,\n\t});\n\treturn obj;\n};\n\nexport const useAuthStore = useStore;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport type { Auth } from \"../auth\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferRoutes } from \"./path-to-object\";\nimport { createDynamicPathProxy, type AuthProxySignal } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { BetterAuthPlugin } from \"../types/plugins\";\n\n/**\n * used for plugins only\n */\n\nexport const createAuthFetch = (options?: ClientOptions) => {\n\tconst $baseFetch = createFetch();\n\treturn createFetch({\n\t\tmethod: \"GET\",\n\t\t...options,\n\t\tbaseURL: getBaseURL(options?.baseURL).withPath,\n\t\tplugins: [\n\t\t\t...(options?.plugins || []),\n\t\t\t...(options?.authPlugins\n\t\t\t\t?.flatMap((plugin) => plugin($baseFetch).fetchPlugins)\n\t\t\t\t.filter((plugin) => plugin !== undefined) || []),\n\t\t\t...(options?.csrfPlugin !== false ? [csrfPlugin] : []),\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t],\n\t});\n};\n\nexport const createAuthClient = <\n\tO extends ClientOptions = ClientOptions,\n\tAT extends Record<string, any> = {},\n>(\n\toptions?: O,\n\tadditionalActions = {} as AT,\n) => {\n\ttype API = O[\"authPlugins\"] extends Array<any>\n\t\t? (O[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t\t? UnionToIntersection<\n\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\t\t\tplugin: infer Plug;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t? Plug extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? Plug[\"endpoints\"]\n\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t: {}\n\t\t\t\t\t>\n\t\t\t\t: {}) &\n\t\t\t\tAuth[\"api\"]\n\t\t: Auth[\"api\"];\n\n\tconst $fetch = createAuthFetch(options);\n\n\ttype Plugins = O[\"authPlugins\"] extends Array<AuthPlugin>\n\t\t? Array<ReturnType<O[\"authPlugins\"][number]>[\"plugin\"]>\n\t\t: undefined;\n\t//@ts-expect-error\n\tconst { $session, $sessionSignal } = getSessionAtom<{\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t}>($fetch);\n\n\tlet pluginsActions = {} as Record<string, any>;\n\ttype PluginActions = UnionToIntersection<\n\t\tO[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t? //@ts-expect-error\n\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\tactions?: infer R;\n\t\t\t\t}\n\t\t\t\t? R\n\t\t\t\t: {}\n\t\t\t: {}\n\t>;\n\n\tconst pluginProxySignals: AuthProxySignal[] = [];\n\tlet pluginSignals: Record<string, PreinitializedWritableAtom<boolean>> = {};\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {};\n\n\tfor (const plugin of options?.authPlugins || []) {\n\t\tconst pl = plugin($fetch);\n\t\tif (pl.authProxySignal) {\n\t\t\tpluginProxySignals.push(...pl.authProxySignal);\n\t\t}\n\t\tif (pl.actions) {\n\t\t\tpluginsActions = {\n\t\t\t\t...pluginsActions,\n\t\t\t\t...pl.actions,\n\t\t\t};\n\t\t}\n\t\tif (pl.signals) {\n\t\t\tpluginSignals = {\n\t\t\t\t...pluginSignals,\n\t\t\t\t...pl.signals,\n\t\t\t};\n\t\t}\n\t\tif (pl.pathMethods) {\n\t\t\tpluginPathMethods = {\n\t\t\t\t...pluginPathMethods,\n\t\t\t\t...pl.pathMethods,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst actions = {\n\t\t$atoms: {\n\t\t\t$session,\n\t\t},\n\t\t$fetch,\n\t\t...(pluginsActions as object),\n\t\t...additionalActions,\n\t};\n\n\ttype Actions = typeof actions & PluginActions;\n\n\tconst proxy = createDynamicPathProxy(\n\t\tactions,\n\t\t$fetch,\n\t\t{\n\t\t\t...pluginPathMethods,\n\t\t\t\"/sign-out\": \"POST\",\n\t\t},\n\t\t[\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/organization/create\",\n\t\t\t\tatom: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) => path.startsWith(\"/organization\"),\n\t\t\t\tatom: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath.startsWith(\"/sign-up\") ||\n\t\t\t\t\tpath.startsWith(\"/sign-in\"),\n\t\t\t\tatom: \"$sessionSignal\",\n\t\t\t},\n\t\t\t...pluginProxySignals,\n\t\t],\n\t\t{\n\t\t\t$sessionSignal,\n\t\t\t...pluginSignals,\n\t\t},\n\t) as unknown as InferRoutes<API> & Actions;\n\treturn proxy;\n};\n","export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tconsole.error(\"Invalid URL:\", error);\n\t\treturn false;\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn {\n\t\t\tbaseURL: new URL(url).origin,\n\t\t\twithPath: url,\n\t\t};\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn {\n\t\tbaseURL: url,\n\t\twithPath: `${url}${path}`,\n\t};\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\t//@ts-ignore\n\tconst env: any =\n\t\ttypeof process !== \"undefined\"\n\t\t\t? process.env\n\t\t\t: typeof import.meta !== \"undefined\"\n\t\t\t\t? //@ts-ignore\n\t\t\t\t\timport.meta.env\n\t\t\t\t: {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tconst isDev =\n\t\t!fromEnv && (env.NODE_ENV === \"development\" || env.NODE_ENV === \"test\");\n\tif (isDev) {\n\t\treturn {\n\t\t\tbaseURL: \"http://localhost:3000\",\n\t\t\twithPath: \"http://localhost:3000/api/auth\",\n\t\t};\n\t}\n\tthrow new BetterAuthError(\n\t\t\"Could not infer baseURL from environment variables\",\n\t);\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\twindow.location.href = context.data.url;\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { LiteralUnion } from \"../types/helper\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: LiteralUnion<string, \"$sessionSignal\">;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\t$signal?: AuthProxySignal[],\n\t$signals?: Record<string, PreinitializedWritableAtom<boolean>>,\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? undefined : body,\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tconst signal = $signal?.find((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\tconst signalAtom = $signals?.[signal.atom];\n\t\t\t\t\t\tif (!signalAtom) return;\n\t\t\t\t\t\tsignalAtom.set(!signalAtom.get());\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\treturn createProxy() as T;\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, computed, task } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\n\nexport function getSessionAtom<Auth extends BetterAuth>(client: BetterFetch) {\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst $session = computed($signal, () =>\n\t\ttask(async () => {\n\t\t\tconst session = await client(\"/session\", {\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t});\n\t\t\treturn session.data as {\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t} | null;\n\t\t}),\n\t);\n\treturn { $session, $sessionSignal: $signal };\n}\n"],"mappings":"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","names":["createAuthClient"]}
1
+ {"version":3,"sources":["../src/client/vue.ts","../src/client/base.ts","../src/error/better-auth-error.ts","../src/utils/base-url.ts","../src/client/fetch-plugins.ts","../src/client/proxy.ts","../src/client/session-atom.ts"],"sourcesContent":["import { useStore } from \"@nanostores/vue\";\nimport { createAuthFetch, createAuthClient as createClient } from \"./base\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\n\nexport const createAuthClient = <O extends ClientOptions>(options?: O) => {\n\tconst $fetch = createAuthFetch(options);\n\tconst hooks = options?.authPlugins?.reduce(\n\t\t(acc, plugin) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t...(plugin($fetch).integrations?.vue?.(useStore) || {}),\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, any>,\n\t) as O[\"authPlugins\"] extends Array<infer Pl>\n\t\t? Pl extends AuthPlugin\n\t\t\t? UnionToIntersection<\n\t\t\t\t\tReturnType<Pl>[\"integrations\"] extends\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tvue?: (useStore: any) => infer R;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? R\n\t\t\t\t\t\t: {}\n\t\t\t\t>\n\t\t\t: {}\n\t\t: {};\n\tconst client = createClient(options, hooks);\n\tfunction useSession() {\n\t\treturn useStore(client.$atoms.$session);\n\t}\n\tconst obj = Object.assign(client, {\n\t\tuseSession,\n\t\t...hooks,\n\t});\n\treturn obj;\n};\n\nexport const useAuthStore = useStore;\n","import { createFetch } from \"@better-fetch/fetch\";\nimport type { Auth } from \"../auth\";\nimport { getBaseURL } from \"../utils/base-url\";\nimport { addCurrentURL, csrfPlugin, redirectPlugin } from \"./fetch-plugins\";\nimport type { InferRoutes } from \"./path-to-object\";\nimport { createDynamicPathProxy, type AuthProxySignal } from \"./proxy\";\nimport { getSessionAtom } from \"./session-atom\";\nimport type { AuthPlugin, ClientOptions } from \"./type\";\nimport type { UnionToIntersection } from \"../types/helper\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { BetterAuthPlugin } from \"../types/plugins\";\n\n/**\n * used for plugins only\n */\n\nexport const createAuthFetch = (options?: ClientOptions) => {\n\tconst $baseFetch = createFetch();\n\treturn createFetch({\n\t\tmethod: \"GET\",\n\t\t...options,\n\t\tbaseURL: getBaseURL(options?.baseURL).withPath,\n\t\tplugins: [\n\t\t\t...(options?.plugins || []),\n\t\t\t...(options?.authPlugins\n\t\t\t\t?.flatMap((plugin) => plugin($baseFetch).fetchPlugins)\n\t\t\t\t.filter((plugin) => plugin !== undefined) || []),\n\t\t\t...(options?.csrfPlugin !== false ? [csrfPlugin] : []),\n\t\t\tredirectPlugin,\n\t\t\taddCurrentURL,\n\t\t],\n\t});\n};\n\nexport const createAuthClient = <\n\tO extends ClientOptions = ClientOptions,\n\tAT extends Record<string, any> = {},\n>(\n\toptions?: O,\n\tadditionalActions = {} as AT,\n) => {\n\ttype API = O[\"authPlugins\"] extends Array<any>\n\t\t? (O[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t\t? UnionToIntersection<\n\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\t\t\tplugin: infer Plug;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\t? Plug extends BetterAuthPlugin\n\t\t\t\t\t\t\t\t? Plug[\"endpoints\"]\n\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t: {}\n\t\t\t\t\t>\n\t\t\t\t: {}) &\n\t\t\t\tAuth[\"api\"]\n\t\t: Auth[\"api\"];\n\n\tconst $fetch = createAuthFetch(options);\n\n\ttype Plugins = O[\"authPlugins\"] extends Array<AuthPlugin>\n\t\t? Array<ReturnType<O[\"authPlugins\"][number]>[\"plugin\"]>\n\t\t: undefined;\n\t//@ts-expect-error\n\tconst { $session, $sessionSignal } = getSessionAtom<{\n\t\thandler: any;\n\t\tapi: any;\n\t\toptions: {\n\t\t\tdatabase: any;\n\t\t\tplugins: Plugins;\n\t\t};\n\t}>($fetch);\n\n\tlet pluginsActions = {} as Record<string, any>;\n\ttype PluginActions = UnionToIntersection<\n\t\tO[\"authPlugins\"] extends Array<infer Pl>\n\t\t\t? //@ts-expect-error\n\t\t\t\tReturnType<Pl> extends {\n\t\t\t\t\tactions?: infer R;\n\t\t\t\t}\n\t\t\t\t? R\n\t\t\t\t: {}\n\t\t\t: {}\n\t>;\n\n\tconst pluginProxySignals: AuthProxySignal[] = [];\n\tlet pluginSignals: Record<string, PreinitializedWritableAtom<boolean>> = {};\n\tlet pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {};\n\n\tfor (const plugin of options?.authPlugins || []) {\n\t\tconst pl = plugin($fetch);\n\t\tif (pl.authProxySignal) {\n\t\t\tpluginProxySignals.push(...pl.authProxySignal);\n\t\t}\n\t\tif (pl.actions) {\n\t\t\tpluginsActions = {\n\t\t\t\t...pluginsActions,\n\t\t\t\t...pl.actions,\n\t\t\t};\n\t\t}\n\t\tif (pl.signals) {\n\t\t\tpluginSignals = {\n\t\t\t\t...pluginSignals,\n\t\t\t\t...pl.signals,\n\t\t\t};\n\t\t}\n\t\tif (pl.pathMethods) {\n\t\t\tpluginPathMethods = {\n\t\t\t\t...pluginPathMethods,\n\t\t\t\t...pl.pathMethods,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst actions = {\n\t\t$atoms: {\n\t\t\t$session,\n\t\t},\n\t\t$fetch,\n\t\t...(pluginsActions as object),\n\t\t...additionalActions,\n\t};\n\n\ttype Actions = typeof actions & PluginActions;\n\n\tconst proxy = createDynamicPathProxy(\n\t\tactions,\n\t\t$fetch,\n\t\t{\n\t\t\t...pluginPathMethods,\n\t\t\t\"/sign-out\": \"POST\",\n\t\t},\n\t\t[\n\t\t\t{\n\t\t\t\tmatcher: (path) => path === \"/organization/create\",\n\t\t\t\tatom: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) => path.startsWith(\"/organization\"),\n\t\t\t\tatom: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath.startsWith(\"/sign-up\") ||\n\t\t\t\t\tpath.startsWith(\"/sign-in\"),\n\t\t\t\tatom: \"$sessionSignal\",\n\t\t\t},\n\t\t\t...pluginProxySignals,\n\t\t],\n\t\t{\n\t\t\t$sessionSignal,\n\t\t\t...pluginSignals,\n\t\t},\n\t) as unknown as InferRoutes<API> & Actions;\n\treturn proxy;\n};\n","export class BetterAuthError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t}\n}\n","import { BetterAuthError } from \"../error/better-auth-error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.pathname !== \"/\";\n\t} catch (error) {\n\t\tconsole.error(\"Invalid URL:\", error);\n\t\treturn false;\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn {\n\t\t\tbaseURL: new URL(url).origin,\n\t\t\twithPath: url,\n\t\t};\n\t}\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn {\n\t\tbaseURL: url,\n\t\twithPath: `${url}${path}`,\n\t};\n}\n\nexport function getBaseURL(url?: string, path?: string) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\tconst env: any = typeof process !== \"undefined\" ? process.env : {};\n\tconst fromEnv =\n\t\tenv.BETTER_AUTH_URL ||\n\t\tenv.AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_AUTH_URL ||\n\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.PUBLIC_AUTH_URL ||\n\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\tenv.NUXT_PUBLIC_AUTH_URL;\n\tif (fromEnv) {\n\t\treturn withPath(fromEnv, path);\n\t}\n\n\tconst isDev =\n\t\t!fromEnv && (env.NODE_ENV === \"development\" || env.NODE_ENV === \"test\");\n\tif (isDev) {\n\t\treturn {\n\t\t\tbaseURL: \"http://localhost:3000\",\n\t\t\twithPath: \"http://localhost:3000/api/auth\",\n\t\t};\n\t}\n\tthrow new BetterAuthError(\n\t\t\"Could not infer baseURL from environment variables\",\n\t);\n}\n","import { type BetterFetchPlugin, betterFetch } from \"@better-fetch/fetch\";\nimport { BetterAuthError } from \"../error/better-auth-error\";\n\nexport const redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: {\n\t\tonSuccess(context) {\n\t\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\t\twindow.location.href = context.data.url;\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const addCurrentURL = {\n\tid: \"add-current-url\",\n\tname: \"Add current URL\",\n\thooks: {\n\t\tonRequest(context) {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tconst url = new URL(context.url);\n\t\t\t\turl.searchParams.set(\"currentURL\", window.location.href);\n\t\t\t\tcontext.url = url;\n\t\t\t}\n\t\t\treturn context;\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n\nexport const csrfPlugin = {\n\tid: \"csrf\",\n\tname: \"CSRF Check\",\n\tasync init(url, options) {\n\t\tif (options?.method !== \"GET\") {\n\t\t\toptions = options || {};\n\t\t\tconst { data, error } = await betterFetch<{\n\t\t\t\tcsrfToken: string;\n\t\t\t}>(\"/csrf\", {\n\t\t\t\tbody: undefined,\n\t\t\t\tbaseURL: options.baseURL,\n\t\t\t\tplugins: [],\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tcredentials: \"include\",\n\t\t\t});\n\t\t\tif (error?.status === 404) {\n\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\"Route not found. Make sure the server is running and the base URL is correct and includes the path (e.g. http://localhost:3000/api/auth).\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tthrow new BetterAuthError(error.message || \"Failed to get CSRF token.\");\n\t\t\t}\n\t\t\toptions.body = {\n\t\t\t\t...options?.body,\n\t\t\t\tcsrfToken: data.csrfToken,\n\t\t\t};\n\t\t}\n\t\toptions.credentials = \"include\";\n\t\treturn { url, options };\n\t},\n} satisfies BetterFetchPlugin;\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport type { ProxyRequest } from \"./path-to-object\";\nimport type { LiteralUnion } from \"../types/helper\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs?: ProxyRequest,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { options, query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (options?.method) {\n\t\treturn options.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport type AuthProxySignal = {\n\tatom: LiteralUnion<string, \"$sessionSignal\">;\n\tmatcher: (path: string) => boolean;\n};\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\t$signal?: AuthProxySignal[],\n\t$signals?: Record<string, PreinitializedWritableAtom<boolean>>,\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(target, prop: string) {\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current: any = routes;\n\t\t\t\tfor (const segment of fullPath) {\n\t\t\t\t\tif (current && typeof current === \"object\" && segment in current) {\n\t\t\t\t\t\tcurrent = current[segment];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrent = undefined;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath =\n\t\t\t\t\t\"/\" +\n\t\t\t\t\tpath\n\t\t\t\t\t\t.map((segment) =>\n\t\t\t\t\t\t\tsegment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"/\");\n\n\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\tconst { query, options, ...body } = arg;\n\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? undefined : body,\n\t\t\t\t\tquery: query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tconst signal = $signal?.find((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\tconst signalAtom = $signals?.[signal.atom];\n\t\t\t\t\t\tif (!signalAtom) return;\n\t\t\t\t\t\tsignalAtom.set(!signalAtom.get());\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\treturn createProxy() as T;\n}\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, computed, task } from \"nanostores\";\nimport type { Auth as BetterAuth } from \"../auth\";\nimport type { Prettify } from \"../types/helper\";\nimport type { InferSession, InferUser } from \"../types/models\";\n\nexport function getSessionAtom<Auth extends BetterAuth>(client: BetterFetch) {\n\ttype UserWithAdditionalFields = InferUser<Auth[\"options\"]>;\n\ttype SessionWithAdditionalFields = InferSession<Auth[\"options\"]>;\n\tconst $signal = atom<boolean>(false);\n\tconst $session = computed($signal, () =>\n\t\ttask(async () => {\n\t\t\tconst session = await client(\"/session\", {\n\t\t\t\tcredentials: \"include\",\n\t\t\t\tmethod: \"GET\",\n\t\t\t});\n\t\t\treturn session.data as {\n\t\t\t\tuser: Prettify<UserWithAdditionalFields>;\n\t\t\t\tsession: Prettify<SessionWithAdditionalFields>;\n\t\t\t} | null;\n\t\t}),\n\t);\n\treturn { $session, $sessionSignal: $signal };\n}\n"],"mappings":"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","names":["createAuthClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-auth",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "Framework-agnostic, batteries included authentication library for typescript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",