Commit graph

190 commits

Author SHA1 Message Date
frnandu
b55978d7bc
feat: just in time channels with lsps2 (#2275)
* feat: just in time channels with lsps2

* fix: clarify JIT receive channel fee

* fix: fees

* fix: fees 2

* fix: don't show low inbound when LSPS2 is active

* fix: remove the receive limit below the input if LSPS2 is being used

* fix: simplify

* fix: bring back fee % for outgoing

* fix: remove unneeded changes

* fix: typo

* fix: unneeded

* fix: don't show open first channel is LSPS2

* feat: clearer JIT channel fee copy on receive screen

* fix: add LSPS2 var info

* fix: don't duplicate JIT fee hint on create invoice form

* fix: make paymentDone a standard boolean

* fix: update to golang:1.26 in Dockerfile

* feat: read LSPS2 sources from channel suggestions, set minimum receive amount, update guide link

* docs:  update LDK_LSPS2_ADDRESSES to be used as an override

* fix: only show minimum jit receive amount on validation error

* fix: add more detail to receive error when receiving low amounts with jit

* fix: do not use JIT when user has public channels

* feat: add option to disable JIT

* fix: isTrusted check, add jit property to event

* fix: do not require node restart for toggling JIT

* chore: simplify JIT alert

* chore: add guide link on node settings JIT description

* feat: fetch the lsp2info to have access to params like minimum/maximum payment size

* refactor: share single learn-more link across JIT fee hint branches

* fix: remove variable amount invoice support

* fix: use lsps2info for min payment size and remove channelPeerSuggestion usage of minimumChannelSize

* fix: only do amount validation according to lsps2Info values if jit is enabled in settings

* feat: add jit first payment fee alert on receive via lightning address

* fix: remove unnecessary conditional

* fix: ensure at least one sat is left over when opening JIT channel

* chore: remove hardcoded suggestions

* chore: rename JIT enabled config variable

* fix: ui checks when JIT is disabled

* fix: amount input validation message

* fix: formatting

---------

Co-authored-by: anon <anon@anon.com>
Co-authored-by: saunter <68239231+stackingsaunter@users.noreply.github.com>
Co-authored-by: fmar <fmar@fmar>
Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-06-10 14:47:07 +07:00
Roland
84e56a23db
feat: bark backend (#2374)
* feat: bark backend

* fix: use real preimage

* fix: balance shows as 0 on startup after hours offline period

* chore: add bark-specific warnings to setup security page

* chore: update setup security page

* chore: use notifications instead of polling

* feat: bark sub-wallet support

* fix: tests

* feat: add env variables for mainnet support

* chore: add custom node commands for debugging, log next notification

* fix: notification handling

* fix: fees for outgoing payments, pending payment handling, decrease required tx confirmations

* chore: bump bark version

* chore: use better bark image

* fix: back button logic and imported mnemonic state in onboarding flow

* chore: update bark copy on security page

* chore: improve copy for first transaction checklist item

* fix: backup copy based on backend

* fix: remove unused/unnecessary code
2026-06-04 11:57:29 +07:00
saunter
23dccc6c6f
feat: stories (#2172)
* feat: integrate Stories widget with backend endpoint

Add stories endpoint plumbing for HTTP and Wails, wire the Home Stories card
to fetch from /api/alby/stories, and keep it first in the right column.

Made-with: Cursor

* feat(home): story modal CTAs and preview fallback

- Add contextual actions in the story dialog (update hub with version,
  open Alby Go in-app, install extension) keyed by kind or title
- Use preview stories when the stories API request fails
- Pass hub version from useInfo into the update link

Made-with: Cursor

* feat(stories): polish modal, drop preview fallback

- Widen modal and put video edge-to-edge with overlay close button
- Drop verbose header and 'Watch on YouTube' button
- Remove previewStories fallback so widget hides until upstream API ships
- Tighten title line-height

* feat(stories): render cta from API instead of mapping by kind

Move CTA copy and URLs into the API response. Hub renders story.cta
directly, so adding new story types no longer requires a hub release.

* chore(csp): allow cdn.getalby-assets.com in img-src

* feat(stories): bump avatar size and add ring gap

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): post-review cleanups

- Use react-router Link for in-tab CTA instead of plain <a>.
- Drop redundant www.youtube.com from frame-src (embeds always go through nocookie).
- Tighten stories endpoint status check from >= 300 to >= 400.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): address CodeRabbit feedback

- Switch StoriesWidget to useSWR + swrFetcher (project convention).
- Guard story iframe with isYouTubeUrl so non-YouTube urls never embed.
- Wrap GetStories errors with fmt.Errorf("...: %w", err).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): drop isYouTubeUrl guard

