(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5557],{9852:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>u});var n=r(4208),a=r(91356),l=r(19984),s=r(41567);function i(){let e=(0,l.useRouter)(),t=(0,l.useSearchParams)(),r=t.get("returnTo")??"/mail/inbox",n=t.get("accountNotice");return(0,a.useEffect)(()=>{let t=!1;return async function(){try{let a=await fetch("/api/auth/session",{credentials:"include"}),l=await a.json();if((0,s.Pr)(l)&&!t){"same"===n&&sessionStorage.setItem("ulti_account_notice","same"),e.replace(r.startsWith("/")?r:"/mail/inbox");return}}catch{}t||e.replace("/login?error=session_failed")}(),()=>{t=!0}},[n,r,e]),null}function u(){return(0,n.jsx)(a.Suspense,{fallback:null,children:(0,n.jsx)(i,{})})}},19984:(e,t,r)=>{"use strict";var n=r(28704);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},22029:(e,t,r)=>{"use strict";function n(e,t){let r;try{r=e()}catch(e){return}return{getItem:e=>{var n;let a=e=>null===e?null:JSON.parse(e,null==t?void 0:t.reviver),l=null!=(n=r.getItem(e))?n:null;return l instanceof Promise?l.then(a):a(l)},setItem:(e,n)=>r.setItem(e,JSON.stringify(n,null==t?void 0:t.replacer)),removeItem:e=>r.removeItem(e)}}r.d(t,{KU:()=>n,Zr:()=>l});let a=e=>t=>{try{let r=e(t);if(r instanceof Promise)return r;return{then:e=>a(e)(r),catch(e){return this}}}catch(e){return{then(e){return this},catch:t=>a(t)(e)}}},l=(e,t)=>(r,l,s)=>{let i,u={storage:n(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},o=!1,c=0,d=new Set,m=new Set,f=u.storage;if(!f)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${u.name}', the given storage is currently unavailable.`),r(...e)},l,s);let g=()=>{let e=u.partialize({...l()});return f.setItem(u.name,{state:e,version:u.version})},h=s.setState;s.setState=(e,t)=>(h(e,t),g());let v=e((...e)=>(r(...e),g()),l,s);s.getInitialState=()=>v;let p=()=>{var e,t;if(!f)return;let n=++c;o=!1,d.forEach(e=>{var t;return e(null!=(t=l())?t:v)});let s=(null==(t=u.onRehydrateStorage)?void 0:t.call(u,null!=(e=l())?e:v))||void 0;return a(f.getItem.bind(f))(u.name).then(e=>{if(e)if("number"!=typeof e.version||e.version===u.version)return[!1,e.state];else{if(u.migrate){let t=u.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var t;if(n!==c)return;let[a,s]=e;if(r(i=u.merge(s,null!=(t=l())?t:v),!0),a)return g()}).then(()=>{n===c&&(null==s||s(l(),void 0),i=l(),o=!0,m.forEach(e=>e(i)))}).catch(e=>{n===c&&(null==s||s(void 0,e))})};return s.persist={setOptions:e=>{u={...u,...e},e.storage&&(f=e.storage)},clearStorage:()=>{null==f||f.removeItem(u.name)},getOptions:()=>u,rehydrate:()=>p(),hasHydrated:()=>o,onHydrate:e=>(d.add(e),()=>{d.delete(e)}),onFinishHydration:e=>(m.add(e),()=>{m.delete(e)})},u.skipHydration||p(),i||v}},41567:(e,t,r)=>{"use strict";r.d(t,{$G:()=>i,Pr:()=>s,fd:()=>l});var n=r(86227),a=r(49677);async function l(){try{let e=await fetch("/api/auth/session",{credentials:"include"});if(!e.ok)return null;return await e.json()}catch{return null}}function s(e){return!!e.authenticated&&!!e.accessToken&&!!e.expiresAt&&(n.nc.getState().login(e.accessToken,e.refreshToken??"",e.expiresAt,e.user??null),a.w.getState().clear(),!0)}async function i(){let e=await l();return null!==e&&s(e)}},46298:(e,t,r)=>{"use strict";r.d(t,{v:()=>s});var n=r(91356);let a=e=>{let t,r=new Set,n=(e,n)=>{let a="function"==typeof e?e(t):e;if(!Object.is(a,t)){let e=t;t=(null!=n?n:"object"!=typeof a||null===a)?a:Object.assign({},t,a),r.forEach(r=>r(t,e))}},a=()=>t,l={setState:n,getState:a,getInitialState:()=>s,subscribe:e=>(r.add(e),()=>r.delete(e))},s=t=e(n,a,l);return l},l=e=>{let t=e?a(e):a,r=e=>(function(e,t=e=>e){let r=n.useSyncExternalStore(e.subscribe,n.useCallback(()=>t(e.getState()),[e,t]),n.useCallback(()=>t(e.getInitialState()),[e,t]));return n.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},s=e=>e?l(e):l},49677:(e,t,r)=>{"use strict";r.d(t,{a:()=>a,w:()=>n});let n=(0,r(46298).v)((e,t)=>({status:"idle",setOffline:()=>{"expired"!==t().status&&e({status:"offline"})},setExpired:()=>{"expired"!==t().status&&e({status:"expired"})},clear:()=>e({status:"idle"})}));function a(){return"expired"===n.getState().status}},86227:(e,t,r)=>{"use strict";r.d(t,{Ht:()=>i,IQ:()=>u,nc:()=>o});var n=r(46298),a=r(22029),l=r(91025),s=r(49677);let i="ulti-auth",u=["ultimail-auth","ultidrive-auth"];!function(){try{if(localStorage.getItem(i))return;for(let e of u){let t=localStorage.getItem(e);if(t)return void localStorage.setItem(i,t)}}catch{}}();let o=(0,n.v)()((0,a.Zr)((e,t)=>({accessToken:null,refreshToken:null,expiresAt:null,user:null,login:(t,r,n,a=null)=>{e({accessToken:t,refreshToken:r,expiresAt:n,user:a}),s.w.getState().clear()},logout:()=>{e({accessToken:null,refreshToken:null,expiresAt:null,user:null});try{for(let e of(localStorage.removeItem(i),u))localStorage.removeItem(e)}catch{}},isAuthenticated:()=>{let{accessToken:e,expiresAt:r,refreshToken:n}=t();return!!e&&(!!(r&&Date.now(){let t=e.state;return t&&(t.accessToken=null,t.refreshToken=null,t.expiresAt=null),e},partialize:e=>({user:e.user})}))},91025:(e,t,r)=>{"use strict";r.d(t,{$:()=>s});var n=r(22029);function a(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,r)=>{e.set(t,r)},removeItem:t=>{e.delete(t)}}}function l(){try{return window.localStorage}catch{return a()}}let s=function(){let e=(0,n.KU)(l)??(0,n.KU)(()=>a());if(!e)throw Error("[debounced-json-storage] failed to create JSON storage");let t=new Map,r=new Map,s=n=>{let a=r.get(n);void 0!==a&&(globalThis.clearTimeout(a),r.delete(n));let l=t.get(n);void 0!==l&&(t.delete(n),e.setItem(n,l))},i=()=>{for(let e of[...t.keys()])s(e)};return window.addEventListener("beforeunload",i),window.addEventListener("pagehide",i),{getItem:t=>e.getItem(t),setItem:(e,n)=>{t.set(e,n);let a=r.get(e);void 0!==a&&globalThis.clearTimeout(a);let l=globalThis.setTimeout(()=>{r.delete(e),s(e)},220);r.set(e,l)},removeItem:n=>{let a=r.get(n);return void 0!==a&&(globalThis.clearTimeout(a),r.delete(n)),t.delete(n),e.removeItem(n)}}}()},96620:(e,t,r)=>{Promise.resolve().then(r.bind(r,9852))}},e=>{e.O(0,[1614,1506,7358],()=>e(e.s=96620)),_N_E=e.O()}]);