module.exports = [ "[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; }), "[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "default", ()=>__TURBOPACK__default__export__ ]); const API_BASE_URL = '/api'; // --- API CLIENT --- const api = { async request (endpoint, options = {}) { const url = `${API_BASE_URL}${endpoint}`; const headers = { 'Content-Type': 'application/json', ...options.headers }; const response = await fetch(url, { ...options, headers, credentials: 'include' }); if (!response.ok) { let errorMsg = `Error ${response.status}: ${response.statusText}`; try { const errorJson = await response.json(); console.error("API Error JSON:", errorJson); if (errorJson.error) errorMsg = errorJson.error; if (errorJson.message) errorMsg = errorJson.message; } catch { // Ignore json parse error } throw new Error(errorMsg); } if (response.status === 204) return null; return response.json(); }, // --- AUTH ENDPOINTS --- auth: { async getSession () { try { return await api.request('/auth/get-session'); } catch { return null; } }, async signIn (email, password) { return api.request('/auth/sign-in/email', { method: 'POST', body: JSON.stringify({ email, password }) }); }, async signUp (email, password, name) { return api.request('/auth/sign-up/email', { method: 'POST', body: JSON.stringify({ email, password, name }) }); }, async signOut () { return api.request('/auth/sign-out', { method: 'POST' }); } }, // --- DATA ENDPOINTS --- data: { async list (table) { const res = await api.request(`/data/read/${table}`); return res.data || []; }, async get (table, id) { const res = await api.request(`/data/read/${table}/${id}`); return res.data; }, async create (table, data) { return api.request(`/data/create/${table}`, { method: 'POST', body: JSON.stringify(data) }); }, async update (table, id, data) { return api.request(`/data/update/${table}/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, async delete (table, id) { return api.request(`/data/delete/${table}/${id}`, { method: 'DELETE' }); }, async getFullProject (projectId) { const project = await this.get('projects', projectId); const [chapters, entities, ideas] = await Promise.all([ api.request(`/data/chapters/list?project_id=${projectId}`), api.request(`/data/entities/list?project_id=${projectId}`), api.request(`/data/ideas/list?project_id=${projectId}`) ]); return { ...project, chapters: chapters || [], entities: entities || [], ideas: ideas || [] }; } }, // --- AI ENDPOINTS (server-side via API routes) --- ai: { async generate (project, chapterId, prompt, user) { return api.request('/ai/generate', { method: 'POST', body: JSON.stringify({ project, chapterId, prompt, user }) }); }, async transform (text, mode, context, user) { const res = await api.request('/ai/transform', { method: 'POST', body: JSON.stringify({ text, mode, context, user }) }); return res.text; } } }; const __TURBOPACK__default__export__ = api; }), "[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-ssr] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "useAuth", ()=>useAuth ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-ssr] (ecmascript)"); 'use client'; ; ; const useAuth = ()=>{ const [user, setUser] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(true); // Check session on mount (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ const checkSession = async ()=>{ try { const session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession(); if (session && session.user) { setUser({ id: session.user.id, email: session.user.email, name: session.user.name || 'User', subscription: { plan: 'free', startDate: Date.now(), status: 'active' }, usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 }, preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' }, stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 } }); } } catch (err) { console.error('Session check failed', err); } finally{ setLoading(false); } }; checkSession(); }, []); const login = async (email, pass)=>{ setLoading(true); try { await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signIn(email, pass); const session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession(); if (session?.user) { setUser({ id: session.user.id, email: session.user.email, name: session.user.name || 'User', subscription: { plan: 'free', startDate: Date.now(), status: 'active' }, usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 }, preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' }, stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 } }); } } catch (err) { console.error('Login failed', err); throw err; } finally{ setLoading(false); } }; const signup = async (email, pass, name)=>{ setLoading(true); try { await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signUp(email, pass, name); let session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession(); if (!session?.user) { await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signIn(email, pass); session = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.getSession(); } if (session?.user) { setUser({ id: session.user.id, email: session.user.email, name: session.user.name || name, subscription: { plan: 'free', startDate: Date.now(), status: 'active' }, usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 }, preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' }, stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 } }); } } catch (err) { console.error('Signup failed', err); throw err; } finally{ setLoading(false); } }; const logout = async ()=>{ try { await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].auth.signOut(); } catch (err) { console.error('Logout failed', err); } finally{ setUser(null); } }; const incrementUsage = ()=>{ if (user) { setUser({ ...user, usage: { ...user.usage, aiActionsCurrent: user.usage.aiActionsCurrent + 1 } }); } }; return { user, login, signup, logout, incrementUsage, loading }; }; }), "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "AuthProvider", ()=>AuthProvider, "useAuthContext", ()=>useAuthContext ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useAuth$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-ssr] (ecmascript)"); 'use client'; ; ; ; const AuthContext = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContext"])(null); const AuthProvider = ({ children })=>{ const auth = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useAuth$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useAuth"])(); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(AuthContext.Provider, { value: auth, children: children }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx", lineNumber: 10, columnNumber: 12 }, ("TURBOPACK compile-time value", void 0)); }; function useAuthContext() { return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useContext"])(AuthContext); } }), "[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; else { if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; else { if ("TURBOPACK compile-time truthy", 1) { if ("TURBOPACK compile-time truthy", 1) { module.exports = __turbopack_context__.r("[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)"); } else //TURBOPACK unreachable ; } else //TURBOPACK unreachable ; } } //# sourceMappingURL=module.compiled.js.map }), "[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; module.exports = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)").vendored['react-ssr'].ReactJsxDevRuntime; //# sourceMappingURL=react-jsx-dev-runtime.js.map }), "[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; module.exports = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)").vendored['react-ssr'].React; //# sourceMappingURL=react.js.map }), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__410fd4fe._.js.map