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..c48b2103 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); } @@ -180,8 +191,7 @@ function App() { if (!mockEmail) { throw new Error('mockEmail not found'); } - const { idToken, parsedToken } = await mockLogin(mockEmail); - await flow({ selectedNetwork, manualSync: true, setupProviderOnInit: false, verifier: 'torus-test-health', verifierId: parsedToken.email, idToken }); + await flow({ selectedNetwork, manualSync: true, setupProviderOnInit: false, verifier: 'torus-test-health', verifierId: mockEmail }); } catch (error: unknown) { console.error(error); @@ -225,7 +235,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 +247,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..8704ce82 100644 --- a/demo/redirect-flow-example/src/flow.ts +++ b/demo/redirect-flow-example/src/flow.ts @@ -1,27 +1,37 @@ import { WEB3AUTH_NETWORK_TYPE, Web3AuthMPCCoreKit, TssSecurityQuestion } from "@web3auth/mpc-core-kit"; +import BN from "bn.js"; +import { mockLogin } from "./App"; -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); - +export const flow = async (params: { selectedNetwork: WEB3AUTH_NETWORK_TYPE, manualSync: boolean, setupProviderOnInit: boolean, verifier: string, verifierId: string }) => { + const { idToken } = await mockLogin(params.verifierId); + 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, + disableHashedFactorKey: true, } ); - + // 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 }); + idToken: idToken, + }, { prefetchTssPublicKeys: 2}); let loggedInTime = Date.now(); console.log("logged Time :", loggedInTime); @@ -45,7 +55,33 @@ export const flow = async (params: { selectedNetwork: WEB3AUTH_NETWORK_TYPE, man console.log("commit :", commitTime); console.log(commitTime - SqFactorTime); - console.log("total time", commitTime - startTime); + console.log("total login time", commitTime - startTime); + + + + // relogin on new instance ( device ) + const instance2 = new Web3AuthMPCCoreKit( + { + web3AuthClientId, + web3AuthNetwork: params.selectedNetwork, + uxMode: 'redirect', + manualSync: params.manualSync, + setupProviderOnInit: params.setupProviderOnInit, + disableHashedFactorKey: true, + } + ); + + const { idToken: idToken2 } = await mockLogin(params.verifierId); + await instance2.init({ handleRedirectResult: false, rehydrate: false }); + await instance2.loginWithJWT({ + verifier: params.verifier, + verifierId: params.verifierId, + idToken: idToken2, + }); + const sqInstance2 = new TssSecurityQuestion(); + const sqFactor = await sqInstance2.recoverFactor(instance2, "answer"); + await instance2.inputFactorKey(new BN(sqFactor, "hex")); + console.log(instance2.status); } \ No newline at end of file