UNPKG

@0xsequence/connect

Version:
80 lines 2.66 kB
import { useEffect, useState } from 'react'; import { useSequenceWaaS } from '../hooks/useSequenceWaaS.js'; export function useEmailAuth({ onSuccess, sessionName, linkAccount = false }) { const [error, setError] = useState(); const [loading, setLoading] = useState(false); const [inProgress, setInProgress] = useState(false); const [respondWithCode, setRespondWithCode] = useState(); const [challenge, setChallenge] = useState(); const sequenceWaaS = useSequenceWaaS(); useEffect(() => { return sequenceWaaS.onEmailAuthCodeRequired(async (respondWithCode) => { setLoading(false); setRespondWithCode(() => respondWithCode); }); }, [sequenceWaaS, setLoading, setRespondWithCode]); const initiateAuth = async (email) => { setLoading(true); setInProgress(true); try { if (linkAccount) { const challenge = await sequenceWaaS.initAuth({ email }); setChallenge(challenge); setLoading(false); } else { const res = await sequenceWaaS.signIn({ email }, sessionName); onSuccess(res); } } catch (e) { setError(JSON.stringify(e)); } finally { if (!linkAccount) { setLoading(false); setInProgress(false); } } }; const sendChallengeAnswer = async (answer) => { if (linkAccount && challenge) { //completeAuth(challenge.withAnswer(answer), { sessionName }) try { await sequenceWaaS.linkAccount(challenge.withAnswer(answer)); } catch (e) { if (isAccountAlreadyLinkedError(e)) { setError('This account is already linked to another wallet'); } } setLoading(false); setInProgress(false); return; } if (respondWithCode) { await respondWithCode(answer); } }; const cancel = () => { setInProgress(false); setLoading(false); setChallenge(undefined); setRespondWithCode(null); }; return { inProgress, initiateAuth, loading, error, sendChallengeAnswer: inProgress ? sendChallengeAnswer : undefined, cancel }; } export const isAccountAlreadyLinkedError = (e) => { if (e && typeof e === 'object' && 'name' in e) { return e.name === 'AccountAlreadyLinked'; } return false; }; //# sourceMappingURL=useEmailAuth.js.map