From a55844b50a791f8e0a7d787be6a1795ce674bfce Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Mon, 5 Aug 2024 15:13:01 +0800 Subject: [PATCH 1/2] use local storage all the time --- src/login.ts | 2 +- src/utils/StorageHelper.ts | 39 +++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/login.ts b/src/login.ts index b12fa80f..776ba5ea 100644 --- a/src/login.ts +++ b/src/login.ts @@ -477,7 +477,7 @@ class CustomAuth { if (!result) return { - error: "Init parameters not found. It might be because storage is not available. Please retry the login in a different browser", + error: `Init parameters not found. It might be because storage is not available. Please retry the login in a different browser. Used storage method: ${this.storageHelper.storageMethodUsed}`, state: instanceParameters || {}, method, result: {}, diff --git a/src/utils/StorageHelper.ts b/src/utils/StorageHelper.ts index 5803d4b3..db93464e 100644 --- a/src/utils/StorageHelper.ts +++ b/src/utils/StorageHelper.ts @@ -14,13 +14,20 @@ class StorageHelper { private storageServerUrl = "https://session.web3auth.io"; + private localStorageAvailable: boolean = true; + constructor(serverUrl: string) { this.storageServerUrl = serverUrl; } + get storageMethodUsed(): REDIRECT_PARAMS_STORAGE_METHOD_TYPE { + return this.currentStorageMethod; + } + init() { const support = are3PCSupported(); const localStorageAvailable = storageAvailable(REDIRECT_PARAMS_STORAGE_METHOD.LOCAL_STORAGE); + this.localStorageAvailable = localStorageAvailable; if (support && localStorageAvailable) { // use local storage as default for storing stuff this.currentStorageMethod = REDIRECT_PARAMS_STORAGE_METHOD.LOCAL_STORAGE; @@ -40,13 +47,16 @@ class StorageHelper { const encData = await encryptData(privKeyHex, params); const signature = (await sign(privKey, keccak256(Buffer.from(encData, "utf8")))).toString("hex"); await post(`${this.storageServerUrl}/store/set`, { key: publicKeyHex, data: encData, signature }); - } else { - window.localStorage.setItem(`torus_login_${scope}`, JSON.stringify(params)); } + if (this.localStorageAvailable) window.localStorage.setItem(`torus_login_${scope}`, JSON.stringify(params)); } async retrieveLoginDetails(scope: string): Promise { if (!this.isInitialized) throw new Error("StorageHelper is not initialized"); + if (this.localStorageAvailable) { + const loginDetails = window.localStorage.getItem(`torus_login_${scope}`); + if (loginDetails) return JSON.parse(loginDetails || "{}") as LoginDetails; + } if (this.currentStorageMethod === REDIRECT_PARAMS_STORAGE_METHOD.SERVER) { const privKey = keccak256(Buffer.from(scope, "utf8")); const privKeyHex = privKey.toString("hex"); @@ -54,8 +64,8 @@ class StorageHelper { try { const encData: { message: string; success: boolean } = await get(`${this.storageServerUrl}/store/get?key=${publicKeyHex}`); if (encData.message) { - const loginDetails = await decryptData(privKeyHex, encData.message); - return loginDetails; + const currentLoginDetails = await decryptData(privKeyHex, encData.message); + return currentLoginDetails; } } catch (error) { if ((error as Response).status === 404) { @@ -65,28 +75,23 @@ class StorageHelper { } } } - const loginDetails = window.localStorage.getItem(`torus_login_${scope}`); - return JSON.parse(loginDetails || "{}") as LoginDetails; } clearLoginDetailsStorage(scope: string): void { if (!this.isInitialized) throw new Error("StorageHelper is not initialized"); - if (this.currentStorageMethod === REDIRECT_PARAMS_STORAGE_METHOD.LOCAL_STORAGE) { - window.localStorage.removeItem(`torus_login_${scope}`); - } + if (this.localStorageAvailable) window.localStorage.removeItem(`torus_login_${scope}`); // No need to clear server details cause they auto expire and scope is never re-used for different login attempts } clearOrphanedLoginDetails(): void { if (!this.isInitialized) throw new Error("StorageHelper is not initialized"); - if (this.currentStorageMethod === REDIRECT_PARAMS_STORAGE_METHOD.LOCAL_STORAGE) { - const allStorageKeys = Object.keys(window.localStorage); - allStorageKeys.forEach((key) => { - if (key.startsWith("torus_login_")) { - window.localStorage.removeItem(key); - } - }); - } + if (!this.localStorageAvailable) return; + const allStorageKeys = Object.keys(window.localStorage); + allStorageKeys.forEach((key) => { + if (key.startsWith("torus_login_")) { + window.localStorage.removeItem(key); + } + }); // No need to clear server details cause they auto expire and scope is never re-used for different login attempts } } From 916b66126baf4b8d9177309e62ea785cf6be9c46 Mon Sep 17 00:00:00 2001 From: Chaitanya Potti Date: Tue, 6 Aug 2024 11:48:41 +0800 Subject: [PATCH 2/2] update torus scripts --- package-lock.json | 26 +++++++++++++------------- package.json | 8 ++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3a49103..08e8ea16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,10 +25,10 @@ "loglevel": "^1.9.1" }, "devDependencies": { - "@sentry/types": "^8.22.0", - "@toruslabs/config": "^2.1.1", + "@sentry/types": "^8.23.0", + "@toruslabs/config": "^2.2.0", "@toruslabs/eslint-config-typescript": "^3.3.3", - "@toruslabs/torus-scripts": "^6.0.3", + "@toruslabs/torus-scripts": "^6.1.0", "eslint": "^8.57.0", "husky": "^9.1.4", "lint-staged": "^15.2.8", @@ -3093,9 +3093,9 @@ } }, "node_modules/@sentry/types": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.22.0.tgz", - "integrity": "sha512-1MLK3xO+uF2oJaa+M98aLIrQsEHzV7xnVWPfE3MhejYLNQebj4rQnQKTut/xZNIF9W0Q+bRcakLarC3ce2a74g==", + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.23.0.tgz", + "integrity": "sha512-oJbZ04chsz3Gqro3GJuAAcEsJ7RVjk3k4TvAMxmhN5tQUqwvKFtvWjfskcF75ECzY+8Qge6PI7eXoibkhjx8sg==", "devOptional": true, "license": "MIT", "engines": { @@ -3174,9 +3174,9 @@ } }, "node_modules/@toruslabs/config": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/config/-/config-2.1.1.tgz", - "integrity": "sha512-V1m6Ue81mHu4xfEIoBDZVQb2euZLIEwqEyRD9FJV3fDv8eOxkFNv5afdPXweo5iSexqAC7wQ7wSrRUiTyDgEjg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@toruslabs/config/-/config-2.2.0.tgz", + "integrity": "sha512-gH69an6qIVEP9W/YkPmroBrqoPfIf8aoBSGC6ZAcc4ihXDeyByXtdpThZ+wm9TSWMYsjewhZVstRAZeaE3zp9w==", "dev": true, "license": "MIT", "engines": { @@ -3335,9 +3335,9 @@ } }, "node_modules/@toruslabs/torus-scripts": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@toruslabs/torus-scripts/-/torus-scripts-6.0.3.tgz", - "integrity": "sha512-Od1wDeuxu6f16g+5RKkzagxelZrnZdlMDyRh1BtfYyrAy6UCyNLkHfClgPrA7lrp4d7BzTXj8hCvn+NOlEAyfg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/torus-scripts/-/torus-scripts-6.1.0.tgz", + "integrity": "sha512-k7IUXDAnyYOP9oPInK2mf2dFs/2STjUor2eBJ0D5c8MwzVKp1MnXHAWNWjkTHx5Qf2NgFrkCiH2eKZqMEwZu8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3352,7 +3352,7 @@ "@babel/runtime": "^7.25.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", - "@toruslabs/config": "^2.1.1", + "@toruslabs/config": "^2.2.0", "assert": "^2.1.0", "babel-loader": "^9.1.3", "browserify-zlib": "^0.2.0", diff --git a/package.json b/package.json index 3adceea3..9ead4aa7 100644 --- a/package.json +++ b/package.json @@ -42,15 +42,15 @@ "@toruslabs/torus.js": "^15.0.1", "base64url": "^3.0.1", "bowser": "^2.11.0", - "eventemitter3": "^5.0.1", "deepmerge": "^4.3.1", + "eventemitter3": "^5.0.1", "loglevel": "^1.9.1" }, "devDependencies": { - "@sentry/types": "^8.22.0", - "@toruslabs/config": "^2.1.1", + "@sentry/types": "^8.23.0", + "@toruslabs/config": "^2.2.0", "@toruslabs/eslint-config-typescript": "^3.3.3", - "@toruslabs/torus-scripts": "^6.0.3", + "@toruslabs/torus-scripts": "^6.1.0", "eslint": "^8.57.0", "husky": "^9.1.4", "lint-staged": "^15.2.8",