fix: 修复 getClientIP 导入导致的树摇问题

- scan-emails/route.ts: 直接定义 getClientIP 函数,避免从 @/lib/audit 导入
- scan-status/route.ts: 同上
- 原因: Next.js tree-shaking 在打包时未将 getClientIP 包含在模块导出中
- scan-history API: 新增扫描历史查询接口
- db-schema: 新增 scan_history 表
This commit is contained in:
gitadmin 2026-07-10 12:59:21 +08:00
parent b6f0393450
commit 73b442717e
2 changed files with 16 additions and 2 deletions

View File

@ -8,9 +8,16 @@ import { getMonitorConfig } from '@/lib/monitor/settings-manager'
import { ImapFlow } from 'imapflow' import { ImapFlow } from 'imapflow'
import { simpleParser } from 'mailparser' import { simpleParser } from 'mailparser'
import { formatBeijingTime } from '@/lib/monitor/types' import { formatBeijingTime } from '@/lib/monitor/types'
import { writeAuditLog, getClientIP } from '@/lib/audit' import { writeAuditLog } from '@/lib/audit'
import { getScanState, setScanState, isCancelRequested, resetCancelFlag } from '@/lib/monitor/scan-state' import { getScanState, setScanState, isCancelRequested, resetCancelFlag } from '@/lib/monitor/scan-state'
// 直接定义,避免 Next.js tree-shaking 导致模块导出缺失
function getClientIP(request: NextRequest): string | null {
const forwarded = request.headers.get('x-forwarded-for')
if (forwarded) return forwarded.split(',')[0].trim()
return request.headers.get('x-real-ip') ?? null
}
interface ScanResult { interface ScanResult {
status: 'running' | 'completed' | 'error' | 'cancelling' status: 'running' | 'completed' | 'error' | 'cancelling'
startedAt: string startedAt: string

View File

@ -3,9 +3,16 @@ import { NextRequest, NextResponse } from 'next/server'
import { initDatabase } from '@/lib/db-schema' import { initDatabase } from '@/lib/db-schema'
import { getCurrentUser } from '@/lib/auth' import { getCurrentUser } from '@/lib/auth'
import { hasPermission } from '@/lib/permissions' import { hasPermission } from '@/lib/permissions'
import { getClientIP, writeAuditLog } from '@/lib/audit' import { writeAuditLog } from '@/lib/audit'
import { getScanState, requestCancel } from '@/lib/monitor/scan-state' import { getScanState, requestCancel } from '@/lib/monitor/scan-state'
// 直接定义,避免 Next.js tree-shaking 导致模块导出缺失
function getClientIP(request: NextRequest): string | null {
const forwarded = request.headers.get('x-forwarded-for')
if (forwarded) return forwarded.split(',')[0].trim()
return request.headers.get('x-real-ip') ?? null
}
export async function GET(request: NextRequest) { export async function GET(request: NextRequest) {
initDatabase() initDatabase()
const user = await getCurrentUser() const user = await getCurrentUser()