Using claude to identify and address several issues.#802
Merged
mcottontensor merged 24 commits intoEpicGamesExt:masterfrom Apr 13, 2026
Merged
Using claude to identify and address several issues.#802mcottontensor merged 24 commits intoEpicGamesExt:masterfrom
mcottontensor merged 24 commits intoEpicGamesExt:masterfrom
Conversation
Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge (was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16. Re-enables 7 previously-disabled ESLint rules in Frontend/library and Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents, no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison, require-await, no-base-to-string) and fixes all resulting violations.
Adds void operator to all floating promises in Frontend/library and Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media play) are genuine fire-and-forget; WebRTC/XR operations use void to explicitly acknowledge unhandled promises.
- Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs (was es2016 and es5; also removed misplaced top-level lib arrays) - Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all packages that use it
…ast in WebSocketTransport
…sage, strict equality
…rces, strict equality
…y, fix readUInt16LE casing
The root overrides had "glob": ">=7.2.3" (security fix) which resolved
to glob@13. test-exclude@6 used promisify(require('glob')), which throws
because glob@9+ no longer exports a callable default. Overriding
test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports
compatible with glob@10+.
|
…oader TS5011 error
openapi-framework's dynamic import uses `file://${path}` URLs at
runtime. On Windows, paths containing `{streamerId}` produce invalid
file:// URLs (curly braces must be percent-encoded), causing those
route handlers to silently fail to register.
Replace `paths: './dist/paths'` with explicit static imports so that
Node.js require() handles the filesystem path (which has no URL
encoding requirements). Also add .catch() error logging so any future
init failures are visible in the signalling server logs.
…ions, add npm cache - Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows) - Upgrade all actions/checkout from v3 to v4 - Upgrade all actions/setup-node from v3 to v4 - Add cache: 'npm' to setup-node steps in build/test workflows - Pin npm install in changesets-publish to 11.5.1 instead of @latest
The publish workflow already validates each package builds against public npm dependencies in sequence before publishing. By the time a release is created, this has already been proven. The separate healthcheck is redundant and the trigger in create-gh-release.yml has been removed.
…exclusions Build steps were excluded from the archives anyway, making them pointless. On a clean checkout there are no node_modules or dist directories, so those exclusions were also redundant. The release archives are source distributions.
Also fix incorrect 'Login to GitHub Container Registry' label in publish-sfu-image.yml — both workflows publish to Docker Hub.
Instead of creating a new issue on every failed run, find any existing open 'Link Checker Report' issue and update it in place. Also close the issue automatically when all links pass so it doesn't sit open stale.
Contributor
mcottontensor
added a commit
to mcottontensor/PixelStreamingInfrastructure
that referenced
this pull request
Apr 13, 2026
* chore: add CLAUDE.md with repo guidance for Claude Code
* chore: standardize TypeScript version and re-enable ESLint rules
Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge
(was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override
to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16.
Re-enables 7 previously-disabled ESLint rules in Frontend/library and
Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents,
no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison,
require-await, no-base-to-string) and fixes all resulting violations.
* chore: re-enable no-floating-promises ESLint rule
Adds void operator to all floating promises in Frontend/library and
Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media
play) are genuine fire-and-forget; WebRTC/XR operations use void to
explicitly acknowledge unhandled promises.
* chore: standardize @types/node to ^22.14.0 across all workspaces
* chore: standardize TypeScript target to ES6 and ESLint deps
- Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs
(was es2016 and es5; also removed misplaced top-level lib arrays)
- Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all
packages that use it
* fix: spread args correctly in EventEmitter.once() callback
* fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport
* fix(signalling): remove redundant playerCount, deduplicate config message, strict equality
* fix(wilbur): correct status operationId, return 404 for missing resources, strict equality
* fix(frontend/library): strict equality, replace console.log with Logger
* fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo
* fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing
* fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13
The root overrides had "glob": ">=7.2.3" (security fix) which resolved
to glob@13. test-exclude@6 used promisify(require('glob')), which throws
because glob@9+ no longer exports a callable default. Overriding
test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports
compatible with glob@10+.
* fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error
* fix(ci): always output signalling and streamer logs in streaming healthcheck
* fix: use static imports for REST API path handlers to fix Windows CI
openapi-framework's dynamic import uses `file://${path}` URLs at
runtime. On Windows, paths containing `{streamerId}` produce invalid
file:// URLs (curly braces must be percent-encoded), causing those
route handlers to silently fail to register.
Replace `paths: './dist/paths'` with explicit static imports so that
Node.js require() handles the filesystem path (which has no URL
encoding requirements). Also add .catch() error logging so any future
init failures are visible in the signalling server logs.
* chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache
- Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows)
- Upgrade all actions/checkout from v3 to v4
- Upgrade all actions/setup-node from v3 to v4
- Add cache: 'npm' to setup-node steps in build/test workflows
- Pin npm install in changesets-publish to 11.5.1 instead of @latest
* fix: replace fixed sleep with registry propagation poll in npm publish workflow
* fix: create or update release tag on npm publish to handle re-runs
* chore: remove redundant healthcheck-libs-with-public-deps workflow
The publish workflow already validates each package builds against public
npm dependencies in sequence before publishing. By the time a release is
created, this has already been proven. The separate healthcheck is
redundant and the trigger in create-gh-release.yml has been removed.
* chore: simplify create-gh-release — remove redundant build steps and exclusions
Build steps were excluded from the archives anyway, making them pointless.
On a clean checkout there are no node_modules or dist directories, so those
exclusions were also redundant. The release archives are source distributions.
* fix: create or update docker release tags to handle re-runs
Also fix incorrect 'Login to GitHub Container Registry' label in
publish-sfu-image.yml — both workflows publish to Docker Hub.
* fix: deduplicate link checker issues and auto-close when links pass
Instead of creating a new issue on every failed run, find any existing
open 'Link Checker Report' issue and update it in place. Also close the
issue automatically when all links pass so it doesn't sit open stale.
* docs: add DEVELOPING.md describing development workflow from feature to release
(cherry picked from commit 96066d6)
# Conflicts:
# .github/workflows/changesets-publish-npm-packages.yml
# .github/workflows/healthcheck-libs-with-public-deps.yml
# Extras/SS_Test/package.json
# Frontend/library/src/PeerConnectionController/PeerConnectionController.ts
# Frontend/ui-library/src/UI/SessionTest.ts
# package-lock.json
# package.json
This was referenced Apr 13, 2026
mcottontensor
added a commit
to mcottontensor/PixelStreamingInfrastructure
that referenced
this pull request
Apr 13, 2026
* chore: add CLAUDE.md with repo guidance for Claude Code
* chore: standardize TypeScript version and re-enable ESLint rules
Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge
(was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override
to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16.
Re-enables 7 previously-disabled ESLint rules in Frontend/library and
Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents,
no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison,
require-await, no-base-to-string) and fixes all resulting violations.
* chore: re-enable no-floating-promises ESLint rule
Adds void operator to all floating promises in Frontend/library and
Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media
play) are genuine fire-and-forget; WebRTC/XR operations use void to
explicitly acknowledge unhandled promises.
* chore: standardize @types/node to ^22.14.0 across all workspaces
* chore: standardize TypeScript target to ES6 and ESLint deps
- Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs
(was es2016 and es5; also removed misplaced top-level lib arrays)
- Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all
packages that use it
* fix: spread args correctly in EventEmitter.once() callback
* fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport
* fix(signalling): remove redundant playerCount, deduplicate config message, strict equality
* fix(wilbur): correct status operationId, return 404 for missing resources, strict equality
* fix(frontend/library): strict equality, replace console.log with Logger
* fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo
* fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing
* fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13
The root overrides had "glob": ">=7.2.3" (security fix) which resolved
to glob@13. test-exclude@6 used promisify(require('glob')), which throws
because glob@9+ no longer exports a callable default. Overriding
test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports
compatible with glob@10+.
* fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error
* fix(ci): always output signalling and streamer logs in streaming healthcheck
* fix: use static imports for REST API path handlers to fix Windows CI
openapi-framework's dynamic import uses `file://${path}` URLs at
runtime. On Windows, paths containing `{streamerId}` produce invalid
file:// URLs (curly braces must be percent-encoded), causing those
route handlers to silently fail to register.
Replace `paths: './dist/paths'` with explicit static imports so that
Node.js require() handles the filesystem path (which has no URL
encoding requirements). Also add .catch() error logging so any future
init failures are visible in the signalling server logs.
* chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache
- Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows)
- Upgrade all actions/checkout from v3 to v4
- Upgrade all actions/setup-node from v3 to v4
- Add cache: 'npm' to setup-node steps in build/test workflows
- Pin npm install in changesets-publish to 11.5.1 instead of @latest
* fix: replace fixed sleep with registry propagation poll in npm publish workflow
* fix: create or update release tag on npm publish to handle re-runs
* chore: remove redundant healthcheck-libs-with-public-deps workflow
The publish workflow already validates each package builds against public
npm dependencies in sequence before publishing. By the time a release is
created, this has already been proven. The separate healthcheck is
redundant and the trigger in create-gh-release.yml has been removed.
* chore: simplify create-gh-release — remove redundant build steps and exclusions
Build steps were excluded from the archives anyway, making them pointless.
On a clean checkout there are no node_modules or dist directories, so those
exclusions were also redundant. The release archives are source distributions.
* fix: create or update docker release tags to handle re-runs
Also fix incorrect 'Login to GitHub Container Registry' label in
publish-sfu-image.yml — both workflows publish to Docker Hub.
* fix: deduplicate link checker issues and auto-close when links pass
Instead of creating a new issue on every failed run, find any existing
open 'Link Checker Report' issue and update it in place. Also close the
issue automatically when all links pass so it doesn't sit open stale.
* docs: add DEVELOPING.md describing development workflow from feature to release
(cherry picked from commit 96066d6)
# Conflicts:
# .github/workflows/changesets-publish-npm-packages.yml
# Extras/SS_Test/package.json
# Frontend/library/src/PeerConnectionController/PeerConnectionController.ts
# package-lock.json
# package.json
mcottontensor
added a commit
to mcottontensor/PixelStreamingInfrastructure
that referenced
this pull request
Apr 13, 2026
* chore: add CLAUDE.md with repo guidance for Claude Code
* chore: standardize TypeScript version and re-enable ESLint rules
Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge
(was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override
to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16.
Re-enables 7 previously-disabled ESLint rules in Frontend/library and
Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents,
no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison,
require-await, no-base-to-string) and fixes all resulting violations.
* chore: re-enable no-floating-promises ESLint rule
Adds void operator to all floating promises in Frontend/library and
Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media
play) are genuine fire-and-forget; WebRTC/XR operations use void to
explicitly acknowledge unhandled promises.
* chore: standardize @types/node to ^22.14.0 across all workspaces
* chore: standardize TypeScript target to ES6 and ESLint deps
- Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs
(was es2016 and es5; also removed misplaced top-level lib arrays)
- Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all
packages that use it
* fix: spread args correctly in EventEmitter.once() callback
* fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport
* fix(signalling): remove redundant playerCount, deduplicate config message, strict equality
* fix(wilbur): correct status operationId, return 404 for missing resources, strict equality
* fix(frontend/library): strict equality, replace console.log with Logger
* fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo
* fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing
* fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13
The root overrides had "glob": ">=7.2.3" (security fix) which resolved
to glob@13. test-exclude@6 used promisify(require('glob')), which throws
because glob@9+ no longer exports a callable default. Overriding
test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports
compatible with glob@10+.
* fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error
* fix(ci): always output signalling and streamer logs in streaming healthcheck
* fix: use static imports for REST API path handlers to fix Windows CI
openapi-framework's dynamic import uses `file://${path}` URLs at
runtime. On Windows, paths containing `{streamerId}` produce invalid
file:// URLs (curly braces must be percent-encoded), causing those
route handlers to silently fail to register.
Replace `paths: './dist/paths'` with explicit static imports so that
Node.js require() handles the filesystem path (which has no URL
encoding requirements). Also add .catch() error logging so any future
init failures are visible in the signalling server logs.
* chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache
- Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows)
- Upgrade all actions/checkout from v3 to v4
- Upgrade all actions/setup-node from v3 to v4
- Add cache: 'npm' to setup-node steps in build/test workflows
- Pin npm install in changesets-publish to 11.5.1 instead of @latest
* fix: replace fixed sleep with registry propagation poll in npm publish workflow
* fix: create or update release tag on npm publish to handle re-runs
* chore: remove redundant healthcheck-libs-with-public-deps workflow
The publish workflow already validates each package builds against public
npm dependencies in sequence before publishing. By the time a release is
created, this has already been proven. The separate healthcheck is
redundant and the trigger in create-gh-release.yml has been removed.
* chore: simplify create-gh-release — remove redundant build steps and exclusions
Build steps were excluded from the archives anyway, making them pointless.
On a clean checkout there are no node_modules or dist directories, so those
exclusions were also redundant. The release archives are source distributions.
* fix: create or update docker release tags to handle re-runs
Also fix incorrect 'Login to GitHub Container Registry' label in
publish-sfu-image.yml — both workflows publish to Docker Hub.
* fix: deduplicate link checker issues and auto-close when links pass
Instead of creating a new issue on every failed run, find any existing
open 'Link Checker Report' issue and update it in place. Also close the
issue automatically when all links pass so it doesn't sit open stale.
* docs: add DEVELOPING.md describing development workflow from feature to release
(cherry picked from commit 96066d6)
# Conflicts:
# package-lock.json
# package.json
Collaborator
Author
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
mcottontensor
added a commit
that referenced
this pull request
Apr 13, 2026
…807) * Using claude to identify and address several issues. (#802) * chore: add CLAUDE.md with repo guidance for Claude Code * chore: standardize TypeScript version and re-enable ESLint rules Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge (was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16. Re-enables 7 previously-disabled ESLint rules in Frontend/library and Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents, no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison, require-await, no-base-to-string) and fixes all resulting violations. * chore: re-enable no-floating-promises ESLint rule Adds void operator to all floating promises in Frontend/library and Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media play) are genuine fire-and-forget; WebRTC/XR operations use void to explicitly acknowledge unhandled promises. * chore: standardize @types/node to ^22.14.0 across all workspaces * chore: standardize TypeScript target to ES6 and ESLint deps - Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs (was es2016 and es5; also removed misplaced top-level lib arrays) - Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all packages that use it * fix: spread args correctly in EventEmitter.once() callback * fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport * fix(signalling): remove redundant playerCount, deduplicate config message, strict equality * fix(wilbur): correct status operationId, return 404 for missing resources, strict equality * fix(frontend/library): strict equality, replace console.log with Logger * fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo * fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing * fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13 The root overrides had "glob": ">=7.2.3" (security fix) which resolved to glob@13. test-exclude@6 used promisify(require('glob')), which throws because glob@9+ no longer exports a callable default. Overriding test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports compatible with glob@10+. * fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error * fix(ci): always output signalling and streamer logs in streaming healthcheck * fix: use static imports for REST API path handlers to fix Windows CI openapi-framework's dynamic import uses `file://${path}` URLs at runtime. On Windows, paths containing `{streamerId}` produce invalid file:// URLs (curly braces must be percent-encoded), causing those route handlers to silently fail to register. Replace `paths: './dist/paths'` with explicit static imports so that Node.js require() handles the filesystem path (which has no URL encoding requirements). Also add .catch() error logging so any future init failures are visible in the signalling server logs. * chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache - Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows) - Upgrade all actions/checkout from v3 to v4 - Upgrade all actions/setup-node from v3 to v4 - Add cache: 'npm' to setup-node steps in build/test workflows - Pin npm install in changesets-publish to 11.5.1 instead of @latest * fix: replace fixed sleep with registry propagation poll in npm publish workflow * fix: create or update release tag on npm publish to handle re-runs * chore: remove redundant healthcheck-libs-with-public-deps workflow The publish workflow already validates each package builds against public npm dependencies in sequence before publishing. By the time a release is created, this has already been proven. The separate healthcheck is redundant and the trigger in create-gh-release.yml has been removed. * chore: simplify create-gh-release — remove redundant build steps and exclusions Build steps were excluded from the archives anyway, making them pointless. On a clean checkout there are no node_modules or dist directories, so those exclusions were also redundant. The release archives are source distributions. * fix: create or update docker release tags to handle re-runs Also fix incorrect 'Login to GitHub Container Registry' label in publish-sfu-image.yml — both workflows publish to Docker Hub. * fix: deduplicate link checker issues and auto-close when links pass Instead of creating a new issue on every failed run, find any existing open 'Link Checker Report' issue and update it in place. Also close the issue automatically when all links pass so it doesn't sit open stale. * docs: add DEVELOPING.md describing development workflow from feature to release (cherry picked from commit 96066d6) # Conflicts: # package-lock.json # package.json * chore: rebuilt package-lock. * fix: fixing errors from version mismatches. * ci: updating token usage in link checker to work with forked branches.
mcottontensor
added a commit
that referenced
this pull request
Apr 14, 2026
…806) * Using claude to identify and address several issues. (#802) * chore: add CLAUDE.md with repo guidance for Claude Code * chore: standardize TypeScript version and re-enable ESLint rules Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge (was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16. Re-enables 7 previously-disabled ESLint rules in Frontend/library and Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents, no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison, require-await, no-base-to-string) and fixes all resulting violations. * chore: re-enable no-floating-promises ESLint rule Adds void operator to all floating promises in Frontend/library and Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media play) are genuine fire-and-forget; WebRTC/XR operations use void to explicitly acknowledge unhandled promises. * chore: standardize @types/node to ^22.14.0 across all workspaces * chore: standardize TypeScript target to ES6 and ESLint deps - Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs (was es2016 and es5; also removed misplaced top-level lib arrays) - Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all packages that use it * fix: spread args correctly in EventEmitter.once() callback * fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport * fix(signalling): remove redundant playerCount, deduplicate config message, strict equality * fix(wilbur): correct status operationId, return 404 for missing resources, strict equality * fix(frontend/library): strict equality, replace console.log with Logger * fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo * fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing * fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13 The root overrides had "glob": ">=7.2.3" (security fix) which resolved to glob@13. test-exclude@6 used promisify(require('glob')), which throws because glob@9+ no longer exports a callable default. Overriding test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports compatible with glob@10+. * fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error * fix(ci): always output signalling and streamer logs in streaming healthcheck * fix: use static imports for REST API path handlers to fix Windows CI openapi-framework's dynamic import uses `file://${path}` URLs at runtime. On Windows, paths containing `{streamerId}` produce invalid file:// URLs (curly braces must be percent-encoded), causing those route handlers to silently fail to register. Replace `paths: './dist/paths'` with explicit static imports so that Node.js require() handles the filesystem path (which has no URL encoding requirements). Also add .catch() error logging so any future init failures are visible in the signalling server logs. * chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache - Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows) - Upgrade all actions/checkout from v3 to v4 - Upgrade all actions/setup-node from v3 to v4 - Add cache: 'npm' to setup-node steps in build/test workflows - Pin npm install in changesets-publish to 11.5.1 instead of @latest * fix: replace fixed sleep with registry propagation poll in npm publish workflow * fix: create or update release tag on npm publish to handle re-runs * chore: remove redundant healthcheck-libs-with-public-deps workflow The publish workflow already validates each package builds against public npm dependencies in sequence before publishing. By the time a release is created, this has already been proven. The separate healthcheck is redundant and the trigger in create-gh-release.yml has been removed. * chore: simplify create-gh-release — remove redundant build steps and exclusions Build steps were excluded from the archives anyway, making them pointless. On a clean checkout there are no node_modules or dist directories, so those exclusions were also redundant. The release archives are source distributions. * fix: create or update docker release tags to handle re-runs Also fix incorrect 'Login to GitHub Container Registry' label in publish-sfu-image.yml — both workflows publish to Docker Hub. * fix: deduplicate link checker issues and auto-close when links pass Instead of creating a new issue on every failed run, find any existing open 'Link Checker Report' issue and update it in place. Also close the issue automatically when all links pass so it doesn't sit open stale. * docs: add DEVELOPING.md describing development workflow from feature to release (cherry picked from commit 96066d6) # Conflicts: # .github/workflows/changesets-publish-npm-packages.yml # Extras/SS_Test/package.json # Frontend/library/src/PeerConnectionController/PeerConnectionController.ts # package-lock.json # package.json * chore: fixing lint errors. * chore: fixing versioning issues in npm packages. * chore: fixing lint issues.
mcottontensor
added a commit
that referenced
this pull request
Apr 14, 2026
…805) * Using claude to identify and address several issues. (#802) * chore: add CLAUDE.md with repo guidance for Claude Code * chore: standardize TypeScript version and re-enable ESLint rules Bumps typescript to ^5.7.3 in Extras/SS_Test and Extras/mediasoup-sdp-bridge (was ^5.3.2 and 4.9.5 respectively). Adds moduleResolution: Node16 override to mediasoup-sdp-bridge tsconfig to satisfy TS5 strictness on @tsconfig/node16. Re-enables 7 previously-disabled ESLint rules in Frontend/library and Frontend/ui-library (no-duplicate-type-constituents, no-redundant-type-constituents, no-unnecessary-type-assertion, no-array-delete, no-unsafe-enum-comparison, require-await, no-base-to-string) and fixes all resulting violations. * chore: re-enable no-floating-promises ESLint rule Adds void operator to all floating promises in Frontend/library and Frontend/ui-library. Browser UI APIs (fullscreen, pointer lock, media play) are genuine fire-and-forget; WebRTC/XR operations use void to explicitly acknowledge unhandled promises. * chore: standardize @types/node to ^22.14.0 across all workspaces * chore: standardize TypeScript target to ES6 and ESLint deps - Set target: ES6 in SignallingWebServer, SS_Test, and react tsconfigs (was es2016 and es5; also removed misplaced top-level lib arrays) - Pin eslint to ^9.39.0 and typescript-eslint to ^8.26.1 across all packages that use it * fix: spread args correctly in EventEmitter.once() callback * fix: correct error message typo, guard fields access, and fix error cast in WebSocketTransport * fix(signalling): remove redundant playerCount, deduplicate config message, strict equality * fix(wilbur): correct status operationId, return 404 for missing resources, strict equality * fix(frontend/library): strict equality, replace console.log with Logger * fix(frontend/ui-library): strict equality, fix --colour8 CSS variable typo * fix(sfu): add const to for-of loops, guard JSON.parse, strict equality, fix readUInt16LE casing * fix: upgrade test-exclude to v7 to fix jest tests broken by glob v13 The root overrides had "glob": ">=7.2.3" (security fix) which resolved to glob@13. test-exclude@6 used promisify(require('glob')), which throws because glob@9+ no longer exports a callable default. Overriding test-exclude to ^7.0.2 fixes the incompatibility — v7 uses named imports compatible with glob@10+. * fix(JSStreamer): add rootDir to tsconfig.cjs.json to fix webpack ts-loader TS5011 error * fix(ci): always output signalling and streamer logs in streaming healthcheck * fix: use static imports for REST API path handlers to fix Windows CI openapi-framework's dynamic import uses `file://${path}` URLs at runtime. On Windows, paths containing `{streamerId}` produce invalid file:// URLs (curly braces must be percent-encoded), causing those route handlers to silently fail to register. Replace `paths: './dist/paths'` with explicit static imports so that Node.js require() handles the filesystem path (which has no URL encoding requirements). Also add .catch() error logging so any future init failures are visible in the signalling server logs. * chore: update GitHub Actions — fix path typo, standardize action versions, add npm cache - Fix healthcheck-image-sfu.yml path trigger typo (workflow -> workflows) - Upgrade all actions/checkout from v3 to v4 - Upgrade all actions/setup-node from v3 to v4 - Add cache: 'npm' to setup-node steps in build/test workflows - Pin npm install in changesets-publish to 11.5.1 instead of @latest * fix: replace fixed sleep with registry propagation poll in npm publish workflow * fix: create or update release tag on npm publish to handle re-runs * chore: remove redundant healthcheck-libs-with-public-deps workflow The publish workflow already validates each package builds against public npm dependencies in sequence before publishing. By the time a release is created, this has already been proven. The separate healthcheck is redundant and the trigger in create-gh-release.yml has been removed. * chore: simplify create-gh-release — remove redundant build steps and exclusions Build steps were excluded from the archives anyway, making them pointless. On a clean checkout there are no node_modules or dist directories, so those exclusions were also redundant. The release archives are source distributions. * fix: create or update docker release tags to handle re-runs Also fix incorrect 'Login to GitHub Container Registry' label in publish-sfu-image.yml — both workflows publish to Docker Hub. * fix: deduplicate link checker issues and auto-close when links pass Instead of creating a new issue on every failed run, find any existing open 'Link Checker Report' issue and update it in place. Also close the issue automatically when all links pass so it doesn't sit open stale. * docs: add DEVELOPING.md describing development workflow from feature to release (cherry picked from commit 96066d6) # Conflicts: # .github/workflows/changesets-publish-npm-packages.yml # .github/workflows/healthcheck-libs-with-public-deps.yml # Extras/SS_Test/package.json # Frontend/library/src/PeerConnectionController/PeerConnectionController.ts # Frontend/ui-library/src/UI/SessionTest.ts # package-lock.json # package.json * chore: fix npm version locks. * chore: fix lint issue in ui-library. * chore: SessionTest is not needed.
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
A broad sweep of the monorepo addressing build tooling consistency, real bugs found during review, and a broken test suite.
Tooling standardization
^5.7.3across all packages (was4.9.5–^5.3.2in some Extras packages)ES6across alltsconfig.jsonfileseslintto^9.39.0andtypescript-eslintto^8.26.1across all packages@types/nodeto^22.14.0across all workspacesFrontend/libraryandFrontend/ui-library(no-floating-promises,no-duplicate-type-constituents,no-redundant-type-constituents,no-unnecessary-type-assertion,no-array-delete,no-unsafe-enum-comparison,require-await,no-base-to-string) and fixed all resulting violationsBug fixes
Common
EventEmitter.once(): args were passed as a single array instead of spread —listener(args)→listener(...args)message_helpers.ts: removed extra"from error string; guardedmessageType.fields?.find(against undefinedWebSocketTransport.ts:error as string→ properinstanceof Errorcheck before accessing.messageSignalling
PlayerRegistry: removedplayerCountfield that was tracked but never read (.count()usedplayers.sizedirectly)StreamerRegistry: fixed several loose equality comparisonsSignallingServer: extracted duplicated 3-linesendConfigMessageblock that appeared identically inonStreamerConnected,onPlayerConnected, andonSFUConnectedSignallingWebServer (Wilbur)
status.ts: correctedoperationIdfrom'getConfig'to'getStatus'players/{playerId}.tsandstreamers/{streamerId}.ts: replacedthrow new Error(...)with a proper404JSON response — throwing inside an Express route handler causes an unhandled rejection rather than an HTTP error responseFrontend/library
AFKController: replacedconsole.logcalls withLogger.WarningVideoPlayer: replacedconsole.logcalls withLogger.Warning==/!=→===/!==)WebRtcPlayerController: simplified redundantstatsTimerHandle && statsTimerHandle !== undefinedguard toif (this.statsTimerHandle)Frontend/ui-library
PixelStreamingApplicationStyles.ts: fixed CSS variable typo--colour8→--color8(variable was defined as--color8but referenced with British spelling, causing the border style to silently fail)ActionOverlay/TextOverlay: simplifiedtext != null || text != undefinedto idiomatictext != nullSFU
sfu_server.js: fixedreadUint16LE→readUInt16LE(Node.js Buffer method casing)sfu_server.js: addedconsttofor...ofloops, wrappedJSON.parse(message)in try/catch, strict equality throughoutconfig.js: strict equality fixesTest suite repair
Frontend/librarywere failing to run due to a dependency conflict: the rootoverridespinnedglobto>=7.2.3(a security fix), which resolved toglob@13.test-exclude@6(a transitive dependency ofbabel-plugin-istanbul→ jest coverage) usespromisify(require('glob')), which throws inglob@9+because the module no longer exports a callable default. Fixed by adding"test-exclude": "^7.0.2"to root overrides — v7 uses named imports compatible with the newer glob API. All 35 tests now pass.