- Added remote image patterns to the Next.js configuration for enhanced image handling. - Updated TypeScript configuration to exclude the 'implement' directory. - Refactored layout component to fetch initial authentication token and pass it to Providers. - Replaced CanvasToolbar with CanvasSidebar for improved UI layout and functionality. - Enhanced Canvas component with new drag-and-drop file upload capabilities and batch node movement. - Updated various node components to support new status handling and improved user interactions. - Added debounced saving for note and prompt nodes to optimize performance.
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { QueryCtx, MutationCtx } from "./_generated/server";
|
|
import { authComponent } from "./auth";
|
|
|
|
type SafeAuthUser = NonNullable<
|
|
Awaited<ReturnType<typeof authComponent.safeGetAuthUser>>
|
|
>;
|
|
|
|
/** Better-Auth-User mit für die App garantierter userId (Convex-_id als Fallback). */
|
|
export type AuthUser = Omit<SafeAuthUser, "userId"> & { userId: string };
|
|
|
|
/**
|
|
* Erfordert einen authentifizierten User und gibt dessen userId zurück.
|
|
* Wirft einen Error wenn nicht eingeloggt — für Mutations und geschützte Queries.
|
|
*/
|
|
export async function requireAuth(
|
|
ctx: QueryCtx | MutationCtx
|
|
): Promise<AuthUser> {
|
|
const user = await authComponent.safeGetAuthUser(ctx);
|
|
if (!user) {
|
|
console.error("[requireAuth] safeGetAuthUser returned null");
|
|
throw new Error("Unauthenticated");
|
|
}
|
|
const userId = user.userId ?? String(user._id);
|
|
if (!userId) {
|
|
console.error("[requireAuth] safeGetAuthUser returned user without userId", {
|
|
userRecordId: String(user._id),
|
|
});
|
|
throw new Error("Unauthenticated");
|
|
}
|
|
return { ...user, userId };
|
|
}
|
|
|
|
/**
|
|
* Gibt den User zurück oder null — für optionale Auth-Checks (z.B. public Queries).
|
|
*/
|
|
export async function optionalAuth(ctx: QueryCtx | MutationCtx) {
|
|
return await authComponent.safeGetAuthUser(ctx);
|
|
}
|