diff --git a/demo/redirect-flow-example/package-lock.json b/demo/redirect-flow-example/package-lock.json index 199179dd..b89eea7e 100644 --- a/demo/redirect-flow-example/package-lock.json +++ b/demo/redirect-flow-example/package-lock.json @@ -47,7 +47,7 @@ }, "../..": { "name": "@web3auth/mpc-core-kit", - "version": "2.1.0", + "version": "2.2.0", "license": "ISC", "dependencies": { "@metamask/swappable-obj-proxy": "^2.1.0", diff --git a/demo/redirect-flow-example/src/App.tsx b/demo/redirect-flow-example/src/App.tsx index 50662cf3..1819d793 100644 --- a/demo/redirect-flow-example/src/App.tsx +++ b/demo/redirect-flow-example/src/App.tsx @@ -164,12 +164,23 @@ function App() { setProvider(coreKitInstance.provider); } else { - coreKitInstance.setupProvider({ chainConfig: DEFAULT_CHAIN_CONFIG }).then((provider) => { + if (coreKitInstance.status === COREKIT_STATUS.LOGGED_IN) { + coreKitInstance.setupProvider({ chainConfig: DEFAULT_CHAIN_CONFIG }).then((provider) => { - setProvider(coreKitInstance.provider); - }); + setProvider(coreKitInstance.provider); + }); + } } setCoreKitStatus(coreKitInstance.status); + + + try { + let result = securityQuestion.getQuestion(coreKitInstance!); + setQuestion(result); + } catch (e) { + setQuestion(undefined); + uiConsole(e); + } } catch (error: unknown) { console.error(error); } @@ -225,7 +236,11 @@ function App() { throw new Error("backupFactorKey not found"); } const factorKey = new BN(backupFactorKey, "hex") + console.log(factorKey) await coreKitInstance.inputFactorKey(factorKey); + console.log(coreKitInstance) + + setCoreKitStatus(coreKitInstance.status); if (coreKitInstance.status === COREKIT_STATUS.REQUIRED_SHARE) { uiConsole("required more shares even after inputing backup factor key, please enter your backup/ device factor key, or reset account [unrecoverable once reset, please use it with caution]"); @@ -233,6 +248,8 @@ function App() { if (coreKitInstance.provider) { setProvider(coreKitInstance.provider); + } else if (coreKitInstance.status === COREKIT_STATUS.LOGGED_IN) { + await coreKitInstance.setupProvider({ chainConfig: DEFAULT_CHAIN_CONFIG }) } } diff --git a/demo/redirect-flow-example/src/flow.ts b/demo/redirect-flow-example/src/flow.ts index 4e277318..d705a156 100644 --- a/demo/redirect-flow-example/src/flow.ts +++ b/demo/redirect-flow-example/src/flow.ts @@ -1,27 +1,36 @@ -import { WEB3AUTH_NETWORK_TYPE, Web3AuthMPCCoreKit, TssSecurityQuestion } from "@web3auth/mpc-core-kit"; +import { getPubKeyPoint } from "@tkey-mpc/common-types"; +import { WEB3AUTH_NETWORK_TYPE, Web3AuthMPCCoreKit, TssSecurityQuestion, getHashedPrivateKey } from "@web3auth/mpc-core-kit"; +import BN from "bn.js"; export const flow = async (params: { selectedNetwork: WEB3AUTH_NETWORK_TYPE, manualSync: boolean, setupProviderOnInit: boolean, verifier: string, verifierId: string, idToken: string }) => { - const startTime = Date.now(); - console.log("startTime", startTime); + const initStart = Date.now(); + console.log("initStart", initStart); + const web3AuthClientId = "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ"; const coreKitInstance = new Web3AuthMPCCoreKit( { - web3AuthClientId: 'BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ', + web3AuthClientId, web3AuthNetwork: params.selectedNetwork, uxMode: 'redirect', manualSync: params.manualSync, setupProviderOnInit: params.setupProviderOnInit, } ); - + // init can be called before login is triggered, should it is excluded from the login time await coreKitInstance.init({ handleRedirectResult: false, rehydrate: false }); + const startTime = Date.now(); + console.log("done init", startTime); + + + console.log("init", startTime - initStart); + console.log("startTime", startTime); await coreKitInstance.loginWithJWT({ verifier: params.verifier, verifierId: params.verifierId, idToken: params.idToken, - }, { prefetchTssPublicKeys: 2 }); + }, { prefetchTssPublicKeys: 3}); let loggedInTime = Date.now(); console.log("logged Time :", loggedInTime); @@ -39,13 +48,27 @@ export const flow = async (params: { selectedNetwork: WEB3AUTH_NETWORK_TYPE, man console.log("SQ time", SqFactorTime); console.log(SqFactorTime - loggedInTime); + let securityFactor = await securityQuestion.recoverFactor(coreKitInstance, "answer"); + + + // update current Factor key with security factor + await coreKitInstance.inputFactorKey(new BN(securityFactor, "hex")); + // enable mfa ( by deleting Hash Factor ) + const hashFactor = getHashedPrivateKey(coreKitInstance.state.oAuthKey!, web3AuthClientId) + const hashedFactorPub = getPubKeyPoint(hashFactor); + await coreKitInstance.deleteFactor(hashedFactorPub, hashFactor); + + let deletedFactorTime = Date.now(); + console.log("deleted hash factor (enableMFA)", deletedFactorTime); + console.log(deletedFactorTime - SqFactorTime); + await coreKitInstance.commitChanges(); let commitTime = Date.now(); console.log("commit :", commitTime); - console.log(commitTime - SqFactorTime); + console.log(commitTime - deletedFactorTime); - console.log("total time", commitTime - startTime); + console.log("total login time", commitTime - startTime); } \ No newline at end of file