| import { NextRequest, NextResponse } from "next/server"; |
| import { sendEmailREST } from "@/lib/gmail/rest-client"; |
| import { normalizeOrigin, getRequestOrigin } from "@/lib/utils"; |
|
|
| export const dynamic = "force-dynamic"; |
| export const maxDuration = 30; |
|
|
| export async function POST(request: NextRequest) { |
| try { |
| const body = await request.json().catch(() => ({})); |
| const clientId = process.env.GMAIL_CLIENT_ID || ""; |
| const clientSecret = process.env.GMAIL_CLIENT_SECRET || ""; |
| const refreshToken = body.refreshToken || request.cookies.get("gmail-refresh-token")?.value || ""; |
|
|
| if (!clientId || !refreshToken) { |
| return NextResponse.json({ error: "Gmail not connected" }, { status: 401 }); |
| } |
|
|
| if (!body.to || !body.subject || !body.body) { |
| return NextResponse.json({ error: "to, subject, and body are required" }, { status: 400 }); |
| } |
|
|
| const redirectUri = `${normalizeOrigin(getRequestOrigin(request))}/api/gmail/callback`; |
| const result = await sendEmailREST( |
| { clientId, clientSecret, redirectUri, refreshToken, emailAddress: "" }, |
| { |
| to: body.to, |
| cc: body.cc, |
| bcc: body.bcc, |
| subject: body.subject, |
| body: body.body, |
| isHtml: body.isHtml, |
| inReplyTo: body.inReplyTo, |
| threadId: body.threadId, |
| } |
| ); |
|
|
| return NextResponse.json({ success: true, ...result }); |
| } catch (e: any) { |
| return NextResponse.json({ error: e.message }, { status: 500 }); |
| } |
| } |
|
|