mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-06 04:19:20 +00:00
refactor: move telemetry to single package (#5152)
This commit is contained in:
@@ -706,6 +706,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@better-auth/core": "workspace:*",
|
||||
"@better-auth/telemetry": "workspace:*",
|
||||
"@better-auth/utils": "0.3.0",
|
||||
"@better-fetch/fetch": "catalog:",
|
||||
"@noble/ciphers": "^2.0.0",
|
||||
|
||||
@@ -17,7 +17,9 @@ export type * from "./types/helper";
|
||||
// export this as we are referencing OAuth2Tokens in the `refresh-token` api as return type
|
||||
|
||||
// telemetry exports for CLI and consumers
|
||||
export { createTelemetry } from "./telemetry";
|
||||
export { getTelemetryAuthConfig } from "./telemetry/detectors/detect-auth-config";
|
||||
export type { TelemetryEvent } from "./telemetry/types";
|
||||
export {
|
||||
createTelemetry,
|
||||
getTelemetryAuthConfig,
|
||||
type TelemetryEvent,
|
||||
} from "@better-auth/telemetry";
|
||||
export { APIError } from "./api";
|
||||
|
||||
@@ -26,8 +26,7 @@ import { checkPassword } from "./utils/password";
|
||||
import { getBaseURL } from "./utils/url";
|
||||
import type { LiteralUnion } from "./types/helper";
|
||||
import { BetterAuthError } from "./error";
|
||||
import { createTelemetry } from "./telemetry";
|
||||
import type { TelemetryEvent } from "./telemetry/types";
|
||||
import { createTelemetry, type TelemetryEvent } from "@better-auth/telemetry";
|
||||
import { getKyselyDatabaseType } from "./adapters/kysely-adapter";
|
||||
import { checkEndpointConflicts } from "./api";
|
||||
import { isPromise } from "./utils/is-promise";
|
||||
|
||||
10
packages/telemetry/build.config.ts
Normal file
10
packages/telemetry/build.config.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { defineBuildConfig } from "unbuild";
|
||||
|
||||
export default defineBuildConfig({
|
||||
entries: ["src/index"],
|
||||
declaration: true,
|
||||
clean: true,
|
||||
rollup: {
|
||||
emitCJS: true,
|
||||
},
|
||||
});
|
||||
41
packages/telemetry/package.json
Normal file
41
packages/telemetry/package.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "@better-auth/telemetry",
|
||||
"version": "1.4.0-beta.8",
|
||||
"description": "Telemetry package for Better Auth",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.mjs",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"index": [
|
||||
"dist/index.d.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "unbuild --clean",
|
||||
"stub": "unbuild --stub",
|
||||
"typecheck": "tsc --project tsconfig.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"unbuild": "catalog:",
|
||||
"type-fest": "^4.31.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@better-auth/core": "workspace:*",
|
||||
"@better-auth/utils": "0.3.0",
|
||||
"@better-fetch/fetch": "catalog:"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,4 @@
|
||||
import type { SocialProviders } from "../../social-providers";
|
||||
import type { BetterAuthOptions } from "../../types";
|
||||
import type { TelemetryContext } from "../types";
|
||||
import type { TelemetryContext, BetterAuthOptions } from "../types";
|
||||
|
||||
export function getTelemetryAuthConfig(
|
||||
options: BetterAuthOptions,
|
||||
@@ -40,7 +38,7 @@ export function getTelemetryAuthConfig(
|
||||
!!options.emailAndPassword?.revokeSessionsOnPasswordReset,
|
||||
},
|
||||
socialProviders: Object.keys(options.socialProviders || {}).map((p) => {
|
||||
const provider = options.socialProviders?.[p as keyof SocialProviders];
|
||||
const provider = options.socialProviders?.[p];
|
||||
if (!provider) return {};
|
||||
return {
|
||||
id: p,
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getPackageVersion } from "../../utils/package-json";
|
||||
import { getPackageVersion } from "../utils/package-json";
|
||||
import type { DetectionInfo } from "../types";
|
||||
|
||||
const DATABASES: Record<string, string> = {
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getPackageVersion } from "../../utils/package-json";
|
||||
import { getPackageVersion } from "../utils/package-json";
|
||||
|
||||
const FRAMEWORKS: Record<string, string> = {
|
||||
next: "next",
|
||||
@@ -1,5 +1,5 @@
|
||||
import { env } from "@better-auth/core/env";
|
||||
import { importRuntime } from "../../utils/import-util";
|
||||
import { importRuntime } from "../utils/import-util";
|
||||
|
||||
function getVendor() {
|
||||
const hasAny = (...keys: string[]) =>
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ENV, getBooleanEnvVar, isTest } from "@better-auth/core/env";
|
||||
import { getProjectId } from "./project-id";
|
||||
import type { BetterAuthOptions } from "../types";
|
||||
import type { BetterAuthOptions } from "./types";
|
||||
import { detectEnvironment, detectRuntime } from "./detectors/detect-runtime";
|
||||
import { detectDatabase } from "./detectors/detect-database";
|
||||
import { detectFramework } from "./detectors/detect-framework";
|
||||
@@ -11,6 +11,9 @@ import type { TelemetryContext, TelemetryEvent } from "./types";
|
||||
import { logger } from "@better-auth/core/env";
|
||||
import { getTelemetryAuthConfig } from "./detectors/detect-auth-config";
|
||||
|
||||
export * from "./types";
|
||||
export { getTelemetryAuthConfig } from "./detectors/detect-auth-config";
|
||||
|
||||
export async function createTelemetry(
|
||||
options: BetterAuthOptions,
|
||||
context?: TelemetryContext,
|
||||
@@ -1,6 +1,6 @@
|
||||
import { generateId } from "../utils";
|
||||
import { hashToBase64 } from "../crypto";
|
||||
import { getNameFromLocalPackageJson } from "../utils/package-json";
|
||||
import { generateId } from "./utils/id";
|
||||
import { hashToBase64 } from "./utils/hash";
|
||||
import { getNameFromLocalPackageJson } from "./utils/package-json";
|
||||
|
||||
let projectIdCached: string | null = null;
|
||||
|
||||
@@ -44,3 +44,29 @@ export interface TelemetryContext {
|
||||
adapter?: string;
|
||||
skipTestCheck?: boolean;
|
||||
}
|
||||
|
||||
// Minimal interface for BetterAuth options to avoid circular dependencies
|
||||
export interface BetterAuthOptions {
|
||||
baseURL?: string;
|
||||
appName?: string;
|
||||
telemetry?: {
|
||||
enabled?: boolean;
|
||||
debug?: boolean;
|
||||
};
|
||||
emailVerification?: any;
|
||||
emailAndPassword?: any;
|
||||
socialProviders?: Record<string, any>;
|
||||
plugins?: Array<{ id: string | symbol }>;
|
||||
user?: any;
|
||||
verification?: any;
|
||||
session?: any;
|
||||
account?: any;
|
||||
hooks?: any;
|
||||
secondaryStorage?: any;
|
||||
advanced?: any;
|
||||
trustedOrigins?: any;
|
||||
rateLimit?: any;
|
||||
onAPIError?: any;
|
||||
logger?: any;
|
||||
databaseHooks?: any;
|
||||
}
|
||||
9
packages/telemetry/src/utils/hash.ts
Normal file
9
packages/telemetry/src/utils/hash.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createHash } from "@better-auth/utils/hash";
|
||||
import { base64 } from "@better-auth/utils/base64";
|
||||
|
||||
export async function hashToBase64(
|
||||
data: string | ArrayBuffer,
|
||||
): Promise<string> {
|
||||
const buffer = await createHash("SHA-256").digest(data);
|
||||
return base64.encode(buffer);
|
||||
}
|
||||
5
packages/telemetry/src/utils/id.ts
Normal file
5
packages/telemetry/src/utils/id.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import { createRandomStringGenerator } from "@better-auth/utils/random";
|
||||
|
||||
export const generateId = (size?: number) => {
|
||||
return createRandomStringGenerator("a-z", "A-Z", "0-9")(size || 32);
|
||||
};
|
||||
3
packages/telemetry/src/utils/import-util.ts
Normal file
3
packages/telemetry/src/utils/import-util.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const importRuntime = <T>(m: string): Promise<T> => {
|
||||
return (Function("mm", "return import(mm)") as any)(m);
|
||||
};
|
||||
9
packages/telemetry/tsconfig.json
Normal file
9
packages/telemetry/tsconfig.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "dist",
|
||||
"rootDir": "src"
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
34
pnpm-lock.yaml
generated
34
pnpm-lock.yaml
generated
@@ -843,6 +843,9 @@ importers:
|
||||
'@better-auth/core':
|
||||
specifier: workspace:*
|
||||
version: link:../core
|
||||
'@better-auth/telemetry':
|
||||
specifier: workspace:*
|
||||
version: link:../telemetry
|
||||
'@better-auth/utils':
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
@@ -1213,6 +1216,25 @@ importers:
|
||||
specifier: 'catalog:'
|
||||
version: 3.6.1(sass@1.90.0)(typescript@5.9.2)(vue@3.5.19(typescript@5.9.2))
|
||||
|
||||
packages/telemetry:
|
||||
dependencies:
|
||||
'@better-auth/core':
|
||||
specifier: workspace:*
|
||||
version: link:../core
|
||||
'@better-auth/utils':
|
||||
specifier: 0.3.0
|
||||
version: 0.3.0
|
||||
'@better-fetch/fetch':
|
||||
specifier: 'catalog:'
|
||||
version: 1.1.18
|
||||
devDependencies:
|
||||
type-fest:
|
||||
specifier: ^4.31.0
|
||||
version: 4.41.0
|
||||
unbuild:
|
||||
specifier: 'catalog:'
|
||||
version: 3.6.1(sass@1.90.0)(typescript@5.9.2)(vue@3.5.19(typescript@5.9.2))
|
||||
|
||||
packages:
|
||||
|
||||
'@0no-co/graphql.web@1.2.0':
|
||||
@@ -15254,7 +15276,7 @@ snapshots:
|
||||
postcss: 8.4.49
|
||||
resolve-from: 5.0.0
|
||||
optionalDependencies:
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
@@ -15339,7 +15361,7 @@ snapshots:
|
||||
'@expo/json-file': 10.0.7
|
||||
'@react-native/normalize-colors': 0.81.4
|
||||
debug: 4.4.1
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
resolve-from: 5.0.0
|
||||
semver: 7.7.2
|
||||
xml2js: 0.6.0
|
||||
@@ -19502,7 +19524,7 @@ snapshots:
|
||||
resolve-from: 5.0.0
|
||||
optionalDependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- supports-color
|
||||
@@ -21102,7 +21124,7 @@ snapshots:
|
||||
|
||||
expo-keep-awake@15.0.7(expo@54.0.10)(react@19.1.1):
|
||||
dependencies:
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
expo: 54.0.10(@babel/core@7.28.4)(@expo/metro-runtime@6.1.2)(expo-router@6.0.8)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@react-native/metro-config@0.81.0(@babel/core@7.28.4))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1)
|
||||
react: 19.1.1
|
||||
|
||||
expo-linking@7.1.7(expo@54.0.10)(react-native@0.80.2(@babel/core@7.28.4)(@react-native-community/cli@20.0.1(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.1))(react@19.1.1):
|
||||
@@ -24012,7 +24034,7 @@ snapshots:
|
||||
citty: 0.1.6
|
||||
cssnano: 7.0.7(postcss@8.5.6)
|
||||
defu: 6.1.4
|
||||
esbuild: 0.25.9
|
||||
esbuild: 0.25.10
|
||||
jiti: 1.21.7
|
||||
mlly: 1.7.4
|
||||
pathe: 2.0.3
|
||||
@@ -26988,7 +27010,7 @@ snapshots:
|
||||
citty: 0.1.6
|
||||
consola: 3.4.2
|
||||
defu: 6.1.4
|
||||
esbuild: 0.25.9
|
||||
esbuild: 0.25.10
|
||||
fix-dts-default-cjs-exports: 1.0.1
|
||||
hookable: 5.5.3
|
||||
jiti: 2.6.0
|
||||
|
||||
Reference in New Issue
Block a user