Skip to content

chore(deps): upgrade all dependencies (2026-07-13) - #132

Draft
devin-ai-integration[bot] wants to merge 20 commits into
developfrom
deps/upgrade-all-2026-07-13
Draft

devin-ai-integration[bot] wants to merge 20 commits into
developfrom
deps/upgrade-all-2026-07-13

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Jul 13, 2026

Copy link
Copy Markdown

Summary

Upgrades outdated npm dependencies across the full-stack app (React frontend + Express/GraphQL backend + Cypress), branched from develop, following the "Upgrade All Dependencies" playbook. Work is split into logical commits by risk: one patch batch, one minor batch, then majors one-at-a-time / in tightly-coupled groups. Yarn (classic, 1.22.22) is used throughout because yarn.lock exists; Node pinned to .nvmrc 22.13.0. Each package keeps its existing version-prefix convention (exact stays exact, ^ stays ^).

After each accepted change the gate yarn types && yarn lint && yarn build && yarn test:unit:ci passed (real exit codes, no pipe masking). The full stack was booted with repo scripts and the frontend was manually exercised (login → feed → new-payment flow → bank accounts → notifications → user settings) with a recorded walkthrough; no JS console errors (only vite dev logs + a pre-existing XState 4 deprecation warning).

The high-risk majors that require broad refactors or are blocked by the pinned Node/toolchain were attempted and reverted, and are documented below with concrete reasons — nothing was silently skipped.

Validation

  • yarn typesyarn lintyarn buildyarn test:unit:ci
  • Backend boots on Express 5 and serves /graphql (200); GraphQL proxy verified.
  • Frontend walkthrough recorded (164s, > 30s), no console errors.

Video demo

Interactive frontend walkthrough (login, feed, payment stepper, bank accounts, notifications, settings): https://app.devin.ai/attachments/26a26b11-26fc-4ac1-81e3-9fa13cd3914d/upgrade_demo.mp4

home feed

Upgraded packages

Patch (commit chore(deps): upgrade patch dependencies)

@types/detect-port 1.3.2→1.3.5 · formik 2.4.6→2.4.9 · react-calendar 6.0.0→6.0.1 · react-virtualized 9.22.5→9.22.6 · shortid 2.2.16→2.2.17 · @percy/cypress 3.1.6→3.1.9 · @types/bluebird 3.5.36→3.5.42 · @types/connect-flash 0.0.37→0.0.40 · @types/cors 2.8.12→2.8.19 · @types/json-server 0.14.4→0.14.8 · @types/morgan 1.9.3→1.9.10 · @types/passport 1.0.16→1.0.17 · @types/react-router 5.1.18→5.1.20 · babel-loader 10.0.0→10.1.1 · cors 2.8.5→2.8.6 · graphql-http 1.22.0→1.22.4

Minor (commit chore(deps): upgrade minor dependencies)

@auth0/auth0-react 2.2.4→2.21.0 · @emotion/styled 11.11.0→11.14.1 · @okta/okta-react 6.7.0→6.11.0 · aws-amplify 6.0.16→6.18.0 · date-fns 4.1.0→4.4.0 · detect-port 1.5.1→1.6.1 · @percy/cli 1.27.4→1.32.3 · @types/connect-history-api-fallback 1.3.5→1.5.4 · @types/express-session 1.18.0→1.19.0 · @types/react-virtualized 9.21.21→9.22.3 · @types/validator 13.7.2→13.15.10 · @types/webpack-env 1.16.4→1.18.8 · cypress 15.0.0→15.18.1 · express-session 1.18.0→1.19.0 · morgan 1.10.0→1.11.0 · passport 0.5.0→0.7.0 · prettier 3.0.0→3.9.5 · typescript-eslint 8.46.2→8.63.0

Major (accepted — separate commits)

