(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([typeof document === "object" ? document.currentScript : undefined, "[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-client] (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 }); if (!response.ok) { let errorMsg = `Error ${response.status}: ${response.statusText}`; try { const errorJson = await response.json(); 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 --- auth: { async register (email, password, name) { return api.request('/auth/register', { method: 'POST', body: JSON.stringify({ email, password, name }) }); } }, // --- PROJECTS --- projects: { async list () { return api.request('/projects'); }, async get (id) { return api.request(`/projects/${id}`); }, async create (data) { return api.request('/projects', { method: 'POST', body: JSON.stringify(data) }); }, async update (id, data) { return api.request(`/projects/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, async delete (id) { return api.request(`/projects/${id}`, { method: 'DELETE' }); }, async syncWorkflow (id, data) { return api.request(`/projects/${id}/workflow`, { method: 'PUT', body: JSON.stringify(data) }); } }, // --- CHAPTERS --- chapters: { async create (data) { return api.request('/chapters', { method: 'POST', body: JSON.stringify(data) }); }, async update (id, data) { return api.request(`/chapters/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, async delete (id) { return api.request(`/chapters/${id}`, { method: 'DELETE' }); } }, // --- ENTITIES --- entities: { async create (data) { return api.request('/entities', { method: 'POST', body: JSON.stringify(data) }); }, async update (id, data) { return api.request(`/entities/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, async delete (id) { return api.request(`/entities/${id}`, { method: 'DELETE' }); } }, // --- IDEAS --- ideas: { async create (data) { return api.request('/ideas', { method: 'POST', body: JSON.stringify(data) }); }, async update (id, data) { return api.request(`/ideas/${id}`, { method: 'PUT', body: JSON.stringify(data) }); }, async delete (id) { return api.request(`/ideas/${id}`, { method: 'DELETE' }); } }, // --- AI (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; if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client] (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$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/react.js [app-client] (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$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/api.ts [app-client] (ecmascript)"); var _s = __turbopack_context__.k.signature(); 'use client'; ; ; ; const useAuth = ()=>{ _s(); const { data: session, status } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])(); 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$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const loading = status === 'loading'; // Sync session to UserProfile (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "useAuth.useEffect": ()=>{ 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 } }); } else if (status === 'unauthenticated') { setUser(null); } } }["useAuth.useEffect"], [ session, status ]); const login = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "useAuth.useCallback[login]": async (email, password)=>{ const result = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["signIn"])('credentials', { email, password, redirect: false }); if (result?.error) { throw new Error(result.error === 'CredentialsSignin' ? 'Email ou mot de passe incorrect' : result.error); } } }["useAuth.useCallback[login]"], []); const signup = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "useAuth.useCallback[signup]": async (email, password, name)=>{ // 1. Register via API 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$client$5d$__$28$ecmascript$29$__["default"].auth.register(email, password, name); // 2. Auto-login const result = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["signIn"])('credentials', { email, password, redirect: false }); if (result?.error) { throw new Error('Compte créé mais erreur de connexion automatique'); } } }["useAuth.useCallback[signup]"], []); const logout = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "useAuth.useCallback[logout]": async ()=>{ await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["signOut"])({ redirect: false }); setUser(null); } }["useAuth.useCallback[logout]"], []); const incrementUsage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "useAuth.useCallback[incrementUsage]": ()=>{ if (user) { setUser({ ...user, usage: { ...user.usage, aiActionsCurrent: user.usage.aiActionsCurrent + 1 } }); } } }["useAuth.useCallback[incrementUsage]"], [ user ]); return { user, login, signup, logout, incrementUsage, loading }; }; _s(useAuth, "NTps7lD2LRTcy9ISlNr85D5h8IY=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"] ]; }); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx [app-client] (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$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/react.js [app-client] (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$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(); '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$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createContext"])(null); function AuthInner({ children }) { _s(); 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$client$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$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$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: 11, columnNumber: 12 }, this); } _s(AuthInner, "YuJWYXaKIY31b1y7U6yy3IXSxQA=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useAuth$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAuth"] ]; }); _c = AuthInner; const AuthProvider = ({ children })=>{ return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["SessionProvider"], { children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(AuthInner, { children: children }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx", lineNumber: 17, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx", lineNumber: 16, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)); }; _c1 = AuthProvider; function useAuthContext() { _s1(); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useContext"])(AuthContext); } _s1(useAuthContext, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); var _c, _c1; __turbopack_context__.k.register(_c, "AuthInner"); __turbopack_context__.k.register(_c1, "AuthProvider"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); /** * @license React * react-jsx-dev-runtime.development.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ "use strict"; "production" !== ("TURBOPACK compile-time value", "development") && function() { function getComponentNameFromType(type) { if (null == type) return null; if ("function" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; if ("string" === typeof type) return type; switch(type){ case REACT_FRAGMENT_TYPE: return "Fragment"; case REACT_PROFILER_TYPE: return "Profiler"; case REACT_STRICT_MODE_TYPE: return "StrictMode"; case REACT_SUSPENSE_TYPE: return "Suspense"; case REACT_SUSPENSE_LIST_TYPE: return "SuspenseList"; case REACT_ACTIVITY_TYPE: return "Activity"; case REACT_VIEW_TRANSITION_TYPE: return "ViewTransition"; } if ("object" === typeof type) switch("number" === typeof type.tag && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof){ case REACT_PORTAL_TYPE: return "Portal"; case REACT_CONTEXT_TYPE: return type.displayName || "Context"; case REACT_CONSUMER_TYPE: return (type._context.displayName || "Context") + ".Consumer"; case REACT_FORWARD_REF_TYPE: var innerType = type.render; type = type.displayName; type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); return type; case REACT_MEMO_TYPE: return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; case REACT_LAZY_TYPE: innerType = type._payload; type = type._init; try { return getComponentNameFromType(type(innerType)); } catch (x) {} } return null; } function testStringCoercion(value) { return "" + value; } function checkKeyStringCoercion(value) { try { testStringCoercion(value); var JSCompiler_inline_result = !1; } catch (e) { JSCompiler_inline_result = !0; } if (JSCompiler_inline_result) { JSCompiler_inline_result = console; var JSCompiler_temp_const = JSCompiler_inline_result.error; var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0); return testStringCoercion(value); } } function getTaskName(type) { if (type === REACT_FRAGMENT_TYPE) return "<>"; if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE) return "<...>"; try { var name = getComponentNameFromType(type); return name ? "<" + name + ">" : "<...>"; } catch (x) { return "<...>"; } } function getOwner() { var dispatcher = ReactSharedInternals.A; return null === dispatcher ? null : dispatcher.getOwner(); } function UnknownOwner() { return Error("react-stack-top-frame"); } function hasValidKey(config) { if (hasOwnProperty.call(config, "key")) { var getter = Object.getOwnPropertyDescriptor(config, "key").get; if (getter && getter.isReactWarning) return !1; } return void 0 !== config.key; } function defineKeyPropWarningGetter(props, displayName) { function warnAboutAccessingKey() { specialPropKeyWarningShown || (specialPropKeyWarningShown = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName)); } warnAboutAccessingKey.isReactWarning = !0; Object.defineProperty(props, "key", { get: warnAboutAccessingKey, configurable: !0 }); } function elementRefGetterWithDeprecationWarning() { var componentName = getComponentNameFromType(this.type); didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")); componentName = this.props.ref; return void 0 !== componentName ? componentName : null; } function ReactElement(type, key, props, owner, debugStack, debugTask) { var refProp = props.ref; type = { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key, props: props, _owner: owner }; null !== (void 0 !== refProp ? refProp : null) ? Object.defineProperty(type, "ref", { enumerable: !1, get: elementRefGetterWithDeprecationWarning }) : Object.defineProperty(type, "ref", { enumerable: !1, value: null }); type._store = {}; Object.defineProperty(type._store, "validated", { configurable: !1, enumerable: !1, writable: !0, value: 0 }); Object.defineProperty(type, "_debugInfo", { configurable: !1, enumerable: !1, writable: !0, value: null }); Object.defineProperty(type, "_debugStack", { configurable: !1, enumerable: !1, writable: !0, value: debugStack }); Object.defineProperty(type, "_debugTask", { configurable: !1, enumerable: !1, writable: !0, value: debugTask }); Object.freeze && (Object.freeze(type.props), Object.freeze(type)); return type; } function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) { var children = config.children; if (void 0 !== children) if (isStaticChildren) if (isArrayImpl(children)) { for(isStaticChildren = 0; isStaticChildren < children.length; isStaticChildren++)validateChildKeys(children[isStaticChildren]); Object.freeze && Object.freeze(children); } else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."); else validateChildKeys(children); if (hasOwnProperty.call(config, "key")) { children = getComponentNameFromType(type); var keys = Object.keys(config).filter(function(k) { return "key" !== k; }); isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}"; didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = !0); } children = null; void 0 !== maybeKey && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey); hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key); if ("key" in config) { maybeKey = {}; for(var propName in config)"key" !== propName && (maybeKey[propName] = config[propName]); } else maybeKey = config; children && defineKeyPropWarningGetter(maybeKey, "function" === typeof type ? type.displayName || type.name || "Unknown" : type); return ReactElement(type, children, maybeKey, getOwner(), debugStack, debugTask); } function validateChildKeys(node) { isValidElement(node) ? node._store && (node._store.validated = 1) : "object" === typeof node && null !== node && node.$$typeof === REACT_LAZY_TYPE && ("fulfilled" === node._payload.status ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1)); } function isValidElement(object) { return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; } var React = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"), REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() { return null; }; React = { react_stack_bottom_frame: function(callStackForError) { return callStackForError(); } }; var specialPropKeyWarningShown; var didWarnAboutElementRef = {}; var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(React, UnknownOwner)(); var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); var didWarnAboutKeySpread = {}; exports.Fragment = REACT_FRAGMENT_TYPE; exports.jsxDEV = function(type, config, maybeKey, isStaticChildren) { var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; if (trackActualOwner) { var previousStackTraceLimit = Error.stackTraceLimit; Error.stackTraceLimit = 10; var debugStackDEV = Error("react-stack-top-frame"); Error.stackTraceLimit = previousStackTraceLimit; } else debugStackDEV = unknownOwnerDebugStack; return jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStackDEV, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask); }; }(); }), "[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => { "use strict"; var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); 'use strict'; if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable ; else { module.exports = __turbopack_context__.r("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js [app-client] (ecmascript)"); } }), "[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/errors.js [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; /** * Base error class for all Auth.js errors. * It's optimized to be printed in the server logs in a nicely formatted way * via the [`logger.error`](https://authjs.dev/reference/core#logger) option. * @noInheritDoc */ __turbopack_context__.s([ "AccessDenied", ()=>AccessDenied, "AccountNotLinked", ()=>AccountNotLinked, "AdapterError", ()=>AdapterError, "AuthError", ()=>AuthError, "CallbackRouteError", ()=>CallbackRouteError, "CredentialsSignin", ()=>CredentialsSignin, "DuplicateConditionalUI", ()=>DuplicateConditionalUI, "EmailSignInError", ()=>EmailSignInError, "ErrorPageLoop", ()=>ErrorPageLoop, "EventError", ()=>EventError, "ExperimentalFeatureNotEnabled", ()=>ExperimentalFeatureNotEnabled, "InvalidCallbackUrl", ()=>InvalidCallbackUrl, "InvalidCheck", ()=>InvalidCheck, "InvalidEndpoints", ()=>InvalidEndpoints, "InvalidProvider", ()=>InvalidProvider, "JWTSessionError", ()=>JWTSessionError, "MissingAdapter", ()=>MissingAdapter, "MissingAdapterMethods", ()=>MissingAdapterMethods, "MissingAuthorize", ()=>MissingAuthorize, "MissingCSRF", ()=>MissingCSRF, "MissingSecret", ()=>MissingSecret, "MissingWebAuthnAutocomplete", ()=>MissingWebAuthnAutocomplete, "OAuthAccountNotLinked", ()=>OAuthAccountNotLinked, "OAuthCallbackError", ()=>OAuthCallbackError, "OAuthProfileParseError", ()=>OAuthProfileParseError, "OAuthSignInError", ()=>OAuthSignInError, "SessionTokenError", ()=>SessionTokenError, "SignInError", ()=>SignInError, "SignOutError", ()=>SignOutError, "UnknownAction", ()=>UnknownAction, "UnsupportedStrategy", ()=>UnsupportedStrategy, "UntrustedHost", ()=>UntrustedHost, "Verification", ()=>Verification, "WebAuthnVerificationError", ()=>WebAuthnVerificationError, "isClientError", ()=>isClientError ]); class AuthError extends Error { /** @internal */ constructor(message, errorOptions){ if (message instanceof Error) { super(undefined, { cause: { err: message, ...message.cause, ...errorOptions } }); } else if (typeof message === "string") { if (errorOptions instanceof Error) { errorOptions = { err: errorOptions, ...errorOptions.cause }; } super(message, errorOptions); } else { super(undefined, message); } this.name = this.constructor.name; // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841 this.type = this.constructor.type ?? "AuthError"; // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841 this.kind = this.constructor.kind ?? "error"; Error.captureStackTrace?.(this, this.constructor); const url = `https://errors.authjs.dev#${this.type.toLowerCase()}`; this.message += `${this.message ? ". " : ""}Read more at ${url}`; } } class SignInError extends AuthError { } /** @internal */ SignInError.kind = "signIn"; class AdapterError extends AuthError { } AdapterError.type = "AdapterError"; class AccessDenied extends AuthError { } AccessDenied.type = "AccessDenied"; class CallbackRouteError extends AuthError { } CallbackRouteError.type = "CallbackRouteError"; class ErrorPageLoop extends AuthError { } ErrorPageLoop.type = "ErrorPageLoop"; class EventError extends AuthError { } EventError.type = "EventError"; class InvalidCallbackUrl extends AuthError { } InvalidCallbackUrl.type = "InvalidCallbackUrl"; class CredentialsSignin extends SignInError { constructor(){ super(...arguments); /** * The error code that is set in the `code` query parameter of the redirect URL. * * * ⚠ NOTE: This property is going to be included in the URL, so make sure it does not hint at sensitive errors. * * The full error is always logged on the server, if you need to debug. * * Generally, we don't recommend hinting specifically if the user had either a wrong username or password specifically, * try rather something like "Invalid credentials". */ this.code = "credentials"; } } CredentialsSignin.type = "CredentialsSignin"; class InvalidEndpoints extends AuthError { } InvalidEndpoints.type = "InvalidEndpoints"; class InvalidCheck extends AuthError { } InvalidCheck.type = "InvalidCheck"; class JWTSessionError extends AuthError { } JWTSessionError.type = "JWTSessionError"; class MissingAdapter extends AuthError { } MissingAdapter.type = "MissingAdapter"; class MissingAdapterMethods extends AuthError { } MissingAdapterMethods.type = "MissingAdapterMethods"; class MissingAuthorize extends AuthError { } MissingAuthorize.type = "MissingAuthorize"; class MissingSecret extends AuthError { } MissingSecret.type = "MissingSecret"; class OAuthAccountNotLinked extends SignInError { } OAuthAccountNotLinked.type = "OAuthAccountNotLinked"; class OAuthCallbackError extends SignInError { } OAuthCallbackError.type = "OAuthCallbackError"; class OAuthProfileParseError extends AuthError { } OAuthProfileParseError.type = "OAuthProfileParseError"; class SessionTokenError extends AuthError { } SessionTokenError.type = "SessionTokenError"; class OAuthSignInError extends SignInError { } OAuthSignInError.type = "OAuthSignInError"; class EmailSignInError extends SignInError { } EmailSignInError.type = "EmailSignInError"; class SignOutError extends AuthError { } SignOutError.type = "SignOutError"; class UnknownAction extends AuthError { } UnknownAction.type = "UnknownAction"; class UnsupportedStrategy extends AuthError { } UnsupportedStrategy.type = "UnsupportedStrategy"; class InvalidProvider extends AuthError { } InvalidProvider.type = "InvalidProvider"; class UntrustedHost extends AuthError { } UntrustedHost.type = "UntrustedHost"; class Verification extends AuthError { } Verification.type = "Verification"; class MissingCSRF extends SignInError { } MissingCSRF.type = "MissingCSRF"; const clientErrors = new Set([ "CredentialsSignin", "OAuthAccountNotLinked", "OAuthCallbackError", "AccessDenied", "Verification", "MissingCSRF", "AccountNotLinked", "WebAuthnVerificationError" ]); function isClientError(error) { if (error instanceof AuthError) return clientErrors.has(error.type); return false; } class DuplicateConditionalUI extends AuthError { } DuplicateConditionalUI.type = "DuplicateConditionalUI"; class MissingWebAuthnAutocomplete extends AuthError { } MissingWebAuthnAutocomplete.type = "MissingWebAuthnAutocomplete"; class WebAuthnVerificationError extends AuthError { } WebAuthnVerificationError.type = "WebAuthnVerificationError"; class AccountNotLinked extends SignInError { } AccountNotLinked.type = "AccountNotLinked"; class ExperimentalFeatureNotEnabled extends AuthError { } ExperimentalFeatureNotEnabled.type = "ExperimentalFeatureNotEnabled"; }), "[project]/Documents/00 - projet/plumeia/node_modules/next-auth/lib/client.js [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "ClientSessionError", ()=>ClientSessionError, "apiBaseUrl", ()=>apiBaseUrl, "fetchData", ()=>fetchData, "now", ()=>now, "parseUrl", ()=>parseUrl, "useOnline", ()=>useOnline ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$errors$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/@auth/core/errors.js [app-client] (ecmascript)"); "use client"; ; ; /** @todo */ class ClientFetchError extends __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$errors$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["AuthError"] { } class ClientSessionError extends __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f40$auth$2f$core$2f$errors$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["AuthError"] { } async function fetchData(path, __NEXTAUTH, logger, req = {}) { const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`; try { const options = { headers: { "Content-Type": "application/json", ...req?.headers?.cookie ? { cookie: req.headers.cookie } : {} } }; if (req?.body) { options.body = JSON.stringify(req.body); options.method = "POST"; } const res = await fetch(url, options); const data = await res.json(); if (!res.ok) throw data; return data; } catch (error) { logger.error(new ClientFetchError(error.message, error)); return null; } } function apiBaseUrl(__NEXTAUTH) { if (typeof window === "undefined") { // Return absolute path when called server side return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`; } // Return relative path when called client side return __NEXTAUTH.basePath; } function useOnline() { const [isOnline, setIsOnline] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"](typeof navigator !== "undefined" ? navigator.onLine : false); const setOnline = ()=>setIsOnline(true); const setOffline = ()=>setIsOnline(false); __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "useOnline.useEffect": ()=>{ window.addEventListener("online", setOnline); window.addEventListener("offline", setOffline); return ({ "useOnline.useEffect": ()=>{ window.removeEventListener("online", setOnline); window.removeEventListener("offline", setOffline); } })["useOnline.useEffect"]; } }["useOnline.useEffect"], []); return isOnline; } function now() { return Math.floor(Date.now() / 1000); } function parseUrl(url) { const defaultUrl = new URL("http://localhost:3000/api/auth"); if (url && !url.startsWith("http")) { url = `https://${url}`; } const _url = new URL(url || defaultUrl); const path = (_url.pathname === "/" ? defaultUrl.pathname : _url.pathname)// Remove trailing slash .replace(/\/$/, ""); const base = `${_url.origin}${path}`; return { origin: _url.origin, host: _url.host, path, base, toString: ()=>base }; } }), "[project]/Documents/00 - projet/plumeia/node_modules/next-auth/react.js [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "SessionContext", ()=>SessionContext, "SessionProvider", ()=>SessionProvider, "__NEXTAUTH", ()=>__NEXTAUTH, "getCsrfToken", ()=>getCsrfToken, "getProviders", ()=>getProviders, "getSession", ()=>getSession, "signIn", ()=>signIn, "signOut", ()=>signOut, "useSession", ()=>useSession ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next-auth/lib/client.js [app-client] (ecmascript)"); /** * * NextAuth.js is the official integration of Auth.js for Next.js applications. It supports both * [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the * [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React * Context provider to wrap your application and make session data available anywhere. * * For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods) * * @module react */ "use client"; ; ; ; const __NEXTAUTH = { baseUrl: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["parseUrl"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL ?? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.VERCEL_URL).origin, basePath: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["parseUrl"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL).path, baseUrlServer: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["parseUrl"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL_INTERNAL ?? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL ?? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.VERCEL_URL).origin, basePathServer: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["parseUrl"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL_INTERNAL ?? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXTAUTH_URL).path, _lastSync: 0, _session: undefined, _getSession: ()=>{} }; // https://github.com/nextauthjs/next-auth/pull/10762 let broadcastChannel = null; function getNewBroadcastChannel() { if (typeof BroadcastChannel === "undefined") { return { postMessage: ()=>{}, addEventListener: ()=>{}, removeEventListener: ()=>{}, name: "next-auth", onmessage: null, onmessageerror: null, close: ()=>{}, dispatchEvent: ()=>false }; } return new BroadcastChannel("next-auth"); } function broadcast() { if (broadcastChannel === null) { broadcastChannel = getNewBroadcastChannel(); } return broadcastChannel; } // TODO: const logger = { debug: console.debug, error: console.error, warn: console.warn }; const SessionContext = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createContext"]?.(undefined); function useSession(options) { if (!SessionContext) { throw new Error("React Context is unavailable in Server Components"); } // @ts-expect-error Satisfy TS if branch on line below const value = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useContext"](SessionContext); if (!value && ("TURBOPACK compile-time value", "development") !== "production") { throw new Error("[next-auth]: `useSession` must be wrapped in a "); } const { required, onUnauthenticated } = options ?? {}; const requiredAndNotLoading = required && value.status === "unauthenticated"; __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "useSession.useEffect": ()=>{ if (requiredAndNotLoading) { const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({ error: "SessionRequired", callbackUrl: window.location.href })}`; if (onUnauthenticated) onUnauthenticated(); else window.location.href = url; } } }["useSession.useEffect"], [ requiredAndNotLoading, onUnauthenticated ]); if (requiredAndNotLoading) { return { data: value.data, update: value.update, status: "loading" }; } return value; } async function getSession(params) { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchData"])("session", __NEXTAUTH, logger, params); if (params?.broadcast ?? true) { // https://github.com/nextauthjs/next-auth/pull/11470 getNewBroadcastChannel().postMessage({ event: "session", data: { trigger: "getSession" } }); } return session; } async function getCsrfToken() { const response = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchData"])("csrf", __NEXTAUTH, logger); return response?.csrfToken ?? ""; } async function getProviders() { return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchData"])("providers", __NEXTAUTH, logger); } async function signIn(provider, options, authorizationParams) { const { callbackUrl, ...rest } = options ?? {}; const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest; const baseUrl = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiBaseUrl"])(__NEXTAUTH); const providers = await getProviders(); if (!providers) { const url = `${baseUrl}/error`; window.location.href = url; return; // TODO: Return error if `redirect: false` } if (!provider || !providers[provider]) { const url = `${baseUrl}/signin?${new URLSearchParams({ callbackUrl: redirectTo })}`; window.location.href = url; return; // TODO: Return error if `redirect: false` } const providerType = providers[provider].type; if (providerType === "webauthn") { // TODO: Add docs link with explanation throw new TypeError([ `Provider id "${provider}" refers to a WebAuthn provider.`, 'Please use `import { signIn } from "next-auth/webauthn"` instead.' ].join("\n")); } const signInUrl = `${baseUrl}/${providerType === "credentials" ? "callback" : "signin"}/${provider}`; const csrfToken = await getCsrfToken(); const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", "X-Auth-Return-Redirect": "1" }, body: new URLSearchParams({ ...signInParams, csrfToken, callbackUrl: redirectTo }) }); const data = await res.json(); if (redirect) { const url = data.url ?? redirectTo; window.location.href = url; // If url contains a hash, the browser does not reload the page. We reload manually if (url.includes("#")) window.location.reload(); return; } const error = new URL(data.url).searchParams.get("error") ?? undefined; const code = new URL(data.url).searchParams.get("code") ?? undefined; if (res.ok) { await __NEXTAUTH._getSession({ event: "storage" }); } return { error, code, status: res.status, ok: res.ok, url: error ? null : data.url }; } async function signOut(options) { const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href } = options ?? {}; const baseUrl = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiBaseUrl"])(__NEXTAUTH); const csrfToken = await getCsrfToken(); const res = await fetch(`${baseUrl}/signout`, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", "X-Auth-Return-Redirect": "1" }, body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }) }); const data = await res.json(); broadcast().postMessage({ event: "session", data: { trigger: "signout" } }); if (redirect) { const url = data.url ?? redirectTo; window.location.href = url; // If url contains a hash, the browser does not reload the page. We reload manually if (url.includes("#")) window.location.reload(); return; } await __NEXTAUTH._getSession({ event: "storage" }); return data; } function SessionProvider(props) { if (!SessionContext) { throw new Error("React Context is unavailable in Server Components"); } const { children, basePath, refetchInterval, refetchWhenOffline } = props; if (basePath) __NEXTAUTH.basePath = basePath; /** * If session was `null`, there was an attempt to fetch it, * but it failed, but we still treat it as a valid initial value. */ const hasInitialSession = props.session !== undefined; /** If session was passed, initialize as already synced */ __NEXTAUTH._lastSync = hasInitialSession ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["now"])() : 0; const [session, setSession] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"]({ "SessionProvider.useState": ()=>{ if (hasInitialSession) __NEXTAUTH._session = props.session; return props.session; } }["SessionProvider.useState"]); /** If session was passed, initialize as not loading */ const [loading, setLoading] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"](!hasInitialSession); __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "SessionProvider.useEffect": ()=>{ __NEXTAUTH._getSession = ({ "SessionProvider.useEffect": async ({ event } = {})=>{ try { const storageEvent = event === "storage"; // We should always update if we don't have a client session yet // or if there are events from other tabs/windows if (storageEvent || __NEXTAUTH._session === undefined) { __NEXTAUTH._lastSync = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["now"])(); __NEXTAUTH._session = await getSession({ broadcast: !storageEvent }); setSession(__NEXTAUTH._session); return; } if (// If there is no time defined for when a session should be considered // stale, then it's okay to use the value we have until an event is // triggered which updates it !event || // If the client doesn't have a session then we don't need to call // the server to check if it does (if they have signed in via another // tab or window that will come through as a "stroage" event // event anyway) __NEXTAUTH._session === null || // Bail out early if the client session is not stale yet (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["now"])() < __NEXTAUTH._lastSync) { return; } // An event or session staleness occurred, update the client session. __NEXTAUTH._lastSync = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["now"])(); __NEXTAUTH._session = await getSession(); setSession(__NEXTAUTH._session); } catch (error) { logger.error(new __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ClientSessionError"](error.message, error)); } finally{ setLoading(false); } } })["SessionProvider.useEffect"]; __NEXTAUTH._getSession(); return ({ "SessionProvider.useEffect": ()=>{ __NEXTAUTH._lastSync = 0; __NEXTAUTH._session = undefined; __NEXTAUTH._getSession = ({ "SessionProvider.useEffect": ()=>{} })["SessionProvider.useEffect"]; } })["SessionProvider.useEffect"]; } }["SessionProvider.useEffect"], []); __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "SessionProvider.useEffect": ()=>{ const handle = { "SessionProvider.useEffect.handle": ()=>__NEXTAUTH._getSession({ event: "storage" }) }["SessionProvider.useEffect.handle"]; // Listen for storage events and update session if event fired from // another window (but suppress firing another event to avoid a loop) // Fetch new session data but tell it to not to fire another event to // avoid an infinite loop. // Note: We could pass session data through and do something like // `setData(message.data)` but that can cause problems depending // on how the session object is being used in the client; it is // more robust to have each window/tab fetch it's own copy of the // session object rather than share it across instances. broadcast().addEventListener("message", handle); return ({ "SessionProvider.useEffect": ()=>broadcast().removeEventListener("message", handle) })["SessionProvider.useEffect"]; } }["SessionProvider.useEffect"], []); __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "SessionProvider.useEffect": ()=>{ const { refetchOnWindowFocus = true } = props; // Listen for when the page is visible, if the user switches tabs // and makes our tab visible again, re-fetch the session, but only if // this feature is not disabled. const visibilityHandler = { "SessionProvider.useEffect.visibilityHandler": ()=>{ if (refetchOnWindowFocus && document.visibilityState === "visible") __NEXTAUTH._getSession({ event: "visibilitychange" }); } }["SessionProvider.useEffect.visibilityHandler"]; document.addEventListener("visibilitychange", visibilityHandler, false); return ({ "SessionProvider.useEffect": ()=>document.removeEventListener("visibilitychange", visibilityHandler, false) })["SessionProvider.useEffect"]; } }["SessionProvider.useEffect"], [ props.refetchOnWindowFocus ]); const isOnline = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useOnline"])(); // TODO: Flip this behavior in next major version const shouldRefetch = refetchWhenOffline !== false || isOnline; __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"]({ "SessionProvider.useEffect": ()=>{ if (refetchInterval && shouldRefetch) { const refetchIntervalTimer = setInterval({ "SessionProvider.useEffect.refetchIntervalTimer": ()=>{ if (__NEXTAUTH._session) { __NEXTAUTH._getSession({ event: "poll" }); } } }["SessionProvider.useEffect.refetchIntervalTimer"], refetchInterval * 1000); return ({ "SessionProvider.useEffect": ()=>clearInterval(refetchIntervalTimer) })["SessionProvider.useEffect"]; } } }["SessionProvider.useEffect"], [ refetchInterval, shouldRefetch ]); const value = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"]({ "SessionProvider.useMemo[value]": ()=>({ data: session, status: loading ? "loading" : session ? "authenticated" : "unauthenticated", async update (data) { if (loading) return; setLoading(true); const newSession = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$lib$2f$client$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchData"])("session", __NEXTAUTH, logger, typeof data === "undefined" ? undefined : { body: { csrfToken: await getCsrfToken(), data } }); setLoading(false); if (newSession) { setSession(newSession); broadcast().postMessage({ event: "session", data: { trigger: "getSession" } }); } return newSession; } }) }["SessionProvider.useMemo[value]"], [ session, loading ]); return(// @ts-expect-error (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsx"])(SessionContext.Provider, { value: value, children: children })); } }), ]); //# sourceMappingURL=Documents_00%20-%20projet_plumeia_0ae2c1c3._.js.map