From c6e372b0220d3384a6c67e664ff89d8027a04f35 Mon Sep 17 00:00:00 2001 From: mason-hz Date: Fri, 23 Jan 2026 13:59:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20night=20elf=20not=20delec?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/base/package.json | 2 +- packages/base/src/errors.ts | 2 + packages/base/src/utils/index.ts | 5 ++ packages/base/src/utils/nightElf.ts | 47 +++++++++++++++++++ packages/bridge/package.json | 2 +- packages/react/package.json | 2 +- packages/utils/package.json | 2 +- .../wallets/fairy-vault-discover/package.json | 2 +- packages/wallets/night-elf/package.json | 2 +- packages/wallets/night-elf/src/utils.ts | 10 ++-- packages/wallets/portkey-aa/package.json | 2 +- .../wallets/portkey-discover/package.json | 2 +- .../wallets/portkey-web-wallet/package.json | 2 +- 13 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 packages/base/src/utils/nightElf.ts diff --git a/packages/base/package.json b/packages/base/package.json index a61ddb94..85a4c90a 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-base", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/base/src/errors.ts b/packages/base/src/errors.ts index 1815928e..7ad1d15f 100644 --- a/packages/base/src/errors.ts +++ b/packages/base/src/errors.ts @@ -26,6 +26,7 @@ export const ERR_CODE = { IN_FINISH_BUT_STATUS_IS_NOT_SUCCESS: 10023, UNKNOWN: 10024, DISCOVER_LOGIN_REQUIRED_APP: 10025, + NIGHT_ELF_NOT_DETECTED: 10026, }; export const ERR_CODE_MSG: { @@ -59,6 +60,7 @@ export const ERR_CODE_MSG: { 10023: 'Login completed, but the isLoginStatus is not success. Please log in again', 10024: 'Unknown error', 10025: 'Please use the FairyVault app or the FairyVault browser extension on your computer.', + 10026: 'NightElf is not detected or has been disabled. Please connect in again.', }; export function makeError(code: number, nativeError?: any): TWalletError { diff --git a/packages/base/src/utils/index.ts b/packages/base/src/utils/index.ts index 04ae95b8..1b6e1e33 100644 --- a/packages/base/src/utils/index.ts +++ b/packages/base/src/utils/index.ts @@ -3,10 +3,15 @@ import { getOriginalAddress } from './getOriginalAddress'; import { isPortkeyApp } from './isPortkeyApp'; import { isFairyVaultApp } from './isFairyVaultApp'; import { sleep } from './sleep'; +import { checkConnectedWallet, checkNightElf, checkPrevLoginType } from './nightElf'; + export default { isMobileDevices, getOriginalAddress, isPortkeyApp, isFairyVaultApp, sleep, + checkConnectedWallet, + checkNightElf, + checkPrevLoginType, }; diff --git a/packages/base/src/utils/nightElf.ts b/packages/base/src/utils/nightElf.ts new file mode 100644 index 00000000..3d0cb1d1 --- /dev/null +++ b/packages/base/src/utils/nightElf.ts @@ -0,0 +1,47 @@ +import { Storage } from '../enhancedLocalStorage'; +import { WalletTypeEnum } from '../types'; + +export function checkPrevLoginType(type = WalletTypeEnum.aa, storage: Storage = localStorage) { + return storage.getItem('connectedWallet') === type; +} + +export function checkConnectedWallet(type = WalletTypeEnum.aa, storage: Storage = localStorage) { + try { + if (checkPrevLoginType(type)) storage.removeItem('connectedWallet'); + } catch (error) { + console.log(error, '====checkConnectedWallet'); + } +} + +export async function checkNightElf(): Promise { + let resolveTemp: ((arg0: boolean) => void) | undefined = undefined; + async function check(): Promise { + return new Promise((resolve, reject) => { + const win = window as any; + if (win.NightElf) { + console.log('There is NightElf'); + resolve(true); + return; + } + setTimeout(() => { + reject({ + error: 200001, + message: 'timeout, please download and install the NightELF explorer extension', + }); + }, 5000); + resolveTemp = resolve; + }); + } + if (typeof window !== 'undefined') { + document.addEventListener('NightElf', () => { + resolveTemp?.(true); + }); + } + + try { + return await check(); + } catch (error) { + console.log(error, '====checkNightElf'); + return false; + } +} diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 5e84f475..2fc96195 100755 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-bridge", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/react/package.json b/packages/react/package.json index 741a54bf..935270e2 100755 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-react", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 8a8456b7..c838c404 100755 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/utils", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/fairy-vault-discover/package.json b/packages/wallets/fairy-vault-discover/package.json index 65ff0b49..7d21176c 100755 --- a/packages/wallets/fairy-vault-discover/package.json +++ b/packages/wallets/fairy-vault-discover/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-fairy-vault-discover", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/night-elf/package.json b/packages/wallets/night-elf/package.json index c648f378..35b1fdfe 100755 --- a/packages/wallets/night-elf/package.json +++ b/packages/wallets/night-elf/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-night-elf", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/night-elf/src/utils.ts b/packages/wallets/night-elf/src/utils.ts index c659597b..c7b0efdd 100644 --- a/packages/wallets/night-elf/src/utils.ts +++ b/packages/wallets/night-elf/src/utils.ts @@ -1,11 +1,11 @@ import { INightElfWalletAdapterConfig } from './index'; -import { makeError, utils, ERR_CODE } from '@aelf-web-login/wallet-adapter-base'; +import { makeError, utils, ERR_CODE, WalletTypeEnum } from '@aelf-web-login/wallet-adapter-base'; import type { AElfDappBridge, PublicKey } from '@aelf-react/types'; import AelfBridgeCheck from './AelfBridgeCheck'; import NightElfCheck from './NightElfCheck'; export const getBridges = async (nodes: INightElfWalletAdapterConfig['nodes'], appName: string) => { - const { isMobileDevices } = utils; + const { isMobileDevices, checkConnectedWallet } = utils; try { const isAElfBridge = isMobileDevices() && !(window as any)?.NightElf; console.log('aelf-wallet-debug----------1'); @@ -24,7 +24,8 @@ export const getBridges = async (nodes: INightElfWalletAdapterConfig['nodes'], a const bridges: { [key: string]: AElfDappBridge } = {}; console.log('nodes:', nodes); if (!nodes || Object.keys(nodes).length === 0) { - throw makeError(ERR_CODE.INIT_BRIDGE_ERROR); + checkConnectedWallet(WalletTypeEnum.elf); + throw makeError(ERR_CODE.NIGHT_ELF_NOT_DETECTED); } Object.entries(nodes).forEach(([k, v]) => { if (!firstKey) firstKey = k; @@ -35,7 +36,8 @@ export const getBridges = async (nodes: INightElfWalletAdapterConfig['nodes'], a const bridge = bridges[firstKey]; return { bridge, node, bridges }; } catch (e) { - throw makeError(ERR_CODE.INIT_BRIDGE_ERROR); + checkConnectedWallet(WalletTypeEnum.elf); + throw makeError(ERR_CODE.NIGHT_ELF_NOT_DETECTED); } }; diff --git a/packages/wallets/portkey-aa/package.json b/packages/wallets/portkey-aa/package.json index 9f94241f..f4cd7855 100755 --- a/packages/wallets/portkey-aa/package.json +++ b/packages/wallets/portkey-aa/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-portkey-aa", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/portkey-discover/package.json b/packages/wallets/portkey-discover/package.json index 904ac6a6..d446b15e 100755 --- a/packages/wallets/portkey-discover/package.json +++ b/packages/wallets/portkey-discover/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-portkey-discover", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/portkey-web-wallet/package.json b/packages/wallets/portkey-web-wallet/package.json index 0b9798cb..818f24ae 100755 --- a/packages/wallets/portkey-web-wallet/package.json +++ b/packages/wallets/portkey-web-wallet/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-portkey-web", - "version": "0.4.0-alpha.19", + "version": "0.4.0-alpha.20", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js",