github LedgerHQ/ledger-live @ledgerhq/live-desktop@4.22.0

latest release: live-mobile@4.22.0
3 hours ago

4.22.0

Minor Changes

  • #22004 c60196a Thanks @liviuciulinaru! - Carry the provider app id of the Card login redirect through the desktop deep link

  • #22003 40d296b Thanks @liviuciulinaru! - Record the provider app the Card login redirect names, and send x-us-env on every Card request of a US holder

  • #22150 731ebd2 Thanks @mcayuelas-ledger! - Display card reward balance in the desktop card details view

  • #21700 3702460 Thanks @tonykhaov! - Unlock card numbers with the Ledger Wallet password.

  • #22259 e4ac322 Thanks @mcayuelas-ledger! - Wire the card's Manage PIN and Access Baanx rows to open the Baanx hosted pages in the Discover
    webview, and the Help row to open the support article externally.

  • #22077 72367fc Thanks @mcayuelas-ledger! - Wire the card onboarding widget to real, derived onboarding data and remove the unused stub endpoint and legacy devtool mock path it replaces

  • #22093 2e94d90 Thanks @LucasWerey! - Fix available balance showing inflated value for DADA cross-network assets (e.g. Tezos + Etherlink)

  • #21999 724f029 Thanks @mdomanski-ext-ledger! - feat(aleo): share the bond pieces between Desktop and Mobile

    Replaces the ad-hoc messages getTransactionStatus returned for a rejected bond with typed
    error classes, translated on both clients and now distinguishing a closed validator from an
    unbonding one. Adds the isValidatorBondable / getMinBondAmount helpers to the coin
    module, moves the per-network default validator into the Aleo currency config so every
    client reads the same address, and adds a reusable Aleo bridge mock for Mobile.

  • #22053 cf09fa6 Thanks @mateuszpalosz-ext! - feat(aleo): add the claim unbonded staking flow

  • #21975 0a5c2a0 Thanks @mateuszpalosz-ext! - added Aleo staking operations, gated on the enableStaking flag

  • #22123 b5338ec Thanks @mateuszpalosz-ext! - feat(aleo): add the shared staking hooks the delegation views read

  • #22212 49b535f Thanks @mdomanski-ext-ledger! - refactor(aleo): serve the validator committee from RTK Query

  • #22228 1ec8d15 Thanks @tonykhaov! - Refine the Pay card assets list with loading skeletons, translated states, funding information, and asset values in the details dialog.

  • #22276 eca09da Thanks @sarneijim! - Add Braze Tools inspect for local eligibility and requiredStates fetch-cache inject

  • #22164 386710a Thanks @sarneijim! - Share Nano S Touchscreen Upgrade Program banner copy keys so Desktop and Mobile can reuse the same model-specific lookup

  • #22231 c682542 Thanks @tonykhaov! - Open card transaction history from an asset, scope it to that asset, and show cashback values.

  • #22312 319fbe4 Thanks @sarneijim! - Show the signed-off Touchscreen Upgrade Program copy only to Nano S users

  • #22278 95a1007 Thanks @tonykhaov! - Reveal card numbers as soon as the image loads and shorten the flip to 300ms

  • #22182 1557452 Thanks @tonykhaov! - Reveal card numbers without a password unlock gate

  • #22229 905d26b Thanks @tonykhaov! - Add a manage dialog for reordering Pay card funding assets and starting the add-asset flow.

  • #22129 ea94dd0 Thanks @lysyi3m! - fix(concordium): drop the PLT error surface nothing can reach

    mapPltRejectReason turned a chain reject reason into a typed Error and had no
    caller. It could not gain one: an Error is what the pre-send checks return and
    what the signer throws, and neither ever sees a reject reason. A reject reason
    exists only on the wallet-proxy history response, and history renders an
    Operation, which carries failed: true and no cause. Surfacing the cause means
    a code in Operation.extra and a renderer for it, not this function.

    Removed with it: ConcordiumNonExistentTokenId and ConcordiumPltTransferRejected,
    whose only producer it was, and ConcordiumAccountNotAllowed and
    ConcordiumAccountDenied, which never had one — getAccountListStatus folds both
    list verdicts into one, so reporting the cause means widening the stored
    transferStatus first.

    A test in each app now pins that every PLT error a producer can raise has copy of
    its own, so the next one added without it fails rather than reaching a user as a
    class name.

  • #22139 7848066 Thanks @lysyi3m! - feat(concordium): show why the chain rejected a PLT transfer

    A rejected PLT transfer read as a failed row with no explanation. Operation
    details now name the cause, on desktop and mobile.

  • #22147 1648042 Thanks @lysyi3m! - fix(concordium): say which list refused a PLT sender

    A blocked sender was told to contact the issuer for access, which is wrong for a
    deny list. The send flow now reports the two causes separately.

    Removes the unused PltListStatus type.

  • #22186 eb2a2a5 Thanks @lysyi3m! - feat(concordium): surface PLT pause and sender restrictions

  • #22187 31ec33f Thanks @mateuszpalosz-ext! - aleo part 2 staking ui

  • #22141 35105ea Thanks @sarneijim! - Filter desktop Braze Content Cards with local eligibility before publishing to Redux

  • #22281 1a1766d Thanks @mdomanski-ext-ledger! - fix(desktop): keep the amount field ungrouped while it is focused

  • #22208 62a6f6c Thanks @vladyslavchupovskiy-ext-art! - feat(coin-cosmos): add the Gonka currency configuration

    Points Gonka at the Ledger-hosted LCD, sets its minimum gas price to 0 (the chain's fee
    consensus parameter), and disables delegation, which the runtime rejects. Hides the account-header
    stake action on Desktop and Mobile for any Cosmos chain whose config sets disableDelegation, and
    stops a zero minimum gas price being mistaken for a missing config when preloaded data is restored.

  • #22116 214d382 Thanks @gre-ledger! - Enforce the QR code pairing sequence on both sides of the handshake

    The host and the candidate now run the pairing messages through an explicit single-use state
    machine: each message is only accepted at the one point of the sequence where it is expected,
    and the peer that initiated the handshake is bound for the whole session. Envelopes, keys and
    decrypted bodies are validated before being acted upon, so a duplicate, out-of-order, foreign or
    malformed message ends the session with a QRCodeProtocolError: Desktop then asks for a fresh
    QR code, Mobile goes to its existing retry screen.

  • #22063 8346e6e Thanks @lewisd5! - Make the Baanx card env vars reach packaged desktop builds. CARD_BAANX_API_URL, CARD_BAANX_CLIENT_KEY, CARD_BAANX_HOSTED_UI and CARD_OAUTH_REDIRECT_URI are read through @shared/env (getEnv/useEnv), which DefinePlugin cannot reach, so setting them on a CI build step had no effect on the artifact and the Card login always used the shared/env defaults. The renderer build now bakes them into a __BUILD_ENVS__ object that renderer/env merges into process.env at boot, behind any real runtime value, from where the existing boot-time seeding pushes them into the env store.

  • #22090 a2e8499 Thanks @liviuciulinaru! - Carry every Baanx card env var into the packaged build. CARD_BAANX_US_APP_ID, CARD_BAANX_LOGIN_MANIFEST_ID and CARD_BAANX_HOSTED_MANIFEST_ID join BUILD_ENV_NAMES, so a build step that sets them reaches the app.

  • #21786 145462c Thanks @henri-ly! - Add a send-recipient-display test id to the read-only "To:" field of the new send flow amount step, so automation can assert the contact name is carried over from the recipient step

  • #22106 a0ae584 Thanks @vladyslavchupovskiy-ext-art! - Add Gonka (GNK) to the supported currencies

  • #22190 0651158 Thanks @koda-apps! - Bump lumen-design-core to 0.1.29, lumen-ui-react to 0.1.59, lumen-ui-rnative to 0.1.62, and lumen-utils-shared to 0.1.13. In lumen-ui-rnative, OptionList (and its subcomponents, e.g. OptionListItem) is renamed to SelectList/SelectListItem, and resolveAvatarColor is renamed to useResolveAvatarColor, now a theme-reactive hook instead of a plain function; call sites in live-mobile and @features/platform-contacts are migrated accordingly. resolveAvatarColor in lumen-ui-react is unaffected by this bump.

  • #22306 845ac4a Thanks @LucasWerey! - Restore translucent status backgrounds with the Lumen -transparent tokens after status colors became solid.

  • #21494 4b1a3af Thanks @dilaouid! - feat(send): add skip memo confirmation bottomsheet in the lwm send flow

  • #21902 f8a3d65 Thanks @abdurrahman-ledger! - Expose the DMK mock server session token on the renderer's window.ledger debug surface. An E2E run can now read the session the app provisioned and edit the emulated device while the app runs — swapping APDU mocks to hold it on a given onboarding step — instead of copying the token out of the developer top bar indicator.

  • #21690 727cd08 Thanks @pawell24! - feat(near): adapt NEAR UI to generic coin framework staking positions

  • #22142 046f48e Thanks @dgreen-ledger! - Harden desktop onboarding to re-validate the connected device if it changes identity mid-flow, and fix a desktop transport bug where every connected device reported the same empty identifier

  • #22305 fd6b9d0 Thanks @liviuciulinaru! - Open the provider withdrawal page from a card asset.

    • buildWithdrawalPath addresses /withdrawal, with the same app_id and currency query as buildTopUpPath.
    • Desktop opens it on the hosted manifest, mobile in the secure browser, both with the asset pre-selected.
    • Mobile also pre-selects the asset on the top up page.
    • Every mobile hosted page now opens in the same secure browser session, which shares the cookies of the login. openHostedLoginInSecureBrowser becomes openHostedUrlInSecureBrowser, and openHostedPageInSecureBrowser is removed.
    • Every hosted path now lives in state/hostedPaths.ts: signup, top up, withdrawal, manage PIN and the Baanx root. cardSettingsPaths.ts is removed, and the package exports the same names as before.
  • #22096 4cd3a25 Thanks @philipptpunkt! - Show what each card wallet is worth in the right-panel card.

    • Resolves the card's currencies and prices each wallet against the user's counter value.
    • Registers the pairs through the existing on-demand tracking helper, since no account holds them.
    • Both are gated on the card being signed in.
  • #22048 42f6ad3 Thanks @mcayuelas-ledger! - Add a Crypto and Card tab switcher to desktop History.

  • #22038 c48d6d7 Thanks @liviuciulinaru! - feat(pay-card): read the Baanx login and hosted manifest ids from the env, not from the lwdPayTab flag params

  • #22267 8e556b1 Thanks @philipptpunkt! - Map Baanx's EUROC to its Ledger currency.

    • euroc.ethereum and euroc.euroc resolve to ethereum/erc20/euro_coin.
  • #22308 9677738 Thanks @liviuciulinaru! - Point the production and release builds at the live Baanx environment

  • #21974 d4ba10f Thanks @martijnhjk! - Start the app with an injected Card session for local development and E2E. Desktop cannot finish the Card OAuth login yet — the hosted page opens in the user's own browser and reports nothing back (LIVE-34740) — and the session token lives in renderer memory rather than the persisted redux state, so a userdata fixture cannot carry it either.

    CARD_SESSION_BOOTSTRAP takes a PayCardSession as JSON, read from process.env at boot to seed the Card session and mark the app signed in. Keeping it out of @shared/env keeps the bearer token out of getAllEnvs(). After the read, the process env is cleared; a later launch still receives the value if the parent environment still has it.

    It is honoured in a development build or in any build launched with PLAYWRIGHT_RUN — a packaged build included. The gate is a runtime check rather than a build-time constant so that release-mode E2E, which tests the release bundle, can still inject a session; the cost is that setting the variable on a shipped app does work, so it assumes control of that app's launch environment.

  • #22183 d9d1111 Thanks @liviuciulinaru! - Open the provider's top up page from the card on desktop.

    • CardTopUpButton carries the action. On desktop it stays at the bottom of the card panel, above the scrolling content.
    • Desktop opens /topup on the hosted live app manifest, the way the signup page already opens.
    • A US card holder gets the US app_id on the query, so the page reaches the US tenant.
    • Desktop ends the provider session in the webview on each entry of the Pay tab, so a session left behind by a top up cannot sign the previous holder back in. The login and the signup drop their own wipe: every one of them starts from an entry of the Pay tab.
    • The top up button in the asset details dialog opens the same page, with the asset pre-selected on the query.
  • #22046 2aeb695 Thanks @mcayuelas-ledger! - Add a card transaction preview to the Pay card details view.

  • #21752 2a5d4e9 Thanks @tonykhaov! - Open Pay from a contact address on the amount step after picking the debit account

  • #22064 d1d0d90 Thanks @semeano! - Show a Zcash shielding transaction as private and display its shielded destination instead of its transparent change, masking that destination under discreet mode

  • #21841 d59d123 Thanks @Moustafa-Koterba! - feat(cosmos): migrate account resources to shared staking aggregate

  • #22214 72892c5 Thanks @sarneijim! - Track the Q3 product tour with the Generic Awareness carousel contract on mobile and desktop, including a primary continue CTA and last-step completion.

  • #22158 6a21fa0 Thanks @LL782! - Replace the internal Track and TrackPage analytics components with the shared implementations from @shared/analytics-react

  • #21967 40251b4 Thanks @sarneijim! - Remove the obsolete original Wallet V4 tour

  • #22078 9734269 Thanks @YazhuEth! - Show the undelegating amount on the SEI account screen while assets are inside their unbonding period

  • #22159 b246de7 Thanks @semeano! - Correct the Send memo help text, which repeated the memo label and described memos as an exchange-only requirement. Currencies can now provide their own wording; Zcash describes its memo as optional and encrypted

  • #22299 470bca7 Thanks @mcayuelas-ledger! - Include send flow source in tracking properties on desktop and mobile.

  • #22056 cb866e1 Thanks @LucasWerey! - Add @shared/linking package for cross-platform external link handling with URL safety, localization and analytics

  • #22085 b499c0d Thanks @aussedatlo! - Fix the sidebar navigation bottom edge no longer aligning with the page content

  • #22236 43e1a21 Thanks @tonykhaov! - Add Pay Card devtools controls for transaction and wallet balance fixtures, and answer the mocked wallet reorder with the order alone so linked assets keep the amounts they were showing while the reordered row shows its spinner.

  • #22337 e1c0c65 Thanks @mcayuelas-ledger! - Add legal agreement link to the Pay Card "More" menu

  • #21942 61362d0 Thanks @jiyuzhuang! - Extract a desktop BrazeProvider and share Braze refresh and identity synchronization lifecycles

  • #22155 8e97720 Thanks @LL782! - Wire in @shared/analytics for desktop

  • #22159 b246de7 Thanks @semeano! - Align the Zcash device-confirmation step with every other currency: the signature screen no longer shows the recipient or the amount, which are verified on the device

