Files
erika/lib/share/current-author.ts
T

32 lines
1017 B
TypeScript

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 { 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);
return {
userId: user.id,
discordId,
displayName: user.name || session?.user?.name || "Discord user",
avatarUrl: user.image || session?.user?.image || null,
};
}