-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
1.3.10 and later does not work on zod 3 projects #4837
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't workinglockedLocked conversations after being closed for 7 daysLocked conversations after being closed for 7 days
Milestone
Description
Is this suited for github?
- Yes, this is suited for github
To Reproduce
Seeing the issue also mentioned in #4757 (comment)
2025-09-23T03:40:09.339Z ERROR [Better Auth]: [#better-auth]: Couldn't read your auth config. TypeError: z.coerce.boolean(...).meta is not a function
at file:///Users/nadilas/workspace/.../node_modules/better-auth/dist/shared/better-auth.CBY7cUGy.mjs:61:44
const getSessionQuerySchema = z.optional(
z.object({
/**
* If cookie cache is enabled, it will disable the cache
* and fetch the session from the database
*/
>>>> disableCookieCache: z.coerce.boolean().meta({
description: "Disable cookie cache and fetch session from database"
}).optional(),
disableRefresh: z.coerce.boolean().meta({
description: "Disable session refresh. Useful for checking session status, without updating the session"
}).optional()
})
);
This happen when using Zod 3 in the root project for me. I'm not ready to move to Zod 4 yet, but would like to keep up to date with better-auth.
Current vs. Expected behavior
See description
What version of Better Auth are you using?
1.3.10 and later
System info
{
"system": {
"platform": "darwin",
"arch": "arm64",
"version": "Darwin Kernel Version 25.0.0: Mon Aug 25 21:17:51 PDT 2025; root:xnu-12377.1.9~3/RELEASE_ARM64_T6000",
"release": "25.0.0",
"cpuCount": 8,
"cpuModel": "Apple M1 Pro",
"totalMemory": "16.00 GB",
"freeMemory": "0.12 GB"
},
"node": {
"version": "v23.11.0",
"env": "local"
},
"packageManager": {
"name": "npm",
"version": "10.9.2"
},
"frameworks": [
{
"name": "svelte",
"version": "^5.26.3"
},
{
"name": "@sveltejs/kit",
"version": "^2.20.3"
}
],
"databases": [
{
"name": "pg",
"version": "^8.12.0"
}
],
"betterAuth": {
"version": "^1.3.9",
"config": {
"appName": "MangaBaka.dev",
"basePath": "/auth",
"disabledPaths": [
"/admin/ban-user",
"/admin/impersonate-user",
"/admin/list-user-sessions",
"/admin/remove-user",
"/admin/revoke-user-session",
"/admin/revoke-user-sessions",
"/admin/set-user-password",
"/admin/stop-impersonating",
"/admin/unban-user",
"/change-email",
"/change-password",
"/delete-user",
"/delete-user/callback",
"/forget-password",
"/request-password-reset",
"/reset-password",
"/reset-password/:token",
"/send-verification-email",
"/sign-in/email",
"/sign-in/username",
"/sign-up/email",
"/verify-email"
],
"telemetry": {
"enabled": false
},
"socialProviders": {
"discord": {
"enabled": true,
"clientId": "[REDACTED]",
"clientSecret": "[REDACTED]"
},
"google": {
"enabled": true,
"clientId": "[REDACTED]",
"clientSecret": "[REDACTED]"
},
"microsoft": {
"enabled": true,
"clientId": "[REDACTED]",
"clientSecret": "[REDACTED]"
}
},
"baseURL": "http://localhost:5173",
"plugins": [
{
"name": "open-api",
"config": {
"id": "open-api",
"endpoints": {}
}
},
{
"name": "api-key",
"config": {
"id": "api-key",
"$ERROR_CODES": {
"INVALID_METADATA_TYPE": "metadata must be an object or undefined",
"REFILL_AMOUNT_AND_INTERVAL_REQUIRED": "refillAmount is required when refillInterval is provided",
"REFILL_INTERVAL_AND_AMOUNT_REQUIRED": "refillInterval is required when refillAmount is provided",
"USER_BANNED": "User is banned",
"UNAUTHORIZED_SESSION": "Unauthorized or invalid session",
"KEY_NOT_FOUND": "API Key not found",
"KEY_DISABLED": "API Key is disabled",
"KEY_EXPIRED": "API Key has expired",
"USAGE_EXCEEDED": "API Key has reached its usage limit",
"KEY_NOT_RECOVERABLE": "API Key is not recoverable",
"EXPIRES_IN_IS_TOO_SMALL": "The expiresIn is smaller than the predefined minimum value.",
"EXPIRES_IN_IS_TOO_LARGE": "The expiresIn is larger than the predefined maximum value.",
"INVALID_REMAINING": "The remaining count is either too large or too small.",
"INVALID_PREFIX_LENGTH": "The prefix length is either too large or too small.",
"INVALID_NAME_LENGTH": "The name length is either too large or too small.",
"METADATA_DISABLED": "Metadata is disabled.",
"RATE_LIMIT_EXCEEDED": "Rate limit exceeded.",
"NO_VALUES_TO_UPDATE": "No values to update.",
"KEY_DISABLED_EXPIRATION": "Custom key expiration values are disabled.",
"INVALID_API_KEY": "Invalid API key.",
"INVALID_USER_ID_FROM_API_KEY": "The user id from the API key is invalid.",
"INVALID_API_KEY_GETTER_RETURN_TYPE": "API Key getter returned an invalid key type. Expected string.",
"SERVER_ONLY_PROPERTY": "The property you're trying to set can only be set from the server auth instance only.",
"FAILED_TO_UPDATE_API_KEY": "Failed to update API key",
"NAME_REQUIRED": "API Key name is required."
},
"hooks": {
"before": [
{}
]
},
"endpoints": {},
"schema": {
"apikey": {
"fields": {
"name": {
"type": "string",
"required": false,
"input": false
},
"start": {
"type": "string",
"required": false,
"input": false
},
"prefix": {
"type": "string",
"required": false,
"input": false
},
"key": {
"type": "string",
"required": true,
"input": false
},
"userId": {
"type": "string",
"references": {
"model": "user",
"field": "id"
},
"required": true,
"input": false
},
"refillInterval": {
"type": "number",
"required": false,
"input": false
},
"refillAmount": {
"type": "number",
"required": false,
"input": false
},
"lastRefillAt": {
"type": "date",
"required": false,
"input": false
},
"enabled": {
"type": "boolean",
"required": false,
"input": false,
"defaultValue": true
},
"rateLimitEnabled": {
"type": "boolean",
"required": false,
"input": false,
"defaultValue": true
},
"rateLimitTimeWindow": {
"type": "number",
"required": false,
"input": false,
"defaultValue": 86400000
},
"rateLimitMax": {
"type": "number",
"required": false,
"input": false,
"defaultValue": 10
},
"requestCount": {
"type": "number",
"required": false,
"input": false,
"defaultValue": 0
},
"remaining": {
"type": "number",
"required": false,
"input": false
},
"lastRequest": {
"type": "date",
"required": false,
"input": false
},
"expiresAt": {
"type": "date",
"required": false,
"input": false
},
"createdAt": {
"type": "date",
"required": true,
"input": false
},
"updatedAt": {
"type": "date",
"required": true,
"input": false
},
"permissions": {
"type": "string",
"required": false,
"input": false
},
"metadata": {
"type": "string",
"required": false,
"input": true,
"transform": {}
}
},
"modelName": "auth_api_keys"
}
}
}
},
{
"name": "username",
"config": {
"id": "username",
"endpoints": {},
"schema": {
"user": {
"fields": {
"username": {
"type": "string",
"required": false,
"sortable": true,
"unique": true,
"returned": true,
"transform": {}
},
"displayUsername": {
"type": "string",
"required": false,
"transform": {}
}
}
}
},
"hooks": {
"before": [
{},
{}
]
},
"$ERROR_CODES": {
"INVALID_USERNAME_OR_PASSWORD": "[REDACTED]",
"EMAIL_NOT_VERIFIED": "Email not verified",
"UNEXPECTED_ERROR": "Unexpected error",
"USERNAME_IS_ALREADY_TAKEN": "Username is already taken. Please try another.",
"USERNAME_TOO_SHORT": "Username is too short",
"USERNAME_TOO_LONG": "Username is too long",
"INVALID_USERNAME": "Username is invalid",
"INVALID_DISPLAY_USERNAME": "Display username is invalid"
}
}
},
{
"name": "admin",
"config": {
"id": "admin",
"hooks": {
"after": [
{}
]
},
"endpoints": {},
"$ERROR_CODES": {
"FAILED_TO_CREATE_USER": "Failed to create user",
"USER_ALREADY_EXISTS": "User already exists. Use another email.",
"YOU_CANNOT_BAN_YOURSELF": "You cannot ban yourself",
"YOU_ARE_NOT_ALLOWED_TO_CHANGE_USERS_ROLE": "You are not allowed to change users role",
"YOU_ARE_NOT_ALLOWED_TO_CREATE_USERS": "You are not allowed to create users",
"YOU_ARE_NOT_ALLOWED_TO_LIST_USERS": "You are not allowed to list users",
"YOU_ARE_NOT_ALLOWED_TO_LIST_USERS_SESSIONS": "You are not allowed to list users sessions",
"YOU_ARE_NOT_ALLOWED_TO_BAN_USERS": "You are not allowed to ban users",
"YOU_ARE_NOT_ALLOWED_TO_IMPERSONATE_USERS": "You are not allowed to impersonate users",
"YOU_ARE_NOT_ALLOWED_TO_REVOKE_USERS_SESSIONS": "You are not allowed to revoke users sessions",
"YOU_ARE_NOT_ALLOWED_TO_DELETE_USERS": "You are not allowed to delete users",
"YOU_ARE_NOT_ALLOWED_TO_SET_USERS_PASSWORD": "[REDACTED]",
"BANNED_USER": "You have been banned from this application",
"YOU_ARE_NOT_ALLOWED_TO_GET_USER": "You are not allowed to get user",
"NO_DATA_TO_UPDATE": "No data to update",
"YOU_ARE_NOT_ALLOWED_TO_UPDATE_USERS": "You are not allowed to update users",
"YOU_CANNOT_REMOVE_YOURSELF": "You cannot remove yourself"
},
"schema": {
"user": {
"fields": {
"role": {
"type": "string",
"required": false,
"input": false
},
"banned": {
"type": "boolean",
"defaultValue": false,
"required": false,
"input": false
},
"banReason": {
"type": "string",
"required": false,
"input": false
},
"banExpires": {
"type": "date",
"required": false,
"input": false
}
}
},
"session": {
"fields": {
"impersonatedBy": {
"type": "string",
"required": false
}
}
}
},
"options": {
"defaultRole": "user",
"ac": {
"statements": {
"series": [
"mod",
"create",
"update",
"delete",
"merge",
"unmerge"
],
"apps": [
"mod"
],
"user": [
"create",
"list",
"set-role",
"ban",
"impersonate",
"delete",
"set-password",
"get",
"update"
],
"session": [
"list",
"revoke",
"delete"
]
}
},
"roles": {
"user": {
"statements": {
"series": []
}
},
"moderator": {
"statements": {
"series": [
"mod",
"create",
"update",
"delete",
"merge",
"unmerge"
]
}
},
"admin": {
"statements": {
"series": [
"mod",
"create",
"update",
"delete",
"merge",
"unmerge"
],
"apps": [
"mod"
],
"user": [
"create",
"list",
"set-role",
"ban",
"impersonate",
"delete",
"set-password",
"get",
"update"
],
"session": [
"list",
"revoke",
"delete"
]
}
}
}
}
}
},
{
"name": "generic-oauth",
"config": {
"id": "generic-oauth",
"endpoints": {},
"$ERROR_CODES": {
"INVALID_OAUTH_CONFIGURATION": "Invalid OAuth configuration"
}
}
},
{
"name": "oidc",
"config": {
"id": "oidc",
"hooks": {
"after": [
{}
]
},
"endpoints": {},
"schema": {
"oauthApplication": {
"modelName": "auth_oauth_applications",
"fields": {
"name": {
"type": "string"
},
"icon": {
"type": "string",
"required": false
},
"metadata": {
"type": "string",
"required": false
},
"clientId": {
"type": "string",
"unique": true
},
"clientSecret": {
"type": "string",
"required": false
},
"redirectURLs": {
"type": "string"
},
"type": {
"type": "string"
},
"disabled": {
"type": "boolean",
"required": false,
"defaultValue": false
},
"userId": {
"type": "string",
"required": false,
"references": {
"model": "user",
"field": "id",
"onDelete": "cascade"
}
},
"createdAt": {
"type": "date"
},
"updatedAt": {
"type": "date"
}
}
},
"oauthAccessToken": {
"modelName": "auth_oauth_access_tokens",
"fields": {
"accessToken": {
"type": "string",
"unique": true
},
"refreshToken": {
"type": "string",
"unique": true
},
"accessTokenExpiresAt": {
"type": "date"
},
"refreshTokenExpiresAt": {
"type": "date"
},
"clientId": {
"type": "string",
"references": {
"model": "oauthApplication",
"field": "clientId",
"onDelete": "cascade"
}
},
"userId": {
"type": "string",
"required": false,
"references": {
"model": "user",
"field": "id",
"onDelete": "cascade"
}
},
"scopes": {
"type": "string"
},
"createdAt": {
"type": "date"
},
"updatedAt": {
"type": "date"
}
}
},
"oauthConsent": {
"modelName": "auth_oauth_consents",
"fields": {
"clientId": {
"type": "string",
"references": {
"model": "oauthApplication",
"field": "clientId",
"onDelete": "cascade"
}
},
"userId": {
"type": "string",
"references": {
"model": "user",
"field": "id",
"onDelete": "cascade"
}
},
"scopes": {
"type": "string"
},
"createdAt": {
"type": "date"
},
"updatedAt": {
"type": "date"
},
"consentGiven": {
"type": "boolean"
}
}
}
}
}
},
{
"name": "last-login-method",
"config": {
"id": "last-login-method",
"hooks": {
"after": [
{}
]
}
}
}
],
"user": {
"modelName": "auth_users"
},
"session": {
"modelName": "auth_sessions",
"cookieCache": {
"enabled": true,
"maxAge": 300
}
},
"account": {
"modelName": "auth_accounts",
"accountLinking": {
"enabled": true,
"trustedProviders": [
"discord",
"anilist",
"google",
"microsoft"
],
"allowDifferentEmails": true
}
},
"verification": {
"modelName": "auth_verification"
},
"rateLimit": {
"enabled": false
},
"database": {
"_events": {},
"_eventsCount": 0,
"options": {
"host": "192.168.5.116",
"user": "mangabaka",
"database": "mangabaka",
"keepAlive": true,
"max": 10,
"min": 0,
"maxUses": null,
"allowExitOnIdle": false,
"maxLifetimeSeconds": 0,
"idleTimeoutMillis": 10000
},
"_clients": [],
"_idle": [],
"_expired": {},
"_pendingQueue": [],
"ending": false,
"ended": false
}
}
}
}Which area(s) are affected? (Select all that apply)
Backend
Auth config (if applicable)
N/AAdditional context
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workinglockedLocked conversations after being closed for 7 daysLocked conversations after being closed for 7 days