Stories are curated and always YouTube; the runtime check was
redundant. CSP frame-src still constrains the iframe source.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): drop getYouTubeEmbedUrl, embed videoUrl as-is

The Alby API now sends canonical youtube-nocookie embed URLs with
autoplay/rel query strings (getAlby/getalby.com#2568), so the
runtime normalization is no longer needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): use w-16 instead of arbitrary w-[73px]

Match the avatar's size token; no magic numbers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): take videoId from API and assemble embed url locally

Pairs with getAlby/getalby.com#2568. The API now sends just the
YouTube videoId; the hub composes the canonical embed URL so the
domain/query-string format stays in one place.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): treat 3xx as non-success, matching file convention

The other status checks in alby_oauth_service.go all use >= 300;
align GetStories so redirects don't slip through.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): move viewed-storage key to constants, widen story button

Address review feedback:
- Centralize the localStorage key for viewed stories in localStorageKeys
  alongside the other keys.
- Widen the story button from w-16 to w-20 so "Alby Extension" fits on
  one line and matches the other titles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(stories): bump story button to w-24 so titles fit one line

w-20 still wrapped "Alby Extension"; w-24 fits all current titles
without truncation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Revert "chore(stories): bump story button to w-24 so titles fit one line"

This reverts commit 0b47438f50.

* chore(stories): split title words onto separate lines

Reserve two lines for every story title so avatars align regardless of
title length.

* chore(stories): align homeStoriesViewed key with sibling pattern

* chore(stories): fit titles on one line