Package Old → New Notes / migration
axios 0.28.1 → 1.18.1 source dep; security-relevant
uuid 8.3.2 → 14.0.1 + @types/uuid 8→11
clsx 1.2.1 → 2.1.1 source dep
bcryptjs 2.4.3 → 3.0.3 + @types/bcryptjs 2→3 (backend)
fuse.js 6.5.3 → 7.4.2 source dep
react-number-format 4.9.4 → 5.4.5 NumberFormatNumericFormat, isNumericStringvalueIsNumericString in TransactionCreateStepTwo.tsx
@testing-library/react 14 → 16.3.2 added explicit @testing-library/dom ^10.4.1 peer
@testing-library/jest-dom 5 → 6.9.1 import * as matchers in src/setup-tests.js
@cypress/code-coverage 3 → 4.0.3 dev/test
jsdom 22 → 29.1.1 unit-test env (Vitest 3)
express 4.20.0 → 5.2.1 + @types/express 5, @types/express-serve-static-core 5; handler return typing fixed in backend/user-routes.ts (no wildcard routes → no path-to-regexp changes)
express-validator 6 → 7.3.2 removed sanitizeQueryquery(...).customSanitizer in backend/validators.ts
graphql 16 → 17.0.2 with graphql-tools 8→9, @graphql-tools/load 7→8, @graphql-tools/graphql-file-loader 7→8
http-proxy-middleware 0.19.1 → 3.0.5 named export + pathFilter in src/setupProxy.js (v4 is ESM-only — skipped)
connect-history-api-fallback 1 → 2.0.0 dev static server
@okta/jwt-verifier 3 → 4.0.2 backend auth
@okta/okta-auth-js 7 → 8.0.1 frontend auth
yup 0.32.11 → 1.7.1 removed obsolete @types/yup (ships own types)
eslint 9 → 10.7.0 with @eslint/js 9→10, eslint-plugin-cypress 5→6; Error(..,{cause}) in Query.ts for preserve-caught-error
husky 7 → 9.1.7 git hooks
concurrently 9 → 10.0.3 dev scripts
cross-env 7 → 10.1.0 dev scripts
dotenv 16 → 17.4.2 dev/backend
nodemon 2 → 3.1.14 dev
nyc 15 → 18.0.0 coverage
patch-package 7 → 8.0.1 postinstall (removed obsolete react-virtualized+9.22.5.patch)
start-server-and-test 1 → 3.0.11 CI scripts
wait-on 8 → 9.0.10 CI scripts
@types/node 20 → 22.20.1 tracked to Node-22 line (repo target); latest 26 targets Node 26
@types/jsonwebtoken 8 → 9.0.10 types
@types/jwt-decode 2 → 3.1.0 types
@types/shortid 0.0.29 → 2.2.0 types

Security fixes

Source/runtime upgrades that resolve known advisories: axios 0.28→1.18 (SSRF / credential-leak advisories in 0.x), http-proxy-middleware 0.19→3, express 4→5, passport 0.5→0.7, morgan and express-session bumps, graphql 16→17. Note: yarn audit still reports transitive advisories concentrated in dev-only tooling (cypress, aws-amplify, webpack) whose fixes require the skipped majors below; no production runtime path is affected by those.

Skipped majors (attempted, reverted, documented)

