Skip to content

Merge dev into main - #557

Merged
zortos293 merged 21 commits into
mainfrom
dev
Jun 29, 2026
Merged

Merge dev into main#557
zortos293 merged 21 commits into
mainfrom
dev

Conversation

@zortos293

@zortos293 zortos293 commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Creates a pull request to merge the current dev branch into main.

Open OPE-233 OPE-233


Note

Medium Risk
Touches session creation, OAuth account linking, and broad GFN API/caching behavior; mitigated by new tests but merge size increases regression risk for launch and library flows.

Overview
Large dev → main merge that adds GeForce NOW connected game accounts (link/unlink/resync via ALS OAuth and LCARS GraphQL), with settings UI copy and cache invalidation after account changes.

CloudMatch / streaming is tightened to official feature enums and session payloads (color depth/chroma mapping, monitor dpi/displayData), and session creation now resolves the default prod CloudMatch base to the user’s local region from serverInfo before POST /v2/session. Signaling handles peerRemoved, BYE, and forwards ICE usernameFragment.

Catalog/library paths gain optional session-proxy fetches, safer cache keys (account id, proxy host hash, bypass when proxy has credentials), paginated library queries with panel fallback, and browse-result caching. Persistent storage paywall helpers are shared; reset/location failures steer users to NVIDIA Storage Manager when the web session token is required.

Native streamer maps physical scancodes to GFN position-dependent virtual keycodes (non-US layouts). CLI direct launch uses single-instance lock and IPC to the renderer. Build verifies app/native protocol version parity before shipping the streamer binary. Subscription entitled resolutions now filter on isEntitled.

Reviewed by Cursor Bugbot for commit 647da6e. Configure here.

Summary by CodeRabbit

  • New Features

    • Added direct launch support, game account linking/sync options, and gyroscope controls in Settings.
    • Introduced a richer stream overlay with session-start splash, waiting-for-video state, and expanded diagnostics.
    • Improved persistent storage guidance with clearer reset flow and external storage manager access.
  • Bug Fixes

    • Improved keyboard input handling for more consistent key mapping.
    • Made stream and catalog loading more reliable across account and proxy contexts.
    • Refined entitlement and subscription handling so only supported stream options are shown.

zortos293 and others added 18 commits June 27, 2026 22:47
* Fix native streamer verification to read protocol version dynamically and parse multi-line responses

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Fix native streamer app protocol verification

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…#529)

* Fix GFN create-session HTTP 400 by updating request payload to match official endpoints

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Fix macOS CloudMatch session test

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Add CLI direct launch support with --launch-app-id and --launch-title for LaunchBox integration

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix direct launch handoff guard

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* preserve ownership for direct app id launches

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Fetch entire owned library via paginated GraphQL query

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Bump library cache for paginated fetch results

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
* Extend proxy pipeline to games catalog for region-restricted titles

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Fix proxy cache key secret hashing

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Bypass caches for credentialed catalog proxies

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Handle missing paginated library cursor

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Remove overflow clipping on the account connections section so the settings
content pane scrolls like other tabs when the provider list exceeds the modal.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…uts (#547)

* Fix keyboard input for non-US layouts by using physical position-based VKs from official GFN client

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* Fix native keyboard mapping edge cases

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…ecting unsupported settings for (#552)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
…ecting unsupported settings. (#555)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@zortos293 zortos293 added the capy Generated by capy.ai label Jun 29, 2026 — with Image Capy AI
@cursor

cursor Bot commented Jun 29, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_5b14e7c2-623d-426f-86f0-934313f15ae2)

@coderabbitai

coderabbitai Bot commented Jun 29, 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: 9fbc6136-15d9-4292-a7f1-ba680234db87

📥 Commits

Reviewing files that changed from the base of the PR and between 63e6c2e and 269596e.

📒 Files selected for processing (47)
  • locales/en.json
  • native/opennow-streamer/src/gstreamer_input.rs
  • native/opennow-streamer/src/input.rs
  • opennow-stable/src/main/gfn/accountConnections.ts
  • opennow-stable/src/main/gfn/cloudmatch.ts
  • opennow-stable/src/main/gfn/games.ts
  • opennow-stable/src/main/gfn/paginatedApps.test.ts
  • opennow-stable/src/main/gfn/paginatedApps.ts
  • opennow-stable/src/main/gfn/paywall.ts
  • opennow-stable/src/main/gfn/persistentStorage.test.ts
  • opennow-stable/src/main/gfn/persistentStorage.ts
  • opennow-stable/src/main/gfn/proxyFetch.test.ts
  • opennow-stable/src/main/gfn/proxyUrl.ts
  • opennow-stable/src/main/gfn/publicGames.ts
  • opennow-stable/src/main/gfn/signaling.ts
  • opennow-stable/src/main/gfn/subscription.test.ts
  • opennow-stable/src/main/gfn/subscription.ts
  • opennow-stable/src/main/index.ts
  • opennow-stable/src/main/ipc/accountCatalogHandlers.ts
  • opennow-stable/src/main/services/cacheManager.ts
  • opennow-stable/src/main/services/refreshScheduler.ts
  • opennow-stable/src/main/settings.ts
  • opennow-stable/src/preload/index.ts
  • opennow-stable/src/renderer/src/App.tsx
  • opennow-stable/src/renderer/src/components/GameCard.tsx
  • opennow-stable/src/renderer/src/components/GameCardListItem.tsx
  • opennow-stable/src/renderer/src/components/HomePage.tsx
  • opennow-stable/src/renderer/src/components/LibraryPage.tsx
  • opennow-stable/src/renderer/src/components/MotionProvider.tsx
  • opennow-stable/src/renderer/src/components/SessionStartedSplash.tsx
  • opennow-stable/src/renderer/src/components/SettingsModalHost.tsx
  • opennow-stable/src/renderer/src/components/SettingsPage.tsx
  • opennow-stable/src/renderer/src/components/StreamStatsHud.tsx
  • opennow-stable/src/renderer/src/components/StreamView.tsx
  • opennow-stable/src/renderer/src/gfn/inputProtocol.test.ts
  • opennow-stable/src/renderer/src/gfn/inputProtocol.ts
  • opennow-stable/src/renderer/src/gfn/sdp.test.ts
  • opennow-stable/src/renderer/src/gfn/sdp.ts
  • opennow-stable/src/renderer/src/gfn/webrtcClient.ts
  • opennow-stable/src/renderer/src/lib/catalogSnapshot.ts
  • opennow-stable/src/renderer/src/styles.css
  • opennow-stable/src/shared/directLaunch.test.ts
  • opennow-stable/src/shared/directLaunch.ts
  • opennow-stable/src/shared/entitlements.test.ts
  • opennow-stable/src/shared/gfn.test.ts
  • opennow-stable/src/shared/gfn.ts
  • opennow-stable/src/shared/ipc.ts

📝 Walkthrough

Walkthrough

This PR adds game-account connection flows, direct launch support, proxy-aware catalog/session handling, updated WebRTC and input processing, and new stream/settings UI surfaces.

Changes

Streaming platform feature release

Layer / File(s) Summary
Shared contracts and CLI parsing
opennow-stable/src/shared/gfn.ts, opennow-stable/src/shared/ipc.ts, opennow-stable/src/shared/directLaunch.ts, opennow-stable/src/shared/directLaunch.test.ts, opennow-stable/src/shared/entitlements.test.ts, opennow-stable/src/shared/gfn.test.ts
Adds game-account and direct-launch types, entitlement helpers, IPC channels, the CLI parser, and tests; H264 stream preferences now normalize to 8bit_420.
Paywall helpers, pagination, proxy utilities, and persistent storage
opennow-stable/src/main/gfn/paywall.ts, opennow-stable/src/main/gfn/paginatedApps.ts, opennow-stable/src/main/gfn/paginatedApps.test.ts, opennow-stable/src/main/gfn/proxyUrl.ts, opennow-stable/src/main/gfn/proxyFetch.test.ts, opennow-stable/src/main/gfn/persistentStorage.ts, opennow-stable/src/main/gfn/persistentStorage.test.ts
Moves paywall parsing into a shared module, adds paginated app fetching, adds proxy URL helpers, and updates persistent storage error handling and fallback location parsing.
Cache manager and refresh scheduler
opennow-stable/src/main/services/cacheManager.ts, opennow-stable/src/main/services/refreshScheduler.ts, opennow-stable/src/main/settings.ts
Adds cache key sanitizing, prefix invalidation, stale-cache reads, proxy-aware refresh scheduling, and enableGyroscopeControls to settings.
Game account connections main-process implementation
opennow-stable/src/main/gfn/accountConnections.ts
Implements provider discovery, GraphQL account-state loading, ALS callback handling, sync/unlink flows, and cache invalidation for account operations.
Direct launch and account IPC wiring
opennow-stable/src/main/index.ts, opennow-stable/src/main/ipc/accountCatalogHandlers.ts, opennow-stable/src/preload/index.ts
Adds single-instance direct-launch queuing and exposes game-account/direct-launch IPC handlers through the preload API.
Proxy-aware catalog fetching and subscription updates
opennow-stable/src/main/gfn/publicGames.ts, opennow-stable/src/main/gfn/games.ts, opennow-stable/src/main/gfn/cloudmatch.ts, opennow-stable/src/main/gfn/subscription.ts, opennow-stable/src/main/gfn/subscription.test.ts
Threads proxy URLs through catalog and media fetch paths, scopes caches by account/proxy, adds usage to media connection info, and filters subscriptions to entitled resolutions.
WebRTC, signaling, keyboard input, and native streamer
opennow-stable/src/main/gfn/signaling.ts, opennow-stable/src/renderer/src/gfn/webrtcClient.ts, opennow-stable/src/renderer/src/gfn/inputProtocol.ts, opennow-stable/src/renderer/src/gfn/inputProtocol.test.ts, opennow-stable/src/renderer/src/gfn/sdp.ts, opennow-stable/src/renderer/src/gfn/sdp.test.ts, native/opennow-streamer/src/input.rs, native/opennow-streamer/src/gstreamer_input.rs
Updates signaling/ICE handling, input text chunking and key mapping, SDP rewriting and bit-depth selection, and Windows keyboard payload mapping.
Stream diagnostics and startup overlays
opennow-stable/src/renderer/src/components/StreamStatsHud.tsx, opennow-stable/src/renderer/src/components/SessionStartedSplash.tsx, opennow-stable/src/renderer/src/components/StreamView.tsx, opennow-stable/src/renderer/src/components/MotionProvider.tsx
Adds the diagnostics HUD, session-start splash, waiting-for-video overlay, focus updates, and the shared surface reveal transition.
Settings modal, settings page, and locale updates
opennow-stable/src/renderer/src/components/SettingsModalHost.tsx, opennow-stable/src/renderer/src/components/SettingsPage.tsx, locales/en.json
Moves settings into a modal host, adds game-account controls, updates persistent-storage reset flow, adds gyroscope controls, and adds the matching locale strings.
Catalog snapshot and memoized card rendering
opennow-stable/src/renderer/src/lib/catalogSnapshot.ts, opennow-stable/src/renderer/src/components/GameCard.tsx, opennow-stable/src/renderer/src/components/GameCardListItem.tsx, opennow-stable/src/renderer/src/components/HomePage.tsx, opennow-stable/src/renderer/src/components/LibraryPage.tsx, opennow-stable/src/renderer/src/App.tsx
Adds catalog snapshot persistence, memoized catalog card rendering, and proxy-aware App orchestration for direct launch, subscription-driven stream settings, and settings modal mounting.
Styles for modal shell, stream HUD, splash, and settings
opennow-stable/src/renderer/src/styles.css
Adds the CSS for the modal shell, game-account section, stream HUD and splash, plus related focus and toggle styling.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Poem

🐇 Hop-hop, the stream woke up today,
With cards and caches all in play.
One splash, one launch, one proxy path,
And glyphy keys that know their math.
I nibble carrots, clap my paws —
This update earns a bunny’s applause!

✨ 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 dev

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

zortos293 and others added 2 commits June 29, 2026 23:12
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

@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/main/gfn/accountConnections.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 647da6eb27

ℹ️ 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".

Comment on lines +363 to +364
if (candidate.protocol !== "https:" || !allowedHosts.has(candidate.hostname)) {
validatedBaseUrl = new URL(defaultBase);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Preserve provider-specific VPC lookups

When the selected provider is an alliance endpoint such as prod.bpc.geforcenow.nvidiagrid.net, this allowlist rejects the provider URL and silently falls back to NVIDIA's default CloudMatch host. Since this helper feeds catalog/library/metadata requests via providerStreamingBaseUrl, alliance accounts will resolve the wrong VPC ID and query game data against the wrong region/provider context. Allow the selected provider host instead of replacing it here.

Useful? React with 👍 / 👎.

}

async function invalidateAccountGameCaches(session: AuthSession, proxyUrl?: string): Promise<void> {
const cacheKeySets = [getAccountGamesCacheKeys(session.user.userId, session.provider.streamingServiceUrl)];

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Invalidate legacy token-scoped game caches

On upgraded installs that still have the old token-scoped cache files, this invalidation only deletes the new userId-scoped keys. loadAccountScopedFromCache still probes and migrates those legacy keys when the primary key is missing, so after linking/unlinking/resyncing an account the freshly invalidated library/catalog cache can be immediately repopulated from stale pre-migration data. Include the token-scoped legacy keys for the current session token(s) in this invalidation path.

Useful? React with 👍 / 👎.

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
@zortos293
zortos293 merged commit a3c9b7a into main Jun 29, 2026
19 of 20 checks passed
zortos293 added a commit that referenced this pull request Jun 29, 2026
zortos293 added a commit that referenced this pull request Jul 2, 2026
* Merge dev into main (#557)

* Revert "Merge dev into main (#557)"

This reverts commit a3c9b7a.

* chore(release): prepare v0.5.0

* Add Android and iOS options to bug report template

* Guard Linux AppImage updates on read-only installs

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kiefer <67562560+Kief5555@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Chizuui pushed a commit to Chizuui/OpenNOW-Modified that referenced this pull request Aug 11, 2026
* Merge dev into main (OpenCloudGaming#557)

* Revert "Merge dev into main (OpenCloudGaming#557)"

This reverts commit a3c9b7a.

* chore(release): prepare v0.5.0

* Add Android and iOS options to bug report template

* Guard Linux AppImage updates on read-only installs

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kiefer <67562560+Kief5555@users.noreply.github.com>
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
Chizuui pushed a commit to Chizuui/OpenNOW-Modified that referenced this pull request Aug 11, 2026
Chizuui pushed a commit to Chizuui/OpenNOW-Modified that referenced this pull request Aug 11, 2026
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