mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-30 15:59:09 +08:00
* refactor: replace axios and node fetch with electron's net module for network requests in preprocess providers - Updated Doc2xPreprocessProvider and MineruPreprocessProvider to use net.fetch instead of axios for making HTTP requests. - Improved error handling for network responses across various methods. - Removed unnecessary AxiosRequestConfig and related code to streamline the implementation. * lint * refactor(Doc2xPreprocessProvider): enhance file validation and upload process - Added file size validation to prevent loading files larger than 300MB into memory. - Implemented file size check before reading the PDF to ensure efficient memory usage. - Updated the file upload method to use a stream, setting the 'Content-Length' header for better handling of large files. * refactor(brave-search): update net.fetch calls to use url.toString() - Modified all instances of net.fetch to use url.toString() for better URL handling. - Ensured consistency in how URLs are passed to the fetch method across various functions. * refactor(MCPService): improve URL handling in net.fetch calls - Updated net.fetch to use url.toString() for better type handling of URLs. - Ensured consistent URL processing across the MCPService class. * feat(ProxyManager): integrate axios with fetch proxy support - Added axios as a dependency to enable fetch proxy usage. - Implemented logic to set axios's adapter to 'fetch' for proxy handling. - Preserved original axios adapter for restoration when disabling the proxy.
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { loggerService } from '@logger'
|
||
import { net } from 'electron'
|
||
|
||
const logger = loggerService.withContext('IpService')
|
||
|
||
/**
|
||
* 获取用户的IP地址所在国家
|
||
* @returns 返回国家代码,默认为'CN'
|
||
*/
|
||
export async function getIpCountry(): Promise<string> {
|
||
try {
|
||
// 添加超时控制
|
||
const controller = new AbortController()
|
||
const timeoutId = setTimeout(() => controller.abort(), 5000)
|
||
|
||
const ipinfo = await net.fetch('https://ipinfo.io/json', {
|
||
signal: controller.signal,
|
||
headers: {
|
||
'User-Agent':
|
||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
|
||
'Accept-Language': 'en-US,en;q=0.9'
|
||
}
|
||
})
|
||
|
||
clearTimeout(timeoutId)
|
||
const data = await ipinfo.json()
|
||
const country = data.country || 'CN'
|
||
logger.info(`Detected user IP address country: ${country}`)
|
||
return country
|
||
} catch (error) {
|
||
logger.error('Failed to get IP address information:', error as Error)
|
||
return 'CN'
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检查用户是否在中国
|
||
* @returns 如果用户在中国返回true,否则返回false
|
||
*/
|
||
export async function isUserInChina(): Promise<boolean> {
|
||
const country = await getIpCountry()
|
||
return country.toLowerCase() === 'cn'
|
||
}
|