/home/techb158/balavpn.abdallabala.com/src/app/api/auth/invite
NameSizeModeActions
route.js17340644editdlrm
Edit: /home/techb158/balavpn.abdallabala.com/src/app/api/auth/invite/route.js (1734B)
const { prisma } = require("../../../../lib/prisma"); const { randomToken, sha256 } = require("../../../../lib/crypto"); const { requireOrganizationActor } = require("../../../../lib/request-context"); const { jsonResponse, errorResponse, parseJson } = require("../../../../lib/http"); const { sendInviteEmail } = require("../../../../lib/email"); export async function POST(request) { try { const body = await parseJson(request); const organizationId = body.organizationId; const { actor } = await requireOrganizationActor(request, organizationId, "organization:manage"); const token = randomToken(); const existingUser = await prisma.user.findUnique({ where: { email: body.email }, select: { platformRole: true } }); if (existingUser && existingUser.platformRole !== "NONE") { return jsonResponse({ error: "Cannot invite platform administrators" }, 403); } const invitation = await prisma.invitation.create({ data: { organizationId, email: body.email, roleCode: body.roleCode || "viewer", tokenHash: sha256(token, process.env.COSMIC_INVITE_SECRET), expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 24 * 7), invitedById: actor.id } }); const org = await prisma.organization.findUnique({ where: { id: organizationId }, select: { name: true } }); const inviteLink = `${process.env.NEXT_PUBLIC_APP_URL || ''}/accept-invite?token=${token}`; sendInviteEmail({ email: body.email, inviteLink, invitedByName: actor.displayName || 'Someone', organizationName: org?.name || 'the organization' }).catch(() => {}); return jsonResponse({ invitation, token }, 201); } catch (error) { return errorResponse(error); } }