@roxybrowser/openapi 1.0.5-beta.1 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +228 -228
- package/lib/index.js +93 -1670
- package/lib/index.js.map +1 -1
- package/lib/modules/account.d.ts +491 -0
- package/lib/modules/account.d.ts.map +1 -0
- package/lib/modules/account.js +442 -0
- package/lib/modules/account.js.map +1 -0
- package/lib/modules/browser.d.ts +3011 -0
- package/lib/modules/browser.d.ts.map +1 -0
- package/lib/modules/browser.js +1076 -0
- package/lib/modules/browser.js.map +1 -0
- package/lib/modules/other.d.ts +102 -0
- package/lib/modules/other.d.ts.map +1 -0
- package/lib/modules/other.js +194 -0
- package/lib/modules/other.js.map +1 -0
- package/lib/modules/proxy.d.ts +576 -0
- package/lib/modules/proxy.d.ts.map +1 -0
- package/lib/modules/proxy.js +713 -0
- package/lib/modules/proxy.js.map +1 -0
- package/lib/types.d.ts +860 -155
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +4 -4
- package/lib/types.js.map +1 -1
- package/lib/utils/error-analyzer.d.ts.map +1 -1
- package/lib/utils/error-analyzer.js +17 -15
- package/lib/utils/error-analyzer.js.map +1 -1
- package/lib/utils/index.d.ts +24 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +45 -0
- package/lib/utils/index.js.map +1 -0
- package/package.json +50 -50
- package/lib/browser/browser-creator.d.ts +0 -54
- package/lib/browser/browser-creator.d.ts.map +0 -1
- package/lib/browser/browser-creator.js +0 -263
- package/lib/browser/browser-creator.js.map +0 -1
- package/lib/proxy/proxy-manager.d.ts +0 -67
- package/lib/proxy/proxy-manager.d.ts.map +0 -1
- package/lib/proxy/proxy-manager.js +0 -278
- package/lib/proxy/proxy-manager.js.map +0 -1
- package/lib/proxy/proxy-validator.d.ts +0 -66
- package/lib/proxy/proxy-validator.d.ts.map +0 -1
- package/lib/proxy/proxy-validator.js +0 -273
- package/lib/proxy/proxy-validator.js.map +0 -1
- package/lib/roxy-client.d.ts +0 -117
- package/lib/roxy-client.d.ts.map +0 -1
- package/lib/roxy-client.js +0 -467
- package/lib/roxy-client.js.map +0 -1
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser Creator Service
|
|
3
|
-
*
|
|
4
|
-
* Handles browser creation with different complexity levels and configuration building
|
|
5
|
-
*/
|
|
6
|
-
import { LATEST_CORE_VERSION, } from '../types.js';
|
|
7
|
-
export class BrowserCreator {
|
|
8
|
-
/**
|
|
9
|
-
* Convert simple parameters to full browser configuration
|
|
10
|
-
*/
|
|
11
|
-
static buildSimpleConfig(params) {
|
|
12
|
-
const config = {
|
|
13
|
-
workspaceId: params.workspaceId,
|
|
14
|
-
};
|
|
15
|
-
// Add optional basic fields
|
|
16
|
-
if (params.windowName)
|
|
17
|
-
config.windowName = params.windowName;
|
|
18
|
-
if (params.projectId)
|
|
19
|
-
config.projectId = params.projectId;
|
|
20
|
-
if (params.windowRemark)
|
|
21
|
-
config.windowRemark = params.windowRemark;
|
|
22
|
-
// Convert simple proxy parameters to ProxyInfo
|
|
23
|
-
if (params.proxyHost || params.proxyPort) {
|
|
24
|
-
config.proxyInfo = {
|
|
25
|
-
proxyMethod: 'custom',
|
|
26
|
-
proxyCategory: params.proxyType || 'HTTP',
|
|
27
|
-
protocol: params.proxyType || 'HTTP',
|
|
28
|
-
host: params.proxyHost,
|
|
29
|
-
port: params.proxyPort,
|
|
30
|
-
proxyUserName: params.proxyUserName,
|
|
31
|
-
proxyPassword: params.proxyPassword,
|
|
32
|
-
ipType: 'IPV4',
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return config;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Convert standard parameters to full browser configuration
|
|
39
|
-
*/
|
|
40
|
-
static buildStandardConfig(params) {
|
|
41
|
-
const config = {
|
|
42
|
-
workspaceId: params.workspaceId,
|
|
43
|
-
};
|
|
44
|
-
// Add all standard fields
|
|
45
|
-
if (params.windowName)
|
|
46
|
-
config.windowName = params.windowName;
|
|
47
|
-
if (params.projectId)
|
|
48
|
-
config.projectId = params.projectId;
|
|
49
|
-
if (params.windowRemark)
|
|
50
|
-
config.windowRemark = params.windowRemark;
|
|
51
|
-
if (params.os)
|
|
52
|
-
config.os = params.os;
|
|
53
|
-
if (params.osVersion)
|
|
54
|
-
config.osVersion = params.osVersion;
|
|
55
|
-
if (params.coreVersion)
|
|
56
|
-
config.coreVersion = params.coreVersion;
|
|
57
|
-
if (params.defaultOpenUrl)
|
|
58
|
-
config.defaultOpenUrl = params.defaultOpenUrl;
|
|
59
|
-
// Add proxy configuration
|
|
60
|
-
if (params.proxyInfo) {
|
|
61
|
-
config.proxyInfo = params.proxyInfo;
|
|
62
|
-
}
|
|
63
|
-
// Build fingerprint configuration for common settings
|
|
64
|
-
if (params.openWidth || params.openHeight || params.language || params.timeZone) {
|
|
65
|
-
config.fingerInfo = {};
|
|
66
|
-
if (params.openWidth)
|
|
67
|
-
config.fingerInfo.openWidth = params.openWidth;
|
|
68
|
-
if (params.openHeight)
|
|
69
|
-
config.fingerInfo.openHeight = params.openHeight;
|
|
70
|
-
if (params.language) {
|
|
71
|
-
config.fingerInfo.isLanguageBaseIp = false;
|
|
72
|
-
config.fingerInfo.language = params.language;
|
|
73
|
-
}
|
|
74
|
-
if (params.timeZone) {
|
|
75
|
-
config.fingerInfo.isTimeZone = false;
|
|
76
|
-
config.fingerInfo.timeZone = params.timeZone;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return config;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Advanced configuration - pass through as-is
|
|
83
|
-
*/
|
|
84
|
-
static buildAdvancedConfig(params) {
|
|
85
|
-
return params;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Generate unique browser name
|
|
89
|
-
*/
|
|
90
|
-
static generateBrowserName(prefix, index) {
|
|
91
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
92
|
-
const randomSuffix = Math.random().toString(36).substring(2, 8);
|
|
93
|
-
if (prefix && index !== undefined) {
|
|
94
|
-
return `${prefix}-${index + 1}-${timestamp}`;
|
|
95
|
-
}
|
|
96
|
-
else if (prefix) {
|
|
97
|
-
return `${prefix}-${timestamp}-${randomSuffix}`;
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
return `Browser-${timestamp}-${randomSuffix}`;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Assign proxies from a list to multiple browser configurations
|
|
105
|
-
*/
|
|
106
|
-
static assignProxiesToConfigs(configs, proxyList) {
|
|
107
|
-
if (!proxyList.length) {
|
|
108
|
-
return configs;
|
|
109
|
-
}
|
|
110
|
-
return configs.map((config, index) => ({
|
|
111
|
-
...config,
|
|
112
|
-
proxyInfo: proxyList[index % proxyList.length], // Round-robin proxy assignment
|
|
113
|
-
}));
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Validate browser configuration
|
|
117
|
-
*/
|
|
118
|
-
static validateConfig(config) {
|
|
119
|
-
const errors = [];
|
|
120
|
-
// Required fields
|
|
121
|
-
if (!config.workspaceId) {
|
|
122
|
-
errors.push('workspaceId is required');
|
|
123
|
-
}
|
|
124
|
-
// Proxy validation
|
|
125
|
-
if (config.proxyInfo) {
|
|
126
|
-
const proxy = config.proxyInfo;
|
|
127
|
-
if (proxy.proxyCategory !== 'noproxy') {
|
|
128
|
-
if (!proxy.host)
|
|
129
|
-
errors.push('Proxy host is required when proxy is enabled');
|
|
130
|
-
if (!proxy.port)
|
|
131
|
-
errors.push('Proxy port is required when proxy is enabled');
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// OS version compatibility
|
|
135
|
-
if (config.os && config.osVersion) {
|
|
136
|
-
const validVersions = this.getValidOSVersions(config.os);
|
|
137
|
-
if (validVersions && !validVersions.includes(config.osVersion)) {
|
|
138
|
-
errors.push(`Invalid OS version '${config.osVersion}' for OS '${config.os}'`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return {
|
|
142
|
-
valid: errors.length === 0,
|
|
143
|
-
errors,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get valid OS versions for a given operating system
|
|
148
|
-
*/
|
|
149
|
-
static getValidOSVersions(os) {
|
|
150
|
-
const osVersionMap = {
|
|
151
|
-
Windows: ['11', '10', '8', '7'],
|
|
152
|
-
macOS: [
|
|
153
|
-
'15.3.2', '15.3.1', '15.3', '15.2', '15.1', '15.0.1', '15.0',
|
|
154
|
-
'14.7.4', '14.7.3', '14.7.2', '14.7.1', '14.7', '14.6.1', '14.6',
|
|
155
|
-
'14.5', '14.4.1', '14.4', '14.3.1', '14.3', '14.2.1', '14.2', '14.1',
|
|
156
|
-
'13.7.4', '13.7.3', '13.7.2', '13.7.1', '13.7'
|
|
157
|
-
],
|
|
158
|
-
Android: ['14', '13', '12', '11', '10', '9'],
|
|
159
|
-
IOS: [
|
|
160
|
-
'18.2', '18.1', '18.0', '17.0', '16.6', '16.5', '16.4', '16.3', '16.2',
|
|
161
|
-
'16.1', '16.0', '15.7', '15.6', '15.5', '15.4', '15.3', '15.2', '15.1',
|
|
162
|
-
'15.0', '14.7', '14.6', '14.5', '14.4', '14.3', '14.2', '14.1', '14.0'
|
|
163
|
-
],
|
|
164
|
-
Linux: [], // Linux versions are more flexible, skip validation
|
|
165
|
-
};
|
|
166
|
-
return osVersionMap[os] || null;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Apply smart defaults to configuration
|
|
170
|
-
*/
|
|
171
|
-
static applyDefaults(config) {
|
|
172
|
-
const defaultConfig = {
|
|
173
|
-
os: 'Windows',
|
|
174
|
-
osVersion: '11',
|
|
175
|
-
coreVersion: LATEST_CORE_VERSION,
|
|
176
|
-
searchEngine: 'Google',
|
|
177
|
-
// Default fingerprint settings
|
|
178
|
-
fingerInfo: {
|
|
179
|
-
isLanguageBaseIp: true,
|
|
180
|
-
isDisplayLanguageBaseIp: true,
|
|
181
|
-
isTimeZone: true,
|
|
182
|
-
position: 1,
|
|
183
|
-
isPositionBaseIp: true,
|
|
184
|
-
forbidAudio: true,
|
|
185
|
-
forbidImage: true,
|
|
186
|
-
forbidMedia: true,
|
|
187
|
-
openWidth: '1000',
|
|
188
|
-
openHeight: '1000',
|
|
189
|
-
openBookmarks: false,
|
|
190
|
-
positionSwitch: true,
|
|
191
|
-
isDisplayName: false,
|
|
192
|
-
syncBookmark: false,
|
|
193
|
-
syncHistory: false,
|
|
194
|
-
syncTab: true,
|
|
195
|
-
syncCookie: true,
|
|
196
|
-
syncExtensions: false,
|
|
197
|
-
syncPassword: true,
|
|
198
|
-
syncIndexedDb: false,
|
|
199
|
-
syncLocalStorage: false,
|
|
200
|
-
clearCacheFile: false,
|
|
201
|
-
clearCookie: false,
|
|
202
|
-
clearLocalStorage: false,
|
|
203
|
-
randomFingerprint: false,
|
|
204
|
-
forbidSavePassword: true,
|
|
205
|
-
stopOpenNet: false,
|
|
206
|
-
stopOpenIP: false,
|
|
207
|
-
stopOpenPosition: false,
|
|
208
|
-
openWorkbench: 1,
|
|
209
|
-
resolutionType: false,
|
|
210
|
-
fontType: false,
|
|
211
|
-
webRTC: 2,
|
|
212
|
-
webGL: true,
|
|
213
|
-
webGLInfo: true,
|
|
214
|
-
webGpu: 'webgl',
|
|
215
|
-
canvas: true,
|
|
216
|
-
audioContext: true,
|
|
217
|
-
speechVoices: true,
|
|
218
|
-
doNotTrack: true,
|
|
219
|
-
clientRects: true,
|
|
220
|
-
deviceInfo: true,
|
|
221
|
-
deviceNameSwitch: true,
|
|
222
|
-
macInfo: true,
|
|
223
|
-
disableSsl: false,
|
|
224
|
-
portScanProtect: true,
|
|
225
|
-
useGpu: true,
|
|
226
|
-
sandboxPermission: false,
|
|
227
|
-
},
|
|
228
|
-
// Default proxy settings
|
|
229
|
-
proxyInfo: {
|
|
230
|
-
proxyMethod: 'custom',
|
|
231
|
-
proxyCategory: 'noproxy',
|
|
232
|
-
ipType: 'IPV4',
|
|
233
|
-
},
|
|
234
|
-
};
|
|
235
|
-
// Deep merge configuration with defaults
|
|
236
|
-
const result = { ...defaultConfig, ...config };
|
|
237
|
-
// Merge fingerInfo and proxyInfo specifically
|
|
238
|
-
if (defaultConfig.fingerInfo && config.fingerInfo) {
|
|
239
|
-
result.fingerInfo = { ...defaultConfig.fingerInfo, ...config.fingerInfo };
|
|
240
|
-
}
|
|
241
|
-
if (defaultConfig.proxyInfo && config.proxyInfo) {
|
|
242
|
-
result.proxyInfo = { ...defaultConfig.proxyInfo, ...config.proxyInfo };
|
|
243
|
-
}
|
|
244
|
-
return result;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Batch validate multiple configurations
|
|
248
|
-
*/
|
|
249
|
-
static validateConfigs(configs) {
|
|
250
|
-
const allErrors = [];
|
|
251
|
-
configs.forEach((config, index) => {
|
|
252
|
-
const validation = this.validateConfig(config);
|
|
253
|
-
if (!validation.valid) {
|
|
254
|
-
allErrors.push({ index, errors: validation.errors });
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
return {
|
|
258
|
-
valid: allErrors.length === 0,
|
|
259
|
-
errors: allErrors,
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
//# sourceMappingURL=browser-creator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser-creator.js","sourceRoot":"","sources":["../../src/browser/browser-creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proxy Manager Service
|
|
3
|
-
*
|
|
4
|
-
* Handles proxy configuration, validation, and management for RoxyBrowser
|
|
5
|
-
*/
|
|
6
|
-
import { ProxyInfo, BrowserCreateConfig } from '../types.js';
|
|
7
|
-
export interface ProxyValidationResult {
|
|
8
|
-
valid: boolean;
|
|
9
|
-
errors: string[];
|
|
10
|
-
warnings: string[];
|
|
11
|
-
}
|
|
12
|
-
export interface ProxyTestResult {
|
|
13
|
-
success: boolean;
|
|
14
|
-
error?: string;
|
|
15
|
-
responseTime?: number;
|
|
16
|
-
ipAddress?: string;
|
|
17
|
-
location?: string;
|
|
18
|
-
}
|
|
19
|
-
export declare class ProxyManager {
|
|
20
|
-
/**
|
|
21
|
-
* Validate proxy configuration
|
|
22
|
-
*/
|
|
23
|
-
static validateProxy(proxy: ProxyInfo): ProxyValidationResult;
|
|
24
|
-
/**
|
|
25
|
-
* Test proxy connection
|
|
26
|
-
*/
|
|
27
|
-
static testProxy(proxy: ProxyInfo): Promise<ProxyTestResult>;
|
|
28
|
-
/**
|
|
29
|
-
* Create proxy configuration from simple parameters
|
|
30
|
-
*/
|
|
31
|
-
static createSimpleProxy(host: string, port: string, username?: string, password?: string, type?: 'HTTP' | 'HTTPS' | 'SOCKS5'): ProxyInfo;
|
|
32
|
-
/**
|
|
33
|
-
* Parse proxy URL (format: protocol://username:password@host:port)
|
|
34
|
-
*/
|
|
35
|
-
static parseProxyUrl(proxyUrl: string): ProxyInfo | null;
|
|
36
|
-
/**
|
|
37
|
-
* Generate proxy list from various formats
|
|
38
|
-
*/
|
|
39
|
-
static parseProxyList(proxyListInput: string | string[]): ProxyInfo[];
|
|
40
|
-
/**
|
|
41
|
-
* Distribute proxies across multiple browser configurations
|
|
42
|
-
*/
|
|
43
|
-
static distributeProxies(configs: BrowserCreateConfig[], proxies: ProxyInfo[], strategy?: 'round-robin' | 'random'): BrowserCreateConfig[];
|
|
44
|
-
/**
|
|
45
|
-
* Filter working proxies from a list
|
|
46
|
-
*/
|
|
47
|
-
static filterWorkingProxies(proxies: ProxyInfo[], options?: {
|
|
48
|
-
concurrency?: number;
|
|
49
|
-
timeout?: number;
|
|
50
|
-
retries?: number;
|
|
51
|
-
}): Promise<ProxyInfo[]>;
|
|
52
|
-
/**
|
|
53
|
-
* Get proxy statistics
|
|
54
|
-
*/
|
|
55
|
-
static getProxyStats(proxies: ProxyInfo[]): {
|
|
56
|
-
total: number;
|
|
57
|
-
byType: Record<string, number>;
|
|
58
|
-
withAuth: number;
|
|
59
|
-
withoutAuth: number;
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Private helper methods
|
|
63
|
-
*/
|
|
64
|
-
private static isValidHost;
|
|
65
|
-
private static getDefaultPort;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=proxy-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-manager.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAgB,MAAM,aAAa,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB;IAoE7D;;OAEG;WACU,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;IAsClE;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,GAAE,MAAM,GAAG,OAAO,GAAG,QAAiB,GACzC,SAAS;IAaZ;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IA+BxD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE;IAoCrE;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,EAAE,SAAS,EAAE,EACpB,QAAQ,GAAE,aAAa,GAAG,QAAwB,GACjD,mBAAmB,EAAE;IAsBxB;;OAEG;WACU,oBAAoB,CAC/B,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC,SAAS,EAAE,CAAC;IA8BvB;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;QAC1C,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB;IAwBD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B,OAAO,CAAC,MAAM,CAAC,cAAc;CAQ9B"}
|
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proxy Manager Service
|
|
3
|
-
*
|
|
4
|
-
* Handles proxy configuration, validation, and management for RoxyBrowser
|
|
5
|
-
*/
|
|
6
|
-
export class ProxyManager {
|
|
7
|
-
/**
|
|
8
|
-
* Validate proxy configuration
|
|
9
|
-
*/
|
|
10
|
-
static validateProxy(proxy) {
|
|
11
|
-
const errors = [];
|
|
12
|
-
const warnings = [];
|
|
13
|
-
// Basic validation
|
|
14
|
-
if (!proxy) {
|
|
15
|
-
errors.push('Proxy configuration is required');
|
|
16
|
-
return { valid: false, errors, warnings };
|
|
17
|
-
}
|
|
18
|
-
// Skip validation for no proxy
|
|
19
|
-
if (proxy.proxyCategory === 'noproxy') {
|
|
20
|
-
return { valid: true, errors: [], warnings: [] };
|
|
21
|
-
}
|
|
22
|
-
// Required fields when proxy is enabled
|
|
23
|
-
if (!proxy.host) {
|
|
24
|
-
errors.push('Proxy host is required');
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
// Validate host format
|
|
28
|
-
if (!this.isValidHost(proxy.host)) {
|
|
29
|
-
errors.push('Invalid proxy host format');
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (!proxy.port) {
|
|
33
|
-
errors.push('Proxy port is required');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
// Validate port range
|
|
37
|
-
const port = parseInt(proxy.port, 10);
|
|
38
|
-
if (isNaN(port) || port < 1 || port > 65535) {
|
|
39
|
-
errors.push('Proxy port must be between 1 and 65535');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// Validate proxy type and protocol compatibility
|
|
43
|
-
if (proxy.proxyCategory && proxy.protocol) {
|
|
44
|
-
if (proxy.proxyCategory !== proxy.protocol) {
|
|
45
|
-
warnings.push(`Proxy category (${proxy.proxyCategory}) and protocol (${proxy.protocol}) don't match`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Validate authentication
|
|
49
|
-
if (proxy.proxyUserName && !proxy.proxyPassword) {
|
|
50
|
-
warnings.push('Proxy username provided but password is missing');
|
|
51
|
-
}
|
|
52
|
-
if (proxy.proxyPassword && !proxy.proxyUserName) {
|
|
53
|
-
warnings.push('Proxy password provided but username is missing');
|
|
54
|
-
}
|
|
55
|
-
// Validate IP type
|
|
56
|
-
if (proxy.ipType && !['IPV4', 'IPV6'].includes(proxy.ipType)) {
|
|
57
|
-
errors.push('IP type must be IPV4 or IPV6');
|
|
58
|
-
}
|
|
59
|
-
// Validate check channel
|
|
60
|
-
if (proxy.checkChannel && !['IPRust.io', 'IP-API', 'IP123.in'].includes(proxy.checkChannel)) {
|
|
61
|
-
errors.push('Invalid IP check channel');
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
valid: errors.length === 0,
|
|
65
|
-
errors,
|
|
66
|
-
warnings,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Test proxy connection
|
|
71
|
-
*/
|
|
72
|
-
static async testProxy(proxy) {
|
|
73
|
-
// Skip test for no proxy
|
|
74
|
-
if (proxy.proxyCategory === 'noproxy') {
|
|
75
|
-
return { success: true };
|
|
76
|
-
}
|
|
77
|
-
// Validate first
|
|
78
|
-
const validation = this.validateProxy(proxy);
|
|
79
|
-
if (!validation.valid) {
|
|
80
|
-
return {
|
|
81
|
-
success: false,
|
|
82
|
-
error: `Proxy validation failed: ${validation.errors.join(', ')}`,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
// Since we can't directly test proxy connection in Node.js without additional dependencies,
|
|
86
|
-
// we'll do basic connectivity checks and format validation
|
|
87
|
-
try {
|
|
88
|
-
const startTime = Date.now();
|
|
89
|
-
// Basic format validation passed, assume connection is testable
|
|
90
|
-
// In a real implementation, you would use libraries like 'socks' or 'http-proxy-agent'
|
|
91
|
-
const responseTime = Date.now() - startTime;
|
|
92
|
-
return {
|
|
93
|
-
success: true,
|
|
94
|
-
responseTime,
|
|
95
|
-
ipAddress: 'Test IP (simulated)',
|
|
96
|
-
location: 'Test Location (simulated)',
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
return {
|
|
101
|
-
success: false,
|
|
102
|
-
error: error instanceof Error ? error.message : 'Unknown proxy test error',
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Create proxy configuration from simple parameters
|
|
108
|
-
*/
|
|
109
|
-
static createSimpleProxy(host, port, username, password, type = 'HTTP') {
|
|
110
|
-
return {
|
|
111
|
-
proxyMethod: 'custom',
|
|
112
|
-
proxyCategory: type,
|
|
113
|
-
protocol: type,
|
|
114
|
-
ipType: 'IPV4',
|
|
115
|
-
host,
|
|
116
|
-
port,
|
|
117
|
-
proxyUserName: username,
|
|
118
|
-
proxyPassword: password,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Parse proxy URL (format: protocol://username:password@host:port)
|
|
123
|
-
*/
|
|
124
|
-
static parseProxyUrl(proxyUrl) {
|
|
125
|
-
try {
|
|
126
|
-
const url = new URL(proxyUrl);
|
|
127
|
-
const protocolMap = {
|
|
128
|
-
'http:': 'HTTP',
|
|
129
|
-
'https:': 'HTTPS',
|
|
130
|
-
'socks5:': 'SOCKS5',
|
|
131
|
-
};
|
|
132
|
-
const protocol = protocolMap[url.protocol];
|
|
133
|
-
if (!protocol) {
|
|
134
|
-
throw new Error(`Unsupported proxy protocol: ${url.protocol}`);
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
proxyMethod: 'custom',
|
|
138
|
-
proxyCategory: protocol,
|
|
139
|
-
protocol,
|
|
140
|
-
ipType: 'IPV4',
|
|
141
|
-
host: url.hostname,
|
|
142
|
-
port: url.port || this.getDefaultPort(protocol),
|
|
143
|
-
proxyUserName: url.username || undefined,
|
|
144
|
-
proxyPassword: url.password || undefined,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
console.error('Failed to parse proxy URL:', error);
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Generate proxy list from various formats
|
|
154
|
-
*/
|
|
155
|
-
static parseProxyList(proxyListInput) {
|
|
156
|
-
const proxyList = [];
|
|
157
|
-
const inputs = Array.isArray(proxyListInput) ? proxyListInput : [proxyListInput];
|
|
158
|
-
for (const input of inputs) {
|
|
159
|
-
const lines = input.split('\n').map(line => line.trim()).filter(Boolean);
|
|
160
|
-
for (const line of lines) {
|
|
161
|
-
let proxy = null;
|
|
162
|
-
// Try URL format first
|
|
163
|
-
if (line.includes('://')) {
|
|
164
|
-
proxy = this.parseProxyUrl(line);
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
// Try host:port format
|
|
168
|
-
const parts = line.split(':');
|
|
169
|
-
if (parts.length >= 2) {
|
|
170
|
-
const [host, port, username, password] = parts;
|
|
171
|
-
proxy = this.createSimpleProxy(host, port, username, password);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (proxy) {
|
|
175
|
-
const validation = this.validateProxy(proxy);
|
|
176
|
-
if (validation.valid) {
|
|
177
|
-
proxyList.push(proxy);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
console.warn(`Invalid proxy skipped: ${line} - ${validation.errors.join(', ')}`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return proxyList;
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Distribute proxies across multiple browser configurations
|
|
189
|
-
*/
|
|
190
|
-
static distributeProxies(configs, proxies, strategy = 'round-robin') {
|
|
191
|
-
if (!proxies.length) {
|
|
192
|
-
return configs;
|
|
193
|
-
}
|
|
194
|
-
return configs.map((config, index) => {
|
|
195
|
-
let proxy;
|
|
196
|
-
if (strategy === 'random') {
|
|
197
|
-
proxy = proxies[Math.floor(Math.random() * proxies.length)];
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
// Round-robin
|
|
201
|
-
proxy = proxies[index % proxies.length];
|
|
202
|
-
}
|
|
203
|
-
return {
|
|
204
|
-
...config,
|
|
205
|
-
proxyInfo: proxy,
|
|
206
|
-
};
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Filter working proxies from a list
|
|
211
|
-
*/
|
|
212
|
-
static async filterWorkingProxies(proxies, options = {}) {
|
|
213
|
-
const { concurrency = 5, timeout = 10000, retries = 1 } = options;
|
|
214
|
-
const workingProxies = [];
|
|
215
|
-
// Process proxies in batches
|
|
216
|
-
for (let i = 0; i < proxies.length; i += concurrency) {
|
|
217
|
-
const batch = proxies.slice(i, i + concurrency);
|
|
218
|
-
const testPromises = batch.map(async (proxy) => {
|
|
219
|
-
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
220
|
-
const result = await this.testProxy(proxy);
|
|
221
|
-
if (result.success) {
|
|
222
|
-
return proxy;
|
|
223
|
-
}
|
|
224
|
-
// Wait before retry
|
|
225
|
-
if (attempt < retries) {
|
|
226
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return null;
|
|
230
|
-
});
|
|
231
|
-
const batchResults = await Promise.all(testPromises);
|
|
232
|
-
workingProxies.push(...batchResults.filter((proxy) => proxy !== null));
|
|
233
|
-
}
|
|
234
|
-
return workingProxies;
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Get proxy statistics
|
|
238
|
-
*/
|
|
239
|
-
static getProxyStats(proxies) {
|
|
240
|
-
const stats = {
|
|
241
|
-
total: proxies.length,
|
|
242
|
-
byType: {},
|
|
243
|
-
withAuth: 0,
|
|
244
|
-
withoutAuth: 0,
|
|
245
|
-
};
|
|
246
|
-
for (const proxy of proxies) {
|
|
247
|
-
// Count by type
|
|
248
|
-
const type = proxy.proxyCategory || 'unknown';
|
|
249
|
-
stats.byType[type] = (stats.byType[type] || 0) + 1;
|
|
250
|
-
// Count authentication
|
|
251
|
-
if (proxy.proxyUserName && proxy.proxyPassword) {
|
|
252
|
-
stats.withAuth++;
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
stats.withoutAuth++;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return stats;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Private helper methods
|
|
262
|
-
*/
|
|
263
|
-
static isValidHost(host) {
|
|
264
|
-
// Basic host validation (IP address or domain name)
|
|
265
|
-
const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
266
|
-
const domainRegex = /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
267
|
-
return ipRegex.test(host) || domainRegex.test(host);
|
|
268
|
-
}
|
|
269
|
-
static getDefaultPort(protocol) {
|
|
270
|
-
const defaultPorts = {
|
|
271
|
-
HTTP: '8080',
|
|
272
|
-
HTTPS: '8080',
|
|
273
|
-
SOCKS5: '1080',
|
|
274
|
-
};
|
|
275
|
-
return defaultPorts[protocol] || '8080';
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
//# sourceMappingURL=proxy-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-manager.js","sourceRoot":"","sources":["../../src/proxy/proxy-manager.ts"],"names":[],"mappings":"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"}
|