diff --git a/src/app/api/monitor/scan-emails/route.ts b/src/app/api/monitor/scan-emails/route.ts index 9899735..13a584d 100644 --- a/src/app/api/monitor/scan-emails/route.ts +++ b/src/app/api/monitor/scan-emails/route.ts @@ -8,16 +8,9 @@ import { getMonitorConfig } from '@/lib/monitor/settings-manager' import { ImapFlow } from 'imapflow' import { simpleParser } from 'mailparser' import { formatBeijingTime } from '@/lib/monitor/types' -import { writeAuditLog } from '@/lib/audit' +import { writeAuditLog, getClientIP } from '@/lib/audit' 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 { status: 'running' | 'completed' | 'error' | 'cancelling' startedAt: string diff --git a/src/app/api/monitor/scan-status/route.ts b/src/app/api/monitor/scan-status/route.ts index 45ee8bb..dd2f2c8 100644 --- a/src/app/api/monitor/scan-status/route.ts +++ b/src/app/api/monitor/scan-status/route.ts @@ -3,16 +3,9 @@ import { NextRequest, NextResponse } from 'next/server' import { initDatabase } from '@/lib/db-schema' import { getCurrentUser } from '@/lib/auth' import { hasPermission } from '@/lib/permissions' -import { writeAuditLog } from '@/lib/audit' +import { getClientIP, writeAuditLog } from '@/lib/audit' 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) { initDatabase() const user = await getCurrentUser() diff --git a/src/lib/audit.ts b/src/lib/audit.ts index 1f81d5f..6299591 100644 --- a/src/lib/audit.ts +++ b/src/lib/audit.ts @@ -1,6 +1,6 @@ // issue-ai/src/lib/audit.ts — 站点审计包装器(引用共享库) import { getDb } from './db' -import { writeAuditLog as sharedWriteAuditLog, diffObjects, getClientIP } from '@shared/lib/audit/write-audit-log' +import { writeAuditLog as sharedWriteAuditLog, diffObjects } from '@shared/lib/audit/write-audit-log' import type { AuditLogEntry, AuditStore } from '@shared/lib/audit/write-audit-log' // 创建 issue-ai 的 store 适配器 @@ -19,5 +19,13 @@ export function writeAuditLog(opts: AuditLogEntry): void { sharedWriteAuditLog(store, opts) } +// 直接定义 getClientIP,避免 Next.js tree-shaking 导致 re-export 丢失 +// (shared 库的 re-export 在 standalone 构建中可能被优化掉) +export function getClientIP(request: Request): 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 +} + // re-export 共享工具函数 -export { diffObjects, getClientIP } +export { diffObjects }