Services: Admin-Lehrer, Backend-Lehrer, Studio v2, Website, Klausur-Service, School-Service, Voice-Service, Geo-Service, BreakPilot Drive, Agent-Core Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
|
|
/**
|
|
* Server-side proxy for Mailpit API
|
|
* Avoids CORS and mixed-content issues by fetching from server
|
|
*/
|
|
|
|
// Use internal Docker hostname when running in container
|
|
const getMailpitHost = (): string => {
|
|
return process.env.BACKEND_URL ? 'mailpit' : 'localhost'
|
|
}
|
|
|
|
export async function GET() {
|
|
const host = getMailpitHost()
|
|
const mailpitUrl = `http://${host}:8025/api/v1/info`
|
|
|
|
try {
|
|
const response = await fetch(mailpitUrl, {
|
|
method: 'GET',
|
|
signal: AbortSignal.timeout(5000),
|
|
})
|
|
|
|
if (!response.ok) {
|
|
return NextResponse.json(
|
|
{ error: 'Mailpit API error', status: response.status },
|
|
{ status: response.status }
|
|
)
|
|
}
|
|
|
|
const data = await response.json()
|
|
|
|
// Transform Mailpit response to our expected format
|
|
return NextResponse.json({
|
|
stats: {
|
|
totalAccounts: 1,
|
|
activeAccounts: 1,
|
|
totalEmails: data.Messages || 0,
|
|
unreadEmails: data.Unread || 0,
|
|
totalTasks: 0,
|
|
pendingTasks: 0,
|
|
overdueTasks: 0,
|
|
aiAnalyzedCount: 0,
|
|
lastSyncTime: new Date().toISOString(),
|
|
},
|
|
accounts: [{
|
|
id: 'mailpit-dev',
|
|
email: 'dev@mailpit.local',
|
|
displayName: 'Mailpit (Development)',
|
|
imapHost: 'mailpit',
|
|
imapPort: 1143,
|
|
smtpHost: 'mailpit',
|
|
smtpPort: 1025,
|
|
status: 'active' as const,
|
|
lastSync: new Date().toISOString(),
|
|
emailCount: data.Messages || 0,
|
|
unreadCount: data.Unread || 0,
|
|
createdAt: new Date().toISOString(),
|
|
}],
|
|
syncStatus: {
|
|
running: false,
|
|
accountsInProgress: [],
|
|
lastCompleted: new Date().toISOString(),
|
|
errors: [],
|
|
},
|
|
mailpitInfo: {
|
|
version: data.Version,
|
|
databaseSize: data.DatabaseSize,
|
|
uptime: data.RuntimeStats?.Uptime,
|
|
}
|
|
})
|
|
} catch (error) {
|
|
console.error('Failed to fetch from Mailpit:', error)
|
|
return NextResponse.json(
|
|
{
|
|
error: 'Failed to connect to Mailpit',
|
|
details: error instanceof Error ? error.message : 'Unknown error'
|
|
},
|
|
{ status: 503 }
|
|
)
|
|
}
|
|
}
|