4.22.0
Minor Changes
-
#22004
c60196aThanks @liviuciulinaru! - Carry the provider app id of the Card login redirect through the desktop deep link -
#22003
40d296bThanks @liviuciulinaru! - Record the provider app the Card login redirect names, and send x-us-env on every Card request of a US holder -
#22150
731ebd2Thanks @mcayuelas-ledger! - Display card reward balance in the desktop card details view -
#21700
3702460Thanks @tonykhaov! - Unlock card numbers with the Ledger Wallet password. -
#22259
e4ac322Thanks @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
72367fcThanks @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
2e94d90Thanks @LucasWerey! - Fix available balance showing inflated value for DADA cross-network assets (e.g. Tezos + Etherlink) -
#21999
724f029Thanks @mdomanski-ext-ledger! - feat(aleo): share the bond pieces between Desktop and MobileReplaces the ad-hoc messages
getTransactionStatusreturned for a rejected bond with typed
error classes, translated on both clients and now distinguishing a closed validator from an
unbonding one. Adds theisValidatorBondable/getMinBondAmounthelpers 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
cf09fa6Thanks @mateuszpalosz-ext! - feat(aleo): add the claim unbonded staking flow -
#21975
0a5c2a0Thanks @mateuszpalosz-ext! - added Aleo staking operations, gated on theenableStakingflag -
#22123
b5338ecThanks @mateuszpalosz-ext! - feat(aleo): add the shared staking hooks the delegation views read -
#22212
49b535fThanks @mdomanski-ext-ledger! - refactor(aleo): serve the validator committee from RTK Query -
#22228
1ec8d15Thanks @tonykhaov! - Refine the Pay card assets list with loading skeletons, translated states, funding information, and asset values in the details dialog. -
#22276
eca09daThanks @sarneijim! - Add Braze Tools inspect for local eligibility and requiredStates fetch-cache inject -
#22164
386710aThanks @sarneijim! - Share Nano S Touchscreen Upgrade Program banner copy keys so Desktop and Mobile can reuse the same model-specific lookup -
#22231
c682542Thanks @tonykhaov! - Open card transaction history from an asset, scope it to that asset, and show cashback values. -
#22312
319fbe4Thanks @sarneijim! - Show the signed-off Touchscreen Upgrade Program copy only to Nano S users -
#22278
95a1007Thanks @tonykhaov! - Reveal card numbers as soon as the image loads and shorten the flip to 300ms -
#22182
1557452Thanks @tonykhaov! - Reveal card numbers without a password unlock gate -
#22229
905d26bThanks @tonykhaov! - Add a manage dialog for reordering Pay card funding assets and starting the add-asset flow. -
#22129
ea94dd0Thanks @lysyi3m! - fix(concordium): drop the PLT error surface nothing can reachmapPltRejectReasonturned a chain reject reason into a typedErrorand had no
caller. It could not gain one: anErroris 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 carriesfailed: trueand no cause. Surfacing the cause means
a code inOperation.extraand a renderer for it, not this function.Removed with it:
ConcordiumNonExistentTokenIdandConcordiumPltTransferRejected,
whose only producer it was, andConcordiumAccountNotAllowedand
ConcordiumAccountDenied, which never had one —getAccountListStatusfolds both
list verdicts into one, so reporting the cause means widening the stored
transferStatusfirst.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
7848066Thanks @lysyi3m! - feat(concordium): show why the chain rejected a PLT transferA rejected PLT transfer read as a failed row with no explanation. Operation
details now name the cause, on desktop and mobile. -
#22147
1648042Thanks @lysyi3m! - fix(concordium): say which list refused a PLT senderA 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
PltListStatustype. -
#22186
eb2a2a5Thanks @lysyi3m! - feat(concordium): surface PLT pause and sender restrictions -
#22187
31ec33fThanks @mateuszpalosz-ext! - aleo part 2 staking ui -
#22141
35105eaThanks @sarneijim! - Filter desktop Braze Content Cards with local eligibility before publishing to Redux -
#22281
1a1766dThanks @mdomanski-ext-ledger! - fix(desktop): keep the amount field ungrouped while it is focused -
#22208
62a6f6cThanks @vladyslavchupovskiy-ext-art! - feat(coin-cosmos): add the Gonka currency configurationPoints 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 setsdisableDelegation, and
stops a zero minimum gas price being mistaken for a missing config when preloaded data is restored. -
#22116
214d382Thanks @gre-ledger! - Enforce the QR code pairing sequence on both sides of the handshakeThe 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 aQRCodeProtocolError: Desktop then asks for a fresh
QR code, Mobile goes to its existing retry screen. -
#22063
8346e6eThanks @lewisd5! - Make the Baanx card env vars reach packaged desktop builds.CARD_BAANX_API_URL,CARD_BAANX_CLIENT_KEY,CARD_BAANX_HOSTED_UIandCARD_OAUTH_REDIRECT_URIare 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 theshared/envdefaults. The renderer build now bakes them into a__BUILD_ENVS__object thatrenderer/envmerges intoprocess.envat boot, behind any real runtime value, from where the existing boot-time seeding pushes them into the env store. -
#22090
a2e8499Thanks @liviuciulinaru! - Carry every Baanx card env var into the packaged build.CARD_BAANX_US_APP_ID,CARD_BAANX_LOGIN_MANIFEST_IDandCARD_BAANX_HOSTED_MANIFEST_IDjoinBUILD_ENV_NAMES, so a build step that sets them reaches the app. -
#21786
145462cThanks @henri-ly! - Add asend-recipient-displaytest 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
a0ae584Thanks @vladyslavchupovskiy-ext-art! - Add Gonka (GNK) to the supported currencies -
#22190
0651158Thanks @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 toSelectList/SelectListItem, andresolveAvatarColoris renamed touseResolveAvatarColor, now a theme-reactive hook instead of a plain function; call sites in live-mobile and@features/platform-contactsare migrated accordingly.resolveAvatarColorin lumen-ui-react is unaffected by this bump. -
#22306
845ac4aThanks @LucasWerey! - Restore translucent status backgrounds with the Lumen-transparenttokens after status colors became solid. -
#21494
4b1a3afThanks @dilaouid! - feat(send): add skip memo confirmation bottomsheet in the lwm send flow -
#21902
f8a3d65Thanks @abdurrahman-ledger! - Expose the DMK mock server session token on the renderer'swindow.ledgerdebug 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
727cd08Thanks @pawell24! - feat(near): adapt NEAR UI to generic coin framework staking positions -
#22142
046f48eThanks @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
fd6b9d0Thanks @liviuciulinaru! - Open the provider withdrawal page from a card asset.buildWithdrawalPathaddresses/withdrawal, with the sameapp_idandcurrencyquery asbuildTopUpPath.- 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.
openHostedLoginInSecureBrowserbecomesopenHostedUrlInSecureBrowser, andopenHostedPageInSecureBrowseris removed. - Every hosted path now lives in
state/hostedPaths.ts: signup, top up, withdrawal, manage PIN and the Baanx root.cardSettingsPaths.tsis removed, and the package exports the same names as before.
-
#22096
4cd3a25Thanks @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
42f6ad3Thanks @mcayuelas-ledger! - Add a Crypto and Card tab switcher to desktop History. -
#22038
c48d6d7Thanks @liviuciulinaru! - feat(pay-card): read the Baanx login and hosted manifest ids from the env, not from thelwdPayTabflag params -
#22267
8e556b1Thanks @philipptpunkt! - Map Baanx's EUROC to its Ledger currency.euroc.ethereumandeuroc.eurocresolve toethereum/erc20/euro_coin.
-
#22308
9677738Thanks @liviuciulinaru! - Point the production and release builds at the live Baanx environment -
#21974
d4ba10fThanks @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 auserdatafixture cannot carry it either.CARD_SESSION_BOOTSTRAPtakes aPayCardSessionas JSON, read fromprocess.envat boot to seed the Card session and mark the app signed in. Keeping it out of@shared/envkeeps the bearer token out ofgetAllEnvs(). 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
d9d1111Thanks @liviuciulinaru! - Open the provider's top up page from the card on desktop.CardTopUpButtoncarries the action. On desktop it stays at the bottom of the card panel, above the scrolling content.- Desktop opens
/topupon the hosted live app manifest, the way the signup page already opens. - A US card holder gets the US
app_idon 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
2aeb695Thanks @mcayuelas-ledger! - Add a card transaction preview to the Pay card details view. -
#21752
2a5d4e9Thanks @tonykhaov! - Open Pay from a contact address on the amount step after picking the debit account -
#22064
d1d0d90Thanks @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
d59d123Thanks @Moustafa-Koterba! - feat(cosmos): migrate account resources to shared staking aggregate -
#22214
72892c5Thanks @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
6a21fa0Thanks @LL782! - Replace the internalTrackandTrackPageanalytics components with the shared implementations from@shared/analytics-react -
#21967
40251b4Thanks @sarneijim! - Remove the obsolete original Wallet V4 tour -
#22078
9734269Thanks @YazhuEth! - Show the undelegating amount on the SEI account screen while assets are inside their unbonding period -
#22159
b246de7Thanks @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
470bca7Thanks @mcayuelas-ledger! - Include send flow source in tracking properties on desktop and mobile. -
#22056
cb866e1Thanks @LucasWerey! - Add @shared/linking package for cross-platform external link handling with URL safety, localization and analytics -
#22085
b499c0dThanks @aussedatlo! - Fix the sidebar navigation bottom edge no longer aligning with the page content -
#22236
43e1a21Thanks @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
e1c0c65Thanks @mcayuelas-ledger! - Add legal agreement link to the Pay Card "More" menu -
#21942
61362d0Thanks @jiyuzhuang! - Extract a desktop BrazeProvider and share Braze refresh and identity synchronization lifecycles -
#22155
8e97720Thanks @LL782! - Wire in @shared/analytics for desktop -
#22159
b246de7Thanks @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