[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
Some checks failed
React Doctor / React Doctor / App (pull_request) Failing after 593h50m12s
CI / Prisma Migrate Gate (pull_request) Failing after 593h51m27s
CI / Secrets Scan (pull_request) Failing after 593h51m38s
CI / Python SDK (pull_request) Failing after 593h52m4s
CI / Telegram Mini App (pull_request) Failing after 593h53m15s
CI / Contracts (pull_request) Failing after 593h54m35s
CI / App (pull_request) Failing after 594h0m36s
CI / API (pull_request) Failing after 594h6m5s
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 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.