(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{4925:(e,t,a)=>{Promise.resolve().then(a.bind(a,1069)),Promise.resolve().then(a.t.bind(a,5147,23)),Promise.resolve().then(a.t.bind(a,8918,23)),Promise.resolve().then(a.t.bind(a,3394,23)),Promise.resolve().then(a.t.bind(a,7440,23)),Promise.resolve().then(a.t.bind(a,4206,23)),Promise.resolve().then(a.t.bind(a,1258,23)),Promise.resolve().then(a.t.bind(a,1580,23)),Promise.resolve().then(a.t.bind(a,3154,23)),Promise.resolve().then(a.t.bind(a,9751,23)),Promise.resolve().then(a.t.bind(a,9324,23))},3745:(e,t,a)=>{"use strict";a.d(t,{FH:()=>h,UJ:()=>n,ki:()=>r});let s="https://api.aitrading.coach";class n extends Error{constructor(e,t){super((Array.isArray(t.message)?t.message.join("; "):t.message)||"HTTP ".concat(e)),this.status=e,this.body=t,this.name="ApiException"}}let l=null,o=null;function r(e){l=e}async function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{method:a="GET",body:n,signal:o,noRefresh:r,authenticated:i=!0}=t,h={};void 0!==n&&(h["Content-Type"]="application/json"),i&&l&&(h.Authorization="Bearer ".concat(l));let d=await fetch("".concat(s).concat(e),{method:a,headers:h,body:void 0===n?void 0:JSON.stringify(n),credentials:"include",signal:o});if(401===d.status&&i&&!r){let t=await c();if(t)return h.Authorization="Bearer ".concat(t),u(await fetch("".concat(s).concat(e),{method:a,headers:h,body:void 0===n?void 0:JSON.stringify(n),credentials:"include",signal:o}))}return u(d)}async function u(e){let t=await e.text(),a=t?JSON.parse(t):null;if(!e.ok){var s;let l=null!==(s=null==a?void 0:a.error)&&void 0!==s?s:{code:"unknown",message:t||e.statusText,statusCode:e.status};throw new n(e.status,l)}return a}async function c(){return o||(o=(async()=>{try{let e=await i("/v1/auth/refresh",{method:"POST",noRefresh:!0,authenticated:!1});return l=e.accessToken,e.accessToken}catch(e){return l=null,null}finally{o=null}})())}let h={signup:e=>i("/v1/auth/signup",{method:"POST",body:e,authenticated:!1}),verifyEmail:e=>i("/v1/auth/verify-email",{method:"POST",body:e,authenticated:!1}),login:e=>i("/v1/auth/login",{method:"POST",body:e,authenticated:!1}),refresh:()=>i("/v1/auth/refresh",{method:"POST",noRefresh:!0,authenticated:!1}),logout:()=>i("/v1/auth/logout",{method:"POST",noRefresh:!0,authenticated:!1}),forgot:e=>i("/v1/auth/forgot",{method:"POST",body:e,authenticated:!1}),reset:e=>i("/v1/auth/reset",{method:"POST",body:e,authenticated:!1}),enroll2fa:()=>i("/v1/auth/2fa/enroll",{method:"POST"}),verify2fa:e=>i("/v1/auth/2fa/verify",{method:"POST",body:e}),me:()=>i("/v1/auth/me"),health:()=>i("/v1/health",{authenticated:!1,noRefresh:!0})}},1069:(e,t,a)=>{"use strict";a.d(t,{A:()=>i,AuthProvider:()=>r});var s=a(5155),n=a(2115),l=a(3745);let o=(0,n.createContext)(null);function r(e){let{children:t}=e,[a,r]=(0,n.useState)({status:"loading",user:null}),i=(0,n.useCallback)(async()=>{try{let{accessToken:e}=await l.FH.refresh();(0,l.ki)(e);let t=await l.FH.me();r({status:"authenticated",user:t})}catch(e){(0,l.ki)(null),r({status:"anonymous",user:null})}},[]);(0,n.useEffect)(()=>{i()},[i]);let u=(0,n.useCallback)(async e=>{let t=await l.FH.login(e);if("requiresTwoFactor"in t&&t.requiresTwoFactor)return{requiresTwoFactor:!0};if(!("accessToken"in t))throw new l.UJ(500,{code:"unexpected",message:"Login response missing access token",statusCode:500});return(0,l.ki)(t.accessToken),r({status:"authenticated",user:await l.FH.me()}),{}},[]),c=(0,n.useCallback)(async e=>{await l.FH.signup(e),r({status:"anonymous",user:null})},[]),h=(0,n.useCallback)(async()=>{try{await l.FH.logout()}finally{(0,l.ki)(null),r({status:"anonymous",user:null})}},[]),d=(0,n.useMemo)(()=>({...a,login:u,signup:c,logout:h,refresh:i}),[a,u,c,h,i]);return(0,s.jsx)(o.Provider,{value:d,children:t})}function i(){let e=(0,n.useContext)(o);if(!e)throw Error("useAuth must be used inside ");return e}},9324:()=>{},1580:e=>{e.exports={style:{fontFamily:"'DM Mono', 'DM Mono Fallback'",fontStyle:"normal"},className:"__className_9ef920",variable:"__variable_9ef920"}},1258:e=>{e.exports={style:{fontFamily:"'DM Sans', 'DM Sans Fallback'",fontStyle:"normal"},className:"__className_e64f39",variable:"__variable_e64f39"}},4206:e=>{e.exports={style:{fontFamily:"'DM Serif Display', 'DM Serif Display Fallback'",fontWeight:400},className:"__className_d501d1",variable:"__variable_d501d1"}},5147:e=>{e.exports={style:{fontFamily:"'Fraunces', 'Fraunces Fallback'"},className:"__className_d991f5",variable:"__variable_d991f5"}},3154:e=>{e.exports={style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"},className:"__className_755215",variable:"__variable_755215"}},9751:e=>{e.exports={style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"},className:"__className_5a9483",variable:"__variable_5a9483"}},7440:e=>{e.exports={style:{fontFamily:"'Instrument Serif', 'Instrument Serif Fallback'",fontWeight:400},className:"__className_1f5468",variable:"__variable_1f5468"}},3394:e=>{e.exports={style:{fontFamily:"'JetBrains Mono', 'JetBrains Mono Fallback'",fontStyle:"normal"},className:"__className_e896d9",variable:"__variable_e896d9"}},8918:e=>{e.exports={style:{fontFamily:"'Manrope', 'Manrope Fallback'",fontStyle:"normal"},className:"__className_a05e8d",variable:"__variable_a05e8d"}}},e=>{var t=t=>e(e.s=t);e.O(0,[263,533,441,517,358],()=>t(4925)),_N_E=e.O()}]);