Repository navigation
@ledgerhq/live-desktop@4.25.0
4.25.0
Minor Changes
-
#23341
a86963cThanks @LucasWerey! - Add theaccountDetailfeature flag (withexcludedCurrencyIds) for the new Account Detail page and send its state to analytics. -
#23367
bc0a9e1Thanks @LucasWerey! - Add the Account Detail page shell behind theaccountDetailflag:/accountroutes switch per account to the new page (token sub-accounts redirect to their parent), the legacy page otherwise. -
#23381
755532dThanks @LucasWerey! - Add the Account Detail header on LWD: back button, account name, shortened address with the network icon, and an "Account settings" button. -
#23401
0c0f9b2Thanks @LucasWerey! - Add the Account Detail settings dialog on LWD: the settings button opens the account settings menu and the remove account confirmation. -
#23463
68c2837Thanks @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
ec7b8b9Thanks @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
914c8b7Thanks @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 tomvvm/components/AssetsTableand can hide its price column. -
#23412
7644e3fThanks @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
1349df3Thanks @claudiiafg! - Extract the Contact Detail journey into@features/flow-contacts-detailso Desktop and Mobile can reuse it, while the Contacts aggregate keeps cross-journey orchestration -
#23004
505eea9Thanks @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 withtoTokenIdinstead of the unresolvable synthetic token account, so the Swap live app builds the token account itself. -
#23346
80a62aeThanks @ooke-ledger! - Show perps deposit device errors with the new error state and a retry. -
#23195
490496eThanks @cted-ledger! - zcash: the spendable-balance warning no longer quotes a wait time that changes with the block spacing -
#23344
e15a91dThanks @cted-ledger! - give zcash testnet accounts the zcash screens and shielded sync, by recognising every zcash currency rather than the mainnet id only -
#23391
ee508dbThanks @thesan! - Resolve the app configuration once, when the store is created, withresolveAppConfigfrom@shared/app-config. Keycloak is the first service to read it: its base URL comes from theledgerKeyRingswitch, which resolves to the option persisted underappConfigSelections, or to theCONFIG_PROFILEof the build's.envfile:stagingfor dev, adhoc and nightly builds,prodfor prerelease and release builds. The configuration stays the same for the whole session, by design: a new selection applies after an app reload.@shared/envdrops theLEDGER_AUTH_*definitions. -
#23485
623f8e6Thanks @thesan! -@shared/authdrops theauthEnvironmentslice: Keycloak reads its base URL from the app config, so nothing reads it any more. -
#23283
d2b8471Thanks @cted-ledger! - take the zcash account type from coin-zcash instead of the bitcoin family types -
#23385
2ec955aThanks @LucasWerey! - Add the shared Account Detail settings contents: settings menu, advanced logs (with copy) and remove account confirmation, plusbuildAdvancedLogs. -
#23450
b0c722aThanks @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
e4e90c0Thanks @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
56c8c10Thanks @LucasWerey! - fix(wallet-sync): show every Ledger Sync instance and scroll the list when there are many instances -
#23390
6582ee6Thanks @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
39529a8Thanks @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 migrateSpotto its palette API (iconrequired,appearance="icon"dropped,check/info/error/warning/loadermapped to explicit icons,numbermoved toSpotNumber). The devtools native jest preset now mocksreact-native-gesture-handler, which the new lumenToasterimports. -
#23502
c32fa7bThanks @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. NewAccountSettingscomponent (web): the settings logic lives in the package and the app only provides anAccountSettingsAdapter(account name, rename, sync state, locale, derivation tag). -
#23489
53d3149Thanks @LucasWerey! - Keep the LWD Account Detail page header pinned at the top while scrolling, like the Asset Detail header (PageHeaderaccepts aclassName). -
#23559
ead8b59Thanks @jiyuzhuang! - Expose the recoverV2 feature flag to Mixpanel on mobile and desktop. -
#23543
257305fThanks @mcayuelas-ledger! - feat(account-balance): add the balance entityCrypto balances of an account, one row per asset, keyed by AccountUUID. Both apps mount the slice. Fiat stays a view.
-
#23400
beea4cdThanks @gre-ledger! - feat(account-data): add the account data frameworkKind registry and
accountDatastatus slice, source contract and router (ranking, batching, concurrency, pagination affinity),fetchAccountData/fetchMoreAccountDataand theuseAccountDatahook. Both apps register the status slice and inject the router into the thunkextraArgument, with no source yet. -
#23436
f51fe16Thanks @gre-ledger! - Add the accounts slice, keyed by AccountUUID and kept in sync with the legacy accounts -
#23422
b97096cThanks @mcayuelas-ledger! - End the Asset Detail chart on the header price so the line matches the live spot -
#23213
6ce41e8Thanks @dilaouid! - feat(send): add the Descriptionitem component for the new send flow -
#23495
3c062fcThanks @mcayuelas-ledger! - feat(analytics): add theblockchainWithFundsuser property (blockchain names, e.g. Arbitrum) next toaccountsWithFunds, which reports the native ticker (ETH for L2s) -
#23631
19e5335Thanks @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
f40b1c2Thanks @dilaouid! - Remove the Zenrock and Quicksilver integrations, including their chain adapters, currency definitions, feature flags and LCD endpoints -
#23418
2621f1eThanks @ysitbon! - Stop re-rendering every amount on a countervalues load that changes no rateA 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
3ad1a61Thanks @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,useCalculateCountervalueCallbackanduseSendAmountkeep their names and signatures and read thecountervaluesslice withuseSelector. The loop moves intocreateCountervaluesMiddleware, started withstartCountervaluesSync({ savedState }).CountervaluesProvider,CountervaluesBridge,Props,PollingStateanduseCountervaluesUserSettingsare 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
bcf98ffThanks @ysitbon! - Split the countervalues Redux slice by owner. The rates now have their own slice in@domain/entity-market-countervalues(countervaluesRatesSlice, withsetCountervaluesStateandwipeCountervalues), stored with a shallow freeze so a load never pays for a deep freeze of every rate.@features/platform-market-countervalueskeeps the loop's state incountervaluesSyncSlice(load,error,isPolling;loadis one ofidle,requested,loading,loadingThenRequested, replacing the formerpendingandtriggerLoadflags) and mounts both under the samecountervaluesstore key throughcountervaluesReducer, typedCountervaluesStoreState, which replacesCountervaluesState. The store readscountervalues.ratesandcountervalues.syncinstead ofcountervalues.countervalues.stateandcountervalues.polling; persistence and the saved data are unchanged. Each slice now declares its own actions, so theCOUNTERVALUES_*type strings are gone:setCountervaluesStateandwipeCountervalueskeep their names, typedcountervaluesRates/setandcountervaluesRates/wipe, and the loop's setterssetCountervaluesPollingTriggerLoad,setCountervaluesStatePending,setCountervaluesStateErrorandsetCountervaluesPollingIsPollingbecome the eventscountervaluesLoadRequested,countervaluesLoadStarted,countervaluesLoadSucceeded,countervaluesLoadFailedandcountervaluesPollingSet, typedcountervaluesSync/.... A load start and a load failure now dispatch one action each instead of two. The sync selectors are the slice's ownselectors, andcountervaluesSyncTriggerLoadSelectoris gone.useCountervaluesPollingnow returns only thepoll,start,stopandwipecommands and no longer re-renders its callers on every load;pendinganderrorcome from the newuseCountervaluesLoadStatus, which live-common'suseSyncSourcesnow reads. -
#23353
48d5c85Thanks @LL782! - Remove the legacyofacGeoBlockApiafter Desktop and Mobile use@features/flow-app-availability -
#23421
cb527aaThanks @ysitbon! - fix(desktop): persist the CAL token cache againThe persistence middleware matched CAL actions on the hardcoded
cryptoAssetsApi/prefix, which stopped matching when the CAL api moved to thecalApireducer path. It now derives the prefix fromcryptoAssetsApi.reducerPath. -
#23365
c3e735aThanks @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 exposeswindow.ledger.setSpeculosTargetso 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 passesSPECULINHO_URL, and failed tests attach the Speculinho logs. -
#23518
03274f1Thanks @gre-ledger! - Bump firebase from 9.23.0 to 12.19.0 -
#23376
4ee8f78Thanks @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
a782d57Thanks @mcayuelas-ledger! - Move the desktop Fear and Greed UI into the flow package -
#22508
ad58765Thanks @pawell24! - fix(filecoin): open transactions on Blockscout from operation detailsBlockscout 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
c61cbe8Thanks @mcayuelas-ledger! - fix(portfolio): show the Market 24h variation on assets whose balance did not change over the day (LIVE-39259) -
#23389
03f4e70Thanks @claudiiafg! - Extract address deletion into@features/flow-contacts-delete-addressso 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
2f9b7e9Thanks @gre-ledger! - feat(account-data): full sync source on AccountBridge, serving no kind yet -
#23270
8c5a730Thanks @gre-ledger! - Remove the dev-only BYPASS_CORS workaround -
#23058
214f7f1Thanks @ishaba! - feat(tron): track the sponsored send funnel in Segment -
#23240
ed10647Thanks @dgreen-ledger! - feat(onboarding): show the onboarding warning modal on touchscreen devices -
#23247
c18097bThanks @mcayuelas-ledger! - Load the market list with an RTK infinite query instead of React Query. -
#23239
ade02b9Thanks @mateuszpalosz-ext! - Aleo new send flow descriptor and extended self transfer flow -
#23425
8ebcf5cThanks @vtaranushenko-ext-ledger! - Aleo estimated signing time row on the new send flow Amount step -
#23151
004d896Thanks @tonykhaov! - Show and export QA onboarding logs with the device answers and the machine context, and toggle the deviceOnboarding flag from the devtool -
#23234
c2c2f0aThanks @LL782! - Gate desktop launch on the shared app availability flow -
#23510
cc970dbThanks @gre-ledger! - Replace unmaintained listr with a minimal task runner in the dist script -
#23102
4d77514Thanks @sarneijim! - Move the shared device onboarding machine to features/platform -
#23509
3df619dThanks @gre-ledger! - Remove unused allure-commandline dependency -
#23503
bd6dbc5Thanks @mateuszpalosz-ext! - Allow Aleo token accounts to self-transfer between their public and private balances in the new send flow -
#22782
014d4fdThanks @KVNLS! - Run the desktop renderer withcontextIsolationandsandboxenabled, and withoutnodeIntegration.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 genericinvoke(channel, ...)passthrough. The renderer can still read and write its ownappdata 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 disallowedsrcscheme blocks the webview. They also can no longer load local files, which the renderer could otherwise read back throughwebview.loadURL().The three flags have to move together:
sandboxhas defaulted to true since Electron 20 and is auto-disabled only bynodeIntegration, so changing that one alone would silently sandbox the renderer and strip Node from the preload.No data migration:
localStorageis keyed by an origin that does not change, and bothapp.jsonandlld.jsonlive in the main process either way. -
#23550
589bae3Thanks @ooke-ledger! - Revert the network selection when swapping from Market (#23182, #23299). -
#23226
dd34e1bThanks @OlivierFreyssinet! - Shorten the device intent executor component names -
#23003
57b4652Thanks @live-github-bot! - Adapt to@ledgerhq/coin-evm15 -
#23261
02b383bThanks @alexstapenka-ledger! - Add a withdraw icon to the earn action confirmation dialog, acustom.dialog.menuaction menu dialog on desktop for the Earn "Earn more" / "Withdraw all" choice, and theearnWithdrawV2feature 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