100 Commits
Author SHA1 Message Date
Evan Kaloudis 3883a4158a docs: add SECURITY.md with vulnerability disclosure policy 2026-08-01 18:42:07 -04:00
Evan Kaloudis 4fa599068d views: WalletConfiguration: show wallet interface label on initialized wallets 2026-07-30 22:14:33 -04:00
Evan Kaloudis e34795e9bd views: WalletConfiguration: lock interface for initialized LDK Node
Hide the wallet interface dropdown once an LDK Node wallet has been
initialized, matching the existing behavior for Embedded LND wallets
with an admin macaroon. Show a read-only, localized Network label in
its place, as Embedded LND does.
2026-07-30 22:08:11 -04:00
Evan Kaloudis 7826ddd2ad views: Lockscreen: extract isSecurityManagementFlow getter 2026-07-30 09:01:39 -04:00
Evan Kaloudis c629b6668a ui: SetDuressPin: align styling with SetPin
Use the Screen component for the themed gradient background, add
horizontal margins around the duress PIN explanation text, and match
SetPin's heading offset.
2026-07-30 00:02:31 -04:00
Evan Kaloudis cea5a78e28 views: Lockscreen: prevent duress wipe in security management flows
When the Lockscreen was opened from Security settings to delete or
change a PIN or password, entering duress credentials still triggered
deleteNodes() and wiped all wallet configurations. Duress credentials
now count as an incorrect entry in these flows and only trigger the
wipe on a genuine login attempt.

Also clarify the prompts in the delete duress flows so users know the
login credential is expected, not the duress one.

