chore(deps): upgrade all dependencies (2026-07-27) - #134
Draft
devin-ai-integration[bot] wants to merge 45 commits into
Draft
devin-ai-integration[bot] wants to merge 45 commits into
devin-ai-integration[bot] wants to merge 45 commits into
Conversation
Also drops patches/react-virtualized+9.22.5.patch: react-virtualized 9.22.6 removes the broken ESM import the patch worked around. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Reformats a few files for Prettier 3.9 union/arrow formatting changes. @types/lodash held at 4.14.181 (newer lodash/fp intersectionWith typings reject the mixed-type comparators in scripts/seedDataUtils.ts). Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
@types/shortid@2.2.0
uuid@14.0.1, @types/uuid@10.0.0
clsx@2.1.1
@types/jsonwebtoken@9.0.10
@types/node@^26.1.1
bcryptjs@3.0.3
concurrently@10.0.4
cross-env@10.1.0
dotenv@17.4.2
fuse.js@7.5.0
husky@9.1.7
nodemon@3.1.14
nyc@18.0.0
patch-package@^8.0.1
wait-on@^9.1.0
start-server-and-test@3.0.11
jsdom@^29.1.1
connect-history-api-fallback@2.0.0
http-proxy-middleware@3.0.7
@okta/jwt-verifier@^4.0.2
@okta/okta-auth-js@^8.0.1
@cypress/code-coverage@^4.0.3
eslint-plugin-cypress@^6.4.3
npm@^11.18.0
axios@1.18.1
…ql-tools/graphql-file-loader to latest major @graphql-tools/load@8.1.15, @graphql-tools/graphql-file-loader@8.1.18, graphql@17.0.2, graphql-tools@9.0.33
history@5.3.0
…test major @mui/material@^9.2.0, @mui/icons-material@^9.2.0, @mui/lab@^9.0.0-beta.6
… latest major react@19.2.8, react-dom@19.2.8, @types/react@^19.2.17, @types/react-dom@^19.2.3
…jors @testing-library/react v16 requires @testing-library/dom as a direct dependency; jest-dom v7 only exposes named matcher exports. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
express-jwt v8 exports a named expressjwt() factory and defaults decoded claims to req.auth; requestProperty keeps them on req.user. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
sanitizeQuery() was removed in v7; query() chains provide the same customSanitizer behaviour. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v10 enables preserve-caught-error, which requires rethrown errors to carry the original cause. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
v5 replaces the default export with the NumericFormat component and renames isNumericString to valueIsNumericString. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
passport 0.6+ made req.logout asynchronous, so destroying the session outside its callback left passport dereferencing a destroyed req.session. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
This reverts commit 7018563.
…mantics MUI removed the inputProps/InputProps escape hatches in favour of slotProps.htmlInput / slotProps.input, which dropped the data-test attributes the UI relies on. fuse.js 7 returns every item for an empty query where 6 returned none, so an empty search now short-circuits. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
@types/bcryptjs@3.0.0
@types/jwt-decode@3.1.0
@types/uuid@11.0.0
@types/yup@0.32.0
…ab to latest major" and React 19 MUI v9 leaves a closed Dialog's full-screen Modal root mounted with pointer-events enabled, which blocks every click in the authenticated app, and Grid v2 no longer consumes container/justifyContent/alignItems so those props leak to the DOM across 19 files. Reverting MUI to v5 also requires reverting React to 18 (MUI v5 peers) and the slotProps migration, which only exists for MUI v6+. Co-Authored-By: Phil Bedford <phil.bedford@cognition.ai>
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Author
Frontend walkthrough verified (manual UI testing @
|
| Flow | Result |
|---|---|
| Sign up / logout / sign in (passport 0.7 async logout) | pass |
| Major UI sections: side nav, header, balance, feed tabs, public feed | pass |
| Feed tab switching Everyone / Friends / Mine | pass |
| Recipient search filters list (fuse.js 7) | pass |
Clearing search empties the list (fuse.js 7 guard in backend/database.ts) |
pass |
NumericFormat amount renders $12.34 (react-number-format 5) |
pass |
| Payment → confirmation → Mine feed → bank withdrawal | pass |
| Bank Accounts + Notifications navigation | pass |
User settings validation + save (MUI v5 inputProps restored) |
pass |
| Console: MUI Grid DOM prop-leak errors gone | pass |
The differentiating check for the fuse.js 7 guard — clearing the query yields zero rows instead of all users:
Console check after the full session
3 Errors — all pre-existing, code identical to develop:
Invalid DOM property `stop-color` / `stop-opacity` (SvgCypressLogo.tsx, src/svgs/*.svg)
A component is changing an uncontrolled input to be controlled (user settings form)
Warnings: XState 4 "Empty string transition configs" deprecation
The MUI 9 justifyContent / alignItems / borderColor Grid prop-leak errors seen on the earlier MUI 9 revision are gone after the MUI 5 / React 18 revert.
Two pre-existing issues found (NOT caused by this PR)
- Invisible onboarding Dialog swallows all clicks after signing in as a user who already has a bank account:
.MuiModal-rootstays mounted full-viewport,document.elementFromPoint()returnsdata-test="user-onboarding-dialog", and no pointer/keyboard events reach the app. Verified to reproduce identically on unmodifieddevelop(MUI 5.16.12 / React 18.2.0). Source:src/containers/UserOnboardingContainer.tsx. Workaround for this walkthrough: signed up a fresh user and completed onboarding through the UI, which unmounts the dialog cleanly. - Payment amounts truncate cents —
$12.34is stored as1200(= $12.00), frombody("amount").isNumeric().trim().toInt()inbackend/validators.ts(unchanged vsdevelop).
Both deserve their own issues; neither blocks this PR.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Upgrades every dependency that can be upgraded without an invasive migration: 19 patch, 21 minor and 30 major bumps, in separate commits (patch batch → minor batch → one commit per major). Six majors needed source changes, seven were reverted as too invasive, and eight could not be installed at all because their
enginesrequire a newer Node than.nvmrc(22.13.0).The behaviour-preserving source adaptations are the interesting part of the diff:
express-jwt6→8req.authimport { expressjwt, Params }, configs typed asParamswithrequestProperty: "user"soreq.userkeeps workingexpress-validator6→7sanitizeQueryremovedquery("status").customSanitizer(...)fuse.js6→7search("")now returns every item instead of nonesetupSearchshort-circuits to[]on an empty query, preserving "clearing the search empties the list"passport0.5→0.7req.logoutis asynchronousreq.logoutcallback (previously passport dereferenced an already-destroyedreq.sessionand crashed the backend)react-number-format4→5NumericFormat+valueIsNumericString@testing-library/*jest-domhas no default export;@testing-library/domis now a peersrc/setup-tests.js,@testing-library/domaddedeslint9→10preserve-caught-errorrulethrow new Error(err, { cause: err })react-virtualized9.22.5→9.22.6patches/react-virtualized+9.22.5.patchdeleted (patch-packageno longer has anything to apply)Upgrades
Patch (
1ee523d)@emotion/styledformikreact-calendarreact-virtualizedshortid@percy/cypress@types/bcryptjs@types/bluebird@types/connect-flash@types/cors@types/dinero.js@types/json-server@types/lowdb@types/morgan@types/passport@types/react-router@types/yupcorsgraphql-httpMinor (
8840ffb)@auth0/auth0-react@babel/core@babel/plugin-syntax-flow@babel/plugin-transform-react-jsx@okta/okta-reactaws-amplifydate-fns@babel/preset-env@percy/cli@types/connect-history-api-fallback@types/express-session@types/react-virtualized@types/validator@types/webpack-envbabel-loadercypressexpress-sessionmorganpassportprettiertypescript-eslintprettier3.9 reformatted a handful of files; that reformatting is part of the minor commit.Major (one commit each)
axiosclsxuuid(+@types/uuid)yupreact-number-formatNumericFormat,valueIsNumericString@okta/jwt-verifier@okta/okta-auth-jsgraphql(+graphql-tools,@graphql-tools/load,@graphql-tools/graphql-file-loader)express-jwt(+jwks-rsa)backend/helpers.tsexpress-validatorbackend/validators.tseslint(+@eslint/js)backend/graphql/resolvers/Query.tsfuse.jsbackend/database.ts@testing-library/react(+jest-dom, new@testing-library/dom)src/setup-tests.js@cypress/code-coverageeslint-plugin-cypressbcryptjsconcurrentlyconnect-history-api-fallbackcross-envdotenvhttp-proxy-middlewarehuskyjsdomnodemonnpmnycpatch-packagestart-server-and-testwait-on@types/bcryptjs3,@types/jsonwebtoken9,@types/jwt-decode3,@types/node26,@types/shortid2,@types/uuid11,@types/yup0.32Security fixes
npm auditneeds an npm lockfile (ENOLOCKhere), so advisories were taken fromyarn audit. Upgrades in this PR pull in the fixed versions of, among others:axios0.28.1 → 1.18.1 (SSRF / credential-leak and DoS advisories affecting 0.x)http-proxy-middleware0.19.1 → 3.0.7 (DoS advisories in 2.x and earlier)form-data,tar,shell-quote,fast-xml-parser,path-to-regexpandjsonwebtokentransitive advisories resolved via the@okta/*,graphql-tools,nyc,npmandaws-amplifyupgradesyarn auditfindings are reachable only through the packages listed under Skipped below (chieflylowdb1,express4 and the Vite 8 stack)Skipped
Reverted after the attempt failed — each was tried on its own commit, validated, then reverted:
@mui/material,@mui/icons-material,@mui/lab5 → 9container/item/justifyContent/alignItems, so those props leak to the DOM (React logs errors) across 19 files, andinputProps/InputPropsmust becomeslotProps.htmlInput/slotProps.input. Codemod-scale; also doubled the Cypress suite runtime (1m50s → 4m15s)react,react-dom18 → 19react-router,react-router-dom5 → 8/7useRouteMatchandSwitchare gone; requires rewriting every route and containerxstate,@xstate/react4 → 5/6Machineremoved in favour ofcreateMachine/actors; all 8 machines plus everyuseActorcall site would need rewritingtypescript5.8 → 7baseUrlandmoduleResolution: node10, which this repo'stsconfigrelies onlowdb1 → 7lowdb/adapters/FileSyncremoved — a fullbackend/database.tsrewriteexpress4 → 5 (+@types/express5)Responseno longer typecheck (RequestHandlermust returnvoid); router/req.querysemantics also changed@faker-js/faker6 → 10faker.random.*andfaker.helpers.randomizeremoved; seed scripts and tests would need broad rewritesdinero.js1 → 2history4 → 5history4; v5 changedlocation/listener shapes and breaks routingdetect-port1 → 2debuglogfromnode:util, which Vite cannot externalize for the browser bundlevite8,vitest4,@vitejs/plugin-react6,vite-plugin-istanbul9vite.config.ts; the plugins require Vite 8, so the whole group is blocked@types/lodash4.14.181 → 4.17.24sortBy/orderByunions soscripts/seedDataUtils.tsno longer typechecks on `TransactionCould not be installed on the repo's Node version (
.nvmrc= 22.13.0) — each requires Node ≥ 22.15/22.18/22.22, so bumping them means bumping.nvmrcandenginesfirst:@babel/core8,@babel/plugin-syntax-flow8,@babel/plugin-transform-react-jsx8,@babel/preset-env8,http-proxy-middleware4,jsdom30,npm12, plus@types/detect-port2,@types/dinero.js2,@types/express-serve-static-core5,@types/http-proxy-middleware1 and@types/lowdb2, which are pinned to the runtime packages skipped above.Source impact
Production dependencies touched by source changes:
react-number-format(TransactionCreateStepTwo.tsx). Backend dev dependencies touched:express-jwt/jwks-rsa(backend/helpers.ts),express-validator(backend/validators.ts),fuse.js(backend/database.ts),passport(backend/auth.ts),eslint(backend/graphql/resolvers/Query.ts),@testing-library/*(src/setup-tests.js). Everything else is dev-only tooling (Cypress, Percy, nyc, husky, babel, types) or a drop-in runtime upgrade with no call-site changes.Validation
Run on
1f9cbbewith Node 22.13.0 / yarn 1.22.22:yarn types(tsc --noEmit)yarn lint(eslint + prettier)yarn build(vite build)yarn test:unit:ci(vitest)yarn db:seedyarn cypress:run(full E2E)Video demo
35s annotated walkthrough of the running app (sign-up → onboarding → feeds → search → payment → settings), plus the full manual test matrix and console check:
Two issues surfaced during the walkthrough are pre-existing on
develop(verified by A/B against an unmodifieddevelopworktree) and are documented in the walkthrough comment: an invisible onboardingDialogroot that swallows clicks for users who already have a bank account, and payment amounts truncating cents ($12.34→$12.00).Link to Devin session: https://app.devin.ai/sessions/65278c6eca294188a1d9569f914f4175
Requested by: @dr-phil
Devin Review