371 lines
20 KiB
JavaScript
371 lines
20 KiB
JavaScript
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;
|
|
}),
|
|
"[externals]/fs/promises [external] (fs/promises, cjs)", ((__turbopack_context__, module, exports) => {
|
|
|
|
const mod = __turbopack_context__.x("fs/promises", () => require("fs/promises"));
|
|
|
|
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__imported__module__$5b$externals$5d2f$fs$2f$promises__$5b$external$5d$__$28$fs$2f$promises$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/fs/promises [external] (fs/promises, cjs)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/path [external] (path, cjs)");
|
|
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';
|
|
const UPLOAD_DIR = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["join"])(process.cwd(), 'uploads');
|
|
async function GET() {
|
|
try {
|
|
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
|
|
});
|
|
}
|
|
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
|
|
});
|
|
await client.connect();
|
|
let lock = await client.getMailboxLock('INBOX');
|
|
let processedCounter = 0;
|
|
try {
|
|
for await (let message of client.fetch({
|
|
seen: false
|
|
}, {
|
|
source: true,
|
|
uid: true
|
|
})){
|
|
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';
|
|
const textContent = parsed.text || parsed.textAsHtml || '(Kein Inhalt)';
|
|
if (!fromEmail) continue;
|
|
// 1. Kunden-Matching (Haupt-Email, alternative E-Mails oder Mitarbeiter)
|
|
let targetCustomerId = null;
|
|
const directCustomer = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].customer.findFirst({
|
|
where: {
|
|
OR: [
|
|
{
|
|
email: fromEmail
|
|
},
|
|
{
|
|
additionalEmails: {
|
|
has: fromEmail
|
|
}
|
|
}
|
|
]
|
|
}
|
|
});
|
|
if (directCustomer) {
|
|
targetCustomerId = directCustomer.id;
|
|
} else {
|
|
const contact = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].customerContact.findFirst({
|
|
where: {
|
|
email: fromEmail
|
|
}
|
|
});
|
|
if (contact) {
|
|
targetCustomerId = contact.customerId;
|
|
}
|
|
}
|
|
// Falls komplett unbekannt, neuen Kunden anlegen
|
|
if (!targetCustomerId) {
|
|
const newCustomer = 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'
|
|
}
|
|
});
|
|
targetCustomerId = newCustomer.id;
|
|
}
|
|
// 2. Ticket Zuordnung
|
|
const ticketMatch = subject.match(/Ticket #(\d+)/i);
|
|
let ticketId = ticketMatch ? parseInt(ticketMatch[1]) : null;
|
|
let activeTicketId = null;
|
|
if (ticketId) {
|
|
const 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) {
|
|
activeTicketId = existingTicket.id;
|
|
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
|
|
}
|
|
});
|
|
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'
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (!activeTicketId) {
|
|
const newTicket = 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: targetCustomerId,
|
|
status: 'OPEN'
|
|
}
|
|
});
|
|
activeTicketId = newTicket.id;
|
|
}
|
|
// 3. Dateianhänge verarbeiten
|
|
if (parsed.attachments && parsed.attachments.length > 0) {
|
|
for (const att of parsed.attachments){
|
|
// Buffer in Datei schreiben
|
|
const safeOriginalName = (att.filename || 'unbekannt.dat').replace(/[^a-zA-Z0-9.-]/g, '_');
|
|
const savedName = `${Date.now()}-${safeOriginalName}`;
|
|
const filepath = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["join"])(UPLOAD_DIR, savedName);
|
|
await (0, __TURBOPACK__imported__module__$5b$externals$5d2f$fs$2f$promises__$5b$external$5d$__$28$fs$2f$promises$2c$__cjs$29$__["writeFile"])(filepath, att.content);
|
|
// DB Eintrag
|
|
await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].attachment.create({
|
|
data: {
|
|
fileName: att.filename || 'unbekannt.dat',
|
|
savedName: savedName,
|
|
fileSize: att.size || 0,
|
|
fileType: att.contentType || 'application/octet-stream',
|
|
ticketId: activeTicketId
|
|
}
|
|
});
|
|
}
|
|
}
|
|
await client.messageFlagsAdd(message.uid, [
|
|
'\\Seen'
|
|
], {
|
|
uid: true
|
|
});
|
|
processedCounter++;
|
|
}
|
|
} finally{
|
|
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: 'Verarbeitungsfehler',
|
|
details: error.message
|
|
}, {
|
|
status: 500
|
|
});
|
|
}
|
|
}
|
|
__turbopack_async_result__();
|
|
} catch(e) { __turbopack_async_result__(e); } }, false);}),
|
|
];
|
|
|
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0kdieq3._.js.map
|