diff --git a/demo/redirect-flow-example/public/serviceworker/sw.js b/demo/redirect-flow-example/public/serviceworker/sw.js new file mode 100644 index 0000000..de1d088 --- /dev/null +++ b/demo/redirect-flow-example/public/serviceworker/sw.js @@ -0,0 +1,315 @@ +/* eslint-disable */ +function getScope() { + return self.registration.scope; +} + +self.addEventListener("message", function (event) { + if (event.data && event.data.type === "SKIP_WAITING") { + self.skipWaiting(); + } +}); + +self.addEventListener("fetch", function (event) { + try { + const url = new URL(event.request.url); + if (url.pathname.includes("redirect") && url.href.includes(getScope())) { + event.respondWith( + new Response( + new Blob( + [ + ` + + +
+ + + +{userInfo.verifierId}
+ { + userInfo && ( +{userInfo.verifierId}
+{new Date(shareDescription.dateAdded).toLocaleString()}
+{shareDetail.details}
- //Link a passkey to your account
+//{passkey.verifier_id}
+//{userInfo.email ? userInfo.email : userInfo.name}
{error}
} diff --git a/demo/redirect-flow-example/src/components/mfa-cards/mnemonic/CreateMnemonic.tsx b/demo/redirect-flow-example/src/components/mfa-cards/mnemonic/CreateMnemonic.tsx index 7e1bbf1..294f31e 100644 --- a/demo/redirect-flow-example/src/components/mfa-cards/mnemonic/CreateMnemonic.tsx +++ b/demo/redirect-flow-example/src/components/mfa-cards/mnemonic/CreateMnemonic.tsx @@ -6,7 +6,7 @@ import { COREKIT_STATUS, FactorKeyTypeShareDescription, generateFactorKey, keyTo import BN from "bn.js"; const CreateMnemonicPhraseCard: React.FC = () => { - const { coreKitInstance, setDrawerHeading, setDrawerInfo } = useCoreKit(); + const { coreKitInstance, setDrawerHeading, setDrawerInfo, setAddShareType } = useCoreKit(); const [mnemonic, setMnemonic] = React.useState(""); const [factorKey, setFactorKey] = React.useState{error}
} diff --git a/demo/redirect-flow-example/src/components/mfa-cards/password/CreatePassword.tsx b/demo/redirect-flow-example/src/components/mfa-cards/password/CreatePassword.tsx index 9ffc039..518cff1 100644 --- a/demo/redirect-flow-example/src/components/mfa-cards/password/CreatePassword.tsx +++ b/demo/redirect-flow-example/src/components/mfa-cards/password/CreatePassword.tsx @@ -6,16 +6,44 @@ import { useCoreKit } from "../../../composibles/useCoreKit"; import { COREKIT_STATUS, FactorKeyTypeShareDescription, TssSecurityQuestion, TssShareType } from "@web3auth/mpc-core-kit"; const GetPasswordCard: React.FC = () => { - const { coreKitInstance, setDrawerHeading, setDrawerInfo } = useCoreKit(); + const { coreKitInstance, setDrawerHeading, setDrawerInfo, setAddShareType } = useCoreKit(); const [password, setPassword] = React.useState(""); const securityQuestion = React.useMemo(() => new TssSecurityQuestion(), []); const question = "Enter your password"; const [isLoading, setIsLoading] = React.useState(false); + const [error, setError] = React.useState(""); + + const validatePassword = (password: string) => { + if (password.length < 8) { + return "Password must be at least 8 characters long."; + } + if (!/[A-Z]/.test(password)) { + return "Password must contain at least one uppercase letter."; + } + if (!/[a-z]/.test(password)) { + return "Password must contain at least one lowercase letter."; + } + if (!/[0-9]/.test(password)) { + return "Password must contain at least one number."; + } + if (!/[!@#$%^&*]/.test(password)) { + return "Password must contain at least one special character."; + } + return ""; + }; const createSecurityQuestion = async () => { setIsLoading(true); + const errorMessage = validatePassword(password); + if (errorMessage) { + setError(errorMessage); + setIsLoading(false); + return; + } + setError(""); try { if (!password) { + setIsLoading(false); return; } if (!coreKitInstance) { @@ -24,22 +52,18 @@ const GetPasswordCard: React.FC = () => { if (coreKitInstance.getTssFactorPub().length === 1) { await coreKitInstance.enableMFA({}, false); } - const factorKey = await securityQuestion.setSecurityQuestion({ + await securityQuestion.setSecurityQuestion({ mpcCoreKit: coreKitInstance, question, answer: password, shareType: TssShareType.RECOVERY, }); - // await coreKitInstance.enableMFA({ - // factorKey: new BN(factorKey, 16), - // additionalMetadata: { "shareType": TssShareType.DEVICE.toString() }, - // shareDescription: FactorKeyTypeShareDescription.PasswordShare, - // }); let result = securityQuestion.getQuestion(coreKitInstance); console.log("Security Question: ", result); if (coreKitInstance.status === COREKIT_STATUS.LOGGED_IN) { await coreKitInstance.commitChanges(); } + setAddShareType(""); setDrawerHeading("Security Question"); setDrawerInfo("Security question has been set successfully"); } catch (error) { @@ -56,7 +80,6 @@ const GetPasswordCard: React.FC = () => {{error}
} diff --git a/demo/redirect-flow-example/src/components/mfa-cards/recovery/RecoveryOptionCard.tsx b/demo/redirect-flow-example/src/components/mfa-cards/recovery/RecoveryOptionCard.tsx index 36aec02..aa9f000 100644 --- a/demo/redirect-flow-example/src/components/mfa-cards/recovery/RecoveryOptionCard.tsx +++ b/demo/redirect-flow-example/src/components/mfa-cards/recovery/RecoveryOptionCard.tsx @@ -8,7 +8,7 @@ import { COREKIT_STATUS } from "@web3auth/mpc-core-kit"; const RecoveryOptionsCard: React.FC = () => { const navigate = useNavigate(); - const { coreKitInstance, setCoreKitStatus } = useCoreKit(); + const { coreKitInstance, setCoreKitStatus, existingModules } = useCoreKit(); const handleRecoveryOption = (option: string) => { navigate(`/verify-${option}`); @@ -36,15 +36,28 @@ const RecoveryOptionsCard: React.FC = () => {