import "server-only"; import { eq } from "drizzle-orm"; import { getServerSession } from "next-auth"; import { db } from "@/db"; import { users } from "@/db/schema"; import type { SessionWithDiscord } from "@/lib/auth/auth"; import { authOptions } from "@/lib/auth/auth-options"; import { getDiscordMemberProfile } from "@/lib/discord/discord"; import { ShareHttpError } from "@/lib/share/http-error"; import { requireShareSessionIdentity } from "@/lib/share/session"; export async function requireShareAuthor() { const session = await getServerSession(authOptions); const { discordId, userId } = requireShareSessionIdentity( session as SessionWithDiscord | null, ); const [user] = await db .select({ id: users.id, name: users.name, image: users.image }) .from(users) .where(eq(users.id, userId)) .limit(1); if (!user) throw new ShareHttpError("Unauthorized", 401); const profile = await getDiscordMemberProfile(discordId); return { userId: user.id, discordId, displayName: profile?.globalName?.trim() || profile?.username || user.name || session?.user?.name || "Discord user", avatarUrl: profile?.avatarUrl || user.image || session?.user?.image || null, }; }