* fix: return optional total balance in list apps response for subwallets
* chore: add error handling to subwallet balance query
* chore: add METADATA_APPSTORE_APP_ID_KEY constant
* chore: add MAX_FREE_SUBWALLETS constant
* chore: use subwallet query and total count for limit check
* feat: add HIDE_UPDATE_BANNER environment variable
Add a new HIDE_UPDATE_BANNER env var that allows platform operators
(e.g. Start9) to suppress the built-in version update banner when
they provide their own update notification mechanism.
When set to true, the "What's New" widget is hidden and the header
banner only shows for VSS migration notices. The version comparison
against the Alby API is skipped entirely.
Closes#2048
* chore: simplify
* chore: undo changes
---------
Co-authored-by: Joel Klabo <max@klabo.world>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
* chore: log go-nostr debug messages
* fix: handle unexpected subscription closes from relay
* chore: also output messages from go-nostr info logger in debug mode
* chore: temporarily use forked go-nostr fix
* chore: update forked go-nostr fix
* fix: relay shows as offline on startup
* chore: update go-nostr
* chore: remove debug tags
* chore: run go mod tidy
* fix: only get relay statuses once
* feat: support multiple relays (WIP)
* fix: multiple NWC url construction for multiple relays
* fix: startup
* chore: update go-nostr to fix pool relay reconnect
* fix: split nip-47 queue info publish event for each relay url
* fix: add relayUrls to dispatched nwc success events
* fix: ensure newly created app info publishing is not blocked by sleep from failed publishes
* feat: multiple relays improvements
- update app deleted and updated consumers to handle multiple relays
- handle multiple relays in healthcheck
- display relay online status in about page
- renaming and improved comments
* chore: simplify error messages
* fix: unnecessary db error log when checking if app has notification permission
* fix: tests
* chore: remove old comment
* fix: app wallet subscription context usage
* fix: update patch app endpoints to allow sending partial fields from the frontend
* fix: removed unnessary complexity in handlesave func
* fix: use correct subwallet app id when setting subwallet lightning address in get_info command
* fix: do not allow changing subwallet to be non-isolated
* chore: simplify update app scopes logic
* fix: patch app to remove expires at
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: choose payment method when opening first channel (WIP)
* chore: update terms
* chore: consume lsp endpoint, display fees+LSP in manual channel flow, first channel ui improvements
* chore: improve handling of fee_credits payment method
* chore: add terms and description
* feat: add terms to manual increase incoming capacity flow
* chore: add error handling for get_info endpoint
* feat: allow alby account to pay for manual channel order
* chore: use consistent logging methods
* chore: rename lsp balance sats field to be consistent
* chore: update to use consistent field name for public key in auto channel request
* chore: rename channel suggestion url and type fields
* feat: support included payment method
* chore: update LDK startup peers
* chore: move non-oauth methods out of alby oauth service
* chore: improve terms around duration, only display duration in terms modal
* chore: remove balance card and fix layout
* chore: change send screen styling
* feat: add onchain send
* feat: send exact amount in swap outs
* chore: address feedback
* chore: change swap transaction title and add to address
* chore: refactor zero amount screen and remove confirmation
* chore: add x icon to recipient in lnurl pay
* chore: split onchain send page into separate components
* fix: set headers and remove send layout
* chore: show warning if balance is low
* chore: change name to PendingPaymentAlert
* chore: add increase balance warning on exceeding amount
* chore: minor changes
* chore: remove you'll be notified message
* chore: add on-chain transactions alert on wallet page
* chore: align sending and payment pending alerts
* chore: make sure amount doesn't reset
* fix: small onchain amount alert copy
* chore: rename isSending to useExactReceiveAmount
* chore: add mempool and anchor reserves alert to onchain send screen
* chore: use spending alert consistently and remove red text
* chore: add option to edit fee rate
* fix: styling after tailwind upgrade
* feat: add swap in and onchain deposit to receive flow (#1585)
* chore: remove receive layout
* feat: add onchain address to receive flow
* feat: add receive screen to swap in and deposit bitcoin
* chore: rename import to MIN_SWAP_AMOUNT
* chore: add onchain button when alby account is disconnected
* fix: link
* chore: add OnchainAddressDisplay and use useSearchParams hook
* fix: use actual swap limits from boltz api (#1598)
* fix: create another invoice button
* chore: use fee rate instead of network fee
* fix: styling after tailwind upgrade
* chore: rename swap fees to swap info
* chore: use lottie loading component
* chore: add mempool alert
* chore: make swaps the default option for send/receive onchain
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* chore: consistently show fee rate in sat/vByte
* chore: minor copy changes
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: add app last used time
* chore: use app last used instead of fetching last event
* chore: rename last_used to last_used_at, remove unused code
* fix: prettier
* chore: move out swaps from settings
* chore: link to swaps in wallet and node page
* chore: add frontend for swap ins
* chore: update all swap redirects
* chore: remove swap dialogs
* chore: remove auto swap-ins frontend
* feat: add support for one time swap outs
* chore: remove unused code
* chore: use separate endpoint for one off swap outs
* chore: further changes
* chore: separate one off and auto swaps
* chore: naming changes
* fix: tests
* feat: add one off swap in
* feat: add auto swap ins
* chore: remove comments
* fix: tests
* chore: further changes
* chore: further changes
* chore: rename to swap in and swap out
* chore: do not show swaps for non LDK/LND users
* chore: add receive limit checks for swap ins
* chore: remove probing
* chore: dark mode
* fix: swap link
* chore: add extra swap links
* fix: fee rates log
* fix: fee rates log
* chore: color changes
* Feat: swap out improvements (#1403)
* feat: swap out improvements
- add lockup transaction id to hold payment metadata
- return swap ID and payment hash in swap out response
- retries to get fee rates
- separate swap out success page with status
* chore: rename
* chore: show current balance on swap out form
* chore: add pulse animation to badge while pending
* chore: minor typo
* chore: update fee rate retry interval to 10 seconds
* chore: use icons instead of badges
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
* chore: update comment
* chore: remove comment
* chore: update boltz client to v2.6.1
* feat: swap in improvements (WIP) (#1411)
* feat: swap in improvements (WIP)
* feat: new swap in status page
* fix: hide pay button when already paid
* chore: improve swap in UI
* chore: more swap in ui improvements
* chore: minor improvements and fixes
* fix: typo
* feat: add swap in refund logic in case of failure
* fix: tests
* chore: add swap expired case for refunds
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
* feat: add swaps table (#1419)
* feat: add swaps table
* fix: test
* chore: bump LDK-node to v0.6.0 (#1418)
* [Freepilot] fix: startup error handling (#1413)
* fix: handle errors from service.NewService() in startup code
Previously, both HTTP and Wails startup code ignored errors from
service.NewService(ctx) using blank identifier (_), which could
cause panics later if NewService fails (e.g., unable to connect
to postgres database).
Now properly handle the error and exit gracefully with a fatal
log message when service initialization fails.
* fix: compile error
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: add hd key derivation
* Chore: add albyhub region cookie to developer page (#1421)
* docs: add AlbyHub-Region cookie instructions to developer page
* fix: use region from alby api
---------
Co-authored-by: achaldps@gmail.com <achaldps@gmail.com>
* build(deps): bump golang.org/x/crypto from 0.38.0 to 0.39.0 (#1415)
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.38.0 to 0.39.0.
- [Commits](https://github.com/golang/crypto/compare/v0.38.0...v0.39.0)
---
updated-dependencies:
- dependency-name: golang.org/x/crypto
dependency-version: 0.39.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump gorm.io/driver/sqlite from 1.5.7 to 1.6.0 (#1416)
Bumps [gorm.io/driver/sqlite](https://github.com/go-gorm/sqlite) from 1.5.7 to 1.6.0.
- [Commits](https://github.com/go-gorm/sqlite/compare/v1.5.7...v1.6.0)
---
updated-dependencies:
- dependency-name: gorm.io/driver/sqlite
dependency-version: 1.6.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump github.com/btcsuite/btcd/btcec/v2 from 2.3.4 to 2.3.5 (#1417)
Bumps [github.com/btcsuite/btcd/btcec/v2](https://github.com/btcsuite/btcd) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/btcsuite/btcd/releases)
- [Changelog](https://github.com/btcsuite/btcd/blob/master/CHANGES)
- [Commits](https://github.com/btcsuite/btcd/compare/btcec/v2.3.4...btcec/v2.3.5)
---
updated-dependencies:
- dependency-name: github.com/btcsuite/btcd/btcec/v2
dependency-version: 2.3.5
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat: allow setting LDK node alias (#1398)
* feat: add node alias customization for LDK nodes with public channels
- Add new NodeAlias field to InfoResponse in API
- Add SetNodeAlias method to API with config storage
- Add HTTP endpoint POST /node/alias for setting node alias
- Add corresponding Wails endpoint support
- Create new Node settings page in frontend
- Add conditional navigation item for LDK nodes with public channels
- Include upgrade dialog and paid subscription check
- Display success message prompting node restart after alias change
- Show error toast for non-paid users attempting to change alias
* chore: use node alias from config in LDK init
* fix: make upgrade button non-absolute, remove disabled attribute
* chore: move node alias page to be consistent with other node management pages
* chore: remove redundant comment
* chore: show upgrade dialog when clicking node alias option, show also for private channels
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* fix: always pass in fee and handle mempool errors (#1408)
* fix: always pass in fee and handle mempool errors
* chore: improve withdraw on-chain funds UI
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: derive keys from id and add fields to swap table
* feat: use bip 85 to derive swap mnemonic
* chore: mark swaps as failed if payment fails
* feat: add process refund method for swap ins
* chore: add process refund to swap service interface
* feat: add frontend
* fix: swap out failure message
* feat: add process refund button in swap in status screen
* chore: further improvements
* fix: wails routes
* feat: add frequency selector for ZapPlanner payments (#1312) (#1317)
* feat: add frequency selector for ZapPlanner payments (#1312)
* feat: add frequency selector for ZapPlanner payments (#1312) +corrections
* feat(zapplanner): add USD/BTC selector and frequency option
Budget renewal still has to be adjusted
* feat(zapplanner): set default frequency to 1 month
* feat(zapplanner): set default amount to usd and added (sats) to clarify BTC unit
* feat(zapplanner): convert months to days for subscriptions
* feat(zapplanner): add open to convertCurrency deps to allow consecutive subscriptions
* feat(Zapplanner freq¤cy selector): added all currencies to the selector
* feat(Zapplanner freq¤cy selector): removed bug about 2xBTC(sats) on the menu
* feat(zapplanner): frequency & currency all comments addressed
* chore: zapplanner fixes
- currency sorting
- sats currency usage for ZapPlanner
- force whole values for ZapPlanner
- pass correct currency to ZapPlanner
- rename field
- fix input width
---------
Co-authored-by: jpl-btc <>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* chore: add reconnection logic
* chore: specify fees while locking btc
* fix: do not use context background
* chore: improve auto swaps frontend
* chore: add boltz logo to tx item
* Updated Primal app connection (#1428)
* Updated Primal app connection
* fix: lint
---------
Co-authored-by: René Aaron <rene@twentyuno.net>
* chore: bump uniffi-bindgen-go and revert error handling in the LDK client (#1434)
* chore: revert error handling in the LDK client
* chore: update ldk-node-go dependency
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* Read.me adjustments (#1440)
* Update README.md
1) We spend a lot of time helping users to fix their problems with Raspi PIs.
2) Computers that are offline regularly create a bad UX because payments in external apps do not work and channels are closed earlier.
* Update README.md
* feat: add expired state to nip47 transactions (#1441)
* fix: use custom mempool url (#1431)
* fix: use custom mempool url
* chore: return mempool url in info endpoint
* chore: use mempool url from info response in frontend
* chore: remove default mempool url in frontend
* fix: tests
* feat: add LDK bitcoind rpc chain source (#1367)
* feat: add LDK bitcoind rpc chain source
* fix: crash in bitcoindrpc due to not enabling continuous sync
* chore: renaming
* chore: mark swap status as failed
* chore: use mempool url from info
* chore: poll balances on node page
* fix: when opening outbound channel, extract host part if full peer connection url is pasted
* chore: use mempool url from backend info endpoint
* docs: add boltz regtest setup instructions
* chore: separate swap in and out status pages
* fix: remove duplicate useInfo
* fix: mnemonic derivation logic
* chore: address comments
* chore: add tests for swap mnemonic generation
* chore: add refunded state
* chore: rename columns
* chore: simplify swap status frontend
* chore: mark swap out as successful after claim tx conf
* chore: add address to refund
* fix: wails
* feat: add resubscription
* chore: add logging
* chore: save refund address to db and use new address
* chore: add comment
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Roland <33993199+rolznz@users.noreply.github.com>
Co-authored-by: Freepilot <215356755+freepilot-bot@users.noreply.github.com>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Co-authored-by: achaldps@gmail.com <achaldps@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nodii <13803869+NodeDiver@users.noreply.github.com>
Co-authored-by: Moritz Kaminski <moritz.kaminski@gmail.com>
Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Roman D <roman@dmitrienko.com>
* chore: rename to receive_amount
* chore: remove auto swap success and add boltz link
* chore: use constant and rename variables
* fix: mark swaps as failed
* fix: show receive amount in swap in success screen
* chore: remove duplicate endpoint and reorder
* chore: add comment in wails handler
* chore: use markSwapState
* chore: add retries
* fix: use one websocket per swap
* chore: frontend fixes
* feat: add swap mnemonic to debug tools
* fix: tx list
* fix: tests
* chore: further changes
* chore: improve copy
* chore: improve copy
* chore: improve copy
* chore: rename, add autofocus on swap inputs
* fix: swap in failed state when no lockup tx exists
* chore: add interval note to active swap component
* chore: remove boltz image
* chore: use hasChannelManagement check
* chore: use link instead of navigate
* chore: mark swaps as failed in case of errors
* chore: add comment
* chore: only mark swaps as failed in defer function
* chore: improve copy
* chore: update boltz client to v2.7.2
* chore: use refundSwapRequest param
* fix: refund swap method
* chore: minor changes
* chore: add retries
* chore: add retries and use single ws connection for pending swaps
* fix: swap fee error message
* chore: remove sending partial signature in swap in
* chore: log error when update channel is not ok
* fix: add tx claimed state in swap in listener
* chore: add nwc_swap_succeeded to whitelist and readme
* feat: use single boltz ws connection
* chore: only check for tx claimed state
* chore: use lock while sending updates
* chore: handle boltz update error
* chore: remove swap id from success event
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Co-authored-by: Roland <33993199+rolznz@users.noreply.github.com>
Co-authored-by: Freepilot <215356755+freepilot-bot@users.noreply.github.com>
Co-authored-by: achaldps@gmail.com <achaldps@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nodii <13803869+NodeDiver@users.noreply.github.com>
Co-authored-by: Moritz Kaminski <moritz.kaminski@gmail.com>
Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Roman D <roman@dmitrienko.com>
* fix: use custom mempool url
* chore: return mempool url in info endpoint
* chore: use mempool url from info response in frontend
* chore: remove default mempool url in frontend
* fix: tests
* feat: add node alias customization for LDK nodes with public channels
- Add new NodeAlias field to InfoResponse in API
- Add SetNodeAlias method to API with config storage
- Add HTTP endpoint POST /node/alias for setting node alias
- Add corresponding Wails endpoint support
- Create new Node settings page in frontend
- Add conditional navigation item for LDK nodes with public channels
- Include upgrade dialog and paid subscription check
- Display success message prompting node restart after alias change
- Show error toast for non-paid users attempting to change alias
* chore: use node alias from config in LDK init
* fix: make upgrade button non-absolute, remove disabled attribute
* chore: move node alias page to be consistent with other node management pages
* chore: remove redundant comment
* chore: show upgrade dialog when clicking node alias option, show also for private channels
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: add BOLT-12 offers
* chore: display incoming bolt 12 payments in tx list
* chore: show bolt 12 button for users without alby account
* fix: check if bolt12payment fields are nil before assigning
* chore: do not pass in expiry
* fix: use checkLDKerr for error handling
* chore: add wails support
* chore: ui improvements
* chore: show bolt-12 for LDK backend type only
* chore: add offer info to tx metadata
* chore: use bolt12Offer
* fix: make offer description optional
* fix: remove incorrect log line
* chore: minor updates to node payBOLT12Offer command
* chore: remove unnecessary BOLT-12 offer copy
* chore: remove unused quantity
* chore: cleanup bolt12Offer usage in TransactionItem
* chore: prioritize lightning address, make bolt-12 copy consistent
* chore: rename generate offer to make offer
* fix: error handling
* chore: move payment hash into pay offer response
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: add option to edit fee while withdrawing
* chore: add alert if fee rate exceeds fastest fee
* fix: tests
* feat: add support for LDK
* chore: do not accept decimal fee rates in frontend
* chore: minor withdraw UI improvements
* chore: make fee rate optional and update mockery
* chore: remove unnecessary else
* chore: do not format lottie files
* feat: add lotties files to prettier ignore
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Also fixes#1303
## TODOs
- [x] Do final testing with LDK/LND on mainnet
- [x] Improve fee display on the frontend, currently looks scary
- [x] ~Shift Swaps from settings~ (Agreeed to do in follow-up)
- [x] ~Add option to do one-time swaps~ (Agreeed to do in follow-up)
### Minor
- [x] `LDK_NETWORK` config var should now be `NETWORK`
- [x] ~Use LNClient method to publish transactions~ (Agreeed to do in
follow-up)
### Testing
- [ ] Phoenix
- [ ] Cashu
- [x] Wails
* feat: add info page to settings
* chore: add plan info
* chore: reorder info page in settings sidebar
* fix: move about to bottom of menu items
* chore: replace hardcoded plan codes
---------
Co-authored-by: René Aaron <rene@twentyuno.net>