Skip to content

@ledgerhq/live-desktop@4.25.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 20:18
· 362 commits to develop since this release
e4f5167

4.25.0

Minor Changes

  • #23341 a86963c Thanks @LucasWerey! - Add the accountDetail feature flag (with excludedCurrencyIds) for the new Account Detail page and send its state to analytics.

  • #23367 bc0a9e1 Thanks @LucasWerey! - Add the Account Detail page shell behind the accountDetail flag: /account routes switch per account to the new page (token sub-accounts redirect to their parent), the legacy page otherwise.

  • #23381 755532d Thanks @LucasWerey! - Add the Account Detail header on LWD: back button, account name, shortened address with the network icon, and an "Account settings" button.

  • #23401 0c0f9b2 Thanks @LucasWerey! - Add the Account Detail settings dialog on LWD: the settings button opens the account settings menu and the remove account confirmation.

  • #23463 68c2837 Thanks @LucasWerey! - Change the account name from the LWD Account Detail settings dialog: new change name step (back to the menu, name field, Change name button), disabled while accounts are syncing.

  • #23486 ec7b8b9 Thanks @LucasWerey! - Show the advanced logs from the LWD Account Detail settings dialog: new advanced logs step (back to the menu, derivation tip, sync date, account JSON, Copy logs with a Copied state).

  • #23496 914c8b7 Thanks @LucasWerey! - Show the assets of the account on the LWD Account Detail page: native coin and tokens with balance, value and trend, sorted by value. The assets table moves to mvvm/components/AssetsTable and can hide its price column.

  • #23412 7644e3f Thanks @LucasWerey! - Add the Transactions section to the LWD Account Detail page: the 3 latest operations of the account and its tokens, opening the full history scoped to the account. The Asset Detail section now uses the same shared component.

  • #23322 1349df3 Thanks @claudiiafg! - Extract the Contact Detail journey into @features/flow-contacts-detail so Desktop and Mobile can reuse it, while the Contacts aggregate keeps cross-journey orchestration

  • #23004 505eea9 Thanks @vpenskyi-ledger! - Fix a second account drawer opening in Swap when the receive token is a token the user does not hold yet. The parent account is now sent with toTokenId instead of the unresolvable synthetic token account, so the Swap live app builds the token account itself.

  • #23346 80a62ae Thanks @ooke-ledger! - Show perps deposit device errors with the new error state and a retry.

  • #23195 490496e Thanks @cted-ledger! - zcash: the spendable-balance warning no longer quotes a wait time that changes with the block spacing

  • #23344 e15a91d Thanks @cted-ledger! - give zcash testnet accounts the zcash screens and shielded sync, by recognising every zcash currency rather than the mainnet id only

  • #23391 ee508db Thanks @thesan! - Resolve the app configuration once, when the store is created, with resolveAppConfig from @shared/app-config. Keycloak is the first service to read it: its base URL comes from the ledgerKeyRing switch, which resolves to the option persisted under appConfigSelections, or to the CONFIG_PROFILE of the build's .env file: staging for dev, adhoc and nightly builds, prod for prerelease and release builds. The configuration stays the same for the whole session, by design: a new selection applies after an app reload. @shared/env drops the LEDGER_AUTH_* definitions.

  • #23485 623f8e6 Thanks @thesan! - @shared/auth drops the authEnvironment slice: Keycloak reads its base URL from the app config, so nothing reads it any more.

  • #23283 d2b8471 Thanks @cted-ledger! - take the zcash account type from coin-zcash instead of the bitcoin family types

  • #23385 2ec955a Thanks @LucasWerey! - Add the shared Account Detail settings contents: settings menu, advanced logs (with copy) and remove account confirmation, plus buildAdvancedLogs.

  • #23450 b0c722a Thanks @LucasWerey! - Add the Account Detail change name screen on LWM, opened from the settings sheet once it has closed (keeps the name field focused). Long account names are truncated in the settings menu.

  • #23435 e4e90c0 Thanks @LucasWerey! - Add the Account Detail advanced logs screen on LWM, opened from the settings sheet. Copy logs now shows a "Copied" state for 2 seconds.

  • #23417 56c8c10 Thanks @LucasWerey! - fix(wallet-sync): show every Ledger Sync instance and scroll the list when there are many instances

  • #23390 6582ee6 Thanks @cted-ledger! - Sign Nano S transparent Zcash sends through the legacy device path when the shielded engine is on, with the inputs and fee shown at review.

  • #23429 39529a8 Thanks @LucasWerey! - Bump Lumen to lumen-design-core 0.1.32, lumen-ui-react 0.1.64, lumen-ui-rnative 0.1.67 and lumen-utils-shared 0.1.16, and migrate Spot to its palette API (icon required, appearance="icon" dropped, check/info/error/warning/loader mapped to explicit icons, number moved to SpotNumber). The devtools native jest preset now mocks react-native-gesture-handler, which the new lumen Toaster imports.

  • #23502 c32fa7b Thanks @LucasWerey! - Open the Account settings dialog from the Crypto addresses rows when the Account Detail page is enabled for the account's currency; other rows keep the Edit name button. New AccountSettings component (web): the settings logic lives in the package and the app only provides an AccountSettingsAdapter (account name, rename, sync state, locale, derivation tag).

  • #23489 53d3149 Thanks @LucasWerey! - Keep the LWD Account Detail page header pinned at the top while scrolling, like the Asset Detail header (PageHeader accepts a className).

  • #23559 ead8b59 Thanks @jiyuzhuang! - Expose the recoverV2 feature flag to Mixpanel on mobile and desktop.

  • #23543 257305f Thanks @mcayuelas-ledger! - feat(account-balance): add the balance entity

    Crypto balances of an account, one row per asset, keyed by AccountUUID. Both apps mount the slice. Fiat stays a view.

  • #23400 beea4cd Thanks @gre-ledger! - feat(account-data): add the account data framework

    Kind registry and accountData status slice, source contract and router (ranking, batching, concurrency, pagination affinity), fetchAccountData / fetchMoreAccountData and the useAccountData hook. Both apps register the status slice and inject the router into the thunk extraArgument, with no source yet.

  • #23436 f51fe16 Thanks @gre-ledger! - Add the accounts slice, keyed by AccountUUID and kept in sync with the legacy accounts

  • #23422 b97096c Thanks @mcayuelas-ledger! - End the Asset Detail chart on the header price so the line matches the live spot

  • #23213 6ce41e8 Thanks @dilaouid! - feat(send): add the Descriptionitem component for the new send flow

  • #23495 3c062fc Thanks @mcayuelas-ledger! - feat(analytics): add the blockchainWithFunds user property (blockchain names, e.g. Arbitrum) next to accountsWithFunds, which reports the native ticker (ETH for L2s)

  • #23631 19e5335 Thanks @henri-ly! - Restore name and unit on the transaction intent asset so XRP and Stellar amount errors show the currency unit instead of "Unknown unit"

  • #23386 f40b1c2 Thanks @dilaouid! - Remove the Zenrock and Quicksilver integrations, including their chain adapters, currency definitions, feature flags and LCD endpoints

  • #23418 2621f1e Thanks @ysitbon! - Stop re-rendering every amount on a countervalues load that changes no rate

    A load now keeps a pair's rate Map and cache entry when every fetched value equals the stored one, and
    keeps the whole cache object when no pair changed. The conversions read the cache alone, through
    useCountervaluesCache, so a load that only stamps the fetch status no longer re-renders them. The
    conversions and the persisted export are the same as before.

  • #23154 3ad1a61 Thanks @ysitbon! - Move the countervalues polling loop into a Redux middleware and drop the countervalues React context.

    • After changing the countervalue currency, adding an account or tracking a new asset, amounts no longer briefly fall back to the last daily rate before the new rates land.
    • On mobile, changing the countervalue currency or adding an account no longer re-renders every amount on screen several times, and loads the rates once instead of up to three times.
    • @features/platform-market-countervalues: useCountervaluesState, useCountervaluesPolling, useCalculate, useCalculateCountervalueCallback and useSendAmount keep their names and signatures and read the countervalues slice with useSelector. The loop moves into createCountervaluesMiddleware, started with startCountervaluesSync({ savedState }). CountervaluesProvider, CountervaluesBridge, Props, PollingState and useCountervaluesUserSettings are removed.
    • Desktop: the store installs the middleware; boot starts it right before the first render, so the saved rates show from the first frame. The window focus and blur events, the network changes and the saving to disk move into the middleware's configuration.
    • Mobile: the store installs the middleware; boot starts it when the app is let through, and a reboot starts it again from the saved state. The extra session tracking pairs move from an RxJS subject into the store.
  • #23211 bcf98ff Thanks @ysitbon! - Split the countervalues Redux slice by owner. The rates now have their own slice in @domain/entity-market-countervalues (countervaluesRatesSlice, with setCountervaluesState and wipeCountervalues), stored with a shallow freeze so a load never pays for a deep freeze of every rate. @features/platform-market-countervalues keeps the loop's state in countervaluesSyncSlice (load, error, isPolling; load is one of idle, requested, loading, loadingThenRequested, replacing the former pending and triggerLoad flags) and mounts both under the same countervalues store key through countervaluesReducer, typed CountervaluesStoreState, which replaces CountervaluesState. The store reads countervalues.rates and countervalues.sync instead of countervalues.countervalues.state and countervalues.polling; persistence and the saved data are unchanged. Each slice now declares its own actions, so the COUNTERVALUES_* type strings are gone: setCountervaluesState and wipeCountervalues keep their names, typed countervaluesRates/set and countervaluesRates/wipe, and the loop's setters setCountervaluesPollingTriggerLoad, setCountervaluesStatePending, setCountervaluesStateError and setCountervaluesPollingIsPolling become the events countervaluesLoadRequested, countervaluesLoadStarted, countervaluesLoadSucceeded, countervaluesLoadFailed and countervaluesPollingSet, typed countervaluesSync/.... A load start and a load failure now dispatch one action each instead of two. The sync selectors are the slice's own selectors, and countervaluesSyncTriggerLoadSelector is gone. useCountervaluesPolling now returns only the poll, start, stop and wipe commands and no longer re-renders its callers on every load; pending and error come from the new useCountervaluesLoadStatus, which live-common's useSyncSources now reads.

  • #23353 48d5c85 Thanks @LL782! - Remove the legacy ofacGeoBlockApi after Desktop and Mobile use @features/flow-app-availability

  • #23421 cb527aa Thanks @ysitbon! - fix(desktop): persist the CAL token cache again

    The persistence middleware matched CAL actions on the hardcoded cryptoAssetsApi/ prefix, which stopped matching when the CAL api moved to the calApi reducer path. It now derives the prefix from cryptoAssetsApi.reducerPath.

  • #23365 c3e735a Thanks @abdurrahman-ledger! - Run desktop E2E against Speculinho (remote Speculos). The app passes the Speculos address and session token to its Speculos transport at each open, and exposes window.ledger.setSpeculosTarget so a relaunched remote device (new URL and token) reaches the running app. The full desktop suite uses Speculinho, the smoke job does once its caller passes SPECULINHO_URL, and failed tests attach the Speculinho logs.

  • #23518 03274f1 Thanks @gre-ledger! - Bump firebase from 9.23.0 to 12.19.0

  • #23376 4ee8f78 Thanks @mateuszpalosz-ext! - Add a balance type sync step to the new send flow, used by Aleo to refresh private records after the pool pick

  • #23360 a782d57 Thanks @mcayuelas-ledger! - Move the desktop Fear and Greed UI into the flow package

  • #22508 ad58765 Thanks @pawell24! - fix(filecoin): open transactions on Blockscout from operation details

    Blockscout identifies a Filecoin message by its Ethereum-style hash, so the explorer link is now
    built from the message CID's digest instead of the CID itself.

  • #23423 c61cbe8 Thanks @mcayuelas-ledger! - fix(portfolio): show the Market 24h variation on assets whose balance did not change over the day (LIVE-39259)

  • #23389 03f4e70 Thanks @claudiiafg! - Extract address deletion into @features/flow-contacts-delete-address so Desktop and Mobile can reuse it without going through Contact Detail. Confirmation UI stays in @features/platform-contacts. Apps still own modal mounting, navigation, translations, and analytics.

  • #23459 2f9b7e9 Thanks @gre-ledger! - feat(account-data): full sync source on AccountBridge, serving no kind yet

  • #23270 8c5a730 Thanks @gre-ledger! - Remove the dev-only BYPASS_CORS workaround

  • #23058 214f7f1 Thanks @ishaba! - feat(tron): track the sponsored send funnel in Segment

  • #23240 ed10647 Thanks @dgreen-ledger! - feat(onboarding): show the onboarding warning modal on touchscreen devices

  • #23247 c18097b Thanks @mcayuelas-ledger! - Load the market list with an RTK infinite query instead of React Query.

  • #23239 ade02b9 Thanks @mateuszpalosz-ext! - Aleo new send flow descriptor and extended self transfer flow

  • #23425 8ebcf5c Thanks @vtaranushenko-ext-ledger! - Aleo estimated signing time row on the new send flow Amount step

  • #23151 004d896 Thanks @tonykhaov! - Show and export QA onboarding logs with the device answers and the machine context, and toggle the deviceOnboarding flag from the devtool

  • #23234 c2c2f0a Thanks @LL782! - Gate desktop launch on the shared app availability flow

  • #23510 cc970db Thanks @gre-ledger! - Replace unmaintained listr with a minimal task runner in the dist script

  • #23102 4d77514 Thanks @sarneijim! - Move the shared device onboarding machine to features/platform

  • #23509 3df619d Thanks @gre-ledger! - Remove unused allure-commandline dependency

  • #23503 bd6dbc5 Thanks @mateuszpalosz-ext! - Allow Aleo token accounts to self-transfer between their public and private balances in the new send flow

  • #22782 014d4fd Thanks @KVNLS! - Run the desktop renderer with contextIsolation and sandbox enabled, and without nodeIntegration.

    Previously any XSS, Live App escape or compromised dependency executing in the renderer had full Node available: child_process, arbitrary filesystem access, and unrestricted access to the account database files. The renderer now has none of that. It runs in its own JavaScript world inside an OS-level sandbox, and reaches the main process only through the allow-listed preload bridge, which exposes one method per operation rather than a generic invoke(channel, ...) passthrough. The renderer can still read and write its own app data through the bridge, as it must to work, and password attempts against the database are throttled in the main process; making encrypted fields unreadable while the app is locked is a separate follow-up.

    Live App <webview>s are checked before they are created: isolation, sandbox and web security are pinned, only the two webview preloads are accepted, and a disallowed src scheme blocks the webview. They also can no longer load local files, which the renderer could otherwise read back through webview.loadURL().

    The three flags have to move together: sandbox has defaulted to true since Electron 20 and is auto-disabled only by nodeIntegration, so changing that one alone would silently sandbox the renderer and strip Node from the preload.

    No data migration: localStorage is keyed by an origin that does not change, and both app.json and lld.json live in the main process either way.

  • #23550 589bae3 Thanks @ooke-ledger! - Revert the network selection when swapping from Market (#23182, #23299).

  • #23226 dd34e1b Thanks @OlivierFreyssinet! - Shorten the device intent executor component names

  • #23003 57b4652 Thanks @live-github-bot! - Adapt to @ledgerhq/coin-evm 15

  • #23261 02b383b Thanks @alexstapenka-ledger! - Add a withdraw icon to the earn action confirmation dialog, a custom.dialog.menu action menu dialog on desktop for the Earn "Earn more" / "Withdraw all" choice, and the earnWithdrawV2 feature flag that gates the Earn full withdraw flow