Package(s) Target Reason
react / react-dom (+@types/react,@types/react-dom) 18→19 Coupled to MUI 6+ and react-router 6/7; MUI 5 peer is react `^17
react-router / react-router-dom / history (+@types/*) 5→8 / 5→7 / 4→5 88 usages of removed v5 APIs (Switch, Redirect, useHistory, component=, withRouter) across routing + XState machines. Large rewrite.
@mui/material / @mui/icons-material / @mui/lab 5→9 82 <Grid> usages need item/xssize migration across a 5→9 multi-major span; @mui/lab only at 9.0.0-beta. Large.
xstate / @xstate/react 4→5 / 3→6 Full machine-API rewrite (services→actors, actions) across 14 machines.
lowdb (+@types/lowdb) 1→7 No default export, FileSync adapter removed, entire sync lodash-chain API (db.get().push().write(), .value()) replaced by async Low across ~40 call sites in backend/database.ts.
dinero.js (+@types/dinero.js) 1→2 Functional/immutable rewrite + new @dinero.js/currencies dep; changes money formatting asserted by E2E.
@faker-js/faker 6→10 ~45 old-API call sites in scripts/seedDataUtils.ts.
typescript 5→7 Removes tsconfig baseUrl / moduleResolution=node10; needs broader tsconfig migration (7.x also pre-release).
vite / @vitejs/plugin-react / vite-plugin-istanbul 7→8 / 5→6 / 4→9 Rolldown/ESM config migration; also breaks Vitest linking under Yarn 1.
vitest 3→4 Yarn v1 "could not find a copy of vite to link" invariant; coupled to the Vite 8 migration.
@babel/core / @babel/preset-env / @babel/plugin-* 7→8 Require Node ≥ 22.18; repo pins Node 22.13 (.nvmrc).
npm 9→12 Requires Node ≥ 22.22; repo pins Node 22.13.
express-jwt / jwks-rsa 6→8 / 2→4 Removes bundled @types/express-jwt and changes auth-middleware API; needs runtime IdP validation not available here.
http-proxy-middleware v4 3→4 ESM-only; breaks the CommonJS require under ts-node. Accepted v3 instead.
detect-port 1→2 Pulls Node builtin debuglog that breaks the Vite browser bundle (imported via frontend port utils). Kept 1.x.
@types/lodash 4.14→4.17 Union comparator typing regression (Transaction | Like) in scripts/seedDataUtils.ts. Kept 4.14.

Notes

  • Cypress is already on the latest v15 line — bumped 15.0.0→15.18.1; E2E/component config (cypress.config.ts, vite.cypress.config.ts) and seeds preserved unchanged.
  • Removed now-redundant @types/yup and @types/http-proxy-middleware (v1 / v3 ship their own types).

Link to Devin session: https://app.devin.ai/sessions/8dc3f03779dd4bc39a6cca1493b5051f
Requested by: @dr-phil


Devin Review

Status Commit
⚪ Not started

Run Devin Review

Open in Devin Review (Staging)

devin-ai-integration Bot and others added 20 commits July 13, 2026 14:09
Upgrade 15 patch-level deps; remove obsolete react-virtualized patch (fix landed upstream in 9.22.6).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Upgrade 19 minor-level deps (cypress 15.0->15.18, prettier, aws-amplify, passport 0.5->0.7, webpack 5.x, @types/*, etc.). Reformat 4 files per prettier 3.9.5. Skipped @types/lodash (4.17 breaks lodash/fp intersectionWith comparator typing).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
nodemon 2->3, husky 7->9, cross-env 7->10, dotenv 16->17, concurrently 9->10, wait-on 8->9, start-server-and-test 1->3, patch-package 7->8, nyc 15->18. Skipped npm (12 requires Node >=22.22) and @babel/* 8 (requires Node >=22.18); repo targets Node ^20||^22 / .nvmrc 22.13.0.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
…5->6

ESLint 10 recommended set adds preserve-caught-error; pass cause to preserve the caught error in Query.listBankAccount.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Bump jsdom for the vitest jsdom test environment; unit tests remain green.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
…verage majors

clsx 1->2, bcryptjs 2->3 (+@types 3), fuse.js 6->7, uuid 8->14 (+@types 11), @testing-library/jest-dom 5->6, @cypress/code-coverage 3->4. jest-dom v6 dropped the default /matchers export; switch setup-tests.js to a namespace import. Skipped jwks-rsa 4 / express-jwt 8 (removes transitive @types/express-jwt the default-import auth middleware relies on; needs express-jwt named-API migration + untestable IdP auth).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
…ecode, shortid, detect-port)

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Resolves numerous axios advisories (SSRF, prototype pollution, credential leakage, ReDoS, DoS). Only usage is axios.create in src/utils/asyncUtils.ts; API compatible.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v16 unbundles @testing-library/dom; add it as an explicit devDependency (^10).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
detect-port 2 is ESM and imports node:util.debuglog; because src/utils/portUtils imports it and is pulled in by frontend XState machines, v2 gets bundled into the vite browser build and breaks 'yarn build' ("debuglog is not exported by __vite-browser-external"). Keeping detect-port 1.x.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v5 removes the default export and renames isNumericString; migrate TransactionCreateStepTwo to the named NumericFormat and valueIsNumericString prop.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v7 removed the standalone sanitizeQuery; replace with query().customSanitizer (equivalent behavior).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
…-file-loader, graphql-tools) 7/8->8/9

Coupled group sharing the graphql peer. Backend boots and loads the schema; build/types/lint/unit green.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v3 renames the export to named createProxyMiddleware and replaces the context array with pathFilter globs; migrate src/setupProxy.js and drop the now-obsolete @types/http-proxy-middleware (v3 ships its own types). Verified the proxy forwards POST /graphql to the backend (200). Kept at v3 rather than v4 because v4 is ESM-only and breaks the CJS require in setupProxy under ts-node.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Default require export unchanged; proxy/static server boots and serves index.html via history fallback.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Supported by the installed @okta/okta-react 6.11 (peer allows ^8).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Forms use the compatible string/object/ref/number subset; drop @types/yup (v1 ships its own types).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
No wildcard/regex routes, so path-to-regexp v8 needs no route changes. @types/express 5 tightens the handler return type to void|Promise<void>; the one 'return res.status().send()' in user-routes is split into a statement + bare return. Backend boots on express 5 and serves /graphql (200).

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
…atic-core (4->5)

@types/node tracked to the 22.x line matching the repo's Node 22 target (.nvmrc 22.13.0); latest 26 targets Node 26 and is skipped. @types/express-serve-static-core aligned to 5.x with the express 5 upgrade.

Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
@devin-ai-integration

Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration

Copy link
Copy Markdown
Author

Frontend recording

Watch the upgraded full-stack app walkthrough

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.

0 participants