1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3290],{806:(e,r,t)=>{t.d(r,{$b:()=>c,AS:()=>F,Bc:()=>R,DT:()=>U,Il:()=>Y,Oj:()=>G,Pk:()=>N,kY:()=>z,lD:()=>V,rK:()=>C,sB:()=>D,sg:()=>x,xV:()=>M,xp:()=>B,y4:()=>n,yS:()=>q});var a=t(98734),s=t(44193),i=t(49203),o=t(34530);let n=a.Yj().min(1,i.vQ.ERROR_MESSAGES.REQUIRED_FIELD).email(i.vQ.ERROR_MESSAGES.INVALID_EMAIL).max(255,"Email must be less than 255 characters"),l=a.Yj().min(i.vQ.SECURITY.PASSWORD_MIN_LENGTH,i.vQ.ERROR_MESSAGES.PASSWORD_TOO_SHORT).max(128,"Password must be less than 128 characters").regex(i.vQ.VALIDATION.PASSWORD_REGEX,i.vQ.ERROR_MESSAGES.PASSWORD_WEAK),u=a.Yj().min(1,"Name must be at least 1 character(s)").max(100,"Name must be less than 100 characters").regex(/^[a-zA-Z\s'-]+$/,"Name can only contain letters, spaces, hyphens, and apostrophes"),c=a.Ik({title:a.Yj().min(1,"Engagement title is required"),description:a.Yj().optional(),location:a.Yj().min(1,"Engagement location is required"),client_id:a.Yj().min(1,"Client is required"),client_poc_id:a.Yj().min(1,"Client POC is required"),xqtiv_poc_id:a.Yj().optional(),rst_template_id:a.Yj().optional()}),d=a.Yj().superRefine((e,r)=>{let t=e.trim();return 0===t.length?void r.addIssue({code:s.eq.custom,message:"First Name is required"}):t.length<2?void r.addIssue({code:s.eq.custom,message:"First name must be at least 2 characters"}):t.length>50?void r.addIssue({code:s.eq.custom,message:"First name must be less than 50 characters"}):void(!/^[a-zA-Z\s'-]+$/.test(e)&&r.addIssue({code:s.eq.custom,message:"First name can only contain letters, spaces, hyphens, and apostrophes"}))}),m=a.Yj().max(50,"Middle name must be less than 50 characters").regex(/^[a-zA-Z\s'-]*$/,"Middle name can only contain letters, spaces, hyphens, and apostrophes").optional().or(a.eu("")),p=a.Yj().superRefine((e,r)=>{let t=e.trim();return 0===t.length?void r.addIssue({code:s.eq.custom,message:"Last Name is required"}):t.length>50?void r.addIssue({code:s.eq.custom,message:"Last name must be less than 50 characters"}):void(!/^[a-zA-Z\s'-]+$/.test(e)&&r.addIssue({code:s.eq.custom,message:"Last name can only contain letters, spaces, hyphens, and apostrophes"}))});a.Yj().min(1,"Gender is required").refine(e=>["male","female","other","Male","Female","Other"].includes(e),{message:"Please select a valid gender"});let g=a.Yj().optional().refine(e=>!e||""===e.trim()||["male","female","other","Male","Female","Other"].includes(e),{message:"Please select a valid gender"}).or(a.eu(""));a.Yj().min(1,"Age bracket is required").refine(e=>["18-25","26-30","31-35","36-40","41-45","46-50","51-55","55+"].includes(e),{message:"Please select a valid age bracket"});let f=a.Yj().optional().refine(e=>!e||""===e.trim()||["18-25","26-30","31-35","36-40","41-45","46-50","51-55","55+"].includes(e),{message:"Please select a valid age bracket"}).or(a.eu("")),h=a.Yj().superRefine((e,r)=>{let t=e.trim();if(0===t.length)return void r.addIssue({code:s.eq.custom,message:"Company Name is required"});t.length>100&&r.addIssue({code:s.eq.custom,message:"Company name must be less than 100 characters"})}),y=a.Yj().superRefine((e,r)=>{let t=e.trim();if(0===t.length)return void r.addIssue({code:s.eq.custom,message:"Role is required"});t.length>100&&r.addIssue({code:s.eq.custom,message:"Role must be less than 100 characters"})}),v=a.Yj().min(1,"LinkedIn profile is required").refine(e=>{if(!e.startsWith("https://"))return!1;try{let r=new URL(e);return"www.linkedin.com"===r.hostname||"linkedin.com"===r.hostname}catch(e){return!1}},{message:"LinkedIn URL must start with https:// and be a valid LinkedIn profile (e.g., https://www.linkedin.com/in/username)"}),k=a.Yj().optional().refine(e=>{if(!e||""===e.trim())return!0;if(!e.startsWith("https://"))return!1;try{let r=new URL(e);return"www.linkedin.com"===r.hostname||"linkedin.com"===r.hostname}catch(e){return!1}},{message:"LinkedIn URL must start with https:// and be a valid LinkedIn profile (e.g., https://www.linkedin.com/in/username)"}),I=a.Yj().optional().refine(e=>{if(!e||""===e.trim())return!0;try{return new URL(e.startsWith("http")?e:"https://".concat(e)),!0}catch(e){return!1}},{message:"Please enter a valid meeting link URL"}),E=a.Yj().max(500,"Bio must not exceed 500 characters").optional().or(a.eu("")),_=a.Yj().max(100,"Designation must be less than 100 characters").optional().or(a.eu(""));a.Yj().optional().or(a.eu("")),a.Yj().min(1,"Location is required").max(100,"Location must be less than 100 characters");let S=a.Yj().max(100,"Location must be less than 100 characters").optional().or(a.eu(""));a.Yj().min(1,"Phone number is required").regex(/^[\d\s\-\(\)]+$/,"Please enter a valid phone number").refine(e=>{let r=e.replace(/\D/g,"");return r.length>=7&&r.length<=15},"Phone number must be between 7 and 15 digits");let w=a.Yj().regex(/^[\d\s\-\(\)]*$/,"Please enter a valid phone number").refine(e=>{if(!e||""===e.trim())return!0;let r=e.replace(/\D/g,"");return r.length>=7&&r.length<=15},{message:"Phone number must be between 7 and 15 digits"}).optional().or(a.eu("")),P=a.Yj().refine(e=>(0,o.YA)().includes(e),{message:"Please select a valid country code"}),A=a.Yj().optional().refine(e=>!e||""===e.trim()||(0,o.YA)().includes(e),{message:"Please select a valid country code"}).or(a.eu(""));
1a.Ik({phoneNumber:a.Yj().min(1,"Phone number is required"),countryCode:P});let R=a.Ik({firstName:d,middleName:m,lastName:p,gender:g,ageBracket:f,companyName:h,role:y,email:n.optional().or(a.eu("")),contactNo:w,countryCode:A,linkedinProfile:v.optional().or(a.eu("")),location:S,profilePicture:a.Yj().optional()}).refine(e=>!e.contactNo||""===e.contactNo.trim()||!!e.countryCode&&""!==e.countryCode.trim(),{message:"Country code is required when phone number is provided",path:["countryCode"]});a.Ik({id:a.Yj().uuid("Invalid user ID"),email:n,name:u,role:a.k5(["admin","user","moderator"],{errorMap:()=>({message:"Invalid user role"})}),permissions:a.YO(a.k5(["read","write","delete","admin"])),createdAt:a.Yj().datetime(),updatedAt:a.Yj().datetime()}),a.Ik({email:n,name:u,password:l,role:a.k5(["admin","user","moderator"]).default("user")}),a.Ik({email:n.optional(),name:u.optional(),role:a.k5(["admin","user","moderator"]).optional()}),a.Ik({email:n,password:a.Yj().min(1,i.vQ.ERROR_MESSAGES.REQUIRED_FIELD),rememberMe:a.zM().default(!1)}),a.Ik({email:n,name:u,password:l,confirmPassword:a.Yj().min(1,"Please confirm your password")}).refine(e=>e.password===e.confirmPassword,{message:i.vQ.ERROR_MESSAGES.PASSWORDS_DONT_MATCH,path:["confirmPassword"]}),a.Ik({email:n}),a.Ik({token:a.Yj().min(1,"Reset token is required"),password:l,confirmPassword:a.Yj().min(1,"Please confirm your password")}).refine(e=>e.password===e.confirmPassword,{message:i.vQ.ERROR_MESSAGES.PASSWORDS_DONT_MATCH,path:["confirmPassword"]}),a.Ik({data:a.L5(),message:a.Yj().optional(),success:a.zM(),errors:a.g1(a.YO(a.Yj())).optional(),meta:a.Ik({timestamp:a.Yj(),version:a.Yj()}).optional()}),a.Ik({data:a.YO(a.L5()),message:a.Yj().optional(),success:a.zM(),errors:a.g1(a.YO(a.Yj())).optional(),pagination:a.Ik({page:a.ai().int().positive(),limit:a.ai().int().positive(),total:a.ai().int().nonnegative(),totalPages:a.ai().int().nonnegative()})}),a.Ik({name:u,email:n,subject:a.Yj().min(1,"Subject is required").max(200,"Subject must be less than 200 characters"),message:a.Yj().min(10,"Message must be at least 10 characters").max(2e3,"Message must be less than 2000 characters")}),a.Ik({name:u.optional(),bio:a.Yj().max(500,"Bio must be less than 500 characters").optional(),website:a.Yj().url("Invalid website URL").optional().or(a.eu("")),location:a.Yj().max(100,"Location must be less than 100 characters").optional()}),a.Ik({query:a.Yj().min(1,"Search query is required").max(100,"Search query must be less than 100 characters"),filters:a.g1(a.L5()).optional(),sort_by:a.Yj().optional(),sortOrder:a.k5(["asc","desc"]).default("desc")}),a.Ik({page:a.ai().int().positive().default(1),limit:a.ai().int().positive().max(100).default(10)}),a.Ik({file:a.L5(),maxSize:a.ai().default(5242880),allowedTypes:a.YO(a.Yj()).default(["image/jpeg","image/png","image/webp"])});let b=a.Yj().min(1,"Role name is required").min(2,"Role name must be at least 2 characters").max(100,"Role name must be less than 100 characters").regex(/^[a-zA-Z0-9\s\-_]+$/,"Role name can only contain letters, numbers, spaces, hyphens, and underscores"),L=a.Yj().min(1,"Role description is required").min(10,"Role description must be at least 10 characters").max(500,"Role description must be less than 500 characters"),T=a.k5(["custom","system"],{errorMap:()=>({message:"Role type must be either 'custom' or 'system'"})}),j=a.zM({errorMap:()=>({message:"is_default must be a boolean value"})}),O=a.YO(a.Yj().uuid("Invalid permission ID")).min(1,"At least one permission must be selected");a.Ik({name:b,description:L,role_type:T,permission_ids:O}),a.Ik({name:b.optional(),description:L.optional(),is_default:j.optional(),permission_ids:O.optional()});let Y=e=>b.safeParse(e),C=e=>L.safeParse(e),N=e=>T.safeParse(e),F=e=>O.safeParse(e),U=e=>n.safeParse(e),G=e=>l.safeParse(e),q=e=>u.safeParse(e),x=e=>k.safeParse(e),D=e=>I.safeParse(e),M=e=>E.safeParse(e),z=e=>_.safeParse(e),B=e=>{if(!e)return{countryCode:"+91",phoneNumber:""};let r=e.replace(/[\s\-\(\)]/g,"");for(let e of[...(0,o.YA)()].sort((e,r)=>r.length-e.length))if(r.startsWith(e))return{countryCode:e,phoneNumber:r.substring(e.length)};return{countryCode:"+91",phoneNumber:r}},V=(e,r)=>{if(!e||!r)return e;let t=r.replace("+","");return e.startsWith(t)?e.substring(t.length):e.startsWith(r)?e.substring(r.length):e}},3290:(e,r,t)=>{t.r(r),t.d(r,{AuthProvider:()=>b,useAuth:()=>P,useAuthWithPermissions:()=>A,useEmailVerification:()=>R});var a=t(99776),s=t(53455),i=t(62853),o=t(12115),n=t(94054),l=t(67880),u=t(99429);let{useVerifyEmailMutation:c,useLoginMutation:d,useRegisterMutation:m,useRefreshTokenMutation:p,useGetCurrentUserQuery:g}=l.q.injectEndpoints({endpoints:e=>({verifyEmail:e.mutation({query:e=>({url:u.Sn.AUTH.VERIFY_EMAIL,method:"POST",data:e})}),login:e.mutation({query:e=>({url:u.Sn.AUTH.LOGIN,method:"POST",data:e}),invalidatesTags:["Auth","User"]}
1),register:e.mutation({query:e=>({url:u.Sn.AUTH.REGISTER,method:"POST",data:e}),invalidatesTags:["Auth","User"]}),refreshToken:e.mutation({query:()=>({url:u.Sn.AUTH.REFRESH,method:"POST"}),invalidatesTags:["Auth","User"]}),getCurrentUser:e.query({query:()=>({url:u.Sn.AUTH.PROFILE,method:"GET"}),providesTags:["User"]})})});var f=t(806),h=t(18720),y=t(75358),v=t(9143),k=t(51581),I=t(24341),E=t(3941),_=t(33016);let S={async handleAuthError(){try{if(_.a.isAuthenticated()||_.a.hasSupabaseAuthCookies()){let{data:{session:e},error:r}=await E.N.auth.getSession();if(!(!r&&(null==e?void 0:e.user))){let e=_.a.getCookie("authReset");if("true"===e)return _.a.clearAllAppCookies(),_.a.removeCookie("impersonate"),_.a.removeCookie("authReset"),await E.N.auth.signOut({scope:"local"}),!0;if(await this.tryRestoreSession())return _.a.setCookie("authReset","true",{expires:1/24}),setTimeout(()=>{window.location.reload()},100),!0;return _.a.clearAllAppCookies(),_.a.removeCookie("impersonate"),await E.N.auth.signOut({scope:"local"}),!0}}return _.a.getCookie("authReset")&&_.a.removeCookie("authReset"),!1}catch(e){return!1}},async tryRestoreSession(){try{let r=_.a.getAuthToken(),t=_.a.getRefreshToken();if(r&&t){var e;let{data:a,error:s}=await E.N.auth.setSession({access_token:r,refresh_token:t});if(!s&&(null==a||null==(e=a.session)?void 0:e.user))return!0}return!1}catch(e){return!1}},async syncAuthState(){try{return _.a.clearAllAppCookies(),_.a.removeCookie("impersonate"),await E.N.auth.signOut({scope:"local"}),!0}catch(e){return!1}}};var w=t(3377);function P(){let e=(0,v.jL)(),{isAuthenticated:r}=(0,v.GV)(e=>e.auth),t=(0,a.jE)(),{data:n,isLoading:l,error:u}=(0,s.I)({queryKey:["authUser"],queryFn:async()=>{var e;let r=await i.y.getCurrentUser();if(!r.success)throw Error((null==(e=r.error)?void 0:e.message)||"Not authenticated");return r.data},staleTime:3e5,retry:!1});(0,o.useEffect)(()=>{n?e((0,k.gV)(n)):u?e((0,k.jB)(u.message)):n||l||e((0,k.lM)())},[n,u,l,e]);let c=(0,o.useCallback)(async()=>{try{let r=await i.y.logout();return r.success&&(e((0,k.lM)()),t.clear()),r}catch(e){return{success:!1,error:{message:e instanceof Error?e.message:"Logout failed",status:500}}}},[e,t]);return{user:null!=n?n:null,loading:l,error:u?u.message:null,isAuthenticated:r,logout:c}}function A(){let e=(0,v.jL)(),r=(0,a.jE)(),{isAuthenticated:t}=(0,v.GV)(e=>e.auth),s=(0,o.useRef)(e),i=(0,o.useRef)(r);s.current=e,i.current=r;let{permissions:n,isLoading:l,error:c}=(0,v.GV)(e=>e.userProfile),{user:d,loading:m,error:p,logout:g}=P(),{isLoading:f}=(0,y.Sk)(t?u.Sn.USERS.PROFILE:"",{enabled:t,onSuccess:r=>{r&&"data"in r&&e((0,I.p)(r.data))},onError:()=>{e((0,I.Nh)("Failed to load permissions"))}});return(0,o.useEffect)(()=>{t&&f&&e((0,I.r1)(!0))},[t,f,e]),(0,o.useEffect)(()=>{let{data:e}=E.N.auth.onAuthStateChange(async(e,r)=>{if("SIGNED_IN"===e&&(null==r?void 0:r.user))"true"===_.a.getCookie("impersonate")&&(w.b.trackLogin(r.user.id,"magic_link",r.access_token),_.a.setLoginMethod("magic_link"));else if("TOKEN_REFRESHED"===e)i.current.invalidateQueries({queryKey:["authUser"]}),i.current.invalidateQueries({queryKey:[u.Sn.USERS.PROFILE]});else if("SIGNED_OUT"===e){var t;s.current((0,k.lM)()),s.current((0,I.WF)()),i.current.clear(),(null==(t=window)?void 0:t.noRedirectonLogout)||setTimeout(()=>{window.location.href="/login?reason=token_refresh_failed&returnUrl=".concat(encodeURIComponent(window.location.href))},100)}});return()=>e.subscription.unsubscribe()},[t]),{user:d,permissions:n||null,isAuthenticated:t,isLoadingPermissions:l,permissionError:c,loading:m,error:p,logout:g}}function R(){let[e,r]=(0,o.useState)(""),[t,a]=(0,o.useState)(null),[s,i]=(0,o.useState)(!1),[l,u]=(0,o.useState)(""),[d,m]=(0,o.useState)({}),[p,g]=(0,o.useState)(!1),y=(0,n.d)(e,500),[v]=c();return(0,o.useEffect)(()=>{(async()=>{if(!y.trim()||!f.y4.safeParse(y).success){a(null),g(!1);return}i(!0);try{let e=await v({email:y}).unwrap();a(e.email_found),g(e.can_login),u(e.message),e.email_found&&e.can_login?h.oR.success(e.message||"Email verified - ready to login"):h.oR.error(e.message)}catch(t){var e;a(null),g(!1);let r=(null==t||null==(e=t.data)?void 0:e.message)||(null==t?void 0:t.message)||"Email verification failed";h.oR.error("Verification failed: ".concat(r))}finally{i(!1)}})()},[y,v]),{email:e,debouncedEmail:y,setEmail:e=>{if(r(e),d.email&&m({}),a(null),g(!1),u(""),e.trim()){let r=f.y4.safeParse(e);r.success||m({email:r.error.errors.map(e=>e.message)})}},isVerifyingEmail:s,emailFound:t,canLogin:p,verificationMessage:l,fieldErrors:d,getIsLoginButtonEnabled:e=>!0===t&&p&&!e&&!s,validateEmailForLogin:()=>
1{if(s)return h.oR.warning("Please wait while we verify your email address"),!1;if(!0!==t)return h.oR.error(l||"Please verify your email first"),!1;if(!p)return h.oR.error(l||"Your account is suspended or banned. Contact support for assistance."),!1;let r=f.y4.safeParse(e);if(!r.success){let e=r.error.errors.map(e=>e.message);return m({email:e}),h.oR.error("Invalid email format: ".concat(e[0])),!1}return m({}),!0}}}let b=e=>{let{children:r}=e;return(0,o.useEffect)(()=>{S.handleAuthError()},[]),A(),o.createElement(o.Fragment,null,r)}},3377:(e,r,t)=>{t.d(r,{b:()=>p});var a=t(50391),s=t(1474),i=t(38511);let o=null,n=async()=>{try{let e=await (()=>{if(!o){let e=i.F.FINGERPRINT.API_KEY;if(!e)return null;o=s.Hh({apiKey:e})}return o})();if(!e)return console.error("getDeviceFingerprint: Failed to get fingerprint agent"),null;let r=await e.get();return{visitorId:r.visitorId,confidence:r.confidence.score,components:r.components}}catch(e){return console.error("Error getting device fingerprint:",e),null}},l=async()=>{try{let e=await n();if(!e)return null;return{visitorId:e.visitorId,confidence:e.confidence,userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,screenResolution:"".concat(screen.width,"x").concat(screen.height),timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,components:e.components}}catch(e){return console.error("Error getting device info:",e),null}};var u=t(73977),c=t(3941);let d=!1,m=!1,p={async trackLogin(e,r,t){if(d)return void(0,u.yG)("info","Login already tracked for this session",{userId:e});try{let s=await l();if(!s)return void(0,u.yG)("warn","Device info not available, skipping session tracking",{userId:e});let i=t;if(!i){(0,u.yG)("info","Access token not provided, fetching from Supabase session",{userId:e});let{data:{session:r},error:t}=await c.N.auth.getSession();t||!r?(0,u.yG)("error","Failed to get session for token",{userId:e,error:null==t?void 0:t.message}):(i=r.access_token,(0,u.yG)("info","Access token retrieved from session",{userId:e,hasToken:!!i}))}let o={user_id:e,device_fingerprint:s.visitorId,user_agent:s.userAgent,ip_address:"",login_method:r,session_status:"active",accessed_phi:!1,phi_access_purpose:""};(0,u.yG)("info","Tracking login session",{userId:e,loginMethod:r,hasToken:!!i});let n=i?{Authorization:"Bearer ".concat(i)}:{};await a.default.post("/admin/sessions",o,{headers:n}),d=!0,(0,u.yG)("info","Login session tracked successfully",{userId:e,loginMethod:r})}catch(t){(0,u.yG)("error","Error tracking login session",{userId:e,loginMethod:r,error:t instanceof Error?t.message:"Unknown error"})}},async trackLogout(e,r,t){if(m)return void(0,u.yG)("info","Logout already tracked for this session",{userId:e});try{let s=await l();if(!s)return void(0,u.yG)("warn","Device info not available, skipping logout tracking",{userId:e});let i=t;if(!i){(0,u.yG)("info","Access token not provided, fetching from Supabase session",{userId:e});let{data:{session:r},error:t}=await c.N.auth.getSession();t||!r?(0,u.yG)("warn","Failed to get session for token (might be already logged out)",{userId:e,error:null==t?void 0:t.message}):(i=r.access_token,(0,u.yG)("info","Access token retrieved from session",{userId:e,hasToken:!!i}))}let o={user_id:e,device_fingerprint:s.visitorId,user_agent:s.userAgent,ip_address:"",login_method:r,session_status:"inactive",accessed_phi:!1,phi_access_purpose:""};(0,u.yG)("info","Tracking logout session",{userId:e,loginMethod:r,hasToken:!!i});let n=i?{Authorization:"Bearer ".concat(i)}:{};await a.default.put("/admin/sessions/logout",o,{headers:n}),m=!0,(0,u.yG)("info","Logout session tracked successfully",{userId:e,loginMethod:r})}catch(t){(0,u.yG)("error","Error tracking logout session",{userId:e,loginMethod:r,error:t instanceof Error?t.message:"Unknown error"})}},reset(){d=!1,m=!1}}},9143:(e,r,t)=>{t.d(r,{GV:()=>a.GV,jL:()=>a.jL});var a=t(94419)},24341:(e,r,t)=>{t.d(r,{Ay:()=>l,Nh:()=>o,WF:()=>n,p:()=>i,r1:()=>s});let a=(0,t(26286).Z0)({name:"userProfile",initialState:{profileData:null,permissions:null,isLoading:!0,error:null},reducers:{setLoading:(e,r)=>{e.isLoading=r.payload,r.payload&&(e.error=null)},setUserProfile:(e,r)=>{let t=r.payload;t?(e.profileData=t,e.permissions=t.permissions):(e.profileData=null,e.permissions=null),e.isLoading=!1,e.error=null},setError:(e,r)=>{e.error=r.payload,e.isLoading=!1},clearUserProfile:e=>{e.profileData=null,e.permissions=null,e.isLoading=!1,e.error=null}}}),{setLoading:s,setUserProfile:i,setError:o,clearUserProfile:n}=a.actions,l=a.reducer},38511:(e,r,t)=>{t.d(r,{F:()=>s});var a=t(95704);let s={API:{BASE_URL:"https://api.xyrus.ai/v1"},SUPABASE:{URL:"https://qvcbucwflatgxonyxpaw.supabase.co",ANON_KEY:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InF2Y2J1Y3dmbGF0Z3hvbnl4cGF3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzYyMzg4NTEsImV4cCI6MjA5MTgxNDg
11MX0.iYR4NCu7FJKh3qUn7sW2Cag4PUwfiolo3sl7iFWMm7E"},AUTH:{SECRET:a.env.NEXTAUTH_SECRET||"your-secret-key",NEXTAUTH_URL:a.env.NEXTAUTH_URL||"http://localhost:3000"},DATABASE:{URL:a.env.DATABASE_URL||"your-supabase-connection-string"},FINGERPRINT:{API_KEY:a.env.NEXT_PUBLIC_FINGERPRINT_API_KEY||""},FILE_UPLOAD:{MAX_SIZE_MB:parseInt("15",10)}}},51581:(e,r,t)=>{t.d(r,{Ay:()=>p,gV:()=>i,jB:()=>o,lM:()=>n});let a=(0,t(26286).Z0)({name:"auth",initialState:{user:null,isAuthenticated:!1,isLoading:!1,error:null},reducers:{setLoading:(e,r)=>{e.isLoading=r.payload,r.payload&&(e.error=null)},setUser:(e,r)=>{e.user=r.payload,e.isAuthenticated=!0,e.isLoading=!1,e.error=null},setAuthError:(e,r)=>{e.error=r.payload,e.isLoading=!1},clearUser:e=>{e.user=null,e.isAuthenticated=!1,e.isLoading=!1,e.error=null},loginStart:e=>{e.isLoading=!0,e.error=null},loginSuccess:(e,r)=>{e.isLoading=!1,e.isAuthenticated=!0,e.user=r.payload,e.error=null},loginFailure:(e,r)=>{e.isLoading=!1,e.error=r.payload},logout:e=>{e.user=null,e.isAuthenticated=!1,e.isLoading=!1,e.error=null},clearError:e=>{e.error=null}}}),{setLoading:s,setUser:i,setAuthError:o,clearUser:n,loginStart:l,loginSuccess:u,loginFailure:c,logout:d,clearError:m}=a.actions,p=a.reducer},62853:(e,r,t)=>{t.d(r,{y:()=>l});var a=t(3941),s=t(33016),i=t(3377),o=t(73977),n=t(38511);let l={async sendPasswordlessLoginEmail(e){try{(0,o.yG)("info","Sending OTP via backend API",{email:e});let r=await fetch("".concat(n.F.API.BASE_URL,"/admin/auth/email/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})}),t=await r.json();if(!r.ok)return(0,o.yG)("error","Backend OTP generation failed",{email:e,status:r.status,error:t.detail||t.message}),{success:!1,error:{message:t.detail||t.message||"Failed to send OTP",status:r.status}};return(0,o.yG)("info","OTP sent successfully via backend",{email:e}),{success:!0,data:{success:!0,message:t.message||"Verification code has been sent to your email",expires_in:t.expires_in||120,status_code:200}}}catch(r){return(0,o.yG)("error","Failed to send OTP",{email:e,error:r instanceof Error?r.message:"Unknown error"}),{success:!1,error:{message:r instanceof Error?r.message:"Failed to send verification code",status:500}}}},async verifyOtp(e,r){try{var t;(0,o.yG)("info","Verifying OTP with Supabase",{email:e});let{data:n,error:l}=await a.N.auth.verifyOtp({email:e,token:r,type:"email"});if(l)return(0,o.yG)("error","Supabase OTP verification failed",{email:e,error:l.message}),{success:!1,error:{message:l.message||"Invalid verification code",status:l.status||400}};if(!n.user||!n.session)return(0,o.yG)("error","Supabase OTP verification returned no user/session",{email:e}),{success:!1,error:{message:"Authentication failed",status:400}};(0,o.yG)("info","OTP verification successful",{email:e,userId:n.user.id});let{data:u,error:c}=await a.N.auth.setSession({access_token:n.session.access_token,refresh_token:n.session.refresh_token});c?(0,o.yG)("error","Failed to set session after OTP verification",{email:e,error:c.message}):(0,o.yG)("info","Session set successfully",{userId:n.user.id,hasUser:!!u.user,hasSession:!!u.session});let{data:d,error:m}=await a.N.auth.getSession();m||!d.session?(0,o.yG)("error","Failed to get session after OTP verification",{email:e,error:null==m?void 0:m.message}):(0,o.yG)("info","Session retrieved successfully",{userId:n.user.id,hasAccessToken:!!d.session.access_token,hasRefreshToken:!!d.session.refresh_token}),s.a.setLoginMethod("otp"),(0,o.yG)("info","Login method cookie set",{loginMethod:"otp"});let p=(null==d||null==(t=d.session)?void 0:t.access_token)||n.session.access_token;return i.b.trackLogin(n.user.id,"otp",p),{success:!0,data:{user:{id:n.user.id,email:n.user.email||"",created_at:n.user.created_at,updated_at:n.user.updated_at||n.user.created_at},session:{access_token:n.session.access_token,refresh_token:n.session.refresh_token,user:{id:n.user.id,email:n.user.email||"",created_at:n.user.created_at,updated_at:n.user.updated_at||n.user.created_at}}}}}catch(r){return(0,o.yG)("error","OTP verification error",{email:e,error:r instanceof Error?r.message:"Unknown error"}),{success:!1,error:{message:r instanceof Error?r.message:"Failed to verify OTP",status:500}}}},async resendOtp(e){try{(0,o.yG)("info","Resending OTP via backend API",{email:e});let r=await fetch("".concat(n.F.API.BASE_URL,"/admin/auth/email/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})}),t=await r.json();if(!r.ok)return(0,o.yG)("error","Backend OTP resend failed",{email:e,status:r.status,error:t.detail||t.message}),{success:!1,error:{message:t.detail||t.message||"Failed to resend OTP",status:r.status}};return(0,o.yG)("info","OTP resent successfully via backend",{email:e}),{success:!0,data:{success:!0,message:t.message||"New verification code has been sent to your email",expires_in:t.expires_in||120,status_code:200}}}catch(r){return(0,o.yG)("error","Failed to resend OTP",{email:e,error:r instanceof Error?r.message:"Unknown error"}),{success:!1,error:{message:r instanceof Error?r.message:"Failed to resend verification code",status:500}}}},async getCurrentUser(){try{let{data:{user:e},error:r}=await a.N.auth.getUser();if(r||!e)return(s.a.isAuthenticated()||s.a.hasSupabaseAuthCookies())&&await this.logout(!0),{success:!1,error:{message:"User not authenticated",status:401}};return{success:!0,data:{id:e.id,email:e.email||"",created_at:e.created_at,updated_at:e.updated_at||e.created_at}}}catch(e){return{success:!1,error:{message:e instanceof Error?e.message:"Failed to get current user",status:500}}}},async logout(e){try{window.noRedirectonLogout=null!=e&&e;let{data:{user:r}}=await a.N.auth.getUser();if(null==r?void 0:r.id){let e="true"===s.a.getCookie("impersonate");i.b.trackLogout(r.id,e?"magic_link":"otp")}let{error:t}=await a.N.auth.signOut();if(t)return{success:!1,error:{message:t.message,status:t.status||400}};return s.a.clearAllAppCookies(),s.a.removeCookie("impersonate"),s.a.removeLoginMethod(),{success:!0,data:{message:"Logged out successfully"}}}catch(e){return{success:!1,error:{message:e instanceof Error?e.message:"Failed to logout",status:500}}}},async getSession(){try{let{data:{session:e},error:r}=await a.N.auth.getSession();if(r||!e)return{success:!1,error:{message:"No active session",status:401}};return{success:!0,data:{access_token:e.access_token,refresh_token:e.refresh_token,user:{id:e.user.id,email:e.user.email||"",created_at:e.user.created_at,updated_at:e.user.updated_at||e.user.created_at}}}}catch(e){return{success:!1,error:{message:e instanceof Error?e.message:"Failed to get session",status:500}}}}}},67880:(e,r,t)=>{t.d(r,{q:()=>i});var a=t(86046),s=t(50391);let i=(0,a.xP)({reducerPath:"api",baseQuery:async e=>{let{url:r,method:t,data:a,params:i,headers:o}=e;try{let e={url:r,...t&&{method:t},...void 0!==a&&{data:a},...void 0!==i&&{params:i},...void 0!==o&&{headers:o}};return{data:(await (0,s.default)(e)).data}}catch(e){var n,l;return{error:{status:null==(n=e.response)?void 0:n.status,data:(null==(l=e.response)?void 0:l.data)||e.message}}}},tagTypes:["User","Auth","Post","Comment","Profile","Project"],endpoints:()=>({})}),{usePrefetch:o}=i},94054:(e,r,t)=>{t.d(r,{d:()=>s});var a=t(12115);function s(e,r){let[t,s]=(0,a.useState)(e);return(0,a.useEffect)(()=>{let t=setTimeout(()=>{s(e)},r);return()=>{clearTimeout(t)}},[e,r]),t}},94419:(e,r,t)=>{t.d(r,{pq:()=>L,jL:()=>T,GV:()=>j});var a=t(26286),s=t(1213),i=t(51581);let o={items:[],selectedItem:null,isLoading:!1,error:null,filters:{status:"",search:""},pagination:{page:1,limit:10,total:0}},n=(0,a.zD)("example/fetchItems",async(e,r)=>{let{rejectWithValue:t}=r;
1try{let r=await fetch("/api/example?".concat(new URLSearchParams(e)));if(!r.ok)throw Error("Failed to fetch items");return await r.json()}catch(e){return t(e instanceof Error?e.message:"An error occurred")}}),l=(0,a.zD)("example/createItem",async(e,r)=>{let{rejectWithValue:t}=r;try{let r=await fetch("/api/example",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok)throw Error("Failed to create item");return await r.json()}catch(e){return t(e instanceof Error?e.message:"An error occurred")}}),u=(0,a.zD)("example/updateItem",async(e,r)=>{let{id:t,data:a}=e,{rejectWithValue:s}=r;try{let e=await fetch("/api/example/".concat(t),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!e.ok)throw Error("Failed to update item");return await e.json()}catch(e){return s(e instanceof Error?e.message:"An error occurred")}}),c=(0,a.zD)("example/deleteItem",async(e,r)=>{let{rejectWithValue:t}=r;try{if(!(await fetch("/api/example/".concat(e),{method:"DELETE"})).ok)throw Error("Failed to delete item");return e}catch(e){return t(e instanceof Error?e.message:"An error occurred")}}),d=(0,a.Z0)({name:"example",initialState:o,reducers:{setSelectedItem:(e,r)=>{e.selectedItem=r.payload},setFilters:(e,r)=>{e.filters={...e.filters,...r.payload},e.pagination.page=1},setPagination:(e,r)=>{e.pagination={...e.pagination,...r.payload}},clearError:e=>{e.error=null},resetState:()=>o},extraReducers:e=>{e.addCase(n.pending,e=>{e.isLoading=!0,e.error=null}).addCase(n.fulfilled,(e,r)=>{e.isLoading=!1,e.items=r.payload.items,e.pagination=r.payload.pagination}).addCase(n.rejected,(e,r)=>{e.isLoading=!1,e.error=r.payload}),e.addCase(l.pending,e=>{e.isLoading=!0,e.error=null}).addCase(l.fulfilled,(e,r)=>{e.isLoading=!1,e.items.unshift(r.payload),e.pagination.total+=1}).addCase(l.rejected,(e,r)=>{e.isLoading=!1,e.error=r.payload}),e.addCase(u.pending,e=>{e.isLoading=!0,e.error=null}).addCase(u.fulfilled,(e,r)=>{var t;e.isLoading=!1;let a=e.items.findIndex(e=>e.id===r.payload.id);-1!==a&&(e.items[a]=r.payload),(null==(t=e.selectedItem)?void 0:t.id)===r.payload.id&&(e.selectedItem=r.payload)}).addCase(u.rejected,(e,r)=>{e.isLoading=!1,e.error=r.payload}),e.addCase(c.pending,e=>{e.isLoading=!0,e.error=null}).addCase(c.fulfilled,(e,r)=>{var t;e.isLoading=!1,e.items=e.items.filter(e=>e.id!==r.payload),e.pagination.total-=1,(null==(t=e.selectedItem)?void 0:t.id)===r.payload&&(e.selectedItem=null)}).addCase(c.rejected,(e,r)=>{e.isLoading=!1,e.error=r.payload})}}),{setSelectedItem:m,setFilters:p,setPagination:g,clearError:f,resetState:h}=d.actions,y=d.reducer;var v=t(24341),k=t(33016);let I="ipconfig",E=(0,a.zD)("ipInfo/fetchIPInfo",async(e,r)=>{let{rejectWithValue:t}=r;try{let e=await fetch("https://ipinfo.io?token=10ff35cdc096c5");if(!e.ok)throw Error("HTTP error! status: ".concat(e.status));let r=await e.json(),t={...r,timestamp:Date.now()};return k.a.setCookie(I,JSON.stringify(t),{expires:3,secure:!0,sameSite:"strict"},!1),r}catch(e){return console.error("Failed to fetch IP info:",e),t(e instanceof Error?e.message:"Failed to fetch IP info")}}),_=(0,a.zD)("ipInfo/loadFromCookies",async(e,r)=>{let{dispatch:t,getState:a}=r;try{let e=a();if(e.ipInfo.data&&e.ipInfo.lastFetched&&Date.now()-e.ipInfo.lastFetched<2592e5)return e.ipInfo.data;let r=k.a.getCookie(I);if(!r)return t(E());let s=JSON.parse(r),i=Date.now();if(!s.timestamp||i-s.timestamp>2592e5)return t(E());let{timestamp:o,...n}=s;return{ipData:n,timestamp:o}}catch(e){return console.error("Failed to load IP info from cookies:",e),t(E())}}),S=(()=>{try{let e=k.a.getCookie(I);if(e){let r=JSON.parse(e),t=Date.now();if(r.timestamp&&t-r.timestamp<2592e5){let{timestamp:e,...t}=r;return{data:t,error:null,lastFetched:e}}}}catch(e){console.error("Failed to initialize IP info from cookies:",e)}return{data:null,error:null,lastFetched:null}})(),w=(0,a.Z0)({name:"ipInfo",initialState:S,reducers:{clearIPInfo:e=>{e.data=null,e.error=null,e.lastFetched=null,k.a.removeCookie(I)},clearError:e=>{e.error=null}},extraReducers:e=>{e.addCase(E.fulfilled,(e,r)=>{e.data=r.payload,e.error=null,e.lastFetched=Date.now()}).addCase(E.rejected,(e,r)=>{e.error=r.payload||"Failed to fetch IP info"}).addCase(_.fulfilled,(e,r)=>{if(r.payload&&"object"==typeof r.payload){if("country"in r.payload)e.data=r.payload,e.lastFetched=Date.now();else if("ipData"in r.payload&&"timestamp"in r.payload){let t=r.payload;e.data=t.ipData,e.lastFetched=t.timestamp}}e.error=null}).addCase(_.rejected,(e,r)=>{e.error=r.payload||"Failed to load IP info"})}}),{clearIPInfo:P,clearError:A}=w.actions,R=w.reducer;var b=t(67880);function L(e){return(0,a.U1)({reducer:{auth:i.Ay,example:y,userProfile:v.Ay,ipInfo:R,[b.q.reducerPath]:b.q.reducer},middleware:e=>e({serializableCheck:{ignoredActions:["persist/PERSIST"]}}).concat(b.q.middleware),preloadedState:e})}L();let T=()=>(0,s.wA)(),j=s.d4}}]);
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.