Fixes #3725
2026-07-30 00:02:31 -04:00
Evan Kaloudis 339a3c91e2 deps: bump brace-expansion 2.x to 2.1.3 (CVE-2026-14257 backport) 2026-07-28 12:28:04 -04:00
Evan Kaloudis 7ec9f88fb1 build: run prettier on generated proto types after gen-proto
pbts emits proto/lightning.d.ts unformatted, which then fails the
  prettier check since it globs **/*.ts*. Format it as part of gen-proto
  so regenerating bindings doesn't require a manual fixup pass.

  proto/lightning.js is left as pbjs emits it - it isn't covered by the
  prettier check.
2026-07-28 03:31:38 -04:00
Evan Kaloudis 4f36cad55c fix(LNC): route register callbacks through events to avoid new-arch crash 2026-07-27 10:54:33 -04:00
Evan Kaloudis 0361568958 deps: fix shell-quote DoS, clean up minimatch pins
Addresses two high-severity Dependabot alerts:

- shell-quote <= 1.8.4 (GHSA-395f-4hp3-45gv, quadratic parse() DoS):
  bump concurrently to 10.0.4 (pins shell-quote 1.9.0) and refresh the
  remaining lockfile entries to 1.10.0. Closes alert #377.

- brace-expansion <= 5.0.7 (GHSA-mh99-v99m-4gvg, OOM crash via chained
  brace groups): only 5.0.8 (ESM-only) is patched, so the CJS
  minimatch@3/@5 chains must stay on 1.1.16/2.1.2 for now. Remove the
  global minimatch/brace-expansion resolutions, which were forcing
  minimatch ^5/^10 requests (protobufjs-cli -> glob@8,
  react-native-blob-util -> glob@13, and
  @typescript-eslint/typescript-estree) down to 3.1.5/1.1.16 and
  orphaning the scoped react-native-blob-util/* pins (they never
  matched: the chain runs through glob, not a direct dep). Each
  minimatch major now resolves its proper brace-expansion line,
  including the patched 5.0.8 for the ^5.0.5 range.

All affected packages are dev/build tooling; nothing ships in the app
bundle. Alert #388 remains open on brace-expansion 1.1.16/2.1.2 until
upstream backports land.
2026-07-27 09:49:31 -04:00
Evan Kaloudis d208abf758 Version bump: v13.1.4-alpha 2026-07-26 09:31:42 -04:00
Evan Kaloudis b83051de59 tests: add mocha suite for vendored lnc-rn lib
The module's 'mocha --reporter spec' test script has been dead
scaffolding since the beginning - upstream lightninglabs/lnc-rn never
shipped a test directory - so yarn test always failed with 'No test
files found'.

Add a suite for the parts of lib/ that run in plain Node (lnc.ts needs
react-native and is exercised through the app):
- api/createRpc: unary calls route to lnc.request with capitalized
  method names; every entry in lnc-core's subscriptionMethods routes
  to lnc.subscribe
- util/credentialStore: field storage, isPaired logic, clear()
- util/log: level filtering, prefix naming, fromEnv no-op default

Wiring notes:
- .mocharc.yml requires ts-node/register/transpile-only so no
  @types/mocha or @types/chai devDependencies are needed
- the spec pattern avoids ** because the minimatch 9 resolution pin
  makes mocha's bundled glob 7 crash on globstar (GLOBSTAR is a Symbol
  in minimatch 4+)
- root jest gains 'zeus_modules' in testPathIgnorePatterns: its
  crawler only skips node_modules, so it would otherwise collect these
  mocha tests into the app's jest run
2026-07-25 14:40:11 -04:00
Evan Kaloudis ec2197db28 build: fix vendored lnc-rn bob build under repo nesting
The lnc-rn prepare step (bob build) failed its typescript target on
every yarn install inside the module: tsc's automatic @types inclusion
walks up parent node_modules, so the vendored copy picked up the zeus
root's @types/lodash, whose 'infer N extends number' syntax the
package's pinned TypeScript 4.5.5 cannot parse (TS1005). Upstream
lnc-rn never hits this because it is not nested inside another repo.

Fix: restrict typeRoots to the package's own node_modules/@types.

Also commit the dist/ output regenerated by the pinned toolchain so
prepare is idempotent and installs leave a clean tree:
- dist/typescript is byte-identical, so the type surface zeus's tsc
  consumes is unchanged
- dist/commonjs and dist/module drift is babel class-property lowering
  (previous committed copy kept class-fields syntax); zeus never runs
  these files - Metro resolves the react-native field to lib/ source
- dist/commonjs/package.json ({"type":"commonjs"}) is dropped: bob
  0.18.3 does not emit it and the package has no "type" field, so CJS
  is already the default
2026-07-25 14:32:55 -04:00
Evan Kaloudis effc8859c4 chore(deps): clear Dependabot alerts on transitive dependencies
Root:
- bump brace-expansion resolutions for GHSA-3jxr-9vmj-r5cp: blanket
  pin 1.1.13 -> 1.1.16, protobufjs-cli scope 2.0.3 -> 2.1.2; add
  react-native-blob-util/brace-expansion 5.0.8 so the minimatch 10 /
  glob 13 subtree gets the only patched line for GHSA-mh99-v99m-4gvg
- re-resolve the stale ws@^6.2.3 lockfile entry 6.2.3 -> 6.2.6 for
  GHSA-96hv-2xvq-fx4p (dev-only, @react-native-community/cli-server-api)

zeus_modules/@lightninglabs/lnc-rn (vendored; dev tooling only, none
of this is bundled into the app):
- js-yaml 3.14.1 -> 3.15.0 and 4.1.0 -> 4.3.0 (via mocha/js-yaml
  resolution) for GHSA-52cp-r559-cp3m and GHSA-h67p-54hq-rp68
- ws 6.2.3 -> 6.2.6 and 7.5.10 -> 7.5.13 for GHSA-96hv-2xvq-fx4p
2026-07-25 14:21:48 -04:00
Evan Kaloudis f9cfb74d74 chore(deps): migrate lnc-rn from deprecated tslint to eslint v9
Applies lightninglabs/lnc-rn#45 to the vendored copy in zeus_modules:

- add eslint.config.mjs (flat config, eslint v9 + typescript-eslint v8)
  translating the previous tslint.json rule set
- swap tslint/tslint-config-prettier devDependencies for @eslint/js,
  eslint, eslint-config-prettier, globals and typescript-eslint;
  lint script is now 'eslint lib'
- drop unused Proxy handler params in lib/api/createRpc.ts and the
  unused catch binding in lib/lnc.ts, mirrored into the prebuilt dist/
- regenerate the module's local yarn.lock

No runtime behavior change. The root package.json and yarn.lock are
untouched, so contributors do not need to re-run yarn.
2026-07-25 01:00:58 -04:00
Evan Kaloudis 8a7d9fc8b1 fix: install TextEncoder/TextDecoder polyfills before protobufjs loads
protobufjs v8 reads TextDecoder at import time, and Hermes does not
provide it. The polyfill assignment in index.js ran after hoisted
imports, so the app crashed on launch with 'Property TextDecoder
doesn't exist'. Move the polyfills into their own module imported
first so they are installed before any other module executes.
2026-07-24 22:07:45 -04:00
Evan Kaloudis 4d03977a0d chore(deps): bump protobufjs to v8, regenerate proto bindings
Upgrades the protobuf toolchain and runtime together, as they are
version-coupled (protobufjs-cli 2.5.x peer-requires protobufjs ^8.6):

- protobufjs 7.6.5 -> 8.7.1 (runtime; v8's only breaking change is
  Edition 2024 descriptor support - LND protos are proto3 and the
  runtime APIs Zeus uses, util.Long/configure/Writer/Reader, are
  unchanged)
- protobufjs-cli 2.0.0 -> 2.5.1 (dev; supersedes #4257, which would
  have created a peer mismatch against the 7.x runtime)
- long 5.2.3 -> 5.3.2 (protobufjs 8 requires ^5.3.2; keeping the
  direct dep in lockstep avoids two hoisted Long classes and
  instanceof mismatches in the Long wiring in index.js)
- gen-proto: add -p proto so pbjs can resolve import "lightning.proto"
  from the rpc subdirectory protos; the script failed with ENOENT
  without it (on both old and new CLI versions)
- proto/lightning.js + lightning.d.ts regenerated with the new
  toolchain (v8-era codegen: unknown-field preservation, recursion
  depth guards); d.ts formatted with the repo prettier config
2026-07-24 18:22:29 -04:00
Evan Kaloudis 8b9f18dc9f fix: pin react to 19.2.3 for RN 0.85.3 renderer compatibility 2026-07-24 18:16:46 -04:00
Evan Kaloudis aec7b5b2b6 deps: iOS: update Podfile.lock 2026-07-22 10:22:56 -04:00
Evan Kaloudis 282f3fe039 chore(deps): bump 47 minor and patch dependencies
Slimmed-down version of #4247 (dependabot minor-and-patch group),
excluding the React Native 0.86 upgrade train and one breaking bump:

- react-native, @react-native/*, @react-native-community/cli,
  @types/react, react-native-reanimated, react-native-worklets:
  kept at 0.85.3-era versions; RN 0.86 should land as its own PR
  (@react-native/jest-preset is an exact-version peer dep of RN,
  and the @types/react bump caused the tsc failures on #4247)
- js-lnurl kept at 0.5.1: 0.6.0 removes the decipherAES export
  used by views/LnurlPay/Success.tsx and needs a migration PR
- events, mobx, concurrently, protobufjs-cli omitted: already
  bumped on master via #4248/#4253/#4251/#4252

Also bumps the six remaining @typescript-eslint/* resolution pins
to 8.65.0 so they stay consistent with eslint-plugin/parser
(dependabot left them at 8.59.3).
2026-07-22 10:22:56 -04:00
Evan Kaloudis 68764e9c8f Version bump: v13.1.3-rc1 2026-07-21 16:34:00 -04:00
Evan Kaloudis 74ad2b2fbc Receive: surface Flow LSP proposal rejection as dismissable warning
Previously a rejected /proposal call cleared the LSP's error message
entirely, so users saw a plain unwrapped invoice with no indication
the LSP declined to wrap it (e.g. channel opens frozen around a
reorg-risk block range).
2026-07-20 20:35:35 -04:00
Evan Kaloudis 52282e9d88 stores: prevent stale closeChannel error from wiping channel list
On LND REST, closeChannel is a streaming endpoint whose HTTP response
stays open until the closing tx confirms. ChannelsStore.closeChannel
force-resolves after 6 seconds and the user returns to a repopulated
channel list, but the underlying request's handlers were never
detached. When the generic 30-second REST timeout rejected the still-
pending call, handleChannelCloseError ran getChannelsError(), setting
channels = [] and blanking the open channels list until the next
refetch.

Fix in two parts:
- share the settled flag in both directions so the real call's late
  then/catch handlers no-op once the forced resolution has fired
- stop calling getChannelsError() from handleChannelCloseError; a
  failed close request doesn't invalidate the channel list, so only
  set closeChannelErr and clear closingChannel

Fixes #4229
2026-07-15 12:54:14 -04:00
Evan Kaloudis 2c4112a329 SwipeButton: unlock knob when screen regains focus
The knob locked permanently after a successful swipe, so if the send
failed and the user navigated back to retry, it was stuck at the right.
Reset it when the screen regains focus.
2026-07-15 11:59:47 -04:00
Evan Kaloudis 14c2de4f98 fix: Developer Tools: default max_htlc_msat when creating missing edge
lnd recreates a missing edge with max_htlc 0 while presetting the
required-max-htlc message flag, so its keep-current-value path leaves 0
in place and a blank max_htlc_msat always fails validation with
'min_htlc 1000 mSAT greater than max_htlc 0 mSAT'.

Pass each channel's local_constraints.max_pending_amt_msat through the
sub-item list and use it as max_htlc_msat when create_missing_edge is
enabled and the field is left blank - the same value lnd's own
on-the-fly migration would pick. Explicit values still win, and with
the toggle off, blank continues to mean 'keep current' like lncli.
2026-07-13 17:07:46 -04:00
Evan Kaloudis 2a37e32826 refactor: Wallet: drop vestigial selectNodeOnStartup guard in fetchData
The initialStart clause was self-defeating: any connecting fetchData run
sets initialStart to false ~30 lines earlier, so the condition could
never block by the time it was evaluated. The invariant it aimed for -
don't consume the initial deep link before startup wallet selection -
is now enforced by the _replacedForWalletSelection gate and the
once-only URL tracking in LinkingUtils.
2026-07-13 16:41:11 -04:00
Evan Kaloudis a35f28422b fix: deep links handled twice with 'Select wallet on start-up'
When 'Select wallet on start-up' is enabled, the Wallet view is replaced
by the wallet selection screen and later re-created, so more than one
instance can consume Linking.getInitialURL() - each with its own fresh
initialLoad state - loading the same invoice twice. A late focus or
AppState trigger on the replaced instance could also fall through to
fetchData (initialStart was already false by then), connecting to the
previously selected wallet in the background and opening the deep link
over the wallet picker.

- track the last handled URL in the LinkingUtils singleton and skip it
  in handleInitialUrl, so the initial URL is only ever processed once,
  regardless of how many Wallet instances mount. This also covers
  Android's onNewIntent + setIntent behavior, which makes
  getInitialURL() return the most recent warm deep link on every
  subsequent call. Deliberate re-taps of the same link still work, as
  the 'url' event path bypasses the check
- gate getSettingsAndNavigate once the instance has replaced itself
  with the startup wallet selection screen
- store the Linking 'url' subscription, remove any prior one before
  re-registering, and clean it up on unmount so a stale instance can't
  keep handling warm deep links alongside the live one

Fixes #4218
2026-07-13 16:40:33 -04:00
Evan Kaloudis ee7561ebe6 fix: display units for invoice expiry and CLTV expiry (#4223)
The PaymentRequest view rendered the decoded expiry as raw seconds
(e.g. 3600) and cltv_expiry as a bare number. Display the expiry as a
humanized duration via the Invoice model's existing formatter, and
append the blocks unit to CLTV expiry on both the PaymentRequest and
Invoice views.

The model's originalTimeUntilExpiryInSeconds only worked when a bolt11
string was available to decode, but pay_req is built from a backend
decodepayreq response that carries no bolt11 string. Fall back to the
raw expiry/expires_at fields in that case.
2026-07-13 16:15:23 -04:00
Evan Kaloudis 05981cc950 SwipeButton: lock knob in place after successful swipe
Previously the pan responder stayed fully active after a successful
swipe, and any new touch on the knob reset the pan value to 0 while
navigation to the sending screen was still pending, making the button
visibly pop back to the left before the transition. The offset state
was also captured in a stale closure (always 0), and the success
animation was a JS-driven spring started after the payment work, so it
could be starved by the JS thread and leave the knob short of the
right edge.

Pin the knob at the end position synchronously on success, ignore
further responder grants once completed, drop the broken offset
accumulation, and spring back on responder termination.
2026-07-13 15:52:58 -04:00
Evan Kaloudis 89447a25c2 feat: Developer Tools: add updateChannelPolicy with create_missing_edge
Adds an updateChannelPolicy command to the LND Developer Tools,
mirroring lncli updatechanpolicy: base_fee_msat, fee_rate_ppm,
time_lock_delta, and min/max_htlc_msat inputs, a create_missing_edge
toggle, and a global or per-channel target picker.

Backed by a raw PolicyUpdateRequest passthrough on lnd (REST),
embedded-lnd (new lndmobile binding + iOS dispatch table entry), and
lightning-node-connect, kept separate from the production setFees
flow so units and inbound-fee handling there are untouched.
2026-07-13 11:39:14 -04:00
Evan Kaloudis 3783213a8d ios: enable -fcxx-modules so framework headers can @import Foundation in C++ context 2026-07-12 14:46:09 -04:00
Evan Kaloudis e288653ee8 ios: drop SendPaymentSync dispatch entry (removed in lnd v0.21) 2026-07-12 14:46:09 -04:00
Evan Kaloudis aaebdb6de3 feat: BalancePane: surface pending close balance alongside pending open 2026-07-12 14:46:09 -04:00
Evan Kaloudis 6547addcd6 models: prefer Hop.amt_to_forward_msat for forward-compat with lnd v0.22 2026-07-12 14:46:09 -04:00
Evan Kaloudis d2c90b1b45 deps: bump embedded-lnd to v0.21.1-beta-zeus 2026-07-12 14:46:09 -04:00
Evan Kaloudis b6108fdef4 ci: add Dependabot config for npm and GitHub Actions version updates
Adds scheduled weekly version-update PRs for the root npm manifest and
the GitHub Actions used by CI. Minor/patch npm bumps are grouped into a
single PR to keep noise down across the large dependency tree; major
bumps get their own PRs so native / crypto-sensitive upgrades can be
reviewed and tested in isolation.

Security updates were already enabled at the repo level (Dependabot
already opens security PRs across all manifests, including the vendored
zeus_modules sublocks); this adds routine version bumps on top.
2026-07-08 11:48:25 -04:00
Evan Kaloudis 85753b0224 deps: patch ws, js-yaml, and markdown-it security alerts
Closes five Dependabot alerts in the root manifest:

- ws 8.20.1 -> 8.21.0   memory-exhaustion DoS (high)   #343
- ws 7.5.10 -> 7.5.11   memory-exhaustion DoS (high)   #342
- js-yaml 4.1.1 -> 4.3.0  quadratic DoS (medium)       #362
- js-yaml 3.14.2 -> 3.15.0 quadratic DoS (medium)      #363
- markdown-it 14.1.1 -> 14.2.0 quadratic DoS (medium)  #349

ws (v8): the vulnerable copy was pinned by engine.io-client@6.6.5 via
ws ~8.20.1. Refreshing engine.io-client to 6.6.6 (within its existing
~6.6.1 range) naturally pulls the patched ws ~8.21.0 -> 8.21.0, so no
resolution override was needed.

ws (v7) and both js-yaml copies: existing ranges already permitted the
patched versions; fixed by refreshing the lockfile.

markdown-it: was explicitly pinned to the vulnerable 14.1.1 in
resolutions; bumped that entry to 14.2.0.

Lockfile-only re-resolution (yarn install --ignore-scripts); no source
changes.
2026-07-08 10:56:18 -04:00
Evan Kaloudis 8b5b5004da docs: add Claude Code skill library under .claude/skills
Adds 16 project skills (plus 3 runnable diagnostic scripts) that encode
  the project's architecture contracts, backend capability matrix, storage
  and migration protocols, build/run/debug runbooks, failure archaeology,
  Lightning domain reference, and research discipline, so contributors and
  AI coding sessions can operate at maintainer standard without rederiving
  project knowledge.

  All facts were verified against master c5fd094fb and adversarially
  reviewed (factual/doctrine/usability passes) before inclusion. Also
  updates .gitignore to share .claude/skills/ while keeping all other
  .claude/ files (e.g. settings.local.json) local.
2026-07-06 12:43:26 -04:00
Evan Kaloudis c5fd094fbf Version bump: v13.1.3-alpha 2026-07-02 10:20:49 -04:00
Evan Kaloudis a2dc04ab88 Version bump: v13.1.2 2026-06-30 15:32:37 -04:00
Evan Kaloudis a011187a1a fix: Receive: set creatingInvoice synchronously in autoGenerateInvoice 2026-06-26 17:15:15 -04:00
Evan Kaloudis 8b4a772e6c ui: Receive: prevent input field flash on initial load via initialLoad state 2026-06-26 17:05:55 -04:00
Evan Kaloudis cf26c6c938 refactor: Receive: define LSP_MIN_CHANNEL_OPEN_FEE_SATS 2026-06-26 11:35:51 -04:00
Evan Kaloudis eb00ff2429 ui: Receive: highlight 0-conf fee when channel setup required 2026-06-26 11:32:44 -04:00
Evan Kaloudis 542d5f84f0 Version bump: v13.1.2-alpha 2026-06-26 11:08:43 -04:00
Evan Kaloudis f153affb27 ios: remove sponsor buttons 2026-06-26 11:07:19 -04:00
Evan Kaloudis d48a23b18a fix(LND): translate AddressType in newAddress across REST, LNC, embedded 2026-06-25 13:18:01 -04:00
Evan Kaloudis c7777cd0bf fix(wallet-header): gate redeem badge on supportsLightningAddress 2026-06-24 10:44:34 -04:00
Evan Kaloudis 80c56f45e5 cleanup: normalize certVerification type to boolean (ZEUS-4187) 2026-06-24 10:29:23 -04:00
Evan Kaloudis 4bdf72ba92 refactor: Receive: extract skipOnchain into helper 2026-06-24 10:17:44 -04:00
Evan Kaloudis 42ab061632 refactor: Receive: extract lnOnly/onChainOnly into helper 2026-06-24 10:17:43 -04:00
Evan Kaloudis 1a1926aa16 fix(nwc-settings): gate lud16 toggle on supportsLightningAddress 2026-06-24 09:47:05 -04:00
Evan Kaloudis 8e27c1f95c fix(wallet): gate Cashu LN address auto-create on supportsCashuWallet 2026-06-24 09:40:39 -04:00
Evan Kaloudis 1854ac2c29 fix(receive): show Lightning Address tab on Cashu-only backends 2026-06-23 20:09:29 -04:00
Evan Kaloudis 5ba2e13519 fix(lightning-address): skip status() on backends without a receive path 2026-06-23 20:02:03 -04:00
Evan Kaloudis 686c8e71d1 fix: Receive: treat backends without on-chain support as lightning-only 2026-06-23 19:37:21 -04:00
Evan Kaloudis bd84bdcfd5 fix(copied-toast): hoist to app root so it stops blocking touches 2026-06-22 15:36:21 -04:00
Evan Kaloudis 5b2a43320f feat(lightning-address): copy address to clipboard on tap 2026-06-22 15:11:33 -04:00
Evan Kaloudis 83a62f8d0f enhancement: AmountKeypad: support pasting amount from clipboard 2026-06-22 14:53:21 -04:00
Evan Kaloudis 8b45b41117 Version bump: v13.1.1-beta1 2026-06-20 12:56:52 -04:00
Evan Kaloudis 8792003ee9 fix(tor): scope TLS bypass to .onion HTTPS endpoints 2026-06-20 12:44:52 -04:00
Evan Kaloudis 2f7b74795a ci: reset stale CocoaPods trunk repo on Xcode Cloud workers 2026-06-20 12:26:06 -04:00
Evan Kaloudis 9de1742f6e fix(tor): trust invalid certs on LND/CLN REST over Tor
Resolves #4178. Before v13.1.0 the Tor path always trusted self-signed
  certificates because the old react-native-tor library defaulted
  trustSSL=true. react-native-nitro-tor 0.5.3 had no such knob — TLS was
  strict, so users connecting to their own LND/CLN node over a hidden
  service (the default LND REST + self-signed cert setup) regressed on
  upgrade.

  This PR plumbs a trust_invalid_certs field through doTorRequest and
  hardcodes it to true on the Tor branch in backends/LND.ts and
  backends/CLNRest.ts. The certVerification setting is intentionally
  ignored over Tor: the .onion address authenticates the endpoint at the
  Tor protocol layer, and the upstream daemon's self-signed cert can
  never match an .onion hostname, so TLS validation here is a category
  error. The wallet config UI already hides the certVerification toggle
  when Tor is enabled, so this matches the user-visible model.

  The other doTorRequest callers (utils/handleAnything.ts,
  stores/SettingsStore.ts, components/LayerBalances/LightningSwipeableRow.tsx)
  keep the strict default — they talk to public third-party services
  (lnurl resolution, Olympus, Zeus servers), not user-owned nodes.

  Schema/Rust support landed upstream in:
  - niteshbalusu11/tor-rust-sdk#4
  - niteshbalusu11/react-native-nitro-tor#10

  Picks up the matching react-native-nitro-tor 0.6.0 release.
2026-06-20 10:46:07 -04:00
Evan Kaloudis e1853c6e58 Version bump: v13.1.1-alpha 2026-06-17 17:06:36 -04:00
Evan Kaloudis cad5f03a14 deps: iOS: update Podfile.lock 2026-06-16 13:28:22 -04:00
Evan Kaloudis f58c43c63c fix: scale ldk-node payment polling to configured timeout 2026-06-16 11:51:36 -04:00
Evan Kaloudis c8a7ac5ad6 feat: configurable payment retry timeout for ldk-node bolt12 2026-06-16 10:06:04 -04:00
Evan Kaloudis 3d3751f636 feat: configurable payment retry timeout for ldk-node 2026-06-15 16:35:04 -04:00
Evan Kaloudis bbe1ff62bf Version bump: v13.1.0-rc1 2026-06-11 21:50:33 -04:00
Evan Kaloudis 32b33b8caf Version bump: v13.1.0-beta2 2026-06-08 09:43:58 -04:00
Evan Kaloudis fe7289e64b fix(clink): route bolt11 through handleAnything to reach payment source screen 2026-06-08 09:14:38 -04:00
Evan Kaloudis a7860aa961 fix(migrations): repair invoice expiry display for pre-Feb-2024 installs 2026-06-06 19:54:57 -04:00
Evan Kaloudis a84467dd64 perf(invoice): share decoded payment request between exp getters 2026-06-06 19:09:39 -04:00
Evan Kaloudis 6c785741e2 perf(bolt11): defer secp256k1 recovery until destination is read 2026-06-06 19:09:39 -04:00
Evan Kaloudis b30aea0f50 perf(bolt11): LRU-cache decode results to skip repeat sig recovery 2026-06-06 18:48:03 -04:00
Evan Kaloudis 810253c5f6 enhancement: LDK Node: expose bolt11 memos + invoice strings 2026-06-06 15:57:49 -04:00
Evan Kaloudis deb4c740ac style(nwc): match connections header icon order and spacing to app convention 2026-06-06 10:30:24 -04:00
Evan Kaloudis 96a1885e4d fix(ios): block on NWC Live Activity cleanup at app termination 2026-06-06 02:46:52 -04:00
Evan Kaloudis fab31e2b1a cleanup(ios): drop redundant iOS 16.2 availability guards in NWC intents 2026-06-06 01:13:52 -04:00
Evan Kaloudis cf93990a5f fix(ios): NWC Dynamic Island lifecycle when host app is dismissed 2026-06-06 01:13:32 -04:00
Evan Kaloudis 6154db80d0 fix(ios): keep NWC Live Activity on playing track during in-app pick 2026-06-05 14:33:54 -04:00
Evan Kaloudis cda87392c8 fix(ios): persist NWC ambient track pick made during active session 2026-06-05 14:15:43 -04:00
Evan Kaloudis 47e218b889 fix(ios): restore last-selected NWC ambient track on launch 2026-06-05 14:09:20 -04:00
Evan Kaloudis 47a2fffe57 Version bump: v13.1.0-beta1 2026-06-05 12:51:47 -04:00
Evan Kaloudis 9d249a0911 clink: move noffer row below balance rows on ChoosePaymentMethod 2026-06-05 10:07:30 -04:00
Evan Kaloudis 23c17b85f9 clink: scope noffer row balance to fixed offers, use max(lightning, ecash) 2026-06-05 09:23:37 -04:00
Evan Kaloudis db8c5609a7 fix(android): split http/https into separate <queries> intents 2026-06-05 00:24:29 -04:00
Evan Kaloudis a1369ec58e fix: clink: keep noffer row clickable on ChoosePaymentMethod regardless of lightning balance 2026-06-04 17:58:11 -04:00
Evan Kaloudis b51b4c0f4a chore(ios): remove Soft Pulse from NWC ambient tracks 2026-06-04 10:52:42 -04:00
Evan Kaloudis 926ed3857e ui: fix NWC screens for gradient themes 2026-06-04 10:52:42 -04:00
Evan Kaloudis 607928de24 fix(nwc): prevent row jump when audio track preview shows loading spinner 2026-06-04 10:52:42 -04:00
Evan Kaloudis 4b306b8dd2 locales: fix ZEUS casing 2026-06-04 10:52:42 -04:00
Evan Kaloudis 121046e2d7 refactor(ios): re-encode NWC ambient tracks from MP3 to AAC 2026-06-04 10:52:41 -04:00
Evan Kaloudis f7087ef721 fix: pass ecash param on ClinkPay nav from contacts and lightning row 2026-06-03 07:49:55 -04:00
Evan Kaloudis 71c33319d3 chore: remove unused isValidNoffer duplicate from ClinkUtils 2026-06-03 07:44:21 -04:00
Evan Kaloudis 37fcd83b13 fix: promote lone remaining mint to selected when narrowing multi-mint selection 2026-06-03 07:14:20 -04:00
Evan Kaloudis 423b3d794f test: lock VssAuthUtils key derivation against BIP-39 vectors 2026-06-02 14:54:19 -04:00
Evan Kaloudis 5c451839d5 fix: length-cap merchant-QR matching to avoid Hermes regex stack overflow 2026-06-01 22:43:20 -04:00
Evan Kaloudis 4514224c98 fix(android): dismiss previous embedded node's persistent notification on wallet switch 2026-06-01 12:26:19 -04:00
Evan Kaloudis 1b2ce94da7 fix: strip CashuDevKit FFI wrapper and surface mint detail in errors 2026-06-01 11:17:37 -04:00