"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8378],{10352:(e,t,r)=>{r.d(t,{FH:()=>h,Tl:()=>S,hS:()=>g});var a=r(7656);async function s(e){let{clientSecret:t,method:r,uri:a,timestamp:s,clientId:n,body:c=null}=e,i={method:r.toUpperCase(),uri:a,timestamp:s,client_id:n},l=r.toUpperCase();c&&["POST","PUT","PATCH","DELETE"].includes(l)&&(i.body=c);let u=Object.keys(i).sort().map(e=>i[e]).join("|");return await o(u,t)}async function o(e,t){{let r=new TextEncoder,a=r.encode(t),s=r.encode(e),o=await window.crypto.subtle.importKey("raw",a,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return Array.from(new Uint8Array(await window.crypto.subtle.sign("HMAC",o,s))).map(e=>e.toString(16).padStart(2,"0")).join("")}}var n=r(95704);let c=new a.A,i=n.env.APP_CLIENT_ID||"eb284806-82b7-4252-bc14-2018c4f11da2",l=n.env.APP_CLIENT_SECRET||"acbb25f6392350a64933c052e306f5aeb2f12d910ba46989b12f03c48572b6e6",u=async e=>{let t;try{t=await e.json()}catch(e){console.error("JSON parse error:",e),t={}}return e.ok?{success:void 0===t.success||t.success,message:t.message,data:void 0!==t.data?t.data:t,status:e.status}:{success:t.success||!1,message:t.message,error:t.error||{message:"Request failed"},status:e.status}},g=(e,t)=>{let r,a=t?"[".concat(t,"]"):"[API]";return e&&"object"==typeof e&&"message"in e&&"status"in e?(e.timestamp||(e.timestamp=new Date().toISOString()),t&&!e.message.includes(t)&&(e.message="".concat(t,": ").concat(e.message)),console.error("".concat(a," Structured Error:"),e),e):(r="string"==typeof e?{message:t?"".concat(t,": ").concat(e):e,status:0,code:"UNKNOWN_ERROR",timestamp:new Date().toISOString(),originalError:e}:e instanceof Error?{message:t?"".concat(t,": ").concat(e.message):e.message,status:0,code:d(e),timestamp:new Date().toISOString(),originalError:e,stack:void 0}:e&&"object"==typeof e?m(e,t):{message:t?"".concat(t,": Unknown error occurred"):"Unknown error occurred",status:0,code:"UNKNOWN_ERROR",timestamp:new Date().toISOString(),originalError:e},console.error("".concat(a," Normalized Error:"),r),r)},d=e=>"TypeError"===e.name&&e.message.includes("fetch")?"NETWORK_CONNECTION_ERROR":"AbortError"===e.name?"REQUEST_TIMEOUT":"SyntaxError"===e.name?"INVALID_RESPONSE_FORMAT":"TypeError"===e.name?"TYPE_ERROR":e.name||"UNKNOWN_ERROR",m=(e,t)=>{var r;let a={message:"Unknown error occurred",status:e.status||e.statusCode||0,code:e.code||"UNKNOWN_ERROR",timestamp:new Date().toISOString(),originalError:e};return e.message?a.message=e.message:(null==(r=e.error)?void 0:r.message)?a.message=e.error.message:e.error_message?a.message=e.error_message:e.detail?a.message=e.detail:e.title&&(a.message=e.title),t&&!a.message.includes(t)&&(a.message="".concat(t,": ").concat(a.message)),e.fieldErrors?a.fieldErrors=e.fieldErrors:e.errors&&"object"==typeof e.errors&&(a.fieldErrors=p(e.errors)),e.details&&(a.details=e.details),e.type&&(a.type=e.type),e.url&&(a.url=e.url),e.statusText&&(a.statusText=e.statusText),a},p=e=>{let t={};return e&&"object"==typeof e&&Object.keys(e).forEach(r=>{let a=e[r];Array.isArray(a)?t[r]=a.map(e=>String(e)):"string"==typeof a?t[r]=[a]:a&&(t[r]=[String(a)])}),t},f=async e=>{let{method:t,endpoint:r,body:a=null,requiresAuth:o=!0,isSecure:n=!1}=e;try{let e=function(){let e=new Date,t=-e.getTimezoneOffset(),r=Math.abs(t),a=Math.floor(r/60).toString().padStart(2,"0"),s=(r%60).toString().padStart(2,"0"),o="".concat(t>=0?"+":"-").concat(a,":").concat(s),n=e.getFullYear(),c=(e.getMonth()+1).toString().padStart(2,"0"),i=e.getDate().toString().padStart(2,"0"),l=e.getHours().toString().padStart(2,"0"),u=e.getMinutes().toString().padStart(2,"0"),g=e.getSeconds().toString().padStart(2,"0");return"".concat(n,"-").concat(c,"-").concat(i,"T").concat(l,":").concat(u,":").concat(g).concat(o)}(),g="".concat("https://mainapi.gisserpong.com").concat(r),d={"Content-Type":"application/json",Accept:"application/json","X-Client-ID":i,"X-Timestamp":e};if(n){let o=a?JSON.stringify(a):"",n=await s({clientSecret:l,method:t,uri:r,timestamp:e,clientId:i,body:o});d["X-Signature"]=n}if(o){let e=c.get("auth_token");e&&(d.Authorization="Bearer ".concat(e))}let m={method:t,headers:d,credentials:"include"};a&&["POST","PUT","PATCH","DELETE"].includes(t.toUpperCase())&&(m.body=JSON.stringify(a));let p=await fetch(g,m);return u(p)}catch(e){return u(e)}},h={get:async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return f({method:"GET",endpoint:e,isSecure:t})},post:async function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return f({method:"POST",endpoint:e,body:t,isSecure:r})},put:async function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return f({method:"PUT",endpoint:e,body:t,isSecure:r})},patch:async function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return f({method:"PATCH",endpoint:e,body:t,isSecure:r})},delete:async function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return f({method:"DELETE",endpoint:e,isSecure:t})}},S=e=>{401===e&&(c.remove("auth_token",{path:"/"}),window.location.href="/login")}},64269:(e,t,r)=>{r.d(t,{cn:()=>o});var a=r(2821),s=r(75889);function o(){for(var e=arguments.length,t=Array(e),r=0;r{r.d(t,{A:()=>g});var a=r(12115),s=r(20063),o=r(7656),n=r(10352);let c=new o.A,i="user_data",l="auth_token",u="refresh_token",g=()=>{let[e,t]=(0,a.useState)(null),[r,o]=(0,a.useState)(!0),[g,d]=(0,a.useState)(null),[m,p]=(0,a.useState)(!1),f=(0,s.useRouter)(),h=e=>{try{localStorage.setItem(i,JSON.stringify(e))}catch(e){console.error("Error saving user to localStorage:",e)}},S=()=>{try{let e=localStorage.getItem(i);return e?JSON.parse(e):null}catch(e){return console.error("Error getting user from localStorage:",e),null}},y=()=>{try{localStorage.removeItem(i),localStorage.removeItem(l),localStorage.removeItem(u)}catch(e){console.error("Error clearing localStorage:",e)}},E=(e,t)=>{let r=new Date;r.setDate(r.getDate()+1);let a=new Date;a.setDate(a.getDate()+7),c.set("auth_token",e,{path:"/",expires:r,secure:!0,sameSite:"strict"}),c.set("refresh_token",t,{path:"/",expires:a,secure:!0,sameSite:"strict"});try{localStorage.setItem(l,e),localStorage.setItem(u,t)}catch(e){console.error("Error saving tokens to localStorage:",e)}},k=()=>{let e=c.get("auth_token");if(e)return e;try{return localStorage.getItem(l)}catch(e){return null}},v=()=>{let e=c.get("refresh_token");if(e)return e;try{return localStorage.getItem(u)}catch(e){return null}};(0,a.useEffect)(()=>{(()=>{let e=k(),r=S();e&&r?t(r):e&&!r?w():o(!1)})()},[]);let w=async()=>{try{o(!0);let e=await n.FH.get("/api/user",!0);if(e.success&&e.data){let r=e.data.user||e.data;t(r),h(r)}else 401===e.status&&(await _()||(d("Session expired. Please login again."),setTimeout(()=>{N()},2e3)))}catch(e){console.error("Error fetching user:",e),d("Failed to fetch user data"),(null==e?void 0:e.status)===401&&N()}finally{o(!1)}},_=async()=>{try{let e,r=v();if(!r)return!1;let a=await n.FH.post("/api/refresh",{refresh_token:r},!1);if(a.data&&(e=a.data.data||a.data),(null==e?void 0:e.token)&&e.refresh_token)return E(e.token,e.refresh_token),e.user?(t(e.user),h(e.user)):await w(),!0;return!1}catch(e){return console.error("Error refreshing token:",e),!1}},T=(e,t)=>{var r;return(null==e||null==(r=e.error)?void 0:r.message)?e.error.message:(null==e?void 0:e.message)?e.message:(null==e?void 0:e.error)&&"string"==typeof e.error?e.error:t},O=e=>e?e.data?e.data:e.user&&e.token?e:e.user?{user:e.user,token:e.token||"",refresh_token:e.refresh_token||""}:null:null,N=async()=>{try{p(!0),k()&&await n.FH.post("/api/logout",{},!0)}catch(e){console.error("Error logging out:",e)}finally{c.remove("auth_token",{path:"/"}),c.remove("refresh_token",{path:"/"}),y(),y(),t(null),d(null),p(!1),f.push("/login")}};return{user:e,isLoading:r,isLoggingOut:m,authError:g,getToken:k,getRefreshToken:v,getCurrentUserId:()=>{if(null==e?void 0:e.id)return e.id;let t=S();return(null==t?void 0:t.id)||null},login:async e=>{try{var r,a;d(null);let s=await n.FH.post("/api/login",e,!1);if(s.error){let e=T(s,"Login failed");return{success:!1,error:{message:e,status:0}}}let o=O(s.data||s);if(null==o?void 0:o.token)return E(o.token,o.refresh_token),o.user?(t(o.user),h(o.user)):await w(),f.push("/dashboard"),{success:!0};if(null==(r=s.data)?void 0:r.token)return E(s.data.token,s.data.refresh_token),s.data.user?(t(s.data.user),h(s.data.user)):await w(),f.push("/dashboard"),{success:!0};return{success:!1,error:{message:(null==(a=s.data)?void 0:a.message)||"Invalid response format",status:0}}}catch(e){return{success:!1,error:{message:e.message||"Login failed",status:0}}}},register:async e=>{try{var r;d(null);let a=await n.FH.post("/api/register",e,!1);if(a.error){let e=T(a,"Registration failed");return{success:!1,error:{message:e,status:0}}}let s=O(a.data||a);if(null==s?void 0:s.token)return E(s.token,s.refresh_token),s.user?(t(s.user),h(s.user)):await w(),f.push("/dashboard"),{success:!0};return{success:!1,error:{message:(null==(r=a.data)?void 0:r.message)||"Registration failed",status:0}}}catch(e){return{success:!1,error:{message:e.message||"Registration failed",status:0}}}},logout:N,refreshAuthToken:_}}}}]);