* chore(stories): widen story button to w-21 for one-line titles

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 10:50:15 +02:00
Roland
e3373474f8
chore: remove json tags from lnclient models (#2375)
* chore: remove json tags from lnclient models

these should not be passed through the API directly

* fix: properly return not implemented errors

* fix: json tags on TLVRecord
2026-05-25 20:26:07 +05:30
René Aaron
d58b9f3ead
fix: show BOLT-12 offer button for CLN backend (#2360)
* fix: show BOLT-12 offer button for CLN backend

The CLN backend implements MakeOffer and the /api/offers endpoint is
backend-agnostic, but the UI only surfaced the "Lightning Offer" button
when backendType === "LDK", leaving CLN users without a way to reach
the flow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor: gate BOLT-12 offer UI on supportsBolt12 from useInfo

Surface a supportsBolt12 capability on the info response (true for LDK
and CLN) so the frontend stops hardcoding backend-type checks for the
BOLT-12 offer button.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 20:10:02 +07:00
daywalker90
28706ecf31
feat: add CLN backend (#2026)
* feat: add CLN as a lnclient backend

* feat: add hold invoice support for CLN backend

* fix: reduce CLN form to just addresses and lightning dir

* feat: add README for CLN grpc go code generation

* fix: cln backend does not support keysend with given preimages

* fix: hold invoice notifications in CLN backend

* fix: remove dead code in CLN backend from ListTransactions

* fix: env example CLN_ADDRESS_HOLD with different port to show it's a different service

* fix: cleanup of CLN ressources in all cases

* fix: cln backend's GetNetworkGraph only fetches specified nodeId's

* fix: cln backend: only advertise hold methods for nip47 if hold plugin enabled

* fix: cln's Shutdown should not stop CLN itself

* fix: relax the LND README line regarding env configuration

* fix: more nil checks in clnInvoiceToTransaction

* fix: prevent feerate overflow in CLN's RedeemOnchainFunds

* fix: don't access nil errors for empty reponses of certain CLN methods

* fix: nil instead of empty string in cln's GetNetworkGraph return types

* fix: nil checks for created_at in cln's clnInvoiceToTransaction

* fix: set minimum tls version to 1.2 for cln backend grpc connections

* fix: cln's subscribeOpenHoldInvoices doesn't give up as fast

* fix: deduplicate graph edges in cln's GetNetworkGraph

* fix: print the error string, not pointer address, in cln's ListChannels

* fix: remove cln's ListTransactions completely

* fix: use ListPeers instead of ListPeerChannels in cln's ListPeers

* feat: cln's MakeHoldInvoice supports minCltvExpiryDelta

* fix: use named return err in NewCLNService

* fix: cln listpeers log message

* fix: incorrect import

* fix: compile errors after rename

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-05-03 12:36:13 -07:00
Adithya Vardhan
fe1f338ed3
feat: allow payments from app connections (#2267)
* feat: allow payments from app connections

* feat: add searchable pay-from combobox

* chore: add constant for apps limit and sort apps in list

* fix: add serverside filtering, default combobox value

* chore: rename appId to fromAppId in send payment request

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-05-03 12:27:38 -07:00
Adithya Vardhan
0c421375e5
chore: update to use sat/msat suffixes everywhere (#2271)
* chore: align internal models and methods to use sat/msat suffixes

* chore: update request structs to use sat/msat suffixes

* fix: default max amount to 0 during app creation

* fix: simplify helper functions

* chore: remove unused lnclient probing methods

* chore: remove unused json tags on swap struct

* chore: update frontend to use sat/msat suffixes everywhere

* chore: use request types in frontend

* fix: linting

* fix: remove deprecated sat and msat fields in frontend

* chore: further changes

* fix: avoid sat/msat resolver variable shadowing

* fix: validate Support Alby amounts
2026-05-01 15:41:56 +05:30
René Aaron
ed7e10cf25
feat: user labels for transactions (#2265)
* feat: user labels poc

* feat: backend for transaction user labels

Add PATCH /api/transactions/:paymentHash/label that merges a
user-supplied {key:value} map into the existing transaction metadata
under the user_label key, preserving NIP-47 fields. Empty map clears
the labels. Trims whitespace, drops blank rows, caps key/value length.

Wire the frontend editor to call the endpoint and revalidate the
transactions SWR cache on success.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: include user labels as columns in CSV export

Collect the union of user_label keys across all exported transactions
and emit each one as its own label_<key> column. The existing metadata
JSON column is preserved so importers like Raccoin keep working.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: drop hardcoded label suggestions, autocomplete from prior keys

Open the editor with a single blank row instead of four pre-seeded
fields. Suggest label keys via a datalist populated from any
user_label keys already present in the SWR transactions cache, so
suggestions reflect the user's own taxonomy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: inline label editor and indicator-only list row

Replace the nested label dialog with an inline editor that toggles
within the existing transaction detail dialog, removing dialog
stacking. In the transactions list, replace per-label badges with a
single tag icon next to the timestamp so row height stays uniform; the
full labels remain visible in the detail view.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: don't bump updated_at on metadata-only edits

GORM's Update auto-touches updated_at, which made the transactions
list reorder labeled transactions to the top. Switch
SetTransactionMetadata to UpdateColumn so only the metadata column
changes. Add regression test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: route PATCH transaction label requests in wails

The desktop app routes API calls through WailsRequestRouter rather
than HTTP. Add a handler for PATCH /api/transactions/:hash/label
before the existing transaction lookup so labels work in Wails too.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: finalize backend

* chore: rename to labels

* chore: finalize frontend

* chore: use tx id to add user labels

* chore: address minor nits

* fix: linting

* fix: use explicit primary key lookups

* chore: simplify transaction csv label export

* fix(frontend): drop label count from transaction list badge

The count adds visual weight without informing any decision from the
list view. The icon-as-badge already signals labels exist; the actual
values are in the details dialog.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): revert transaction list label indicator to bare icon

The Badge wrapper made the icon-only indicator wider than tall, which
looked off. Restores the pre-PR look — a small TagIcon next to the
timestamp — since the in-dialog editor is the place to see actual labels.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-30 13:13:07 +02:00
Adithya Vardhan
dc7f3f4ccb
fix: use file paths instead of hex during LND onboarding (#2231) 2026-04-21 22:33:25 +05:30
Anshuman
1d3f9ecd41
feat: suffix balance/amount fields with explicit unit (Sat or Msat) (#2153)
* feat: add both Sat and Msat companion fields for all ambiguous balance/amount properties

* feat: add sat and msat companion fields to backend API responses

* chore: align frontend types and other missing fields

* chore: keep old formula for calculating total fee sat

* chore: remove unnecessary balance assignments in cashu and phoenix

* chore: add deprecated comment to non unit fields

* chore: rename callers and variable to specify units

* chore: remove msat fields for channel size and liquidity fields

* chore: drop msat fields from onchain channel size and liquidity responses

* chore: further changes

* chore: remove amount msat field onchain tx

* chore: remove msats from onchain balance response

* chore: remove msat fields for swaps

* chore: remove msat fields for punishment reserves

* chore: simplify rebalancing fee calculation

* chore: remove unnecessary fields

* chore: mark deprecated fields in frontend types

---------

Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-17 13:53:28 +05:30
Adithya Vardhan
b1bd7c2587
feat: track last settled transaction time for apps (#2214)
* feat: track last settled transaction time for apps

* fix: use default subwallet ordering and app_id logging in event handler

* chore: rename to last_settled_transaction_at and remove last tx migration

* chore: split app settlement update and budget check

* chore: extract app display name helper into utils function
2026-04-09 16:26:45 +05:30
Adithya Vardhan
de60b2565c
fix: unlock error when node is not started (#2151)
* fix: unlock error when node is not started

* chore: use ErrLNClientNotStarted variable
2026-04-07 17:38:47 +05:30
Dunsin
e157c288b3
feat: add chain data source and address to about page (#2013)
* feat: add chain data source and address to about page

* fix: only show chainsource for ldk

* fix: redact chain-source address secrets and return complete bitcoind endpoint

* chore: make sanitize function readable and add tests

* fix: align ldk chain data source labels

---------

Co-authored-by: anon <anon@anon.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-07 03:25:13 +05:30
Sergey B.
f2ea668df8
Adding checks for ok status code in responses (#2178)
* fix: checks for ok status code in responses

* refactor: replacing native fetch with useSWR

* chore: remove url from logs

* chore: add phoenixd error logs for non-success responses

* chore: add use currencies hook

* chore: use loading from currencies hook and filter out btc

---------

Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-03-31 23:21:26 +05:30
frnandu
354099cbff
feat: encrypt xpub for auto swap outs (#1973)
* feat: encrypt xpub for auto swap out

* fix: include encryptionKey in the cache key (sha256)

* fix: make cache 2 level nested map

* chore: comment

* fix: missing import

* fix: use ValidateXpub

* fix: cleanup

* fix: cleanup

* fix: better name

* fix: cleanup

* fix: cleanup

* fix: cleanup

* fix: open dialog to ask password on autoswap xpub

* fix: reject extended private keys

* fix: fix amount comp

* chore: improve autoswap destination handling and form submission flow

* fix: clear cached xpub when enabling autoswaps

* fix: autoswap destination validation and xpub handling

* chore: add mutex for auto swap xpub

* chore: add copy icon for destination in auto swap info

---------

Co-authored-by: fmar <fmar@fmar.dev>
Co-authored-by: anon <anon@anon.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-03-25 22:28:16 +05:30
Adithya Vardhan
72ad7d849c
fix: remove bitcoin maxi mode and always show crypto actions (#2135) 2026-03-13 10:17:14 +07:00
Naveen Kumar
6795640820
feat: add custom message support for subwallet transfers (#2069)
* feat: add custom message support for subwallet transfers

- Add optional message field to TransferRequest model
- Update Transfer function to use custom message with 'transfer' as fallback
- Update HTTP and Wails handlers to extract and pass message parameter
- Add message input field to IsolatedAppTopupDialog and IsolatedAppDrawDownDialog
- Maintains backward compatibility with empty message defaulting to 'transfer'

Closes #2066

* chore: rename

* chore: rename and simplify

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-02-28 13:25:23 +07:00
Adithya Vardhan
7bed6ecd86
feat: add fixed float along with bitcoin maxi mode (#2094)
* feat: add option to purchase channels with other crypto

* feat: add option to receive via other crypto

* feat: add crypto swap alert if sending fails

* feat: add bitcoin maxi mode

* fix: add invoice description on swapping

* chore: align top up wording everywhere

* chore: stop showing alert if recipient input is edited

* chore: change swap fee to 1%

* feat: add fixed float option to deposit and withdraw pages

* chore: extract fixed float swap in flow

* chore: add FixedFloatButton component

* chore: store bitcoin maxi setting in config

* fix: tests using mockery

* fix: issues
2026-02-28 11:54:28 +07:00
Adithya Vardhan
3aa167a7c4
fix: add err handling to db queries (#2064)
* fix: add err handling to db queries

* chore: add error handling to GetApp

* chore: wrap the original error

* fix: retrieve balance after err != nil check

* chore: minor code cleanup

* chore: add error handling to app permission listing in GetApp

* chore: convert GetBudgetUsageSat to GetBudgetUsage

* chore: add tests for GetBudgetUsage

* chore: separate budget window tests

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-02-27 16:31:25 +07:00
Adithya Vardhan
4efe735acf
fix: prevent LN client access during shutdown (#2096)
* fix: prevent LN client access during shutdown

* chore: run mockery

* chore: push lnClientShuttingDown inside stopLNClient

* fix: use atomic bool for synced access
2026-02-27 15:45:09 +07:00
Adithya Vardhan
a2af8fd598
fix: return optional total balance in list apps response for subwallets (#2057)
* 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
2026-02-26 12:25:06 +05:30
klabo
4353aa4e57
feat: add HIDE_UPDATE_BANNER environment variable (#2051)
* 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>
2026-02-10 22:30:08 +05:30
Sergey B.
5281681776
feat: remove hasLdkDir check (#2014)
* feat: remove hasLdkDir check

* chore: regenerate mocks

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-02-09 21:39:25 +07:00
Roland
1f1aacfa8b
chore: use encrypted jwt secret (#1988)
* chore: use encrypted jwt secret

* chore: improve jwt secret unlock test

* chore: replace unencrypted jwt secret on unlock

* chore: add TODO to remove encrypted JWT secret check after 2027
2025-12-17 00:25:33 +07:00
Adithya Vardhan
1fde06a61d
feat: add retries for swap refund (#1914)
* feat: add retries for swap refund

* chore: address feedback
2025-11-18 11:05:20 +07:00
Roland
87146bf80b
fix: handle unexpected subscription closure from relay pool (#1911)
* 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
2025-11-18 11:03:51 +07:00
René Aaron
6294d519c2
feat: bip177 (#1864)
* feat: bip177 option in settings

* fix: tests

* fix: use constants

* fix: bitcoin display format type

* fix: patch request

* fix: cleanup types

* fix: migrate to formatted bitcoin amount component

* fix: prevent banner from being shown again when updating settings

* fix: move stuff into api

* fix: component usage

* fix: onchain transaction table

* fix: amounts

* fix: format numbers

* fix: settings sections

* fix: copy

* chore: use existing constants

* chore: minor ui fixes and copy improvements for amount displays

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2025-11-10 15:48:27 +07:00
Roland
4b82192e04
chore: enable 0-conf for LDK flashsats channels (#1884) 2025-11-07 00:13:10 +07:00
René Aaron
0c7cf4fcf6
fix: delete lightning address when deleting a sub-wallet (#1858)
* fix: delete lightning address when deleting a sub-wallet

* fix: pass app to useDeleteApp hook

* fix: move deletion to server

* fix: merge changes

* Update frontend/src/components/connections/DisconnectApp.tsx

Co-authored-by: Adithya Vardhan <imadithyavardhan@gmail.com>

* fix: create helper function

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
Co-authored-by: Adithya Vardhan <imadithyavardhan@gmail.com>
2025-11-06 16:41:12 +05:30
Roland
377a3169c6
feat: support multiple relays (#1802)
* 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
2025-11-06 18:01:09 +07:00
Krrish Sehgal
faf80b122d
fix: patch app endpoints should allow partial fields (#1778)
* 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>
2025-10-14 14:42:55 +07:00
Krrish Sehgal
0d28c0d429
fix: case sensitive search in postgres (#1801) 2025-10-14 13:27:21 +07:00
Roland
1ebd8e19cb
fix: check payment is not nil before setting invoice and fee (#1790) 2025-10-14 13:24:50 +07:00
Krrish Sehgal
392eef45bc
fix: add nil checks to get-swap-service (#1788) 2025-10-14 12:39:54 +07:00
Roland
8223f0a11e
Revert "chore: do not pass channel expiry blocks to alby create LSP order endpoint" (#1762)
Revert "chore: do not pass channel expiry blocks to alby create LSP order end…"

This reverts commit 26342781e9.
2025-09-23 12:18:46 +07:00
Roland
26342781e9
chore: do not pass channel expiry blocks to alby create LSP order endpoint (#1754)
(so alby can dynamically choose it based on channel costs)
2025-09-22 22:12:47 +07:00
Adithya Vardhan
5538765123
chore: always add swap out fees on top (#1739) 2025-09-19 13:14:38 +07:00
Roland
595361df27
feat: read only JWT for http api use (#1717)
* feat: read only JWT for http api use

* fix: pass permission to start and unlock endpoints

* chore: add http service JWT tests

* chore: update mocks

* fix: close db in tests
2025-09-19 13:07:10 +07:00
Roland
a294e1b169
feat: rebalance through node pubkey (#1731)
* feat: rebalance through node pubkey (WIP)

* fix: check if remote channel policy exists
2025-09-19 12:30:51 +07:00
Adithya Vardhan
55e5477076
feat: request channel info + orders from alby oauth endpoint (#1714)
* feat: request channel info + orders from alby oauth endpoint

* fix: tests

* chore: use identifier instead of url

* chore: change timeout to 30s

* fix: handle optional invoice when requesting lsp order

* chore: minor code cleanup, fixed incorrect error messages

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2025-09-18 13:04:46 +07:00
Roland
3787f54006
Fix: use LNClient payment context (#1728)
* fix: mark failed payment as settled

* fix: use lnclient context for paying instead of request context
2025-09-16 20:53:02 +07:00
Adithya Vardhan
4e0b9c5b37
chore: use NewRequestWithContext instead of NewRequest (#1677) 2025-09-02 19:52:30 +07:00
Roland
7a38f051c5
fix: auto swap to xpub (#1662) 2025-08-29 16:47:31 +07:00
Roland
13c24c7a87
feat: choose payment method when opening first channel (#1606)
* 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
2025-08-27 23:34:15 +07:00
Roland
aae53d603f
feat: merge app store and connections page (#1596)
* feat: merge app store and connections page

* feat: app store detail for connected apps (WIP)

* feat: add connected app details to app store detail page (WIP)

* feat: add budget usage to app detail pages

* chore: improve readonly permissions ui

* feat: improve mobile responsiveness for new connections / app store (WIP)

* fix: mobile app detail header actions

* feat: add single app detail to alby go

* chore: rename suggested apps to app store apps

* chore: hide duplicated budget renewal in app detail single connected app

* fix: heading copy

* chore: redirect from app store detail to app details page if already connected, improve edit state

* feat: move budget and lightning address to cards, add connection details modal, better accessibility

* chore: remove unused code

* fix: app store category sorting

* chore: change topup/drawdown copy

* chore: remove unused app store detail header code

* chore: update icons, minor dropdown improvements

* fix: remove metadata bg

* fix: reorder buttons

* fix: remove optional jsx props

* fix: permissions spacing

* chore: remove unused, unnecessary and duplicated code

* chore: add missing suggested apps data, make app usage look better for isolated non-subwallet apps

* chore: move disconnect button into advanced dropdown on app details page

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
2025-08-27 22:51:18 +07:00
Roland
1add20094e
feat: payment failed alert (#1593)
* feat: payment failed alert (WIP)

* feat: add payment failed alert to all payment flows, fix button sizes on mobile

* chore: improve copy

* chore: adjust spacing

---------

Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2025-08-21 17:09:39 +05:30
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
cdc6ef8dab
fix: move filtering out subwallets on apps page to backend (#1614)
fix: move filtering out subwallets on app page to backend
2025-08-19 17:31:54 +07:00
Adithya Vardhan
46a491ef00
feat: add swap out and onchain withdraw to send flow (#1582)
* 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>
2025-08-15 18:28:00 +07:00