Patch Changes

  • Updated dependencies [a86963c, 68c2837, ec7b8b9, 1349df3, c9beaff, 4831311, 9365d3a, e15a91d, d6ab47c, 393a02a, ef80ee4, d1fb4fd, a6e1e6a, b641da8, ee508db, 623f8e6, d2b8471, d2b8471, 6032338, 2ec955a, b0c722a, e4e90c0, 05e5823, 6b23210, bef895f, 6582ee6, 722c6f3, 39529a8, c32fa7b, ead8b59, 257305f, beea4cd, f51fe16, fc846e5, b97096c, b79ccab, 7b3040a, b599cb2, 3c062fc, a5a6fa6, de8fe99, 3527dbc, 80f99a8, 19e5335, 87b812e, 7da1ea9, f40b1c2, 2f9c159, a654488, 6abfd98, 2621f1e, 3ad1a61, bcf98ff, 75498cf, ad6aad8, 47e5b74, 48d5c85, ff33162, 5e9a60a, 7e54483, 4ee8f78, e5762fc, a782d57, a02d06c, ad58765, c61cbe8, 03f4e70, 2f9b7e9, ff14496, c9c482e, e66d21e, 4fd1ebc, 68cebc0, 214f7f1, ed10647, c18097b, ade02b9, bcea51b, 2e198e2, 3fadda7, 8daaded, 004d896, 98c994b, 9887c8f, df2068c, 6639142, 96f2f30, 2cd35c5, 4d77514, 307d5c0, 37a49df, bd6dbc5, 0ace271, ca063c4, 2c6e74a, e345c82, fb0ac6a, 696357f, a8d48a9, ed89930, 0d5c35d, 57b4652, b88647d, 06b6724, 4905dd1, 02b383b]:
    • @shared/feature-flags@0.27.0
    • @features/flow-account-detail-settings@0.1.0
    • @features/flow-contacts-detail@0.2.0
    • @features/flow-contacts@0.15.0
    • @features/flow-pay-contact@0.7.0
    • @ledgerhq/coin-concordium@1.6.0
    • @ledgerhq/coin-zcash@1.0.0
    • @ledgerhq/live-common@38.4.0
    • @domain/entity-currency-crypto@0.16.0
    • @shared/app-config@0.1.0
    • @shared/env@0.11.0
    • @shared/auth@0.7.0
    • @ledgerhq/coin-bitcoin@1.0.0
    • @features/flow-account-detail@0.1.0
    • @features/flow-pay-card-details@0.8.0
    • @devtools/shell@0.11.0
    • @features/flow-fear-and-greed@0.4.0
    • @features/flow-contacts-introduction@1.5.0
    • @features/flow-contacts-list@0.10.0
    • @features/flow-pay-balance@0.8.0
    • @features/flow-pay-card-assets@0.4.0
    • @features/flow-pay-card-transactions@0.6.0
    • @features/flow-pay-card-widget@0.6.0
    • @features/flow-pay-deposit@0.6.0
    • @features/flow-pay-request@0.9.0
    • @features/platform-contacts@0.11.0
    • @shared/ui-info-state@0.5.0
    • @domain/entity-account-balance@0.2.0
    • @domain/entity-account-data@0.2.0
    • @domain/api-account-data@0.2.0
    • @domain/entity-account@0.1.0
    • @features/flow-contacts-add-contact@0.8.0
    • @features/platform-currencies@0.10.0
    • @ledgerhq/wallet-btc@1.0.0
    • @features/platform-account-analytics@0.2.0
    • @features/flow-contacts-add-address@0.7.0
    • @ledgerhq/coin-stacks@0.34.0
    • @ledgerhq/ledger-wallet-framework@3.8.0
    • @ledgerhq/types-live@6.128.0
    • @ledgerhq/coin-cosmos@2.0.0
    • @features/flow-contacts-edit-address@0.5.0
    • @domain/entity-market-countervalues@0.4.0
    • @features/platform-market-countervalues@0.3.0
    • @features/flow-contacts-delete-address@0.2.0
    • @features/flow-contacts-delete-contact@0.3.0
    • @features/flow-contacts-edit-contact@0.7.0
    • @ledgerhq/coin-filecoin@2.5.0
    • @features/platform-app-update@0.1.0
    • @features/platform-device-onboarding@0.2.0
    • @devtools/bindings@0.12.0
    • @ledgerhq/coin-casper@3.6.0
    • @ledgerhq/live-dmk-speculos@0.12.0
    • @features/flow-app-availability@0.2.0
    • @ledgerhq/live-dmk-shared@0.36.0
    • @ledgerhq/live-dmk-desktop@0.25.0
    • @ledgerhq/coin-canton@1.5.0
    • @features/flow-large-screen-upsell@2.2.3
    • @features/flow-pay-feature-tour@0.8.1
    • @features/platform-feature-flags@0.9.1
    • @features/platform-feature-flags-firebase@0.1.1
    • @features/flow-pay-bank-transfer@0.4.1
    • @features/flow-pay-card-auth@0.10.1
    • @ledgerhq/asset-detail@0.12.1
    • @ledgerhq/live-send@0.1.4
    • @domain/api-aggregated-assets@0.6.1
    • @domain/api-currency-token@0.6.5
    • @domain/api-market-countervalues@0.2.1
    • @domain/entity-contact@0.12.1
    • @domain/entity-currency@0.4.7
    • @domain/entity-currency-token@0.5.6
    • @ledgerhq/asset-aggregation@0.18.1
    • @ledgerhq/coin-cardano@2.0.1
    • @ledgerhq/live-wallet@1.1.7
    • @ledgerhq/wallet-analytics@0.5.2
    • @ledgerhq/wallet-pnl@0.8.1
    • @features/platform-aggregated-assets@0.5.7
    • @features/platform-env@0.4.3
    • @ledgerhq/transaction-observability@0.5.1
    • @shared/api-services@0.10.1
    • @features/flow-pay-card@0.7.1
    • @devtools/transport-panel@0.7.0
    • @domain/entity-account-alias@0.1.1
    • @domain/entity-account-name@0.2.3
    • @domain/entity-starred-account@0.0.2
    • @ledgerhq/live-signer-evm@0.24.2
    • @ledgerhq/live-signer-tron@0.2.2
    • @features/flow-analytics-consent@0.2.10
    • @features/platform-content-ab-tests@0.2.1
    • @domain/api-card-management@0.8.2
    • @domain/api-currency-fiat@0.4.8
    • @domain/api-market-index-altcoin-season@0.4.2
    • @domain/api-market-index-fear-and-greed@0.4.2
    • @domain/api-push-devices@0.2.9
    • @features/platform-card@0.8.1