1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[91560],{44765:(e,r,t)=>{t.d(r,{F:()=>a});let a=()=>{try{localStorage.removeItem("customModels"),localStorage.removeItem("model-selection-v3"),localStorage.removeItem("agent-selection-storage"),localStorage.removeItem("auth-tracking-storage"),localStorage.removeItem("pendingAgentPrompt"),localStorage.removeItem("opencode-model-store-v1"),localStorage.removeItem("opencode-servers-v4"),localStorage.removeItem("kortix-tabs"),localStorage.removeItem("kortix-tabs-per-server"),Object.keys(localStorage).forEach(e=>{e.startsWith("maintenance-dismissed-")&&localStorage.removeItem(e)});try{sessionStorage.removeItem("kortix-sandbox-was-connected")}catch(e){}console.log("â
Local storage cleared on logout")}catch(e){console.error("â Error clearing local storage:",e)}}},80652:(e,r,t)=>{t.d(r,{A:()=>u,AuthProvider:()=>c});var a=t(93111),o=t(42271),n=t(39132),l=t(44765),s=t(3314);let i=(0,o.createContext)(void 0),c=e=>{let{children:r}=e,t=(0,n.U)(),[c,u]=(0,o.useState)(null),[d,h]=(0,o.useState)(null),[f,g]=(0,o.useState)(!0);(0,o.useEffect)(()=>{(async()=>{try{var e,r;let{data:{session:a}}=await t.auth.getSession();if(a){let{error:e}=await t.auth.getUser();if(e){console.warn("[AuthProvider] Stale session detected, signing out:",e.message),await t.auth.signOut(),(0,s.setBootstrapAuthToken)(null),(0,s.setCachedAuthToken)(null),u(null),h(null);return}}if(u(a),h(null!=(r=null==a?void 0:a.user)?r:null),(null==a?void 0:a.access_token)&&((0,s.setCachedAuthToken)(a.access_token),(0,s.setBootstrapAuthToken)(null)),null==a||null==(e=a.user)?void 0:e.id){let e=localStorage.getItem("kortix-last-user-id");e&&e!==a.user.id&&(console.log("[Auth] Initial session: user changed, clearing stale local storage"),(0,l.F)()),localStorage.setItem("kortix-last-user-id",a.user.id)}}catch(e){}finally{g(!1)}})();let{data:e}=t.auth.onAuthStateChange(async(e,r)=>{var t,a;switch(u(r),h(null!=(t=null==r?void 0:r.user)?t:null),f&&g(!1),e){case"SIGNED_IN":{(null==r?void 0:r.access_token)&&((0,s.setCachedAuthToken)(r.access_token),(0,s.setBootstrapAuthToken)(null));let e=localStorage.getItem("kortix-last-user-id"),t=null==r||null==(a=r.user)?void 0:a.id;t&&e&&e!==t&&(console.log("[Auth] User changed, clearing stale local storage"),(0,l.F)()),t&&localStorage.setItem("kortix-last-user-id",t);break}case"SIGNED_OUT":(0,s.setBootstrapAuthToken)(null),(0,s.setCachedAuthToken)(null),(0,l.F)(),localStorage.removeItem("kortix-last-user-id");break;case"TOKEN_REFRESHED":case"MFA_CHALLENGE_VERIFIED":(null==r?void 0:r.access_token)&&((0,s.setCachedAuthToken)(r.access_token),(0,s.setBootstrapAuthToken)(null))}});return()=>{null==e||e.subscription.unsubscribe()}},[t]);let m=(0,o.useCallback)(async()=>{try{await t.auth.signOut(),(0,l.F)()}catch(e){console.error("Error signing out:",e)}},[t]),v=(0,o.useMemo)(()=>({supabase:t,session:c,user:d,isLoading:f,signOut:m}),[t,c,d,f,m]);return(0,a.jsx)(i.Provider,{value:v,children:r})},u=()=>{let e=(0,o.useContext)(i);if(void 0===e)throw Error("useAuth must be used within an AuthProvider");return e}},91560:(e,r,t)=>{t.d(r,{Jm:()=>g,x8:()=>f,aV:()=>_,w9:()=>v,S8:()=>y,K$:()=>m});var a=t(67538),o=t(78006),n=t(57441),l=t(39132),s=t(37811);let i=new Date("2025-12-24T00:09:30.000Z");function c(){let e=s.env.NEXT_PUBLIC_PHONE_NUMBER_MANDATORY;return!!e&&"true"===e.toLowerCase()}let u={async enrollPhoneNumber(e){let r=(0,l.U)();try{let t=await r.auth.mfa.enroll({factorType:"phone",friendlyName:e.friendly_name,phone:e.phone_number});if(t.error)throw Error(t.error.message);if(!t.data)throw Error("No data returned from enrollment");return{id:t.data.id,friendly_name:e.friendly_name,phone_number:e.phone_number,qr_code:void 0,secret:void 0}}catch(e){throw console.error("â Enroll phone factor failed:",e),Error("Failed to enroll phone factor: ".concat(e.message))}},async createChallenge(e){let r=(0,l.U)();try{let t=await r.auth.mfa.challenge({factorId:e.factor_id});if(t.error)throw Error(t.error.message);if(!t.data)throw Error("No data returned from challenge");return{id:t.data.id,expires_at:t.data.expires_at?new Date(1e3*t.data.expires_at).toISOString():void 0}}catch(e){throw console.error("â Create SMS challenge failed:",e),Error("Failed to create SMS challenge: ".concat(e.message))}},async verifyChallenge(e){let r=(0,l.U)();try{let t=await r.auth.mfa.verify({factorId:e.factor_id,challengeId:e.challenge_id,code:e.code});if(t.error)throw Error(t.error.message);return{success:!0,message:"SMS code verified successfully"}}catch(e){throw console.error("â Verify challenge failed:",e),Error("Failed to verify SMS code: ".concat(e.message))}},async challengeAndVerify(e){let r=(0,l.U)();try{let t=await r.auth.mfa.challengeAndVerify({factorId:e.factor_id,code:e.code});if(t.error)throw Error(t.error.message);return{success:!0,message:"SMS challenge created and verified successfully"}}catch(e){throw console.error("â Challenge and verify SMS failed:",e),Error("Failed to challenge and verify SMS: ".concat(e.message))}},async resendSMS(e){let r=(0,l.U)();try{let t=await r.auth.mfa.challenge({factorId:e});if(t.error)throw Error(t.error.message);if(!t.data)throw Error("No data returned from challenge");return{id:t.data.id,expires_at:t.data.expires_at?new Date(1e3*t.data.expires_at).toISOString():void 0}}catch(e){throw console.error("â Resend SMS failed:",e),Error("Failed to resend SMS: ".concat(e.message))}},async listFactors(){let e=(0,l.U)();try{let{data:{user:r},error:t}=await e.auth.getUser();if(t)throw Error(t.message);if(!r)throw Error("User not found");let a=[];if(r.factors)for(let e of r.factors)a.push({id:e.id,friendly_name:e.friendly_name,factor_type:e.factor_type,status:e.status,phone:e.phone,created_at:e.created_at,updated_at:e.updated_at});return{factors:a}}catch(e){throw console.error("â List factors failed:",e),Error("Failed to list factors: ".concat(e.message))}},async unenrollFactor(e){let r=(0,l.U)();try{let t=await r.auth.mfa.unenroll({factorId:e});if(t.error)throw Error(t.error.message);return{success:!0,message:"Phone factor unenrolled successfully"}}catch(e){throw console.error("â Unenroll factor failed:",e),Error("Failed to unenroll phone factor: ".concat(e.message))}},async getAAL(){let e=(0,l.U)(),{data:{session:r}}=await e.auth.getSession();if(!r)return{current_level:"aal1",next_level:"aal1",current_authentication_methods:[],action_required:"none",message:"No active session â MFA not applicable",phone_verification_required:!1,user_created_at:void 0,cutoff_date:i.toISOString(),verification_required:!1,is_verified:!1,factors:[]};try{var t,a,o,n;let r=await e.auth.mfa.getAuthenticatorAssuranceLevel();if(r.error)throw Error(r.error.message);let{data:{user:l},error:s}=await e.auth.getUser();if(s)throw Error(s.message);if(!l)throw Error("User not found");let u=null;if(l.created_at)try{u=new Date(l.created_at)}catch(e){console.error("Failed to parse user created_at:",e),u=new Date}let d=u&&u>=i,h=[],f=[],g=!1;
1if(l.factors)for(let e of l.factors){let r={id:e.id,friendly_name:e.friendly_name,factor_type:e.factor_type,status:e.status,phone:e.phone,created_at:e.created_at,updated_at:e.updated_at};h.push(r),"phone"===e.factor_type&&(f.push(r),"verified"===e.status&&(g=!0))}let m=null==(t=r.data)?void 0:t.currentLevel,v=null==(a=r.data)?void 0:a.nextLevel,y="none",_="";"aal1"===m&&"aal1"===v?(y="none",_="MFA is not enrolled for this account"):"aal1"===m&&"aal2"===v?(y="verify_mfa",_="MFA verification required to access full features"):"aal2"===m&&"aal2"===v?(y="none",_="MFA is verified and active"):"aal2"===m&&"aal1"===v?(y="reauthenticate",_="Session needs refresh due to MFA changes"):(y="unknown",_="Unknown AAL combination: ".concat(m," -> ").concat(v));let S=!1;d?"aal1"===m&&"aal1"===v?S=!0:"verify_mfa"===y&&(S=!0):S="verify_mfa"===y;let w=d&&c();return S=!!(d&&S&&c()),{current_level:null!=m?m:void 0,next_level:null!=v?v:void 0,current_authentication_methods:(null==(n=r.data)||null==(o=n.currentAuthenticationMethods)?void 0:o.map(e=>e.method))||[],action_required:y,message:_,phone_verification_required:null!=w&&w,user_created_at:null==u?void 0:u.toISOString(),cutoff_date:i.toISOString(),verification_required:null!=S?S:void 0,is_verified:g,factors:h}}catch(e){throw console.error("â Get AAL failed:",e),Error("Failed to get AAL: ".concat(e.message))}}},d={enrollPhoneNumber:async e=>await u.enrollPhoneNumber(e),createChallenge:async e=>await u.createChallenge(e),verifyChallenge:async e=>await u.verifyChallenge(e),listFactors:async()=>await u.listFactors(),unenrollFactor:async e=>await u.unenrollFactor(e),getAAL:async()=>await u.getAAL()};var h=t(80652);let f=()=>{let e=(0,a.jE)();return(0,o.n)({mutationFn:d.enrollPhoneNumber,onSuccess:()=>{e.invalidateQueries({queryKey:["phone-verification-factors"]}),e.invalidateQueries({queryKey:["mfa-aal"]})}})},g=()=>(0,o.n)({mutationFn:d.createChallenge}),m=()=>{let e=(0,a.jE)();return(0,o.n)({mutationFn:d.verifyChallenge,onSuccess:()=>{e.invalidateQueries({queryKey:["mfa-aal"]}),e.invalidateQueries({queryKey:["phone-verification-factors"]})}})},v=()=>{let{user:e}=(0,h.A)();return(0,n.I)({queryKey:["phone-verification-factors"],queryFn:d.listFactors,enabled:!!e,staleTime:1/0,retry:2})},y=()=>{let e=(0,a.jE)();return(0,o.n)({mutationFn:d.unenrollFactor,onSuccess:()=>{e.invalidateQueries({queryKey:["phone-verification-factors"]}),e.invalidateQueries({queryKey:["mfa-aal"]})}})},_=()=>{let{user:e}=(0,h.A)();return(0,n.I)({queryKey:["mfa-aal"],queryFn:d.getAAL,enabled:!!e,staleTime:1/0,retry:2})}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.