better-auth (better-call) not found error can not be handle by elysiajs
the not found error:
and can't be handle by elysiajs.onError(), how to fix QQ
2025-06-08T08:19:20.565Z ERROR [Better Auth]: Error 4816 | continue;
4817 | }
4818 | if (endpoint.options?.metadata?.SERVER_ONLY) continue;
4819 | const methods = Array.isArray(endpoint.options?.method) ? endpoint.options.method : [endpoint.options?.method];
4820 | for (const method of methods) {
4821 | addRoute(router, method, endpoint.path, endpoint);
^
error: NOT_FOUND
at <anonymous> (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4821:24)
at processRequest (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4818:50)
at <anonymous> (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4887:8)
2025-06-08T08:19:20.565Z ERROR [Better Auth]: Error 4816 | continue;
4817 | }
4818 | if (endpoint.options?.metadata?.SERVER_ONLY) continue;
4819 | const methods = Array.isArray(endpoint.options?.method) ? endpoint.options.method : [endpoint.options?.method];
4820 | for (const method of methods) {
4821 | addRoute(router, method, endpoint.path, endpoint);
^
error: NOT_FOUND
at <anonymous> (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4821:24)
at processRequest (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4818:50)
at <anonymous> (/Users/scalebear/Downloads/tradingflow/node_modules/better-call/dist/index.js:4887:8)
2 Replies
I think this is a bug. You can work around it with the old way instead of using the mount
const betterAuthView = (context: Context & { request: Request }) => {
const BETTER_AUTH_ACCEPT_METHODS = ["POST", "GET"];
// validate request method
if (BETTER_AUTH_ACCEPT_METHODS.includes(context.request.method)) {
return auth.handler(context.request);
// biome-ignore lint/style/noUselessElse: <explanation>
} else {
context.status(405);
}
};
const betterAuth = new Elysia({ name: "better-auth" })
.all("/auth/*", betterAuthView)
.macro({
auth: {
async resolve({ status, request: { headers } }) {
const session = await auth.api.getSession({
headers
});
if (!session) return status(401);
return {
user: session.user,
session: session.session
};
}
}
});
const betterAuthView = (context: Context & { request: Request }) => {
const BETTER_AUTH_ACCEPT_METHODS = ["POST", "GET"];
// validate request method
if (BETTER_AUTH_ACCEPT_METHODS.includes(context.request.method)) {
return auth.handler(context.request);
// biome-ignore lint/style/noUselessElse: <explanation>
} else {
context.status(405);
}
};
const betterAuth = new Elysia({ name: "better-auth" })
.all("/auth/*", betterAuthView)
.macro({
auth: {
async resolve({ status, request: { headers } }) {
const session = await auth.api.getSession({
headers
});
if (!session) return status(401);
return {
user: session.user,
session: session.session
};
}
}
});
thank you bro !!!