import TwoFactorEmail from './TwoFactorEmailModal'; import TwoFactorPassword from './TwoFactorPasswordModal'; import TwoFactorTotp from './TwoFactorTotpModal'; export enum Method { TOTP = 'totp', EMAIL = 'email', PASSWORD = 'password', } export type OnConfirm = (code: string, method: Method) => void | Promise; export type TwoFactorModalProps = { onConfirm: OnConfirm; onClose: () => void; invalidAttempt?: boolean; } & ( | { method: 'totp' | 'password'; } | { method: 'email'; emailOrUsername: string; challengeId?: never; } | { method: 'email'; challengeId: string; emailOrUsername?: never; } ); const TwoFactorModal = ({ onConfirm, onClose, invalidAttempt, ...props }: TwoFactorModalProps) => { if (props.method === Method.TOTP) { return ; } if (props.method === Method.EMAIL) { // const { emailOrUsername, challengeId } = props; return ; } if (props.method === Method.PASSWORD) { return ; } throw new Error('Invalid Two Factor method'); }; export default TwoFactorModal;