diff --git a/packages/api-key/src/client.ts b/packages/api-key/src/client.ts index 20f39c89c8..1830016f9d 100644 --- a/packages/api-key/src/client.ts +++ b/packages/api-key/src/client.ts @@ -1,12 +1,14 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; import type { apiKey } from "."; import { API_KEY_ERROR_CODES } from "./error-codes"; +import { PACKAGE_VERSION } from "./version"; export * from "./error-codes"; export const apiKeyClient = () => { return { id: "api-key", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, pathMethods: { "/api-key/create": "POST", diff --git a/packages/api-key/src/index.ts b/packages/api-key/src/index.ts index 70ea7a1aaa..13b77f866d 100644 --- a/packages/api-key/src/index.ts +++ b/packages/api-key/src/index.ts @@ -13,6 +13,7 @@ import { validateApiKey } from "./routes/verify-api-key"; import { apiKeySchema } from "./schema"; import type { ApiKeyConfigurationOptions, ApiKeyOptions } from "./types"; import { getDate, getIp } from "./utils"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -162,6 +163,7 @@ export function apiKey( return { id: "api-key", + version: PACKAGE_VERSION, $ERROR_CODES: API_KEY_ERROR_CODES, hooks: { before: [ diff --git a/packages/api-key/src/version.ts b/packages/api-key/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/api-key/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/api-key/tsconfig.json b/packages/api-key/tsconfig.json index 4e56786698..a382590cad 100644 --- a/packages/api-key/tsconfig.json +++ b/packages/api-key/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, - "include": ["./src"], + "include": ["./src", "./package.json"], "references": [ { "path": "../core/tsconfig.json" diff --git a/packages/api-key/tsconfig.test.json b/packages/api-key/tsconfig.test.json index 35746cc03d..067a08f9b9 100644 --- a/packages/api-key/tsconfig.test.json +++ b/packages/api-key/tsconfig.test.json @@ -5,7 +5,7 @@ "outDir": "${configDir}/node_modules/.cache/ts/test-out", "tsBuildInfoFile": "${configDir}/node_modules/.cache/ts/test-tsbuildinfo" }, - "include": ["./test", "./src"], + "include": ["./test", "./src", "./package.json"], "references": [ { "path": "../better-auth/tsconfig.json" diff --git a/packages/better-auth/src/client/index.ts b/packages/better-auth/src/client/index.ts index 13b34c31a8..f01245623c 100644 --- a/packages/better-auth/src/client/index.ts +++ b/packages/better-auth/src/client/index.ts @@ -3,6 +3,7 @@ import type { BetterAuthOptions, BetterAuthPlugin, } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../version"; export * from "./broadcast-channel"; export { @@ -24,6 +25,7 @@ export * from "./vanilla"; export const InferPlugin = () => { return { id: "infer-server-plugin", + version: PACKAGE_VERSION, $InferServerPlugin: {} as T, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/client/plugins/infer-plugin.ts b/packages/better-auth/src/client/plugins/infer-plugin.ts index 6ae63c4e74..5091dcb9ca 100644 --- a/packages/better-auth/src/client/plugins/infer-plugin.ts +++ b/packages/better-auth/src/client/plugins/infer-plugin.ts @@ -2,6 +2,7 @@ import type { BetterAuthClientPlugin, BetterAuthOptions, } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; export const InferServerPlugin = < AuthOrOption extends @@ -22,6 +23,7 @@ export const InferServerPlugin = < : never; return { id: "infer-server-plugin", + version: PACKAGE_VERSION, $InferServerPlugin: {} as Plugin, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/client/test-plugin.ts b/packages/better-auth/src/client/test-plugin.ts index c5e02f46ae..18c3983ec6 100644 --- a/packages/better-auth/src/client/test-plugin.ts +++ b/packages/better-auth/src/client/test-plugin.ts @@ -5,10 +5,12 @@ import type { import { createAuthEndpoint } from "@better-auth/core/api"; import { atom, computed } from "nanostores"; import * as z from "zod"; +import { PACKAGE_VERSION } from "../version"; import { useAuthQuery } from "./query"; const serverPlugin = { id: "test", + version: PACKAGE_VERSION, endpoints: { test: createAuthEndpoint( "/test", @@ -120,6 +122,7 @@ export const testClientPlugin = () => { }); return { id: "test" as const, + version: PACKAGE_VERSION, getActions($fetch) { return { setTestAtom(value: boolean) { @@ -163,6 +166,7 @@ export const testClientPlugin2 = () => { }); return { id: "test", + version: PACKAGE_VERSION, getAtoms($fetch) { return { $test2, @@ -190,6 +194,7 @@ export const testClientPlugin2 = () => { export const testDeepMergePluginA = () => { return { id: "test-deep-merge-a", + version: PACKAGE_VERSION, getActions() { return { signIn: { @@ -203,6 +208,7 @@ export const testDeepMergePluginA = () => { export const testDeepMergePluginB = () => { return { id: "test-deep-merge-b", + version: PACKAGE_VERSION, getActions() { return { signIn: { diff --git a/packages/better-auth/src/integrations/next-js.ts b/packages/better-auth/src/integrations/next-js.ts index 8c25357cf1..8a491fff38 100644 --- a/packages/better-auth/src/integrations/next-js.ts +++ b/packages/better-auth/src/integrations/next-js.ts @@ -2,6 +2,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { setShouldSkipSessionRefresh } from "../api/state/should-session-refresh"; import { parseSetCookieHeader } from "../cookies"; +import { PACKAGE_VERSION } from "../version"; export function toNextJsHandler( auth: @@ -25,6 +26,7 @@ export function toNextJsHandler( export const nextCookies = () => { return { id: "next-cookies", + version: PACKAGE_VERSION, hooks: { before: [ { diff --git a/packages/better-auth/src/integrations/svelte-kit.ts b/packages/better-auth/src/integrations/svelte-kit.ts index c0090a78e0..a3aef07bc4 100644 --- a/packages/better-auth/src/integrations/svelte-kit.ts +++ b/packages/better-auth/src/integrations/svelte-kit.ts @@ -2,6 +2,7 @@ import { createAuthMiddleware } from "@better-auth/core/api"; import type { RequestEvent } from "@sveltejs/kit"; import { parseSetCookieHeader } from "../cookies"; import type { BetterAuthOptions, BetterAuthPlugin } from "../types"; +import { PACKAGE_VERSION } from "../version"; export const toSvelteKitHandler = (auth: { handler: (request: Request) => Response | Promise; @@ -58,6 +59,7 @@ export const sveltekitCookies = ( ) => { return { id: "sveltekit-cookies", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/integrations/tanstack-start-solid.ts b/packages/better-auth/src/integrations/tanstack-start-solid.ts index 72309ed4c6..01373621de 100644 --- a/packages/better-auth/src/integrations/tanstack-start-solid.ts +++ b/packages/better-auth/src/integrations/tanstack-start-solid.ts @@ -1,6 +1,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { parseSetCookieHeader } from "../cookies"; +import { PACKAGE_VERSION } from "../version"; /** * TanStack Start cookie plugin for Solid.js. @@ -22,6 +23,7 @@ import { parseSetCookieHeader } from "../cookies"; export const tanstackStartCookies = () => { return { id: "tanstack-start-cookies-solid", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/integrations/tanstack-start.ts b/packages/better-auth/src/integrations/tanstack-start.ts index 51cdb7911b..f8d2a590c6 100644 --- a/packages/better-auth/src/integrations/tanstack-start.ts +++ b/packages/better-auth/src/integrations/tanstack-start.ts @@ -1,6 +1,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { parseSetCookieHeader } from "../cookies"; +import { PACKAGE_VERSION } from "../version"; /** * TanStack Start cookie plugin for React. @@ -22,6 +23,7 @@ import { parseSetCookieHeader } from "../cookies"; export const tanstackStartCookies = () => { return { id: "tanstack-start-cookies", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/plugins/additional-fields/client.ts b/packages/better-auth/src/plugins/additional-fields/client.ts index ee83c049b7..c0fb84affe 100644 --- a/packages/better-auth/src/plugins/additional-fields/client.ts +++ b/packages/better-auth/src/plugins/additional-fields/client.ts @@ -4,6 +4,7 @@ import type { BetterAuthPlugin, } from "@better-auth/core"; import type { DBFieldAttribute } from "@better-auth/core/db"; +import { PACKAGE_VERSION } from "../../version"; export const inferAdditionalFields = < T, @@ -45,6 +46,7 @@ export const inferAdditionalFields = < } ? { id: "additional-fields-client"; + version: string; schema: { user: { fields: S["user"] extends object ? S["user"] : {}; @@ -58,6 +60,7 @@ export const inferAdditionalFields = < : Opts extends BetterAuthOptions ? { id: "additional-fields"; + version: string; schema: { user: { fields: Opts["user"] extends { @@ -79,6 +82,7 @@ export const inferAdditionalFields = < return { id: "additional-fields-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as Plugin extends BetterAuthPlugin ? Plugin : undefined, diff --git a/packages/better-auth/src/plugins/admin/admin.ts b/packages/better-auth/src/plugins/admin/admin.ts index ec1f83b3a3..7fe5bcee7d 100644 --- a/packages/better-auth/src/plugins/admin/admin.ts +++ b/packages/better-auth/src/plugins/admin/admin.ts @@ -3,6 +3,7 @@ import { createAuthMiddleware } from "@better-auth/core/api"; import { APIError, BetterAuthError } from "@better-auth/core/error"; import { mergeSchema } from "../../db/schema"; import { getEndpointResponse } from "../../utils/plugin-helper"; +import { PACKAGE_VERSION } from "../../version"; import { defaultRoles } from "./access"; import { ADMIN_ERROR_CODES } from "./error-codes"; import { @@ -69,6 +70,7 @@ export const admin = (options?: O | undefined) => { return { id: "admin", + version: PACKAGE_VERSION, init() { return { options: { diff --git a/packages/better-auth/src/plugins/admin/client.ts b/packages/better-auth/src/plugins/admin/client.ts index 1163d4ff7f..d63c9278c3 100644 --- a/packages/better-auth/src/plugins/admin/client.ts +++ b/packages/better-auth/src/plugins/admin/client.ts @@ -1,4 +1,5 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { AccessControl, ArrayElement, Role } from "../access"; import type { defaultStatements } from "./access"; import { adminAc, userAc } from "./access"; @@ -42,6 +43,7 @@ export const adminClient = ( return { id: "admin-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType< typeof admin<{ ac: O["ac"] extends AccessControl diff --git a/packages/better-auth/src/plugins/anonymous/client.ts b/packages/better-auth/src/plugins/anonymous/client.ts index 6d012336f9..f9ed2c3474 100644 --- a/packages/better-auth/src/plugins/anonymous/client.ts +++ b/packages/better-auth/src/plugins/anonymous/client.ts @@ -1,10 +1,12 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { anonymous } from "."; import { ANONYMOUS_ERROR_CODES } from "./error-codes"; export const anonymousClient = () => { return { id: "anonymous", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, pathMethods: { "/sign-in/anonymous": "POST", diff --git a/packages/better-auth/src/plugins/anonymous/index.ts b/packages/better-auth/src/plugins/anonymous/index.ts index 8461c98228..6601acc3fd 100644 --- a/packages/better-auth/src/plugins/anonymous/index.ts +++ b/packages/better-auth/src/plugins/anonymous/index.ts @@ -16,6 +16,7 @@ import { setSessionCookie, } from "../../cookies"; import { mergeSchema, parseUserOutput } from "../../db/schema"; +import { PACKAGE_VERSION } from "../../version"; import { ANONYMOUS_ERROR_CODES } from "./error-codes"; import { schema } from "./schema"; import type { @@ -58,6 +59,7 @@ async function getAnonUserEmail( export const anonymous = (options?: AnonymousOptions | undefined) => { return { id: "anonymous", + version: PACKAGE_VERSION, endpoints: { signInAnonymous: createAuthEndpoint( "/sign-in/anonymous", diff --git a/packages/better-auth/src/plugins/bearer/index.ts b/packages/better-auth/src/plugins/bearer/index.ts index 4d6e7ea99a..18a69ab5ea 100644 --- a/packages/better-auth/src/plugins/bearer/index.ts +++ b/packages/better-auth/src/plugins/bearer/index.ts @@ -3,6 +3,7 @@ import { createAuthMiddleware } from "@better-auth/core/api"; import { createHMAC } from "@better-auth/utils/hmac"; import { serializeSignedCookie } from "better-call"; import { parseSetCookieHeader } from "../../cookies"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -40,6 +41,7 @@ function tryDecode(str: string): string { export const bearer = (options?: BearerOptions | undefined) => { return { id: "bearer", + version: PACKAGE_VERSION, hooks: { before: [ { diff --git a/packages/better-auth/src/plugins/captcha/index.ts b/packages/better-auth/src/plugins/captcha/index.ts index 61fdac6a27..df8014fe25 100644 --- a/packages/better-auth/src/plugins/captcha/index.ts +++ b/packages/better-auth/src/plugins/captcha/index.ts @@ -1,6 +1,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { getIp } from "../../utils/get-request-ip"; import { middlewareResponse } from "../../utils/middleware-response"; +import { PACKAGE_VERSION } from "../../version"; import { defaultEndpoints, Providers, siteVerifyMap } from "./constants"; import { EXTERNAL_ERROR_CODES, INTERNAL_ERROR_CODES } from "./error-codes"; import type { CaptchaOptions } from "./types"; @@ -20,6 +21,7 @@ export type * from "./types"; export const captcha = (options: CaptchaOptions) => ({ id: "captcha", + version: PACKAGE_VERSION, $ERROR_CODES: EXTERNAL_ERROR_CODES, onRequest: async (request, ctx) => { try { diff --git a/packages/better-auth/src/plugins/custom-session/index.ts b/packages/better-auth/src/plugins/custom-session/index.ts index e755cb8028..1ddf6a6a01 100644 --- a/packages/better-auth/src/plugins/custom-session/index.ts +++ b/packages/better-auth/src/plugins/custom-session/index.ts @@ -12,6 +12,7 @@ import * as z from "zod"; import { getSession } from "../../api"; import { parseSetCookieHeader } from "../../cookies/cookie-utils"; import { getEndpointResponse } from "../../utils/plugin-helper"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -68,6 +69,7 @@ export const customSession = < ) => { return { id: "custom-session", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/plugins/device-authorization/client.ts b/packages/better-auth/src/plugins/device-authorization/client.ts index a12705a5d4..83fd5f5fe8 100644 --- a/packages/better-auth/src/plugins/device-authorization/client.ts +++ b/packages/better-auth/src/plugins/device-authorization/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { deviceAuthorization } from "."; export const deviceAuthorizationClient = () => { return { id: "device-authorization", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, pathMethods: { "/device/code": "POST", diff --git a/packages/better-auth/src/plugins/device-authorization/index.ts b/packages/better-auth/src/plugins/device-authorization/index.ts index fc3aa6a561..be7874ec96 100644 --- a/packages/better-auth/src/plugins/device-authorization/index.ts +++ b/packages/better-auth/src/plugins/device-authorization/index.ts @@ -4,6 +4,7 @@ import { mergeSchema } from "../../db"; import type { InferOptionSchema } from "../../types/plugins"; import type { TimeString } from "../../utils/time"; import { ms } from "../../utils/time"; +import { PACKAGE_VERSION } from "../../version"; import { DEVICE_AUTHORIZATION_ERROR_CODES } from "./error-codes"; import { deviceApprove, @@ -132,6 +133,7 @@ export const deviceAuthorization = ( return { id: "device-authorization", + version: PACKAGE_VERSION, schema: mergeSchema(schema, options?.schema), endpoints: { deviceCode: deviceCode(opts), diff --git a/packages/better-auth/src/plugins/email-otp/client.ts b/packages/better-auth/src/plugins/email-otp/client.ts index 29a4f51502..a2405ebdd2 100644 --- a/packages/better-auth/src/plugins/email-otp/client.ts +++ b/packages/better-auth/src/plugins/email-otp/client.ts @@ -1,6 +1,6 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { emailOTP } from "."; - import { EMAIL_OTP_ERROR_CODES } from "./error-codes"; export * from "./error-codes"; @@ -8,6 +8,7 @@ export * from "./error-codes"; export const emailOTPClient = () => { return { id: "email-otp", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, atomListeners: [ { diff --git a/packages/better-auth/src/plugins/email-otp/index.ts b/packages/better-auth/src/plugins/email-otp/index.ts index 0a29bf0691..1c090c2c54 100644 --- a/packages/better-auth/src/plugins/email-otp/index.ts +++ b/packages/better-auth/src/plugins/email-otp/index.ts @@ -3,6 +3,7 @@ import { createAuthMiddleware } from "@better-auth/core/api"; import { generateRandomString } from "../../crypto"; import { getDate } from "../../utils/date"; import { getEndpointResponse } from "../../utils/plugin-helper"; +import { PACKAGE_VERSION } from "../../version"; import { EMAIL_OTP_ERROR_CODES } from "./error-codes"; import { storeOTP } from "./otp-token"; import { @@ -46,6 +47,7 @@ export const emailOTP = (options: EmailOTPOptions) => { return { id: "email-otp", + version: PACKAGE_VERSION, init(ctx) { if (!opts.overrideDefaultEmailVerification) { return; diff --git a/packages/better-auth/src/plugins/generic-oauth/client.ts b/packages/better-auth/src/plugins/generic-oauth/client.ts index 31ce0f66cb..96cf66b813 100644 --- a/packages/better-auth/src/plugins/generic-oauth/client.ts +++ b/packages/better-auth/src/plugins/generic-oauth/client.ts @@ -1,10 +1,12 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { genericOAuth } from "."; import { GENERIC_OAUTH_ERROR_CODES } from "./error-codes"; export const genericOAuthClient = () => { return { id: "generic-oauth-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, $ERROR_CODES: GENERIC_OAUTH_ERROR_CODES, } satisfies BetterAuthClientPlugin; diff --git a/packages/better-auth/src/plugins/generic-oauth/index.ts b/packages/better-auth/src/plugins/generic-oauth/index.ts index 0d5d85b51d..7a3c6a2cd4 100644 --- a/packages/better-auth/src/plugins/generic-oauth/index.ts +++ b/packages/better-auth/src/plugins/generic-oauth/index.ts @@ -7,6 +7,7 @@ import { validateAuthorizationCode, } from "@better-auth/core/oauth2"; import { betterFetch } from "@better-fetch/fetch"; +import { PACKAGE_VERSION } from "../../version"; import { GENERIC_OAUTH_ERROR_CODES } from "./error-codes"; import { getUserInfo, @@ -72,6 +73,7 @@ export const genericOAuth = (options: GenericOAuthOptions) => { return { id: "generic-oauth", + version: PACKAGE_VERSION, init: (ctx: AuthContext) => { const genericProviders = options.config.map((c) => { let finalUserInfoUrl = c.userInfoUrl; diff --git a/packages/better-auth/src/plugins/haveibeenpwned/index.ts b/packages/better-auth/src/plugins/haveibeenpwned/index.ts index 2de07c0215..d4eafa6a9e 100644 --- a/packages/better-auth/src/plugins/haveibeenpwned/index.ts +++ b/packages/better-auth/src/plugins/haveibeenpwned/index.ts @@ -5,6 +5,7 @@ import { createHash } from "@better-auth/utils/hash"; import { betterFetch } from "@better-fetch/fetch"; import { APIError } from "../../api"; import { isAPIError } from "../../utils/is-api-error"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -93,6 +94,7 @@ export const haveIBeenPwned = (options?: HaveIBeenPwnedOptions | undefined) => { return { id: "have-i-been-pwned", + version: PACKAGE_VERSION, init(ctx) { const originalHash = ctx.password.hash; return { diff --git a/packages/better-auth/src/plugins/jwt/client.ts b/packages/better-auth/src/plugins/jwt/client.ts index c0f6c084e2..fa13da9b47 100644 --- a/packages/better-auth/src/plugins/jwt/client.ts +++ b/packages/better-auth/src/plugins/jwt/client.ts @@ -1,5 +1,6 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; import type { JSONWebKeySet } from "jose"; +import { PACKAGE_VERSION } from "../../version"; import type { jwt } from "./index"; interface JwtClientOptions { @@ -19,6 +20,7 @@ export const jwtClient = (options?: JwtClientOptions) => { return { id: "better-auth-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, pathMethods: { [jwksPath]: "GET", diff --git a/packages/better-auth/src/plugins/jwt/index.ts b/packages/better-auth/src/plugins/jwt/index.ts index 33f90f51cf..001457664f 100644 --- a/packages/better-auth/src/plugins/jwt/index.ts +++ b/packages/better-auth/src/plugins/jwt/index.ts @@ -8,6 +8,7 @@ import type { JSONWebKeySet, JWTPayload } from "jose"; import * as z from "zod"; import { APIError, sessionMiddleware } from "../../api"; import { mergeSchema } from "../../db/schema"; +import { PACKAGE_VERSION } from "../../version"; import { getJwksAdapter } from "./adapter"; import { schema } from "./schema"; import { getJwtToken, signJWT } from "./sign"; @@ -67,6 +68,7 @@ export const jwt = (options?: O) => { return { id: "jwt", + version: PACKAGE_VERSION, options: options as NoInfer, endpoints: { getJwks: createAuthEndpoint( diff --git a/packages/better-auth/src/plugins/last-login-method/client.ts b/packages/better-auth/src/plugins/last-login-method/client.ts index 8246ba4e6e..a5b3326950 100644 --- a/packages/better-auth/src/plugins/last-login-method/client.ts +++ b/packages/better-auth/src/plugins/last-login-method/client.ts @@ -1,4 +1,5 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; /** * Configuration for the client-side last login method plugin @@ -33,6 +34,7 @@ export const lastLoginMethodClient = ( return { id: "last-login-method-client", + version: PACKAGE_VERSION, getActions() { return { /** diff --git a/packages/better-auth/src/plugins/last-login-method/index.ts b/packages/better-auth/src/plugins/last-login-method/index.ts index 8af33590e8..ae335d5fd1 100644 --- a/packages/better-auth/src/plugins/last-login-method/index.ts +++ b/packages/better-auth/src/plugins/last-login-method/index.ts @@ -3,6 +3,7 @@ import type { GenericEndpointContext, } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -95,6 +96,7 @@ export const lastLoginMethod = ( return { id: "last-login-method", + version: PACKAGE_VERSION, init(ctx) { return { options: { diff --git a/packages/better-auth/src/plugins/magic-link/client.ts b/packages/better-auth/src/plugins/magic-link/client.ts index 36b3742516..b3d6077750 100644 --- a/packages/better-auth/src/plugins/magic-link/client.ts +++ b/packages/better-auth/src/plugins/magic-link/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { magicLink } from "."; export const magicLinkClient = () => { return { id: "magic-link", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/plugins/magic-link/index.ts b/packages/better-auth/src/plugins/magic-link/index.ts index c41a3c59d1..e34083d92e 100644 --- a/packages/better-auth/src/plugins/magic-link/index.ts +++ b/packages/better-auth/src/plugins/magic-link/index.ts @@ -9,6 +9,7 @@ import { originCheck } from "../../api"; import { setSessionCookie } from "../../cookies"; import { generateRandomString } from "../../crypto"; import { parseSessionOutput, parseUserOutput } from "../../db"; +import { PACKAGE_VERSION } from "../../version"; import { defaultKeyHasher } from "./utils"; declare module "@better-auth/core" { @@ -168,6 +169,7 @@ export const magicLink = (options: MagicLinkOptions) => { return { id: "magic-link", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/mcp/index.ts b/packages/better-auth/src/plugins/mcp/index.ts index da9f77c25a..1c70dd0b58 100644 --- a/packages/better-auth/src/plugins/mcp/index.ts +++ b/packages/better-auth/src/plugins/mcp/index.ts @@ -23,6 +23,7 @@ import { isDynamicBaseURLConfig, resolveBaseURL, } from "../../utils/url"; +import { PACKAGE_VERSION } from "../../version"; import type { Client, CodeVerificationValue, @@ -192,6 +193,7 @@ export const mcp = (options: MCPOptions) => { const provider = oidcProvider(opts); return { id: "mcp", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/plugins/multi-session/client.ts b/packages/better-auth/src/plugins/multi-session/client.ts index 2dea78df4f..486a6b1f80 100644 --- a/packages/better-auth/src/plugins/multi-session/client.ts +++ b/packages/better-auth/src/plugins/multi-session/client.ts @@ -1,4 +1,5 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { multiSession } from "."; import { MULTI_SESSION_ERROR_CODES } from "./error-codes"; @@ -7,6 +8,7 @@ export * from "./error-codes"; export const multiSessionClient = () => { return { id: "multi-session", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, atomListeners: [ { diff --git a/packages/better-auth/src/plugins/multi-session/index.ts b/packages/better-auth/src/plugins/multi-session/index.ts index 9c89351d12..79cb387503 100644 --- a/packages/better-auth/src/plugins/multi-session/index.ts +++ b/packages/better-auth/src/plugins/multi-session/index.ts @@ -14,6 +14,7 @@ import { setSessionCookie, } from "../../cookies"; import { parseSessionOutput, parseUserOutput } from "../../db/schema"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -58,6 +59,7 @@ export const multiSession = (options?: MultiSessionConfig | undefined) => { return { id: "multi-session", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/oauth-proxy/index.ts b/packages/better-auth/src/plugins/oauth-proxy/index.ts index 35db11bd46..f3f409437a 100644 --- a/packages/better-auth/src/plugins/oauth-proxy/index.ts +++ b/packages/better-auth/src/plugins/oauth-proxy/index.ts @@ -19,6 +19,7 @@ import type { StateData } from "../../state"; import { parseGenericState } from "../../state"; import type { Account, User } from "../../types"; import { getOrigin } from "../../utils/url"; +import { PACKAGE_VERSION } from "../../version"; import { checkSkipProxy, redirectOnError, @@ -126,6 +127,7 @@ export const oAuthProxy = (opts?: O) => { return { id: "oauth-proxy", + version: PACKAGE_VERSION, options: opts as NoInfer, endpoints: { oAuthProxy: createAuthEndpoint( diff --git a/packages/better-auth/src/plugins/oidc-provider/client.ts b/packages/better-auth/src/plugins/oidc-provider/client.ts index 95a01d5645..24e4514b5e 100644 --- a/packages/better-auth/src/plugins/oidc-provider/client.ts +++ b/packages/better-auth/src/plugins/oidc-provider/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { oidcProvider } from "."; export const oidcClient = () => { return { id: "oidc-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/plugins/oidc-provider/index.ts b/packages/better-auth/src/plugins/oidc-provider/index.ts index c81358c1c6..3e5c03b5eb 100644 --- a/packages/better-auth/src/plugins/oidc-provider/index.ts +++ b/packages/better-auth/src/plugins/oidc-provider/index.ts @@ -21,6 +21,7 @@ import { } from "../../crypto"; import { mergeSchema } from "../../db"; import { HIDE_METADATA } from "../../utils"; +import { PACKAGE_VERSION } from "../../version"; import { getJwtToken, verifyJWT } from "../jwt"; import { authorize } from "./authorize"; import type { OAuthApplication } from "./schema"; @@ -381,6 +382,7 @@ export const oidcProvider = (options: OIDCOptions) => { return { id: "oidc-provider", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/better-auth/src/plugins/one-tap/client.ts b/packages/better-auth/src/plugins/one-tap/client.ts index b26492518e..064c1c5298 100644 --- a/packages/better-auth/src/plugins/one-tap/client.ts +++ b/packages/better-auth/src/plugins/one-tap/client.ts @@ -3,6 +3,7 @@ import type { BetterAuthClientPlugin, ClientFetchOption, } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; declare global { interface Window { @@ -192,6 +193,7 @@ const noRetryReasons = { export const oneTapClient = (options: GoogleOneTapOptions) => { return { id: "one-tap", + version: PACKAGE_VERSION, fetchPlugins: [ { id: "fedcm-signout-handle", diff --git a/packages/better-auth/src/plugins/one-tap/index.ts b/packages/better-auth/src/plugins/one-tap/index.ts index 50e1160705..1f7293092b 100644 --- a/packages/better-auth/src/plugins/one-tap/index.ts +++ b/packages/better-auth/src/plugins/one-tap/index.ts @@ -6,6 +6,7 @@ import { APIError } from "../../api"; import { setSessionCookie } from "../../cookies"; import { parseUserOutput } from "../../db/schema"; import { toBoolean } from "../../utils/boolean"; +import { PACKAGE_VERSION } from "../../version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -41,6 +42,7 @@ const oneTapCallbackBodySchema = z.object({ export const oneTap = (options?: OneTapOptions | undefined) => ({ id: "one-tap", + version: PACKAGE_VERSION, endpoints: { oneTapCallback: createAuthEndpoint( "/one-tap/callback", diff --git a/packages/better-auth/src/plugins/one-time-token/client.ts b/packages/better-auth/src/plugins/one-time-token/client.ts index aa1ea280bf..8d32844673 100644 --- a/packages/better-auth/src/plugins/one-time-token/client.ts +++ b/packages/better-auth/src/plugins/one-time-token/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { oneTimeToken } from "./index"; export const oneTimeTokenClient = () => { return { id: "one-time-token", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/plugins/one-time-token/index.ts b/packages/better-auth/src/plugins/one-time-token/index.ts index aa2b01d9be..8226c3eb2a 100644 --- a/packages/better-auth/src/plugins/one-time-token/index.ts +++ b/packages/better-auth/src/plugins/one-time-token/index.ts @@ -11,6 +11,7 @@ import { sessionMiddleware } from "../../api"; import { setSessionCookie } from "../../cookies"; import { generateRandomString } from "../../crypto"; import type { Session, User } from "../../types"; +import { PACKAGE_VERSION } from "../../version"; import { defaultKeyHasher } from "./utils"; declare module "@better-auth/core" { @@ -116,6 +117,7 @@ export const oneTimeToken = (options?: OneTimeTokenOptions | undefined) => { return { id: "one-time-token", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/open-api/index.ts b/packages/better-auth/src/plugins/open-api/index.ts index 6440f03b93..71096bc735 100644 --- a/packages/better-auth/src/plugins/open-api/index.ts +++ b/packages/better-auth/src/plugins/open-api/index.ts @@ -2,6 +2,7 @@ import type { BetterAuthPlugin, LiteralString } from "@better-auth/core"; import { createAuthEndpoint } from "@better-auth/core/api"; import { APIError } from "../../api"; import { HIDE_METADATA } from "../../utils"; +import { PACKAGE_VERSION } from "../../version"; import { generator } from "./generator"; import { logo } from "./logo"; @@ -102,6 +103,7 @@ export const openAPI = (options?: O | undefined) => { const path = options?.path ?? "/reference"; return { id: "open-api", + version: PACKAGE_VERSION, endpoints: { generateOpenAPISchema: createAuthEndpoint( "/open-api/generate-schema", diff --git a/packages/better-auth/src/plugins/organization/client.ts b/packages/better-auth/src/plugins/organization/client.ts index fcd0e03b4e..bdedd4b37b 100644 --- a/packages/better-auth/src/plugins/organization/client.ts +++ b/packages/better-auth/src/plugins/organization/client.ts @@ -11,6 +11,7 @@ import type { } from "../../plugins/organization/schema"; import type { BetterAuthOptions, BetterAuthPlugin } from "../../types"; import type { Prettify } from "../../types/helper"; +import { PACKAGE_VERSION } from "../../version"; import type { AccessControl, ArrayElement, Role } from "../access"; import type { defaultStatements } from "./access"; import { adminAc, defaultRoles, memberAc, ownerAc } from "./access"; @@ -124,6 +125,7 @@ export const organizationClient = ( type Schema = CO["schema"]; return { id: "organization", + version: PACKAGE_VERSION, $InferServerPlugin: {} as OrganizationPlugin<{ ac: CO["ac"] extends AccessControl ? CO["ac"] diff --git a/packages/better-auth/src/plugins/organization/organization.ts b/packages/better-auth/src/plugins/organization/organization.ts index ac3d94ef52..549a3d65b7 100644 --- a/packages/better-auth/src/plugins/organization/organization.ts +++ b/packages/better-auth/src/plugins/organization/organization.ts @@ -5,6 +5,7 @@ import { APIError } from "@better-auth/core/error"; import * as z from "zod"; import { getSessionFromCtx } from "../../api"; import { shimContext } from "../../utils/shim"; +import { PACKAGE_VERSION } from "../../version"; import type { AccessControl, ArrayElement } from "../access"; import type { defaultStatements } from "./access"; import { defaultRoles } from "./access"; @@ -81,6 +82,7 @@ export type { OrganizationOptions } from "./types"; export type DefaultOrganizationPlugin = { id: "organization"; + version: string; endpoints: OrganizationEndpoints; schema: OrganizationSchema; $Infer: { @@ -292,6 +294,7 @@ const createHasPermission = (options: O) => { export type OrganizationPlugin = { id: "organization"; + version: string; endpoints: OrganizationEndpoints & (O extends { teams: { enabled: true } } ? TeamEndpoints : {}) & (O extends { dynamicAccessControl: { enabled: true } } @@ -347,6 +350,7 @@ export function organization< options?: O | undefined, ): { id: "organization"; + version: string; endpoints: OrganizationEndpoints & TeamEndpoints; schema: OrganizationSchema; $Infer: { @@ -378,6 +382,7 @@ export function organization< options?: O | undefined, ): { id: "organization"; + version: string; endpoints: OrganizationEndpoints & TeamEndpoints & DynamicAccessControlEndpoints; @@ -411,6 +416,7 @@ export function organization< options?: O | undefined, ): { id: "organization"; + version: string; endpoints: OrganizationEndpoints & DynamicAccessControlEndpoints; schema: OrganizationSchema; $Infer: { @@ -1204,6 +1210,7 @@ export function organization(options?: O) { return { id: "organization", + version: PACKAGE_VERSION, endpoints: { ...(api as OrganizationEndpoints), hasPermission: createHasPermission(opts), diff --git a/packages/better-auth/src/plugins/phone-number/client.ts b/packages/better-auth/src/plugins/phone-number/client.ts index c27a16d394..e51f368d04 100644 --- a/packages/better-auth/src/plugins/phone-number/client.ts +++ b/packages/better-auth/src/plugins/phone-number/client.ts @@ -1,6 +1,6 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { phoneNumber } from "."; - import { PHONE_NUMBER_ERROR_CODES } from "./error-codes"; export * from "./error-codes"; @@ -8,6 +8,7 @@ export * from "./error-codes"; export const phoneNumberClient = () => { return { id: "phoneNumber", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, atomListeners: [ { diff --git a/packages/better-auth/src/plugins/phone-number/index.ts b/packages/better-auth/src/plugins/phone-number/index.ts index 353b860e8e..200ad2301f 100644 --- a/packages/better-auth/src/plugins/phone-number/index.ts +++ b/packages/better-auth/src/plugins/phone-number/index.ts @@ -2,6 +2,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { APIError } from "@better-auth/core/error"; import { mergeSchema } from "../../db/schema"; +import { PACKAGE_VERSION } from "../../version"; import { PHONE_NUMBER_ERROR_CODES } from "./error-codes"; import type { RequiredPhoneNumberOptions } from "./routes"; import { @@ -37,6 +38,7 @@ export const phoneNumber = (options?: PhoneNumberOptions | undefined) => { return { id: "phone-number", + version: PACKAGE_VERSION, hooks: { before: [ { diff --git a/packages/better-auth/src/plugins/siwe/client.ts b/packages/better-auth/src/plugins/siwe/client.ts index d3f8e9b744..b0f410b72d 100644 --- a/packages/better-auth/src/plugins/siwe/client.ts +++ b/packages/better-auth/src/plugins/siwe/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { siwe } from "."; export const siweClient = () => { return { id: "siwe", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/better-auth/src/plugins/siwe/index.ts b/packages/better-auth/src/plugins/siwe/index.ts index 99f23eab32..983a441d05 100644 --- a/packages/better-auth/src/plugins/siwe/index.ts +++ b/packages/better-auth/src/plugins/siwe/index.ts @@ -8,6 +8,7 @@ import type { InferOptionSchema, User } from "../../types"; import { toChecksumAddress } from "../../utils/hashing"; import { isAPIError } from "../../utils/is-api-error"; import { getOrigin } from "../../utils/url"; +import { PACKAGE_VERSION } from "../../version"; import type { WalletAddressSchema } from "./schema"; import { schema } from "./schema"; import type { @@ -46,6 +47,7 @@ const getSiweNonceBodySchema = z.object({ export const siwe = (options: SIWEPluginOptions) => ({ id: "siwe", + version: PACKAGE_VERSION, schema: mergeSchema(schema, options?.schema) as WalletAddressSchema, endpoints: { getSiweNonce: createAuthEndpoint( diff --git a/packages/better-auth/src/plugins/test-utils/index.ts b/packages/better-auth/src/plugins/test-utils/index.ts index 80d18d78d0..40161eff03 100644 --- a/packages/better-auth/src/plugins/test-utils/index.ts +++ b/packages/better-auth/src/plugins/test-utils/index.ts @@ -22,6 +22,8 @@ export type { TestUtilsOptions, } from "./types"; +import { PACKAGE_VERSION } from "../../version"; + declare module "@better-auth/core" { interface BetterAuthPluginRegistry { "test-utils": { @@ -62,6 +64,7 @@ declare module "@better-auth/core" { export const testUtils = (options: TestUtilsOptions = {}) => { return { id: "test-utils", + version: PACKAGE_VERSION, init(ctx) { // Check if organization plugin is present const hasOrgPlugin = ctx.hasPlugin("organization"); diff --git a/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts b/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts index 9ff413592f..0fa2d2f251 100644 --- a/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts +++ b/packages/better-auth/src/plugins/two-factor/backup-codes/index.ts @@ -8,6 +8,7 @@ import { symmetricDecrypt, symmetricEncrypt } from "../../../crypto"; import { generateRandomString } from "../../../crypto/random"; import { parseUserOutput } from "../../../db/schema"; import { shouldRequirePassword } from "../../../utils/password"; +import { PACKAGE_VERSION } from "../../../version"; import { TWO_FACTOR_ERROR_CODES } from "../error-code"; import type { TwoFactorProvider, @@ -185,6 +186,7 @@ export const backupCode2fa = (opts: BackupCodeOptions) => { return { id: "backup_code", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/two-factor/client.ts b/packages/better-auth/src/plugins/two-factor/client.ts index 2e117af7fa..39146c6df3 100644 --- a/packages/better-auth/src/plugins/two-factor/client.ts +++ b/packages/better-auth/src/plugins/two-factor/client.ts @@ -1,4 +1,5 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { twoFactor as twoFa } from "."; import { TWO_FACTOR_ERROR_CODES } from "./error-code"; @@ -24,6 +25,7 @@ export const twoFactorClient = ( ) => { return { id: "two-factor", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, atomListeners: [ { diff --git a/packages/better-auth/src/plugins/two-factor/index.ts b/packages/better-auth/src/plugins/two-factor/index.ts index c28611ff45..d722e5ed47 100644 --- a/packages/better-auth/src/plugins/two-factor/index.ts +++ b/packages/better-auth/src/plugins/two-factor/index.ts @@ -17,6 +17,7 @@ import { symmetricEncrypt } from "../../crypto"; import { generateRandomString } from "../../crypto/random"; import { mergeSchema } from "../../db/schema"; import { shouldRequirePassword, validatePassword } from "../../utils/password"; +import { PACKAGE_VERSION } from "../../version"; import type { BackupCodeOptions } from "./backup-codes"; import { backupCode2fa, generateBackupCodes } from "./backup-codes"; import { @@ -93,6 +94,7 @@ export const twoFactor = (options?: O) => { return { id: "two-factor", + version: PACKAGE_VERSION, endpoints: { ...totp.endpoints, ...otp.endpoints, diff --git a/packages/better-auth/src/plugins/two-factor/otp/index.ts b/packages/better-auth/src/plugins/two-factor/otp/index.ts index 2d394c5a6d..0eec37a323 100644 --- a/packages/better-auth/src/plugins/two-factor/otp/index.ts +++ b/packages/better-auth/src/plugins/two-factor/otp/index.ts @@ -10,6 +10,7 @@ import { symmetricEncrypt, } from "../../../crypto"; import { parseUserOutput } from "../../../db/schema"; +import { PACKAGE_VERSION } from "../../../version"; import { TWO_FACTOR_ERROR_CODES } from "../error-code"; import type { TwoFactorProvider, UserWithTwoFactor } from "../types"; import { defaultKeyHasher } from "../utils"; @@ -386,6 +387,7 @@ export const otp2fa = (options?: OTPOptions | undefined) => { return { id: "otp", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/two-factor/totp/index.ts b/packages/better-auth/src/plugins/two-factor/totp/index.ts index 67c20fb73c..cdc6006885 100644 --- a/packages/better-auth/src/plugins/two-factor/totp/index.ts +++ b/packages/better-auth/src/plugins/two-factor/totp/index.ts @@ -6,6 +6,7 @@ import { sessionMiddleware } from "../../../api"; import { setSessionCookie } from "../../../cookies"; import { symmetricDecrypt } from "../../../crypto"; import { shouldRequirePassword } from "../../../utils/password"; +import { PACKAGE_VERSION } from "../../../version"; import type { BackupCodeOptions } from "../backup-codes"; import { TWO_FACTOR_ERROR_CODES } from "../error-code"; import type { @@ -318,6 +319,7 @@ export const totp2fa = (options?: TOTPOptions | undefined) => { return { id: "totp", + version: PACKAGE_VERSION, endpoints: { /** * ### Endpoint diff --git a/packages/better-auth/src/plugins/two-factor/types.ts b/packages/better-auth/src/plugins/two-factor/types.ts index d0e792b9e8..8ecb0cc499 100644 --- a/packages/better-auth/src/plugins/two-factor/types.ts +++ b/packages/better-auth/src/plugins/two-factor/types.ts @@ -72,6 +72,7 @@ export interface UserWithTwoFactor extends User { export interface TwoFactorProvider { id: LiteralString; + version?: string | undefined; endpoints?: BetterAuthPlugin["endpoints"] | undefined; } diff --git a/packages/better-auth/src/plugins/username/client.ts b/packages/better-auth/src/plugins/username/client.ts index 1b4cb225c4..1771d477ce 100644 --- a/packages/better-auth/src/plugins/username/client.ts +++ b/packages/better-auth/src/plugins/username/client.ts @@ -1,6 +1,6 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../../version"; import type { username } from "."; - import { USERNAME_ERROR_CODES } from "./error-codes"; export * from "./error-codes"; @@ -8,6 +8,7 @@ export * from "./error-codes"; export const usernameClient = () => { return { id: "username", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, atomListeners: [ { diff --git a/packages/better-auth/src/plugins/username/index.ts b/packages/better-auth/src/plugins/username/index.ts index 5c83272cd9..65d6e5bf5d 100644 --- a/packages/better-auth/src/plugins/username/index.ts +++ b/packages/better-auth/src/plugins/username/index.ts @@ -11,6 +11,7 @@ import { getSessionFromCtx } from "../../api/routes/session"; import { setSessionCookie } from "../../cookies"; import { mergeSchema, parseUserOutput } from "../../db"; import type { InferOptionSchema } from "../../types/plugins"; +import { PACKAGE_VERSION } from "../../version"; import { USERNAME_ERROR_CODES as ERROR_CODES } from "./error-codes"; import type { UsernameSchema } from "./schema"; import { getSchema } from "./schema"; @@ -138,6 +139,7 @@ export const username = (options?: UsernameOptions | undefined) => { return { id: "username", + version: PACKAGE_VERSION, init(ctx) { return { options: { diff --git a/packages/better-auth/src/version.ts b/packages/better-auth/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/better-auth/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/better-auth/tsconfig.json b/packages/better-auth/tsconfig.json index 013e4eb168..55732fb72f 100644 --- a/packages/better-auth/tsconfig.json +++ b/packages/better-auth/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../../tsconfig.base.json", + "include": ["src/**/*.ts", "package.json"], "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"], "types": ["node", "bun"] diff --git a/packages/core/src/types/context.ts b/packages/core/src/types/context.ts index 14718a7997..4f45963d2b 100644 --- a/packages/core/src/types/context.ts +++ b/packages/core/src/types/context.ts @@ -58,6 +58,7 @@ type InferPluginOptions< * * const createMyPlugin = (options?: Options) => ({ * id: 'my-plugin', + * version: '1.0.0', * options, * } satisfies BetterAuthPlugin); * diff --git a/packages/core/src/types/plugin-client.ts b/packages/core/src/types/plugin-client.ts index f288ee3ed1..b129198648 100644 --- a/packages/core/src/types/plugin-client.ts +++ b/packages/core/src/types/plugin-client.ts @@ -79,6 +79,7 @@ export interface BetterAuthClientOptions { export interface BetterAuthClientPlugin { id: LiteralString; + version?: string | undefined; /** * only used for type inference. don't pass the * actual plugin diff --git a/packages/core/src/types/plugin.ts b/packages/core/src/types/plugin.ts index 8f0f52a525..55dea993d9 100644 --- a/packages/core/src/types/plugin.ts +++ b/packages/core/src/types/plugin.ts @@ -51,6 +51,7 @@ export type BetterAuthPluginErrorCodePart = { export type BetterAuthPlugin = BetterAuthPluginErrorCodePart & { id: LiteralString; + version?: string | undefined; /** * The init function is called when the plugin is initialized. * You can return a new context or modify the existing context. diff --git a/packages/electron/src/client.ts b/packages/electron/src/client.ts index 34e97ba41a..679ea4c657 100644 --- a/packages/electron/src/client.ts +++ b/packages/electron/src/client.ts @@ -22,6 +22,7 @@ import { isProcessType, parseProtocolScheme, } from "./utils"; +import { PACKAGE_VERSION } from "./version"; const { app, safeStorage, webContents } = electron; @@ -91,6 +92,7 @@ export const electronClient = (options: O) => { return { id: "electron", + version: PACKAGE_VERSION, fetchPlugins: [ { id: "electron", diff --git a/packages/electron/src/index.ts b/packages/electron/src/index.ts index 1774d2b2e4..7f588ac781 100644 --- a/packages/electron/src/index.ts +++ b/packages/electron/src/index.ts @@ -18,6 +18,7 @@ import { electronTransferUser, } from "./routes"; import type { ElectronOptions } from "./types"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -109,6 +110,7 @@ export const electron = (options?: ElectronOptions | undefined) => { return { id: "electron", + version: PACKAGE_VERSION, async onRequest(request, _ctx) { if (opts.disableOriginOverride || request.headers.get("origin")) { return; diff --git a/packages/electron/src/proxy.ts b/packages/electron/src/proxy.ts index e905d5821f..4395db476a 100644 --- a/packages/electron/src/proxy.ts +++ b/packages/electron/src/proxy.ts @@ -3,6 +3,7 @@ import { parseCookies } from "better-auth/cookies"; import type { electron } from "./index"; import type { ElectronProxyClientOptions } from "./types/client"; import { parseProtocolScheme } from "./utils"; +import { PACKAGE_VERSION } from "./version"; export const electronProxyClient = (options: ElectronProxyClientOptions) => { const opts = { @@ -16,6 +17,7 @@ export const electronProxyClient = (options: ElectronProxyClientOptions) => { return { id: "electron-proxy", + version: PACKAGE_VERSION, getActions: () => { const getAuthorizationCode = () => { if (typeof document === "undefined") return null; diff --git a/packages/electron/src/version.ts b/packages/electron/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/electron/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/electron/tsconfig.json b/packages/electron/tsconfig.json index 7ff846acaf..4e0641e202 100644 --- a/packages/electron/tsconfig.json +++ b/packages/electron/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, - "include": ["./src"], + "include": ["./src", "./package.json"], "references": [ { "path": "../core/tsconfig.json" diff --git a/packages/expo/src/client.ts b/packages/expo/src/client.ts index de135c585b..ace9234891 100644 --- a/packages/expo/src/client.ts +++ b/packages/expo/src/client.ts @@ -14,6 +14,7 @@ import * as Linking from "expo-linking"; import { Platform } from "react-native"; import { setupExpoFocusManager } from "./focus-manager"; import { setupExpoOnlineManager } from "./online-manager"; +import { PACKAGE_VERSION } from "./version"; if (Platform.OS !== "web") { setupExpoFocusManager(); @@ -286,6 +287,7 @@ export const expoClient = (opts: ExpoClientOptions) => { } return { id: "expo", + version: PACKAGE_VERSION, getActions(_, $store) { store = $store; return { diff --git a/packages/expo/src/index.ts b/packages/expo/src/index.ts index e4909d7672..5e525c3cbe 100644 --- a/packages/expo/src/index.ts +++ b/packages/expo/src/index.ts @@ -1,6 +1,7 @@ import type { BetterAuthPlugin } from "@better-auth/core"; import { createAuthMiddleware } from "@better-auth/core/api"; import { expoAuthorizationProxy } from "./routes"; +import { PACKAGE_VERSION } from "./version"; export interface ExpoOptions { /** @@ -21,6 +22,7 @@ declare module "@better-auth/core" { export const expo = (options?: ExpoOptions | undefined) => { return { id: "expo", + version: PACKAGE_VERSION, init: (ctx) => { const trustedOrigins = process.env.NODE_ENV === "development" ? ["exp://"] : []; diff --git a/packages/expo/src/plugins/last-login-method.ts b/packages/expo/src/plugins/last-login-method.ts index bf51b8758c..6a6712ecdb 100644 --- a/packages/expo/src/plugins/last-login-method.ts +++ b/packages/expo/src/plugins/last-login-method.ts @@ -1,4 +1,5 @@ import type { Awaitable, BetterAuthClientPlugin } from "@better-auth/core"; +import { PACKAGE_VERSION } from "../version"; export interface LastLoginMethodClientConfig { storage: { @@ -47,6 +48,7 @@ export const lastLoginMethodClient = (config: LastLoginMethodClientConfig) => { return { id: "last-login-method-expo", + version: PACKAGE_VERSION, fetchPlugins: [ { id: "last-login-method-expo", diff --git a/packages/expo/src/version.ts b/packages/expo/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/expo/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/expo/tsconfig.json b/packages/expo/tsconfig.json index 4e56786698..a382590cad 100644 --- a/packages/expo/tsconfig.json +++ b/packages/expo/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, - "include": ["./src"], + "include": ["./src", "./package.json"], "references": [ { "path": "../core/tsconfig.json" diff --git a/packages/expo/tsconfig.test.json b/packages/expo/tsconfig.test.json index 35746cc03d..067a08f9b9 100644 --- a/packages/expo/tsconfig.test.json +++ b/packages/expo/tsconfig.test.json @@ -5,7 +5,7 @@ "outDir": "${configDir}/node_modules/.cache/ts/test-out", "tsBuildInfoFile": "${configDir}/node_modules/.cache/ts/test-tsbuildinfo" }, - "include": ["./test", "./src"], + "include": ["./test", "./src", "./package.json"], "references": [ { "path": "../better-auth/tsconfig.json" diff --git a/packages/i18n/src/client.ts b/packages/i18n/src/client.ts index 49b735f27d..1b6c468828 100644 --- a/packages/i18n/src/client.ts +++ b/packages/i18n/src/client.ts @@ -1,5 +1,6 @@ import type { BetterAuthClientPlugin } from "@better-auth/core"; import type { i18n } from "."; +import { PACKAGE_VERSION } from "./version"; /** * i18n client plugin for Better Auth @@ -21,6 +22,7 @@ import type { i18n } from "."; export const i18nClient = () => { return { id: "i18n", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts index 3b35d00e77..cb9508b76c 100644 --- a/packages/i18n/src/index.ts +++ b/packages/i18n/src/index.ts @@ -5,6 +5,7 @@ import type { import { APIError, createAuthMiddleware, isAPIError } from "better-auth/api"; import { parseCookies } from "better-auth/cookies"; import type { I18nOptions, LocaleDetectionStrategy } from "./types"; +import { PACKAGE_VERSION } from "./version"; export type { I18nOptions, @@ -151,6 +152,7 @@ export const i18n = ( return { id: "i18n", + version: PACKAGE_VERSION, hooks: { after: [ { diff --git a/packages/i18n/src/version.ts b/packages/i18n/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/i18n/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json index b31385b1db..ce72ad65b0 100644 --- a/packages/i18n/tsconfig.json +++ b/packages/i18n/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../../tsconfig.base.json", + "include": ["./src", "./package.json"], "references": [ { "path": "../core/tsconfig.json" diff --git a/packages/oauth-provider/src/client-resource.ts b/packages/oauth-provider/src/client-resource.ts index 159cbff407..c11e771f6d 100644 --- a/packages/oauth-provider/src/client-resource.ts +++ b/packages/oauth-provider/src/client-resource.ts @@ -7,6 +7,7 @@ import type { JWTPayload, JWTVerifyOptions } from "jose"; import { handleMcpErrors } from "./mcp"; import type { ResourceServerMetadata } from "./types/oauth"; import { getJwtPlugin, getOAuthProviderPlugin } from "./utils"; +import { PACKAGE_VERSION } from "./version"; export const oauthProviderResourceClient = ( auth?: T, @@ -44,6 +45,7 @@ export const oauthProviderResourceClient = ( return { id: "oauth-provider-resource-client", + version: PACKAGE_VERSION, getActions() { return { /** diff --git a/packages/oauth-provider/src/client.ts b/packages/oauth-provider/src/client.ts index ad95e59c2f..71af9c5263 100644 --- a/packages/oauth-provider/src/client.ts +++ b/packages/oauth-provider/src/client.ts @@ -1,6 +1,7 @@ import { safeJSONParse } from "@better-auth/core/utils/json"; import type { BetterAuthClientPlugin } from "better-auth/types"; import type { oauthProvider } from "./oauth"; +import { PACKAGE_VERSION } from "./version"; function parseSignedQuery(search: string) { const params = new URLSearchParams(search); @@ -17,6 +18,7 @@ function parseSignedQuery(search: string) { export const oauthProviderClient = () => { return { id: "oauth-provider-client", + version: PACKAGE_VERSION, fetchPlugins: [ { id: "oauth-provider-signin", diff --git a/packages/oauth-provider/src/oauth.ts b/packages/oauth-provider/src/oauth.ts index b18d9459c6..9724dd85d4 100644 --- a/packages/oauth-provider/src/oauth.ts +++ b/packages/oauth-provider/src/oauth.ts @@ -32,6 +32,7 @@ import { getJwtPlugin, verifyOAuthQueryParams, } from "./utils"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -164,6 +165,7 @@ export const oauthProvider = >(options: O) => { return { id: "oauth-provider", + version: PACKAGE_VERSION, options: opts as NoInfer, init: (ctx) => { // Require session id storage on database (secondary-storage only solution not yet supported) diff --git a/packages/oauth-provider/src/version.ts b/packages/oauth-provider/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/oauth-provider/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/oauth-provider/tsconfig.json b/packages/oauth-provider/tsconfig.json index b61bfac631..f303929e44 100644 --- a/packages/oauth-provider/tsconfig.json +++ b/packages/oauth-provider/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, - "include": ["./src"], + "include": ["./src", "./package.json"], "references": [ { "path": "../better-auth/tsconfig.json" diff --git a/packages/passkey/src/client.ts b/packages/passkey/src/client.ts index e60ffc1652..0eb06ec7d0 100644 --- a/packages/passkey/src/client.ts +++ b/packages/passkey/src/client.ts @@ -25,6 +25,7 @@ import { atom } from "nanostores"; import type { passkey } from "."; import { PASSKEY_ERROR_CODES } from "./error-codes"; import type { Passkey } from "./types"; +import { PACKAGE_VERSION } from "./version"; export const getPasskeyActions = ( $fetch: BetterFetch, @@ -292,6 +293,7 @@ export const passkeyClient = () => { const $listPasskeys = atom(); return { id: "passkey", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, getActions: ($fetch, $store) => getPasskeyActions($fetch, { diff --git a/packages/passkey/src/index.ts b/packages/passkey/src/index.ts index 97d4d3605f..89278bbb8c 100644 --- a/packages/passkey/src/index.ts +++ b/packages/passkey/src/index.ts @@ -12,6 +12,7 @@ import { } from "./routes"; import { schema } from "./schema"; import type { Passkey, PasskeyOptions } from "./types"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -37,6 +38,7 @@ export const passkey = (options?: PasskeyOptions | undefined) => { return { id: "passkey", + version: PACKAGE_VERSION, endpoints: { generatePasskeyRegistrationOptions: generatePasskeyRegistrationOptions( opts, diff --git a/packages/passkey/src/version.ts b/packages/passkey/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/passkey/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/passkey/tsconfig.json b/packages/passkey/tsconfig.json index b61bfac631..f303929e44 100644 --- a/packages/passkey/tsconfig.json +++ b/packages/passkey/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, - "include": ["./src"], + "include": ["./src", "./package.json"], "references": [ { "path": "../better-auth/tsconfig.json" diff --git a/packages/scim/src/client.ts b/packages/scim/src/client.ts index 89c9ad64f8..7a218d2d9b 100644 --- a/packages/scim/src/client.ts +++ b/packages/scim/src/client.ts @@ -1,9 +1,11 @@ import type { BetterAuthClientPlugin } from "better-auth/client"; import type { scim } from "./index"; +import { PACKAGE_VERSION } from "./version"; export const scimClient = () => { return { id: "scim-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType, } satisfies BetterAuthClientPlugin; }; diff --git a/packages/scim/src/index.ts b/packages/scim/src/index.ts index 05bd9f2312..017dc4a369 100644 --- a/packages/scim/src/index.ts +++ b/packages/scim/src/index.ts @@ -18,6 +18,7 @@ import { updateSCIMUser, } from "./routes"; import type { SCIMOptions } from "./types"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -38,6 +39,7 @@ export const scim = (options?: SCIMOptions) => { return { id: "scim", + version: PACKAGE_VERSION, endpoints: { generateSCIMToken: generateSCIMToken(opts), listSCIMProviderConnections: listSCIMProviderConnections(), diff --git a/packages/scim/src/version.ts b/packages/scim/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/scim/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/scim/tsconfig.json b/packages/scim/tsconfig.json index 3ed5a630d4..fb60358fc6 100644 --- a/packages/scim/tsconfig.json +++ b/packages/scim/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../../tsconfig.base.json", + "include": ["./src", "./package.json"], "references": [ { "path": "../better-auth/tsconfig.json" diff --git a/packages/sso/src/client.ts b/packages/sso/src/client.ts index 8e6f3be60e..f2379d9452 100644 --- a/packages/sso/src/client.ts +++ b/packages/sso/src/client.ts @@ -1,5 +1,6 @@ import type { BetterAuthClientPlugin } from "better-auth/client"; import type { SSOPlugin } from "./index"; +import { PACKAGE_VERSION } from "./version"; interface SSOClientOptions { domainVerification?: @@ -14,6 +15,7 @@ export const ssoClient = ( ) => { return { id: "sso-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as SSOPlugin<{ domainVerification: { enabled: CO["domainVerification"] extends { enabled: true } diff --git a/packages/sso/src/index.ts b/packages/sso/src/index.ts index 5510e013d5..4e58b6b868 100644 --- a/packages/sso/src/index.ts +++ b/packages/sso/src/index.ts @@ -48,6 +48,7 @@ export { } from "./saml"; import type { OIDCConfig, SAMLConfig, SSOOptions, SSOProvider } from "./types"; +import { PACKAGE_VERSION } from "./version"; export type { SAMLConfig, OIDCConfig, SSOOptions, SSOProvider }; @@ -113,6 +114,7 @@ type SSOEndpoints = { export type SSOPlugin = { id: "sso"; + version: string; endpoints: SSOEndpoints & (O extends { domainVerification: { enabled: true } } ? DomainVerificationEndpoints @@ -138,6 +140,7 @@ export function sso< options?: O | undefined, ): { id: "sso"; + version: string; endpoints: SSOEndpoints & DomainVerificationEndpoints; schema: NonNullable; options: NoInfer; @@ -146,6 +149,7 @@ export function sso( options?: O | undefined, ): { id: "sso"; + version: string; endpoints: SSOEndpoints; options: NoInfer; }; @@ -185,6 +189,7 @@ export function sso( return { id: "sso", + version: PACKAGE_VERSION, init(ctx) { const existing = ctx.skipOriginCheck; if (existing === true) { diff --git a/packages/sso/src/version.ts b/packages/sso/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/sso/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/sso/tsconfig.json b/packages/sso/tsconfig.json index 998bb6379b..1d58789489 100644 --- a/packages/sso/tsconfig.json +++ b/packages/sso/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../../tsconfig.base.json", + "include": ["./src", "./package.json"], "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] }, diff --git a/packages/stripe/src/client.ts b/packages/stripe/src/client.ts index fdb58ef07b..52d54127f0 100644 --- a/packages/stripe/src/client.ts +++ b/packages/stripe/src/client.ts @@ -1,6 +1,8 @@ import type { BetterAuthClientPlugin } from "better-auth/client"; import { STRIPE_ERROR_CODES } from "./error-codes"; import type { StripePlan, stripe } from "./index"; +import { PACKAGE_VERSION } from "./version"; + export const stripeClient = < O extends { subscription: boolean; @@ -10,6 +12,7 @@ export const stripeClient = < ) => { return { id: "stripe-client", + version: PACKAGE_VERSION, $InferServerPlugin: {} as ReturnType< typeof stripe< O["subscription"] extends true diff --git a/packages/stripe/src/index.ts b/packages/stripe/src/index.ts index c3c10c7f55..67f7cb3096 100644 --- a/packages/stripe/src/index.ts +++ b/packages/stripe/src/index.ts @@ -22,6 +22,7 @@ import type { WithStripeCustomerId, } from "./types"; import { escapeStripeSearchValue, getPlans, isActiveOrTrialing } from "./utils"; +import { PACKAGE_VERSION } from "./version"; declare module "@better-auth/core" { interface BetterAuthPluginRegistry { @@ -45,6 +46,7 @@ export const stripe = (options: O) => { return { id: "stripe", + version: PACKAGE_VERSION, endpoints: { stripeWebhook: stripeWebhook(options), ...((options.subscription?.enabled diff --git a/packages/stripe/src/version.ts b/packages/stripe/src/version.ts new file mode 100644 index 0000000000..cc40657f77 --- /dev/null +++ b/packages/stripe/src/version.ts @@ -0,0 +1,3 @@ +import pkg from "../package.json" with { type: "json" }; + +export const PACKAGE_VERSION = pkg.version; diff --git a/packages/stripe/tsconfig.json b/packages/stripe/tsconfig.json index 998bb6379b..1d58789489 100644 --- a/packages/stripe/tsconfig.json +++ b/packages/stripe/tsconfig.json @@ -1,5 +1,6 @@ { "extends": "../../tsconfig.base.json", + "include": ["./src", "./package.json"], "compilerOptions": { "lib": ["esnext", "dom", "dom.iterable"] },