proxy-rotator-js 1.1.1 → 1.2.1

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.
Files changed (49) hide show
  1. package/dist/cjs/index.cjs +12 -0
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/{src/Proxy.js → dist/cjs/src/Proxy.cjs} +20 -31
  4. package/dist/cjs/src/Proxy.cjs.map +1 -0
  5. package/dist/cjs/src/ProxyRotator.cjs +241 -0
  6. package/dist/cjs/src/ProxyRotator.cjs.map +1 -0
  7. package/dist/cjs/src/Queue.cjs +64 -0
  8. package/dist/cjs/src/Queue.cjs.map +1 -0
  9. package/dist/cjs/src/utils/makeRequestWithProxy.cjs +24 -0
  10. package/dist/cjs/src/utils/makeRequestWithProxy.cjs.map +1 -0
  11. package/dist/index.d.ts +8 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +5 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/src/Proxy.d.ts +40 -0
  16. package/dist/src/Proxy.d.ts.map +1 -0
  17. package/dist/src/Proxy.js +93 -0
  18. package/dist/src/Proxy.js.map +1 -0
  19. package/dist/src/ProxyRotator.d.ts +52 -0
  20. package/dist/src/ProxyRotator.d.ts.map +1 -0
  21. package/dist/src/ProxyRotator.js +235 -0
  22. package/dist/src/ProxyRotator.js.map +1 -0
  23. package/dist/src/Queue.d.ts +16 -0
  24. package/dist/src/Queue.d.ts.map +1 -0
  25. package/dist/src/Queue.js +61 -0
  26. package/dist/src/Queue.js.map +1 -0
  27. package/dist/src/utils/makeRequestWithProxy.d.ts +9 -0
  28. package/dist/src/utils/makeRequestWithProxy.d.ts.map +1 -0
  29. package/dist/src/utils/makeRequestWithProxy.js +18 -0
  30. package/dist/src/utils/makeRequestWithProxy.js.map +1 -0
  31. package/dist/test/test.d.ts +2 -0
  32. package/dist/test/test.d.ts.map +1 -0
  33. package/dist/test/test.js +122 -0
  34. package/dist/test/test.js.map +1 -0
  35. package/dist/test/test_proxies.d.ts +2 -0
  36. package/dist/test/test_proxies.d.ts.map +1 -0
  37. package/dist/test/test_proxies.js +20 -0
  38. package/dist/test/test_proxies.js.map +1 -0
  39. package/package.json +23 -4
  40. package/assets/http_proxies_with_commas.txt +0 -1
  41. package/assets/http_proxies_with_newlines.txt +0 -8
  42. package/assets/http_proxies_with_spaces.txt +0 -1
  43. package/index.js +0 -2
  44. package/src/ProxyRotator.js +0 -239
  45. package/src/Queue.js +0 -61
  46. package/src/utils/makeRequestWithProxy.js +0 -21
  47. package/test/options.js +0 -32
  48. package/test/test.js +0 -204
  49. package/test/test_proxies.js +0 -22
