1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6154],{569:function(e,t,a){a.d(t,{F_:function(){return p},GG:function(){return c},Io:function(){return h},O2:function(){return m},UV:function(){return d}});var r=a(11713),o=a(29827),s=a(21770),n=a(3227);let i="erphub-users";function l(){try{let e=localStorage.getItem(i);if(e)return JSON.parse(e)}catch(e){}return[]}function u(e){localStorage.setItem(i,JSON.stringify(e))}function c(e){if(!e)return;let t=l();if(t.find(t=>t.id===e.id||t.email.toLowerCase()===e.email.toLowerCase()))return;let a=new Date().toISOString();t.push({id:e.id,email:e.email,firstName:e.firstName||"",lastName:e.lastName||"",role:e.role,companyName:e.companyName||null,phone:null,password:null,isActive:!0,createdAt:a,updatedAt:a}),u(t)}function d(e){return(0,r.a)({queryKey:["users",null==e?void 0:e.role,null==e?void 0:e.search],queryFn:async()=>{try{let e=await n.Z.get("/auth/users");e.data.success&&e.data.data&&function(e){let t=l(),a=!1;for(let r of e){let e=t.findIndex(e=>e.id===r.id||e.email.toLowerCase()===r.email.toLowerCase());if(-1!==e){let o=t[e],s={...o,id:r.id,email:r.email,firstName:r.firstName||o.firstName,lastName:r.lastName||o.lastName,role:r.role,companyName:r.companyName||o.companyName,updatedAt:new Date().toISOString()};(o.firstName!==s.firstName||o.lastName!==s.lastName||o.role!==s.role||o.email!==s.email)&&(t[e]=s,a=!0)}else{let e=new Date().toISOString();t.push({id:r.id,email:r.email,firstName:r.firstName||"",lastName:r.lastName||"",role:r.role,companyName:r.companyName||null,phone:null,password:null,isActive:!0,createdAt:e,updatedAt:e}),a=!0}}a&&u(t)}(e.data.data)}catch(e){}try{let e=localStorage.getItem("auth-storage");if(e){var t;let a=JSON.parse(e),r=null==a?void 0:null===(t=a.state)||void 0===t?void 0:t.user;r&&!l().find(e=>e.id===r.id||e.email.toLowerCase()===r.email.toLowerCase())&&c(r)}}catch(e){}let a=l();if((null==e?void 0:e.role)&&(a=a.filter(t=>t.role===e.role)),null==e?void 0:e.search){let t=e.search.toLowerCase();a=a.filter(e=>e.firstName.toLowerCase().includes(t)||e.lastName.toLowerCase().includes(t)||e.email.toLowerCase().includes(t)||e.companyName&&e.companyName.toLowerCase().includes(t))}return a.sort((e,t)=>new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()),a},staleTime:3e4})}function m(){let e=(0,o.NL)();return(0,s.D)({mutationFn:async e=>{let t=l();if(t.some(t=>t.email.toLowerCase()===e.email.toLowerCase()))throw Error("A user with this email already exists.");let a=null;try{var r;let t=await n.Z.post("/auth/register",{email:e.email,password:e.password||"default123456",firstName:e.firstName,lastName:e.lastName,companyName:e.companyName,phone:e.phone});if(a=(null===(r=t.data.data)||void 0===r?void 0:r.user.id)||null,"CLIENT"!==e.role&&a)try{await n.Z.patch("/auth/update-role",{email:e.email,role:e.role})}catch(e){}}catch(e){}let o=new Date().toISOString(),s={id:a||crypto.randomUUID(),email:e.email,firstName:e.firstName,lastName:e.lastName,role:e.role,companyName:e.companyName||null,phone:e.phone||null,password:e.password||null,isActive:!0,createdAt:o,updatedAt:o};return t.push(s),u(t),s},onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}async function f(e,t){try{if(await n.Z.post("/auth/register",{email:e.email,password:t||e.password||"default123456",firstName:e.firstName,lastName:e.lastName,companyName:e.companyName,phone:e.phone}),"CLIENT"!==e.role)try{await n.Z.patch("/auth/update-role",{email:e.email,role:e.role})}catch(e){}}catch(e){}}function h(){let e=(0,o.NL)();return(0,s.D)({mutationFn:async e=>{let{id:t,data:a}=e,r=l(),o=r.findIndex(e=>e.id===t);if(-1===o)throw Error("User not found.");let s=r[o];if(a.email&&a.email.toLowerCase()!==s.email.toLowerCase()&&r.some(e=>e.email.toLowerCase()===a.email.toLowerCase()))throw Error("A user with this email already exists.");if((a.password||a.role)&&await f(s,a.password||void 0),a.password&&a.password.trim())try{await n.Z.post("/auth/reset-password",{email:s.email,newPassword:a.password})}catch(e){}if(a.role&&a.role!==s.role)try{await n.Z.patch("/auth/update-role",{email:s.email,role:a.role})}catch(e){}let i={};for(let[e,t]of Object.entries(a))void 0!==t&&""!==t&&(i[e]=t);let c={...s,...i,updatedAt:new Date().toISOString()};r[o]=c,u(r);try{let e=localStorage.getItem("auth-storage");if(e){var d,m;let a=JSON.parse(e),r=null==a?void 0:null===(d=a.state)||void 0===d?void 0:d.user;r&&(r.id===t||(null===(m=r.email)||void 0===m?void 0:m.toLowerCase())===c.email.toLowerCase())&&(a.state.user={...r,f
1irstName:c.firstName,lastName:c.lastName,email:c.email,role:c.role,companyName:c.companyName},localStorage.setItem("auth-storage",JSON.stringify(a)))}}catch(e){}return c},onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function p(){let e=(0,o.NL)();return(0,s.D)({mutationFn:async e=>{u(l().filter(t=>t.id!==e))},onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}},3227:function(e,t,a){var r=a(83464),o=a(78705);let s=r.Z.create({baseURL:o.T5,headers:{"Content-Type":"application/json"},timeout:3e4});s.interceptors.request.use(e=>{{let a=localStorage.getItem("auth-storage");if(a)try{var t;let r=JSON.parse(a),o=null==r?void 0:null===(t=r.state)||void 0===t?void 0:t.accessToken;o&&(e.headers.Authorization="Bearer ".concat(o))}catch(e){}}return e});let n=!1,i=[];function l(e,t){i.forEach(a=>{t?a.resolve(t):a.reject(e)}),i=[]}s.interceptors.response.use(e=>e,async e=>{var t,a,u;let c=e.config;if((null===(t=e.response)||void 0===t?void 0:t.status)===401&&!c._retry){let t=localStorage.getItem("auth-storage"),d=t?JSON.parse(t):null;if(n)return new Promise((e,t)=>{i.push({resolve:t=>{c.headers.Authorization="Bearer ".concat(t),e(s(c))},reject:t})});c._retry=!0,n=!0;try{if(!t)throw Error("No stored auth");let e=null==d?void 0:null===(a=d.state)||void 0===a?void 0:a.refreshToken;if(!e)throw Error("No refresh token");let{data:n}=await r.Z.post("".concat(o.T5,"/auth/refresh"),{refreshToken:e}),i=n.data.tokens.accessToken;return d.state.accessToken=n.data.tokens.accessToken,d.state.refreshToken=n.data.tokens.refreshToken,d.state.user=n.data.user,localStorage.setItem("auth-storage",JSON.stringify(d)),l(null,i),c.headers.Authorization="Bearer ".concat(i),s(c)}catch(t){return l(t,null),(null===(u=e.response)||void 0===u?void 0:u.status)===401&&(localStorage.removeItem("auth-storage"),window.location.href="/login"),Promise.reject(t)}finally{n=!1}}return Promise.reject(e)}),t.Z=s},78705:function(e,t,a){a.d(t,{T5:function(){return r},bQ:function(){return s},eo:function(){return i},f3:function(){return n},zH:function(){return o}});let r="https://web-production-45115.up.railway.app/api",o={FIN:"Finance",HR:"Human Resources",MRP:"Production Planning",SLS:"Sales",PUR:"Purchasing",INV:"Inventory",QUA:"Quality",PRD:"Production",CRM:"Customer Relations",WMS:"Warehouse Management",TRN:"Transportation",GEN:"General"},s=["SAP Business One","Canias ERP","Canias Web","IT Consultation","Custom Development","Other"],n={OPEN:"Open",IN_PROGRESS:"In Progress",WAITING_CLIENT:"Waiting for Client",RESOLVED:"Resolved",CLOSED:"Closed"},i={LOW:"Low",MEDIUM:"Medium",HIGH:"High",CRITICAL:"Critical"}},26154:function(e,t,a){a.d(t,{t:function(){return i}});var r=a(3011),o=a(89134),s=a(3227),n=a(569);let i=(0,r.U)()((0,o.tJ)(e=>({user:null,accessToken:null,refreshToken:null,isLoading:!1,_hasHydrated:!1,setHasHydrated:t=>e({_hasHydrated:t}),login:async t=>{e({isLoading:!0});try{let{user:a,tokens:r}=(await s.Z.post("/auth/login",t)).data.data;e({user:a,accessToken:r.accessToken,refreshToken:r.refreshToken,isLoading:!1});try{let e={state:{user:a,accessToken:r.accessToken,refreshToken:r.refreshToken},version:0};localStorage.setItem("auth-storage",JSON.stringify(e))}catch(e){}(0,n.GG)(a)}catch(t){var a,r,o;throw e({isLoading:!1}),Error((null==t?void 0:null===(o=t.response)||void 0===o?void 0:null===(r=o.data)||void 0===r?void 0:null===(a=r.error)||void 0===a?void 0:a.message)||"Invalid email or password")}},register:async t=>{e({isLoading:!0});try{let{user:a,tokens:r}=(await s.Z.post("/auth/register",t)).data.data;e({user:a,accessToken:r.accessToken,refreshToken:r.refreshToken,isLoading:!1}),(0,n.GG)(a)}catch(t){throw e({isLoading:!1}),t}},logout:async()=>{try{await s.Z.post("/auth/logout")}catch(e){}e({user:null,accessToken:null,refreshToken:null})},setUser:t=>e({user:t}),clearAuth:()=>e({user:null,accessToken:null,refreshToken:null})}),{name:"auth-storage",partialize:e=>({user:e.user,accessToken:e.accessToken,refreshToken:e.refreshToken}),onRehydrateStorage:()=>e=>{null==e||e.setHasHydrated(!0)}}))}}]);
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.