mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-03 22:59:14 +00:00
## Summary Merges latest changes from `main` as of 10-06-2025. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5965-Merge-main-as-of-10-06-2025-into-rh-test-2856d73d3650812cb95fd8917278a770) by [Unito](https://www.unito.io) --------- Signed-off-by: Marcel Petrick <mail@marcelpetrick.it> Co-authored-by: filtered <176114999+webfiltered@users.noreply.github.com> Co-authored-by: Christian Byrne <cbyrne@comfy.org> Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Alexander Brown <drjkl@comfy.org> Co-authored-by: Benjamin Lu <benceruleanlu@proton.me> Co-authored-by: Terry Jia <terryjia88@gmail.com> Co-authored-by: snomiao <snomiao@gmail.com> Co-authored-by: Simula_r <18093452+simula-r@users.noreply.github.com> Co-authored-by: Jake Schroeder <jake.schroeder@isophex.com> Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com> Co-authored-by: AustinMroz <4284322+AustinMroz@users.noreply.github.com> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com> Co-authored-by: Marcel Petrick <mail@marcelpetrick.it> Co-authored-by: Alexander Brown <DrJKL0424@gmail.com> Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com> Co-authored-by: Alexander Piskun <13381981+bigcat88@users.noreply.github.com> Co-authored-by: Rizumu Ayaka <rizumu@ayaka.moe> Co-authored-by: JakeSchroeder <jake@axiom.co> Co-authored-by: AustinMroz <austin@comfy.org> Co-authored-by: DrJKL <DrJKL@users.noreply.github.com> Co-authored-by: ComfyUI Wiki <contact@comfyui-wiki.com>
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import axios from 'axios'
|
|
|
|
const VALID_STATUS_CODES = [200, 201, 301, 302, 307, 308]
|
|
export const checkUrlReachable = async (url: string): Promise<boolean> => {
|
|
try {
|
|
const response = await axios.head(url)
|
|
// Additional check for successful response
|
|
return VALID_STATUS_CODES.includes(response.status)
|
|
} catch {
|
|
return false
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the user is likely in mainland China by:
|
|
* 1. Checking navigator.language
|
|
* 2. Testing connectivity to commonly blocked services
|
|
* 3. Testing latency to China-specific domains
|
|
*/
|
|
export async function isInChina(): Promise<boolean> {
|
|
// Quick check based on language/locale
|
|
const isChineseLocale = navigator.language.toLowerCase().startsWith('zh-cn')
|
|
|
|
try {
|
|
// Test connectivity to Google - commonly blocked in China
|
|
const googleTest = await Promise.race([
|
|
fetch('https://www.google.com', {
|
|
mode: 'no-cors',
|
|
cache: 'no-cache'
|
|
}),
|
|
new Promise((_, reject) => setTimeout(() => reject(), 2000))
|
|
])
|
|
|
|
// If Google is accessible, user is likely not in China
|
|
if (googleTest) {
|
|
return false
|
|
}
|
|
} catch {
|
|
// Google is not accessible - potential indicator of being in China
|
|
if (isChineseLocale) {
|
|
return true
|
|
}
|
|
|
|
// Additional check - test latency to a reliable Chinese domain
|
|
try {
|
|
const start = performance.now()
|
|
await fetch('https://www.baidu.com', {
|
|
mode: 'no-cors',
|
|
cache: 'no-cache'
|
|
})
|
|
const latency = performance.now() - start
|
|
|
|
// If Baidu responds quickly (<150ms), user is likely in China
|
|
return latency < 150
|
|
} catch {
|
|
// If both tests fail, default to locale check
|
|
return isChineseLocale
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|