--- title: "imToken production in-app browser login — Quick Fix" type: quick-fix date: 2026-06-06 --- # imToken production in-app browser login — Quick Fix ## Bug `main` serves `ark-library.com`, while `terry-wallet-login` serves the staging site. imToken login worked on staging, but on `ark-library.com` the imToken deeplink could open the in-app browser without completing login. ## Root Cause The production imToken in-app browser path depends on injected wallet provider behavior after the deeplink opens `ark-library.com`. Some imToken environments can expose a legacy provider shape (`window.web3.currentProvider`, `selectedAddress`, or `enable()`) or fail BNB-chain switching even though the wallet address is already available. The previous flow required the modern EIP-1193 path and chain switch to succeed, so login could silently fail before the frontend posted the wallet address to the backend. ## Fix Made the injected wallet login path more tolerant for imToken/mobile in-app browser environments: - Detect legacy `window.web3.currentProvider` if `window.ethereum` is unavailable. - Accept `selectedAddress` when it is already exposed by the wallet. - Fall back to legacy `ethereum.enable()` if `eth_requestAccounts` fails. - Do not block wallet-address login if BNB-chain switching fails, because the backend login only needs the wallet address. ### Files Modified - `src/wallet/injected.ts` — adds legacy provider/address fallbacks and makes BNB-chain switching non-blocking for injected wallet login. ## Verification - `npx prettier --write src/wallet/injected.ts` - `npx tsc --noEmit` - `npm run format:check` - `npm test` - `VITE_API_URL="" VITE_API_PREFIX="/apnew" VITE_DISABLE_ADMIN="true" npm run build` ## Notes The production fix was committed and pushed to `main` as `9c4b8a4 fix: support imToken in-app browser login`; Terry confirmed CI handles deploy for `ark-library.com`.