Commit graph

25 commits

Author SHA1 Message Date
Roland
ffee8cbcbe
feat: enable migration from postgres to sqlite (#2524)
Allows users running Alby Hub on postgres (e.g. Alby Cloud) to create a
migration file from Settings -> Migrate Alby Hub. The contents of the
postgres database are copied into a temporary local sqlite database
which is included in the migration file, so it can be imported into a
fresh sqlite-based hub.

- extract the db_migrate CLI copy logic into a shared db.MigrateDB
- also copy the swaps and forwards tables (previously silently dropped)
- only require VSS in the source when migrating to postgres
- show a hint on the migrate page when running on postgres
- show database storage type and VSS status on the about page
- don't log an error when removing non-existent db files before restore

Closes #2500

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-10 14:20:41 +07:00
Roland
4cb794b332
chore: update additional places to support multiple relays (#2104) 2026-02-28 13:30:48 +07:00
Roland
16eff34b8a
feat: track forwards to display on a home page widget (#1623)
* feat: track forwards to display on a home page widget

* fix: test

* chore: improve copy

* feat: configure PPM routing fees
2025-08-21 16:39:03 +05:30
Roland
2962096fd5
fix: remove orphaned events in sqlite to postgres migration (#1580)
* fix: remove orphaned events in sqlite to postgres migration

* fix: copy
2025-08-07 00:08:43 +07:00
Roland
2ffb84683e
fix: signal handling after ignoring sigpipe signal (#1553)
* fix: signal handling after ignoring sigpipe signal

* chore: add (unnecessary) break
2025-07-30 23:42:19 +07:00
Roland
63f41887c7
fix: ignore sigpipe signal (#1535) 2025-07-23 17:00:00 +07:00
Roland
df5e566309
fix: ensure to not hit postgres parameter limit when migrating sqlite to postgres (#1511) 2025-07-18 17:28:25 +07:00
Adithya Vardhan
a1eaa63eed
Swaps improvements (shifting to standalone page + one-time swaps) (#1371)
* 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&currency selector): added all currencies to the selector

* feat(Zapplanner freq&currency 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>
2025-07-10 20:06:12 +07:00
Roland
adfaf390ac
fix: db migration reset sequences does not use transaction (#1467) 2025-07-07 16:58:26 +07:00
Roland
66a1be6d16
Fix: sqlite connection parameters, add migrations to delete orphaned records and change postgres transaction amount to bigint (#1462)
* fix: sqlite pragma statement not applying to all sqlite connections

* fix: add migration to delete orphaned records

* fix: migrate postgres transaction amount column to bigint

* chore: simplify migration, update comment

* fix: sqlite uri when running tests

* fix: check that breaks tests

* fix: db locking within transaction

* fix: sqlite3 driver wrapper to execute PRAGMAs on each new connection (#1464)

* fix: sqlite3 driver wrapper to execute PRAGMAs on each new connection

* chore: add test to check temp_store value

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>

---------

Co-authored-by: Roman D <roman@dmitrienko.com>
2025-07-06 17:45:46 +07:00
Adithya Vardhan
bce8b2103a
chore: increase lnd wait time before retrying (#1444)
* chore: increase lnd wait time before retrying

* fix: os signal goroutine should not wait for service init

* chore: set max retries to 60 and wait time to 10s
2025-06-26 15:09:27 +05:30
Freepilot
d9d7fe6195
[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>
2025-06-17 21:07:52 +07:00
frnandu
9071bd49b7
chore: build db_migrate entrypoint (#1348)
* feat: build migrate entrypoint and copy it to final image

* fix: db_migrate/main.go path

* fix: -o db_migrate

* fix: copy db_migrate

* fix: add LdkVssEnabled check
2025-05-30 18:37:16 +07:00
Roland Bewick
42d262899e fix: exit application in http mode if port is in use 2025-03-18 16:02:43 +07:00
Roland
efef57238a
chore: include information about channels in shutdown message (#1103) 2025-03-05 11:24:10 +07:00
Roman D
17c7a558a5
test: add db_migrate schema check test (#1005) 2025-01-17 14:00:48 +07:00
Roman D
df9393194a
feat: PostgreSQL support (#922)
* feat: enable Postgres connections

* feat: implement migration templates

* feat: convert sqlite-specific migrations to migration templates; adjust SQL syntax

* fix: add migration to fix postgres incompatibilities in the DB schema

* fix: correct SQL syntax for comparisons in the transactions service

* feat: database migration tool

* chore: update tests for testing with Postgres

* fix: update test

* fix: explicitly store mock timestamps in UTC

* chore: add txdb to go.mod and run tidy

* fix: serialize concurrent transactions when running tests with txdb

* chore: update README to mention postgres

* fix: use timestamptz in Postgres

* test: add Github action for testing the backend with Postgres

* chore: fix migration name and add comments

* docs: add db migration notes to README

* fix: address PR feedback

* fix: rename the cmd/migrate tool to cmd/db_migrate

* feat: add schema check in the DB migration tool

* test: use testdb instead of txdb for testing with Postgresql

* fix: fix tests after merge

* chore: comment out unused VACUUM in migrations

* fix: reset Postgres sequences after migrating data

* docs: update migrate command in readme

* fix: do not allow backup for migration when postgres is enabled

* chore: add debug logs for db backend type

* chore: use Logrus instead of slog for db_migrate

* fix: initialize logger in the keys tests

* test: add db_migrate test

* fix: use transaction object in db_migrate function

* fix: txlock in db migration test

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2025-01-16 17:17:24 +07:00
Roland
8ebb4ad716
fix: replace fatal logs with proper error handling (#707)
* fix: replace fatal logs with proper error handling

- fires nwc shutdown event synchronously
- requires at least one minute leeway for access token expiry

* chore: rename error

* fix: do not mask original reason for error

* fix: config error handling and error messages

* chore: rename
2024-09-25 17:31:05 +07:00
Roland
ba30fe35cc
chore: add error handling for echo shutdown (#593) 2024-09-03 17:09:26 +07:00
Matjaž Lipuš
6d3e260d42
chore: code cleanup (#558) 2024-08-28 22:34:50 +07:00
Roland
5027a05f99
chore: reduce number of info logs, remove echologrus middleware (#408)
* chore: reduce number of info logs, remove echologrus middleware

* chore: add extra properties to echo request logger
2024-08-06 21:30:13 +07:00
Roland
7b9e4d5c2f
fix: stop nostr when app is shutdown and use context to stop lnclient (#271) 2024-07-13 20:01:33 +07:00
Roland Bewick
3088373477 chore: rename everything to alby hub 2024-07-05 20:32:40 +07:00
Roland
9fdd71b7e0
chore: log OS signal on exit in HTTP mode (#502) 2024-06-25 13:30:33 +07:00
Roland
d06b421769
Split service into packages (#435) 2024-06-17 19:42:09 +07:00