feat: support manual (self-supplied) wallets - #270
Conversation
Add a `manual` wallet type alongside Xverse so users with wallets that
have no browser extension (e.g. Sparrow) can connect by entering their
address and approve actions by pasting BIP322 signatures from their own
wallet.
- Centralize the six duplicated `request('signMessage')` call sites
behind one `signMessage()` primitive on the wallet context. Xverse
signs via sats-connect; manual surfaces the message in a global modal
and resolves once the user pastes a signature.
- Add `walletType` + `connectManual` to the wallet context; manual
wallets persist address-only (no public key, no Lightning).
- Connect stays Xverse-direct; manual is reachable via a "Use another
wallet" link and a "Connect manually" entry in the help modal.
- Decouple owner gating so manual owners see Stratum + Dispenser +
privacy toggle by ownership, with no Lightning balance and no
Refinery. Xverse flow is unchanged.
- Dispenser claim gains a manual path: enter a destination Ordinals
address, then sign the claim message manually.
Add ManualSignModal and ManualConnectModal.
…ptions # Conflicts: # app/components/dispenser/DispenserClaim.tsx
|
Sorry for the delay on this, should be ready for review now |
|
Related to an old issue I raised back in January: #138 (which, I'm creating a PR for - slight deviation from the original issue suggestion) |
…s into dispenser-multi-options
|
@mrv777 This is good PR, I tweaked and fixed some stuff and allowed the Refinery to render in Manual mode. I couldn't really test the Dispenser flow because none of my testing wallets currently has any rewards. @parabitdev Could you checkout this branch and run and review the Dispenser flow specifically to make sure everything works correctly there? |
|
@mrv777 maybe also check the branch out and run it locally and let me know if you agree/disagree with any changes I made pls |
…s into dispenser-multi-options
…s into dispenser-multi-options
|
Just a heads up, we've updated the runtime to node 24 and pnpm to 11.15 |
|
you might have to do pnpm rebuild (for better-sqlite3) |
| return trimmed; | ||
| } | ||
|
|
||
| export function isValidBitcoinAddress(value: string): boolean { |
There was a problem hiding this comment.
Don't love the use of try{}catch{} as control-flow, but it is acceptable as the underlying throws force this.
There was a problem hiding this comment.
do you want me to try and do this better? or is it fine for now?
There was a problem hiding this comment.
If you see a way to make this better go ahead but I think it's fine for now. I'll merge and deploy this over the weekend, latest by Monday
Replaces #237
Add a
manualwallet type alongside Xverse so users with wallets that have no browser extension (e.g. Sparrow) can connect by entering their address and approve actions by pasting BIP322 signatures from their own wallet.Decisions
signMessage()primitive