{"version":3,"file":"index.mjs","names":["packageJSONCache: PackageJson | undefined","importRuntime","DATABASES: Record","FRAMEWORKS: Record","isDockerCached: boolean | undefined","isInsideContainerCached: boolean | undefined","projectIdCached: string | null","noop: (event: TelemetryEvent) => Promise","noop","anonymousId: string | undefined"],"sources":["../src/detectors/detect-auth-config.ts","../src/utils/package-json.ts","../src/detectors/detect-database.ts","../src/detectors/detect-framework.ts","../src/detectors/detect-project-info.ts","../src/utils/import-util.ts","../src/detectors/detect-system-info.ts","../src/detectors/detect-runtime.ts","../src/utils/hash.ts","../src/utils/id.ts","../src/project-id.ts","../src/index.ts"],"sourcesContent":["import type { BetterAuthOptions } from \"@better-auth/core\";\nimport type { TelemetryContext } from \"../types\";\n\nexport function getTelemetryAuthConfig(\n\toptions: BetterAuthOptions,\n\tcontext?: TelemetryContext | undefined,\n) {\n\treturn {\n\t\tdatabase: context?.database,\n\t\tadapter: context?.adapter,\n\t\temailVerification: {\n\t\t\tsendVerificationEmail: !!options.emailVerification?.sendVerificationEmail,\n\t\t\tsendOnSignUp: !!options.emailVerification?.sendOnSignUp,\n\t\t\tsendOnSignIn: !!options.emailVerification?.sendOnSignIn,\n\t\t\tautoSignInAfterVerification:\n\t\t\t\t!!options.emailVerification?.autoSignInAfterVerification,\n\t\t\texpiresIn: options.emailVerification?.expiresIn,\n\t\t\tonEmailVerification: !!options.emailVerification?.onEmailVerification,\n\t\t\tafterEmailVerification:\n\t\t\t\t!!options.emailVerification?.afterEmailVerification,\n\t\t},\n\t\temailAndPassword: {\n\t\t\tenabled: !!options.emailAndPassword?.enabled,\n\t\t\tdisableSignUp: !!options.emailAndPassword?.disableSignUp,\n\t\t\trequireEmailVerification:\n\t\t\t\t!!options.emailAndPassword?.requireEmailVerification,\n\t\t\tmaxPasswordLength: options.emailAndPassword?.maxPasswordLength,\n\t\t\tminPasswordLength: options.emailAndPassword?.minPasswordLength,\n\t\t\tsendResetPassword: !!options.emailAndPassword?.sendResetPassword,\n\t\t\tresetPasswordTokenExpiresIn:\n\t\t\t\toptions.emailAndPassword?.resetPasswordTokenExpiresIn,\n\t\t\tonPasswordReset: !!options.emailAndPassword?.onPasswordReset,\n\t\t\tpassword: {\n\t\t\t\thash: !!options.emailAndPassword?.password?.hash,\n\t\t\t\tverify: !!options.emailAndPassword?.password?.verify,\n\t\t\t},\n\t\t\tautoSignIn: !!options.emailAndPassword?.autoSignIn,\n\t\t\trevokeSessionsOnPasswordReset:\n\t\t\t\t!!options.emailAndPassword?.revokeSessionsOnPasswordReset,\n\t\t},\n\t\tsocialProviders: Object.keys(options.socialProviders || {}).map((p) => {\n\t\t\tconst provider =\n\t\t\t\toptions.socialProviders?.[p as keyof typeof options.socialProviders];\n\t\t\tif (!provider) return {};\n\t\t\treturn {\n\t\t\t\tid: p,\n\t\t\t\tmapProfileToUser: !!provider.mapProfileToUser,\n\t\t\t\tdisableDefaultScope: !!provider.disableDefaultScope,\n\t\t\t\tdisableIdTokenSignIn: !!provider.disableIdTokenSignIn,\n\t\t\t\tdisableImplicitSignUp: provider.disableImplicitSignUp,\n\t\t\t\tdisableSignUp: provider.disableSignUp,\n\t\t\t\tgetUserInfo: !!provider.getUserInfo,\n\t\t\t\toverrideUserInfoOnSignIn: !!provider.overrideUserInfoOnSignIn,\n\t\t\t\tprompt: provider.prompt,\n\t\t\t\tverifyIdToken: !!provider.verifyIdToken,\n\t\t\t\tscope: provider.scope,\n\t\t\t\trefreshAccessToken: !!provider.refreshAccessToken,\n\t\t\t};\n\t\t}),\n\t\tplugins: options.plugins?.map((p) => p.id.toString()),\n\t\tuser: {\n\t\t\tmodelName: options.user?.modelName,\n\t\t\tfields: options.user?.fields,\n\t\t\tadditionalFields: options.user?.additionalFields,\n\t\t\tchangeEmail: {\n\t\t\t\tenabled: options.user?.changeEmail?.enabled,\n\t\t\t\tsendChangeEmailVerification:\n\t\t\t\t\t!!options.user?.changeEmail?.sendChangeEmailVerification,\n\t\t\t},\n\t\t},\n\t\tverification: {\n\t\t\tmodelName: options.verification?.modelName,\n\t\t\tdisableCleanup: options.verification?.disableCleanup,\n\t\t\tfields: options.verification?.fields,\n\t\t},\n\t\tsession: {\n\t\t\tmodelName: options.session?.modelName,\n\t\t\tadditionalFields: options.session?.additionalFields,\n\t\t\tcookieCache: {\n\t\t\t\tenabled: options.session?.cookieCache?.enabled,\n\t\t\t\tmaxAge: options.session?.cookieCache?.maxAge,\n\t\t\t\tstrategy: options.session?.cookieCache?.strategy,\n\t\t\t},\n\t\t\tdisableSessionRefresh: options.session?.disableSessionRefresh,\n\t\t\texpiresIn: options.session?.expiresIn,\n\t\t\tfields: options.session?.fields,\n\t\t\tfreshAge: options.session?.freshAge,\n\t\t\tpreserveSessionInDatabase: options.session?.preserveSessionInDatabase,\n\t\t\tstoreSessionInDatabase: options.session?.storeSessionInDatabase,\n\t\t\tupdateAge: options.session?.updateAge,\n\t\t},\n\t\taccount: {\n\t\t\tmodelName: options.account?.modelName,\n\t\t\tfields: options.account?.fields,\n\t\t\tencryptOAuthTokens: options.account?.encryptOAuthTokens,\n\t\t\tupdateAccountOnSignIn: options.account?.updateAccountOnSignIn,\n\t\t\taccountLinking: {\n\t\t\t\tenabled: options.account?.accountLinking?.enabled,\n\t\t\t\ttrustedProviders: options.account?.accountLinking?.trustedProviders,\n\t\t\t\tupdateUserInfoOnLink:\n\t\t\t\t\toptions.account?.accountLinking?.updateUserInfoOnLink,\n\t\t\t\tallowUnlinkingAll: options.account?.accountLinking?.allowUnlinkingAll,\n\t\t\t},\n\t\t},\n\t\thooks: {\n\t\t\tafter: !!options.hooks?.after,\n\t\t\tbefore: !!options.hooks?.before,\n\t\t},\n\t\tsecondaryStorage: !!options.secondaryStorage,\n\t\tadvanced: {\n\t\t\tcookiePrefix: !!options.advanced?.cookiePrefix, //this shouldn't be tracked\n\t\t\tcookies: !!options.advanced?.cookies,\n\t\t\tcrossSubDomainCookies: {\n\t\t\t\tdomain: !!options.advanced?.crossSubDomainCookies?.domain,\n\t\t\t\tenabled: options.advanced?.crossSubDomainCookies?.enabled,\n\t\t\t\tadditionalCookies:\n\t\t\t\t\toptions.advanced?.crossSubDomainCookies?.additionalCookies,\n\t\t\t},\n\t\t\tdatabase: {\n\t\t\t\tuseNumberId:\n\t\t\t\t\t!!options.advanced?.database?.useNumberId ||\n\t\t\t\t\toptions.advanced?.database?.generateId === \"serial\",\n\t\t\t\tgenerateId: options.advanced?.database?.generateId,\n\t\t\t\tdefaultFindManyLimit: options.advanced?.database?.defaultFindManyLimit,\n\t\t\t},\n\t\t\tuseSecureCookies: options.advanced?.useSecureCookies,\n\t\t\tipAddress: {\n\t\t\t\tdisableIpTracking: options.advanced?.ipAddress?.disableIpTracking,\n\t\t\t\tipAddressHeaders: options.advanced?.ipAddress?.ipAddressHeaders,\n\t\t\t},\n\t\t\tdisableCSRFCheck: options.advanced?.disableCSRFCheck,\n\t\t\tcookieAttributes: {\n\t\t\t\texpires: options.advanced?.defaultCookieAttributes?.expires,\n\t\t\t\tsecure: options.advanced?.defaultCookieAttributes?.secure,\n\t\t\t\tsameSite: options.advanced?.defaultCookieAttributes?.sameSite,\n\t\t\t\tdomain: !!options.advanced?.defaultCookieAttributes?.domain,\n\t\t\t\tpath: options.advanced?.defaultCookieAttributes?.path,\n\t\t\t\thttpOnly: options.advanced?.defaultCookieAttributes?.httpOnly,\n\t\t\t},\n\t\t},\n\t\ttrustedOrigins: options.trustedOrigins?.length,\n\t\trateLimit: {\n\t\t\tstorage: options.rateLimit?.storage,\n\t\t\tmodelName: options.rateLimit?.modelName,\n\t\t\twindow: options.rateLimit?.window,\n\t\t\tcustomStorage: !!options.rateLimit?.customStorage,\n\t\t\tenabled: options.rateLimit?.enabled,\n\t\t\tmax: options.rateLimit?.max,\n\t\t},\n\t\tonAPIError: {\n\t\t\terrorURL: options.onAPIError?.errorURL,\n\t\t\tonError: !!options.onAPIError?.onError,\n\t\t\tthrow: options.onAPIError?.throw,\n\t\t},\n\t\tlogger: {\n\t\t\tdisabled: options.logger?.disabled,\n\t\t\tlevel: options.logger?.level,\n\t\t\tlog: !!options.logger?.log,\n\t\t},\n\t\tdatabaseHooks: {\n\t\t\tuser: {\n\t\t\t\tcreate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.user?.create?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.user?.create?.before,\n\t\t\t\t},\n\t\t\t\tupdate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.user?.update?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.user?.update?.before,\n\t\t\t\t},\n\t\t\t},\n\t\t\tsession: {\n\t\t\t\tcreate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.session?.create?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.session?.create?.before,\n\t\t\t\t},\n\t\t\t\tupdate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.session?.update?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.session?.update?.before,\n\t\t\t\t},\n\t\t\t},\n\t\t\taccount: {\n\t\t\t\tcreate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.account?.create?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.account?.create?.before,\n\t\t\t\t},\n\t\t\t\tupdate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.account?.update?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.account?.update?.before,\n\t\t\t\t},\n\t\t\t},\n\t\t\tverification: {\n\t\t\t\tcreate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.verification?.create?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.verification?.create?.before,\n\t\t\t\t},\n\t\t\t\tupdate: {\n\t\t\t\t\tafter: !!options.databaseHooks?.verification?.update?.after,\n\t\t\t\t\tbefore: !!options.databaseHooks?.verification?.update?.before,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n","import type { PackageJson } from \"type-fest\";\n\nlet packageJSONCache: PackageJson | undefined;\n\nasync function readRootPackageJson() {\n\tif (packageJSONCache) return packageJSONCache;\n\ttry {\n\t\tconst cwd =\n\t\t\ttypeof process !== \"undefined\" && typeof process.cwd === \"function\"\n\t\t\t\t? process.cwd()\n\t\t\t\t: \"\";\n\t\tif (!cwd) return undefined;\n\t\t// Lazily import Node built-ins only when available (Node/Bun/Deno) and\n\t\t// avoid static analyzer/bundler resolution by obfuscating module names\n\t\tconst importRuntime = (m: string) =>\n\t\t\t(Function(\"mm\", \"return import(mm)\") as any)(m);\n\t\tconst [{ default: fs }, { default: path }] = await Promise.all([\n\t\t\timportRuntime(\"fs/promises\"),\n\t\t\timportRuntime(\"path\"),\n\t\t]);\n\t\tconst raw = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n\t\tpackageJSONCache = JSON.parse(raw);\n\t\treturn packageJSONCache as PackageJson;\n\t} catch {}\n\treturn undefined;\n}\n\nexport async function getPackageVersion(pkg: string) {\n\tif (packageJSONCache) {\n\t\treturn (packageJSONCache.dependencies?.[pkg] ||\n\t\t\tpackageJSONCache.devDependencies?.[pkg] ||\n\t\t\tpackageJSONCache.peerDependencies?.[pkg]) as string | undefined;\n\t}\n\n\ttry {\n\t\tconst cwd =\n\t\t\ttypeof process !== \"undefined\" && typeof process.cwd === \"function\"\n\t\t\t\t? process.cwd()\n\t\t\t\t: \"\";\n\t\tif (!cwd) throw new Error(\"no-cwd\");\n\t\tconst importRuntime = (m: string) =>\n\t\t\t(Function(\"mm\", \"return import(mm)\") as any)(m);\n\t\tconst [{ default: fs }, { default: path }] = await Promise.all([\n\t\t\timportRuntime(\"fs/promises\"),\n\t\t\timportRuntime(\"path\"),\n\t\t]);\n\t\tconst pkgJsonPath = path.join(cwd, \"node_modules\", pkg, \"package.json\");\n\t\tconst raw = await fs.readFile(pkgJsonPath, \"utf-8\");\n\t\tconst json = JSON.parse(raw);\n\t\tconst resolved =\n\t\t\t(json.version as string) ||\n\t\t\t(await getVersionFromLocalPackageJson(pkg)) ||\n\t\t\tundefined;\n\t\treturn resolved;\n\t} catch {}\n\n\tconst fromRoot = await getVersionFromLocalPackageJson(pkg);\n\treturn fromRoot;\n}\n\nasync function getVersionFromLocalPackageJson(pkg: string) {\n\tconst json = await readRootPackageJson();\n\tif (!json) return undefined;\n\tconst allDeps = {\n\t\t...json.dependencies,\n\t\t...json.devDependencies,\n\t\t...json.peerDependencies,\n\t} as Record;\n\treturn allDeps[pkg];\n}\n\nexport async function getNameFromLocalPackageJson() {\n\tconst json = await readRootPackageJson();\n\treturn json?.name as string | undefined;\n}\n","import type { DetectionInfo } from \"../types\";\nimport { getPackageVersion } from \"../utils/package-json\";\n\nconst DATABASES: Record = {\n\tpg: \"postgresql\",\n\tmysql: \"mysql\",\n\tmariadb: \"mariadb\",\n\tsqlite3: \"sqlite\",\n\t\"better-sqlite3\": \"sqlite\",\n\t\"@prisma/client\": \"prisma\",\n\tmongoose: \"mongodb\",\n\tmongodb: \"mongodb\",\n\t\"drizzle-orm\": \"drizzle\",\n};\n\nexport async function detectDatabase(): Promise {\n\tfor (const [pkg, name] of Object.entries(DATABASES)) {\n\t\tconst version = await getPackageVersion(pkg);\n\t\tif (version) return { name, version };\n\t}\n\treturn undefined;\n}\n","import { getPackageVersion } from \"../utils/package-json\";\n\nconst FRAMEWORKS: Record = {\n\tnext: \"next\",\n\tnuxt: \"nuxt\",\n\t\"@remix-run/server-runtime\": \"remix\",\n\tastro: \"astro\",\n\t\"@sveltejs/kit\": \"sveltekit\",\n\t\"solid-start\": \"solid-start\",\n\t\"tanstack-start\": \"tanstack-start\",\n\thono: \"hono\",\n\texpress: \"express\",\n\telysia: \"elysia\",\n\texpo: \"expo\",\n};\n\nexport async function detectFramework() {\n\tfor (const [pkg, name] of Object.entries(FRAMEWORKS)) {\n\t\tconst version = await getPackageVersion(pkg);\n\t\tif (version) return { name, version };\n\t}\n\treturn undefined;\n}\n","// https://github.com/zkochan/packages/blob/main/which-pm-runs/index.js\nimport { env } from \"@better-auth/core/env\";\n\nexport function detectPackageManager() {\n\tconst userAgent = env.npm_config_user_agent;\n\tif (!userAgent) {\n\t\treturn undefined;\n\t}\n\n\tconst pmSpec = userAgent.split(\" \")[0]!;\n\tconst separatorPos = pmSpec.lastIndexOf(\"/\");\n\tconst name = pmSpec.substring(0, separatorPos);\n\n\treturn {\n\t\tname: name === \"npminstall\" ? \"cnpm\" : name,\n\t\tversion: pmSpec.substring(separatorPos + 1),\n\t};\n}\n","export const importRuntime = (m: string): Promise => {\n\treturn (Function(\"mm\", \"return import(mm)\") as any)(m);\n};\n","import { env } from \"@better-auth/core/env\";\nimport { importRuntime } from \"../utils/import-util\";\n\nfunction getVendor() {\n\tconst hasAny = (...keys: string[]) =>\n\t\tkeys.some((k) => Boolean((env as any)[k]));\n\n\tif (\n\t\thasAny(\"CF_PAGES\", \"CF_PAGES_URL\", \"CF_ACCOUNT_ID\") ||\n\t\t(typeof navigator !== \"undefined\" &&\n\t\t\tnavigator.userAgent === \"Cloudflare-Workers\")\n\t) {\n\t\treturn \"cloudflare\";\n\t}\n\n\tif (hasAny(\"VERCEL\", \"VERCEL_URL\", \"VERCEL_ENV\")) return \"vercel\";\n\n\tif (hasAny(\"NETLIFY\", \"NETLIFY_URL\")) return \"netlify\";\n\n\tif (\n\t\thasAny(\n\t\t\t\"RENDER\",\n\t\t\t\"RENDER_URL\",\n\t\t\t\"RENDER_INTERNAL_HOSTNAME\",\n\t\t\t\"RENDER_SERVICE_ID\",\n\t\t)\n\t) {\n\t\treturn \"render\";\n\t}\n\n\tif (\n\t\thasAny(\"AWS_LAMBDA_FUNCTION_NAME\", \"AWS_EXECUTION_ENV\", \"LAMBDA_TASK_ROOT\")\n\t) {\n\t\treturn \"aws\";\n\t}\n\n\tif (\n\t\thasAny(\n\t\t\t\"GOOGLE_CLOUD_FUNCTION_NAME\",\n\t\t\t\"GOOGLE_CLOUD_PROJECT\",\n\t\t\t\"GCP_PROJECT\",\n\t\t\t\"K_SERVICE\",\n\t\t)\n\t) {\n\t\treturn \"gcp\";\n\t}\n\n\tif (\n\t\thasAny(\n\t\t\t\"AZURE_FUNCTION_NAME\",\n\t\t\t\"FUNCTIONS_WORKER_RUNTIME\",\n\t\t\t\"WEBSITE_INSTANCE_ID\",\n\t\t\t\"WEBSITE_SITE_NAME\",\n\t\t)\n\t) {\n\t\treturn \"azure\";\n\t}\n\n\tif (hasAny(\"DENO_DEPLOYMENT_ID\", \"DENO_REGION\")) return \"deno-deploy\";\n\n\tif (hasAny(\"FLY_APP_NAME\", \"FLY_REGION\", \"FLY_ALLOC_ID\")) return \"fly-io\";\n\n\tif (hasAny(\"RAILWAY_STATIC_URL\", \"RAILWAY_ENVIRONMENT_NAME\"))\n\t\treturn \"railway\";\n\n\tif (hasAny(\"DYNO\", \"HEROKU_APP_NAME\")) return \"heroku\";\n\n\tif (hasAny(\"DO_DEPLOYMENT_ID\", \"DO_APP_NAME\", \"DIGITALOCEAN\"))\n\t\treturn \"digitalocean\";\n\n\tif (hasAny(\"KOYEB\", \"KOYEB_DEPLOYMENT_ID\", \"KOYEB_APP_NAME\")) return \"koyeb\";\n\n\treturn null;\n}\n\nexport async function detectSystemInfo() {\n\ttry {\n\t\t//check if it's cloudflare\n\t\tif (getVendor() === \"cloudflare\") return \"cloudflare\";\n\t\tconst os = await importRuntime(\"os\");\n\t\tconst cpus = os.cpus();\n\t\treturn {\n\t\t\tdeploymentVendor: getVendor(),\n\t\t\tsystemPlatform: os.platform(),\n\t\t\tsystemRelease: os.release(),\n\t\t\tsystemArchitecture: os.arch(),\n\t\t\tcpuCount: cpus.length,\n\t\t\tcpuModel: cpus.length ? cpus[0]!.model : null,\n\t\t\tcpuSpeed: cpus.length ? cpus[0]!.speed : null,\n\t\t\tmemory: os.totalmem(),\n\t\t\tisWSL: await isWsl(),\n\t\t\tisDocker: await isDocker(),\n\t\t\tisTTY:\n\t\t\t\ttypeof process !== \"undefined\" && (process as any).stdout\n\t\t\t\t\t? (process as any).stdout.isTTY\n\t\t\t\t\t: null,\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tsystemPlatform: null,\n\t\t\tsystemRelease: null,\n\t\t\tsystemArchitecture: null,\n\t\t\tcpuCount: null,\n\t\t\tcpuModel: null,\n\t\t\tcpuSpeed: null,\n\t\t\tmemory: null,\n\t\t\tisWSL: null,\n\t\t\tisDocker: null,\n\t\t\tisTTY: null,\n\t\t};\n\t}\n}\n\nlet isDockerCached: boolean | undefined;\n\nasync function hasDockerEnv() {\n\tif (getVendor() === \"cloudflare\") return false;\n\n\ttry {\n\t\tconst fs = await importRuntime(\"fs\");\n\t\tfs.statSync(\"/.dockerenv\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function hasDockerCGroup() {\n\tif (getVendor() === \"cloudflare\") return false;\n\ttry {\n\t\tconst fs = await importRuntime(\"fs\");\n\t\treturn fs.readFileSync(\"/proc/self/cgroup\", \"utf8\").includes(\"docker\");\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function isDocker() {\n\tif (getVendor() === \"cloudflare\") return false;\n\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = (await hasDockerEnv()) || (await hasDockerCGroup());\n\t}\n\n\treturn isDockerCached;\n}\n\nasync function isWsl() {\n\ttry {\n\t\tif (getVendor() === \"cloudflare\") return false;\n\t\tif (typeof process === \"undefined\" || process?.platform !== \"linux\") {\n\t\t\treturn false;\n\t\t}\n\t\tconst fs = await importRuntime(\"fs\");\n\t\tconst os = await importRuntime(\"os\");\n\t\tif (os.release().toLowerCase().includes(\"microsoft\")) {\n\t\t\tif (await isInsideContainer()) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn fs\n\t\t\t.readFileSync(\"/proc/version\", \"utf8\")\n\t\t\t.toLowerCase()\n\t\t\t.includes(\"microsoft\")\n\t\t\t? !(await isInsideContainer())\n\t\t\t: false;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nlet isInsideContainerCached: boolean | undefined;\n\nconst hasContainerEnv = async () => {\n\tif (getVendor() === \"cloudflare\") return false;\n\ttry {\n\t\tconst fs = await importRuntime(\"fs\");\n\t\tfs.statSync(\"/run/.containerenv\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nasync function isInsideContainer() {\n\tif (isInsideContainerCached === undefined) {\n\t\tisInsideContainerCached = (await hasContainerEnv()) || (await isDocker());\n\t}\n\n\treturn isInsideContainerCached;\n}\n\nexport function isCI() {\n\treturn (\n\t\tenv.CI !== \"false\" &&\n\t\t(\"BUILD_ID\" in env || // Jenkins, Cloudbees\n\t\t\t\"BUILD_NUMBER\" in env || // Jenkins, TeamCity (fixed typo: extra space removed)\n\t\t\t\"CI\" in env || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari, Cloudflare\n\t\t\t\"CI_APP_ID\" in env || // Appflow\n\t\t\t\"CI_BUILD_ID\" in env || // Appflow\n\t\t\t\"CI_BUILD_NUMBER\" in env || // Appflow\n\t\t\t\"CI_NAME\" in env || // Codeship and others\n\t\t\t\"CONTINUOUS_INTEGRATION\" in env || // Travis CI, Cirrus CI\n\t\t\t\"RUN_ID\" in env) // TaskCluster, dsari\n\t);\n}\n","import { getEnvVar, isTest } from \"@better-auth/core/env\";\nimport { isCI } from \"./detect-system-info\";\n\nexport function detectRuntime() {\n\t// @ts-expect-error: TS doesn't know about Deno global\n\tif (typeof Deno !== \"undefined\") {\n\t\t// @ts-expect-error: TS doesn't know about Deno global\n\t\tconst denoVersion = Deno?.version?.deno ?? null;\n\t\treturn { name: \"deno\", version: denoVersion };\n\t}\n\n\tif (typeof Bun !== \"undefined\") {\n\t\tconst bunVersion = Bun?.version ?? null;\n\t\treturn { name: \"bun\", version: bunVersion };\n\t}\n\n\tif (typeof process !== \"undefined\" && process?.versions?.node) {\n\t\treturn { name: \"node\", version: process.versions.node ?? null };\n\t}\n\treturn { name: \"edge\", version: null };\n}\n\nexport function detectEnvironment() {\n\treturn getEnvVar(\"NODE_ENV\") === \"production\"\n\t\t? \"production\"\n\t\t: isCI()\n\t\t\t? \"ci\"\n\t\t\t: isTest()\n\t\t\t\t? \"test\"\n\t\t\t\t: \"development\";\n}\n","import { base64 } from \"@better-auth/utils/base64\";\nimport { createHash } from \"@better-auth/utils/hash\";\n\nexport async function hashToBase64(\n\tdata: string | ArrayBuffer,\n): Promise {\n\tconst buffer = await createHash(\"SHA-256\").digest(data);\n\treturn base64.encode(buffer);\n}\n","import { createRandomStringGenerator } from \"@better-auth/utils/random\";\n\nexport const generateId = (size: number) => {\n\treturn createRandomStringGenerator(\"a-z\", \"A-Z\", \"0-9\")(size || 32);\n};\n","import { hashToBase64 } from \"./utils/hash\";\nimport { generateId } from \"./utils/id\";\nimport { getNameFromLocalPackageJson } from \"./utils/package-json\";\n\nlet projectIdCached: string | null = null;\n\nexport async function getProjectId(\n\tbaseUrl: string | undefined,\n): Promise {\n\tif (projectIdCached) return projectIdCached;\n\n\tconst projectName = await getNameFromLocalPackageJson();\n\tif (projectName) {\n\t\tprojectIdCached = await hashToBase64(\n\t\t\tbaseUrl ? baseUrl + projectName : projectName,\n\t\t);\n\t\treturn projectIdCached;\n\t}\n\n\tif (baseUrl) {\n\t\tprojectIdCached = await hashToBase64(baseUrl);\n\t\treturn projectIdCached;\n\t}\n\n\tprojectIdCached = generateId(32);\n\treturn projectIdCached;\n}\n","import type { BetterAuthOptions } from \"@better-auth/core\";\nimport { ENV, getBooleanEnvVar, isTest, logger } from \"@better-auth/core/env\";\nimport { betterFetch } from \"@better-fetch/fetch\";\nimport { getTelemetryAuthConfig } from \"./detectors/detect-auth-config\";\nimport { detectDatabase } from \"./detectors/detect-database\";\nimport { detectFramework } from \"./detectors/detect-framework\";\nimport { detectPackageManager } from \"./detectors/detect-project-info\";\nimport { detectEnvironment, detectRuntime } from \"./detectors/detect-runtime\";\nimport { detectSystemInfo } from \"./detectors/detect-system-info\";\nimport { getProjectId } from \"./project-id\";\nimport type { TelemetryContext, TelemetryEvent } from \"./types\";\nexport { getTelemetryAuthConfig };\nexport type { TelemetryEvent } from \"./types\";\n\nconst noop: (event: TelemetryEvent) => Promise = async function noop() {};\n\nexport async function createTelemetry(\n\toptions: BetterAuthOptions,\n\tcontext?: TelemetryContext | undefined,\n) {\n\tconst debugEnabled =\n\t\toptions.telemetry?.debug ||\n\t\tgetBooleanEnvVar(\"BETTER_AUTH_TELEMETRY_DEBUG\", false);\n\n\tconst telemetryEndpoint = ENV.BETTER_AUTH_TELEMETRY_ENDPOINT;\n\t// Return noop if no endpoint and no custom track function\n\tif (!telemetryEndpoint && !context?.customTrack) {\n\t\treturn {\n\t\t\tpublish: noop,\n\t\t};\n\t}\n\tconst track = async (event: TelemetryEvent) => {\n\t\tif (context?.customTrack) {\n\t\t\tawait context.customTrack(event).catch(logger.error);\n\t\t} else if (telemetryEndpoint) {\n\t\t\tif (debugEnabled) {\n\t\t\t\tlogger.info(\"telemetry event\", JSON.stringify(event, null, 2));\n\t\t\t} else {\n\t\t\t\tawait betterFetch(telemetryEndpoint, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: event,\n\t\t\t\t}).catch(logger.error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst isEnabled = async () => {\n\t\tconst telemetryEnabled =\n\t\t\toptions.telemetry?.enabled !== undefined\n\t\t\t\t? options.telemetry.enabled\n\t\t\t\t: false;\n\t\tconst envEnabled = getBooleanEnvVar(\"BETTER_AUTH_TELEMETRY\", false);\n\t\treturn (\n\t\t\t(envEnabled || telemetryEnabled) && (context?.skipTestCheck || !isTest())\n\t\t);\n\t};\n\n\tconst enabled = await isEnabled();\n\tlet anonymousId: string | undefined;\n\n\tif (enabled) {\n\t\tanonymousId = await getProjectId(options.baseURL);\n\n\t\tconst payload = {\n\t\t\tconfig: getTelemetryAuthConfig(options, context),\n\t\t\truntime: detectRuntime(),\n\t\t\tdatabase: await detectDatabase(),\n\t\t\tframework: await detectFramework(),\n\t\t\tenvironment: detectEnvironment(),\n\t\t\tsystemInfo: await detectSystemInfo(),\n\t\t\tpackageManager: detectPackageManager(),\n\t\t};\n\n\t\tvoid track({ type: \"init\", payload, anonymousId });\n\t}\n\n\treturn {\n\t\tpublish: async (event: TelemetryEvent) => {\n\t\t\tif (!enabled) return;\n\t\t\tif (!anonymousId) {\n\t\t\t\tanonymousId = await getProjectId(options.baseURL);\n\t\t\t}\n\t\t\tawait track({\n\t\t\t\ttype: event.type,\n\t\t\t\tpayload: event.payload,\n\t\t\t\tanonymousId,\n\t\t\t});\n\t\t},\n\t};\n}\n"],"mappings":"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"}