From 8d37f589a58001eabf5335f76cd82fa82f033d12 Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Fri, 18 Apr 2025 10:09:01 -0600 Subject: [PATCH] update region logic. fix? --- src/pages/parts/admin/RegionSelectorPart.tsx | 3 + src/utils/detectRegion.tsx | 92 +++++++++++++++++--- 2 files changed, 85 insertions(+), 10 deletions(-) diff --git a/src/pages/parts/admin/RegionSelectorPart.tsx b/src/pages/parts/admin/RegionSelectorPart.tsx index 3269ce29..321697f1 100644 --- a/src/pages/parts/admin/RegionSelectorPart.tsx +++ b/src/pages/parts/admin/RegionSelectorPart.tsx @@ -36,6 +36,9 @@ export function RegionSelectorPart() { direction="up" /> +

+ Use with caution. Changing the region could reset your token! +

); diff --git a/src/utils/detectRegion.tsx b/src/utils/detectRegion.tsx index 6423c91f..77c43fda 100644 --- a/src/utils/detectRegion.tsx +++ b/src/utils/detectRegion.tsx @@ -16,10 +16,6 @@ interface RegionStore { setRegion: (region: Region, userPicked?: boolean) => void; } -// const TEN_DAYS_MS = 10 * 24 * 60 * 60 * 1000; -const ONE_DAY_MS = 24 * 60 * 60 * 1000; -// const THIRTY_MINUTES_MS = 30 * 60 * 1000; - export const useRegionStore = create()( persist( (set) => ({ @@ -27,10 +23,11 @@ export const useRegionStore = create()( lastChecked: null, userPicked: false, setRegion: (region, userPicked = false) => - set({ region, lastChecked: Date.now(), userPicked }), + set({ region, lastChecked: Math.floor(Date.now() / 1000), userPicked }), }), { name: "__MW::region", + version: 2, }, ), ); @@ -42,10 +39,85 @@ function determineRegion(data: { }): Region { const { latitude, longitude, country_code: country } = data; - if (country === "US") return longitude < -100 ? "us-west" : "us-east"; - if (latitude < 0) return "south-america"; - if (longitude > 60) return "asia"; - if (longitude > -10) return "europe"; + // US regions + if (country === "US") { + // For Alaska and Hawaii, default to US West + if (latitude > 50 || latitude < 20) { + return "us-west"; + } + + // For continental US, use longitude boundary + return longitude < -110 ? "us-west" : "us-east"; + } + + // South America + if ( + country === "AR" || + country === "BO" || + country === "BR" || + country === "CL" || + country === "CO" || + country === "EC" || + country === "GY" || + country === "PE" || + country === "PY" || + country === "SR" || + country === "UY" || + country === "VE" + ) { + return "south-america"; + } + + // Asia + if ( + longitude > 60 && + (country === "CN" || + country === "JP" || + country === "KR" || + country === "IN" || + country === "ID" || + country === "TH" || + country === "VN" || + country === "PH" || + country === "MY" || + country === "SG" || + country === "TW" || + country === "HK") + ) { + return "asia"; + } + + // Europe + if ( + longitude > -10 && + (country === "GB" || + country === "FR" || + country === "DE" || + country === "IT" || + country === "ES" || + country === "NL" || + country === "BE" || + country === "CH" || + country === "AT" || + country === "SE" || + country === "NO" || + country === "DK" || + country === "FI" || + country === "PL" || + country === "CZ" || + country === "SK" || + country === "HU" || + country === "RO" || + country === "BG" || + country === "GR" || + country === "PT" || + country === "IE" || + country === "IS") + ) { + return "europe"; + } + + // Default to US East for other regions return "us-east"; } @@ -61,7 +133,7 @@ export async function detectRegion(): Promise { if ( store.region && store.lastChecked && - Date.now() - store.lastChecked < ONE_DAY_MS + Math.floor(Date.now() / 1000) - store.lastChecked < 86400 // 1 day in seconds ) { return store.region; }