@krutai/auth 0.1.1 → 0.1.3
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.
- package/README.md +60 -139
- package/dist/index.d.mts +62 -6
- package/dist/index.d.ts +62 -6
- package/dist/index.js +51570 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +51564 -11
- package/dist/index.mjs.map +1 -1
- package/dist/next-js.d.mts +1 -0
- package/dist/next-js.d.ts +1 -0
- package/dist/next-js.js +7717 -0
- package/dist/next-js.js.map +1 -0
- package/dist/next-js.mjs +7714 -0
- package/dist/next-js.mjs.map +1 -0
- package/dist/react.d.mts +1 -0
- package/dist/react.d.ts +1 -0
- package/dist/react.js +1648 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +1645 -0
- package/dist/react.mjs.map +1 -0
- package/package.json +17 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/@better-auth/core/src/env/env-impl.ts","../../../node_modules/@better-auth/core/src/env/color-depth.ts","../../../node_modules/@better-auth/core/src/env/logger.ts","../../../node_modules/@better-auth/core/src/utils/string.ts","../../../node_modules/@better-auth/core/src/error/index.ts","../../../node_modules/better-auth/src/utils/url.ts","../../../node_modules/better-auth/src/client/fetch-plugins.ts","../../../node_modules/better-auth/src/client/parser.ts","../../../node_modules/nanostores/clean-stores/index.js","../../../node_modules/nanostores/atom/index.js","../../../node_modules/nanostores/lifecycle/index.js","../../../node_modules/nanostores/listen-keys/index.js","../../../node_modules/better-auth/src/client/query.ts","../../../node_modules/better-auth/src/client/broadcast-channel.ts","../../../node_modules/better-auth/src/client/focus-manager.ts","../../../node_modules/better-auth/src/client/online-manager.ts","../../../node_modules/better-auth/src/client/session-refresh.ts","../../../node_modules/better-auth/src/client/session-atom.ts","../../../node_modules/defu/dist/defu.mjs","../../../node_modules/@better-fetch/fetch/src/error.ts","../../../node_modules/@better-fetch/fetch/src/plugins.ts","../../../node_modules/@better-fetch/fetch/src/retry.ts","../../../node_modules/@better-fetch/fetch/src/auth.ts","../../../node_modules/@better-fetch/fetch/src/utils.ts","../../../node_modules/@better-fetch/fetch/src/create-fetch/schema.ts","../../../node_modules/@better-fetch/fetch/src/create-fetch/index.ts","../../../node_modules/@better-fetch/fetch/src/url.ts","../../../node_modules/@better-fetch/fetch/src/fetch.ts","../../../node_modules/better-auth/src/client/config.ts","../../../node_modules/better-auth/src/utils/is-atom.ts","../../../node_modules/better-auth/src/client/proxy.ts","../../../node_modules/better-auth/src/client/react/react-store.ts","../../../node_modules/better-auth/src/client/react/index.ts"],"names":["env","TERM_ENVS: Record<string, number>","levelColors: Record<LogLevel, string>","value","value: AuthQueryAtom<T>","message: BroadcastMessage","now","state: SessionRefreshState","session: SessionAtom","_a","getURL","fetch","clearTimeout","parser","pluginPathMethods: Record<string, \"POST\" | \"GET\">","atomListeners: ClientAtomListener[]","defu","getMethod","current: any","useRef","useCallback","useSyncExternalStore","resolvedHooks: Record<string, any>"],"mappings":"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","file":"react.js","sourcesContent":["/// <reference types=\"node\" />\n/// <reference types=\"bun\" />\n//https://github.com/unjs/std-env/blob/main/src/env.ts\n\nconst _envShim = Object.create(null);\n\nexport type EnvObject = Record<string, string | undefined>;\n\nconst _getEnv = (useShim?: boolean) =>\n\tglobalThis.process?.env ||\n\t//@ts-expect-error\n\tglobalThis.Deno?.env.toObject() ||\n\t//@ts-expect-error\n\tglobalThis.__env__ ||\n\t(useShim ? _envShim : globalThis);\n\nexport const env = new Proxy<EnvObject>(_envShim, {\n\tget(_, prop) {\n\t\tconst env = _getEnv();\n\t\treturn env[prop as any] ?? _envShim[prop];\n\t},\n\thas(_, prop) {\n\t\tconst env = _getEnv();\n\t\treturn prop in env || prop in _envShim;\n\t},\n\tset(_, prop, value) {\n\t\tconst env = _getEnv(true);\n\t\tenv[prop as any] = value;\n\t\treturn true;\n\t},\n\tdeleteProperty(_, prop) {\n\t\tif (!prop) {\n\t\t\treturn false;\n\t\t}\n\t\tconst env = _getEnv(true);\n\t\tdelete env[prop as any];\n\t\treturn true;\n\t},\n\townKeys() {\n\t\tconst env = _getEnv(true);\n\t\treturn Object.keys(env);\n\t},\n});\n\nfunction toBoolean(val: boolean | string | undefined) {\n\treturn val ? val !== \"false\" : false;\n}\n\nexport const nodeENV =\n\t(typeof process !== \"undefined\" && process.env && process.env.NODE_ENV) || \"\";\n\n/** Detect if `NODE_ENV` environment variable is `production` */\nexport const isProduction = nodeENV === \"production\";\n\n/** Detect if `NODE_ENV` environment variable is `dev` or `development` */\nexport const isDevelopment = () =>\n\tnodeENV === \"dev\" || nodeENV === \"development\";\n\n/** Detect if `NODE_ENV` environment variable is `test` */\nexport const isTest = () => nodeENV === \"test\" || toBoolean(env.TEST);\n\n/**\n * Get environment variable with fallback\n */\nexport function getEnvVar<Fallback extends string>(\n\tkey: string,\n\tfallback?: Fallback,\n): Fallback extends string ? string : string | undefined {\n\tif (typeof process !== \"undefined\" && process.env) {\n\t\treturn process.env[key] ?? (fallback as any);\n\t}\n\n\t// @ts-expect-error deno\n\tif (typeof Deno !== \"undefined\") {\n\t\t// @ts-expect-error deno\n\t\treturn Deno.env.get(key) ?? (fallback as string);\n\t}\n\n\t// Handle Bun\n\tif (typeof Bun !== \"undefined\") {\n\t\treturn Bun.env[key] ?? (fallback as string);\n\t}\n\n\treturn fallback as any;\n}\n\n/**\n * Get boolean environment variable\n */\nexport function getBooleanEnvVar(key: string, fallback = true): boolean {\n\tconst value = getEnvVar(key);\n\tif (!value) return fallback;\n\treturn value !== \"0\" && value.toLowerCase() !== \"false\" && value !== \"\";\n}\n\n/**\n * Common environment variables used in Better Auth\n */\nexport const ENV = Object.freeze({\n\tget BETTER_AUTH_SECRET() {\n\t\treturn getEnvVar(\"BETTER_AUTH_SECRET\");\n\t},\n\tget AUTH_SECRET() {\n\t\treturn getEnvVar(\"AUTH_SECRET\");\n\t},\n\tget BETTER_AUTH_TELEMETRY() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ID() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY_ID\");\n\t},\n\tget NODE_ENV() {\n\t\treturn getEnvVar(\"NODE_ENV\", \"development\");\n\t},\n\tget PACKAGE_VERSION() {\n\t\treturn getEnvVar(\"PACKAGE_VERSION\", \"0.0.0\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ENDPOINT(): string | undefined {\n\t\treturn getEnvVar(\n\t\t\t\"BETTER_AUTH_TELEMETRY_ENDPOINT\",\n\t\t\timport.meta.env.BETTER_AUTH_TELEMETRY_ENDPOINT,\n\t\t);\n\t},\n});\n","// Source code copied & modified from node internals: https://github.com/nodejs/node/blob/5b32bb1573dace2dd058c05ac4fab1e4e446c775/lib/internal/tty.js#L123\nimport { env, getEnvVar } from \"./env-impl\";\n\nconst COLORS_2 = 1;\nconst COLORS_16 = 4;\nconst COLORS_256 = 8;\nconst COLORS_16m = 24;\n\nconst TERM_ENVS: Record<string, number> = {\n\teterm: COLORS_16,\n\tcons25: COLORS_16,\n\tconsole: COLORS_16,\n\tcygwin: COLORS_16,\n\tdtterm: COLORS_16,\n\tgnome: COLORS_16,\n\thurd: COLORS_16,\n\tjfbterm: COLORS_16,\n\tkonsole: COLORS_16,\n\tkterm: COLORS_16,\n\tmlterm: COLORS_16,\n\tmosh: COLORS_16m,\n\tputty: COLORS_16,\n\tst: COLORS_16,\n\t// http://lists.schmorp.de/pipermail/rxvt-unicode/2016q2/002261.html\n\t\"rxvt-unicode-24bit\": COLORS_16m,\n\t// https://bugs.launchpad.net/terminator/+bug/1030562\n\tterminator: COLORS_16m,\n\t\"xterm-kitty\": COLORS_16m,\n};\n\nconst CI_ENVS_MAP = new Map(\n\tObject.entries({\n\t\tAPPVEYOR: COLORS_256,\n\t\tBUILDKITE: COLORS_256,\n\t\tCIRCLECI: COLORS_16m,\n\t\tDRONE: COLORS_256,\n\t\tGITEA_ACTIONS: COLORS_16m,\n\t\tGITHUB_ACTIONS: COLORS_16m,\n\t\tGITLAB_CI: COLORS_256,\n\t\tTRAVIS: COLORS_256,\n\t}),\n);\n\nconst TERM_ENVS_REG_EXP = [\n\t/ansi/,\n\t/color/,\n\t/linux/,\n\t/direct/,\n\t/^con[0-9]*x[0-9]/,\n\t/^rxvt/,\n\t/^screen/,\n\t/^xterm/,\n\t/^vt100/,\n\t/^vt220/,\n];\n\n// The `getColorDepth` API got inspired by multiple sources such as\n// https://github.com/chalk/supports-color,\n// https://github.com/isaacs/color-support.\nexport function getColorDepth(): number {\n\t// Use level 0-3 to support the same levels as `chalk` does. This is done for\n\t// consistency throughout the ecosystem.\n\tif (getEnvVar(\"FORCE_COLOR\") !== undefined) {\n\t\tswitch (getEnvVar(\"FORCE_COLOR\")) {\n\t\t\tcase \"\":\n\t\t\tcase \"1\":\n\t\t\tcase \"true\":\n\t\t\t\treturn COLORS_16;\n\t\t\tcase \"2\":\n\t\t\t\treturn COLORS_256;\n\t\t\tcase \"3\":\n\t\t\t\treturn COLORS_16m;\n\t\t\tdefault:\n\t\t\t\treturn COLORS_2;\n\t\t}\n\t}\n\n\tif (\n\t\t(getEnvVar(\"NODE_DISABLE_COLORS\") !== undefined &&\n\t\t\tgetEnvVar(\"NODE_DISABLE_COLORS\") !== \"\") ||\n\t\t// See https://no-color.org/\n\t\t(getEnvVar(\"NO_COLOR\") !== undefined && getEnvVar(\"NO_COLOR\") !== \"\") ||\n\t\t// The \"dumb\" special terminal, as defined by terminfo, doesn't support\n\t\t// ANSI color control codes.\n\t\t// See https://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials\n\t\tgetEnvVar(\"TERM\") === \"dumb\"\n\t) {\n\t\treturn COLORS_2;\n\t}\n\n\t// Edge runtime doesn't support `process?.platform` syntax\n\t// if (typeof process !== \"undefined\" && process?.platform === \"win32\") {\n\t// \t// Windows 10 build 14931 (from 2016) has true color support\n\t// \treturn COLORS_16m;\n\t// }\n\n\tif (getEnvVar(\"TMUX\")) {\n\t\treturn COLORS_16m;\n\t}\n\n\t// Azure DevOps\n\tif (\"TF_BUILD\" in env && \"AGENT_NAME\" in env) {\n\t\treturn COLORS_16;\n\t}\n\n\tif (\"CI\" in env) {\n\t\tfor (const { 0: envName, 1: colors } of CI_ENVS_MAP) {\n\t\t\tif (envName in env) {\n\t\t\t\treturn colors;\n\t\t\t}\n\t\t}\n\t\tif (getEnvVar(\"CI_NAME\") === \"codeship\") {\n\t\t\treturn COLORS_256;\n\t\t}\n\t\treturn COLORS_2;\n\t}\n\n\tif (\"TEAMCITY_VERSION\" in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.exec(\n\t\t\tgetEnvVar(\"TEAMCITY_VERSION\"),\n\t\t) !== null\n\t\t\t? COLORS_16\n\t\t\t: COLORS_2;\n\t}\n\n\tswitch (getEnvVar(\"TERM_PROGRAM\")) {\n\t\tcase \"iTerm.app\":\n\t\t\tif (\n\t\t\t\t!getEnvVar(\"TERM_PROGRAM_VERSION\") ||\n\t\t\t\t/^[0-2]\\./.exec(getEnvVar(\"TERM_PROGRAM_VERSION\")) !== null\n\t\t\t) {\n\t\t\t\treturn COLORS_256;\n\t\t\t}\n\t\t\treturn COLORS_16m;\n\t\tcase \"HyperTerm\":\n\t\tcase \"MacTerm\":\n\t\t\treturn COLORS_16m;\n\t\tcase \"Apple_Terminal\":\n\t\t\treturn COLORS_256;\n\t}\n\n\tif (\n\t\tgetEnvVar(\"COLORTERM\") === \"truecolor\" ||\n\t\tgetEnvVar(\"COLORTERM\") === \"24bit\"\n\t) {\n\t\treturn COLORS_16m;\n\t}\n\n\tif (getEnvVar(\"TERM\")) {\n\t\tif (/truecolor/.exec(getEnvVar(\"TERM\")) !== null) {\n\t\t\treturn COLORS_16m;\n\t\t}\n\n\t\tif (/^xterm-256/.exec(getEnvVar(\"TERM\")) !== null) {\n\t\t\treturn COLORS_256;\n\t\t}\n\n\t\tconst termEnv = getEnvVar(\"TERM\").toLowerCase();\n\n\t\tif (TERM_ENVS[termEnv]) {\n\t\t\treturn TERM_ENVS[termEnv];\n\t\t}\n\t\tif (TERM_ENVS_REG_EXP.some((term) => term.exec(termEnv) !== null)) {\n\t\t\treturn COLORS_16;\n\t\t}\n\t}\n\t// Move 16 color COLORTERM below 16m and 256\n\tif (getEnvVar(\"COLORTERM\")) {\n\t\treturn COLORS_16;\n\t}\n\treturn COLORS_2;\n}\n","import { getColorDepth } from \"./color-depth\";\n\nexport const TTY_COLORS = {\n\treset: \"\\x1b[0m\",\n\tbright: \"\\x1b[1m\",\n\tdim: \"\\x1b[2m\",\n\tundim: \"\\x1b[22m\",\n\tunderscore: \"\\x1b[4m\",\n\tblink: \"\\x1b[5m\",\n\treverse: \"\\x1b[7m\",\n\thidden: \"\\x1b[8m\",\n\tfg: {\n\t\tblack: \"\\x1b[30m\",\n\t\tred: \"\\x1b[31m\",\n\t\tgreen: \"\\x1b[32m\",\n\t\tyellow: \"\\x1b[33m\",\n\t\tblue: \"\\x1b[34m\",\n\t\tmagenta: \"\\x1b[35m\",\n\t\tcyan: \"\\x1b[36m\",\n\t\twhite: \"\\x1b[37m\",\n\t},\n\tbg: {\n\t\tblack: \"\\x1b[40m\",\n\t\tred: \"\\x1b[41m\",\n\t\tgreen: \"\\x1b[42m\",\n\t\tyellow: \"\\x1b[43m\",\n\t\tblue: \"\\x1b[44m\",\n\t\tmagenta: \"\\x1b[45m\",\n\t\tcyan: \"\\x1b[46m\",\n\t\twhite: \"\\x1b[47m\",\n\t},\n} as const;\n\nexport type LogLevel = \"debug\" | \"info\" | \"success\" | \"warn\" | \"error\";\n\nexport const levels = [\"debug\", \"info\", \"success\", \"warn\", \"error\"] as const;\n\nexport function shouldPublishLog(\n\tcurrentLogLevel: LogLevel,\n\tlogLevel: LogLevel,\n): boolean {\n\treturn levels.indexOf(logLevel) >= levels.indexOf(currentLogLevel);\n}\n\nexport interface Logger {\n\tdisabled?: boolean | undefined;\n\tdisableColors?: boolean | undefined;\n\tlevel?: Exclude<LogLevel, \"success\"> | undefined;\n\tlog?:\n\t\t| ((\n\t\t\t\tlevel: Exclude<LogLevel, \"success\">,\n\t\t\t\tmessage: string,\n\t\t\t\t...args: any[]\n\t\t ) => void)\n\t\t| undefined;\n}\n\nexport type LogHandlerParams =\n\tParameters<NonNullable<Logger[\"log\"]>> extends [LogLevel, ...infer Rest]\n\t\t? Rest\n\t\t: never;\n\nconst levelColors: Record<LogLevel, string> = {\n\tinfo: TTY_COLORS.fg.blue,\n\tsuccess: TTY_COLORS.fg.green,\n\twarn: TTY_COLORS.fg.yellow,\n\terror: TTY_COLORS.fg.red,\n\tdebug: TTY_COLORS.fg.magenta,\n};\n\nconst formatMessage = (\n\tlevel: LogLevel,\n\tmessage: string,\n\tcolorsEnabled: boolean,\n): string => {\n\tconst timestamp = new Date().toISOString();\n\n\tif (colorsEnabled) {\n\t\treturn `${TTY_COLORS.dim}${timestamp}${TTY_COLORS.reset} ${\n\t\t\tlevelColors[level]\n\t\t}${level.toUpperCase()}${TTY_COLORS.reset} ${TTY_COLORS.bright}[Better Auth]:${\n\t\t\tTTY_COLORS.reset\n\t\t} ${message}`;\n\t}\n\n\treturn `${timestamp} ${level.toUpperCase()} [Better Auth]: ${message}`;\n};\n\nexport type InternalLogger = {\n\t[K in LogLevel]: (...params: LogHandlerParams) => void;\n} & {\n\tget level(): LogLevel;\n};\n\nexport const createLogger = (options?: Logger | undefined): InternalLogger => {\n\tconst enabled = options?.disabled !== true;\n\tconst logLevel = options?.level ?? \"warn\";\n\n\tconst isDisableColorsSpecified = options?.disableColors !== undefined;\n\tconst colorsEnabled = isDisableColorsSpecified\n\t\t? !options.disableColors\n\t\t: getColorDepth() !== 1;\n\n\tconst LogFunc = (\n\t\tlevel: LogLevel,\n\t\tmessage: string,\n\t\targs: any[] = [],\n\t): void => {\n\t\tif (!enabled || !shouldPublishLog(logLevel, level)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst formattedMessage = formatMessage(level, message, colorsEnabled);\n\n\t\tif (!options || typeof options.log !== \"function\") {\n\t\t\tif (level === \"error\") {\n\t\t\t\tconsole.error(formattedMessage, ...args);\n\t\t\t} else if (level === \"warn\") {\n\t\t\t\tconsole.warn(formattedMessage, ...args);\n\t\t\t} else {\n\t\t\t\tconsole.log(formattedMessage, ...args);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\toptions.log(level === \"success\" ? \"info\" : level, message, ...args);\n\t};\n\n\tconst logger = Object.fromEntries(\n\t\tlevels.map((level) => [\n\t\t\tlevel,\n\t\t\t(...[message, ...args]: LogHandlerParams) =>\n\t\t\t\tLogFunc(level, message, args),\n\t\t]),\n\t) as Record<LogLevel, (...params: LogHandlerParams) => void>;\n\n\treturn {\n\t\t...logger,\n\t\tget level() {\n\t\t\treturn logLevel;\n\t\t},\n\t};\n};\n\nexport const logger = createLogger();\n","export function capitalizeFirstLetter(str: string) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n","export class BetterAuthError extends Error {\n\tconstructor(message: string, options?: { cause?: unknown | undefined }) {\n\t\tsuper(message, options);\n\t\tthis.name = \"BetterAuthError\";\n\t\tthis.message = message;\n\t\tthis.stack = \"\";\n\t}\n}\n\nexport { BASE_ERROR_CODES } from \"./codes\";\n","import { env } from \"@better-auth/core/env\";\nimport { BetterAuthError } from \"@better-auth/core/error\";\n\nfunction checkHasPath(url: string): boolean {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tconst pathname = parsedUrl.pathname.replace(/\\/+$/, \"\") || \"/\";\n\t\treturn pathname !== \"/\";\n\t} catch {\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t);\n\t}\n}\n\nfunction assertHasProtocol(url: string): void {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tif (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t`Invalid base URL: ${url}. URL must include 'http://' or 'https://'`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof BetterAuthError) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new BetterAuthError(\n\t\t\t`Invalid base URL: ${url}. Please provide a valid base URL.`,\n\t\t\t{\n\t\t\t\tcause: error,\n\t\t\t},\n\t\t);\n\t}\n}\n\nfunction withPath(url: string, path = \"/api/auth\") {\n\tassertHasProtocol(url);\n\n\tconst hasPath = checkHasPath(url);\n\tif (hasPath) {\n\t\treturn url;\n\t}\n\n\tconst trimmedUrl = url.replace(/\\/+$/, \"\");\n\n\tif (!path || path === \"/\") {\n\t\treturn trimmedUrl;\n\t}\n\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedUrl}${path}`;\n}\n\nfunction validateProxyHeader(header: string, type: \"host\" | \"proto\"): boolean {\n\tif (!header || header.trim() === \"\") {\n\t\treturn false;\n\t}\n\n\tif (type === \"proto\") {\n\t\t// Only allow http and https protocols\n\t\treturn header === \"http\" || header === \"https\";\n\t}\n\n\tif (type === \"host\") {\n\t\tconst suspiciousPatterns = [\n\t\t\t/\\.\\./, // Path traversal\n\t\t\t/\\0/, // Null bytes\n\t\t\t/[\\s]/, // Whitespace (except legitimate spaces that should be trimmed)\n\t\t\t/^[.]/, // Starting with dot\n\t\t\t/[<>'\"]/, // HTML/script injection characters\n\t\t\t/javascript:/i, // Protocol injection\n\t\t\t/file:/i, // File protocol\n\t\t\t/data:/i, // Data protocol\n\t\t];\n\n\t\tif (suspiciousPatterns.some((pattern) => pattern.test(header))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Basic hostname validation (allows localhost, IPs, and domains with ports)\n\t\t// This is a simple check, not exhaustive RFC validation\n\t\tconst hostnameRegex =\n\t\t\t/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv4 addresses\n\t\tconst ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}(:[0-9]{1,5})?$/;\n\n\t\t// Also allow IPv6 addresses in brackets\n\t\tconst ipv6Regex = /^\\[[0-9a-fA-F:]+\\](:[0-9]{1,5})?$/;\n\n\t\t// Allow localhost variations\n\t\tconst localhostRegex = /^localhost(:[0-9]{1,5})?$/i;\n\n\t\treturn (\n\t\t\thostnameRegex.test(header) ||\n\t\t\tipv4Regex.test(header) ||\n\t\t\tipv6Regex.test(header) ||\n\t\t\tlocalhostRegex.test(header)\n\t\t);\n\t}\n\n\treturn false;\n}\n\nexport function getBaseURL(\n\turl?: string,\n\tpath?: string,\n\trequest?: Request,\n\tloadEnv?: boolean,\n\ttrustedProxyHeaders?: boolean | undefined,\n) {\n\tif (url) {\n\t\treturn withPath(url, path);\n\t}\n\n\tif (loadEnv !== false) {\n\t\tconst fromEnv =\n\t\t\tenv.BETTER_AUTH_URL ||\n\t\t\tenv.NEXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_BETTER_AUTH_URL ||\n\t\t\tenv.NUXT_PUBLIC_AUTH_URL ||\n\t\t\t(env.BASE_URL !== \"/\" ? env.BASE_URL : undefined);\n\n\t\tif (fromEnv) {\n\t\t\treturn withPath(fromEnv, path);\n\t\t}\n\t}\n\n\tconst fromRequest = request?.headers.get(\"x-forwarded-host\");\n\tconst fromRequestProto = request?.headers.get(\"x-forwarded-proto\");\n\tif (fromRequest && fromRequestProto && trustedProxyHeaders) {\n\t\tif (\n\t\t\tvalidateProxyHeader(fromRequestProto, \"proto\") &&\n\t\t\tvalidateProxyHeader(fromRequest, \"host\")\n\t\t) {\n\t\t\ttry {\n\t\t\t\treturn withPath(`${fromRequestProto}://${fromRequest}`, path);\n\t\t\t} catch (_error) {}\n\t\t}\n\t}\n\n\tif (request) {\n\t\tconst url = getOrigin(request.url);\n\t\tif (!url) {\n\t\t\tthrow new BetterAuthError(\n\t\t\t\t\"Could not get origin from request. Please provide a valid base URL.\",\n\t\t\t);\n\t\t}\n\t\treturn withPath(url, path);\n\t}\n\n\tif (typeof window !== \"undefined\" && window.location) {\n\t\treturn withPath(window.location.origin, path);\n\t}\n\treturn undefined;\n}\n\nexport function getOrigin(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\t// For custom URL schemes (like exp://), the origin property returns the string \"null\"\n\t\t// instead of null. We need to handle this case and return null so the fallback logic works.\n\t\treturn parsedUrl.origin === \"null\" ? null : parsedUrl.origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getProtocol(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.protocol;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function getHost(url: string) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.host;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import type { BetterFetchPlugin } from \"@better-fetch/fetch\";\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\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\t\tif (window.location) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n} satisfies BetterFetchPlugin;\n","const PROTO_POLLUTION_PATTERNS = {\n\tproto:\n\t\t/\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n\tconstructor:\n\t\t/\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n\tprotoShort: /\"__proto__\"\\s*:/,\n\tconstructorShort: /\"constructor\"\\s*:/,\n} as const;\n\nconst JSON_SIGNATURE =\n\t/^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\n\nconst SPECIAL_VALUES = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined: undefined,\n\tnan: Number.NaN,\n\tinfinity: Number.POSITIVE_INFINITY,\n\t\"-infinity\": Number.NEGATIVE_INFINITY,\n} as const;\n\nconst ISO_DATE_REGEX =\n\t/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\n\ntype ParseOptions = {\n\t/** Throw errors instead of returning the original value */\n\tstrict?: boolean | undefined;\n\t/** Log warnings when suspicious patterns are detected */\n\twarnings?: boolean | undefined;\n\t/** Custom reviver function */\n\treviver?: ((key: string, value: any) => any) | undefined;\n\t/** Automatically convert ISO date strings to Date objects */\n\tparseDates?: boolean | undefined;\n};\n\nfunction isValidDate(date: Date): boolean {\n\treturn date instanceof Date && !isNaN(date.getTime());\n}\n\nfunction parseISODate(value: string): Date | null {\n\tconst match = ISO_DATE_REGEX.exec(value);\n\tif (!match) return null;\n\n\tconst [\n\t\t,\n\t\tyear,\n\t\tmonth,\n\t\tday,\n\t\thour,\n\t\tminute,\n\t\tsecond,\n\t\tms,\n\t\toffsetSign,\n\t\toffsetHour,\n\t\toffsetMinute,\n\t] = match;\n\n\tconst date = new Date(\n\t\tDate.UTC(\n\t\t\tparseInt(year!, 10),\n\t\t\tparseInt(month!, 10) - 1,\n\t\t\tparseInt(day!, 10),\n\t\t\tparseInt(hour!, 10),\n\t\t\tparseInt(minute!, 10),\n\t\t\tparseInt(second!, 10),\n\t\t\tms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0,\n\t\t),\n\t);\n\n\tif (offsetSign) {\n\t\tconst offset =\n\t\t\t(parseInt(offsetHour!, 10) * 60 + parseInt(offsetMinute!, 10)) *\n\t\t\t(offsetSign === \"+\" ? -1 : 1);\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + offset);\n\t}\n\n\treturn isValidDate(date) ? date : null;\n}\n\nfunction betterJSONParse<T = unknown>(\n\tvalue: unknown,\n\toptions: ParseOptions = {},\n): T {\n\tconst {\n\t\tstrict = false,\n\t\twarnings = false,\n\t\treviver,\n\t\tparseDates = true,\n\t} = options;\n\n\tif (typeof value !== \"string\") {\n\t\treturn value as T;\n\t}\n\n\tconst trimmed = value.trim();\n\n\tif (\n\t\ttrimmed.length > 0 &&\n\t\ttrimmed[0] === '\"' &&\n\t\ttrimmed.endsWith('\"') &&\n\t\t!trimmed.slice(1, -1).includes('\"')\n\t) {\n\t\treturn trimmed.slice(1, -1) as T;\n\t}\n\n\tconst lowerValue = trimmed.toLowerCase();\n\tif (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) {\n\t\treturn SPECIAL_VALUES[lowerValue as keyof typeof SPECIAL_VALUES] as T;\n\t}\n\n\tif (!JSON_SIGNATURE.test(trimmed)) {\n\t\tif (strict) {\n\t\t\tthrow new SyntaxError(\"[better-json] Invalid JSON\");\n\t\t}\n\t\treturn value as T;\n\t}\n\n\tconst hasProtoPattern = Object.entries(PROTO_POLLUTION_PATTERNS).some(\n\t\t([key, pattern]) => {\n\t\t\tconst matches = pattern.test(trimmed);\n\t\t\tif (matches && warnings) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[better-json] Detected potential prototype pollution attempt using ${key} pattern`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn matches;\n\t\t},\n\t);\n\n\tif (hasProtoPattern && strict) {\n\t\tthrow new Error(\n\t\t\t\"[better-json] Potential prototype pollution attempt detected\",\n\t\t);\n\t}\n\n\ttry {\n\t\tconst secureReviver = (key: string, value: any) => {\n\t\t\tif (\n\t\t\t\tkey === \"__proto__\" ||\n\t\t\t\t(key === \"constructor\" &&\n\t\t\t\t\tvalue &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\"prototype\" in value)\n\t\t\t) {\n\t\t\t\tif (warnings) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[better-json] Dropping \"${key}\" key to prevent prototype pollution`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (parseDates && typeof value === \"string\") {\n\t\t\t\tconst date = parseISODate(value);\n\t\t\t\tif (date) {\n\t\t\t\t\treturn date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn reviver ? reviver(key, value) : value;\n\t\t};\n\n\t\treturn JSON.parse(trimmed, secureReviver);\n\t} catch (error) {\n\t\tif (strict) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn value as T;\n\t}\n}\n\nexport function parseJSON<T = unknown>(\n\tvalue: unknown,\n\toptions: ParseOptions = { strict: true },\n): T {\n\treturn betterJSONParse<T>(value, options);\n}\n","import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n object.events = object.events || {}\n if (!object.events[eventKey + REVERT_MUTATION]) {\n object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n // eslint-disable-next-line no-sequences\n object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n shared: {},\n ...eventProps\n })\n })\n }\n object.events[eventKey] = object.events[eventKey] || []\n object.events[eventKey].push(listener)\n return () => {\n let currentListeners = object.events[eventKey]\n let index = currentListeners.indexOf(listener)\n currentListeners.splice(index, 1)\n if (!currentListeners.length) {\n delete object.events[eventKey]\n object.events[eventKey + REVERT_MUTATION]()\n delete object.events[eventKey + REVERT_MUTATION]\n }\n }\n}\n\nexport let onStart = ($store, listener) =>\n on($store, listener, START, runListeners => {\n let originListen = $store.listen\n $store.listen = arg => {\n if (!$store.lc && !$store.starting) {\n $store.starting = true\n runListeners()\n delete $store.starting\n }\n return originListen(arg)\n }\n return () => {\n $store.listen = originListen\n }\n })\n\nexport let onStop = ($store, listener) =>\n on($store, listener, STOP, runListeners => {\n let originOff = $store.off\n $store.off = () => {\n runListeners()\n originOff()\n }\n return () => {\n $store.off = originOff\n }\n })\n\nexport let onSet = ($store, listener) =>\n on($store, listener, SET, runListeners => {\n let originSet = $store.set\n let originSetKey = $store.setKey\n if ($store.setKey) {\n $store.setKey = (changed, changedValue) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({\n abort,\n changed,\n newValue: { ...$store.value, [changed]: changedValue }\n })\n if (!isAborted) return originSetKey(changed, changedValue)\n }\n }\n $store.set = newValue => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, newValue })\n if (!isAborted) return originSet(newValue)\n }\n return () => {\n $store.set = originSet\n $store.setKey = originSetKey\n }\n })\n\nexport let onNotify = ($store, listener) =>\n on($store, listener, NOTIFY, runListeners => {\n let originNotify = $store.notify\n $store.notify = (oldValue, changed) => {\n let isAborted\n let abort = () => {\n isAborted = true\n }\n\n runListeners({ abort, changed, oldValue })\n if (!isAborted) return originNotify(oldValue, changed)\n }\n return () => {\n $store.notify = originNotify\n }\n })\n\nexport let STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n let listener = payload => {\n let destroy = initialize(payload)\n if (destroy) $store.events[UNMOUNT].push(destroy)\n }\n return on($store, listener, MOUNT, runListeners => {\n let originListen = $store.listen\n $store.listen = (...args) => {\n if (!$store.lc && !$store.active) {\n $store.active = true\n runListeners()\n }\n return originListen(...args)\n }\n\n let originOff = $store.off\n $store.events[UNMOUNT] = []\n $store.off = () => {\n originOff()\n setTimeout(() => {\n if ($store.active && !$store.lc) {\n $store.active = false\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n }\n }, STORE_UNMOUNT_DELAY)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let originClean = $store[clean]\n $store[clean] = () => {\n for (let destroy of $store.events[UNMOUNT]) destroy()\n $store.events[UNMOUNT] = []\n $store.active = false\n originClean()\n }\n }\n\n return () => {\n $store.listen = originListen\n $store.off = originOff\n }\n })\n}\n","export function listenKeys($store, keys, listener) {\n let keysSet = new Set(keys).add(undefined)\n return $store.listen((value, oldValue, changed) => {\n if (keysSet.has(changed)) {\n listener(value, oldValue, changed)\n }\n })\n}\n\nexport function subscribeKeys($store, keys, listener) {\n let unbind = listenKeys($store, keys, listener)\n listener($store.value)\n return unbind\n}\n","import type { ClientFetchOption } from \"@better-auth/core\";\nimport type { BetterFetch, BetterFetchError } from \"@better-fetch/fetch\";\nimport type { PreinitializedWritableAtom } from \"nanostores\";\nimport { atom, onMount } from \"nanostores\";\nimport type { SessionQueryParams } from \"./types\";\n\n// SSR detection\nconst isServer = () => typeof window === \"undefined\";\n\nexport type AuthQueryAtom<T> = PreinitializedWritableAtom<{\n\tdata: null | T;\n\terror: null | BetterFetchError;\n\tisPending: boolean;\n\tisRefetching: boolean;\n\trefetch: (\n\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t) => Promise<void>;\n}>;\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?:\n\t\t| (\n\t\t\t\t| ((value: {\n\t\t\t\t\t\tdata: null | T;\n\t\t\t\t\t\terror: null | BetterFetchError;\n\t\t\t\t\t\tisPending: boolean;\n\t\t\t\t }) => ClientFetchOption)\n\t\t\t\t| ClientFetchOption\n\t\t )\n\t\t| undefined,\n) => {\n\tconst value: AuthQueryAtom<T> = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch: (queryParams) => fn(queryParams),\n\t});\n\n\tconst fn = async (\n\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t) => {\n\t\treturn new Promise<void>((resolve) => {\n\t\t\tconst opts =\n\t\t\t\ttypeof options === \"function\"\n\t\t\t\t\t? options({\n\t\t\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\t\t\terror: value.get().error,\n\t\t\t\t\t\t\tisPending: value.get().isPending,\n\t\t\t\t\t\t})\n\t\t\t\t\t: options;\n\n\t\t\t$fetch<T>(path, {\n\t\t\t\t...opts,\n\t\t\t\tquery: {\n\t\t\t\t\t...opts?.query,\n\t\t\t\t\t...queryParams?.query,\n\t\t\t\t},\n\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tdata: context.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t\t},\n\t\t\t\tasync onError(context) {\n\t\t\t\t\tconst { request } = context;\n\t\t\t\t\tconst retryAttempts =\n\t\t\t\t\t\ttypeof request.retry === \"number\"\n\t\t\t\t\t\t\t? request.retry\n\t\t\t\t\t\t\t: request.retry?.attempts;\n\t\t\t\t\tconst retryAttempt = request.retryAttempt || 0;\n\t\t\t\t\tif (retryAttempts && retryAttempt < retryAttempts) return;\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror: context.error,\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onError?.(context);\n\t\t\t\t},\n\t\t\t\tasync onRequest(context) {\n\t\t\t\t\tconst currentValue = value.get();\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tisPending: currentValue.data === null,\n\t\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisRefetching: true,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t\t},\n\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tresolve(void 0);\n\t\t\t\t});\n\t\t});\n\t};\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet isMounted = false;\n\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe(async () => {\n\t\t\tif (isServer()) {\n\t\t\t\t// On server, don't trigger fetch\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isMounted) {\n\t\t\t\tawait fn();\n\t\t\t} else {\n\t\t\t\tonMount(value, () => {\n\t\t\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\t\t\tif (!isMounted) {\n\t\t\t\t\t\t\tawait fn();\n\t\t\t\t\t\t\tisMounted = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 0);\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tvalue.off();\n\t\t\t\t\t\tinitAtom.off();\n\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\treturn value;\n};\n","export interface BroadcastMessage {\n\tevent?: \"session\" | undefined;\n\tdata?: { trigger?: \"signout\" | \"getSession\" | \"updateUser\" } | undefined;\n\tclientId: string;\n\ttimestamp: number;\n}\n\nexport type BroadcastListener = (message: BroadcastMessage) => void;\n\nexport const kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\n\nconst now = () => Math.floor(Date.now() / 1000);\n\nexport interface BroadcastChannel {\n\tpost(message: Record<string, unknown>): void;\n\tsubscribe(listener: BroadcastListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowBroadcastChannel implements BroadcastChannel {\n\tlisteners = new Set<BroadcastListener>();\n\tprivate name: string;\n\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\n\tsubscribe(listener: BroadcastListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tpost(message: Record<string, unknown>) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tthis.name,\n\t\t\t\tJSON.stringify({ ...message, timestamp: now() }),\n\t\t\t);\n\t\t} catch {}\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst handler = (event: StorageEvent) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message: BroadcastMessage = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\n\t\twindow.addEventListener(\"storage\", handler);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n}\n\nexport function getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!(globalThis as any)[kBroadcastChannel]) {\n\t\t(globalThis as any)[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\t}\n\treturn (globalThis as any)[kBroadcastChannel] as BroadcastChannel;\n}\n","export type FocusListener = (focused: boolean) => void;\n\nexport const kFocusManager = Symbol.for(\"better-auth:focus-manager\");\n\nexport interface FocusManager {\n\tsetFocused(focused: boolean): void;\n\tsubscribe(listener: FocusListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowFocusManager implements FocusManager {\n\tlisteners = new Set<FocusListener>();\n\n\tsubscribe(listener: FocusListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tsetFocused(focused: boolean) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof document === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tthis.setFocused(true);\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\n\t\t\t\t\"visibilitychange\",\n\t\t\t\tvisibilityHandler,\n\t\t\t\tfalse,\n\t\t\t);\n\t\t};\n\t}\n}\n\nexport function getGlobalFocusManager() {\n\tif (!(globalThis as any)[kFocusManager]) {\n\t\t(globalThis as any)[kFocusManager] = new WindowFocusManager();\n\t}\n\treturn (globalThis as any)[kFocusManager] as FocusManager;\n}\n","export type OnlineListener = (online: boolean) => void;\n\nexport const kOnlineManager = Symbol.for(\"better-auth:online-manager\");\n\nexport interface OnlineManager {\n\tsetOnline(online: boolean): void;\n\tisOnline: boolean;\n\n\tsubscribe(listener: OnlineListener): () => void;\n\tsetup(): () => void;\n}\n\nclass WindowOnlineManager implements OnlineManager {\n\tlisteners = new Set<OnlineListener>();\n\tisOnline = typeof navigator !== \"undefined\" ? navigator.onLine : true;\n\n\tsubscribe(listener: OnlineListener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\n\tsetOnline(online: boolean) {\n\t\tthis.isOnline = online;\n\t\tthis.listeners.forEach((listener) => listener(online));\n\t}\n\n\tsetup() {\n\t\tif (\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof window.addEventListener === \"undefined\"\n\t\t) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst onOnline = () => this.setOnline(true);\n\t\tconst onOffline = () => this.setOnline(false);\n\n\t\twindow.addEventListener(\"online\", onOnline, false);\n\t\twindow.addEventListener(\"offline\", onOffline, false);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"online\", onOnline, false);\n\t\t\twindow.removeEventListener(\"offline\", onOffline, false);\n\t\t};\n\t}\n}\n\nexport function getGlobalOnlineManager() {\n\tif (!(globalThis as any)[kOnlineManager]) {\n\t\t(globalThis as any)[kOnlineManager] = new WindowOnlineManager();\n\t}\n\treturn (globalThis as any)[kOnlineManager] as OnlineManager;\n}\n","import type { BetterAuthClientOptions } from \"@better-auth/core\";\nimport type { Session, User } from \"@better-auth/core/db\";\nimport type { BetterFetch, BetterFetchError } from \"@better-fetch/fetch\";\nimport type { WritableAtom } from \"nanostores\";\nimport { getGlobalBroadcastChannel } from \"./broadcast-channel\";\nimport { getGlobalFocusManager } from \"./focus-manager\";\nimport { getGlobalOnlineManager } from \"./online-manager\";\nimport type { AuthQueryAtom } from \"./query\";\n\nconst now = () => Math.floor(Date.now() / 1000);\n\n/**\n * Rate limit: don't refetch on focus if a session request was made within this many seconds\n */\nconst FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;\n\nexport interface SessionRefreshOptions {\n\tsessionAtom: AuthQueryAtom<{\n\t\tuser: User;\n\t\tsession: Session;\n\t}>;\n\tsessionSignal: WritableAtom<boolean>;\n\t$fetch: BetterFetch;\n\toptions?: BetterAuthClientOptions | undefined;\n}\n\ninterface SessionRefreshState {\n\tlastSync: number;\n\tlastSessionRequest: number;\n\tcachedSession: any;\n\tpollInterval?: ReturnType<typeof setInterval> | undefined;\n\tunsubscribeBroadcast?: (() => void) | undefined;\n\tunsubscribeFocus?: (() => void) | undefined;\n\tunsubscribeOnline?: (() => void) | undefined;\n}\n\nexport function createSessionRefreshManager(opts: SessionRefreshOptions) {\n\tconst { sessionAtom, sessionSignal, $fetch, options = {} } = opts;\n\n\tconst refetchInterval = options.sessionOptions?.refetchInterval ?? 0;\n\tconst refetchOnWindowFocus =\n\t\toptions.sessionOptions?.refetchOnWindowFocus ?? true;\n\tconst refetchWhenOffline =\n\t\toptions.sessionOptions?.refetchWhenOffline ?? false;\n\n\tconst state: SessionRefreshState = {\n\t\tlastSync: 0,\n\t\tlastSessionRequest: 0,\n\t\tcachedSession: undefined,\n\t};\n\n\tconst shouldRefetch = (): boolean => {\n\t\treturn refetchWhenOffline || getGlobalOnlineManager().isOnline;\n\t};\n\n\tconst triggerRefetch = (\n\t\tevent?:\n\t\t\t| {\n\t\t\t\t\tevent?: \"poll\" | \"visibilitychange\" | \"storage\";\n\t\t\t }\n\t\t\t| undefined,\n\t) => {\n\t\tif (!shouldRefetch()) return;\n\n\t\tif (event?.event === \"storage\") {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentSession = sessionAtom.get();\n\n\t\tif (event?.event === \"poll\") {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\t$fetch<{\n\t\t\t\tuser: User;\n\t\t\t\tsession: Session;\n\t\t\t}>(\"/get-session\")\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.error) {\n\t\t\t\t\t\tsessionAtom.set({\n\t\t\t\t\t\t\t...currentSession,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: res.error as BetterFetchError | null,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsessionAtom.set({\n\t\t\t\t\t\t\t...currentSession,\n\t\t\t\t\t\t\tdata: res.data,\n\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tstate.lastSync = now();\n\t\t\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\treturn;\n\t\t}\n\n\t\t// Rate limit: don't refetch on focus if a session request was made recently\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tconst timeSinceLastRequest = now() - state.lastSessionRequest;\n\t\t\tif (timeSinceLastRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstate.lastSessionRequest = now();\n\t\t}\n\n\t\tif (\n\t\t\tcurrentSession?.data === null ||\n\t\t\tcurrentSession?.data === undefined ||\n\t\t\tevent?.event === \"visibilitychange\"\n\t\t) {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t}\n\t};\n\n\tconst broadcastSessionUpdate = (\n\t\ttrigger: \"signout\" | \"getSession\" | \"updateUser\",\n\t) => {\n\t\tgetGlobalBroadcastChannel().post({\n\t\t\tevent: \"session\",\n\t\t\tdata: { trigger },\n\t\t\tclientId: Math.random().toString(36).substring(7),\n\t\t});\n\t};\n\n\tconst setupPolling = () => {\n\t\tif (refetchInterval && refetchInterval > 0) {\n\t\t\tstate.pollInterval = setInterval(() => {\n\t\t\t\tconst currentSession = sessionAtom.get();\n\t\t\t\tif (currentSession?.data) {\n\t\t\t\t\ttriggerRefetch({ event: \"poll\" });\n\t\t\t\t}\n\t\t\t}, refetchInterval * 1000);\n\t\t}\n\t};\n\n\tconst setupBroadcast = () => {\n\t\tstate.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"storage\" });\n\t\t});\n\t};\n\n\tconst setupFocusRefetch = () => {\n\t\tif (!refetchOnWindowFocus) return;\n\n\t\tstate.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\n\tconst setupOnlineRefetch = () => {\n\t\tstate.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {\n\t\t\tif (online) {\n\t\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t\t}\n\t\t});\n\t};\n\n\tconst init = () => {\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\n\t\tgetGlobalBroadcastChannel().setup();\n\t\tgetGlobalFocusManager().setup();\n\t\tgetGlobalOnlineManager().setup();\n\t};\n\n\tconst cleanup = () => {\n\t\tif (state.pollInterval) {\n\t\t\tclearInterval(state.pollInterval);\n\t\t\tstate.pollInterval = undefined;\n\t\t}\n\t\tif (state.unsubscribeBroadcast) {\n\t\t\tstate.unsubscribeBroadcast();\n\t\t\tstate.unsubscribeBroadcast = undefined;\n\t\t}\n\t\tif (state.unsubscribeFocus) {\n\t\t\tstate.unsubscribeFocus();\n\t\t\tstate.unsubscribeFocus = undefined;\n\t\t}\n\t\tif (state.unsubscribeOnline) {\n\t\t\tstate.unsubscribeOnline();\n\t\t\tstate.unsubscribeOnline = undefined;\n\t\t}\n\t\tstate.lastSync = 0;\n\t\tstate.lastSessionRequest = 0;\n\t\tstate.cachedSession = undefined;\n\t};\n\n\treturn {\n\t\tinit,\n\t\tcleanup,\n\t\ttriggerRefetch,\n\t\tbroadcastSessionUpdate,\n\t};\n}\n","import type { BetterAuthClientOptions } from \"@better-auth/core\";\nimport type { BetterFetch } from \"@better-fetch/fetch\";\nimport { atom, onMount } from \"nanostores\";\nimport type { Session, User } from \"../types\";\nimport type { AuthQueryAtom } from \"./query\";\nimport { useAuthQuery } from \"./query\";\nimport { createSessionRefreshManager } from \"./session-refresh\";\n\nexport type SessionAtom = AuthQueryAtom<{\n\tuser: User;\n\tsession: Session;\n}>;\n\nexport function getSessionAtom(\n\t$fetch: BetterFetch,\n\toptions?: BetterAuthClientOptions | undefined,\n) {\n\tconst $signal = atom<boolean>(false);\n\tconst session: SessionAtom = useAuthQuery<{\n\t\tuser: User;\n\t\tsession: Session;\n\t}>($signal, \"/get-session\", $fetch, {\n\t\tmethod: \"GET\",\n\t});\n\n\tonMount(session, () => {\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tsessionAtom: session,\n\t\t\tsessionSignal: $signal,\n\t\t\t$fetch,\n\t\t\toptions,\n\t\t});\n\n\t\trefreshManager.init();\n\n\t\treturn () => {\n\t\t\trefreshManager.cleanup();\n\t\t};\n\t});\n\n\treturn {\n\t\tsession,\n\t\t$sessionSignal: $signal,\n\t};\n}\n","function isPlainObject(value) {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n return false;\n }\n if (Symbol.iterator in value) {\n return false;\n }\n if (Symbol.toStringTag in value) {\n return Object.prototype.toString.call(value) === \"[object Module]\";\n }\n return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n if (!isPlainObject(defaults)) {\n return _defu(baseObject, {}, namespace, merger);\n }\n const object = Object.assign({}, defaults);\n for (const key in baseObject) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue;\n }\n const value = baseObject[key];\n if (value === null || value === void 0) {\n continue;\n }\n if (merger && merger(object, key, value, namespace)) {\n continue;\n }\n if (Array.isArray(value) && Array.isArray(object[key])) {\n object[key] = [...value, ...object[key]];\n } else if (isPlainObject(value) && isPlainObject(object[key])) {\n object[key] = _defu(\n value,\n object[key],\n (namespace ? `${namespace}.` : \"\") + key.toString(),\n merger\n );\n } else {\n object[key] = value;\n }\n }\n return object;\n}\nfunction createDefu(merger) {\n return (...arguments_) => (\n // eslint-disable-next-line unicorn/no-array-reduce\n arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n if (object[key] !== void 0 && typeof currentValue === \"function\") {\n object[key] = currentValue(object[key]);\n return true;\n }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n object[key] = currentValue(object[key]);\n return true;\n }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","export class BetterFetchError extends Error {\n\tconstructor(\n\t\tpublic status: number,\n\t\tpublic statusText: string,\n\t\tpublic error: any,\n\t) {\n\t\tsuper(statusText || status.toString(), {\n\t\t\tcause: error,\n\t\t});\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n","import type { StandardSchemaV1 } from \"./standard-schema\";\nimport type { Schema } from \"./create-fetch\";\nimport type { BetterFetchError } from \"./error\";\nimport type { BetterFetchOption } from \"./types\";\n\nexport type RequestContext<T extends Record<string, any> = any> = {\n\turl: URL | string;\n\theaders: Headers;\n\tbody: any;\n\tmethod: string;\n\tsignal: AbortSignal;\n} & BetterFetchOption<any, any, any, T>;\nexport type ResponseContext = {\n\tresponse: Response;\n\trequest: RequestContext;\n};\nexport type SuccessContext<Res = any> = {\n\tdata: Res;\n\tresponse: Response;\n\trequest: RequestContext;\n};\nexport type ErrorContext = {\n\tresponse: Response;\n\trequest: RequestContext;\n\terror: BetterFetchError & Record<string, any>;\n};\nexport interface FetchHooks<Res = any> {\n\t/**\n\t * a callback function that will be called when a\n\t * request is made.\n\t *\n\t * The returned context object will be reassigned to\n\t * the original request context.\n\t */\n\tonRequest?: <T extends Record<string, any>>(\n\t\tcontext: RequestContext<T>,\n\t) => Promise<RequestContext | void> | RequestContext | void;\n\t/**\n\t * a callback function that will be called when\n\t * response is received. This will be called before\n\t * the response is parsed and returned.\n\t *\n\t * The returned response will be reassigned to the\n\t * original response if it's changed.\n\t */\n\tonResponse?: (\n\t\tcontext: ResponseContext,\n\t) =>\n\t\t| Promise<Response | void | ResponseContext>\n\t\t| Response\n\t\t| ResponseContext\n\t\t| void;\n\t/**\n\t * a callback function that will be called when a\n\t * response is successful.\n\t */\n\tonSuccess?: (context: SuccessContext<Res>) => Promise<void> | void;\n\t/**\n\t * a callback function that will be called when an\n\t * error occurs.\n\t */\n\tonError?: (context: ErrorContext) => Promise<void> | void;\n\t/**\n\t * a callback function that will be called when a\n\t * request is retried.\n\t */\n\tonRetry?: (response: ResponseContext) => Promise<void> | void;\n\t/**\n\t * Options for the hooks\n\t */\n\thookOptions?: {\n\t\t/**\n\t\t * Clone the response\n\t\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Response/clone\n\t\t */\n\t\tcloneResponse?: boolean;\n\t};\n}\n\n/**\n * A plugin that returns an id and hooks\n */\nexport type BetterFetchPlugin<\n\tExtraOptions extends Record<string, any> = Record<string, any>,\n> = {\n\t/**\n\t * A unique id for the plugin\n\t */\n\tid: string;\n\t/**\n\t * A name for the plugin\n\t */\n\tname: string;\n\t/**\n\t * A description for the plugin\n\t */\n\tdescription?: string;\n\t/**\n\t * A version for the plugin\n\t */\n\tversion?: string;\n\t/**\n\t * Hooks for the plugin\n\t */\n\thooks?: FetchHooks;\n\t/**\n\t * A function that will be called when the plugin is\n\t * initialized. This will be called before the any\n\t * of the other internal functions.\n\t *\n\t * The returned options will be merged with the\n\t * original options.\n\t */\n\tinit?: (\n\t\turl: string,\n\t\toptions?: BetterFetchOption & ExtraOptions,\n\t) =>\n\t\t| Promise<{\n\t\t\t\turl: string;\n\t\t\t\toptions?: BetterFetchOption;\n\t\t }>\n\t\t| {\n\t\t\t\turl: string;\n\t\t\t\toptions?: BetterFetchOption;\n\t\t };\n\t/**\n\t * A schema for the plugin\n\t */\n\tschema?: Schema;\n\t/**\n\t * Additional options that can be passed to the plugin\n\t *\n\t * @deprecated Use type inference through direct typescript instead\n\t * ```ts\n\t * const plugin = {\n\t *\n\t * } satisfies BetterFetchPlugin<{\n\t * myCustomOptions: string;\n\t * }>\n\t * ```\n\t */\n\tgetOptions?: () => StandardSchemaV1;\n};\n\nexport const initializePlugins = async (\n\turl: string,\n\toptions?: BetterFetchOption,\n) => {\n\tlet opts = options || {};\n\tconst hooks: {\n\t\tonRequest: Array<FetchHooks[\"onRequest\"]>;\n\t\tonResponse: Array<FetchHooks[\"onResponse\"]>;\n\t\tonSuccess: Array<FetchHooks[\"onSuccess\"]>;\n\t\tonError: Array<FetchHooks[\"onError\"]>;\n\t\tonRetry: Array<FetchHooks[\"onRetry\"]>;\n\t} = {\n\t\tonRequest: [options?.onRequest],\n\t\tonResponse: [options?.onResponse],\n\t\tonSuccess: [options?.onSuccess],\n\t\tonError: [options?.onError],\n\t\tonRetry: [options?.onRetry],\n\t};\n\tif (!options || !options?.plugins) {\n\t\treturn {\n\t\t\turl,\n\t\t\toptions: opts,\n\t\t\thooks,\n\t\t};\n\t}\n\tfor (const plugin of options?.plugins || []) {\n\t\tif (plugin.init) {\n\t\t\tconst pluginRes = await plugin.init?.(url.toString(), options);\n\t\t\topts = pluginRes.options || opts;\n\t\t\turl = pluginRes.url;\n\t\t}\n\t\thooks.onRequest.push(plugin.hooks?.onRequest);\n\t\thooks.onResponse.push(plugin.hooks?.onResponse);\n\t\thooks.onSuccess.push(plugin.hooks?.onSuccess);\n\t\thooks.onError.push(plugin.hooks?.onError);\n\t\thooks.onRetry.push(plugin.hooks?.onRetry);\n\t}\n\n\treturn {\n\t\turl,\n\t\toptions: opts,\n\t\thooks,\n\t};\n};\n","export type RetryCondition = (\n\tresponse: Response | null,\n) => boolean | Promise<boolean>;\n\nexport type LinearRetry = {\n\ttype: \"linear\";\n\tattempts: number;\n\tdelay: number;\n\tshouldRetry?: RetryCondition;\n};\n\nexport type ExponentialRetry = {\n\ttype: \"exponential\";\n\tattempts: number;\n\tbaseDelay: number;\n\tmaxDelay: number;\n\tshouldRetry?: RetryCondition;\n};\n\nexport type RetryOptions = LinearRetry | ExponentialRetry | number;\n\nexport interface RetryStrategy {\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean>;\n\tgetDelay(attempt: number): number;\n}\n\nclass LinearRetryStrategy implements RetryStrategy {\n\tconstructor(private options: LinearRetry) {}\n\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean> {\n\t\tif (this.options.shouldRetry) {\n\t\t\treturn Promise.resolve(\n\t\t\t\tattempt < this.options.attempts && this.options.shouldRetry(response),\n\t\t\t);\n\t\t}\n\t\treturn Promise.resolve(attempt < this.options.attempts);\n\t}\n\n\tgetDelay(): number {\n\t\treturn this.options.delay;\n\t}\n}\n\nclass ExponentialRetryStrategy implements RetryStrategy {\n\tconstructor(private options: ExponentialRetry) {}\n\n\tshouldAttemptRetry(\n\t\tattempt: number,\n\t\tresponse: Response | null,\n\t): Promise<boolean> {\n\t\tif (this.options.shouldRetry) {\n\t\t\treturn Promise.resolve(\n\t\t\t\tattempt < this.options.attempts && this.options.shouldRetry(response),\n\t\t\t);\n\t\t}\n\t\treturn Promise.resolve(attempt < this.options.attempts);\n\t}\n\n\tgetDelay(attempt: number): number {\n\t\tconst delay = Math.min(\n\t\t\tthis.options.maxDelay,\n\t\t\tthis.options.baseDelay * 2 ** attempt,\n\t\t);\n\t\treturn delay;\n\t}\n}\n\nexport function createRetryStrategy(options: RetryOptions): RetryStrategy {\n\tif (typeof options === \"number\") {\n\t\treturn new LinearRetryStrategy({\n\t\t\ttype: \"linear\",\n\t\t\tattempts: options,\n\t\t\tdelay: 1000,\n\t\t});\n\t}\n\n\tswitch (options.type) {\n\t\tcase \"linear\":\n\t\t\treturn new LinearRetryStrategy(options);\n\t\tcase \"exponential\":\n\t\t\treturn new ExponentialRetryStrategy(options);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid retry strategy\");\n\t}\n}\n","import type { BetterFetchOption } from \"./types\";\n\nexport type typeOrTypeReturning<T> = T | (() => T);\n/**\n * Bearer token authentication\n *\n * the value of `token` will be added to a header as\n * `auth: Bearer token`,\n */\nexport type Bearer = {\n\ttype: \"Bearer\";\n\ttoken: typeOrTypeReturning<string | undefined | Promise<string | undefined>>;\n};\n\n/**\n * Basic auth\n */\nexport type Basic = {\n\ttype: \"Basic\";\n\tusername: typeOrTypeReturning<string | undefined>;\n\tpassword: typeOrTypeReturning<string | undefined>;\n};\n\n/**\n * Custom auth\n *\n * @param prefix - prefix of the header\n * @param value - value of the header\n *\n * @example\n * ```ts\n * {\n * type: \"Custom\",\n * prefix: \"Token\",\n * value: \"token\"\n * }\n * ```\n */\nexport type Custom = {\n\ttype: \"Custom\";\n\tprefix: typeOrTypeReturning<string | undefined>;\n\tvalue: typeOrTypeReturning<string | undefined>;\n};\n\nexport type Auth = Bearer | Basic | Custom;\n\nexport const getAuthHeader = async (options?: BetterFetchOption) => {\n\tconst headers: Record<string, string> = {};\n\tconst getValue = async (\n\t\tvalue: typeOrTypeReturning<\n\t\t\tstring | undefined | Promise<string | undefined>\n\t\t>,\n\t) => (typeof value === \"function\" ? await value() : value);\n\tif (options?.auth) {\n\t\tif (options.auth.type === \"Bearer\") {\n\t\t\tconst token = await getValue(options.auth.token);\n\t\t\tif (!token) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `Bearer ${token}`;\n\t\t} else if (options.auth.type === \"Basic\") {\n\t\t\tconst [username, password] = await Promise.all([\n\t\t\t\tgetValue(options.auth.username),\n\t\t\t\tgetValue(options.auth.password),\n\t\t\t]);\n\t\t\tif (!username || !password) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `Basic ${btoa(`${username}:${password}`)}`;\n\t\t} else if (options.auth.type === \"Custom\") {\n\t\t\tconst [prefix, value] = await Promise.all([\n\t\t\t\tgetValue(options.auth.prefix),\n\t\t\t\tgetValue(options.auth.value),\n\t\t\t]);\n\t\t\tif (!value) {\n\t\t\t\treturn headers;\n\t\t\t}\n\t\t\theaders[\"authorization\"] = `${prefix ?? \"\"} ${value}`;\n\t\t}\n\t}\n\treturn headers;\n};\n","import type { StandardSchemaV1 } from \"./standard-schema\";\nimport { getAuthHeader } from \"./auth\";\nimport { methods } from \"./create-fetch\";\nimport type { BetterFetchOption, FetchEsque } from \"./types\";\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nexport function isJSONParsable(value: any) {\n\ttry {\n\t\tJSON.parse(value);\n\t\treturn true;\n\t} catch (error) {\n\t\treturn false;\n\t}\n}\n\n//https://github.com/unjs/ofetch/blob/main/src/utils.ts\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nexport function jsonParse(text: string) {\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch (error) {\n\t\treturn text;\n\t}\n}\n\nexport function isFunction(value: any): value is () => any {\n\treturn typeof value === \"function\";\n}\n\nexport function getFetch(options?: BetterFetchOption): FetchEsque {\n\tif (options?.customFetchImpl) {\n\t\treturn options.customFetchImpl;\n\t}\n\tif (typeof globalThis !== \"undefined\" && isFunction(globalThis.fetch)) {\n\t\treturn globalThis.fetch;\n\t}\n\tif (typeof window !== \"undefined\" && isFunction(window.fetch)) {\n\t\treturn window.fetch;\n\t}\n\tthrow new Error(\"No fetch implementation found\");\n}\n\nexport function isPayloadMethod(method?: string) {\n\tif (!method) {\n\t\treturn false;\n\t}\n\tconst payloadMethod = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\treturn payloadMethod.includes(method.toUpperCase());\n}\n\nexport function isRouteMethod(method?: string) {\n\tconst routeMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\tif (!method) {\n\t\treturn false;\n\t}\n\treturn routeMethod.includes(method.toUpperCase());\n}\n\nexport async function getHeaders(opts?: BetterFetchOption) {\n\tconst headers = new Headers(opts?.headers);\n\tconst authHeader = await getAuthHeader(opts);\n\tfor (const [key, value] of Object.entries(authHeader || {})) {\n\t\theaders.set(key, value);\n\t}\n\tif (!headers.has(\"content-type\")) {\n\t\tconst t = detectContentType(opts?.body);\n\t\tif (t) {\n\t\t\theaders.set(\"content-type\", t);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\nexport function getURL(url: string, options?: BetterFetchOption) {\n\tif (url.startsWith(\"@\")) {\n\t\tconst m = url.toString().split(\"@\")[1].split(\"/\")[0];\n\t\tif (methods.includes(m)) {\n\t\t\turl = url.replace(`@${m}/`, \"/\");\n\t\t}\n\t}\n\tlet _url: string | URL;\n\ttry {\n\t\tif (url.startsWith(\"http\")) {\n\t\t\t_url = url;\n\t\t} else {\n\t\t\tlet baseURL = options?.baseURL;\n\t\t\tif (baseURL && !baseURL?.endsWith(\"/\")) {\n\t\t\t\tbaseURL = baseURL + \"/\";\n\t\t\t}\n\t\t\tif (url.startsWith(\"/\")) {\n\t\t\t\t_url = new URL(url.substring(1), baseURL);\n\t\t\t} else {\n\t\t\t\t_url = new URL(url, options?.baseURL);\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tif (e instanceof TypeError) {\n\t\t\tif (!options?.baseURL) {\n\t\t\t\tthrow TypeError(\n\t\t\t\t\t`Invalid URL ${url}. Are you passing in a relative url but not setting the baseURL?`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow TypeError(\n\t\t\t\t`Invalid URL ${url}. Please validate that you are passing the correct input.`,\n\t\t\t);\n\t\t}\n\t\tthrow e;\n\t}\n\n\t/**\n\t * Dynamic Parameters.\n\t */\n\tif (options?.params) {\n\t\tif (Array.isArray(options?.params)) {\n\t\t\tconst params = options?.params\n\t\t\t\t? Array.isArray(options.params)\n\t\t\t\t\t? `/${options.params.join(\"/\")}`\n\t\t\t\t\t: `/${Object.values(options.params).join(\"/\")}`\n\t\t\t\t: \"\";\n\t\t\t_url = _url.toString().split(\"/:\")[0];\n\t\t\t_url = `${_url.toString()}${params}`;\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(options?.params)) {\n\t\t\t\t_url = _url.toString().replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\tconst __url = new URL(_url);\n\t/**\n\t * Query Parameters\n\t */\n\tconst queryParams = options?.query;\n\tif (queryParams) {\n\t\tfor (const [key, value] of Object.entries(queryParams)) {\n\t\t\t__url.searchParams.append(key, String(value));\n\t\t}\n\t}\n\treturn __url;\n}\n\nexport function detectContentType(body: any) {\n\tif (isJSONSerializable(body)) {\n\t\treturn \"application/json\";\n\t}\n\n\treturn null;\n}\n\nexport function getBody(options?: BetterFetchOption) {\n\tif (!options?.body) {\n\t\treturn null;\n\t}\n\tconst headers = new Headers(options?.headers);\n\tif (isJSONSerializable(options.body) && !headers.has(\"content-type\")) {\n\t\tfor (const [key, value] of Object.entries(options?.body)) {\n\t\t\tif (value instanceof Date) {\n\t\t\t\toptions.body[key] = value.toISOString();\n\t\t\t}\n\t\t}\n\t\treturn JSON.stringify(options.body);\n\t}\n\n\tif (\n\t\theaders.has(\"content-type\") &&\n\t\theaders.get(\"content-type\") === \"application/x-www-form-urlencoded\"\n\t) {\n\t\tif (isJSONSerializable(options.body)) {\n\t\t\treturn new URLSearchParams(options.body).toString();\n\t\t}\n\t\treturn options.body;\n\t}\n\n\treturn options.body;\n}\n\nexport function getMethod(url: string, options?: BetterFetchOption) {\n\tif (options?.method) {\n\t\treturn options.method.toUpperCase();\n\t}\n\tif (url.startsWith(\"@\")) {\n\t\tconst pMethod = url.split(\"@\")[1]?.split(\"/\")[0];\n\t\tif (!methods.includes(pMethod)) {\n\t\t\treturn options?.body ? \"POST\" : \"GET\";\n\t\t}\n\t\treturn pMethod.toUpperCase();\n\t}\n\treturn options?.body ? \"POST\" : \"GET\";\n}\n\nexport function getTimeout(\n\toptions?: BetterFetchOption,\n\tcontroller?: AbortController,\n) {\n\tlet abortTimeout: ReturnType<typeof setTimeout> | undefined;\n\tif (!options?.signal && options?.timeout) {\n\t\tabortTimeout = setTimeout(() => controller?.abort(), options?.timeout);\n\t}\n\treturn {\n\t\tabortTimeout,\n\t\tclearTimeout: () => {\n\t\t\tif (abortTimeout) {\n\t\t\t\tclearTimeout(abortTimeout);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function bodyParser(data: any, responseType: ResponseType) {\n\tif (responseType === \"json\") {\n\t\treturn JSON.parse(data);\n\t}\n\treturn data;\n}\n\nexport class ValidationError extends Error {\n\tpublic readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n\tconstructor(issues: ReadonlyArray<StandardSchemaV1.Issue>, message?: string) {\n\t\t// Default message fallback in case one isn't supplied.\n\t\tsuper(message || JSON.stringify(issues, null, 2));\n\t\tthis.issues = issues;\n\n\t\t// Set the prototype explicitly to ensure that instanceof works correctly.\n\t\tObject.setPrototypeOf(this, ValidationError.prototype);\n\t}\n}\n\nexport async function parseStandardSchema<TSchema extends StandardSchemaV1>(\n\tschema: TSchema,\n\tinput: StandardSchemaV1.InferInput<TSchema>,\n): Promise<StandardSchemaV1.InferOutput<TSchema>> {\n\tconst result = await schema[\"~standard\"].validate(input);\n\n\tif (result.issues) {\n\t\tthrow new ValidationError(result.issues);\n\t}\n\treturn result.value;\n}\n","import type { StandardSchemaV1 } from \"../standard-schema\";\nimport type { StringLiteralUnion } from \"../type-utils\";\n\nexport type FetchSchema = {\n\tinput?: StandardSchemaV1;\n\toutput?: StandardSchemaV1;\n\tquery?: StandardSchemaV1;\n\tparams?: StandardSchemaV1<Record<string, unknown>> | undefined;\n\tmethod?: Methods;\n};\n\nexport type Methods = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\n\nexport const methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\"];\n\ntype RouteKey = StringLiteralUnion<`@${Methods}/`>;\n\nexport type FetchSchemaRoutes = {\n\t[key in RouteKey]?: FetchSchema;\n};\n\nexport const createSchema = <\n\tF extends FetchSchemaRoutes,\n\tS extends SchemaConfig,\n>(\n\tschema: F,\n\tconfig?: S,\n) => {\n\treturn {\n\t\tschema: schema as F,\n\t\tconfig: config as S,\n\t};\n};\n\nexport type SchemaConfig = {\n\tstrict?: boolean;\n\t/**\n\t * A prefix that will be prepended when it's\n\t * calling the schema.\n\t *\n\t * NOTE: Make sure to handle converting\n\t * the prefix to the baseURL in the init\n\t * function if you you are defining for a\n\t * plugin.\n\t */\n\tprefix?: \"\" | (string & Record<never, never>);\n\t/**\n\t * The base url of the schema. By default it's the baseURL of the fetch instance.\n\t */\n\tbaseURL?: \"\" | (string & Record<never, never>);\n};\n\nexport type Schema = {\n\tschema: FetchSchemaRoutes;\n\tconfig: SchemaConfig;\n};\n","import { betterFetch } from \"../fetch\";\nimport { BetterFetchPlugin } from \"../plugins\";\nimport type { BetterFetchOption } from \"../types\";\nimport { parseStandardSchema } from \"../utils\";\nimport type { BetterFetch, CreateFetchOption } from \"./types\";\n\nexport const applySchemaPlugin = (config: CreateFetchOption) =>\n\t({\n\t\tid: \"apply-schema\",\n\t\tname: \"Apply Schema\",\n\t\tversion: \"1.0.0\",\n\t\tasync init(url, options) {\n\t\t\tconst schema =\n\t\t\t\tconfig.plugins?.find((plugin) =>\n\t\t\t\t\tplugin.schema?.config\n\t\t\t\t\t\t? url.startsWith(plugin.schema.config.baseURL || \"\") ||\n\t\t\t\t\t\t\turl.startsWith(plugin.schema.config.prefix || \"\")\n\t\t\t\t\t\t: false,\n\t\t\t\t)?.schema || config.schema;\n\t\t\tif (schema) {\n\t\t\t\tlet urlKey = url;\n\t\t\t\tif (schema.config?.prefix) {\n\t\t\t\t\tif (urlKey.startsWith(schema.config.prefix)) {\n\t\t\t\t\t\turlKey = urlKey.replace(schema.config.prefix, \"\");\n\t\t\t\t\t\tif (schema.config.baseURL) {\n\t\t\t\t\t\t\turl = url.replace(schema.config.prefix, schema.config.baseURL);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (schema.config?.baseURL) {\n\t\t\t\t\tif (urlKey.startsWith(schema.config.baseURL)) {\n\t\t\t\t\t\turlKey = urlKey.replace(schema.config.baseURL, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst keySchema = schema.schema[urlKey];\n\t\t\t\tif (keySchema) {\n\t\t\t\t\tlet opts = {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tmethod: keySchema.method,\n\t\t\t\t\t\toutput: keySchema.output,\n\t\t\t\t\t};\n\t\t\t\t\tif (!options?.disableValidation) {\n\t\t\t\t\t\topts = {\n\t\t\t\t\t\t\t...opts,\n\t\t\t\t\t\t\tbody: keySchema.input\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.input, options?.body)\n\t\t\t\t\t\t\t\t: options?.body,\n\t\t\t\t\t\t\tparams: keySchema.params\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.params, options?.params)\n\t\t\t\t\t\t\t\t: options?.params,\n\t\t\t\t\t\t\tquery: keySchema.query\n\t\t\t\t\t\t\t\t? await parseStandardSchema(keySchema.query, options?.query)\n\t\t\t\t\t\t\t\t: options?.query,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\turl,\n\t\t\t\toptions,\n\t\t\t};\n\t\t},\n\t}) satisfies BetterFetchPlugin;\n\nexport const createFetch = <Option extends CreateFetchOption>(\n\tconfig?: Option,\n) => {\n\tasync function $fetch(url: string, options?: BetterFetchOption) {\n\t\tconst opts = {\n\t\t\t...config,\n\t\t\t...options,\n\t\t\tplugins: [...(config?.plugins || []), applySchemaPlugin(config || {}), ...(options?.plugins || [])],\n\t\t} as BetterFetchOption;\n\n\t\tif (config?.catchAllError) {\n\t\t\ttry {\n\t\t\t\treturn await betterFetch(url, opts);\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tstatus: 500,\n\t\t\t\t\t\tstatusText: \"Fetch Error\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"Fetch related error. Captured by catchAllError option. See error property for more details.\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn await betterFetch(url, opts);\n\t}\n\treturn $fetch as BetterFetch<Option>;\n};\n\nexport * from \"./schema\";\nexport * from \"./types\";\n","import { methods } from \"./create-fetch\";\nimport type { BetterFetchOption } from \"./types\";\n\n/**\n * Normalize URL\n */\nexport function getURL(url: string, option?: BetterFetchOption) {\n\tconst { baseURL, params, query } = option || {\n\t\tquery: {},\n\t\tparams: {},\n\t\tbaseURL: \"\",\n\t};\n\tlet basePath = url.startsWith(\"http\")\n\t\t? url.split(\"/\").slice(0, 3).join(\"/\")\n\t\t: baseURL || \"\";\n\n\t/**\n\t * Remove method modifiers\n\t */\n\tif (url.startsWith(\"@\")) {\n\t\tconst m = url.toString().split(\"@\")[1].split(\"/\")[0];\n\t\tif (methods.includes(m)) {\n\t\t\turl = url.replace(`@${m}/`, \"/\");\n\t\t}\n\t}\n\n\tif (!basePath.endsWith(\"/\")) basePath += \"/\";\n\tlet [path, urlQuery] = url.replace(basePath, \"\").split(\"?\");\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tfor (const [key, value] of Object.entries(query || {})) {\n\t\tif (value == null) continue;\n\t\tlet serializedValue;\n\t\tif (typeof value === \"string\") {\n\t\t\tserializedValue = value;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tfor (const val of value) {\n\t\t\t\tqueryParams.append(key, val);\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tserializedValue = JSON.stringify(value);\n\t\t}\n\t\tqueryParams.set(key, serializedValue);\n\t}\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\tpath = path.split(\"/\").map(encodeURIComponent).join(\"/\");\n\tif (path.startsWith(\"/\")) path = path.slice(1);\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString =\n\t\tqueryParamString.length > 0\n\t\t\t? `?${queryParamString}`.replace(/\\+/g, \"%20\")\n\t\t\t: \"\";\n\tif (!basePath.startsWith(\"http\")) {\n\t\treturn `${basePath}${path}${queryParamString}`;\n\t}\n\tconst _url = new URL(`${path}${queryParamString}`, basePath);\n\treturn _url;\n}\n","import { BetterFetchError } from \"./error\";\nimport { initializePlugins } from \"./plugins\";\nimport { createRetryStrategy } from \"./retry\";\nimport type { StandardSchemaV1 } from \"./standard-schema\";\nimport type { BetterFetchOption, BetterFetchResponse } from \"./types\";\nimport { getURL } from \"./url\";\nimport {\n\tdetectResponseType,\n\tgetBody,\n\tgetFetch,\n\tgetHeaders,\n\tgetMethod,\n\tgetTimeout,\n\tisJSONParsable,\n\tjsonParse,\n\tparseStandardSchema,\n} from \"./utils\";\n\nexport const betterFetch = async <\n\tTRes extends Option[\"output\"] extends StandardSchemaV1\n\t\t? StandardSchemaV1.InferOutput<Option[\"output\"]>\n\t\t: unknown,\n\tTErr = unknown,\n\tOption extends BetterFetchOption = BetterFetchOption<any, any, any, TRes>,\n>(\n\turl: string,\n\toptions?: Option,\n): Promise<\n\tBetterFetchResponse<\n\t\tTRes,\n\t\tTErr,\n\t\tOption[\"throw\"] extends true ? true : TErr extends false ? true : false\n\t>\n> => {\n\tconst {\n\t\thooks,\n\t\turl: __url,\n\t\toptions: opts,\n\t} = await initializePlugins(url, options);\n\tconst fetch = getFetch(opts);\n\tconst controller = new AbortController();\n\tconst signal = opts.signal ?? controller.signal;\n\tconst _url = getURL(__url, opts);\n\tconst body = getBody(opts);\n\tconst headers = await getHeaders(opts);\n\tconst method = getMethod(__url, opts);\n\tlet context = {\n\t\t...opts,\n\t\turl: _url,\n\t\theaders,\n\t\tbody,\n\t\tmethod,\n\t\tsignal,\n\t};\n\t/**\n\t * Run all on request hooks\n\t */\n\tfor (const onRequest of hooks.onRequest) {\n\t\tif (onRequest) {\n\t\t\tconst res = await onRequest(context);\n\t\t\tif (typeof res === \"object\" && res !== null) {\n\t\t\t\tcontext = res;\n\t\t\t}\n\t\t}\n\t}\n\tif (\n\t\t(\"pipeTo\" in context && typeof context.pipeTo === \"function\") ||\n\t\ttypeof options?.body?.pipe === \"function\"\n\t) {\n\t\tif (!(\"duplex\" in context)) {\n\t\t\tcontext.duplex = \"half\";\n\t\t}\n\t}\n\n\tconst { clearTimeout } = getTimeout(opts, controller);\n\tlet response = await fetch(context.url, context);\n\tclearTimeout();\n\n\tconst responseContext = {\n\t\tresponse,\n\t\trequest: context,\n\t};\n\n\tfor (const onResponse of hooks.onResponse) {\n\t\tif (onResponse) {\n\t\t\tconst r = await onResponse({\n\t\t\t\t...responseContext,\n\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t? response.clone()\n\t\t\t\t\t: response,\n\t\t\t});\n\t\t\tif (r instanceof Response) {\n\t\t\t\tresponse = r;\n\t\t\t} else if (typeof r === \"object\" && r !== null) {\n\t\t\t\tresponse = r.response;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * OK Branch\n\t */\n\tif (response.ok) {\n\t\tconst hasBody = context.method !== \"HEAD\";\n\t\tif (!hasBody) {\n\t\t\treturn {\n\t\t\t\tdata: \"\" as any,\n\t\t\t\terror: null,\n\t\t\t} as any;\n\t\t}\n\t\tconst responseType = detectResponseType(response);\n\t\tconst successContext = {\n\t\t\tdata: null as any,\n\t\t\tresponse,\n\t\t\trequest: context,\n\t\t};\n\t\tif (responseType === \"json\" || responseType === \"text\") {\n\t\t\tconst text = await response.text();\n\t\t\tconst parser = context.jsonParser ?? jsonParse;\n\t\t\tsuccessContext.data = await parser(text);\n\t\t} else {\n\t\t\tsuccessContext.data = await response[responseType]();\n\t\t}\n\n\t\t/**\n\t\t * Parse the data if the output schema is defined\n\t\t */\n\t\tif (context?.output) {\n\t\t\tif (context.output && !context.disableValidation) {\n\t\t\t\tsuccessContext.data = await parseStandardSchema(\n\t\t\t\t\tcontext.output as StandardSchemaV1,\n\t\t\t\t\tsuccessContext.data,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfor (const onSuccess of hooks.onSuccess) {\n\t\t\tif (onSuccess) {\n\t\t\t\tawait onSuccess({\n\t\t\t\t\t...successContext,\n\t\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t\t? response.clone()\n\t\t\t\t\t\t: response,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (options?.throw) {\n\t\t\treturn successContext.data;\n\t\t}\n\n\t\treturn {\n\t\t\tdata: successContext.data,\n\t\t\terror: null,\n\t\t} as any;\n\t}\n\tconst parser = options?.jsonParser ?? jsonParse;\n\tconst responseText = await response.text();\n\tconst isJSONResponse = isJSONParsable(responseText);\n\tconst errorObject = isJSONResponse ? await parser(responseText) : null;\n\t/**\n\t * Error Branch\n\t */\n\tconst errorContext = {\n\t\tresponse,\n\t\tresponseText,\n\t\trequest: context,\n\t\terror: {\n\t\t\t...errorObject,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t},\n\t};\n\tfor (const onError of hooks.onError) {\n\t\tif (onError) {\n\t\t\tawait onError({\n\t\t\t\t...errorContext,\n\t\t\t\tresponse: options?.hookOptions?.cloneResponse\n\t\t\t\t\t? response.clone()\n\t\t\t\t\t: response,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (options?.retry) {\n\t\tconst retryStrategy = createRetryStrategy(options.retry);\n\t\tconst _retryAttempt = options.retryAttempt ?? 0;\n\t\tif (await retryStrategy.shouldAttemptRetry(_retryAttempt, response)) {\n\t\t\tfor (const onRetry of hooks.onRetry) {\n\t\t\t\tif (onRetry) {\n\t\t\t\t\tawait onRetry(responseContext);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst delay = retryStrategy.getDelay(_retryAttempt);\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t\t\treturn await betterFetch(url, {\n\t\t\t\t...options,\n\t\t\t\tretryAttempt: _retryAttempt + 1,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (options?.throw) {\n\t\tthrow new BetterFetchError(\n\t\t\tresponse.status,\n\t\t\tresponse.statusText,\n\t\t\tisJSONResponse ? errorObject : responseText,\n\t\t);\n\t}\n\treturn {\n\t\tdata: null,\n\t\terror: {\n\t\t\t...errorObject,\n\t\t\tstatus: response.status,\n\t\t\tstatusText: response.statusText,\n\t\t},\n\t} as any;\n};\n","import type {\n\tBetterAuthClientOptions,\n\tClientAtomListener,\n} from \"@better-auth/core\";\nimport { createFetch } from \"@better-fetch/fetch\";\nimport { defu } from \"defu\";\nimport type { WritableAtom } from \"nanostores\";\nimport { getBaseURL } from \"../utils/url\";\nimport { redirectPlugin } from \"./fetch-plugins\";\nimport { parseJSON } from \"./parser\";\nimport { getSessionAtom } from \"./session-atom\";\n\nexport const getClientConfig = (\n\toptions?: BetterAuthClientOptions | undefined,\n\tloadEnv?: boolean | undefined,\n) => {\n\t/* check if the credentials property is supported. Useful for cf workers */\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL =\n\t\tgetBaseURL(options?.baseURL, options?.basePath, undefined, loadEnv) ??\n\t\t\"/api/auth\";\n\tconst pluginsFetchPlugins =\n\t\toptions?.plugins\n\t\t\t?.flatMap((plugin) => plugin.fetchPlugins)\n\t\t\t.filter((pl) => pl !== undefined) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse,\n\t\t},\n\t};\n\tconst {\n\t\tonSuccess: _onSuccess,\n\t\tonError: _onError,\n\t\tonRequest: _onRequest,\n\t\tonResponse: _onResponse,\n\t\t...restOfFetchOptions\n\t} = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...(isCredentialsSupported ? { credentials: \"include\" } : {}),\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) {\n\t\t\t\treturn null as any;\n\t\t\t}\n\t\t\treturn parseJSON(text, {\n\t\t\t\tstrict: false,\n\t\t\t});\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...(restOfFetchOptions.plugins || []),\n\t\t\t...(options?.disableDefaultFetchPlugins ? [] : [redirectPlugin]),\n\t\t\t...pluginsFetchPlugins,\n\t\t],\n\t});\n\tconst { $sessionSignal, session } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {} as Record<string, any>;\n\tconst pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession,\n\t} as Record<string, WritableAtom<any>>;\n\tconst pluginPathMethods: Record<string, \"POST\" | \"GET\"> = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\",\n\t};\n\tconst atomListeners: ClientAtomListener[] = [\n\t\t{\n\t\t\tsignal: \"$sessionSignal\",\n\t\t\tmatcher(path) {\n\t\t\t\tconst matchesCommonPaths =\n\t\t\t\t\tpath === \"/sign-out\" ||\n\t\t\t\t\tpath === \"/update-user\" ||\n\t\t\t\t\tpath === \"/sign-up/email\" ||\n\t\t\t\t\tpath === \"/sign-in/email\" ||\n\t\t\t\t\tpath === \"/delete-user\" ||\n\t\t\t\t\tpath === \"/verify-email\" ||\n\t\t\t\t\tpath === \"/revoke-sessions\" ||\n\t\t\t\t\tpath === \"/revoke-session\" ||\n\t\t\t\t\tpath === \"/change-email\";\n\n\t\t\t\treturn matchesCommonPaths;\n\t\t\t},\n\t\t},\n\t];\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) {\n\t\t\tObject.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\t}\n\t\tif (plugin.pathMethods) {\n\t\t\tObject.assign(pluginPathMethods, plugin.pathMethods);\n\t\t}\n\t\tif (plugin.atomListeners) {\n\t\t\tatomListeners.push(...plugin.atomListeners);\n\t\t}\n\t}\n\n\tconst $store = {\n\t\tnotify: (\n\t\t\tsignal?: (Omit<string, \"$sessionSignal\"> | \"$sessionSignal\") | undefined,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.set(\n\t\t\t\t!pluginsAtoms[signal as keyof typeof pluginsAtoms]!.get(),\n\t\t\t);\n\t\t},\n\t\tlisten: (\n\t\t\tsignal: Omit<string, \"$sessionSignal\"> | \"$sessionSignal\",\n\t\t\tlistener: (value: boolean, oldValue?: boolean | undefined) => void,\n\t\t) => {\n\t\t\tpluginsAtoms[signal as keyof typeof pluginsAtoms]!.subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms,\n\t};\n\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getActions) {\n\t\t\tpluginsActions = defu(\n\t\t\t\tplugin.getActions?.($fetch, $store, options) ?? {},\n\t\t\t\tpluginsActions,\n\t\t\t);\n\t\t}\n\t}\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store,\n\t};\n};\n","import type { Atom } from \"nanostores\";\n\nexport function isAtom(value: unknown): value is Atom<unknown> {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"get\" in value &&\n\t\ttypeof (value as any).get === \"function\" &&\n\t\t\"lc\" in value &&\n\t\ttypeof (value as any).lc === \"number\"\n\t);\n}\n","import type {\n\tBetterAuthClientPlugin,\n\tClientAtomListener,\n\tClientFetchOption,\n} from \"@better-auth/core\";\nimport type { BetterFetch } from \"@better-fetch/fetch\";\nimport type { Atom } from \"nanostores\";\nimport { isAtom } from \"../utils/is-atom\";\nimport type { ProxyRequest } from \"./path-to-object\";\n\nfunction getMethod(\n\tpath: string,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\targs:\n\t\t| {\n\t\t\t\tfetchOptions?: ClientFetchOption | undefined;\n\t\t\t\tquery?: Record<string, any> | undefined;\n\t\t }\n\t\t| undefined,\n) {\n\tconst method = knownPathMethods[path];\n\tconst { fetchOptions, query: _query, ...body } = args || {};\n\tif (method) {\n\t\treturn method;\n\t}\n\tif (fetchOptions?.method) {\n\t\treturn fetchOptions.method;\n\t}\n\tif (body && Object.keys(body).length > 0) {\n\t\treturn \"POST\";\n\t}\n\treturn \"GET\";\n}\n\nexport function createDynamicPathProxy<T extends Record<string, any>>(\n\troutes: T,\n\tclient: BetterFetch,\n\tknownPathMethods: Record<string, \"POST\" | \"GET\">,\n\tatoms: Record<string, Atom>,\n\tatomListeners: BetterAuthClientPlugin[\"atomListeners\"],\n): T {\n\tfunction createProxy(path: string[] = []): any {\n\t\treturn new Proxy(function () {}, {\n\t\t\tget(_, prop) {\n\t\t\t\tif (typeof prop !== \"string\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif (prop === \"then\" || prop === \"catch\" || prop === \"finally\") {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\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\t\t\t\tif (typeof current === \"function\") {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\tif (isAtom(current)) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\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\t\t\t\tconst arg = (args[0] || {}) as ProxyRequest;\n\t\t\t\tconst fetchOptions = (args[1] || {}) as ClientFetchOption;\n\t\t\t\tconst { query, fetchOptions: argFetchOptions, ...body } = arg;\n\t\t\t\tconst options = {\n\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t...argFetchOptions,\n\t\t\t\t} as ClientFetchOption;\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody:\n\t\t\t\t\t\tmethod === \"GET\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t...body,\n\t\t\t\t\t\t\t\t\t...(options?.body || {}),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\tquery: query || options?.query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\tif (!atomListeners || options.disableSignal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * We trigger listeners\n\t\t\t\t\t\t */\n\t\t\t\t\t\tconst matches = atomListeners.filter((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!matches.length) return;\n\n\t\t\t\t\t\tconst visited = new Set<ClientAtomListener[\"signal\"]>();\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tconst signal = atoms[match.signal as any];\n\t\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t\tif (visited.has(match.signal)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvisited.add(match.signal);\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t//@ts-expect-error\n\t\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\treturn createProxy() as T;\n}\n","import type { Store, StoreValue } from \"nanostores\";\nimport { listenKeys } from \"nanostores\";\nimport type { DependencyList } from \"react\";\nimport { useCallback, useRef, useSyncExternalStore } from \"react\";\n\ntype StoreKeys<T> = T extends { setKey: (k: infer K, v: any) => unknown }\n\t? K\n\t: never;\n\nexport interface UseStoreOptions<SomeStore> {\n\t/**\n\t * @default\n\t * ```ts\n\t * [store, options.keys]\n\t * ```\n\t */\n\tdeps?: DependencyList | undefined;\n\n\t/**\n\t * Will re-render components only on specific key changes.\n\t */\n\tkeys?: StoreKeys<SomeStore>[] | undefined;\n}\n\n/**\n * Subscribe to store changes and get store's value.\n *\n * Can be used with store builder too.\n *\n * ```js\n * import { useStore } from 'nanostores/react'\n *\n * import { router } from '../store/router'\n *\n * export const Layout = () => {\n * let page = useStore(router)\n * if (page.route === 'home') {\n * return <HomePage />\n * } else {\n * return <Error404 />\n * }\n * }\n * ```\n *\n * @param store Store instance.\n * @returns Store value.\n */\nexport function useStore<SomeStore extends Store>(\n\tstore: SomeStore,\n\toptions: UseStoreOptions<SomeStore> = {},\n): StoreValue<SomeStore> {\n\tconst snapshotRef = useRef<StoreValue<SomeStore>>(store.get());\n\n\tconst { keys, deps = [store, keys] } = options;\n\n\tconst subscribe = useCallback((onChange: () => void) => {\n\t\tconst emitChange = (value: StoreValue<SomeStore>) => {\n\t\t\tif (snapshotRef.current === value) return;\n\t\t\tsnapshotRef.current = value;\n\t\t\tonChange();\n\t\t};\n\n\t\temitChange(store.value);\n\t\tif (keys?.length) {\n\t\t\treturn listenKeys(store as any, keys, emitChange);\n\t\t}\n\t\treturn store.listen(emitChange);\n\t}, deps);\n\n\tconst get = () => snapshotRef.current as StoreValue<SomeStore>;\n\n\treturn useSyncExternalStore(subscribe, get, get);\n}\n","import type {\n\tBetterAuthClientOptions,\n\tBetterAuthClientPlugin,\n} from \"@better-auth/core\";\nimport type { BASE_ERROR_CODES } from \"@better-auth/core/error\";\nimport { capitalizeFirstLetter } from \"@better-auth/core/utils\";\nimport type {\n\tBetterFetchError,\n\tBetterFetchResponse,\n} from \"@better-fetch/fetch\";\nimport type { PrettifyDeep, UnionToIntersection } from \"../../types/helper\";\nimport { getClientConfig } from \"../config\";\nimport { createDynamicPathProxy } from \"../proxy\";\nimport type {\n\tInferActions,\n\tInferClientAPI,\n\tInferErrorCodes,\n\tIsSignal,\n\tSessionQueryParams,\n} from \"../types\";\nimport { useStore } from \"./react-store\";\n\nfunction getAtomKey(str: string) {\n\treturn `use${capitalizeFirstLetter(str)}`;\n}\n\ntype InferResolvedHooks<O extends BetterAuthClientOptions> = O extends {\n\tplugins: Array<infer Plugin>;\n}\n\t? UnionToIntersection<\n\t\t\tPlugin extends BetterAuthClientPlugin\n\t\t\t\t? Plugin[\"getAtoms\"] extends (fetch: any) => infer Atoms\n\t\t\t\t\t? Atoms extends Record<string, any>\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t[key in keyof Atoms as IsSignal<key> extends true\n\t\t\t\t\t\t\t\t\t? never\n\t\t\t\t\t\t\t\t\t: key extends string\n\t\t\t\t\t\t\t\t\t\t? `use${Capitalize<key>}`\n\t\t\t\t\t\t\t\t\t\t: never]: () => ReturnType<Atoms[key][\"get\"]>;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}\n\t\t\t\t\t: {}\n\t\t\t\t: {}\n\t\t>\n\t: {};\n\nexport function createAuthClient<Option extends BetterAuthClientOptions>(\n\toptions?: Option | undefined,\n) {\n\tconst {\n\t\tpluginPathMethods,\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\t$fetch,\n\t\t$store,\n\t\tatomListeners,\n\t} = getClientConfig(options);\n\tconst resolvedHooks: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) {\n\t\tresolvedHooks[getAtomKey(key)] = () => useStore(value);\n\t}\n\n\tconst routes = {\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\t$store,\n\t};\n\tconst proxy = createDynamicPathProxy(\n\t\troutes,\n\t\t$fetch,\n\t\tpluginPathMethods,\n\t\tpluginsAtoms,\n\t\tatomListeners,\n\t);\n\n\ttype ClientAPI = InferClientAPI<Option>;\n\ttype Session = ClientAPI extends {\n\t\tgetSession: () => Promise<infer Res>;\n\t}\n\t\t? Res extends BetterFetchResponse<infer S>\n\t\t\t? S\n\t\t\t: Res\n\t\t: never;\n\treturn proxy as UnionToIntersection<InferResolvedHooks<Option>> &\n\t\tClientAPI &\n\t\tInferActions<Option> & {\n\t\t\tuseSession: () => {\n\t\t\t\tdata: Session;\n\t\t\t\tisPending: boolean;\n\t\t\t\tisRefetching: boolean;\n\t\t\t\terror: BetterFetchError | null;\n\t\t\t\trefetch: (\n\t\t\t\t\tqueryParams?: { query?: SessionQueryParams } | undefined,\n\t\t\t\t) => Promise<void>;\n\t\t\t};\n\t\t\t$Infer: {\n\t\t\t\tSession: NonNullable<Session>;\n\t\t\t};\n\t\t\t$fetch: typeof $fetch;\n\t\t\t$store: typeof $store;\n\t\t\t$ERROR_CODES: PrettifyDeep<\n\t\t\t\tInferErrorCodes<Option> & typeof BASE_ERROR_CODES\n\t\t\t>;\n\t\t};\n}\n\nexport { useStore };\nexport type * from \"@better-fetch/fetch\";\nexport type * from \"nanostores\";\nexport type * from \"../../types/helper\";\nexport type { UnionToIntersection } from \"../../types/helper\";\n"]}
|