From c32560535b65eecde4761488a8520e0c55f33e04 Mon Sep 17 00:00:00 2001 From: portkey-yellow Date: Mon, 25 Dec 2023 15:17:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20service=20load=20sto?= =?UTF-8?q?rage=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/api/api-did/server.ts | 28 +++++++++++++++++-- .../mobile-app-did/js/utils/initRequest.ts | 2 ++ .../app/web/store/Provider/initConfig.ts | 2 ++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/api/api-did/server.ts b/packages/api/api-did/server.ts index 2a03c96e08..b18daa1ce3 100644 --- a/packages/api/api-did/server.ts +++ b/packages/api/api-did/server.ts @@ -8,11 +8,14 @@ import { sleep } from '@portkey-wallet/utils'; import im from '@portkey-wallet/im'; import { IM_TOKEN_ERROR_ARRAY } from '@portkey-wallet/im/constant'; import signalrFCM from '@portkey-wallet/socket/socket-fcm'; +import { IStorageSuite } from '@portkey/types'; const C_T_EVENT_NAME = 'connectTokenChange'; +const C_T_STORAGE_KEY = 'DidServiceConnectTokenStorageKey'; export class DidService extends ServiceInit { protected refreshTokenConfig?: RefreshTokenConfig; protected onLockApp?: (expired?: boolean) => void; + protected storage?: IStorageSuite; locked?: boolean; exceptionManager?: IExceptionManager; constructor() { @@ -34,9 +37,8 @@ export class DidService extends ServiceInit { try { if (!this.refreshTokenConfig || !isValidRefreshTokenConfig(this.refreshTokenConfig)) return; const authorization = await queryAuthorization(this.refreshTokenConfig); - this.set('headers', { Authorization: authorization }); - this.emitConnectTokenChange(authorization); - + this.saveAuthorization(authorization); + this.setAuthorization(authorization); this.locked = false; return authorization; } catch (error) { @@ -133,6 +135,26 @@ export class DidService extends ServiceInit { rep: fetchResult, }); }; + + initStorageAuthorization = async () => { + try { + const authorization = await this.storage?.getItem(C_T_STORAGE_KEY); + if (authorization) this.setAuthorization(authorization); + } catch (error) { + this.exceptionManager?.reportError(error, Severity.Fatal); + } + }; + setStorage = (storage: IStorageSuite) => { + this.storage = storage; + this.initStorageAuthorization(); + }; + setAuthorization = (authorization: string) => { + this.set('headers', { Authorization: authorization }); + this.emitConnectTokenChange(authorization); + }; + saveAuthorization = (authorization: string) => { + this.storage?.setItem(C_T_STORAGE_KEY, authorization); + }; } const didServer = new DidService(); diff --git a/packages/mobile-app-did/js/utils/initRequest.ts b/packages/mobile-app-did/js/utils/initRequest.ts index 92dd7694b0..9c1dc9902f 100644 --- a/packages/mobile-app-did/js/utils/initRequest.ts +++ b/packages/mobile-app-did/js/utils/initRequest.ts @@ -1,4 +1,6 @@ import { request } from '@portkey-wallet/api/api-did'; +import { baseStore } from '@portkey-wallet/utils/mobile/storage'; import { nativeApplicationVersion } from 'expo-application'; request.set('headers', { version: `v${nativeApplicationVersion}` }); +request.setStorage(baseStore); diff --git a/packages/web-extension-did/app/web/store/Provider/initConfig.ts b/packages/web-extension-did/app/web/store/Provider/initConfig.ts index 44f4cc42dc..1f4f720f0d 100644 --- a/packages/web-extension-did/app/web/store/Provider/initConfig.ts +++ b/packages/web-extension-did/app/web/store/Provider/initConfig.ts @@ -1,5 +1,6 @@ import { request } from '@portkey-wallet/api/api-did'; import BigNumber from 'bignumber.js'; +import { localStorage } from 'redux-persist-webextension-storage'; export function initConfig() { BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_DOWN }); @@ -7,4 +8,5 @@ export function initConfig() { export function initRequest() { request.set('headers', { version: `${process.env.SDK_VERSION}` }); + request.setStorage(localStorage); } From 085f3c6b54a54659cb57311d73e436e751562d96 Mon Sep 17 00:00:00 2001 From: portkey-yellow Date: Mon, 25 Dec 2023 15:57:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=F0=9F=A4=96=20setStorage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/api/api-did/server.ts | 1 + packages/mobile-app-did/js/components/Updater/index.tsx | 2 ++ packages/mobile-app-did/js/utils/initRequest.ts | 2 -- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/api/api-did/server.ts b/packages/api/api-did/server.ts index b18daa1ce3..145d7891d8 100644 --- a/packages/api/api-did/server.ts +++ b/packages/api/api-did/server.ts @@ -54,6 +54,7 @@ export class DidService extends ServiceInit { ...this.defaultConfig.headers, Authorization: '', }; + this.storage?.removeItem(C_T_STORAGE_KEY); }; setRefreshTokenConfig = (config: RefreshTokenConfig) => { diff --git a/packages/mobile-app-did/js/components/Updater/index.tsx b/packages/mobile-app-did/js/components/Updater/index.tsx index 641bbbccd4..bb2021c7d9 100644 --- a/packages/mobile-app-did/js/components/Updater/index.tsx +++ b/packages/mobile-app-did/js/components/Updater/index.tsx @@ -30,6 +30,7 @@ import s3Instance from '@portkey-wallet/utils/s3'; import Config from 'react-native-config'; import { useCheckContactMap } from '@portkey-wallet/hooks/hooks-ca/contact'; import { useAppEntrance } from 'hooks/cms'; +import { baseStore } from '@portkey-wallet/utils/mobile/storage'; request.setExceptionManager(exceptionManager); export default function Updater() { @@ -55,6 +56,7 @@ export default function Updater() { useFetchTxFee(); useMemo(() => { request.set('baseURL', apiUrl); + request.setStorage(baseStore); if (service.defaults.baseURL !== apiUrl) { service.defaults.baseURL = apiUrl; } diff --git a/packages/mobile-app-did/js/utils/initRequest.ts b/packages/mobile-app-did/js/utils/initRequest.ts index 9c1dc9902f..92dd7694b0 100644 --- a/packages/mobile-app-did/js/utils/initRequest.ts +++ b/packages/mobile-app-did/js/utils/initRequest.ts @@ -1,6 +1,4 @@ import { request } from '@portkey-wallet/api/api-did'; -import { baseStore } from '@portkey-wallet/utils/mobile/storage'; import { nativeApplicationVersion } from 'expo-application'; request.set('headers', { version: `v${nativeApplicationVersion}` }); -request.setStorage(baseStore);