@webbydevs/react-laravel-sanctum-auth
Version:
A React library for easy authentication for a Laravel backend using Sanctum.
2 lines • 2.32 kB
JavaScript
var u=(e,r,t)=>new Promise((o,s)=>{var h=n=>{try{l(t.next(n))}catch(f){s(f)}},m=n=>{try{l(t.throw(n))}catch(f){s(f)}},l=n=>n.done?o(n.value):Promise.resolve(n.value).then(h,m);l((t=t.apply(e,r)).next())});import I from"axios";import y,{createContext as k,useContext as S,useEffect as d,useState as A}from"react";var U=k({user:null,setUser:e=>{},csrfToken:null,setCsrfToken:e=>{},config:null});function R({config:e,children:r}){let t=g(),[o,s]=A(JSON.parse(localStorage.getItem("user"))||null),h=JSON.parse(localStorage.getItem("csrfToken")),[m,l]=A(h),n=(c,p,T)=>{try{localStorage.setItem(p,JSON.stringify(T))}catch(F){localStorage.setItem(p,"")}c(T)},f=c=>{n(s,"user",c)},C=c=>{n(l,"csrfToken",c)};return d(()=>{function c(){return u(this,null,function*(){let p=yield t(new URL(e.csrfCookieUrl,e.baseUrl).href);C(p)})}c()},[]),y.createElement(U.Provider,{value:{user:o,setUser:f,csrfToken:m,setCsrfToken:C,config:e}},r)}function i(){return S(U)}import w from"axios";function a(){let{csrfToken:e,config:r}=i(),t=w.create({baseURL:r==null?void 0:r.baseUrl,withCredentials:!0,headers:{"Content-Type":"application/json",Accept:"application/json"}});return t.interceptors.request.use(o=>(o.headers["X-XSRF-TOKEN"]=e,o)),t}function g(){return r=>u(this,null,function*(){yield I.get(r);var t="";return document.cookie.split(";").forEach(o=>{o.split("=")[0].includes("XSRF-TOKEN")&&(t=o.split("=")[1].split("%")[0])}),t})}function x(e,r,t,o){return u(this,null,function*(){try{return yield t.post(e,r).then(s=>{if(s.status===200)return o(s.data),{success:!0}})}catch(s){return{success:!1,error:s}}})}function v(){let e=a(),{setUser:r,config:t}=i();return{login:s=>u(this,null,function*(){return yield x((t==null?void 0:t.loginUrl)||"",s,e,r)})}}function L(){let e=a(),{setUser:r,config:t}=i();return{register:s=>u(this,null,function*(){return yield x((t==null?void 0:t.registerUrl)||"",s,e,r)})}}function b(){let e=a(),{setUser:r,config:t}=i();return{logout:()=>u(this,null,function*(){try{yield e.post((t==null?void 0:t.logoutUrl)||"").then(s=>{if(s.status===200)return localStorage.removeItem("user"),r(null),{success:!0}})}catch(s){return{success:!1,error:s}}})}}export{R as AuthProvider,a as useApiClient,i as useAuth,g as useFetchCsrfToken,v as useLogin,b as useLogout,L as useRegister};
//# sourceMappingURL=index.mjs.map