clean up proxyManager
This commit is contained in:
parent
da916222c1
commit
76d55fe35f
10 changed files with 38 additions and 438 deletions
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
"name": "@stock-bot/proxy",
|
||||
"version": "1.0.0",
|
||||
"description": "Simple proxy management library",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"test": "bun test",
|
||||
"dev": "tsc --watch"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.0.0",
|
||||
"typescript": "^5.0.0"
|
||||
},
|
||||
"peerDependencies": {}
|
||||
}
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
// Simple proxy list manager
|
||||
let proxies: string[] = [];
|
||||
let currentIndex = 0;
|
||||
|
||||
const DEFAULT_PROXY_URL =
|
||||
'https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all';
|
||||
|
||||
/**
|
||||
* Fetch proxy list from URL and store in module
|
||||
*/
|
||||
export async function refreshProxies(fetchUrl: string = DEFAULT_PROXY_URL): Promise<string[]> {
|
||||
try {
|
||||
const response = await fetch(fetchUrl);
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
||||
}
|
||||
|
||||
const data = await response.text();
|
||||
const newProxies = data
|
||||
.trim()
|
||||
.split('\n')
|
||||
.map(line => line.trim())
|
||||
.filter(line => line && line.includes(':'))
|
||||
.map(line => {
|
||||
// Convert host:port to http://host:port format
|
||||
return line.startsWith('http') ? line : `http://${line}`;
|
||||
});
|
||||
|
||||
proxies = newProxies;
|
||||
currentIndex = 0;
|
||||
|
||||
return proxies;
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to fetch proxies: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get next proxy URL in round-robin fashion
|
||||
*/
|
||||
export function getProxyURL(): string | null {
|
||||
if (proxies.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const proxy = proxies[currentIndex];
|
||||
currentIndex = (currentIndex + 1) % proxies.length;
|
||||
if (!proxy) {
|
||||
return null;
|
||||
}
|
||||
// Ensure the proxy URL is in http://host:port format
|
||||
return proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get multiple proxy URLs
|
||||
*/
|
||||
export function getProxyURLs(count: number): string[] {
|
||||
const urls: string[] = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
const url = getProxyURL();
|
||||
if (url) {
|
||||
urls.push(url);
|
||||
}
|
||||
}
|
||||
return urls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get random proxy URL
|
||||
*/
|
||||
export function getRandomProxyURL(): string | null {
|
||||
if (proxies.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const randomIndex = Math.floor(Math.random() * proxies.length);
|
||||
const proxy = proxies[randomIndex];
|
||||
if (!proxy) {
|
||||
return null;
|
||||
}
|
||||
return proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current proxy count
|
||||
*/
|
||||
export function getProxyCount(): number {
|
||||
return proxies.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all proxies
|
||||
*/
|
||||
export function getAllProxies(): string[] {
|
||||
return [...proxies];
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize proxy manager with initial fetch
|
||||
*/
|
||||
export async function initializeProxies(fetchUrl?: string): Promise<void> {
|
||||
await refreshProxies(fetchUrl);
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
export interface ProxyInfo {
|
||||
host: string;
|
||||
port: number;
|
||||
protocol: 'http' | 'https' | 'socks4' | 'socks5';
|
||||
username?: string;
|
||||
password?: string;
|
||||
country?: string;
|
||||
isActive?: boolean;
|
||||
}
|
||||
|
||||
export interface ProxyManagerOptions {
|
||||
fetchUrl?: string;
|
||||
refreshIntervalMs?: number;
|
||||
maxRetries?: number;
|
||||
timeout?: number;
|
||||
}
|
||||
|
||||
export interface ProxyResponse {
|
||||
proxies: ProxyInfo[];
|
||||
totalCount: number;
|
||||
activeCount: number;
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"extends": "../../tsconfig.lib.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src"
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"references": [
|
||||
]
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
"build": {
|
||||
"dependsOn": [],
|
||||
"outputs": ["dist/**"],
|
||||
"inputs": [
|
||||
"src/**",
|
||||
"package.json",
|
||||
"tsconfig.json",
|
||||
"!**/*.test.ts",
|
||||
"!**/*.spec.ts",
|
||||
"!**/test/**",
|
||||
"!**/tests/**",
|
||||
"!**/__tests__/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,12 @@
|
|||
/**
|
||||
* Proxy management utilities
|
||||
*/
|
||||
export { default as ProxyManager } from './proxy-manager';
|
||||
export {
|
||||
default as ProxyManager,
|
||||
getProxy,
|
||||
getRandomProxy,
|
||||
getAllProxies,
|
||||
getWorkingProxies,
|
||||
updateProxies
|
||||
} from './proxy-manager';
|
||||
export type { ProxyInfo } from '@stock-bot/http'; // Re-export for convenience
|
||||
|
|
@ -180,27 +180,6 @@ export class ProxyManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get proxy statistics
|
||||
*/
|
||||
getStats(): {
|
||||
totalProxies: number;
|
||||
workingProxies: number;
|
||||
lastUpdate: Date | null;
|
||||
successRate: number;
|
||||
} {
|
||||
const workingProxies = this.proxies.filter(p => p.isWorking !== false);
|
||||
const totalSuccessRate = this.proxies.reduce((sum, p) => sum + (p.successRate || 0), 0);
|
||||
const avgSuccessRate = this.proxies.length > 0 ? totalSuccessRate / this.proxies.length : 0;
|
||||
|
||||
return {
|
||||
totalProxies: this.proxies.length,
|
||||
workingProxies: workingProxies.length,
|
||||
lastUpdate: this.lastUpdate,
|
||||
successRate: avgSuccessRate,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all proxies from memory and cache
|
||||
*/
|
||||
|
|
@ -274,4 +253,25 @@ export class ProxyManager {
|
|||
}
|
||||
|
||||
// Export the class as default
|
||||
export default ProxyManager;
|
||||
export default ProxyManager;
|
||||
|
||||
// Convenience functions for easier imports
|
||||
export function getProxy(): ProxyInfo | null {
|
||||
return ProxyManager.getInstance().getRandomProxy();
|
||||
}
|
||||
|
||||
export function getRandomProxy(): ProxyInfo | null {
|
||||
return ProxyManager.getInstance().getRandomProxy();
|
||||
}
|
||||
|
||||
export function getAllProxies(): ProxyInfo[] {
|
||||
return ProxyManager.getInstance().getAllProxies();
|
||||
}
|
||||
|
||||
export function getWorkingProxies(): ProxyInfo[] {
|
||||
return ProxyManager.getInstance().getWorkingProxies();
|
||||
}
|
||||
|
||||
export async function updateProxies(proxies: ProxyInfo[]): Promise<void> {
|
||||
return ProxyManager.getInstance().updateProxies(proxies);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue