@0xsequence/connect
Version:
Connect package for Sequence Web SDK
80 lines • 2.66 kB
JavaScript
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