* 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>
* 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>
* 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>
* 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: draw down isolated app
* fix: copy
* chore: merge top up and draw down into transfer endpoint, use app id instead of pubkey
* chore: remove usage of useAppByPubkey
* fix: transfer description
* fix: links
* 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: rebalance into channel (WIP)
* feat: rebalancing
- add mainnet service URL
- add loading state
- add validation to avoid bad rebalancing
- add rebalance warnings
* chore: improve rebalance dialog copy
* chore: add rebalance endpoint to wails handler
* chore: change fee to 0.2%
* fix: local spendable balance check
* fix: local spendable balance check
* fix: local spendable balance check, close dialog on successful swap
* chore: use min/max for rebalancing amounts rather than errors
* docs: change rebalancing fee copy
* fix: only show rebalance option for channels that are less than half full
* fix: rebalance fee copy
* fix: reload balances after swapping
* 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>
* chore: add metadata to payments done via Send screen
* chore: use identifier from metadata
* chore: show identifier in tx list title
* chore: include more details from metadata
* chore: copy changes
* chore: add comment to metadata
* chore: type metadata before passing
* chore: revert metadata comment change
* 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>
* fix: default currency to usd for new hubs
* chore: default currency to uppercase
* chore: remove uppercase
* feat: add currency to error logs at function level for getBitcoinRate
* chore: use info.currency instead of state variable
* chore: filter out satoshi from fiat currencies
* feat: hide fiat currency if currency is SATS
---------
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: language switcher
* feat: add fiat amount to send and receive instances
* feat: add wails handler to set currency
* chore: improve fiat currency handling
- simplify code
- change api endpoint to update settings rather than just currency
- add missing fiat value on receive invoice page
- allow passing classname to formatted fiat component
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: node page revamp for desktop and mobile
add backend endpoint to fetch bitcoin rates
show usd equivalent of balances
* feat: add wails handler for bitcoin-rate
* chore: change endpoint name
* feat: sats + fiat amount into separate component
* chore: check status code
* feat: remove query params
* feat: check if endpoint returned non success code
* feat: add tooltip for mobile view for channels table
* chore: add missing error handling for alby oauth service requests
* fix: increase desktop min width, remove unused separator in channels card
* chore: remove unnecessary usd in error message
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* feat: migrate to VSS (WIP)
* feat: add ui and api endpoint to migrate ldk storage to vss
* chore: update copy of enable vss dialog
* chore: bump ldk-node-go version
* chore: minor spacing in dialog
* chore: error handling
* feat(appwalletKey): add GetBIP32ChildKey
* feat: fix interface
* feat: adding subscription WiP
* feat: handle nostr subscriptions for lifecycle of apps
* Delete .idea/.gitignore
* Delete .idea/hub.iml
* Delete .idea/modules.xml
* Delete .idea/vcs.xml
* fix: remove unnecessary
* fix: missing handling legacy app
* fix: review fixes
* fix: use app.ID for key calculation instead of passing in event
* fix: add TODO
* fix: remove unnecessary check
* fix: improve err handling and remove check
* chore: store master nostr key to avoid deriving each time
* chore: rename app nostr_pubkey to app_pubkey, extract app consumers into separate files
* chore: finish renaming
* fix: update app wallet pubkey on app creation
* fix: not NULL check
* fix: fix HandleEvent
* fix: error handling
* fix: error handling
* fix: move StartSubscription to start.go
* fix: remove duplicated error check
* fix: make tests use AppsService for creating apps
* chore: remove unused code
* chore: minor event handler improvements
- fix error code response when failing to update request event
- fix log content when failing to decrypt request event
- move logging of app to correct place
* fix: add event_handler tests for legacy app
* chore: add comment about legacy apps in deleteAppConsumer
* fix: remove unused app from tests
* fix: error handling in startAppWalletSubscription
* fix: only create event info and nostr subscription for master key if there are legacy apps
* fix: add legacy tests
* fix: move fetching of Nip47 event info to deleteAppConsumer
* fix: fixed arguments
* fix: use require instead of assert
* fix: adapt GetAppWalletKey to use DeriveKey with path 1'
* fix: for backends that don't use a mnemonic, create appKey from nostrSecretKey
* fix: cleanup eventPublisher Subscribers when relay reconnects
* fix: bip32.FirstHardenedChild + appID
* fix: remove unused env vars
* fix: generate new mnemonic if empty
* fix: add tests.CreateTestServiceWithMnemonic to fix TestEncryptedBackup
* fix: handle both relay and main ctx Done
* chore: add keys tests
* chore: add extra assertions to keys test
* chore: log when legacy app subscription is created
* chore: remove unnecessary break
* chore: add log when relay is successfully connected
* fix: only auto-start node if it has been started before
---------
Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
* 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