[CL-AUTH-WALLET-SIGN-TIMEOUT-20260522] fix: wallet popup hang без feedback #177

Merged
andrei merged 1 commit from cl-auth-wallet-sign-timeout-20260522 into master 2026-05-22 17:53:18 +00:00
Owner

Что сделано

  • signMessageAsync обёрнут в Promise.race с 90s timeout. Stuck popup → existing catch → walletAuthFailed banner.

Зачем

CEO repro #3: после CAPTCHA fix /auth/wallet больше не 400, но клик на Sign in with Wallet ни redirect ни error. Hypothesis: signMessageAsync зависает без resolve/reject при popup-closed-without-action.

## Что сделано - signMessageAsync обёрнут в Promise.race с 90s timeout. Stuck popup → existing catch → walletAuthFailed banner. ## Зачем CEO repro #3: после CAPTCHA fix /auth/wallet больше не 400, но клик на Sign in with Wallet ни redirect ни error. Hypothesis: signMessageAsync зависает без resolve/reject при popup-closed-without-action.
[CL-AUTH-WALLET-SIGN-TIMEOUT-20260522] fix: wallet popup hang без feedback
All checks were successful
CI / API (pull_request) Successful in 5m28s
CI / App (pull_request) Successful in 6m1s
CI / Contracts (pull_request) Successful in 1m20s
CI / Telegram Mini App (pull_request) Successful in 1m11s
CI / Python SDK (pull_request) Successful in 26s
CI / Secrets Scan (pull_request) Successful in 11s
CI / Prisma Migrate Gate (pull_request) Successful in 1m15s
React Doctor / React Doctor / App (pull_request) Successful in 1m27s
a4deda09af
## Что сделано
- `app/src/hooks/useWalletAuth.ts:signAndAuth` оборачивает `signMessageAsync`
  в `Promise.race` с 90-секундным timeout. По истечении бросает
  `Error('wallet_sign_timeout')` который ловится существующим catch и пишет
  `walletAuthFailed` в authStore → AuthPage error banner.

## Зачем — CEO repro #3 после двух предыдущих fixes
1. PR#171 (nginx /partners/intake fallback) — landed.
2. PR#172 (opacity:0 Google overlay) — landed.
3. PR#173 (silent catch → surface error) — landed.
4. PR#174 (api turnstile TIMEOUT_SAFE_PATHS /wallet) — landed.

CEO devtools screenshot после всех 4 PR: /auth/wallet больше не 400 (CAPTCHA
ушёл), но user click на "Sign in with Wallet" не приводит ни к redirect,
ни к error banner. Hypothesis: wagmi `signMessageAsync` зависает без resolve/
reject, когда wallet popup закрывается без действия (MetaMask quirk, popup
blocked другим extension). Catch не срабатывает потому что Promise nи
resolved нi rejected.

90s timeout даёт slack для hardware wallet PIN entry, но спасает stuck popup.

## План тестирования
- `npx vitest run src/hooks/__tests__/useWalletAuth.test.ts` — passed.
- `npx tsc --noEmit` — exit=0.
- Post-deploy: CEO clicks Sign in with Wallet, при popup hang через 90s
  видит "Wallet authentication error" вместо тишины.

## Где могу ошибаться
- 90s может быть мало для hardware wallets с долгим PIN entry. Ledger
  обычно <30s, Trezor — 1-2 min при сложном passphrase. Если CEO/users
  жалуются — увеличить до 180s.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
andrei merged commit e3db21cc1b into master 2026-05-22 17:53:18 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!177
No description provided.