fix: wrap entire invite POST handler in top-level try-catch
Catches errors from the circle_members SELECT query and auth that were escaping the narrower try-catch and returning empty 500s. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3d7ff9adb5
commit
21f88459d7
1 changed files with 19 additions and 19 deletions
|
|
@ -8,26 +8,26 @@ export async function POST(
|
||||||
_req: Request,
|
_req: Request,
|
||||||
{ params }: { params: Promise<{ id: string }> }
|
{ params }: { params: Promise<{ id: string }> }
|
||||||
) {
|
) {
|
||||||
const auth = await requireFamily();
|
|
||||||
if (!auth.success) return NextResponse.json({ error: auth.error }, { status: auth.status });
|
|
||||||
|
|
||||||
const familyId = auth.session!.familyId!;
|
|
||||||
const { id: circleId } = await params;
|
|
||||||
|
|
||||||
// Only admins can create invites
|
|
||||||
const rows = await sql.unsafe(
|
|
||||||
`SELECT role FROM circle_members WHERE circle_id = $1 AND family_id = $2`,
|
|
||||||
[circleId, familyId]
|
|
||||||
);
|
|
||||||
if (!rows[0] || rows[0].role !== "admin") {
|
|
||||||
return NextResponse.json({ error: "Only circle admins can create invites" }, { status: 403 });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cryptographically random 32-byte token (64 hex chars) — unguessable
|
|
||||||
const token = randomBytes(32).toString("hex");
|
|
||||||
const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const auth = await requireFamily();
|
||||||
|
if (!auth.success) return NextResponse.json({ error: auth.error }, { status: auth.status });
|
||||||
|
|
||||||
|
const familyId = auth.session!.familyId!;
|
||||||
|
const { id: circleId } = await params;
|
||||||
|
|
||||||
|
// Only admins can create invites
|
||||||
|
const rows = await sql.unsafe(
|
||||||
|
`SELECT role FROM circle_members WHERE circle_id = $1 AND family_id = $2`,
|
||||||
|
[circleId, familyId]
|
||||||
|
);
|
||||||
|
if (!rows[0] || rows[0].role !== "admin") {
|
||||||
|
return NextResponse.json({ error: "Only circle admins can create invites" }, { status: 403 });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cryptographically random 32-byte token (64 hex chars) — unguessable
|
||||||
|
const token = randomBytes(32).toString("hex");
|
||||||
|
const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days
|
||||||
|
|
||||||
const [invite] = await sql.unsafe(
|
const [invite] = await sql.unsafe(
|
||||||
`INSERT INTO circle_invites (circle_id, token, created_by, expires_at)
|
`INSERT INTO circle_invites (circle_id, token, created_by, expires_at)
|
||||||
VALUES ($1, $2, $3, $4)
|
VALUES ($1, $2, $3, $4)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue