UNPKG

@0xsequence/connect

Version:
85 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isAccountAlreadyLinkedError = void 0; exports.useEmailAuth = useEmailAuth; const react_1 = require("react"); const useSequenceWaaS_js_1 = require("../hooks/useSequenceWaaS.js"); function useEmailAuth({ onSuccess, sessionName, linkAccount = false }) { const [error, setError] = (0, react_1.useState)(); const [loading, setLoading] = (0, react_1.useState)(false); const [inProgress, setInProgress] = (0, react_1.useState)(false); const [respondWithCode, setRespondWithCode] = (0, react_1.useState)(); const [challenge, setChallenge] = (0, react_1.useState)(); const sequenceWaaS = (0, useSequenceWaaS_js_1.useSequenceWaaS)(); (0, react_1.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 ((0, exports.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 }; } const isAccountAlreadyLinkedError = (e) => { if (e && typeof e === 'object' && 'name' in e) { return e.name === 'AccountAlreadyLinked'; } return false; }; exports.isAccountAlreadyLinkedError = isAccountAlreadyLinkedError; //# sourceMappingURL=useEmailAuth.js.map