Skip to content

[SDK] Fix: Rabby mobile connections, and a click-dead WalletConnect QR overlay - #8969

Draft
bassem-abdelazim-trilitech wants to merge 3 commits into
thirdweb-dev:mainfrom
bassem-abdelazim-trilitech:sdk/fix-rabby-mobile-registry
Draft

bassem-abdelazim-trilitech wants to merge 3 commits into
thirdweb-dev:mainfrom
bassem-abdelazim-trilitech:sdk/fix-rabby-mobile-registry

Conversation

@bassem-abdelazim-trilitech

@bassem-abdelazim-trilitech bassem-abdelazim-trilitech commented Sep 14, 2026

Copy link
Copy Markdown

Rabby's generated registry entry is missing the mobile data the WalletConnect registry publishes for it, which both blocks mobile connections and pushes desktop onto a fallback QR overlay that turns out to be unusable inside a host modal.

Reported symptoms: on mobile, choosing Rabby never opens the Rabby app; on desktop, choosing it opens a QR overlay that ignores clicks on × and Copy URI, and stacks a second overlay once the pairing expires. Happy to open a tracking issue and link it here if you'd prefer one.

Changes

  • Refresh the generated io.rabby entry with its current registry data (app.ios, app.android, mobile.native: "rabby://")
  • Add io.rabby to WCSupportedWalletIds and set hasMobileSupport: true in wallet-infos.ts, which follow from that data
  • Declare pointer-events: auto on the QR overlay root so it cannot inherit none from the host page
  • Tag overlays and remove any stale one before appending, so abandoned attempts don't stack
  • Add qr-overlay.test.ts covering both overlay behaviours
  • Two changesets (patch)

Notes for the reviewer

On hand-editing generated files. io.rabby/index.ts is auto-generated, so I checked what a regeneration would produce rather than writing the values by hand. I reproduced scripts/wallets/generate.ts's transform against the live explorer API and diffed the result for io.metamask as a control — byte-identical to what's committed — then applied the same transform's output for io.rabby. So this file matches what pnpm build:generate-wallets would emit today.

I did not run a full regeneration because it would sweep in unrelated registry churn. Comparing every committed entry against the API, exactly two have drifted in a way that matters: io.rabby and xyz.talisman (also missing talisman://). I left Talisman out because its image_id and display name have changed too, so it needs an image regeneration rather than a data edit — happy to add it, or to just run the generator, if you'd prefer either.

On the null"" churn. The explorer API now returns empty strings where it used to return null, so the regenerated entry carries "" for the platforms Rabby doesn't ship (mac, windows, firefox, …). That's what the generator emits today. I checked every consumer of these fields — create-wallet.ts, wallet-connect/controller.ts, AnyWalletConnectUI.tsx, GetStartedScreen.tsx, WalletConnectConnection.tsx — and all of them test truthiness (||, &&), with no === null or ??, so "" behaves exactly as null did.

Knock-on effect in React Native. hasMobileSupport filters the searchable list in ExternalWalletsList.tsx, so Rabby now appears there too. That follows from the corrected data rather than being a separate change, but worth flagging since it's user-visible.

The overlay fixes are independent of the registry fix. Correcting Rabby's entry routes it to WalletConnectConnection (the in-modal QR screen) via the mobile.native || mobile.universal branch in AnyWalletConnectUI.tsx, so Rabby stops reaching createQROverlay at all. But any wallet without a deep link still lands there, so the overlay is worth fixing on its own. They're split across two commits if you'd rather take only one.

How to test

cd packages/thirdweb
pnpm test:dev src/wallets/wallet-connect/qr-overlay.test.ts

Both tests fail on main for the reasons they describe — expected '' to be 'auto', and to have a length of 1 but got 2 — and pass with this change.

For the registry half, in an app whose connect UI is inside its own modal (any library that sets pointer-events: none on body while open), choose Rabby without the extension installed. Before: a QR overlay that ignores clicks on × and Copy URI, with a second one stacking after the pairing expires. After: the in-modal WalletConnect QR screen. On a phone, choosing Rabby now has rabby:// to hand off to.

🤖 Generated with Claude Code

The generated entry for io.rabby recorded no iOS app, no Android app and
no deep link, while the WalletConnect registry publishes all three. That
left Rabby with no mobile hand-off and excluded it from
WCSupportedWalletIds, so it fell through to the generic external-connect
path on desktop instead of the in-modal WalletConnect QR screen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
createQROverlay is appended to document.body and declared no
pointer-events, so it inherited `pointer-events: none` from modal
libraries that disable the body while a dialog is open - leaving the
overlay visible but click-dead. It now sets pointer-events explicitly.

Each connect attempt also only tracked its own overlay, so abandoned
attempts and expired pairings stacked overlays. Overlays are now tagged
and stale ones removed before a new one is appended.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Sep 14, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5391bd1

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
thirdweb Patch
@thirdweb-dev/wagmi-adapter Patch
wagmi-inapp Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Comment @coderabbitai help to get the list of available commands.

@vercel

vercel Bot commented Sep 14, 2026

Copy link
Copy Markdown

@bassem-abdelazim-trilitech is attempting to deploy a commit to the thirdweb Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions github-actions Bot added packages SDK Involves changes to the thirdweb SDK labels Sep 14, 2026
tsconfig.base.json declares lib ["ES2022", "DOM"] without DOM.Iterable,
so `for...of` over querySelectorAll fails to typecheck with TS2488. Use
NodeListOf.forEach, which lib.dom declares directly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

packages SDK Involves changes to the thirdweb SDK

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant