@0xsequence/connect
Version:
Connect package for Sequence Web SDK
91 lines • 3.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isAccountAlreadyLinkedError = void 0;
exports.useEmailAuth = useEmailAuth;
const design_system_1 = require("@0xsequence/design-system");
const react_1 = require("react");
const useSequenceWaaS_js_1 = require("../hooks/useSequenceWaaS.js");
function useEmailAuth({ onSuccess, sessionName, linkAccount = false }) {
const toast = (0, design_system_1.useToast)();
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)) {
toast({
title: 'Account already linked',
description: 'This account is already linked to another wallet',
variant: 'error'
});
}
}
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