diff --git a/dist/better-xcloud.user.js b/dist/better-xcloud.user.js index c94a021..2dd7fd5 100644 --- a/dist/better-xcloud.user.js +++ b/dist/better-xcloud.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Better xCloud // @namespace https://github.com/redphx -// @version 5.3.0 +// @version 5.3.1-beta // @description Improve Xbox Cloud Gaming (xCloud) experience // @author redphx // @license MIT @@ -134,7 +134,7 @@ function deepClone(obj) { return {}; return JSON.parse(JSON.stringify(obj)); } -var SCRIPT_VERSION = "5.3.0", AppInterface = window.AppInterface; +var SCRIPT_VERSION = "5.3.1-beta", AppInterface = window.AppInterface; UserAgent.init(); var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, STATES = { supportedRegion: !0, @@ -1001,6 +1001,19 @@ var UiSection; UiSection2["ALL_GAMES"] = "all-games"; })(UiSection || (UiSection = {})); +// src/enums/bypass-servers.ts +var BypassServers = { + br: "Brazil", + jp: "Japan", + pl: "Poland", + us: "United States" +}, BypassServerIps = { + br: "169.150.198.66", + jp: "138.199.21.239", + pl: "45.134.212.66", + us: "143.244.47.65" +}; + // src/utils/preferences.ts var PrefKey; (function(PrefKey2) { @@ -1098,7 +1111,10 @@ class Preferences { [PrefKey.SERVER_BYPASS_RESTRICTION]: { label: t("bypass-region-restriction"), note: t("use-this-at-your-own-risk"), - default: !1 + default: "off", + options: Object.assign({ + off: t("off") + }, BypassServers) }, [PrefKey.STREAM_PREFERRED_LOCALE]: { label: t("preferred-game-language"), @@ -5941,8 +5957,11 @@ class StreamBadges { // src/utils/xcloud-interceptor.ts class XcloudInterceptor { static async#handleLogin(request, init) { - if (getPref(PrefKey.SERVER_BYPASS_RESTRICTION)) - request.headers.set("X-Forwarded-For", "9.9.9.9"); + const bypassServer = getPref(PrefKey.SERVER_BYPASS_RESTRICTION); + if (bypassServer !== "off") { + const ip = BypassServerIps[bypassServer]; + ip && request.headers.set("X-Forwarded-For", ip); + } const response = await NATIVE_FETCH(request, init); if (response.status !== 200) return BxEvent.dispatch(window, BxEvent.XCLOUD_SERVERS_UNAVAILABLE), response; diff --git a/src/enums/bypass-servers.ts b/src/enums/bypass-servers.ts new file mode 100644 index 0000000..7230ff4 --- /dev/null +++ b/src/enums/bypass-servers.ts @@ -0,0 +1,13 @@ +export const BypassServers = { + 'br': 'Brazil', + 'jp': 'Japan', + 'pl': 'Poland', + 'us': 'United States', +} + +export const BypassServerIps = { + 'br': '169.150.198.66', + 'jp': '138.199.21.239', + 'pl': '45.134.212.66', + 'us': '143.244.47.65', +} diff --git a/src/utils/preferences.ts b/src/utils/preferences.ts index 58afd78..a7b586a 100644 --- a/src/utils/preferences.ts +++ b/src/utils/preferences.ts @@ -8,6 +8,7 @@ import { AppInterface, STATES } from "@utils/global"; import { StreamPlayerType, StreamVideoProcessing } from "@enums/stream-player"; import { UserAgentProfile } from "@/enums/user-agent"; import { UiSection } from "@/enums/ui-sections"; +import { BypassServers } from "@/enums/bypass-servers"; export enum PrefKey { LAST_UPDATE_CHECK = 'version_last_check', @@ -128,7 +129,10 @@ export class Preferences { [PrefKey.SERVER_BYPASS_RESTRICTION]: { label: t('bypass-region-restriction'), note: t('use-this-at-your-own-risk'), - default: false, + default: 'off', + options: Object.assign({ + 'off': t('off'), + }, BypassServers), }, [PrefKey.STREAM_PREFERRED_LOCALE]: { diff --git a/src/utils/xcloud-interceptor.ts b/src/utils/xcloud-interceptor.ts index 79aaa80..42256e0 100644 --- a/src/utils/xcloud-interceptor.ts +++ b/src/utils/xcloud-interceptor.ts @@ -8,12 +8,15 @@ import { STATES } from "./global"; import { patchIceCandidates } from "./network"; import { getPref, PrefKey } from "./preferences"; import { getPreferredServerRegion } from "./region"; +import { BypassServerIps } from "@/enums/bypass-servers"; export class XcloudInterceptor { static async #handleLogin(request: RequestInfo | URL, init?: RequestInit) { - if (getPref(PrefKey.SERVER_BYPASS_RESTRICTION)) { - (request as Request).headers.set('X-Forwarded-For', '9.9.9.9'); + const bypassServer = getPref(PrefKey.SERVER_BYPASS_RESTRICTION); + if (bypassServer !== 'off') { + const ip = BypassServerIps[bypassServer as keyof typeof BypassServerIps]; + ip && (request as Request).headers.set('X-Forwarded-For', ip); } const response = await NATIVE_FETCH(request, init);