@nhost/react
Version:
Nhost React library
3 lines (2 loc) • 18.4 kB
JavaScript
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("@nhost/nhost-js"),p=require("react"),n=require("@xstate/react"),C=require("jwt-decode"),k=g.NhostClient;class L extends k{constructor(t){super({...t,start:!1})}}const P=p.createContext({}),O=({nhost:e,initial:t,...o})=>{const i=n.useInterpret(e.auth.client.machine,{devTools:e.devTools});e.auth.client.start({interpreter:i,initialSession:t,devTools:e.devTools});const d=p.useRef(!0);return p.useEffect(()=>{d.current?d.current=!1:t&&i.send("SESSION_UPDATE",{data:{session:t}})},[t,i]),p.createElement(P.Provider,{value:e},o.children)},M=O,I=()=>{var o;const t=(o=p.useContext(P).auth)==null?void 0:o.client.interpreter;if(!t)throw Error("Could not find the Nhost auth client. Did you wrap your app in <NhostProvider />?");return t},x=()=>{const e=I();return n.useSelector(e,t=>({isAuthenticated:t.matches({authentication:"signedIn"}),isLoading:t.hasTag("loading"),error:t.context.errors.authentication||null,isError:t.matches({authentication:{signedOut:"failed"}}),connectionAttempts:t.context.importTokenAttempts}),(t,o)=>t.isAuthenticated===o.isAuthenticated&&t.isLoading===o.isLoading&&t.connectionAttempts===o.connectionAttempts)};function N({children:e}){const{isAuthenticated:t}=x();return t?p.createElement(p.Fragment,null,e):null}function R({children:e}){const{isAuthenticated:t}=x();return t?null:p.createElement(p.Fragment,null,e)}const y=()=>{const e=I();return n.useSelector(e,t=>t.context.accessToken.value)},v=()=>p.useContext(P),K=()=>{const e=v(),[t,o]=p.useState(null),i=!t,d=!!t,[l,S]=p.useState(!1);return{add:async u=>{S(!0);const s=await g.addSecurityKeyPromise(e.auth.client,u),{error:r}=s;return r&&o(r),S(!1),s},isLoading:l,isSuccess:i,isError:d,error:t}},D=()=>{const e=I(),[t,o]=p.useState(!!e.status&&e.getSnapshot().matches({authentication:"signedIn"}));return p.useEffect(()=>e.subscribe(d=>{const l=d.matches({authentication:"signedIn"});o(l)}).unsubscribe,[e]),t};function V(e){const t=v(),o=p.useMemo(()=>g.createChangeEmailMachine(t.auth.client),[t]),i=n.useInterpret(o),d=n.useSelector(i,s=>s.matches("requesting")),l=n.useSelector(i,s=>s.context.error),S=n.useSelector(i,s=>s.matches("idle.error")),m=n.useSelector(i,s=>s.matches("idle.success"));return{changeEmail:p.useCallback(async(s,r=e)=>g.changeEmailPromise(i,s,r),[i,e]),isLoading:d,needsEmailVerification:m,isError:S,error:l}}const F=()=>{const e=v(),t=p.useMemo(()=>g.createChangePasswordMachine(e.auth.client),[e]),o=n.useInterpret(t),i=n.useSelector(o,u=>u.matches({idle:"error"})),d=n.useSelector(o,u=>u.matches({idle:"success"})),l=n.useSelector(o,u=>u.context.error),S=n.useSelector(o,u=>u.matches("requesting"));return{changePassword:u=>g.changePasswordPromise(o,u),isLoading:S,isSuccess:d,isError:i,error:l}},_=()=>{const e=v(),t=p.useMemo(()=>g.createEnableMfaMachine(e.auth.client),[e]),o=n.useInterpret(t),i=n.useSelector(o,f=>f.matches({idle:"error"})||f.matches({generated:{idle:"error"}})),d=n.useSelector(o,f=>f.matches("generating")),l=n.useSelector(o,f=>f.matches("generated")),S=n.useSelector(o,f=>f.matches({generated:"activating"})),m=n.useSelector(o,f=>f.matches({generated:"activated"})),u=n.useSelector(o,f=>f.matches("disabling")),s=n.useSelector(o,f=>f.context.error),r=n.useSelector(o,f=>f.context.imageUrl||""),c=n.useSelector(o,f=>f.context.secret||"");return{generateQrCode:()=>g.generateQrCodePromise(o),isGenerating:d,qrCodeDataUrl:r,isGenerated:l,activateMfa:f=>g.activateMfaPromise(o,f),isActivating:S,isActivated:m,isDisabling:u,isError:i,error:s,disableMfa:f=>g.disableMfaPromise(o,f),totpSecret:c}},w=()=>{const e=y();return e?C.jwtDecode(e):null},A=e=>{const t=v(),o=h=>{e.send({type:"ADD",file:h.file,bucketId:h.bucketId||E})},i=h=>g.uploadFilePromise({url:t.storage.url,accessToken:t.auth.getAccessToken(),adminSecret:t.adminSecret,...h},e),d=()=>{e.send("CANCEL")},l=()=>{e.send("DESTROY")},S=n.useSelector(e,h=>h.matches("uploading")),m=n.useSelector(e,h=>h.matches("uploaded")),u=n.useSelector(e,h=>h.matches("error")),s=n.useSelector(e,h=>h.context.error||null),r=n.useSelector(e,h=>h.context.progress),c=n.useSelector(e,h=>h.context.id),E=n.useSelector(e,h=>h.context.bucketId),a=n.useSelector(e,h=>{var f;return(f=h.context.file)==null?void 0:f.name});return{add:o,upload:i,cancel:d,destroy:l,isUploaded:m,isUploading:S,isError:u,error:s,progress:r,id:c,bucketId:E,name:a}},q=()=>{const e=n.useInterpret(g.createFileUploadMachine);return A(e)},T=()=>{const e=w();return(e==null?void 0:e["https://hasura.io/jwt/claims"])||null},H=e=>{const t=T();return(t==null?void 0:t[e.startsWith("x-hasura-")?e:`x-hasura-${e}`])||null},j=()=>{const e=v(),[t,o]=p.useState([]),i=n.useInterpret(g.createMultipleFilesUploadMachine,{},a=>{a.event.type==="UPLOAD_ERROR"?o(a.context.files.filter(h=>{var f;return(f=h.getSnapshot())==null?void 0:f.context.error})):(a.matches("uploaded")||a.event.type==="CLEAR")&&t.length>0&&o([])}),d=a=>{i.send({type:"ADD",...a})},l=a=>g.uploadMultipleFilesPromise({url:e.storage.url,accessToken:e.auth.getAccessToken(),adminSecret:e.adminSecret,...a},i),S=()=>{i.send("CANCEL")},m=()=>{i.send("CLEAR")},u=n.useSelector(i,a=>a.matches("uploading")),s=n.useSelector(i,a=>a.matches("uploaded")),r=n.useSelector(i,a=>a.matches("error")),c=n.useSelector(i,a=>a.context.progress),E=n.useSelector(i,a=>a.context.files);return{upload:l,add:d,clear:m,cancel:S,progress:c,isUploaded:s,isUploading:u,files:E,isError:r,errors:t}},Q=e=>{const[t,o]=p.useState(!0),i=y();p.useEffect(()=>{o(!1)},[]);const d=p.useContext(P);return new Proxy({},{get(l,S){let m=`${d.auth.client.backendUrl}/signin/provider/${S}`;const u=e!=null&&e.connect?{connect:i}:{};return g.encodeQueryParameters(m,g.rewriteRedirectTo(t?void 0:d.auth.client.clientUrl,{...e,...u}))}})},J=e=>{const t=v(),o=p.useMemo(()=>g.createResetPasswordMachine(t.auth.client),[t]),i=n.useInterpret(o),d=n.useSelector(i,s=>s.matches("requesting")),l=n.useSelector(i,s=>s.context.error),S=n.useSelector(i,s=>s.matches("idle.error")),m=n.useSelector(i,s=>s.matches("idle.success"));return{resetPassword:(s,r=e)=>g.resetPasswordPromise(i,s,r),isLoading:d,isSent:m,isError:S,error:l}},Y=e=>{const t=v(),o=p.useMemo(()=>g.createSendVerificationEmailMachine(t.auth.client),[t]),i=n.useInterpret(o),d=n.useSelector(i,s=>s.matches({idle:"error"})),l=n.useSelector(i,s=>s.matches({idle:"success"})),S=n.useSelector(i,s=>s.context.error),m=n.useSelector(i,s=>s.matches("requesting"));return{sendEmail:(s,r=e)=>g.sendVerificationEmailPromise(i,s,r),isLoading:m,isSent:l,isError:d,error:S}},$=()=>{const e=I(),t=()=>g.signInAnonymousPromise(e),o=n.useSelector(e,u=>u.context.errors.authentication||null,(u,s)=>(u==null?void 0:u.error)===(s==null?void 0:s.error)),i=n.useSelector(e,u=>u.matches({authentication:{authenticating:"anonymous"}})),d=n.useSelector(e,u=>u.matches({authentication:"signedIn"})),l=n.useSelector(e,u=>u.matches({authentication:{signedOut:"failed"}})),S=n.useSelector(e,u=>u.context.user,(u,s)=>(u==null?void 0:u.id)===(s==null?void 0:s.id));return{accessToken:n.useSelector(e,u=>u.context.accessToken.value),error:o,isError:l,isLoading:i,isSuccess:d,signInAnonymous:t,user:S}},G=()=>{const e=I(),t=(a,h)=>g.signInEmailPasswordPromise(e,a,h),o=a=>g.signInMfaTotpPromise(e,a),i=n.useSelector(e,a=>a.context.user,(a,h)=>(a==null?void 0:a.id)===(h==null?void 0:h.id)),d=n.useSelector(e,a=>a.context.accessToken.value),l=n.useSelector(e,a=>a.context.refreshToken.value),S=n.useSelector(e,a=>a.context.errors.authentication||null,(a,h)=>(a==null?void 0:a.error)===(h==null?void 0:h.error)),m=n.useSelector(e,a=>a.matches({authentication:"signedIn"})),u=n.useSelector(e,a=>a.matches({authentication:{authenticating:"password"}}),(a,h)=>a===h),s=n.useSelector(e,a=>a.matches({authentication:{signedOut:"noErrors"},registration:{incomplete:"needsEmailVerification"}}),(a,h)=>a===h),r=n.useSelector(e,a=>a.context.mfa!==null),c=n.useSelector(e,a=>a.matches({authentication:{signedOut:"failed"}}),(a,h)=>a===h),E=n.useSelector(e,a=>a.context.mfa);return{accessToken:d,refreshToken:l,error:S,isError:c,isLoading:u,isSuccess:m,needsEmailVerification:s,needsMfaOtp:r,mfa:E,sendMfaOtp:o,signInEmailPassword:t,user:i}};function W(e){const t=I(),o=(m,u=e)=>g.signInEmailPasswordlessPromise(t,m,u),i=n.useSelector(t,m=>m.context.errors.registration||null,(m,u)=>(m==null?void 0:m.error)===(u==null?void 0:u.error)),d=n.useSelector(t,m=>m.matches("registration.passwordlessEmail")),l=n.useSelector(t,m=>m.matches("registration.incomplete.needsEmailVerification")),S=n.useSelector(t,m=>m.matches("registration.incomplete.failed"));return{signInEmailPasswordless:o,isLoading:d,isSuccess:l,isError:S,error:i}}const z=()=>{const e=I(),t=r=>g.signInEmailSecurityKeyPromise(e,r),o=n.useSelector(e,r=>r.context.user,(r,c)=>(r==null?void 0:r.id)===(c==null?void 0:c.id)),i=n.useSelector(e,r=>r.context.accessToken.value),d=n.useSelector(e,r=>r.context.refreshToken.value),l=n.useSelector(e,r=>r.context.errors.authentication||null,(r,c)=>(r==null?void 0:r.error)===(c==null?void 0:c.error)),S=n.useSelector(e,r=>r.matches({authentication:"signedIn"})),m=n.useSelector(e,r=>r.matches({authentication:{authenticating:"securityKeyEmail"}}),(r,c)=>r===c),u=n.useSelector(e,r=>r.matches({authentication:{signedOut:"noErrors"},registration:{incomplete:"needsEmailVerification"}}),(r,c)=>r===c),s=n.useSelector(e,r=>r.matches({authentication:{signedOut:"failed"}}),(r,c)=>r===c);return{accessToken:i,refreshToken:d,error:l,isError:s,isLoading:m,isSuccess:S,needsEmailVerification:u,signInEmailSecurityKey:t,user:o}},U=()=>{const e=I();return n.useSelector(e,t=>t.context.user,(t,o)=>(t&&JSON.stringify(t))===(o&&JSON.stringify(o)))},B=()=>{const e=U(),t=v(),o=T(),i=e?(o==null?void 0:o["x-hasura-auth-elevated"])===(e==null?void 0:e.id):!1,[d,l]=p.useState(!!i),S=m=>g.elevateEmailSecurityKeyPromise(t.auth.client,m);return p.useEffect(()=>{l(!!i)},[i]),{elevated:d,elevateEmailSecurityKey:S}},X=()=>{const e=I(),t=s=>g.signInPATPromise(e,s),o=n.useSelector(e,s=>s.context.user,(s,r)=>(s==null?void 0:s.id)===(r==null?void 0:r.id)),i=n.useSelector(e,s=>s.context.accessToken.value),d=n.useSelector(e,s=>s.context.refreshToken.value),l=n.useSelector(e,s=>s.context.errors.authentication||null,(s,r)=>(s==null?void 0:s.error)===(r==null?void 0:r.error)),S=n.useSelector(e,s=>s.matches({authentication:"signedIn"})),m=n.useSelector(e,s=>s.matches({authentication:{authenticating:"password"}}),(s,r)=>s===r),u=n.useSelector(e,s=>s.matches({authentication:{signedOut:"failed"}}),(s,r)=>s===r);return{accessToken:i,refreshToken:d,error:l,isError:u,isLoading:m,isSuccess:S,signInPAT:t,user:o}};function Z(e){const t=I(),[o,i]=p.useState(""),d=(c,E=e)=>(i(c),g.signInSmsPasswordlessPromise(t,c,E)),l=async(...c)=>{if(c.length===2){const[a,h]=c;return g.signInSmsPasswordlessOtpPromise(t,a,h)}const[E]=c;return g.signInSmsPasswordlessOtpPromise(t,o,E)},S=n.useSelector(t,c=>c.context.errors.registration||null,(c,E)=>(c==null?void 0:c.error)===(E==null?void 0:E.error)),m=n.useSelector(t,c=>c.matches("registration.passwordlessSms")||c.matches("registration.passwordlessSmsOtp")),u=n.useSelector(t,c=>c.matches("authentication.signedIn")),s=n.useSelector(t,c=>c.matches("registration.incomplete.needsOtp")),r=n.useSelector(t,c=>c.matches("registration.incomplete.failed"));return{signInSmsPasswordless:d,sendOtp:l,isLoading:m,isSuccess:u,needsOtp:s,isError:r,error:S}}const b=(e=!1)=>{const t=I(),o=l=>g.signOutPromise(t,typeof l=="boolean"?l:e),i=n.useSelector(t,l=>l.matches({authentication:{signedOut:"success"}}),(l,S)=>l===S),d=n.useSelector(t,l=>l.context.errors.signout||null,(l,S)=>(l==null?void 0:l.error)===(S==null?void 0:S.error));return{signOut:o,isSuccess:i,error:d}},ee=e=>{const t=I(),o=n.useSelector(t,c=>!!c.context.errors.registration),i=n.useSelector(t,c=>c.context.errors.registration||null,(c,E)=>(c==null?void 0:c.error)===(E==null?void 0:E.error)),d=n.useSelector(t,c=>c.matches("registration.emailPassword")),l=n.useSelector(t,c=>c.matches("registration.incomplete.needsEmailVerification")),S=n.useSelector(t,c=>c.matches({authentication:"signedIn",registration:"complete"})),m=(c,E,a=e,h)=>g.signUpEmailPasswordPromise(t,c,E,a,h),u=n.useSelector(t,c=>c.context.user,(c,E)=>(c==null?void 0:c.id)===(E==null?void 0:E.id)),s=n.useSelector(t,c=>c.context.accessToken.value),r=n.useSelector(t,c=>c.context.refreshToken.value);return{accessToken:s,refreshToken:r,error:i,isError:o,isLoading:d,isSuccess:S,needsEmailVerification:l,signUpEmailPassword:m,user:u}},te=e=>{const t=I(),o=n.useSelector(t,c=>!!c.context.errors.registration),i=n.useSelector(t,c=>c.context.errors.registration||null,(c,E)=>(c==null?void 0:c.error)===(E==null?void 0:E.error)),d=n.useSelector(t,c=>c.matches("registration.securityKey")),l=n.useSelector(t,c=>c.matches("registration.incomplete.needsEmailVerification")),S=n.useSelector(t,c=>c.matches({authentication:"signedIn",registration:"complete"})),m=(c,E=e,a)=>g.signUpEmailSecurityKeyPromise(t,c,E,a),u=n.useSelector(t,c=>c.context.user,(c,E)=>(c==null?void 0:c.id)===(E==null?void 0:E.id)),s=n.useSelector(t,c=>c.context.accessToken.value),r=n.useSelector(t,c=>c.context.refreshToken.value);return{accessToken:s,refreshToken:r,error:i,isError:o,isLoading:d,isSuccess:S,needsEmailVerification:l,signUpEmailSecurityKey:m,user:u}},se=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.avatarUrl},(t,o)=>t===o)},ne=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.defaultRole},(t,o)=>t===o)},re=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.displayName},(t,o)=>t===o)},oe=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.email},(t,o)=>t===o)},ce=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.id},(t,o)=>t===o)},ie=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.isAnonymous},(t,o)=>t===o)},ue=()=>{const e=I();return n.useSelector(e,t=>{var o;return(o=t.context.user)==null?void 0:o.locale},(t,o)=>t===o)},ae=()=>{const e=I();return n.useSelector(e,t=>{var o;return t.matches("authentication.signedIn")?((o=t.context.user)==null?void 0:o.roles)||[]:[]})};function le(e){const t=I(),o=(s,r=e)=>g.signInEmailOTPPromise(t,s,r),i=async(s,r)=>g.verifyEmailOTPPromise(t,s,r),d=n.useSelector(t,s=>s.context.errors.registration||null,(s,r)=>(s==null?void 0:s.error)===(r==null?void 0:r.error)),l=n.useSelector(t,s=>s.matches("registration.signInEmailOTP")||s.matches("registration.verifyEmailOTP")),S=n.useSelector(t,s=>s.matches("authentication.signedIn")),m=n.useSelector(t,s=>s.matches("registration.incomplete.needsOtp")),u=n.useSelector(t,s=>s.matches("registration.incomplete.failed"));return{signInEmailOTP:o,verifyEmailOTP:i,isLoading:l,isSuccess:S,isError:u,error:d,needsOtp:m}}const de=()=>{const e=I(),t=(s,r,c)=>g.signInIdTokenPromise(e,{provider:s,idToken:r,nonce:c}),o=n.useSelector(e,s=>s.context.user,(s,r)=>(s==null?void 0:s.id)===(r==null?void 0:r.id)),i=n.useSelector(e,s=>s.context.accessToken.value),d=n.useSelector(e,s=>s.context.refreshToken.value),l=n.useSelector(e,s=>s.context.errors.authentication||null,(s,r)=>(s==null?void 0:s.error)===(r==null?void 0:r.error)),S=n.useSelector(e,s=>s.matches({authentication:"signedIn"})),m=n.useSelector(e,s=>s.matches({authentication:{authenticating:"idToken"}}),(s,r)=>s===r),u=n.useSelector(e,s=>s.matches({authentication:{signedOut:"failed"}}),(s,r)=>s===r);return{accessToken:i,refreshToken:d,error:l,isError:u,isLoading:m,isSuccess:S,signInIdToken:t,user:o}},Se=()=>{const e=v(),[t,o]=p.useState(null),i=!t,d=!!t,[l,S]=p.useState(!1);return{linkIdToken:async({provider:u,idToken:s,nonce:r})=>{S(!0);const c=await g.linkIdTokenPromise(e.auth.client,{provider:u,idToken:s,...r&&{nonce:r}}),{error:E}=c;return E&&o(E),S(!1),c},isLoading:l,isSuccess:i,isError:d,error:t}},me=()=>{const e=I(),t=()=>g.signInSecurityKeyPromise(e),o=n.useSelector(e,r=>r.context.user,(r,c)=>(r==null?void 0:r.id)===(c==null?void 0:c.id)),i=n.useSelector(e,r=>r.context.accessToken.value),d=n.useSelector(e,r=>r.context.refreshToken.value),l=n.useSelector(e,r=>r.context.errors.authentication||null,(r,c)=>(r==null?void 0:r.error)===(c==null?void 0:c.error)),S=n.useSelector(e,r=>r.matches({authentication:"signedIn"})),m=n.useSelector(e,r=>r.matches({authentication:{authenticating:"securityKeyEmail"}}),(r,c)=>r===c),u=n.useSelector(e,r=>r.matches({authentication:{signedOut:"noErrors"},registration:{incomplete:"needsEmailVerification"}}),(r,c)=>r===c),s=n.useSelector(e,r=>r.matches({authentication:{signedOut:"failed"}}),(r,c)=>r===c);return{accessToken:i,refreshToken:d,error:l,isError:s,isLoading:m,isSuccess:S,needsEmailVerification:u,signInSecurityKey:t,user:o}};Object.defineProperty(exports,"NHOST_REFRESH_TOKEN_KEY",{enumerable:!0,get:()=>g.NHOST_REFRESH_TOKEN_KEY});exports.NhostClient=L;exports.NhostProvider=O;exports.NhostReactContext=P;exports.NhostReactProvider=M;exports.SignedIn=N;exports.SignedOut=R;exports.VanillaNhostClient=k;exports.useAccessToken=y;exports.useAddSecurityKey=K;exports.useAuthInterpreter=I;exports.useAuthenticated=D;exports.useAuthenticationStatus=x;exports.useChangeEmail=V;exports.useChangePassword=F;exports.useConfigMfa=_;exports.useDecodedAccessToken=w;exports.useElevateSecurityKeyEmail=B;exports.useFileUpload=q;exports.useFileUploadItem=A;exports.useHasuraClaim=H;exports.useHasuraClaims=T;exports.useLinkIdToken=Se;exports.useMultipleFilesUpload=j;exports.useNhostClient=v;exports.useProviderLink=Q;exports.useResetPassword=J;exports.useSendVerificationEmail=Y;exports.useSignInAnonymous=$;exports.useSignInEmailOTP=le;exports.useSignInEmailPassword=G;exports.useSignInEmailPasswordless=W;exports.useSignInEmailSecurityKey=z;exports.useSignInIdToken=de;exports.useSignInPAT=X;exports.useSignInSecurityKey=me;exports.useSignInSmsPasswordless=Z;exports.useSignOut=b;exports.useSignUpEmailPassword=ee;exports.useSignUpEmailSecurityKeyEmail=te;exports.useUserAvatarUrl=se;exports.useUserData=U;exports.useUserDefaultRole=ne;exports.useUserDisplayName=re;exports.useUserEmail=oe;exports.useUserId=ce;exports.useUserIsAnonymous=ie;exports.useUserLocale=ue;exports.useUserRoles=ae;
//# sourceMappingURL=index.cjs.js.map
;