@@ -0,0 +1,52 @@
1
+ import Proxy from './Proxy.js';
2
+ import type { ProxyObj } from './Proxy.js';
3
+ export type ReturnAs = 'string' | 'object';
4
+ export interface ProxyRotatorOptions {
5
+ returnAs?: ReturnAs | 'str' | 'obj';
6
+ revive_timer?: number;
7
+ shuffle?: boolean;
8
+ protocol?: string | null;
9
+ assume_aliveness?: boolean;
10
+ check_on_next?: boolean;
11
+ }
12
+ export default class ProxyRotator {
13
+ private pool;
14
+ private graveyard;
15
+ revive_timer: number;
16
+ returnAs: ReturnAs;
17
+ protocol: string | null;
18
+ shuffle: boolean;
19
+ assume_aliveness: boolean;
20
+ check_on_next: boolean;
21
+ constructor(proxies?: null | string | string[], options?: ProxyRotatorOptions);
22
+ getGraveyard(): string[];
23
+ getGraveyardSize(): number;
24
+ getPool(): string[];
25
+ getPoolSize(): number;
26
+ add(proxies: string | string[]): void;
27
+ /** Parse a file of proxies (newline-, space-, or comma-separated) and add each to the pool. */
28
+ add_file(filename: string): void;
29
+ private _add;
30
+ /** Treat a string as either a file path (add all proxies from file) or a single proxy "ip:port" / "protocol://ip:port". */
31
+ private _processOne;
32
+ /** True if the string is an existing file path. */
33
+ private _isFilePath;
34
+ remove(proxy: string | string[]): void;
35
+ private _remove;
36
+ getAlive(): string | undefined;
37
+ setAlive(proxy: string | Proxy): void;
38
+ resurect(proxy: string | Proxy): void;
39
+ setDead(proxy: string | Proxy): void;
40
+ kill(proxy: string | Proxy): void;
41
+ next(options?: {
42
+ returnAs?: ReturnAs | 'str' | 'obj';
43
+ }): string | ProxyObj | null;
44
+ private _shuffleArray;
45
+ private _handleReturnAsInput;
46
+ private _parseFile;
47
+ private _isArray;
48
+ private _resurection;
49
+ test_proxies(): Promise<void>;
50
+ test: () => Promise<void>;
51
+ }
52
+ //# sourceMappingURL=ProxyRotator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyRotator.d.ts","sourceRoot":"","sources":["../../src/ProxyRotator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,SAAS,CAAe;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;gBAGrB,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,EAClC,OAAO,GAAE,mBAAwB;IAkCnC,YAAY,IAAI,MAAM,EAAE;IAIxB,gBAAgB,IAAI,MAAM;IAI1B,OAAO,IAAI,MAAM,EAAE;IAInB,WAAW,IAAI,MAAM;IAIrB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQrC,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKhC,OAAO,CAAC,IAAI;IAKZ,2HAA2H;IAC3H,OAAO,CAAC,WAAW;IAQnB,mDAAmD;IACnD,OAAO,CAAC,WAAW;IASnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQtC,OAAO,CAAC,OAAO;IAMf,QAAQ,IAAI,MAAM,GAAG,SAAS;IAQ9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAgBrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAQrC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAWpC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAIjC,IAAI,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;KAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI;IAgBrF,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,YAAY;IAWd,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBnC,IAAI,QAzBkB,OAAO,CAAC,IAAI,CAAC,CAyBV;CAC1B"}
@@ -0,0 +1,235 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import Queue from './Queue.js';
4
+ import Proxy from './Proxy.js';
5
+ import makeRequestWithProxy from './utils/makeRequestWithProxy.js';
6
+ export default class ProxyRotator {
7
+ constructor(proxies, options = {}) {
8
+ this.graveyard = [];
9
+ this.test = this.test_proxies;
10
+ this.pool = new Queue();
11
+ const { returnAs, revive_timer, shuffle, protocol, assume_aliveness, check_on_next, } = options;
12
+ this.revive_timer = revive_timer ?? 1000 * 60 * 30;
13
+ this.returnAs = returnAs ? this._handleReturnAsInput(returnAs) ?? 'string' : 'string';
14
+ this.protocol = protocol ?? null;
15
+ this.shuffle = shuffle ?? false;
16
+ this.assume_aliveness = assume_aliveness ?? false;
17
+ this.check_on_next = check_on_next ?? false;
18
+ if (proxies == null) {
19
+ // no proxies
20
+ }
21
+ else if (typeof proxies === 'string') {
22
+ this._processOne(proxies);
23
+ }
24
+ else if (this._isArray(proxies)) {
25
+ for (const item of proxies)
26
+ this._processOne(item);
27
+ }
28
+ if (this.shuffle) {
29
+ const shuffled = this._shuffleArray(this.pool.toArray());
30
+ this.pool = new Queue();
31
+ shuffled.forEach((p) => this.pool.enqueue(p));
32
+ }
33
+ }
34
+ getGraveyard() {
35
+ return this.graveyard.map((p) => p.proxy);
36
+ }
37
+ getGraveyardSize() {
38
+ return this.graveyard.length;
39
+ }
40
+ getPool() {
41
+ return this.pool.toArray().map((p) => p.proxy);
42
+ }
43
+ getPoolSize() {
44
+ return this.pool.size;
45
+ }
46
+ add(proxies) {
47
+ if (this._isArray(proxies)) {
48
+ for (const proxy of proxies)
49
+ this._add(proxy);
50
+ }
51
+ else {
52
+ this._add(proxies);
53
+ }
54
+ }
55
+ /** Parse a file of proxies (newline-, space-, or comma-separated) and add each to the pool. */
56
+ add_file(filename) {
57
+ const parsed = this._parseFile(filename);
58
+ parsed.forEach((p) => this._add(p));
59
+ }
60
+ _add(proxy) {
61
+ const p = new Proxy(proxy, this.protocol, this.assume_aliveness);
62
+ this.pool.enqueue(p);
63
+ }
64
+ /** Treat a string as either a file path (add all proxies from file) or a single proxy "ip:port" / "protocol://ip:port". */
65
+ _processOne(item) {
66
+ if (this._isFilePath(item)) {
67
+ this.add_file(item);
68
+ }
69
+ else {
70
+ this._add(item);
71
+ }
72
+ }
73
+ /** True if the string is an existing file path. */
74
+ _isFilePath(s) {
75
+ try {
76
+ const resolved = path.resolve(s);
77
+ return fs.existsSync(resolved) && fs.statSync(resolved).isFile();
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ remove(proxy) {
84
+ if (this._isArray(proxy)) {
85
+ for (const p of proxy)
86
+ this._remove(p);
87
+ }
88
+ else {
89
+ this._remove(proxy);
90
+ }
91
+ }
92
+ _remove(proxy) {
93
+ this.pool.toArray().forEach((p, i) => {
94
+ if (p.equals(proxy))
95
+ this.pool.removeAt(i);
96
+ });
97
+ }
98
+ getAlive() {
99
+ const proxies = this.pool.toArray();
100
+ for (const proxy of proxies) {
101
+ if (proxy.isAlive())
102
+ return proxy.proxy;
103
+ }
104
+ return undefined;
105
+ }
106
+ setAlive(proxy) {
107
+ const proxies = this.pool.toArray();
108
+ for (const p of proxies) {
109
+ if (p.equals(proxy)) {
110
+ p.setAlive();
111
+ return;
112
+ }
113
+ }
114
+ for (const p of this.graveyard) {
115
+ if (p.equals(proxy)) {
116
+ this.resurect(p);
117
+ return;
118
+ }
119
+ }
120
+ }
121
+ resurect(proxy) {
122
+ const p = this.graveyard.find((x) => x.equals(proxy));
123
+ if (!p)
124
+ return;
125
+ this.graveyard = this.graveyard.filter((x) => !x.equals(proxy));
126
+ p.setNew();
127
+ this.pool.enqueue(p);
128
+ }
129
+ setDead(proxy) {
130
+ this.pool.toArray().forEach((p, i) => {
131
+ if (p.equals(proxy)) {
132
+ p.setDead();
133
+ this.pool.removeAt(i);
134
+ this.graveyard.push(p);
135
+ }
136
+ });
137
+ setTimeout(() => this.resurect(proxy), this.revive_timer);
138
+ }
139
+ kill(proxy) {
140
+ this.setDead(proxy);
141
+ }
142
+ next(options = {}) {
143
+ let { returnAs } = options;
144
+ if (this.check_on_next)
145
+ this._resurection();
146
+ if (this.pool.size === 0)
147
+ return null;
148
+ const proxy = this.pool.dequeue();
149
+ this.pool.enqueue(proxy);
150
+ const resolvedReturnAs = returnAs
151
+ ? this._handleReturnAsInput(returnAs)
152
+ : this.returnAs;
153
+ if (resolvedReturnAs === 'string')
154
+ return proxy.toString();
155
+ if (resolvedReturnAs === 'object')
156
+ return proxy.obj();
157
+ return null;
158
+ }
159
+ _shuffleArray(array) {
160
+ for (let i = array.length - 1; i > 0; i--) {
161
+ const j = Math.floor(Math.random() * (i + 1));
162
+ const temp = array[i];
163
+ array[i] = array[j];
164
+ array[j] = temp;
165
+ }
166
+ return array;
167
+ }
168
+ _handleReturnAsInput(proxyType) {
169
+ if (typeof proxyType === 'string') {
170
+ proxyType = proxyType.toLowerCase();
171
+ if (proxyType === 'str')
172
+ proxyType = 'string';
173
+ if (proxyType === 'obj')
174
+ proxyType = 'object';
175
+ if (proxyType !== 'string' && proxyType !== 'object') {
176
+ console.error('proxyType must be either "string" or "object"');
177
+ return null;
178
+ }
179
+ return proxyType;
180
+ }
181
+ return null;
182
+ }
183
+ _parseFile(filename) {
184
+ const str = fs.readFileSync(filename, 'utf8');
185
+ let strList = str.split('\n').filter((s) => s.length > 0);
186
+ if (strList.length === 1)
187
+ strList = str.split(' ');
188
+ if (strList.length === 1)
189
+ strList = str.split(',');
190
+ strList = strList
191
+ .map((s) => s.replace(',', ''))
192
+ .map((s) => s.trim())
193
+ .filter((s) => s.length > 0);
194
+ return strList;
195
+ }
196
+ _isArray(value) {
197
+ return (!!value &&
198
+ typeof value === 'object' &&
199
+ value.constructor === Array);
200
+ }
201
+ _resurection() {
202
+ for (const proxy of this.graveyard) {
203
+ if (proxy.isDead() &&
204
+ proxy.timeSinceStatusChange() >= this.revive_timer) {
205
+ this.resurect(proxy);
206
+ }
207
+ }
208
+ }
209
+ async test_proxies() {
210
+ const proxies = this.pool.toArray().map((p) => {
211
+ const parts = p.proxy.split(':');
212
+ return { host: parts[0], port: parts[1] };
213
+ });
214
+ console.log('--- Testing Proxies ---');
215
+ let workingCount = 0;
216
+ let notWorkingCount = 0;
217
+ for (const proxy of proxies) {
218
+ console.log(`Testing proxy ${proxy.host}:${proxy.port}...`);
219
+ const response = await makeRequestWithProxy(proxy);
220
+ if (response?.ip === proxy.host) {
221
+ console.log(`Proxy ${proxy.host}:${proxy.port} is working.`);
222
+ workingCount++;
223
+ }
224
+ else {
225
+ console.log(`Proxy ${proxy.host}:${proxy.port} is not working.`);
226
+ notWorkingCount++;
227
+ }
228
+ }
229
+ console.log('--- Statistics ---');
230
+ console.log(`Total proxies: ${proxies.length}`);
231
+ console.log(`Working proxies: ${workingCount}`);
232
+ console.log(`Not working proxies: ${notWorkingCount}`);
233
+ }
234
+ }
235
+ //# sourceMappingURL=ProxyRotator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyRotator.js","sourceRoot":"","sources":["../../src/ProxyRotator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export default class Queue<T> {
2
+ private items;
3
+ private frontIndex;
4
+ private backIndex;
5
+ enqueue(item: T): T;
6
+ dequeue(): T;
7
+ remove(index: number): T | 'Invalid index';
8
+ /** Remove item at position (0 = first in queue). */
9
+ removeAt(position: number): T | 'Invalid index';
10
+ peek(): T;
11
+ printQueue(): Record<number, T>;
12
+ toArray(): T[];
13
+ toObject(): Record<number, T>;
14
+ get size(): number;
15
+ }
16
+ //# sourceMappingURL=Queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../src/Queue.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,KAAK,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;IAMnB,OAAO,IAAI,CAAC;IAOZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,eAAe;IAa1C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,eAAe;IAO/C,IAAI,IAAI,CAAC;IAIT,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAI/B,OAAO,IAAI,CAAC,EAAE;IAQd,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAQ7B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,61 @@
1
+ export default class Queue {
2
+ constructor() {
3
+ this.items = {};
4
+ this.frontIndex = 0;
5
+ this.backIndex = 0;
6
+ }
7
+ enqueue(item) {
8
+ this.items[this.backIndex] = item;
9
+ this.backIndex++;
10
+ return item;
11
+ }
12
+ dequeue() {
13
+ const item = this.items[this.frontIndex];
14
+ delete this.items[this.frontIndex];
15
+ this.frontIndex++;
16
+ return item;
17
+ }
18
+ remove(index) {
19
+ if (index < this.frontIndex || index >= this.backIndex) {
20
+ return 'Invalid index';
21
+ }
22
+ const item = this.items[index];
23
+ for (let i = index; i < this.backIndex; i++) {
24
+ this.items[i] = this.items[i + 1];
25
+ }
26
+ delete this.items[this.backIndex - 1];
27
+ this.backIndex--;
28
+ return item;
29
+ }
30
+ /** Remove item at position (0 = first in queue). */
31
+ removeAt(position) {
32
+ if (position < 0 || position >= this.size) {
33
+ return 'Invalid index';
34
+ }
35
+ return this.remove(this.frontIndex + position);
36
+ }
37
+ peek() {
38
+ return this.items[this.frontIndex];
39
+ }
40
+ printQueue() {
41
+ return this.items;
42
+ }
43
+ toArray() {
44
+ const arr = [];
45
+ for (let i = this.frontIndex; i < this.backIndex; i++) {
46
+ arr.push(this.items[i]);
47
+ }
48
+ return arr;
49
+ }
50
+ toObject() {
51
+ const obj = {};
52
+ for (let i = this.frontIndex; i < this.backIndex; i++) {
53
+ obj[i] = this.items[i];
54
+ }
55
+ return obj;
56
+ }
57
+ get size() {
58
+ return this.backIndex - this.frontIndex;
59
+ }
60
+ }
61
+ //# sourceMappingURL=Queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/Queue.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,KAAK;IAA1B;QACU,UAAK,GAAsB,EAAE,CAAC;QAC9B,eAAU,GAAG,CAAC,CAAC;QACf,cAAS,GAAG,CAAC,CAAC;IA+DxB,CAAC;IA7DC,OAAO,CAAC,IAAO;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvD,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,QAAQ,CAAC,QAAgB;QACvB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,OAAO;QACL,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ;QACN,MAAM,GAAG,GAAsB,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export interface ProxyConfig {
2
+ host: string;
3
+ port: string;
4
+ protocol?: string;
5
+ }
6
+ export default function makeRequestWithProxy(proxy: ProxyConfig): Promise<{
7
+ ip: string;
8
+ } | null>;
9
+ //# sourceMappingURL=makeRequestWithProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRequestWithProxy.d.ts","sourceRoot":"","sources":["../../../src/utils/makeRequestWithProxy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAA8B,oBAAoB,CAChD,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAchC"}
@@ -0,0 +1,18 @@
1
+ import axios from 'axios';
2
+ export default async function makeRequestWithProxy(proxy) {
3
+ try {
4
+ const response = await axios.get('https://api.ipify.org?format=json', {
5
+ proxy: {
6
+ host: proxy.host,
7
+ port: Number(proxy.port),
8
+ protocol: 'http',
9
+ },
10
+ });
11
+ console.log(response.data);
12
+ return response.data;
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ //# sourceMappingURL=makeRequestWithProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRequestWithProxy.js","sourceRoot":"","sources":["../../../src/utils/makeRequestWithProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,oBAAoB,CAChD,KAAkB;IAElB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,mCAAmC,EAAE;YACpE,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBACxB,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,QAAQ,CAAC,IAAsB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../test/test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ import ProxyRotator from '../index.js';
2
+ import assert from 'assert';
3
+ const test_proxies = [
4
+ '139.59.1.14:8080',
5
+ '94.45.74.60:8080',
6
+ '161.35.70.249:3128',
7
+ '217.182.170.224:80',
8
+ '222.138.76.6:9002',
9
+ '218.252.206.89:80',
10
+ '18.214.66.210:80',
11
+ '120.234.203.171:9002',
12
+ ];
13
+ describe('read form proxy files', () => {
14
+ it('reading file with newlines', () => {
15
+ const proxies_file = './assets/http_proxies_with_newlines.txt';
16
+ const rotator_with_newlines = new ProxyRotator(proxies_file);
17
+ const pool = rotator_with_newlines.getPool();
18
+ assert.deepEqual(test_proxies, pool);
19
+ });
20
+ it('reading file with spaces', () => {
21
+ const proxies_file = './assets/http_proxies_with_spaces.txt';
22
+ const rotator_with_spaces = new ProxyRotator(proxies_file);
23
+ const pool = rotator_with_spaces.getPool();
24
+ assert.deepEqual(test_proxies, pool);
25
+ });
26
+ it('reading file with commas', () => {
27
+ const proxies_file = './assets/http_proxies_with_commas.txt';
28
+ const rotator_with_commas = new ProxyRotator(proxies_file);
29
+ const pool = rotator_with_commas.getPool();
30
+ assert.deepEqual(test_proxies, pool);
31
+ });
32
+ });
33
+ describe('basic functionality', () => {
34
+ it('add proxies array', () => {
35
+ const rotator = new ProxyRotator(test_proxies);
36
+ assert.deepEqual(test_proxies, rotator.getPool());
37
+ });
38
+ it('add proxy one by one ', () => {
39
+ const rotator = new ProxyRotator();
40
+ for (const proxy of test_proxies)
41
+ rotator.add(proxy);
42
+ assert.deepEqual(test_proxies, rotator.getPool());
43
+ });
44
+ it('remove one', () => {
45
+ const rotator = new ProxyRotator(test_proxies);
46
+ const removed = test_proxies.filter((e) => e !== test_proxies[3]);
47
+ rotator.remove(test_proxies[3]);
48
+ assert.deepEqual(removed, rotator.getPool());
49
+ });
50
+ it('remove proxy one by one ', () => {
51
+ const rotator = new ProxyRotator(test_proxies);
52
+ for (const proxy of test_proxies)
53
+ rotator.remove(proxy);
54
+ assert.deepEqual([], rotator.getPool());
55
+ });
56
+ it('set dead to graveyard', () => {
57
+ const rotator = new ProxyRotator(test_proxies);
58
+ rotator.setDead(test_proxies[3]);
59
+ assert.deepEqual(rotator.getGraveyard().includes(test_proxies[3]), true);
60
+ });
61
+ it('set dead remove from pool', () => {
62
+ const rotator = new ProxyRotator(test_proxies);
63
+ rotator.setDead(test_proxies[3]);
64
+ assert.equal(rotator.getPool().includes(test_proxies[3]), false);
65
+ });
66
+ it('resurect proxy from graveyard', () => {
67
+ const rotator = new ProxyRotator(test_proxies);
68
+ rotator.setDead(test_proxies[3]);
69
+ rotator.resurect(test_proxies[3]);
70
+ assert.equal(rotator.getPool().includes(test_proxies[3]), true);
71
+ });
72
+ it('set dead proxy alive', () => {
73
+ const rotator = new ProxyRotator(test_proxies);
74
+ rotator.setDead(test_proxies[3]);
75
+ rotator.setAlive(test_proxies[3]);
76
+ assert.equal(rotator.getPool().includes(test_proxies[3]), true);
77
+ });
78
+ it('get alive', () => {
79
+ const rotator = new ProxyRotator(test_proxies);
80
+ rotator.setAlive(test_proxies[3]);
81
+ const proxy = rotator.getAlive();
82
+ assert.equal(proxy, test_proxies[3]);
83
+ });
84
+ it('test rotation', () => {
85
+ const rotator = new ProxyRotator(test_proxies);
86
+ const removed = test_proxies.filter((e) => e !== test_proxies[3]);
87
+ rotator.setDead(test_proxies[3]);
88
+ for (let i = 0; i < removed.length; i++) {
89
+ const proxy = rotator.next();
90
+ assert.equal(proxy, removed[i]);
91
+ }
92
+ });
93
+ it('resurect timer', function (done) {
94
+ this.timeout(1100);
95
+ const rotator = new ProxyRotator(test_proxies, { revive_timer: 1000 });
96
+ rotator.setDead(test_proxies[3]);
97
+ setTimeout(() => {
98
+ assert.equal(rotator.getPool().includes(test_proxies[3]), true);
99
+ done();
100
+ }, 1000);
101
+ });
102
+ });
103
+ describe('Test return type', () => {
104
+ it('test default return string type', () => {
105
+ const rotator = new ProxyRotator(test_proxies);
106
+ const proxy = rotator.next();
107
+ assert.equal(typeof proxy, 'string');
108
+ });
109
+ it('test if it return object when passed returnAs obj', () => {
110
+ const rotator = new ProxyRotator(test_proxies, { returnAs: 'object' });
111
+ const proxy = rotator.next();
112
+ assert.equal(typeof proxy, 'object');
113
+ });
114
+ it('test if it return obj when passed as paramter', () => {
115
+ const rotator = new ProxyRotator(test_proxies);
116
+ const proxy = rotator.next({ returnAs: 'obj' });
117
+ assert.equal(typeof proxy, 'object');
118
+ const proxy2 = rotator.next({ returnAs: 'str' });
119
+ assert.equal(typeof proxy2, 'string');
120
+ });
121
+ });
122
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../test/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test_proxies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_proxies.d.ts","sourceRoot":"","sources":["../../test/test_proxies.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import ProxyRotator from '../index.js';
2
+ import assert from 'assert';
3
+ const test_proxies = [
4
+ '139.59.1.14:8080',
5
+ '94.45.74.60:8080',
6
+ '161.35.70.249:3128',
7
+ '217.182.170.224:80',
8
+ '222.138.76.6:9002',
9
+ '218.252.206.89:80',
10
+ '18.214.66.210:80',
11
+ '120.234.203.171:9002',
12
+ ];
13
+ describe('testing testing proxies', () => {
14
+ it('testing proxeis', async () => {
15
+ const rotator = new ProxyRotator(test_proxies);
16
+ await rotator.test();
17
+ assert.deepEqual(test_proxies, rotator.getPool());
18
+ });
19
+ });
20
+ //# sourceMappingURL=test_proxies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_proxies.js","sourceRoot":"","sources":["../../test/test_proxies.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,YAAY,GAAG;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,sBAAsB;CACvB,CAAC;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,20 @@
1
1
  {
2
2
  "name": "proxy-rotator-js",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "type": "module",
5
5
  "description": "Proxy Rotator",
6
- "main": "index.js",
6
+ "main": "dist/cjs/index.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "files": ["dist"],
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "require": "./dist/cjs/index.cjs",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ }
17
+ },
7
18
  "directories": {
8
19
  "test": "test"
9
20
  },
@@ -96,10 +107,18 @@
96
107
  "yocto-queue": "^0.1.0"
97
108
  },
98
109
  "devDependencies": {
99
- "mocha": "^10.2.0"
110
+ "@types/chai": "^4.3.0",
111
+ "@types/mocha": "^10.0.0",
112
+ "@types/node": "^20.0.0",
113
+ "mocha": "^10.2.0",
114
+ "tsx": "^4.7.0",
115
+ "typescript": "^5.3.0"
100
116
  },
101
117
  "scripts": {
102
- "test": "mocha"
118
+ "build": "tsc && tsc -p tsconfig.cjs.json && node scripts/fix-cjs.cjs",
119
+ "test": "tsc && mocha dist/test/*.js",
120
+ "test:consumer": "npm run build && cd test-consumer && npm install && node require.cjs && node import.js && npx tsx import.ts",
121
+ "prepublishOnly": "npm run build"
103
122
  },
104
123
  "author": "Goran Topic",
105
124
  "license": "ISC"
@@ -1 +0,0 @@
1
- 139.59.1.14:8080, 94.45.74.60:8080, 161.35.70.249:3128, 217.182.170.224:80, 222.138.76.6:9002, 218.252.206.89:80, 18.214.66.210:80, 120.234.203.171:9002