Repository navigation
Rate-limit CSRF token and static client routes - #243
Merged
Merged
Conversation
Protect the CSRF token and SPA file fallback with the established request limit.
coder13
marked this pull request as ready for review
July 14, 2026 14:21
This was referenced Jul 14, 2026
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.
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
--fixoption.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..