* 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
* 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>
* 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>
* feat: add LND hold invoices support
* fix: add HOLD_INVOICE_ACCEPTED_NOTIFICATION to notifications list returned by get_info
* fix: revert
* fix: remove unneeded null checks
* docs: add extra event type to README
* feat: add LND hold invoices support
* fix: add HOLD_INVOICE_ACCEPTED_NOTIFICATION to notifications list returned by get_info
* fix: revert
* fix: remove unneeded null checks
* docs: add extra event type to README
* fix: remove 0 expiry checking in the make_hold_invoice_controller
* fix: use JSON logging
* revert fly.toml
* fix: duplicated check
* fix: move publishing nwc_hold_invoice_accepted out of the transaction
* fix: move publishing nwc_hold_invoice_accepted out of the transaction
* fix: check the invoice state ACCEPTED before calling the lnClient.SettleHoldInvoice
* fix: check the invoice state ACCEPTED before calling the lnClient.SettleHoldInvoice
* fix: check the invoice state ACCEPTED before calling the lnClient.SettleHoldInvoice
* fix: check the invoice state ACCEPTED before calling the lnClient.SettleHoldInvoice
* fix: cancel hold invoice tests
* fix: make hold invoice tests
* fix: make hold invoice tests
* fix: settle hold invoice tests
* fix: resubscribe to pending hold invoices
* fix: missing WatchHoldInvoice
in the mocks
* feat: add LDK impl
* fix: cleanup
* fix: payment_hash
* fix: remove unneeded update
* feat: add support for self payments for hold invoices (#1304)
Co-authored-by: frnandu <frnandu@gmail.com>
* fix: remove hold invoices scope
* fix: remove hold invoices scope
* fix: mock hold bolt11 expiry to 10 years
* fix: sleep 1 second to give a change of lookupinvoice to read cancelled
* fix: missing timeout param
* feat: add hold invoice settle deadline to transactions (#1324)
* chore: update mockery, remove unused hold invoice method
* chore: remove unnecessary comment
* chore: remove unused code
* fix: do not return hold transaction if lookup failed
* chore: remove unused code
* fix: return correct errors from nip47 controllers, remove unused code
* fix: failing test
* chore: remove unnecessary code
* fix: make error message more general
* chore: remove unused code
* fix: use correct context in lnd service
* fix: unstable hold payments test
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Co-authored-by: Roland <33993199+rolznz@users.noreply.github.com>
* chore: switch to encryption tag from versioning
* chore: also support versioning
* chore: check version tag first
* Chore: nwc encryption feedback (#1137)
* chore: code cleanup, and responses for invalid encryption tag / unable to decrypt
* chore: add constants for encryption types
* chore: update test to cover when encryption tag is passed with no version
* chore: explain why we respond using nip-44 encryption if decryption fails
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Co-authored-by: Roland <33993199+rolznz@users.noreply.github.com>
* feat: nwc create_connection command (WIP)
* feat: allow creating superuser apps from the ui
* fix: pass methods rather than scopes in create_connection method
* chore: add extra tests
* fix: use browser router in http mode
* fix: update links to not use hash router
* fix: add redirect from hash router url
* fix: return nostrWalletConnectUrl in nwc connection success event and message
* feat: publish nwa event
* chore: use nwc info event instead of nwa event
* feat: create custom alby go detail page
* chore: allow creating/editing apps with the same name
* fix: convert budget from msats to sats (#1111)
* chore: address NWA feedback
* chore: address feedback
- adjust button copy
- make create_connection methods consistent with http deeplink flow
- remove unused constant
- add empty string check before adding lud16 tag
- fix test
* feat: add support for notification_types in create_connection method
* fix: shorter button copy
* fix: do not include lud16 tag in published info event
* Feat: add lud16 to get_info response (#1128)
feat: add lud16 to get_info response
* chore: minor alby go screen improvements
* fix: incorrect unlock password error message to create app with superuser access
* chore: minor ui improvements on alby go detail page
* chore: avoid duplicate app names by adding a suffix
* chore: move scopes check to apps service, add new tests, DRY controller test setup
* fix: scopes component full access scopes and isolated scope group check
* fix: use supported capabilities for Alby Go
* fix: return correct app name
* chore: address minor comments
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
* feat: use nip44 and versioning
* fix: panic: runtime error: invalid memory address or nil pointer dereference
* chore: check for version before notifying
* chore: add nip47 cipher
* chore: remove version check in event handler
* chore: address feedback
* chore: modify tests to use versioning and nip47 cipher
* chore: add more tests
* chore: add version param and change naming of test app functions
* chore: cleanup event handler tests
* chore: cleanup nip47 notifier tests
* chore: dry up cipher test
* chore: remove version param from create app
* chore: republish info event for existing apps
* chore: simplify isVersionSupported function
* chore: rename event handler legacy test
* chore: add nip04 test for create response
* chore: add comment and allow empty request version
---------
Co-authored-by: Fmar <frnandu@gmail.com>
* feat: add transactions table
* feat: add transactions service with makeinvoice method
* feat: use internal transactions WIP
* feat: check unsettled transactions
* feat: use transactions service in nip47 package WIP
* feat: use transactions service in NIP-47 handlers
* fix: transaction list colors
* fix: tests
* chore: remove old payments table
* fix: return budget usage as sats
* feat: use internal transactions table for keysend payments
* feat: consume nwc_payment_received event in transaction service (WIP)
* feat: update existing transaction from nwc_payment_received event in transactions service
* feat: update existing transaction from nwc_payment_sent event in transactions service
* feat: handle async payment failed events in transactions service
* fix: tests
* feat: correctly implement NIP-47 NOT_FOUND error code
* feat: intercept self payments
* feat: isolated balance and visibility
* feat: validate keysend payment does not exceed app internal balance
* feat: budget check in transactions service, correctly pass payment errors to NIP-47 response
also reduce query duplication
* fix: order transactions when looking up transaction
* feat: add fee reserves to unsettled outgoing transactions
* chore: rename app permissions max amount field
* chore: rename transaction amount values to be clearly millisats
* chore: merge balance type and visibility into isolated property on apps table
* chore: move duplicated permission check from nip-47 controllers to handler
* fix: app name in transaction list
* Feat: permissions revamp v2 (#273)
* feat: revamp permissions component
* chore: changes
* chore: changes
* chore: add view mode for show app screen
* chore: further changes
* feat: new illustration for linking account (#254)
* feat: new illustration for linking account
* fix: update paths
* fix: icon props (#256)
* fix: use date from frontend
* chore: add expiryselect component
* chore: further changes
* chore: further changes
* chore: add date-fns for date picker
* chore: further changes
* chore: further changes
* fix: add central LDK gossip node to help gossip new public channels (#262)
* fix: make dialog responsive (#258)
* chore: further changes
* typo
* chore: spacing issues
* chore: use scopes from capabilities
* chore: change scope type descriptions
* chore: styling fixes
* chore: fix typings
* chore: budget renewal component
* fix: LDK mark channel as inactive and show error if counterparty forwarding info missing (#267)
fix: mark channel as inactive and show error if counterparty forwarding info missing
* chore: remove unnecessary dark classes (#255)
* fix: links to open first channel in sidebar and onboarding checklist (#268)
* feat: improve migrate node UI (#269)
* fix: migrate node copy (#270)
* fix: stop nostr when app is shutdown and use context to stop lnclient (#271)
* fix: permissions revamp WIP
* feat: basic isolated apps UI
* fix: new app connection, edit app connection, deep linking
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
Co-authored-by: René Aaron <100827540+reneaaron@users.noreply.github.com>
Co-authored-by: Michael Bumann <hello@michaelbumann.com>
* fix: make transactions table ID autoincrement
* fix: do not send unrelated notifications to isolated apps
* fix: nip-47 notifications not receiving updated transaction state
* fix: migrate existing tables to have autoincrementing primary keys (#274)
* fix: migrate existing tables to have autoincrementing primary keys
* fix: recreate request and response event tables after apps
* fix: remove null from request_events app_id
* fix: do not crash when reloading app created page
* chore: update pragma commands, add busy_timeout
* fix: remove unnecessary migration of user_configs table
* chore: update comment on autoincrement migration
* feat: sqlite database config improvements
* fix: autoincrement migration to delete unlinked app permissions
* chore: update tests for dynamic budgets (WIP)
* fix: get balance tests
* chore: add extra event handler tests
* chore: add extra event handler test
* chore: add extra multi_pay_invoice tests
* chore: transactions service tests (WIP)
* chore: add transactions service payment tests
* chore: add tests for self payments
* fix: notifications tests
* chore: add notifications tests for transactions service
* chore: add fee reserve tests for transactions service
* chore: add list transactions tests
* chore: add keysend tests for transactions service
* feat: subscribe for payments and invoices (#281)
* fix: db transaction should be passed as pointer
* feat(lnd): subscribe for payments and invoices
* chore: rearrange check for settled
* chore: remove TODO
* chore: retry on error and add select
* chore: publish payment failed event
* chore: use json logging
* feat: add lnd notification types
* chore: remove sleep
* fix: incorrect key on transaction list items
* fix: test
* fix: disable isolated app type on non-supported backends
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
Co-authored-by: René Aaron <100827540+reneaaron@users.noreply.github.com>
Co-authored-by: Michael Bumann <hello@michaelbumann.com>