Skip to content

chore(deps): update dependencies to latest pinned versions - #367

Draft
jimmydjabali wants to merge 1 commit into
mainfrom
claude/busy-maxwell-h1tdo8
Draft

chore(deps): update dependencies to latest pinned versions#367
jimmydjabali wants to merge 1 commit into
mainfrom
claude/busy-maxwell-h1tdo8

Conversation

@jimmydjabali

Copy link
Copy Markdown
Collaborator

Summary

Weekly dependency refresh. Every updatable dependency in package.json is pinned to its latest exact version. Packages with a major / breaking change were only bumped when their changelog confirmed the new behavior could be kept identical and that was verifiable here (npm install + patch-package + web production build + tsc). Everything that would require an unverifiable native rebuild, break the build, or change runtime behavior was held back and is listed below with the reason.

Validation performed

  • npm install clean; patch-package --error-on-fail applies all 19 patches
  • ✅ Web production build (webpack --mode=production) compiles successfully (warnings only) — exercises webpack-cli 7, @sentry/webpack-plugin 5, Babel 7.29, and the patched react-native-web 0.21.2
  • tsc --noemit: 375 errors vs 383 pre-existing on main (net −8, no new runtime-affecting errors). Note: the repo does not typecheck cleanly in CI regardless of this PR — npm run lint runs eslint first, which aborts on a hardcoded tsconfigRootDir: "/home/swiss-bitcoin-pay/sbp/app" in eslint.config.mjs (pre-existing, untouched here).
  • ⚠️ No unit tests run: the test script calls react-scripts, which is not a dependency of this repo (pre-existing).

Code changes made to preserve behavior

Package Bump Change
i18next 26 + react-i18next 17 major compatibilityJSON: "v3" → "v4" in src/config/i18n/i18n-config.ts. The app has no plural keys / count: usage, so v3↔v4 suffix resolution is never exercised — behavior-neutral.
locale-currency 1.0.0 major v1 is ESM with named exports only (no default export). Updated src/screens/Signup/Signup.tsx from import LocaleCurrency from … / LocaleCurrency.getCurrency(...) to import { getCurrency } / getCurrency(...).

Updated (no code changes needed)

