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; }), "[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("crypto", () => require("crypto")); module.exports = mod; }), "[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/action-async-storage.external.js", () => require("next/dist/server/app-render/action-async-storage.external.js")); module.exports = mod; }), "[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "auth", ()=>auth, "handlers", ()=>handlers, "signIn", ()=>signIn, "signOut", ()=>signOut ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/index.js [app-route] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/providers/credentials.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/bcryptjs/index.js [app-route] (ecmascript)"); ; ; ; const { handlers, signIn, signOut, auth } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__["default"])({ providers: [ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({ name: 'credentials', credentials: { email: { label: 'Email', type: 'email' }, password: { label: 'Password', type: 'password' } }, async authorize (credentials) { if (!credentials?.email || !credentials?.password) return null; // Lazy import to avoid PrismaClient initialization during build const { default: getDB } = await __turbopack_context__.A("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript, async loader)"); const prisma = getDB(); const user = await prisma.user.findUnique({ where: { email: credentials.email } }); if (!user) return null; const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.hashedPassword); if (!isValid) return null; return { id: user.id, email: user.email, name: user.name }; } }) ], session: { strategy: 'jwt' }, callbacks: { async jwt ({ token, user }) { if (user) { token.id = user.id; } return token; }, async session ({ session, token }) { if (session.user && token.id) { session.user.id = token.id; } return session; } }, pages: { signIn: '/' } }); }), "[project]/Documents/00 - projet/plumeia/src/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__, "getDB", ()=>getDB ]); var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs, [project]/Documents/00 - projet/plumeia/node_modules/@prisma/client)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$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]/Documents/00 - projet/plumeia/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$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__ = __turbopack_context__.i("[externals]/pg [external] (pg, esm_import, [project]/Documents/00 - projet/plumeia/node_modules/pg)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$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$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$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$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; const globalForPrisma = globalThis; function getDB() { if (!globalForPrisma.prisma) { const connectionString = process.env.DATABASE_URL; const pool = new __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$pg$29$__["Pool"]({ connectionString }); const adapter = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PrismaPg"](pool); 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$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$prisma$2f$client$29$__["PrismaClient"]({ adapter }); } return globalForPrisma.prisma; } const __TURBOPACK__default__export__ = getDB; __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), "[externals]/child_process [external] (child_process, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("child_process", () => require("child_process")); module.exports = mod; }), "[externals]/fs [external] (fs, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("fs", () => require("fs")); module.exports = mod; }), "[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("https", () => require("https")); module.exports = mod; }), "[externals]/stream [external] (stream, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("stream", () => require("stream")); module.exports = mod; }), "[externals]/os [external] (os, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("os", () => require("os")); module.exports = mod; }), "[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("events", () => require("events")); module.exports = mod; }), "[externals]/process [external] (process, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("process", () => require("process")); module.exports = mod; }), "[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("util", () => require("util")); module.exports = mod; }), "[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("path", () => require("path")); module.exports = mod; }), "[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("querystring", () => require("querystring")); module.exports = mod; }), "[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("buffer", () => require("buffer")); 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; }), "[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]/node:stream/promises [external] (node:stream/promises, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("node:stream/promises", () => require("node:stream/promises")); module.exports = mod; }), "[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("http", () => require("http")); module.exports = mod; }), "[externals]/net [external] (net, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("net", () => require("net")); module.exports = mod; }), "[externals]/tls [external] (tls, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("tls", () => require("tls")); module.exports = mod; }), "[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("url", () => require("url")); module.exports = mod; }), "[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("zlib", () => require("zlib")); module.exports = mod; }), "[project]/Documents/00 - projet/plumeia/src/lib/gemini.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "analyzeStyle", ()=>analyzeStyle, "generateStoryContent", ()=>generateStoryContent, "summarizeText", ()=>summarizeText, "transformTextServer", ()=>transformTextServer ]); // Server-only: Gemini AI service // This file is only imported by API routes, never by client code var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@google/genai/dist/node/index.mjs [app-route] (ecmascript)"); ; const truncate = (str, length)=>{ if (!str) return ""; return str.length > length ? str.substring(0, length) + "..." : str; }; const checkUsage = (user)=>{ if (user.subscription.plan === 'master') return true; return user.usage.aiActionsCurrent < user.usage.aiActionsLimit; }; const buildContextPrompt = (project, currentChapterId, instruction)=>{ const currentChapterIndex = project.chapters.findIndex((c)=>c.id === currentChapterId); const previousSummaries = project.chapters.slice(0, currentChapterIndex).map((c, i)=>`Chapitre ${i + 1} (${c.title}): ${c.summary || truncate(c.content.replace(/<[^>]*>?/gm, ''), 200)}`).join('\n'); const entitiesContext = project.entities.map((e)=>{ const base = `[${e.type}] ${e.name}: ${truncate(e.description, 150)}`; const context = e.storyContext ? `\n - VÉCU/ÉVOLUTION DANS L'HISTOIRE: ${truncate(e.storyContext, 500)}` : ''; return base + context; }).join('\n'); const ideasContext = (project.ideas || []).map((i)=>{ const statusMap = { todo: 'À FAIRE', progress: 'EN COURS', done: 'TERMINÉ' }; return `[IDÉE - ${statusMap[i.status]}] ${i.title}: ${truncate(i.description, 100)}`; }).join('\n'); const currentContent = project.chapters[currentChapterIndex]?.content.replace(/<[^>]*>?/gm, '') || ""; const s = project.settings; const settingsPrompt = s ? ` PARAMÈTRES DU ROMAN: - Genre: ${s.genre} ${s.subGenre ? `(${s.subGenre})` : ''} - Public: ${s.targetAudience} - Ton: ${s.tone} - Narration: ${s.pov} - Temps: ${s.tense} - Thèmes: ${s.themes} - Synopsis Global: ${truncate(s.synopsis || '', 500)} ` : ""; return ` Tu es un assistant éditorial expert et un co-auteur créatif. L'utilisateur écrit un livre intitulé "${project.title}". ${settingsPrompt} CONTEXTE DE L'HISTOIRE (Résumé des chapitres précédents): ${previousSummaries || "Aucun chapitre précédent."} BIBLE DU MONDE (Personnages et Lieux): ${entitiesContext || "Aucune fiche créée."} BOÎTE À IDÉES & NOTES (Pistes de l'auteur): ${ideasContext || "Aucune note."} CHAPITRE ACTUEL (Texte brut): ${truncate(currentContent, 3000)} STYLE D'ÉCRITURE SPÉCIFIQUE (Instruction de l'auteur): ${project.styleGuide || "Standard, neutre."} TA MISSION: ${instruction} `; }; const generateStoryContent = async (project, currentChapterId, userPrompt, user)=>{ if (!checkUsage(user)) { return { text: "Limite d'actions IA atteinte pour ce mois. Passez au plan Pro !", type: 'reflection' }; } try { const ai = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["GoogleGenAI"]({ apiKey: process.env.GEMINI_API_KEY }); const finalPrompt = buildContextPrompt(project, currentChapterId, userPrompt); const modelName = user.subscription.plan === 'master' ? 'gemini-3-pro-preview' : 'gemini-3-flash-preview'; const response = await ai.models.generateContent({ model: modelName, contents: finalPrompt, config: { temperature: 0.7, responseMimeType: "application/json", responseSchema: { type: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Type"].OBJECT, properties: { responseType: { type: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Type"].STRING, enum: [ "draft", "reflection" ] }, content: { type: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Type"].STRING } } } } }); const result = JSON.parse(response.text || "{}"); return { text: result.content || "Erreur de génération.", type: result.responseType || "reflection" }; } catch (error) { console.error("AI Generation Error:", error); return { text: "Erreur lors de la communication avec l'IA.", type: 'reflection' }; } }; const transformTextServer = async (text, mode, context, user)=>{ if (!checkUsage(user)) return "Limite d'actions IA atteinte."; try { const ai = new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$google$2f$genai$2f$dist$2f$node$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["GoogleGenAI"]({ apiKey: process.env.GEMINI_API_KEY }); const prompt = `Action: ${mode}. Texte: ${text}. Contexte: ${truncate(context, 1000)}. Renvoie juste le texte transformé.`; const response = await ai.models.generateContent({ model: 'gemini-3-flash-preview', contents: prompt }); return response.text?.trim() || text; } catch { return text; } }; const analyzeStyle = async (_text)=>"Style analysé"; const summarizeText = async (_text)=>"Résumé généré"; }), "[project]/Documents/00 - projet/plumeia/src/app/api/ai/generate/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([ "POST", ()=>POST, "dynamic", ()=>dynamic ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/server.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/auth.ts [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/prisma.ts [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$gemini$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/gemini.ts [app-route] (ecmascript)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$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 POST(request) { try { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["auth"])(); if (!session?.user?.id) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Non autorisé' }, { status: 401 }); } const prisma = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])(); // Check AI usage limit from DB const dbUser = await prisma.user.findUnique({ where: { id: session.user.id }, include: { subscriptionPlan: true } }); // Bypass Prisma client types for this relation if (!dbUser) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Utilisateur non trouvé' }, { status: 404 }); } const limit = dbUser.subscriptionPlan?.maxAiActions ?? 100; const planName = dbUser.subscriptionPlan?.displayName || 'Gratuit'; if (limit !== -1 && dbUser.aiActionsUsed >= limit) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: `Limite de ${limit} actions IA atteinte pour le plan ${planName}. Passez au plan supérieur !` }, { status: 403 }); } const body = await request.json(); const { project, chapterId, prompt, user } = body; if (!project || !prompt || !user) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Missing required fields: project, prompt, user' }, { status: 400 }); } // Pass real plan from DB to gemini for model selection const userWithPlan = { ...user, subscription: { ...user.subscription, plan: dbUser.plan } }; const result = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$gemini$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["generateStoryContent"])(project, chapterId || '', prompt, userWithPlan); // Increment usage in DB await prisma.user.update({ where: { id: session.user.id }, data: { aiActionsUsed: { increment: 1 } } }); return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ ...result, aiActionsUsed: dbUser.aiActionsUsed + 1 }); } catch (error) { console.error('AI generate error:', error); return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'AI generation failed' }, { status: 500 }); } } __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__630db118._.js.map