Skip to content

Rate-limit CSRF token and static client routes - #243

Merged
coder13 merged 1 commit into
devfrom
agent/static-route-rate-limit
Jul 14, 2026
Merged

coder13 merged 1 commit into
devfrom
agent/static-route-rate-limit

Conversation

@coder13

@coder13 coder13 commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Closes #242\n\n- applies the established request limit to the CSRF token endpoint\n- protects static assets and the SPA fallback with the same policy\n- verifies a normal fallback response followed by the standard 429 response\n\nValidation: yarn workspace v1.22.22
yarn run v1.22.22
$ jest --passWithNoTests --runInBand middlewares/clientAssets.test.js
Done in 0.49s.
Done in 0.63s., yarn workspace v1.22.22
yarn run v1.22.22
$ eslint ./

/tmp/letscube-static-rate-limit/server/features.test.js
8:3 warning Unused eslint-disable directive (no problems were reported from 'global-require')

/tmp/letscube-static-rate-limit/server/postgres/dualWrite.js
1:1 warning Unused eslint-disable directive (no problems were reported from 'no-await-in-loop', 'no-continue', or 'no-restricted-syntax')

/tmp/letscube-static-rate-limit/server/runtimeConfig.test.js
3:1 warning Unused eslint-disable directive (no problems were reported from 'global-require')

/tmp/letscube-static-rate-limit/server/social/relationshipService.js
1:1 warning Unused eslint-disable directive (no problems were reported from 'no-await-in-loop' or 'no-continue')

✖ 4 problems (0 errors, 4 warnings)
0 errors and 4 warnings potentially fixable with the --fix option.

Done in 0.68s.
Done in 0.81s., and yarn run v1.22.22
$ turbo run test:ci

• Packages in scope: letscube-client, letscube-scrambles, letscube-server
• Running test:ci in 3 packages
• Remote caching disabled, using shared worktree cache

