module.exports = [ "[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js")); module.exports = mod; }), "[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api")); module.exports = mod; }), "[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js")); module.exports = mod; }), "[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js")); module.exports = mod; }), "[project]/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try { __turbopack_context__.s([ "default", ()=>__TURBOPACK__default__export__, "prisma", ()=>prisma ]); // /opt/erp-system/lib/prisma.ts var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f40$prisma$2f$client$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs, [project]/node_modules/@prisma/client)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@prisma/adapter-pg/dist/index.mjs [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__ = __turbopack_context__.i("[externals]/pg [external] (pg, esm_import, [project]/node_modules/pg)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; // Verhindert zu viele offene Verbindungen beim Hot-Reloading in Next.js const globalForPrisma = /*TURBOPACK member replacement*/ __turbopack_context__.g; const pool = new __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__["Pool"]({ connectionString: process.env.DATABASE_URL }); const adapter = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PrismaPg"](pool); const prisma = globalForPrisma.prisma || new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f40$prisma$2f$client$29$__["PrismaClient"]({ adapter }); if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma; const __TURBOPACK__default__export__ = prisma; __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), "[externals]/tls [external] (tls, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("tls", () => require("tls")); module.exports = mod; }), "[externals]/net [external] (net, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("net", () => require("net")); module.exports = mod; }), "[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("crypto", () => require("crypto")); module.exports = mod; }), "[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("events", () => require("events")); module.exports = mod; }), "[externals]/node:buffer [external] (node:buffer, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("node:buffer", () => require("node:buffer")); module.exports = mod; }), "[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("buffer", () => require("buffer")); module.exports = mod; }), "[externals]/string_decoder [external] (string_decoder, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("string_decoder", () => require("string_decoder")); module.exports = mod; }), "[externals]/stream [external] (stream, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("stream", () => require("stream")); module.exports = mod; }), "[externals]/node:stream [external] (node:stream, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("node:stream", () => require("node:stream")); module.exports = mod; }), "[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("zlib", () => require("zlib")); module.exports = mod; }), "[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("path", () => require("path")); module.exports = mod; }), "[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("url", () => require("url")); module.exports = mod; }), "[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("util", () => require("util")); module.exports = mod; }), "[externals]/dns [external] (dns, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("dns", () => require("dns")); module.exports = mod; }), "[project]/app/api/cron/imap/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try { __turbopack_context__.s([ "GET", ()=>GET, "dynamic", ()=>dynamic ]); // /opt/erp-system/app/api/cron/imap/route.ts var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/server.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/prisma.ts [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$imapflow$2f$lib$2f$imap$2d$flow$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/imapflow/lib/imap-flow.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$mailparser$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/mailparser/index.js [app-route] (ecmascript)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; ; const dynamic = 'force-dynamic'; async function GET() { try { // 1. Settings laden const settings = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].systemSettings.findFirst({ where: { id: 1 } }); if (!settings || !settings.imapHost || !settings.imapUser || !settings.imapPass) { return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'IMAP Zugangsdaten fehlen.' }, { status: 400 }); } // 2. Verbindung herstellen const client = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$imapflow$2f$lib$2f$imap$2d$flow$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ImapFlow"]({ host: settings.imapHost, port: settings.imapPort, secure: settings.imapPort === 993, auth: { user: settings.imapUser, pass: settings.imapPass }, logger: false // Verhindert Spam im Terminal }); await client.connect(); // Lock auf den Posteingang setzen, damit keine Mails übersprungen werden let lock = await client.getMailboxLock('INBOX'); let processedCounter = 0; try { // 3. Nach ungelesenen E-Mails suchen for await (let message of client.fetch({ seen: false }, { source: true, uid: true })){ // E-Mail Source-Code in lesbaren Text übersetzen const parsed = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$mailparser$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["simpleParser"])(message.source); const fromEmail = parsed.from?.value[0]?.address; const fromName = parsed.from?.value[0]?.name || 'Unbekannt'; const subject = parsed.subject || 'Kein Betreff'; // Wir nehmen den Text-Teil der Mail. Wenn nur HTML da ist, nehmen wir das als Fallback. const textContent = parsed.text || parsed.textAsHtml || '(Kein Inhalt)'; if (!fromEmail) continue; // 4. Kunden prüfen oder anlegen let customer = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].customer.findUnique({ where: { email: fromEmail } }); if (!customer) { customer = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].customer.create({ data: { email: fromEmail, firstName: fromName, lastName: '(Auto-Erfasst)', companyName: 'Aus E-Mail Anfrage' } }); } // 5. Zuweisung: Neues Ticket oder Antwort? const ticketMatch = subject.match(/Ticket #(\d+)/i); let ticketId = ticketMatch ? parseInt(ticketMatch[1]) : null; let existingTicket = null; if (ticketId) { existingTicket = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].ticket.findUnique({ where: { id: ticketId } }); } if (existingTicket) { // Antwort an den Chatverlauf anhängen await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].ticketMessage.create({ data: { content: textContent, isFromCustomer: true, ticketId: existingTicket.id } }); // Ticket aufwecken, falls es schon gelöst war if (existingTicket.status !== 'OPEN' && existingTicket.status !== 'IN_PROGRESS') { await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].ticket.update({ where: { id: existingTicket.id }, data: { status: 'OPEN' } }); } } else { // Komplett neues Ticket aufmachen await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].ticket.create({ data: { title: subject, description: textContent, customerId: customer.id, status: 'OPEN' } }); } // 6. E-Mail als gelesen markieren, damit sie beim nächsten Mal ignoriert wird await client.messageFlagsAdd(message.uid, [ '\\Seen' ], { uid: true }); processedCounter++; } } finally{ // Postfach wieder freigeben lock.release(); } await client.logout(); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ success: true, processedTickets: processedCounter }); } catch (error) { console.error('IMAP Error:', error); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Verbindungs- oder Verarbeitungsfehler', details: error.message }, { status: 500 }); } } __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__0psau92._.js.map