Patch Changes

  • Updated dependencies [40d296b, 5649787, 4d1d640, 731ebd2, 250c1c0, 510465b, c7eb01d, 871e485, 6996290, 72367fc, 2e94d90, c22ee67, 3d50917, cfa249c, 285b50d, 724f029, 353ed46, b5338ec, 49b535f, 944bd23, a1a8b81, 1ec8d15, 386710a, 84bba64, c682542, 319fbe4, dd155a7, 95a1007, 233e44e, 1557452, 6741356, dafadf0, 9652494, 5492648, 926952b, 24865c8, 905d26b, 98e3038, ea94dd0, 736a0d5, 7848066, 1648042, eb2a2a5, 33e92e8, 31ec33f, 35c9b91, 387619d, a62ad28, 6183efd, 5d2f40f, 62a6f6c, a1108d3, 791c54a, 214d382, 5df5893, a0ae584, 0651158, 845ac4a, d7d2b9a, 54a71f6, 727cd08, 29ce771, 046f48e, fd6b9d0, 8d073ca, 954ffbd, a915d4a, 99bf629, 853e47d, c48d6d7, 8e556b1, dbc9655, afb2750, eb06f77, 8dcb040, 75038d5, d9d1111, 4b346a0, 2aeb695, 91531f2, 287f042, 2a5d4e9, 6fe6efb, d1d0d90, d59d123, d19e4ae, f44101e, 6844ca4, 40251b4, 470bca7, 216ecb7, cb866e1, bb3e182, 43e1a21, 1603611, e1c0c65, 7f40a5a, d750b9f, 61362d0, e2134f5]:
    • @shared/env@0.8.0
    • @shared/api-services@0.8.0
    • @features/platform-card@0.6.0
    • @features/flow-pay-card-auth@0.8.0
    • @features/flow-contacts-list@0.8.0
    • @domain/api-card-management@0.7.0
    • @features/flow-pay-card-details@0.5.0
    • @features/flow-pay-card@0.5.0
    • @features/platform-contacts@0.8.0
    • @features/flow-contacts-add-contact@0.7.0
    • @features/flow-contacts-edit-contact@0.6.0
    • @features/flow-contacts-edit-address@0.4.0
    • @features/flow-contacts-add-address@0.6.0
    • @features/flow-contacts@0.12.0
    • @features/flow-pay-card-widget@0.4.0
    • @devtools/bindings@0.9.0
    • @ledgerhq/asset-aggregation@0.16.0
    • @ledgerhq/live-common@38.1.0
    • @shared/ui-info-state@0.3.0
    • @features/flow-pay-card-assets@0.2.0
    • @features/flow-large-screen-upsell@2.2.0
    • @features/flow-pay-card-transactions@0.3.0
    • @domain/entity-currency-crypto@0.13.0
    • @ledgerhq/coin-concordium@1.4.0
    • @domain/entity-contact@0.10.0
    • @ledgerhq/coin-bitcoin@0.53.0
    • @ledgerhq/coin-canton@1.2.0
    • @ledgerhq/coin-cardano@1.2.0
    • @ledgerhq/coin-casper@3.4.0
    • @ledgerhq/coin-cosmos@1.4.0
    • @ledgerhq/coin-filecoin@2.2.0
    • @ledgerhq/coin-zcash@0.9.0
    • @ledgerhq/hw-transport-http@6.38.0
    • @ledgerhq/ledger-wallet-framework@3.5.0
    • @ledgerhq/types-devices@7.1.0
    • @ledgerhq/types-live@6.125.0
    • @features/platform-env@0.4.0
    • @ledgerhq/live-dmk-shared@0.33.0
    • @ledgerhq/ledger-key-ring-protocol@0.23.0
    • @devtools/shell@0.10.0
    • @devtools/transport-panel@0.7.0
    • @ledgerhq/wallet-btc@0.6.0
    • @ledgerhq/hw-ledger-key-ring-protocol@0.13.0
    • @ledgerhq/live-dmk-desktop@0.22.0
    • @shared/feature-flags@0.24.0
    • @domain/entity-card-asset-mapping@0.7.0
    • @features/platform-currencies@0.9.0
    • @features/flow-pay-balance@0.5.0
    • @features/flow-pay-feature-tour@0.6.0
    • @features/flow-pay-request@0.6.0
    • @features/platform-feature-flags@0.8.0
    • @shared/analytics@0.3.0
    • @shared/analytics-react@0.3.0
    • @shared/linking@0.3.0
    • @domain/api-aggregated-assets@0.5.2
    • @features/platform-aggregated-assets@0.5.4
    • @ledgerhq/asset-detail@0.11.6
    • @ledgerhq/transaction-observability@0.3.2
    • @ledgerhq/wallet-analytics@0.4.2
    • @ledgerhq/wallet-pnl@0.7.12
    • @domain/api-altcoins-sentiment@0.3.6
    • @domain/api-currency-fiat@0.4.5
    • @domain/api-currency-token@0.6.2
    • @domain/api-market-sentiment@0.3.6
    • @domain/api-push-devices@0.2.6
    • @features/flow-contacts-delete-contact@0.2.3
    • @features/flow-contacts-introduction@1.2.0
    • @features/flow-pay-bank-transfer@0.3.2
    • @features/flow-pay-contact@0.4.1
    • @features/flow-pay-deposit@0.4.1
    • @features/platform-device-action-content@0.2.1
    • @ledgerhq/live-send@0.1.1
    • @domain/entity-currency@0.4.4
    • @domain/entity-currency-token@0.5.3
    • @ledgerhq/live-currency-format@0.15.0
    • @ledgerhq/live-wallet@1.1.4
    • @ledgerhq/live-signer-evm@0.23.3
    • @ledgerhq/live-countervalues@0.26.1
    • @ledgerhq/live-countervalues-react@0.18.1
    • @ledgerhq/domain-service@1.8.20
    • @devtools/wire@0.5.1
    • @features/flow-analytics-consent@0.2.7

Don't miss a new ledger-live release

NewReleases is sending notifications on new releases.