@sentry/webpack-plugin 4→5, react-native-dotenv 3→4, webpack-cli 6→7, @types/node 24→26, react-native-device-info 14→15, react-native-error-boundary 2→3, uuid 13→14, web-vitals 5→6, @fortawesome/react-native-fontawesome 0.3→1, ledger-bitcoin 0.2→0.3, bitbox-api 0.9→0.13, plus many minor/patch bumps (react/react-dom 19.2.8, styled-components 6.4.4, axios 1.19, react-hook-form 7.84, react-native-svg, react-native-video, @fortawesome/*, @ledgerhq transports, etc.). Babel, ESLint and TypeScript were bumped to the latest patch within their current major (7.29.7 / 9.39.5 / 5.9.3). The one caret (text-encoding-polyfill) was pinned.

Three version-pinned patch-package patch files were renamed to track their bumped packages (react-native-web → 0.21.2, lottie-react-native → 7.3.8, @ledgerhq/react-native-hid → 6.39.5); the diffs still apply cleanly.

⛔ Held back (NOT updated) — and why

These are intentionally left at their current versions. Each needs work that cannot be verified in this JS-only, native-build-less environment, or would change behavior.

Breaks the build / behavior

  • react-router-dom 7.6.3 → 7.18.2 — v7.18 breaks the webpack production build (ConcatenatedModule TypeError inside react-router/dist ESM) and drops the future prop type used in Root.tsx. Reverting to 7.6.3 restores a green build.
  • @yudiel/react-qr-scanner 2.1.0 → 2.6.0 — removed audio from IScannerComponents and changed the onError type (both used in QRCamera.tsx). This drives the live camera/QR scanning of BTC addresses & invoices and can't be runtime-verified here.

RA/Fabric-only or native setup that can't be verified (app runs the old/Paper architecture, newArchEnabled=false)

  • react-native-get-random-values 1→2 — v2 is New-Architecture-only (TurboModule, no bridge fallback). Would break crypto.getRandomValuesuuid, BIP39 seed generation, wallet derivation.
  • @react-native-community/slider 4→5 — v5 is Fabric-only.
  • react-native-webview 13→14 — v14 is Fabric-only and we carry a custom native patch (androidWebviewId) that would need re-authoring.
  • @react-native-async-storage/async-storage 2→3 — v3 mandates an extra Android native setup step.
  • react-native-screenguard 1→2 — breaking initSettings() API + native overlay rewrite on a screenshot-security control.
  • react-native-bootsplash 6→7 — Android edge-to-edge default + native splash asset regeneration.
  • react-native-vision-camera 4→5 — adds new peer deps (react-native-nitro-modules, react-native-nitro-image; Nitro rewrite).
  • react-native-ble-plx 3.4.0 → 3.5.1 — our version-pinned native patch (error-code rejection + iOS createClient/scan null-handling for Ledger BLE) fails to apply on 3.5.1; kept at 3.4.0 so the patch stays valid.

Correctness needs a physical device

  • @ledgerhq/hw-app-btc 10→11 — JS API is unchanged, but v11 switches the Ledger wire protocol on the getWalletXpub / signMessage paths. Safe only after a one-off hardware smoke test (confirm identical zpub + signature), then it's a zero-code-change bump.

Native/toolchain majors coupled to React Native 0.81

  • @sentry/react-native 7→8 — needs Android sentry-android-gradle-plugin 5.7→6.0, an iOS pod reinstall, and regeneration of the 7.1.0-pinned patch.
  • React Native core toolchainreact-native 0.81.4 and its version-locked satellites (@react-native/*, @react-native-community/cli*) are a coordinated native upgrade, out of scope for a JS dependency refresh.
  • Babel 8 / ESLint 10 / TypeScript 7 / webpack-dev-server 6 — incompatible with the RN 0.81 babel preset / @react-native/eslint-config + typescript-eslint 8 / the TS toolchain plugins / the project's node >=20 engine floor (dev-server 6 needs >=22.15), respectively. Kept on their current major (latest patch).

Generated by Claude Code

Weekly dependency refresh. All updatable packages pinned to their latest
exact version. Packages with breaking changes were only bumped when the
new behavior could be kept identical and verified (npm install + patches
+ web production build + tsc). Breaking updates that require an
unverifiable native rebuild or that break the build were held (see PR
description for the full rationale).

Applied:
- Many safe minor/patch bumps (react 19.2.8, react-dom, styled-components
  6.4.4, axios 1.19.0, react-hook-form 7.84.0, react-native-svg,
  react-native-video, @fortawesome/*, @LedgerHQ transports, etc.)
- @sentry/webpack-plugin 4->5, react-native-dotenv 3->4, webpack-cli 6->7,
  @types/node 24->26, react-native-device-info 14->15,
  react-native-error-boundary 2->3, uuid 13->14, web-vitals 5->6,
  @fortawesome/react-native-fontawesome 0.3->1
- i18next 25->26 + react-i18next 15->17 (compatibilityJSON v3->v4; app has
  no plural keys so behavior is unchanged)
- locale-currency 0.0.4->1.0.0 (now ESM named exports; updated Signup import)
- ledger-bitcoin 0.2->0.3, bitbox-api 0.9->0.13 (used APIs unchanged)
- Babel kept on 7.x, ESLint on 9.x, TypeScript on 5.x (bumped to latest
  within-major; next majors are incompatible with the RN 0.81 toolchain)
- Renamed version-pinned patch-package patches to match bumped versions
  (react-native-web, lottie-react-native, @ledgerhq/react-native-hid)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FwgeZj2qU34kBBN7J26vyf
@netlify

netlify Bot commented Aug 1, 2026

Copy link
Copy Markdown

Deploy Preview for swissbitcoinpayapp ready!

Name Link
🔨 Latest commit 65e28ba
🔍 Latest deploy log https://app.netlify.com/projects/swissbitcoinpayapp/deploys/6a6d768616bee700089fda07
😎 Deploy Preview https://deploy-preview-367--swissbitcoinpayapp.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Aug 1, 2026

Copy link
Copy Markdown

Deploy Preview for app-swiss-bitcoin-pay-ch ready!

Name Link
🔨 Latest commit 65e28ba
🔍 Latest deploy log https://app.netlify.com/projects/app-swiss-bitcoin-pay-ch/deploys/6a6d7686f2904b0008086634
😎 Deploy Preview https://deploy-preview-367--app-swiss-bitcoin-pay-ch.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants