From d376e4b8bee64c9c7a5fd13db9bd1218ea966470 Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Wed, 24 Apr 2024 17:35:04 +0700 Subject: [PATCH] Fix not able to get Remote Play consoles --- src/modules/remote-play.ts | 25 +++++++++++++------------ src/utils/network.ts | 11 +++++++---- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/modules/remote-play.ts b/src/modules/remote-play.ts index 8e99228..e808c44 100644 --- a/src/modules/remote-play.ts +++ b/src/modules/remote-play.ts @@ -219,16 +219,17 @@ export class RemotePlay { } } - fetch('https://xhome.gssv-play-prod.xboxlive.com/v2/login/user', { - method: 'POST', - body: JSON.stringify({ - offeringId: 'xhome', - token: GSSV_TOKEN, - }), - headers: { - 'Content-Type': 'application/json; charset=utf-8', - }, - }).then(resp => resp.json()) + const request = new Request('https://xhome.gssv-play-prod.xboxlive.com/v2/login/user', { + method: 'POST', + body: JSON.stringify({ + offeringId: 'xhome', + token: GSSV_TOKEN, + }), + headers: { + 'Content-Type': 'application/json; charset=utf-8', + }, + }); + fetch(request).then(resp => resp.json()) .then(json => { RemotePlay.#REGIONS = json.offeringSettings.regions; RemotePlay.XHOME_TOKEN = json.gsToken; @@ -252,8 +253,8 @@ export class RemotePlay { // Test servers one by one for (const region of RemotePlay.#REGIONS) { try { - const url = `${region.baseUri}/v6/servers/home?mr=50`; - const resp = await fetch(url, options); + const request = new Request(`${region.baseUri}/v6/servers/home?mr=50`, options); + const resp = await fetch(request); const json = await resp.json(); RemotePlay.#CONSOLES = json.results; diff --git a/src/utils/network.ts b/src/utils/network.ts index b9b424c..d8046ac 100644 --- a/src/utils/network.ts +++ b/src/utils/network.ts @@ -264,8 +264,11 @@ class XhomeInterceptor { opts.body = await clone.text(); } - const index = request.url.indexOf('.xboxlive.com'); - let newUrl = STATES.remotePlay.server + request.url.substring(index + 13); + let newUrl = request.url; + if (!newUrl.includes('/servers/home')) { + const index = request.url.indexOf('.xboxlive.com'); + newUrl = STATES.remotePlay.server + request.url.substring(index + 13); + } request = new Request(newUrl, opts); let url = (typeof request === 'string') ? request : request.url; @@ -292,7 +295,7 @@ class XcloudInterceptor { const obj = await response.clone().json(); // Preload Remote Play - BX_FLAGS.PreloadRemotePlay && RemotePlay.preload(); + getPref(PrefKey.REMOTE_PLAY_ENABLED) && BX_FLAGS.PreloadRemotePlay && RemotePlay.preload(); // Store xCloud token RemotePlay.XCLOUD_TOKEN = obj.gsToken; @@ -573,7 +576,7 @@ export function interceptHttpRequests() { } let requestType: RequestType; - if (STATES.remotePlay.isPlaying || url.includes('/sessions/home')) { + if (STATES.remotePlay.isPlaying || url.includes('/sessions/home') || url.includes('xhome.')) { requestType = RequestType.XHOME; } else { requestType = RequestType.XCLOUD;