letscube-client:test:ci: cache hit, replaying logs d98a4f5d76a5613c
letscube-scrambles:test:ci: cache hit, replaying logs 8a659104007abce5
letscube-client:test:ci: yarn run v1.22.22
letscube-client:test:ci: $ jest --ci --passWithNoTests
letscube-client:test:ci: PASS src/lib/stats.test.js
letscube-client:test:ci: PASS src/lib/utils.test.js
letscube-client:test:ci: PASS src/store/room/reducer.test.js
letscube-client:test:ci: PASS src/lib/requestSequence.test.js
letscube-client:test:ci: PASS src/lib/wcaAuth.test.js
letscube-server:test:ci: cache hit, replaying logs c71d04773ec895ff
letscube-scrambles:test:ci: yarn run v1.22.22
letscube-client:test:ci: PASS src/lib/fetch.test.js
letscube-client:test:ci: PASS src/components/Notifications/registry.test.js
letscube-client:test:ci: PASS src/store/notifications/reducer.test.js
letscube-client:test:ci: PASS src/store/room/roomPasswordStorage.test.js
letscube-client:test:ci: PASS src/components/common/Scramble.test.jsx
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-server:test:ci: yarn run v1.22.22
letscube-scrambles:test:ci: $ yarn test
letscube-server:test:ci: warning Skipping preferred cache folder "/home/cailyn/.cache/yarn" because it is not writable.
letscube-server:test:ci: warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".
letscube-server:test:ci: $ yarn test
letscube-server:test:ci: warning Cannot find a suitable global folder. Tried these: "/usr/local, /home/cailyn/.yarn"
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: Scramble: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/Scramble.jsx:43:3)
letscube-scrambles:test:ci: $ jest --passWithNoTests
letscube-scrambles:test:ci: PASS ./index.test.js
letscube-scrambles:test:ci: generateScramble
letscube-server:test:ci: warning Skipping preferred cache folder "/home/cailyn/.cache/yarn" because it is not writable.
letscube-scrambles:test:ci: ✓ uses cubing.js for 222 (11 ms)
letscube-server:test:ci: warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".
letscube-scrambles:test:ci: ✓ uses cubing.js for 333 (1 ms)
letscube-server:test:ci: $ jest --passWithNoTests
letscube-scrambles:test:ci: ✓ uses cubing.js for 333bf (5 ms)
letscube-server:test:ci: warning Cannot find a suitable global folder. Tried these: "/usr/local, /home/cailyn/.yarn"
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-scrambles:test:ci: ✓ uses cubing.js for 333oh (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for 333ft (6 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for 444 (1 ms)
letscube-server:test:ci: PASS ./health.test.js
letscube-server:test:ci: PASS ./username.test.js
letscube-server:test:ci: PASS ./usernameBackfill.test.js
letscube-server:test:ci: PASS socket/lib/resultSubmission.test.js
letscube-server:test:ci: PASS socket/lib/reconnectGrace.test.js
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci:
letscube-client:test:ci: 7 | const theme = createTheme();
letscube-client:test:ci: 8 |
letscube-scrambles:test:ci: ✓ uses cubing.js for 444bf (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for 555 (6 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for 555bf (1 ms)
letscube-server:test:ci: PASS postgres/dualWrite.test.js
letscube-server:test:ci: PASS ./usernamePostgresBackfill.test.js
letscube-server:test:ci: PASS socket/lib/roomMap.test.js
letscube-server:test:ci: PASS socket/lib/roomAuthorization.test.js
letscube-server:test:ci: PASS middlewares/csrf.test.js
letscube-client:test:ci: > 9 | const renderScramble = (props) => render(
letscube-client:test:ci: | ^
letscube-client:test:ci: 10 |
letscube-client:test:ci: 11 | <Scramble {...props} />
letscube-scrambles:test:ci: ✓ uses cubing.js for 666 (8 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for 777 (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for minx (17 ms)
letscube-server:test:ci: PASS privacy/userEmailPurge.test.js
letscube-server:test:ci: PASS realtime/socialEvents.test.js
letscube-server:test:ci: PASS social/discoveryService.test.js
letscube-server:test:ci: PASS socket/lib/socketHandler.test.js
letscube-client:test:ci: 12 | ,
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-scrambles:test:ci: ✓ uses cubing.js for pyram (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for clock (11 ms)
letscube-server:test:ci: PASS socket/namespaces/rooms.test.js
letscube-server:test:ci: PASS ./runtimeConfig.test.js
letscube-server:test:ci: PASS socket/namespaces/default.test.js
letscube-server:test:ci: PASS socket/middlewares/logger.test.js
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-scrambles:test:ci: ✓ uses cubing.js for skewb (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for sq1 (1 ms)
letscube-scrambles:test:ci: ✓ uses cubing.js for fto (18 ms)
letscube-server:test:ci: PASS middlewares/apiRateLimit.test.js
letscube-server:test:ci: PASS auth/testUser.test.js
letscube-server:test:ci: PASS ./database.test.js
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-scrambles:test:ci: ✓ uses Scrambow for the custom practice events (7 ms)
letscube-scrambles:test:ci: ✓ rejects events that are not in the shared catalog (35 ms)
letscube-scrambles:test:ci: ✓ surfaces cubing.js failures without using Scrambow (1 ms)
letscube-server:test:ci: PASS socket/lib/roomSockets.test.js
letscube-server:test:ci: PASS middlewares/cors.test.js
letscube-server:test:ci: PASS auth/wcaProfile.test.js
letscube-server:test:ci: PASS ./features.test.js
letscube-server:test:ci: PASS ./requestLogging.test.js
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-scrambles:test:ci: events
letscube-scrambles:test:ci: ✓ contains every event supported by the generator (8 ms)
letscube-scrambles:test:ci: ✓ does not expose provider implementation details (23 ms)
letscube-server:test:ci: PASS socket/middlewares/wrapExpressMiddleware.test.js
letscube-server:test:ci: PASS socket/lib/roomAvailability.test.js
letscube-server:test:ci: PASS models/user.test.js
letscube-server:test:ci: PASS ./metrics.test.js
letscube-server:test:ci: PASS social/requestRateLimiter.test.js
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-scrambles:test:ci:
letscube-scrambles:test:ci: Test Suites: 1 passed, 1 total
letscube-scrambles:test:ci: Tests: 22 passed, 22 total
letscube-server:test:ci: PASS models/room.test.js
letscube-server:test:ci: PASS middlewares/clientAssets.test.js
letscube-server:test:ci: PASS auth/index.test.js
letscube-server:test:ci: PASS social/relationshipService.test.js
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at renderScramble (src/components/common/Scramble.test.jsx:9:41)
letscube-client:test:ci: at Object.renderScramble (src/components/common/Scramble.test.jsx:16:3)
letscube-scrambles:test:ci: Snapshots: 0 total
letscube-scrambles:test:ci: Time: 1.545 s
letscube-server:test:ci: PASS models/friendRelationship.test.js
letscube-scrambles:test:ci: Ran all test suites.
letscube-server:test:ci: PASS social/notificationService.test.js
letscube-scrambles:test:ci: Done in 2.46s.
letscube-server:test:ci: PASS social/raceInvitationService.test.js
letscube-client:test:ci:
letscube-client:test:ci: PASS src/components/Timer/ManualTimer.test.jsx
letscube-client:test:ci: PASS src/components/User.test.jsx
letscube-server:test:ci: PASS api/friends.test.js
letscube-server:test:ci: PASS ./api.test.js
letscube-server:test:ci:
letscube-server:test:ci: Test Suites: 40 passed, 40 total
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-server:test:ci: Tests: 211 passed, 211 total
letscube-server:test:ci: Snapshots: 0 total
letscube-server:test:ci: Time: 1.876 s
letscube-server:test:ci: Ran all test suites.
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: User: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-server:test:ci: Done in 2.27s.
letscube-client:test:ci: at user (/tmp/letscube-codeql-fixture-security/client/src/components/User.jsx:34:17)
letscube-client:test:ci: at Router (/tmp/letscube-codeql-fixture-security/node_modules/react-router/cjs/react-router.js:283:30)
letscube-client:test:ci: at MemoryRouter (/tmp/letscube-codeql-fixture-security/node_modules/react-router/cjs/react-router.js:385:35)
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci: at StyledEngineProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/styled-engine/node/StyledEngineProvider/StyledEngineProvider.js:106:5)
letscube-client:test:ci: at children (/tmp/letscube-codeql-fixture-security/client/src/theme.jsx:77:33)
letscube-client:test:ci:
letscube-client:test:ci: 8 | const baseUser = { displayName: 'Cuber', id: 42 };
letscube-client:test:ci: 9 |
letscube-client:test:ci: > 10 | const renderUser = (user) => render(
letscube-client:test:ci: | ^
letscube-client:test:ci: 11 |
letscube-client:test:ci: 12 |
letscube-client:test:ci: 13 |
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at renderUser (src/components/User.test.jsx:10:38)
letscube-client:test:ci: at Object.renderUser (src/components/User.test.jsx:19:5)
letscube-client:test:ci:
letscube-client:test:ci: PASS src/components/Lobby/Announcements.test.jsx
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: ReactMarkdown: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at ReactMarkdown (/tmp/letscube-codeql-fixture-security/node_modules/react-markdown/src/react-markdown.js:81:42)
letscube-client:test:ci: at div
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at Paper (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Paper/Paper.js:75:59)
letscube-client:test:ci: at useState (/tmp/letscube-codeql-fixture-security/client/src/components/Lobby/Announcements.jsx:16:51)
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at workLoop (../node_modules/scheduler/cjs/scheduler.development.js:266:34)
letscube-client:test:ci: at flushWork (../node_modules/scheduler/cjs/scheduler.development.js:239:14)
letscube-client:test:ci: at performWorkUntilDeadline (../node_modules/scheduler/cjs/scheduler.development.js:533:21)
letscube-client:test:ci: at Timeout.task [as _onTimeout] (../node_modules/jsdom/lib/jsdom/browser/Window.js:579:19)
letscube-client:test:ci:
letscube-client:test:ci: PASS src/store/room/resultOutbox.test.js
letscube-client:test:ci: PASS src/components/common/ScramblePreview.test.jsx
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: ScramblePreview: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/ScramblePreview.jsx:103:28)
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci: at StyledEngineProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/styled-engine/node/StyledEngineProvider/StyledEngineProvider.js:106:5)
letscube-client:test:ci: at children (/tmp/letscube-codeql-fixture-security/client/src/theme.jsx:77:33)
letscube-client:test:ci:
letscube-client:test:ci: 13 | const players = [];
letscube-client:test:ci: 14 |
letscube-client:test:ci: > 15 | const renderPreview = (element) => render({element});
letscube-client:test:ci: | ^
letscube-client:test:ci: 16 |
letscube-client:test:ci: 17 | const flushPlayerLoad = () => act(async () => {
letscube-client:test:ci: 18 | await Promise.resolve();
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at renderPreview (src/components/common/ScramblePreview.test.jsx:15:42)
letscube-client:test:ci: at Object.renderPreview (src/components/common/ScramblePreview.test.jsx:43:25)
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: TwistyVisualization: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/ScramblePreview.jsx:33:32)
letscube-client:test:ci: at div
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/ScramblePreview.jsx:103:28)
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci: at StyledEngineProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/styled-engine/node/StyledEngineProvider/StyledEngineProvider.js:106:5)
letscube-client:test:ci: at children (/tmp/letscube-codeql-fixture-security/client/src/theme.jsx:77:33)
letscube-client:test:ci:
letscube-client:test:ci: 13 | const players = [];
letscube-client:test:ci: 14 |
letscube-client:test:ci: > 15 | const renderPreview = (element) => render({element});
letscube-client:test:ci: | ^
letscube-client:test:ci: 16 |
letscube-client:test:ci: 17 | const flushPlayerLoad = () => act(async () => {
letscube-client:test:ci: 18 | await Promise.resolve();
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at renderPreview (src/components/common/ScramblePreview.test.jsx:15:42)
letscube-client:test:ci: at Object.renderPreview (src/components/common/ScramblePreview.test.jsx:43:25)
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: Scramble: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/Scramble.jsx:43:3)
letscube-client:test:ci: at div
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at DialogContent (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/DialogContent/DialogContent.js:68:59)
letscube-client:test:ci: at div
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at Paper (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Paper/Paper.js:75:59)
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at div
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at Transition (/tmp/letscube-codeql-fixture-security/node_modules/react-transition-group/cjs/Transition.js:135:30)
letscube-client:test:ci: at Fade (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Fade/Fade.js:33:42)
letscube-client:test:ci: at FocusTrap (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Unstable_TrapFocus/FocusTrap.js:85:5)
letscube-client:test:ci: at div
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at Portal (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Portal/Portal.js:32:5)
letscube-client:test:ci: at Modal (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Modal/Modal.js:89:59)
letscube-client:test:ci: at /tmp/letscube-codeql-fixture-security/node_modules/@emotion/react/dist/emotion-element-25f9958c.browser.cjs.js:56:23
letscube-client:test:ci: at Dialog (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/Dialog/Dialog.js:201:59)
letscube-client:test:ci: at event (/tmp/letscube-codeql-fixture-security/client/src/components/common/ScramblePreview.jsx:103:28)
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci: at StyledEngineProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/styled-engine/node/StyledEngineProvider/StyledEngineProvider.js:106:5)
letscube-client:test:ci: at children (/tmp/letscube-codeql-fixture-security/client/src/theme.jsx:77:33)
letscube-client:test:ci:
letscube-client:test:ci: 65 | await flushPlayerLoad();
letscube-client:test:ci: 66 |
letscube-client:test:ci: > 67 | fireEvent.click(getByLabelText('Enlarge 777 scramble preview'));
letscube-client:test:ci: | ^
letscube-client:test:ci: 68 | await flushPlayerLoad();
letscube-client:test:ci: 69 |
letscube-client:test:ci: 70 | expect(getByLabelText('777 enlarged scramble preview')).toBeInTheDocument();
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performSyncWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:26124:20)
letscube-client:test:ci: at flushSyncCallbacks (../node_modules/react-dom/cjs/react-dom.development.js:12042:22)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at Object.eventWrapper (../node_modules/@testing-library/react/dist/pure.js:106:28)
letscube-client:test:ci: at fireEvent (../node_modules/@testing-library/dom/dist/events.js:12:35)
letscube-client:test:ci: at Function.fireEvent. [as click] (../node_modules/@testing-library/dom/dist/events.js:110:36)
letscube-client:test:ci: at Function.fireEvent. [as click] (../node_modules/@testing-library/react/dist/fire-event.js:15:52)
letscube-client:test:ci: at Object.click (src/components/common/ScramblePreview.test.jsx:67:13)
letscube-client:test:ci:
letscube-client:test:ci: PASS src/store/middlewares/rooms.test.js
letscube-client:test:ci: PASS src/components/Room/Common/Main.test.jsx
letscube-client:test:ci: PASS src/components/App.test.jsx
letscube-client:test:ci: PASS src/components/Navigation.test.jsx
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: GlobalPendingResultAlert: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at atPendingRoom (/tmp/letscube-codeql-fixture-security/client/src/components/Navigation.jsx:42:3)
letscube-client:test:ci:
letscube-client:test:ci: 38 | it('keeps discard accessible when the pending room could not be joined', () => {
letscube-client:test:ci: 39 | const onDiscard = jest.fn();
letscube-client:test:ci: > 40 | render(
letscube-client:test:ci: | ^
letscube-client:test:ci: 41 | <GlobalPendingResultAlert
letscube-client:test:ci: 42 | atPendingRoom
letscube-client:test:ci: 43 | onDiscard={onDiscard}
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at Object. (src/components/Navigation.test.jsx:40:11)
letscube-client:test:ci:
letscube-client:test:ci: PASS src/components/RoomConfigureDialog.test.jsx
letscube-client:test:ci: ● Console
letscube-client:test:ci:
letscube-client:test:ci: console.error
letscube-client:test:ci: Warning: RoomConfigureDialog: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.
letscube-client:test:ci: at room (/tmp/letscube-codeql-fixture-security/client/src/components/RoomConfigureDialog.jsx:45:3)
letscube-client:test:ci: at DefaultPropsProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js:17:3)
letscube-client:test:ci: at RtlProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/RtlProvider/index.js:15:3)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/private-theming/node/ThemeProvider/ThemeProvider.js:40:5)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/system/ThemeProvider/ThemeProvider.js:56:5)
letscube-client:test:ci: at ThemeProviderNoVars (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProviderNoVars.js:15:10)
letscube-client:test:ci: at ThemeProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/material/node/styles/ThemeProvider.js:16:3)
letscube-client:test:ci: at StyledEngineProvider (/tmp/letscube-codeql-fixture-security/node_modules/@mui/styled-engine/node/StyledEngineProvider/StyledEngineProvider.js:106:5)
letscube-client:test:ci: at children (/tmp/letscube-codeql-fixture-security/client/src/theme.jsx:77:33)
letscube-client:test:ci:
letscube-client:test:ci: 14 | };
letscube-client:test:ci: 15 |
letscube-client:test:ci: > 16 | const renderDialog = (props) => render(
letscube-client:test:ci: | ^
letscube-client:test:ci: 17 |
letscube-client:test:ci: 18 | <RoomConfigureDialog {...props} />
letscube-client:test:ci: 19 | ,
letscube-client:test:ci:
letscube-client:test:ci: at printWarning (../node_modules/react-dom/cjs/react-dom.development.js:86:30)
letscube-client:test:ci: at error (../node_modules/react-dom/cjs/react-dom.development.js:60:7)
letscube-client:test:ci: at validateFunctionComponentInDev (../node_modules/react-dom/cjs/react-dom.development.js:20230:9)
letscube-client:test:ci: at mountIndeterminateComponent (../node_modules/react-dom/cjs/react-dom.development.js:20189:7)
letscube-client:test:ci: at beginWork (../node_modules/react-dom/cjs/react-dom.development.js:21626:16)
letscube-client:test:ci: at beginWork$1 (../node_modules/react-dom/cjs/react-dom.development.js:27465:14)
letscube-client:test:ci: at performUnitOfWork (../node_modules/react-dom/cjs/react-dom.development.js:26599:12)
letscube-client:test:ci: at workLoopSync (../node_modules/react-dom/cjs/react-dom.development.js:26505:5)
letscube-client:test:ci: at renderRootSync (../node_modules/react-dom/cjs/react-dom.development.js:26473:7)
letscube-client:test:ci: at performConcurrentWorkOnRoot (../node_modules/react-dom/cjs/react-dom.development.js:25777:74)
letscube-client:test:ci: at flushActQueue (../node_modules/react/cjs/react.development.js:2667:24)
letscube-client:test:ci: at act (../node_modules/react/cjs/react.development.js:2582:11)
letscube-client:test:ci: at ../node_modules/@testing-library/react/dist/act-compat.js:46:25
letscube-client:test:ci: at renderRoot (../node_modules/@testing-library/react/dist/pure.js:189:26)
letscube-client:test:ci: at render (../node_modules/@testing-library/react/dist/pure.js:291:10)
letscube-client:test:ci: at renderDialog (src/components/RoomConfigureDialog.test.jsx:16:39)
letscube-client:test:ci: at Object.renderDialog (src/components/RoomConfigureDialog.test.jsx:25:5)
letscube-client:test:ci:
letscube-client:test:ci:
letscube-client:test:ci: Test Suites: 20 passed, 20 total
letscube-client:test:ci: Tests: 97 passed, 97 total
letscube-client:test:ci: Snapshots: 0 total
letscube-client:test:ci: Time: 4.748 s
letscube-client:test:ci: Ran all test suites.
letscube-client:test:ci: Done in 5.08s.

Tasks: 3 successful, 3 total
Cached: 3 cached, 3 total
Time: 13ms >>> FULL TURBO

Done in 0.07s..

Protect the CSRF token and SPA file fallback with the established request limit.
@coder13
coder13 marked this pull request as ready for review July 14, 2026 14:21
@coder13
coder13 merged commit 355d9ed into dev Jul 14, 2026
9 checks passed
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.

1 participant