@better-auth/telemetry 1.5.4 → 1.5.5

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/dist/index.mjs CHANGED
@@ -194,44 +194,8 @@ async function getTelemetryAuthConfig(options, context) {
194
194
 
195
195
  //#endregion
196
196
  //#region src/utils/package-json.ts
197
- let packageJSONCache;
198
- async function readRootPackageJson() {
199
- if (packageJSONCache) return packageJSONCache;
200
- try {
201
- const cwd = typeof process !== "undefined" && typeof process.cwd === "function" ? process.cwd() : "";
202
- if (!cwd) return void 0;
203
- const importRuntime = (m) => Function("mm", "return import(mm)")(m);
204
- const [{ default: fs }, { default: path }] = await Promise.all([importRuntime("fs/promises"), importRuntime("path")]);
205
- const raw = await fs.readFile(path.join(cwd, "package.json"), "utf-8");
206
- packageJSONCache = JSON.parse(raw);
207
- return packageJSONCache;
208
- } catch {}
209
- }
210
- async function getPackageVersion(pkg) {
211
- if (packageJSONCache) return packageJSONCache.dependencies?.[pkg] || packageJSONCache.devDependencies?.[pkg] || packageJSONCache.peerDependencies?.[pkg];
212
- try {
213
- const cwd = typeof process !== "undefined" && typeof process.cwd === "function" ? process.cwd() : "";
214
- if (!cwd) throw new Error("no-cwd");
215
- const importRuntime = (m) => Function("mm", "return import(mm)")(m);
216
- const [{ default: fs }, { default: path }] = await Promise.all([importRuntime("fs/promises"), importRuntime("path")]);
217
- const pkgJsonPath = path.join(cwd, "node_modules", pkg, "package.json");
218
- const raw = await fs.readFile(pkgJsonPath, "utf-8");
219
- return JSON.parse(raw).version || await getVersionFromLocalPackageJson(pkg) || void 0;
220
- } catch {}
221
- return await getVersionFromLocalPackageJson(pkg);
222
- }
223
- async function getVersionFromLocalPackageJson(pkg) {
224
- const json = await readRootPackageJson();
225
- if (!json) return void 0;
226
- return {
227
- ...json.dependencies,
228
- ...json.devDependencies,
229
- ...json.peerDependencies
230
- }[pkg];
231
- }
232
- async function getNameFromLocalPackageJson() {
233
- return (await readRootPackageJson())?.name;
234
- }
197
+ async function getPackageVersion(_pkg) {}
198
+ async function getNameFromLocalPackageJson() {}
235
199
 
236
200
  //#endregion
237
201
  //#region src/detectors/detect-database.ts
@@ -248,7 +212,7 @@ const DATABASES = {
248
212
  };
249
213
  async function detectDatabase() {
250
214
  for (const [pkg, name] of Object.entries(DATABASES)) {
251
- const version = await getPackageVersion(pkg);
215
+ const version = await /* @__PURE__ */ getPackageVersion(pkg);
252
216
  if (version) return {
253
217
  name,
254
218
  version
@@ -273,7 +237,7 @@ const FRAMEWORKS = {
273
237
  };
274
238
  async function detectFramework() {
275
239
  for (const [pkg, name] of Object.entries(FRAMEWORKS)) {
276
- const version = await getPackageVersion(pkg);
240
+ const version = await /* @__PURE__ */ getPackageVersion(pkg);
277
241
  if (version) return {
278
242
  name,
279
243
  version
@@ -295,12 +259,6 @@ function detectPackageManager() {
295
259
  };
296
260
  }
297
261
 
298
- //#endregion
299
- //#region src/utils/import-util.ts
300
- const importRuntime = (m) => {
301
- return Function("mm", "return import(mm)")(m);
302
- };
303
-
304
262
  //#endregion
305
263
  //#region src/detectors/detect-system-info.ts
306
264
  function getVendor() {
@@ -321,88 +279,19 @@ function getVendor() {
321
279
  return null;
322
280
  }
323
281
  async function detectSystemInfo() {
324
- try {
325
- if (getVendor() === "cloudflare") return "cloudflare";
326
- const os = await importRuntime("os");
327
- const cpus = os.cpus();
328
- return {
329
- deploymentVendor: getVendor(),
330
- systemPlatform: os.platform(),
331
- systemRelease: os.release(),
332
- systemArchitecture: os.arch(),
333
- cpuCount: cpus.length,
334
- cpuModel: cpus.length ? cpus[0].model : null,
335
- cpuSpeed: cpus.length ? cpus[0].speed : null,
336
- memory: os.totalmem(),
337
- isWSL: await isWsl(),
338
- isDocker: await isDocker(),
339
- isTTY: typeof process !== "undefined" && process.stdout ? process.stdout.isTTY : null
340
- };
341
- } catch {
342
- return {
343
- systemPlatform: null,
344
- systemRelease: null,
345
- systemArchitecture: null,
346
- cpuCount: null,
347
- cpuModel: null,
348
- cpuSpeed: null,
349
- memory: null,
350
- isWSL: null,
351
- isDocker: null,
352
- isTTY: null
353
- };
354
- }
355
- }
356
- let isDockerCached;
357
- async function hasDockerEnv() {
358
- if (getVendor() === "cloudflare") return false;
359
- try {
360
- (await importRuntime("fs")).statSync("/.dockerenv");
361
- return true;
362
- } catch {
363
- return false;
364
- }
365
- }
366
- async function hasDockerCGroup() {
367
- if (getVendor() === "cloudflare") return false;
368
- try {
369
- return (await importRuntime("fs")).readFileSync("/proc/self/cgroup", "utf8").includes("docker");
370
- } catch {
371
- return false;
372
- }
373
- }
374
- async function isDocker() {
375
- if (getVendor() === "cloudflare") return false;
376
- if (isDockerCached === void 0) isDockerCached = await hasDockerEnv() || await hasDockerCGroup();
377
- return isDockerCached;
378
- }
379
- async function isWsl() {
380
- try {
381
- if (getVendor() === "cloudflare") return false;
382
- if (typeof process === "undefined" || process?.platform !== "linux") return false;
383
- const fs = await importRuntime("fs");
384
- if ((await importRuntime("os")).release().toLowerCase().includes("microsoft")) {
385
- if (await isInsideContainer()) return false;
386
- return true;
387
- }
388
- return fs.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft") ? !await isInsideContainer() : false;
389
- } catch {
390
- return false;
391
- }
392
- }
393
- let isInsideContainerCached;
394
- const hasContainerEnv = async () => {
395
- if (getVendor() === "cloudflare") return false;
396
- try {
397
- (await importRuntime("fs")).statSync("/run/.containerenv");
398
- return true;
399
- } catch {
400
- return false;
401
- }
402
- };
403
- async function isInsideContainer() {
404
- if (isInsideContainerCached === void 0) isInsideContainerCached = await hasContainerEnv() || await isDocker();
405
- return isInsideContainerCached;
282
+ return {
283
+ deploymentVendor: getVendor(),
284
+ systemPlatform: null,
285
+ systemRelease: null,
286
+ systemArchitecture: null,
287
+ cpuCount: null,
288
+ cpuModel: null,
289
+ cpuSpeed: null,
290
+ memory: null,
291
+ isWSL: null,
292
+ isDocker: null,
293
+ isTTY: null
294
+ };
406
295
  }
407
296
  function isCI() {
408
297
  return env.CI !== "false" && ("BUILD_ID" in env || "BUILD_NUMBER" in env || "CI" in env || "CI_APP_ID" in env || "CI_BUILD_ID" in env || "CI_BUILD_NUMBER" in env || "CI_NAME" in env || "CONTINUOUS_INTEGRATION" in env || "RUN_ID" in env);
@@ -450,7 +339,7 @@ const generateId = (size) => {
450
339
  let projectIdCached = null;
451
340
  async function getProjectId(baseUrl) {
452
341
  if (projectIdCached) return projectIdCached;
453
- const projectName = await getNameFromLocalPackageJson();
342
+ const projectName = await /* @__PURE__ */ getNameFromLocalPackageJson();
454
343
  if (projectName) {
455
344
  projectIdCached = await hashToBase64(baseUrl ? baseUrl + projectName : projectName);
456
345
  return projectIdCached;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"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 async 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\tbeforeEmailVerification:\n\t\t\t\t!!options.emailVerification?.beforeEmailVerification,\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: await Promise.all(\n\t\t\tObject.keys(options.socialProviders || {}).map(async (key) => {\n\t\t\t\tconst p =\n\t\t\t\t\toptions.socialProviders?.[\n\t\t\t\t\t\tkey as keyof typeof options.socialProviders\n\t\t\t\t\t];\n\t\t\t\tif (!p) return {};\n\t\t\t\tconst provider = typeof p === \"function\" ? await p() : p;\n\t\t\t\treturn {\n\t\t\t\t\tid: key,\n\t\t\t\t\tmapProfileToUser: !!provider.mapProfileToUser,\n\t\t\t\t\tdisableDefaultScope: !!provider.disableDefaultScope,\n\t\t\t\t\tdisableIdTokenSignIn: !!provider.disableIdTokenSignIn,\n\t\t\t\t\tdisableImplicitSignUp: provider.disableImplicitSignUp,\n\t\t\t\t\tdisableSignUp: provider.disableSignUp,\n\t\t\t\t\tgetUserInfo: !!provider.getUserInfo,\n\t\t\t\t\toverrideUserInfoOnSignIn: !!provider.overrideUserInfoOnSignIn,\n\t\t\t\t\tprompt: provider.prompt,\n\t\t\t\t\tverifyIdToken: !!provider.verifyIdToken,\n\t\t\t\t\tscope: provider.scope,\n\t\t\t\t\trefreshAccessToken: !!provider.refreshAccessToken,\n\t\t\t\t};\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\tsendChangeEmailConfirmation:\n\t\t\t\t\t!!options.user?.changeEmail?.sendChangeEmailConfirmation,\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\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<string, string | undefined>;\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<string, string> = {\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<DetectionInfo | undefined> {\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<string, string> = {\n\tnext: \"next\",\n\tnuxt: \"nuxt\",\n\t\"react-router\": \"react-router\",\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 = <T>(m: string): Promise<T> => {\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<typeof import(\"os\")>(\"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<typeof import(\"fs\")>(\"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<typeof import(\"fs\")>(\"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<typeof import(\"fs\")>(\"fs\");\n\t\tconst os = await importRuntime<typeof import(\"os\")>(\"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<typeof import(\"fs\")>(\"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<string> {\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<string> {\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<void> = 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(\n\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t);\n\n\t\tconst payload = {\n\t\t\tconfig: await 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(\n\t\t\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t\t\t);\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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"}
1
+ {"version":3,"file":"index.mjs","names":[],"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/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 async 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\tbeforeEmailVerification:\n\t\t\t\t!!options.emailVerification?.beforeEmailVerification,\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: await Promise.all(\n\t\t\tObject.keys(options.socialProviders || {}).map(async (key) => {\n\t\t\t\tconst p =\n\t\t\t\t\toptions.socialProviders?.[\n\t\t\t\t\t\tkey as keyof typeof options.socialProviders\n\t\t\t\t\t];\n\t\t\t\tif (!p) return {};\n\t\t\t\tconst provider = typeof p === \"function\" ? await p() : p;\n\t\t\t\treturn {\n\t\t\t\t\tid: key,\n\t\t\t\t\tmapProfileToUser: !!provider.mapProfileToUser,\n\t\t\t\t\tdisableDefaultScope: !!provider.disableDefaultScope,\n\t\t\t\t\tdisableIdTokenSignIn: !!provider.disableIdTokenSignIn,\n\t\t\t\t\tdisableImplicitSignUp: provider.disableImplicitSignUp,\n\t\t\t\t\tdisableSignUp: provider.disableSignUp,\n\t\t\t\t\tgetUserInfo: !!provider.getUserInfo,\n\t\t\t\t\toverrideUserInfoOnSignIn: !!provider.overrideUserInfoOnSignIn,\n\t\t\t\t\tprompt: provider.prompt,\n\t\t\t\t\tverifyIdToken: !!provider.verifyIdToken,\n\t\t\t\t\tscope: provider.scope,\n\t\t\t\t\trefreshAccessToken: !!provider.refreshAccessToken,\n\t\t\t\t};\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\tsendChangeEmailConfirmation:\n\t\t\t\t\t!!options.user?.changeEmail?.sendChangeEmailConfirmation,\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\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","// In the default (non-node) build, filesystem access is not available.\n// The node build (src/node.ts) provides its own inline implementation\n// using static top-level imports of node:fs/promises and node:path.\n\nexport async function getPackageVersion(\n\t_pkg: string,\n): Promise<string | undefined> {\n\treturn undefined;\n}\n\nexport async function getNameFromLocalPackageJson(): Promise<\n\tstring | undefined\n> {\n\treturn undefined;\n}\n","import type { DetectionInfo } from \"../types\";\nimport { getPackageVersion } from \"../utils/package-json\";\n\nconst DATABASES: Record<string, string> = {\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<DetectionInfo | undefined> {\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<string, string> = {\n\tnext: \"next\",\n\tnuxt: \"nuxt\",\n\t\"react-router\": \"react-router\",\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","import { env } from \"@better-auth/core/env\";\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\n// In the default (non-node) build, system info detection is not available.\n// The node build (src/node.ts) provides its own inline implementation\n// using static top-level imports of node:os and node:fs.\nexport async function detectSystemInfo() {\n\treturn {\n\t\tdeploymentVendor: getVendor(),\n\t\tsystemPlatform: null,\n\t\tsystemRelease: null,\n\t\tsystemArchitecture: null,\n\t\tcpuCount: null,\n\t\tcpuModel: null,\n\t\tcpuSpeed: null,\n\t\tmemory: null,\n\t\tisWSL: null,\n\t\tisDocker: null,\n\t\tisTTY: null,\n\t};\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\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<string> {\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<string> {\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<void> = 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(\n\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t);\n\n\t\tconst payload = {\n\t\t\tconfig: await 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(\n\t\t\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t\t\t);\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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"}
@@ -0,0 +1,223 @@
1
+ import * as _better_auth_core0 from "@better-auth/core";
2
+ import { BetterAuthOptions } from "@better-auth/core";
3
+ import * as _better_auth_core_db0 from "@better-auth/core/db";
4
+ import * as _better_auth_core_social_providers0 from "@better-auth/core/social-providers";
5
+
6
+ //#region src/types.d.ts
7
+ interface TelemetryEvent {
8
+ type: string;
9
+ anonymousId?: string | undefined;
10
+ payload: Record<string, any>;
11
+ }
12
+ interface TelemetryContext {
13
+ customTrack?: ((event: TelemetryEvent) => Promise<void>) | undefined;
14
+ database?: string | undefined;
15
+ adapter?: string | undefined;
16
+ skipTestCheck?: boolean | undefined;
17
+ }
18
+ //#endregion
19
+ //#region src/detectors/detect-auth-config.d.ts
20
+ declare function getTelemetryAuthConfig(options: BetterAuthOptions, context?: TelemetryContext | undefined): Promise<{
21
+ database: string | undefined;
22
+ adapter: string | undefined;
23
+ emailVerification: {
24
+ sendVerificationEmail: boolean;
25
+ sendOnSignUp: boolean;
26
+ sendOnSignIn: boolean;
27
+ autoSignInAfterVerification: boolean;
28
+ expiresIn: number | undefined;
29
+ beforeEmailVerification: boolean;
30
+ afterEmailVerification: boolean;
31
+ };
32
+ emailAndPassword: {
33
+ enabled: boolean;
34
+ disableSignUp: boolean;
35
+ requireEmailVerification: boolean;
36
+ maxPasswordLength: number | undefined;
37
+ minPasswordLength: number | undefined;
38
+ sendResetPassword: boolean;
39
+ resetPasswordTokenExpiresIn: number | undefined;
40
+ onPasswordReset: boolean;
41
+ password: {
42
+ hash: boolean;
43
+ verify: boolean;
44
+ };
45
+ autoSignIn: boolean;
46
+ revokeSessionsOnPasswordReset: boolean;
47
+ };
48
+ socialProviders: ({
49
+ id?: undefined;
50
+ mapProfileToUser?: undefined;
51
+ disableDefaultScope?: undefined;
52
+ disableIdTokenSignIn?: undefined;
53
+ disableImplicitSignUp?: undefined;
54
+ disableSignUp?: undefined;
55
+ getUserInfo?: undefined;
56
+ overrideUserInfoOnSignIn?: undefined;
57
+ prompt?: undefined;
58
+ verifyIdToken?: undefined;
59
+ scope?: undefined;
60
+ refreshAccessToken?: undefined;
61
+ } | {
62
+ id: string;
63
+ mapProfileToUser: boolean;
64
+ disableDefaultScope: boolean;
65
+ disableIdTokenSignIn: boolean;
66
+ disableImplicitSignUp: boolean | undefined;
67
+ disableSignUp: boolean | undefined;
68
+ getUserInfo: boolean;
69
+ overrideUserInfoOnSignIn: boolean;
70
+ prompt: "none" | "select_account" | "consent" | "login" | "select_account consent" | undefined;
71
+ verifyIdToken: boolean;
72
+ scope: string[] | undefined;
73
+ refreshAccessToken: boolean;
74
+ })[];
75
+ plugins: string[] | undefined;
76
+ user: {
77
+ modelName: "user" | _better_auth_core0.LiteralString | undefined;
78
+ fields: Partial<Record<"name" | "email" | "image" | "createdAt" | "updatedAt" | "emailVerified", string>> | undefined;
79
+ additionalFields: {
80
+ [x: string]: _better_auth_core_db0.DBFieldAttribute;
81
+ } | undefined;
82
+ changeEmail: {
83
+ enabled: boolean | undefined;
84
+ sendChangeEmailConfirmation: boolean;
85
+ };
86
+ };
87
+ verification: {
88
+ modelName: _better_auth_core0.LiteralString | "verification" | undefined;
89
+ disableCleanup: boolean | undefined;
90
+ fields: Partial<Record<"createdAt" | "updatedAt" | "value" | "expiresAt" | "identifier", string>> | undefined;
91
+ };
92
+ session: {
93
+ modelName: _better_auth_core0.LiteralString | "session" | undefined;
94
+ additionalFields: {
95
+ [x: string]: _better_auth_core_db0.DBFieldAttribute;
96
+ } | undefined;
97
+ cookieCache: {
98
+ enabled: boolean | undefined;
99
+ maxAge: number | undefined;
100
+ strategy: "compact" | "jwt" | "jwe" | undefined;
101
+ };
102
+ disableSessionRefresh: boolean | undefined;
103
+ expiresIn: number | undefined;
104
+ fields: Partial<Record<"createdAt" | "updatedAt" | "expiresAt" | "userId" | "token" | "ipAddress" | "userAgent", string>> | undefined;
105
+ freshAge: number | undefined;
106
+ preserveSessionInDatabase: boolean | undefined;
107
+ storeSessionInDatabase: boolean | undefined;
108
+ updateAge: number | undefined;
109
+ };
110
+ account: {
111
+ modelName: _better_auth_core0.LiteralString | "account" | undefined;
112
+ fields: Partial<Record<"scope" | "createdAt" | "updatedAt" | "userId" | "providerId" | "accountId" | "accessToken" | "refreshToken" | "idToken" | "accessTokenExpiresAt" | "refreshTokenExpiresAt" | "password", string>> | undefined;
113
+ encryptOAuthTokens: boolean | undefined;
114
+ updateAccountOnSignIn: boolean | undefined;
115
+ accountLinking: {
116
+ enabled: boolean | undefined;
117
+ trustedProviders: _better_auth_core0.LiteralUnion<"linear" | "huggingface" | "github" | "apple" | "atlassian" | "cognito" | "discord" | "facebook" | "figma" | "microsoft" | "google" | "slack" | "spotify" | "twitch" | "twitter" | "dropbox" | "kick" | "linkedin" | "gitlab" | "tiktok" | "reddit" | "roblox" | "salesforce" | "vk" | "zoom" | "notion" | "kakao" | "naver" | "line" | "paybin" | "paypal" | "polar" | "railway" | "vercel" | "email-password", string>[] | ((request?: Request | undefined) => _better_auth_core0.Awaitable<Array<_better_auth_core0.LiteralUnion<_better_auth_core_social_providers0.SocialProviderList[number] | "email-password", string>>>) | undefined;
118
+ updateUserInfoOnLink: boolean | undefined;
119
+ allowUnlinkingAll: boolean | undefined;
120
+ };
121
+ };
122
+ hooks: {
123
+ after: boolean;
124
+ before: boolean;
125
+ };
126
+ secondaryStorage: boolean;
127
+ advanced: {
128
+ cookiePrefix: boolean;
129
+ cookies: boolean;
130
+ crossSubDomainCookies: {
131
+ domain: boolean;
132
+ enabled: boolean | undefined;
133
+ additionalCookies: string[] | undefined;
134
+ };
135
+ database: {
136
+ generateId: false | _better_auth_core0.GenerateIdFn | "serial" | "uuid" | undefined;
137
+ defaultFindManyLimit: number | undefined;
138
+ };
139
+ useSecureCookies: boolean | undefined;
140
+ ipAddress: {
141
+ disableIpTracking: boolean | undefined;
142
+ ipAddressHeaders: string[] | undefined;
143
+ };
144
+ disableCSRFCheck: boolean | undefined;
145
+ cookieAttributes: {
146
+ expires: Date | undefined;
147
+ secure: boolean | undefined;
148
+ sameSite: "none" | "strict" | "Strict" | "Lax" | "None" | "lax" | undefined;
149
+ domain: boolean;
150
+ path: string | undefined;
151
+ httpOnly: boolean | undefined;
152
+ };
153
+ };
154
+ trustedOrigins: number | undefined;
155
+ rateLimit: {
156
+ storage: "memory" | "database" | "secondary-storage" | undefined;
157
+ modelName: _better_auth_core0.LiteralString | "rateLimit" | undefined;
158
+ window: number | undefined;
159
+ customStorage: boolean;
160
+ enabled: boolean | undefined;
161
+ max: number | undefined;
162
+ };
163
+ onAPIError: {
164
+ errorURL: string | undefined;
165
+ onError: boolean;
166
+ throw: boolean | undefined;
167
+ };
168
+ logger: {
169
+ disabled: boolean | undefined;
170
+ level: "error" | "debug" | "info" | "warn" | undefined;
171
+ log: boolean;
172
+ };
173
+ databaseHooks: {
174
+ user: {
175
+ create: {
176
+ after: boolean;
177
+ before: boolean;
178
+ };
179
+ update: {
180
+ after: boolean;
181
+ before: boolean;
182
+ };
183
+ };
184
+ session: {
185
+ create: {
186
+ after: boolean;
187
+ before: boolean;
188
+ };
189
+ update: {
190
+ after: boolean;
191
+ before: boolean;
192
+ };
193
+ };
194
+ account: {
195
+ create: {
196
+ after: boolean;
197
+ before: boolean;
198
+ };
199
+ update: {
200
+ after: boolean;
201
+ before: boolean;
202
+ };
203
+ };
204
+ verification: {
205
+ create: {
206
+ after: boolean;
207
+ before: boolean;
208
+ };
209
+ update: {
210
+ after: boolean;
211
+ before: boolean;
212
+ };
213
+ };
214
+ };
215
+ }>;
216
+ //#endregion
217
+ //#region src/node.d.ts
218
+ declare function createTelemetry(options: BetterAuthOptions, context?: TelemetryContext | undefined): Promise<{
219
+ publish: (event: TelemetryEvent) => Promise<void>;
220
+ }>;
221
+ //#endregion
222
+ export { type TelemetryEvent, createTelemetry, getTelemetryAuthConfig };
223
+ //# sourceMappingURL=node.d.mts.map
package/dist/node.mjs ADDED
@@ -0,0 +1,489 @@
1
+ import fs from "node:fs";
2
+ import fsPromises from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { ENV, env, getBooleanEnvVar, getEnvVar, isTest, logger } from "@better-auth/core/env";
6
+ import { betterFetch } from "@better-fetch/fetch";
7
+ import { base64 } from "@better-auth/utils/base64";
8
+ import { createHash } from "@better-auth/utils/hash";
9
+ import { createRandomStringGenerator } from "@better-auth/utils/random";
10
+
11
+ //#region src/detectors/detect-auth-config.ts
12
+ async function getTelemetryAuthConfig(options, context) {
13
+ return {
14
+ database: context?.database,
15
+ adapter: context?.adapter,
16
+ emailVerification: {
17
+ sendVerificationEmail: !!options.emailVerification?.sendVerificationEmail,
18
+ sendOnSignUp: !!options.emailVerification?.sendOnSignUp,
19
+ sendOnSignIn: !!options.emailVerification?.sendOnSignIn,
20
+ autoSignInAfterVerification: !!options.emailVerification?.autoSignInAfterVerification,
21
+ expiresIn: options.emailVerification?.expiresIn,
22
+ beforeEmailVerification: !!options.emailVerification?.beforeEmailVerification,
23
+ afterEmailVerification: !!options.emailVerification?.afterEmailVerification
24
+ },
25
+ emailAndPassword: {
26
+ enabled: !!options.emailAndPassword?.enabled,
27
+ disableSignUp: !!options.emailAndPassword?.disableSignUp,
28
+ requireEmailVerification: !!options.emailAndPassword?.requireEmailVerification,
29
+ maxPasswordLength: options.emailAndPassword?.maxPasswordLength,
30
+ minPasswordLength: options.emailAndPassword?.minPasswordLength,
31
+ sendResetPassword: !!options.emailAndPassword?.sendResetPassword,
32
+ resetPasswordTokenExpiresIn: options.emailAndPassword?.resetPasswordTokenExpiresIn,
33
+ onPasswordReset: !!options.emailAndPassword?.onPasswordReset,
34
+ password: {
35
+ hash: !!options.emailAndPassword?.password?.hash,
36
+ verify: !!options.emailAndPassword?.password?.verify
37
+ },
38
+ autoSignIn: !!options.emailAndPassword?.autoSignIn,
39
+ revokeSessionsOnPasswordReset: !!options.emailAndPassword?.revokeSessionsOnPasswordReset
40
+ },
41
+ socialProviders: await Promise.all(Object.keys(options.socialProviders || {}).map(async (key) => {
42
+ const p = options.socialProviders?.[key];
43
+ if (!p) return {};
44
+ const provider = typeof p === "function" ? await p() : p;
45
+ return {
46
+ id: key,
47
+ mapProfileToUser: !!provider.mapProfileToUser,
48
+ disableDefaultScope: !!provider.disableDefaultScope,
49
+ disableIdTokenSignIn: !!provider.disableIdTokenSignIn,
50
+ disableImplicitSignUp: provider.disableImplicitSignUp,
51
+ disableSignUp: provider.disableSignUp,
52
+ getUserInfo: !!provider.getUserInfo,
53
+ overrideUserInfoOnSignIn: !!provider.overrideUserInfoOnSignIn,
54
+ prompt: provider.prompt,
55
+ verifyIdToken: !!provider.verifyIdToken,
56
+ scope: provider.scope,
57
+ refreshAccessToken: !!provider.refreshAccessToken
58
+ };
59
+ })),
60
+ plugins: options.plugins?.map((p) => p.id.toString()),
61
+ user: {
62
+ modelName: options.user?.modelName,
63
+ fields: options.user?.fields,
64
+ additionalFields: options.user?.additionalFields,
65
+ changeEmail: {
66
+ enabled: options.user?.changeEmail?.enabled,
67
+ sendChangeEmailConfirmation: !!options.user?.changeEmail?.sendChangeEmailConfirmation
68
+ }
69
+ },
70
+ verification: {
71
+ modelName: options.verification?.modelName,
72
+ disableCleanup: options.verification?.disableCleanup,
73
+ fields: options.verification?.fields
74
+ },
75
+ session: {
76
+ modelName: options.session?.modelName,
77
+ additionalFields: options.session?.additionalFields,
78
+ cookieCache: {
79
+ enabled: options.session?.cookieCache?.enabled,
80
+ maxAge: options.session?.cookieCache?.maxAge,
81
+ strategy: options.session?.cookieCache?.strategy
82
+ },
83
+ disableSessionRefresh: options.session?.disableSessionRefresh,
84
+ expiresIn: options.session?.expiresIn,
85
+ fields: options.session?.fields,
86
+ freshAge: options.session?.freshAge,
87
+ preserveSessionInDatabase: options.session?.preserveSessionInDatabase,
88
+ storeSessionInDatabase: options.session?.storeSessionInDatabase,
89
+ updateAge: options.session?.updateAge
90
+ },
91
+ account: {
92
+ modelName: options.account?.modelName,
93
+ fields: options.account?.fields,
94
+ encryptOAuthTokens: options.account?.encryptOAuthTokens,
95
+ updateAccountOnSignIn: options.account?.updateAccountOnSignIn,
96
+ accountLinking: {
97
+ enabled: options.account?.accountLinking?.enabled,
98
+ trustedProviders: options.account?.accountLinking?.trustedProviders,
99
+ updateUserInfoOnLink: options.account?.accountLinking?.updateUserInfoOnLink,
100
+ allowUnlinkingAll: options.account?.accountLinking?.allowUnlinkingAll
101
+ }
102
+ },
103
+ hooks: {
104
+ after: !!options.hooks?.after,
105
+ before: !!options.hooks?.before
106
+ },
107
+ secondaryStorage: !!options.secondaryStorage,
108
+ advanced: {
109
+ cookiePrefix: !!options.advanced?.cookiePrefix,
110
+ cookies: !!options.advanced?.cookies,
111
+ crossSubDomainCookies: {
112
+ domain: !!options.advanced?.crossSubDomainCookies?.domain,
113
+ enabled: options.advanced?.crossSubDomainCookies?.enabled,
114
+ additionalCookies: options.advanced?.crossSubDomainCookies?.additionalCookies
115
+ },
116
+ database: {
117
+ generateId: options.advanced?.database?.generateId,
118
+ defaultFindManyLimit: options.advanced?.database?.defaultFindManyLimit
119
+ },
120
+ useSecureCookies: options.advanced?.useSecureCookies,
121
+ ipAddress: {
122
+ disableIpTracking: options.advanced?.ipAddress?.disableIpTracking,
123
+ ipAddressHeaders: options.advanced?.ipAddress?.ipAddressHeaders
124
+ },
125
+ disableCSRFCheck: options.advanced?.disableCSRFCheck,
126
+ cookieAttributes: {
127
+ expires: options.advanced?.defaultCookieAttributes?.expires,
128
+ secure: options.advanced?.defaultCookieAttributes?.secure,
129
+ sameSite: options.advanced?.defaultCookieAttributes?.sameSite,
130
+ domain: !!options.advanced?.defaultCookieAttributes?.domain,
131
+ path: options.advanced?.defaultCookieAttributes?.path,
132
+ httpOnly: options.advanced?.defaultCookieAttributes?.httpOnly
133
+ }
134
+ },
135
+ trustedOrigins: options.trustedOrigins?.length,
136
+ rateLimit: {
137
+ storage: options.rateLimit?.storage,
138
+ modelName: options.rateLimit?.modelName,
139
+ window: options.rateLimit?.window,
140
+ customStorage: !!options.rateLimit?.customStorage,
141
+ enabled: options.rateLimit?.enabled,
142
+ max: options.rateLimit?.max
143
+ },
144
+ onAPIError: {
145
+ errorURL: options.onAPIError?.errorURL,
146
+ onError: !!options.onAPIError?.onError,
147
+ throw: options.onAPIError?.throw
148
+ },
149
+ logger: {
150
+ disabled: options.logger?.disabled,
151
+ level: options.logger?.level,
152
+ log: !!options.logger?.log
153
+ },
154
+ databaseHooks: {
155
+ user: {
156
+ create: {
157
+ after: !!options.databaseHooks?.user?.create?.after,
158
+ before: !!options.databaseHooks?.user?.create?.before
159
+ },
160
+ update: {
161
+ after: !!options.databaseHooks?.user?.update?.after,
162
+ before: !!options.databaseHooks?.user?.update?.before
163
+ }
164
+ },
165
+ session: {
166
+ create: {
167
+ after: !!options.databaseHooks?.session?.create?.after,
168
+ before: !!options.databaseHooks?.session?.create?.before
169
+ },
170
+ update: {
171
+ after: !!options.databaseHooks?.session?.update?.after,
172
+ before: !!options.databaseHooks?.session?.update?.before
173
+ }
174
+ },
175
+ account: {
176
+ create: {
177
+ after: !!options.databaseHooks?.account?.create?.after,
178
+ before: !!options.databaseHooks?.account?.create?.before
179
+ },
180
+ update: {
181
+ after: !!options.databaseHooks?.account?.update?.after,
182
+ before: !!options.databaseHooks?.account?.update?.before
183
+ }
184
+ },
185
+ verification: {
186
+ create: {
187
+ after: !!options.databaseHooks?.verification?.create?.after,
188
+ before: !!options.databaseHooks?.verification?.create?.before
189
+ },
190
+ update: {
191
+ after: !!options.databaseHooks?.verification?.update?.after,
192
+ before: !!options.databaseHooks?.verification?.update?.before
193
+ }
194
+ }
195
+ }
196
+ };
197
+ }
198
+
199
+ //#endregion
200
+ //#region src/detectors/detect-project-info.ts
201
+ function detectPackageManager() {
202
+ const userAgent = env.npm_config_user_agent;
203
+ if (!userAgent) return;
204
+ const pmSpec = userAgent.split(" ")[0];
205
+ const separatorPos = pmSpec.lastIndexOf("/");
206
+ const name = pmSpec.substring(0, separatorPos);
207
+ return {
208
+ name: name === "npminstall" ? "cnpm" : name,
209
+ version: pmSpec.substring(separatorPos + 1)
210
+ };
211
+ }
212
+
213
+ //#endregion
214
+ //#region src/detectors/detect-system-info.ts
215
+ function isCI() {
216
+ return env.CI !== "false" && ("BUILD_ID" in env || "BUILD_NUMBER" in env || "CI" in env || "CI_APP_ID" in env || "CI_BUILD_ID" in env || "CI_BUILD_NUMBER" in env || "CI_NAME" in env || "CONTINUOUS_INTEGRATION" in env || "RUN_ID" in env);
217
+ }
218
+
219
+ //#endregion
220
+ //#region src/detectors/detect-runtime.ts
221
+ function detectRuntime() {
222
+ if (typeof Deno !== "undefined") return {
223
+ name: "deno",
224
+ version: Deno?.version?.deno ?? null
225
+ };
226
+ if (typeof Bun !== "undefined") return {
227
+ name: "bun",
228
+ version: Bun?.version ?? null
229
+ };
230
+ if (typeof process !== "undefined" && process?.versions?.node) return {
231
+ name: "node",
232
+ version: process.versions.node ?? null
233
+ };
234
+ return {
235
+ name: "edge",
236
+ version: null
237
+ };
238
+ }
239
+ function detectEnvironment() {
240
+ return getEnvVar("NODE_ENV") === "production" ? "production" : isCI() ? "ci" : isTest() ? "test" : "development";
241
+ }
242
+
243
+ //#endregion
244
+ //#region src/utils/hash.ts
245
+ async function hashToBase64(data) {
246
+ const buffer = await createHash("SHA-256").digest(data);
247
+ return base64.encode(buffer);
248
+ }
249
+
250
+ //#endregion
251
+ //#region src/utils/id.ts
252
+ const generateId = (size) => {
253
+ return createRandomStringGenerator("a-z", "A-Z", "0-9")(size || 32);
254
+ };
255
+
256
+ //#endregion
257
+ //#region src/node.ts
258
+ let packageJSONCache;
259
+ async function readRootPackageJson() {
260
+ if (packageJSONCache) return packageJSONCache;
261
+ try {
262
+ const cwd = process.cwd();
263
+ if (!cwd) return void 0;
264
+ const raw = await fsPromises.readFile(path.join(cwd, "package.json"), "utf-8");
265
+ packageJSONCache = JSON.parse(raw);
266
+ return packageJSONCache;
267
+ } catch {}
268
+ }
269
+ async function getPackageVersion(pkg) {
270
+ if (packageJSONCache) return packageJSONCache.dependencies?.[pkg] || packageJSONCache.devDependencies?.[pkg] || packageJSONCache.peerDependencies?.[pkg];
271
+ try {
272
+ const cwd = process.cwd();
273
+ if (!cwd) throw new Error("no-cwd");
274
+ const pkgJsonPath = path.join(cwd, "node_modules", pkg, "package.json");
275
+ const raw = await fsPromises.readFile(pkgJsonPath, "utf-8");
276
+ return JSON.parse(raw).version || await getVersionFromLocalPackageJson(pkg) || void 0;
277
+ } catch {}
278
+ return getVersionFromLocalPackageJson(pkg);
279
+ }
280
+ async function getVersionFromLocalPackageJson(pkg) {
281
+ const json = await readRootPackageJson();
282
+ if (!json) return void 0;
283
+ return {
284
+ ...json.dependencies,
285
+ ...json.devDependencies,
286
+ ...json.peerDependencies
287
+ }[pkg];
288
+ }
289
+ async function getNameFromLocalPackageJson() {
290
+ return (await readRootPackageJson())?.name;
291
+ }
292
+ async function detectSystemInfo() {
293
+ try {
294
+ const cpus = os.cpus();
295
+ return {
296
+ deploymentVendor: getVendor(),
297
+ systemPlatform: os.platform(),
298
+ systemRelease: os.release(),
299
+ systemArchitecture: os.arch(),
300
+ cpuCount: cpus.length,
301
+ cpuModel: cpus.length ? cpus[0].model : null,
302
+ cpuSpeed: cpus.length ? cpus[0].speed : null,
303
+ memory: os.totalmem(),
304
+ isWSL: await isWsl(),
305
+ isDocker: await isDocker(),
306
+ isTTY: process.stdout ? process.stdout.isTTY : null
307
+ };
308
+ } catch {
309
+ return {
310
+ systemPlatform: null,
311
+ systemRelease: null,
312
+ systemArchitecture: null,
313
+ cpuCount: null,
314
+ cpuModel: null,
315
+ cpuSpeed: null,
316
+ memory: null,
317
+ isWSL: null,
318
+ isDocker: null,
319
+ isTTY: null
320
+ };
321
+ }
322
+ }
323
+ function getVendor() {
324
+ const env = process.env;
325
+ const hasAny = (...keys) => keys.some((k) => Boolean(env[k]));
326
+ if (hasAny("CF_PAGES", "CF_PAGES_URL", "CF_ACCOUNT_ID") || typeof navigator !== "undefined" && navigator.userAgent === "Cloudflare-Workers") return "cloudflare";
327
+ if (hasAny("VERCEL", "VERCEL_URL", "VERCEL_ENV")) return "vercel";
328
+ if (hasAny("NETLIFY", "NETLIFY_URL")) return "netlify";
329
+ if (hasAny("RENDER", "RENDER_URL", "RENDER_INTERNAL_HOSTNAME", "RENDER_SERVICE_ID")) return "render";
330
+ if (hasAny("AWS_LAMBDA_FUNCTION_NAME", "AWS_EXECUTION_ENV", "LAMBDA_TASK_ROOT")) return "aws";
331
+ if (hasAny("GOOGLE_CLOUD_FUNCTION_NAME", "GOOGLE_CLOUD_PROJECT", "GCP_PROJECT", "K_SERVICE")) return "gcp";
332
+ if (hasAny("AZURE_FUNCTION_NAME", "FUNCTIONS_WORKER_RUNTIME", "WEBSITE_INSTANCE_ID", "WEBSITE_SITE_NAME")) return "azure";
333
+ if (hasAny("DENO_DEPLOYMENT_ID", "DENO_REGION")) return "deno-deploy";
334
+ if (hasAny("FLY_APP_NAME", "FLY_REGION", "FLY_ALLOC_ID")) return "fly-io";
335
+ if (hasAny("RAILWAY_STATIC_URL", "RAILWAY_ENVIRONMENT_NAME")) return "railway";
336
+ if (hasAny("DYNO", "HEROKU_APP_NAME")) return "heroku";
337
+ if (hasAny("DO_DEPLOYMENT_ID", "DO_APP_NAME", "DIGITALOCEAN")) return "digitalocean";
338
+ if (hasAny("KOYEB", "KOYEB_DEPLOYMENT_ID", "KOYEB_APP_NAME")) return "koyeb";
339
+ return null;
340
+ }
341
+ let isDockerCached;
342
+ async function hasDockerEnv() {
343
+ try {
344
+ fs.statSync("/.dockerenv");
345
+ return true;
346
+ } catch {
347
+ return false;
348
+ }
349
+ }
350
+ async function hasDockerCGroup() {
351
+ try {
352
+ return fs.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
353
+ } catch {
354
+ return false;
355
+ }
356
+ }
357
+ async function isDocker() {
358
+ if (isDockerCached === void 0) isDockerCached = await hasDockerEnv() || await hasDockerCGroup();
359
+ return isDockerCached;
360
+ }
361
+ let isInsideContainerCached;
362
+ const hasContainerEnv = async () => {
363
+ try {
364
+ fs.statSync("/run/.containerenv");
365
+ return true;
366
+ } catch {
367
+ return false;
368
+ }
369
+ };
370
+ async function isInsideContainer() {
371
+ if (isInsideContainerCached === void 0) isInsideContainerCached = await hasContainerEnv() || await isDocker();
372
+ return isInsideContainerCached;
373
+ }
374
+ async function isWsl() {
375
+ try {
376
+ if (process.platform !== "linux") return false;
377
+ if (os.release().toLowerCase().includes("microsoft")) {
378
+ if (await isInsideContainer()) return false;
379
+ return true;
380
+ }
381
+ return fs.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft") ? !await isInsideContainer() : false;
382
+ } catch {
383
+ return false;
384
+ }
385
+ }
386
+ let projectIdCached = null;
387
+ async function getProjectId(baseUrl) {
388
+ if (projectIdCached) return projectIdCached;
389
+ const projectName = await getNameFromLocalPackageJson();
390
+ if (projectName) {
391
+ projectIdCached = await hashToBase64(baseUrl ? baseUrl + projectName : projectName);
392
+ return projectIdCached;
393
+ }
394
+ if (baseUrl) {
395
+ projectIdCached = await hashToBase64(baseUrl);
396
+ return projectIdCached;
397
+ }
398
+ projectIdCached = generateId(32);
399
+ return projectIdCached;
400
+ }
401
+ async function detectDatabaseNode() {
402
+ for (const [pkg, name] of Object.entries({
403
+ pg: "postgresql",
404
+ mysql: "mysql",
405
+ mariadb: "mariadb",
406
+ sqlite3: "sqlite",
407
+ "better-sqlite3": "sqlite",
408
+ "@prisma/client": "prisma",
409
+ mongoose: "mongodb",
410
+ mongodb: "mongodb",
411
+ "drizzle-orm": "drizzle"
412
+ })) {
413
+ const version = await getPackageVersion(pkg);
414
+ if (version) return {
415
+ name,
416
+ version
417
+ };
418
+ }
419
+ }
420
+ async function detectFrameworkNode() {
421
+ for (const [pkg, name] of Object.entries({
422
+ next: "next",
423
+ nuxt: "nuxt",
424
+ "react-router": "react-router",
425
+ astro: "astro",
426
+ "@sveltejs/kit": "sveltekit",
427
+ "solid-start": "solid-start",
428
+ "tanstack-start": "tanstack-start",
429
+ hono: "hono",
430
+ express: "express",
431
+ elysia: "elysia",
432
+ expo: "expo"
433
+ })) {
434
+ const version = await getPackageVersion(pkg);
435
+ if (version) return {
436
+ name,
437
+ version
438
+ };
439
+ }
440
+ }
441
+ const noop = async function noop() {};
442
+ async function createTelemetry(options, context) {
443
+ const debugEnabled = options.telemetry?.debug || getBooleanEnvVar("BETTER_AUTH_TELEMETRY_DEBUG", false);
444
+ const telemetryEndpoint = ENV.BETTER_AUTH_TELEMETRY_ENDPOINT;
445
+ if (!telemetryEndpoint && !context?.customTrack) return { publish: noop };
446
+ const track = async (event) => {
447
+ if (context?.customTrack) await context.customTrack(event).catch(logger.error);
448
+ else if (telemetryEndpoint) if (debugEnabled) logger.info("telemetry event", JSON.stringify(event, null, 2));
449
+ else await betterFetch(telemetryEndpoint, {
450
+ method: "POST",
451
+ body: event
452
+ }).catch(logger.error);
453
+ };
454
+ const isEnabled = async () => {
455
+ const telemetryEnabled = options.telemetry?.enabled !== void 0 ? options.telemetry.enabled : false;
456
+ return (getBooleanEnvVar("BETTER_AUTH_TELEMETRY", false) || telemetryEnabled) && (context?.skipTestCheck || !isTest());
457
+ };
458
+ const enabled = await isEnabled();
459
+ let anonymousId;
460
+ if (enabled) {
461
+ anonymousId = await getProjectId(typeof options.baseURL === "string" ? options.baseURL : void 0);
462
+ track({
463
+ type: "init",
464
+ payload: {
465
+ config: await getTelemetryAuthConfig(options, context),
466
+ runtime: detectRuntime(),
467
+ database: await detectDatabaseNode(),
468
+ framework: await detectFrameworkNode(),
469
+ environment: detectEnvironment(),
470
+ systemInfo: await detectSystemInfo(),
471
+ packageManager: detectPackageManager()
472
+ },
473
+ anonymousId
474
+ });
475
+ }
476
+ return { publish: async (event) => {
477
+ if (!enabled) return;
478
+ if (!anonymousId) anonymousId = await getProjectId(typeof options.baseURL === "string" ? options.baseURL : void 0);
479
+ await track({
480
+ type: event.type,
481
+ payload: event.payload,
482
+ anonymousId
483
+ });
484
+ } };
485
+ }
486
+
487
+ //#endregion
488
+ export { createTelemetry, getTelemetryAuthConfig };
489
+ //# sourceMappingURL=node.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.mjs","names":[],"sources":["../src/detectors/detect-auth-config.ts","../src/detectors/detect-project-info.ts","../src/detectors/detect-system-info.ts","../src/detectors/detect-runtime.ts","../src/utils/hash.ts","../src/utils/id.ts","../src/node.ts"],"sourcesContent":["import type { BetterAuthOptions } from \"@better-auth/core\";\nimport type { TelemetryContext } from \"../types\";\n\nexport async 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\tbeforeEmailVerification:\n\t\t\t\t!!options.emailVerification?.beforeEmailVerification,\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: await Promise.all(\n\t\t\tObject.keys(options.socialProviders || {}).map(async (key) => {\n\t\t\t\tconst p =\n\t\t\t\t\toptions.socialProviders?.[\n\t\t\t\t\t\tkey as keyof typeof options.socialProviders\n\t\t\t\t\t];\n\t\t\t\tif (!p) return {};\n\t\t\t\tconst provider = typeof p === \"function\" ? await p() : p;\n\t\t\t\treturn {\n\t\t\t\t\tid: key,\n\t\t\t\t\tmapProfileToUser: !!provider.mapProfileToUser,\n\t\t\t\t\tdisableDefaultScope: !!provider.disableDefaultScope,\n\t\t\t\t\tdisableIdTokenSignIn: !!provider.disableIdTokenSignIn,\n\t\t\t\t\tdisableImplicitSignUp: provider.disableImplicitSignUp,\n\t\t\t\t\tdisableSignUp: provider.disableSignUp,\n\t\t\t\t\tgetUserInfo: !!provider.getUserInfo,\n\t\t\t\t\toverrideUserInfoOnSignIn: !!provider.overrideUserInfoOnSignIn,\n\t\t\t\t\tprompt: provider.prompt,\n\t\t\t\t\tverifyIdToken: !!provider.verifyIdToken,\n\t\t\t\t\tscope: provider.scope,\n\t\t\t\t\trefreshAccessToken: !!provider.refreshAccessToken,\n\t\t\t\t};\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\tsendChangeEmailConfirmation:\n\t\t\t\t\t!!options.user?.changeEmail?.sendChangeEmailConfirmation,\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\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","// 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","import { env } from \"@better-auth/core/env\";\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\n// In the default (non-node) build, system info detection is not available.\n// The node build (src/node.ts) provides its own inline implementation\n// using static top-level imports of node:os and node:fs.\nexport async function detectSystemInfo() {\n\treturn {\n\t\tdeploymentVendor: getVendor(),\n\t\tsystemPlatform: null,\n\t\tsystemRelease: null,\n\t\tsystemArchitecture: null,\n\t\tcpuCount: null,\n\t\tcpuModel: null,\n\t\tcpuSpeed: null,\n\t\tmemory: null,\n\t\tisWSL: null,\n\t\tisDocker: null,\n\t\tisTTY: null,\n\t};\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\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<string> {\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 fs from \"node:fs\";\nimport fsPromises from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { BetterAuthOptions } from \"@better-auth/core\";\nimport { ENV, getBooleanEnvVar, isTest, logger } from \"@better-auth/core/env\";\nimport { betterFetch } from \"@better-fetch/fetch\";\nimport type { PackageJson } from \"type-fest\";\nimport { getTelemetryAuthConfig } from \"./detectors/detect-auth-config\";\nimport { detectPackageManager } from \"./detectors/detect-project-info\";\nimport { detectEnvironment, detectRuntime } from \"./detectors/detect-runtime\";\nimport type { TelemetryContext, TelemetryEvent } from \"./types\";\nimport { hashToBase64 } from \"./utils/hash\";\nimport { generateId } from \"./utils/id\";\nexport { getTelemetryAuthConfig };\nexport type { TelemetryEvent } from \"./types\";\n\n// --- Node-specific: package.json reading ---\n\nlet packageJSONCache: PackageJson | undefined;\n\nasync function readRootPackageJson(): Promise<PackageJson | undefined> {\n\tif (packageJSONCache) return packageJSONCache;\n\ttry {\n\t\tconst cwd = process.cwd();\n\t\tif (!cwd) return undefined;\n\t\tconst raw = await fsPromises.readFile(\n\t\t\tpath.join(cwd, \"package.json\"),\n\t\t\t\"utf-8\",\n\t\t);\n\t\tpackageJSONCache = JSON.parse(raw);\n\t\treturn packageJSONCache as PackageJson;\n\t} catch {}\n\treturn undefined;\n}\n\nasync function getPackageVersion(pkg: string): Promise<string | undefined> {\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 = process.cwd();\n\t\tif (!cwd) throw new Error(\"no-cwd\");\n\t\tconst pkgJsonPath = path.join(cwd, \"node_modules\", pkg, \"package.json\");\n\t\tconst raw = await fsPromises.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\treturn getVersionFromLocalPackageJson(pkg);\n}\n\nasync function getVersionFromLocalPackageJson(\n\tpkg: string,\n): Promise<string | undefined> {\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<string, string | undefined>;\n\treturn allDeps[pkg];\n}\n\nasync function getNameFromLocalPackageJson(): Promise<string | undefined> {\n\tconst json = await readRootPackageJson();\n\treturn json?.name as string | undefined;\n}\n\n// --- Node-specific: system info ---\n\nasync function detectSystemInfo() {\n\ttry {\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: (process as any).stdout ? (process as any).stdout.isTTY : 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\nfunction getVendor() {\n\tconst env = process.env as Record<string, string | undefined>;\n\tconst hasAny = (...keys: string[]) => keys.some((k) => Boolean(env[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\tif (hasAny(\"NETLIFY\", \"NETLIFY_URL\")) return \"netlify\";\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\tif (\n\t\thasAny(\"AWS_LAMBDA_FUNCTION_NAME\", \"AWS_EXECUTION_ENV\", \"LAMBDA_TASK_ROOT\")\n\t)\n\t\treturn \"aws\";\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\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\tif (hasAny(\"DENO_DEPLOYMENT_ID\", \"DENO_REGION\")) return \"deno-deploy\";\n\tif (hasAny(\"FLY_APP_NAME\", \"FLY_REGION\", \"FLY_ALLOC_ID\")) return \"fly-io\";\n\tif (hasAny(\"RAILWAY_STATIC_URL\", \"RAILWAY_ENVIRONMENT_NAME\"))\n\t\treturn \"railway\";\n\tif (hasAny(\"DYNO\", \"HEROKU_APP_NAME\")) return \"heroku\";\n\tif (hasAny(\"DO_DEPLOYMENT_ID\", \"DO_APP_NAME\", \"DIGITALOCEAN\"))\n\t\treturn \"digitalocean\";\n\tif (hasAny(\"KOYEB\", \"KOYEB_DEPLOYMENT_ID\", \"KOYEB_APP_NAME\")) return \"koyeb\";\n\treturn null;\n}\n\nlet isDockerCached: boolean | undefined;\n\nasync function hasDockerEnv() {\n\ttry {\n\t\tfs.statSync(\"/.dockerenv\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function hasDockerCGroup() {\n\ttry {\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 (isDockerCached === undefined) {\n\t\tisDockerCached = (await hasDockerEnv()) || (await hasDockerCGroup());\n\t}\n\treturn isDockerCached;\n}\n\nlet isInsideContainerCached: boolean | undefined;\n\nconst hasContainerEnv = async () => {\n\ttry {\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\treturn isInsideContainerCached;\n}\n\nasync function isWsl() {\n\ttry {\n\t\tif (process.platform !== \"linux\") {\n\t\t\treturn false;\n\t\t}\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\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\n// --- Node-specific: project ID ---\n\nlet projectIdCached: string | null = null;\n\nasync function getProjectId(baseUrl: string | undefined): Promise<string> {\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\n// --- detectDatabase/detectFramework override using local package.json reading ---\n\nasync function detectDatabaseNode() {\n\tconst DATABASES: Record<string, string> = {\n\t\tpg: \"postgresql\",\n\t\tmysql: \"mysql\",\n\t\tmariadb: \"mariadb\",\n\t\tsqlite3: \"sqlite\",\n\t\t\"better-sqlite3\": \"sqlite\",\n\t\t\"@prisma/client\": \"prisma\",\n\t\tmongoose: \"mongodb\",\n\t\tmongodb: \"mongodb\",\n\t\t\"drizzle-orm\": \"drizzle\",\n\t};\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\nasync function detectFrameworkNode() {\n\tconst FRAMEWORKS: Record<string, string> = {\n\t\tnext: \"next\",\n\t\tnuxt: \"nuxt\",\n\t\t\"react-router\": \"react-router\",\n\t\tastro: \"astro\",\n\t\t\"@sveltejs/kit\": \"sveltekit\",\n\t\t\"solid-start\": \"solid-start\",\n\t\t\"tanstack-start\": \"tanstack-start\",\n\t\thono: \"hono\",\n\t\texpress: \"express\",\n\t\telysia: \"elysia\",\n\t\texpo: \"expo\",\n\t};\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\n// --- Main telemetry export (node version) ---\n\nconst noop: (event: TelemetryEvent) => Promise<void> = 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\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(\n\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t);\n\n\t\tconst payload = {\n\t\t\tconfig: await getTelemetryAuthConfig(options, context),\n\t\t\truntime: detectRuntime(),\n\t\t\tdatabase: await detectDatabaseNode(),\n\t\t\tframework: await detectFrameworkNode(),\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(\n\t\t\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t\t\t);\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-auth/telemetry",
3
- "version": "1.5.4",
3
+ "version": "1.5.5",
4
4
  "description": "Telemetry package for Better Auth",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  ".": {
30
30
  "dev-source": "./src/index.ts",
31
31
  "types": "./dist/index.d.mts",
32
+ "node": "./dist/node.mjs",
32
33
  "default": "./dist/index.mjs"
33
34
  }
34
35
  },
@@ -46,10 +47,10 @@
46
47
  "devDependencies": {
47
48
  "tsdown": "0.21.0-beta.2",
48
49
  "type-fest": "^5.4.4",
49
- "@better-auth/core": "1.5.4"
50
+ "@better-auth/core": "1.5.5"
50
51
  },
51
52
  "peerDependencies": {
52
- "@better-auth/core": "1.5.4"
53
+ "@better-auth/core": "1.5.5"
53
54
  },
54
55
  "scripts": {
55
56
  "build": "tsdown",