[feat] Implementation of Http Handshake RTC Audio and File Transfer Pipeline - #388
Conversation
- Bump typescript from ^5.7.2 to ^7.0.0 - TS 7.0 is a native Go port (Project Corsa), GA July 8 2026; type-checking semantics are unchanged from 6.0 - Verified: tsc --noEmit passes with zero errors, npm run build (Vite + Nitro) succeeds - Biome lint errors (56, pre-existing) and missing test files were confirmed unrelated to this change via git stash comparison against the prior TS version - No programmatic-compiler-API dependents in this stack (Vite uses bundler mode with noEmit:true; Biome is a separate Rust toolchain), so the 7.1 API gap does not apply here Closes AOSSIE-Org#381
Delete node_modules and package-lock.json and reinstall fresh, per maintainer request (@PinJinx), to resolve the Windows CI failure where npm ci reported missing lru-cache/typescript entries. Also picks up transitive dependency drift in the Oxc/Rolldown toolchain used by Vite (unrelated to TypeScript itself). Verified tsc --noEmit and npm run build both still pass cleanly.
|
Caution Review failedFailed to post review comments. We encountered an issue with GitHub. Use ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (23)
💤 Files with no reviewable changes (1)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. ⏰ Context from checks skipped due to timeout. (3)
🧰 Additional context used📓 Path-based instructions (7)**/*📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{ts,tsx,cjs}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{ts,tsx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{ts,tsx,js,jsx}⚙️ CodeRabbit configuration file
Files:
src/server/**/*.ts📄 CodeRabbit inference engine (AGENTS.md)
Files:
src/**/*.{ts,tsx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
src/server/**/*.{ts,json}📄 CodeRabbit inference engine (AGENTS.md)
Files:
🪛 ast-grep (0.45.1)src/server/siginalling/handlers/sessionStore.ts[warning] 118-118: Avoid logging sensitive data (log-sensitive-data-typescript) src/server/gstreamer/gstManager.ts[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec. (detect-child-process-typescript) src/server/siginalling/webRTC.ts[warning] 111-113: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 151-151: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 154-154: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 193-193: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 202-202: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 205-205: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 228-228: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 231-231: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 255-255: Avoid logging sensitive data (log-sensitive-data-typescript) [warning] 291-291: Avoid logging sensitive data (log-sensitive-data-typescript) 🪛 React Doctor (0.9.3)src/components/FileTransfer/SendFileComponent.tsx[warning] 191-191: Blind users can't tell what this control does because screen readers find no label, so add visible text, Give every interactive control a label screen readers can read. (control-has-associated-label) [warning] 353-353: Blind users can't tell what this control does because screen readers find no label, so add visible text, Give every interactive control a label screen readers can read. (control-has-associated-label) [warning] 362-362: Blind users can't tell what this control does because screen readers find no label, so add visible text, Give every interactive control a label screen readers can read. (control-has-associated-label) src/components/FileTransfer/IncomingFileNotification.tsx[error] 273-273: This ref is mutated during render. React can replay or discard render work, so the mutation can leak from UI that never commits. Move ref writes into an event handler or effect. Render must stay pure because React can replay or discard it. The predictable null-guarded lazy initialization pattern remains supported. (no-ref-current-in-render) [warning] 273-273: This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it. React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the (refs) WalkthroughThe change adds remote file transfer with authenticated uploads, downloads, deletion, and SSE notifications. It replaces WebSocket WebRTC signaling with HTTP and SSE. It adds audio RTP streaming, configurable video framerate, updated telemetry, and client playback recovery. ChangesRemote control and file transfer
Estimated code review effort: 5 (Critical) | ~120 minutes Merge Risk: 🟠 High · up to This PR adds HTTP/SSE signaling and in-memory file transfer. At the current head, uploads can consume excessive server memory, unanswered handshakes can leak peer connections and ports, and stalled signaling or UDP bind failures can leave users stuck or the server retrying aggressively. These high-impact availability and correctness risks should be fixed or explicitly accepted before merge. Suggested labels: Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Addressed Issues:
Fixes #171 #375 #377
Description
This PR addresses the issues reported in #171, #375, and #377 by improving the handshake siginalling between the client and the server while also adding in FTP based File Transfer system between the server and all the clients.
Screenshots/Recordings:
Files.mp4
Functional Verification
Screen Mirror
Authentication
Basic Gestures
One-finger tap: Verified as Left Click.
Two-finger tap: Verified as Right Click.
Click and drag: Verified selection behavior.
Pinch to zoom: Verified zoom functionality (if applicable).
Modes & Settings
Cursor mode: Cursor moves smoothly and accurately.
Scroll mode: Page scrolls as expected.
Sensitivity: Verified changes in cursor speed/sensitivity settings.
Copy and Paste: Verified both Copy and Paste functionality.
Invert Scrolling: Verified scroll direction toggles correctly.
Advanced Input
Key combinations: Verified "hold" behavior for modifiers (e.g., Ctrl+C) and held keys are shown in buffer.
Keyboard input: Verified Space, Backspace, and Enter keys work correctly.
Glide typing: Verified path drawing and text output.
Voice input: Verified speech-to-text functionality for full sentences.
Backspace doesn't send the previous input.
Any other gesture or input behavior introduced:
Checklist
My PR addresses a single issue, fixes a single bug or makes a single improvement.
My code follows the project's code style and conventions
I have performed a self-review of my own code
I have commented my code, particularly in hard-to-understand areas
If applicable, I have made corresponding changes or additions to the documentation
If applicable, I have made corresponding changes or additions to tests
My changes generate no new warnings or errors
I have joined the and I will share a link to this PR with the project maintainers there
I have read the
Once I submit my PR, CodeRabbit AI will automatically review it and I will address CodeRabbit's comments.
Incase of UI change I've added a demo video.
We encourage contributors to use AI tools responsibly when creating Pull Requests. While AI can be a valuable aid, it is essential to ensure that your contributions meet the task requirements, build successfully, include relevant tests, and pass all linters. Submissions that do not meet these standards may be closed without warning to maintain the quality and integrity of the project. Please take the time to understand the changes you are proposing and their impact.
Summary by CodeRabbit