Skip to content

fix(webrtc): resolve native cursor drift with absolute positioning - #595

Merged
zortos293 merged 1 commit into
devfrom
capy/fix-native-cursor-drift-dev
Jul 5, 2026
Merged

fix(webrtc): resolve native cursor drift with absolute positioning#595
zortos293 merged 1 commit into
devfrom
capy/fix-native-cursor-drift-dev

Conversation

@zortos293

@zortos293 zortos293 commented Jul 5, 2026

Copy link
Copy Markdown
Collaborator

This PR fixes native cursor overlay drift in the WebRTC client by mirroring the official GFN web client's behavior: while the client-rendered cursor_channel cursor is visible, the client sends absolute mouse position packets (input type 5) instead of relative deltas (type 7), so the server cursor is pinned to the clamped overlay position. Relative deltas remain for hidden-cursor/raw-input games.

Changes:

  • inputProtocol.ts - Add INPUT_MOUSE_ABS constant and encodeMouseAbsolute() method matching the official 26-byte layout (coords at offsets 4/6, extent at 10/12, timestamp at 18)
  • cursorChannel.ts - Expose isCursorVisible() and getAbsolutePosition() to report the clamped overlay position inside the letterboxed stream viewport
  • webrtcClient.ts - Route movement to absolute packets whenever the overlay cursor is visible; drop relative residue after absolute sends; sync simulated server-pixel baseline with absolute positions
  • inputProtocol.test.ts - Add tests for absolute mouse encoding, v3 wrapper framing, and coordinate clamping

Typecheck passes. All 154 tests pass.

Open OPE-247 OPE-247


Note

Medium Risk
Large vendored real-time media binary increases repo size and ties iOS streaming behavior to a pinned WebRTC build; upgrades need deliberate replacement and regression testing.

Overview
Adds a vendored WebRTC.xcframework under ios/OpenNOWiOS/Frameworks/ so the iOS app can link native WebRTC for device (arm64) and simulator (arm64 / x86_64), including the public Objective-C headers and license metadata.

Also introduces ios/.gitignore to keep Xcode build output, xcuserdata, SwiftPM (.build/.swiftpm), and Carthage artifacts out of version control.

Reviewed by Cursor Bugbot for commit 126f0a4. Configure here.

Summary by CodeRabbit

  • New Features
    • Added a new iOS app and widget experience, including Live Activity support.
    • Introduced browsing, library, login, and home screens with search, filters, and launch flows.
    • Added richer media support for audio, video, streaming, logging, and playback.
    • Enabled custom app branding, icons, notifications, and haptics.
  • Bug Fixes
    • Improved media and network handling for more reliable playback, capture, and connection behavior.

