Fix send-only wallet save after device sync enabled #1732
Merged
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.
Description
Using NWC as the example wallet here.
If you have a NWC send-only config for a wallet and then enable device sync, the mutation in
syncLocalWallets
only creates a row inWallet
andVaultEntry
but not inWalletNWC
.If you then try to save again, the backend will see that there is a row for the wallet in
Wallet
and will try to updateWalletNWC
. This fails because there was no such row created during sync to server.This PR fixes this by always creating a row in
WalletNWC
ifWallet
was created.update: Okay, this breaks WebLN though as the comment
// client only wallets has no walletData
indicated why there was this check for existing wallet data. Added as TODO.Maybe the fix is to also pass an empty receive config during local sync since that's what we also do on regular saves.
update: decided to use a nested upsert during
wallet.update
Video of bug
2024-12-17.19-24-13.mp4
Additional Context
VaultEntry
is deleted but the row inWallet
isn't so you now have an enabled wallet with an empty config. Added as TODO.TODO
fix empty enabled wallet after vault disconnect with send-only walletthis is now Disconnecting from device sync in different tab does not unsync local wallets #1743Checklist
Are your changes backwards compatible? Please answer below:
yes
On a scale of 1-10 how well and how have you QA'd this change and any features it might affect? Please answer below:
5
. I am not entirely sure if I tested every combination of send-only, send+recv, recv-only and device sync enabled/disabled with NWC but I tried and I saw no issues. That these changes fix the issue without breaking anything else also make sense to me.Also tested enabling/disabling WebLN with and without device sync since a previous attempt broke it.
For frontend changes: Tested on mobile, light and dark mode? Please answer below:
n/a
Did you introduce any new environment variables? If so, call them out explicitly here:
no