feat(wallet-picker): show MyQRLWallet as a single row - #51
Merged
Merged
Conversation
MyQRLWallet announces itself twice over EIP-6963: com.qrlwallet.extension from the browser extension and com.qrlwallet.connect from the connect SDK, which covers the phone, web and desktop wallets. The picker listed both, so the user had to know which of two MyQRLWallet rows matched the wallet they actually have. groupMyQrlWallet() from @qrlwallet/connect-ui folds the pair into one row named MyQRLWallet, carrying the 3A mark. Clicking the row connects through the extension when it is installed, and a separate "Use phone or desktop app" button under it starts relay pairing. Without the extension the row itself starts relay pairing and there is no second button. The rdns line is replaced on that row by plain text naming the path a click takes. Every other announced wallet keeps its own row, its own icon and its own rdns line. The store's connect path is unchanged: both buttons hand a uuid to connectWallet(), which still resolves the transport from the rdns. The store imports the dependency-free @qrlwallet/connect-ui/wallets subpath because the store tests load this module in plain Node, where the package index would pull in the DOM pairing modal. Gates: npm run lint (zero warnings), npm run typecheck, npm test (42 pass), npm run build. Validated locally against a packed connect-ui 0.3.0. Claude-Session: https://claude.ai/code/session_01LWKZ1b4FBetebjo1kcNHJ8
moscowchill
marked this pull request as ready for review
September 25, 2026 08:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft: merge after
@qrlwallet/connect-ui0.3.0 is on npm. The helper this PR uses ships in that release (connect PR #48).package.jsonalready pins0.3.0;package-lock.jsongets its refresh in the same commit that unpins the merge, once the version resolves from the registry. Until thennpm cifails here by design, and every gate below was run against a locally packed 0.3.0 tarball.Why
MyQRLWallet announces itself twice over EIP-6963:
com.qrlwallet.extension, listed as "MyQRLWallet Extension"com.qrlwallet.connect, listed as "MyQRLWallet", for relay pairing with the phone, web and desktop walletsThe picker showed both, so a user had to know which of two MyQRLWallet rows matched the wallet they have.
What
groupMyQrlWallet()from@qrlwallet/connect-uifolds the pair into one row named MyQRLWallet, carrying the 3A mark:The QRL Web3 Wallet keeps its own row, icon and rdns line, and the picker still surfaces only QRL-capable wallets.
poolStore.connectWallet()is unchanged. Both buttons hand it a uuid and it still resolves the transport from the rdns, so the relay retirement, attempt guard and reset guard paths are untouched.discoveredWalletsbecomes a discriminated union (MyQrlWalletRow | OtherWalletRow) exported under the existingDiscoveredWalletname.The store imports
@qrlwallet/connect-ui/wallets, the dependency-free subpath. The store tests loadpoolStore.tsin plain Node, where the package index would pull in the DOM pairing modal and throw onHTMLElement.Screenshots
Headless Chromium at 1280 and 390 wide, with faked
eip6963:announceProviderevents:theqrl.organdio.metamaskalso announced: the QRL Web3 Wallet keeps its own row with its own rdns line, and MetaMask stays filtered out as beforeGates
npm run lintnpm run typechecknpm testnpm run buildAccessibility
The row body and the relay action are two separate buttons in that focus order. The action carries
aria-label="Use phone or desktop app to connect MyQRLWallet".https://claude.ai/code/session_01LWKZ1b4FBetebjo1kcNHJ8