…rsor is visible (#594)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@zortos293 zortos293 added the capy Generated by capy.ai label Jul 5, 2026 — with Image Capy AI
@zortos293
zortos293 changed the base branch from main to dev July 5, 2026 09:39
@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 59e8adb6-bdd9-4db1-84ec-0b47cd7dd90e

📥 Commits

Reviewing files that changed from the base of the PR and between c56fd5d and 126f0a4.

⛔ Files ignored due to path filters (23)
  • ios/OpenNOWiOS/OpenNOWWidget/Assets.xcassets/LiveActivityAppIcon.imageset/app-icon.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/AppStore-1024.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-20@1x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-20@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-29@1x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-29@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-40@1x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-40@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-76@1x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-76@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/ipad-83.5@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-20@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-20@3x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-29@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-29@3x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-40@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-40@3x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-60@2x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/iphone-60@3x.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreEpic.imageset/store-epic.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreSteam.imageset/store-steam.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreXbox.imageset/store-xbox.png is excluded by !**/*.png
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/logo.imageset/logo.png is excluded by !**/*.png
📒 Files selected for processing (246)
  • ios/.gitignore
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/Info.plist
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/LICENSE
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCAudioDevice.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCAudioSession.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCAudioSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCAudioTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCVPixelBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCallbackLogger.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCameraPreviewView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCameraVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCertificate.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCodecSpecificInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCodecSpecificInfoH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCCryptoOptions.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDataChannel.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDataChannelConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDefaultVideoDecoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDefaultVideoEncoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDispatcher.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCDtmfSender.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCEAGLVideoView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCEncodedImage.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCFieldTrials.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCFileLogger.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCFileVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCH264ProfileLevelId.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCIceCandidate.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCIceCandidateErrorEvent.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCIceServer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCLegacyStatsReport.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCLogging.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMTLVideoView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMacros.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMediaConstraints.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMediaSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMediaStream.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMediaStreamTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMetrics.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMetricsSampleInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMutableI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCMutableYUVPlanarBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCNativeI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCNativeMutableI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCNetworkMonitor.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCPeerConnection.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCPeerConnectionFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtcpParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpCapabilities.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpCodecCapability.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpCodecParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpEncodingParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpHeaderExtension.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpHeaderExtensionCapability.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpReceiver.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpSender.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCRtpTransceiver.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCSSLAdapter.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCSSLCertificateVerifier.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCSessionDescription.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCStatisticsReport.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCTracing.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoCodecConstants.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoCodecInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoder.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderAV1.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderFactoryH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderVP8.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoDecoderVP9.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoder.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderAV1.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderFactoryH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderQpThresholds.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderSettings.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderVP8.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoEncoderVP9.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoFrame.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoFrameBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoRenderer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCVideoViewShading.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/RTCYUVPlanarBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/UIDevice+RTCDevice.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Headers/WebRTC.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Info.plist
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/Modules/module.modulemap
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/PrivacyInfo.xcprivacy
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-arm64/WebRTC.framework/WebRTC
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCAudioDevice.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCAudioSession.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCAudioSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCAudioTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCVPixelBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCallbackLogger.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCameraPreviewView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCameraVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCertificate.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCodecSpecificInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCodecSpecificInfoH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCCryptoOptions.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDataChannel.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDataChannelConfiguration.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDefaultVideoDecoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDefaultVideoEncoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDispatcher.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCDtmfSender.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCEAGLVideoView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCEncodedImage.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCFieldTrials.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCFileLogger.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCFileVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCH264ProfileLevelId.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCIceCandidate.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCIceCandidateErrorEvent.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCIceServer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCLegacyStatsReport.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCLogging.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMTLVideoView.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMacros.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMediaConstraints.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMediaSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMediaStream.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMediaStreamTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMetrics.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMetricsSampleInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMutableI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCMutableYUVPlanarBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCNativeI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCNativeMutableI420Buffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCNetworkMonitor.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCPeerConnection.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCPeerConnectionFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtcpParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpCapabilities.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpCodecCapability.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpCodecParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpEncodingParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpHeaderExtension.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpHeaderExtensionCapability.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpParameters.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpReceiver.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpSender.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCRtpTransceiver.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCSSLAdapter.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCSSLCertificateVerifier.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCSessionDescription.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCStatisticsReport.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCTracing.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoCapturer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoCodecConstants.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoCodecInfo.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoder.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderAV1.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderFactoryH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderVP8.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoDecoderVP9.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoder.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderAV1.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderFactory.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderFactoryH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderH264.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderQpThresholds.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderSettings.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderVP8.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoEncoderVP9.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoFrame.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoFrameBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoRenderer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoSource.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoTrack.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCVideoViewShading.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/RTCYUVPlanarBuffer.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/UIDevice+RTCDevice.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Headers/WebRTC.h
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Info.plist
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/Modules/module.modulemap
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/PrivacyInfo.xcprivacy
  • ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/ios-x86_64_arm64-simulator/WebRTC.framework/WebRTC
  • ios/OpenNOWiOS/OpenNOWWidget/Assets.xcassets/Contents.json
  • ios/OpenNOWiOS/OpenNOWWidget/Assets.xcassets/LiveActivityAppIcon.imageset/Contents.json
  • ios/OpenNOWiOS/OpenNOWWidget/Info.plist
  • ios/OpenNOWiOS/OpenNOWWidget/OpenNOWWidgetBundle.swift
  • ios/OpenNOWiOS/OpenNOWWidget/QueueLiveActivityWidget.swift
  • ios/OpenNOWiOS/OpenNOWiOS.xcodeproj/project.pbxproj
  • ios/OpenNOWiOS/OpenNOWiOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • ios/OpenNOWiOS/OpenNOWiOS.xcodeproj/xcshareddata/xcschemes/OpenNOWWidget.xcscheme
  • ios/OpenNOWiOS/OpenNOWiOS.xcodeproj/xcshareddata/xcschemes/OpenNOWiOS.xcscheme
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AccentColor.colorset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/AppIcon.appiconset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreEpic.imageset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreSteam.imageset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/StoreXbox.imageset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/Assets.xcassets/logo.imageset/Contents.json
  • ios/OpenNOWiOS/OpenNOWiOS/BrandLogoView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/BrowseView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/ContentView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/Haptics.swift
  • ios/OpenNOWiOS/OpenNOWiOS/HomeView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/Info.plist
  • ios/OpenNOWiOS/OpenNOWiOS/LibraryView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/LoginView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/NativeStreamAudioDevice.swift
  • ios/OpenNOWiOS/OpenNOWiOS/NativeStreamCodec.swift
  • ios/OpenNOWiOS/OpenNOWiOS/NativeStreamInput.swift
  • ios/OpenNOWiOS/OpenNOWiOS/NativeStreamSDP.swift
  • ios/OpenNOWiOS/OpenNOWiOS/NotificationManager.swift
  • ios/OpenNOWiOS/OpenNOWiOS/OpenNOWStore.swift
  • ios/OpenNOWiOS/OpenNOWiOS/OpenNOWiOSApp.swift
  • ios/OpenNOWiOS/OpenNOWiOS/PrintedWasteQueueView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/QueueActivityAttributes.swift
  • ios/OpenNOWiOS/OpenNOWiOS/QueueLiveActivityManager.swift
  • ios/OpenNOWiOS/OpenNOWiOS/SessionView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/SettingsView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/StreamLoadingView.swift
  • ios/OpenNOWiOS/OpenNOWiOS/StreamerView.swift
  • locales/en.json
  • opennow-stable/src/main/settings.ts
  • opennow-stable/src/renderer/src/App.tsx
  • opennow-stable/src/renderer/src/components/SettingsPage.tsx
  • opennow-stable/src/renderer/src/components/StreamView.tsx
  • opennow-stable/src/renderer/src/gfn/cursorChannel.ts
  • opennow-stable/src/renderer/src/gfn/inputProtocol.test.ts
  • opennow-stable/src/renderer/src/gfn/inputProtocol.ts
  • opennow-stable/src/renderer/src/gfn/videoShaderPipeline.ts
  • opennow-stable/src/renderer/src/gfn/webrtcClient.ts
  • opennow-stable/src/shared/gfn.ts

📝 Walkthrough

Walkthrough

This PR vendors the full WebRTC.xcframework (public headers, license, module maps, privacy manifest) for both device and simulator architectures, adds a new Xcode project with an OpenNOWWidget Live Activity extension, and introduces new SwiftUI app screens plus native WebRTC-based streaming code (audio device, HEVC codec handling, input encoding, and SDP negotiation).

Changes

Vendored WebRTC.xcframework

Layer / File(s) Summary
Framework packaging, license, privacy
ios/.gitignore, ios/OpenNOWiOS/Frameworks/WebRTC.xcframework/{Info.plist,LICENSE}, .../WebRTC.framework/{Headers/WebRTC.h,Modules/module.modulemap,PrivacyInfo.xcprivacy} (both archs)
Adds the xcframework manifest, BSD license, umbrella header importing all public headers, module map, and privacy manifest for ios-arm64 and simulator slices.
Macros, logging, metrics, dispatch utilities
RTCMacros.h, RTCLogging.h, RTCMetrics*.h, RTCTracing.h, RTCSSLAdapter.h, RTCSSLCertificateVerifier.h, RTCFieldTrials.h, RTCCallbackLogger.h, RTCFileLogger.h, RTCDispatcher.h (both archs)
Adds core ObjC export/type macros, logging severity/macros, metrics APIs, tracing, SSL adapter/verifier, field trials, callback/file loggers, and queue dispatcher.
Audio device and session
RTCAudioDevice.h, RTCAudioSession*.h, RTCAudioSource.h, RTCAudioTrack.h (both archs)
Adds protocols/interfaces for platform audio device integration, AVAudioSession proxying, audio source volume, and audio track wrapping.
Video capture, rendering, buffers
RTCVideoCapturer*.h, RTCCameraVideoCapturer.h, RTCCameraPreviewView.h, RTCVideoRenderer.h, RTCEAGLVideoView.h, RTCMTLVideoView.h, RTCVideoFrame*.h, RTC*I420Buffer.h, RTCYUVPlanarBuffer.h, RTCCVPixelBuffer.h (both archs)
Adds camera capture, EAGL/Metal video rendering, video frame/buffer types, and I420/YUV planar buffer protocols.
Video codecs
RTCVideoCodecInfo.h, RTCCodecSpecificInfo*.h, RTCH264ProfileLevelId.h, RTCVideoDecoder*.h, RTCVideoEncoder*.h, RTCEncodedImage.h, RTCDefaultVideo{Decoder,Encoder}Factory.h (both archs)
Adds codec info/constants and decoder/encoder protocols plus H264/VP8/VP9/AV1 implementations and default factories.
PeerConnection, data channel, RTP, stats
RTCPeerConnection*.h, RTCConfiguration.h, RTCIce*.h, RTCDataChannel*.h, RTCRtp*.h, RTCSessionDescription.h, RTCStatisticsReport.h, RTCNetworkMonitor.h, UIDevice+RTCDevice.h (both archs)
Adds the peer connection/factory API surface, ICE candidate/server types, data channels, RTP capabilities/parameters/sender/receiver/transceiver, session description, and stats reporting.

Xcode Project and Widget Scaffolding

Layer / File(s) Summary
Project, schemes, workspace
OpenNOWiOS.xcodeproj/project.pbxproj, xcshareddata/xcschemes/*, project.xcworkspace/...
Adds the Xcode project defining app and widget targets, build configurations, and shared schemes.
QueueLiveActivity widget extension
OpenNOWWidget/Info.plist, Assets.xcassets/*, OpenNOWWidgetBundle.swift, QueueLiveActivityWidget.swift
Adds the widget extension bundle entry point and the Live Activity/Dynamic Island SwiftUI implementation.
App Info.plist and assets
OpenNOWiOS/Info.plist, Assets.xcassets/*
Adds app bundle configuration (URL schemes, ATS exceptions, background modes) and app icon/color/store image assets.

App SwiftUI Views and Native Streaming

Layer / File(s) Summary
App shell and haptics
ContentView.swift, Haptics.swift
Adds splash/login/main-tab routing, streamer overlay lifecycle, jump-back banner, and haptic feedback helpers.
Home, login, brand logo
HomeView.swift, LoginView.swift, BrandLogoView.swift
Adds cached remote image loading, the home game catalog/launch flow, sign-in screen, and brand logo rendering.
Browse and Library views
BrowseView.swift, LibraryView.swift
Adds catalog browsing and library screens with search/filter/sort and launch selection logic.
Native stream audio and codec
NativeStreamAudioDevice.swift, NativeStreamCodec.swift
Adds a muted RTCAudioDevice implementation and codec capability probing plus a custom VideoToolbox-backed HEVC decoder.
Native stream input and SDP
NativeStreamInput.swift, NativeStreamSDP.swift
Adds keyboard/mouse/gamepad input encoding and SDP codec preference rewriting/ICE parsing/offer construction.
Notification manager
NotificationManager.swift
Adds local notification scheduling for queue-ready and seat-allocated events.

Estimated code review effort: 4 (Complex) | ~75 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant HomeView
  participant OpenNOWStore
  participant NativeStreamSDP
  participant NativeStreamCodec
  participant RTCPeerConnection

  User->>HomeView: Selects game and launches stream
  HomeView->>OpenNOWStore: request launch options / start session
  OpenNOWStore->>NativeStreamCodec: resolve launch codec settings
  NativeStreamCodec-->>OpenNOWStore: launch-safe codec (H264/H265/AV1)
  OpenNOWStore->>RTCPeerConnection: create offer with preferred codec
  RTCPeerConnection-->>OpenNOWStore: local SDP offer
  OpenNOWStore->>NativeStreamSDP: buildNvstSDP(offerSDP, profile, settings, codec)
  NativeStreamSDP-->>OpenNOWStore: Nvst-formatted SDP
  OpenNOWStore->>RTCPeerConnection: setRemoteDescription(answer)
  RTCPeerConnection-->>OpenNOWStore: negotiated video codec
  OpenNOWStore-->>HomeView: session ready / streaming
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch capy/fix-native-cursor-drift-dev

Comment @coderabbitai help to get the list of available commands.

@zortos293
zortos293 merged commit 5378561 into dev Jul 5, 2026
20 of 21 checks passed
@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

completionHandler(.useCredential, URLCredential(trust: serverTrust))

P1 Badge Keep GFN TLS validation enabled

For any HTTPS request whose host ends in nvidiagrid.net, this delegate accepts the presented serverTrust without performing the system certificate evaluation. The shared URLSession at request() uses this delegate for zone/cloudmatch calls that send GFNJWT/Bearer credentials, so a captive portal or MITM proxy with any certificate for a *.nvidiagrid.net hostname can intercept tokens and session traffic instead of failing TLS validation.


defaults.set(encoded, forKey: authStateKey)

P1 Badge Store OAuth tokens in Keychain

When a user signs in, normalized contains full AuthSession values, and AuthSession includes access, refresh, ID, and client tokens; writing that blob to UserDefaults persists long-lived credentials in the app preferences file instead of protected credential storage. On backed-up devices, device-file access, or diagnostics collection, those tokens are exposed and can be reused to access the user's NVIDIA/GFN account; keep only non-secret account metadata here and put the tokens in Keychain with an appropriate accessibility class.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added 1 comment

Comment thread opennow-stable/src/renderer/src/gfn/webrtcClient.ts
Chizuui pushed a commit to Chizuui/OpenNOW-Modified that referenced this pull request Aug 11, 2026
…rsor is visible (OpenCloudGaming#594) (OpenCloudGaming#595)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

capy Generated by capy.ai

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant