proxy-rotator-js 1.1.1 → 1.3.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 (66) hide show
  1. package/README.md +87 -23
  2. package/assets/GeoLite2-Country.mmdb +0 -0
  3. package/dist/cjs/index.cjs +12 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/{src/Proxy.js → dist/cjs/src/Proxy.cjs} +28 -32
  6. package/dist/cjs/src/Proxy.cjs.map +1 -0
  7. package/dist/cjs/src/ProxyRotator.cjs +323 -0
  8. package/dist/cjs/src/ProxyRotator.cjs.map +1 -0
  9. package/dist/cjs/src/Queue.cjs +64 -0
  10. package/dist/cjs/src/Queue.cjs.map +1 -0
  11. package/dist/cjs/src/utils/geo.cjs +31 -0
  12. package/dist/cjs/src/utils/geo.cjs.map +1 -0
  13. package/dist/cjs/src/utils/makeRequestWithProxy.cjs +26 -0
  14. package/dist/cjs/src/utils/makeRequestWithProxy.cjs.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +5 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/src/Proxy.d.ts +44 -0
  20. package/dist/src/Proxy.d.ts.map +1 -0
  21. package/dist/src/Proxy.js +100 -0
  22. package/dist/src/Proxy.js.map +1 -0
  23. package/dist/src/ProxyRotator.d.ts +104 -0
  24. package/dist/src/ProxyRotator.d.ts.map +1 -0
  25. package/dist/src/ProxyRotator.js +317 -0
  26. package/dist/src/ProxyRotator.js.map +1 -0
  27. package/dist/src/Queue.d.ts +16 -0
  28. package/dist/src/Queue.d.ts.map +1 -0
  29. package/dist/src/Queue.js +61 -0
  30. package/dist/src/Queue.js.map +1 -0
  31. package/dist/src/utils/geo.d.ts +7 -0
  32. package/dist/src/utils/geo.d.ts.map +1 -0
  33. package/dist/src/utils/geo.js +25 -0
  34. package/dist/src/utils/geo.js.map +1 -0
  35. package/dist/src/utils/makeRequestWithProxy.d.ts +13 -0
  36. package/dist/src/utils/makeRequestWithProxy.d.ts.map +1 -0
  37. package/dist/src/utils/makeRequestWithProxy.js +20 -0
  38. package/dist/src/utils/makeRequestWithProxy.js.map +1 -0
  39. package/dist/test/status.d.ts +2 -0
  40. package/dist/test/status.d.ts.map +1 -0
  41. package/dist/test/status.js +103 -0
  42. package/dist/test/status.js.map +1 -0
  43. package/dist/test/status_and_test_output.d.ts +2 -0
  44. package/dist/test/status_and_test_output.d.ts.map +1 -0
  45. package/dist/test/status_and_test_output.js +110 -0
  46. package/dist/test/status_and_test_output.js.map +1 -0
  47. package/dist/test/test.d.ts +2 -0
  48. package/dist/test/test.d.ts.map +1 -0
  49. package/dist/test/test.js +122 -0
  50. package/dist/test/test.js.map +1 -0
  51. package/dist/test/test_proxies.d.ts +2 -0
  52. package/dist/test/test_proxies.d.ts.map +1 -0
  53. package/dist/test/test_proxies.js +20 -0
  54. package/dist/test/test_proxies.js.map +1 -0
  55. package/dist/test/test_proxies_output.d.ts +2 -0
  56. package/dist/test/test_proxies_output.d.ts.map +1 -0
  57. package/dist/test/test_proxies_output.js +62 -0
  58. package/dist/test/test_proxies_output.js.map +1 -0
  59. package/package.json +29 -4
  60. package/index.js +0 -2
  61. package/src/ProxyRotator.js +0 -239
  62. package/src/Queue.js +0 -61
  63. package/src/utils/makeRequestWithProxy.js +0 -21
  64. package/test/options.js +0 -32
  65. package/test/test.js +0 -204
  66. package/test/test_proxies.js +0 -22
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class Queue {
4
+ constructor() {
5
+ this.items = {};
6
+ this.frontIndex = 0;
7
+ this.backIndex = 0;
8
+ }
9
+ enqueue(item) {
10
+ this.items[this.backIndex] = item;
11
+ this.backIndex++;
12
+ return item;
13
+ }
14
+ dequeue() {
15
+ const item = this.items[this.frontIndex];
16
+ delete this.items[this.frontIndex];
17
+ this.frontIndex++;
18
+ return item;
19
+ }
20
+ remove(index) {
21
+ if (index < this.frontIndex || index >= this.backIndex) {
22
+ return 'Invalid index';
23
+ }
24
+ const item = this.items[index];
25
+ for (let i = index; i < this.backIndex; i++) {
26
+ this.items[i] = this.items[i + 1];
27
+ }
28
+ delete this.items[this.backIndex - 1];
29
+ this.backIndex--;
30
+ return item;
31
+ }
32
+ /** Remove item at position (0 = first in queue). */
33
+ removeAt(position) {
34
+ if (position < 0 || position >= this.size) {
35
+ return 'Invalid index';
36
+ }
37
+ return this.remove(this.frontIndex + position);
38
+ }
39
+ peek() {
40
+ return this.items[this.frontIndex];
41
+ }
42
+ printQueue() {
43
+ return this.items;
44
+ }
45
+ toArray() {
46
+ const arr = [];
47
+ for (let i = this.frontIndex; i < this.backIndex; i++) {
48
+ arr.push(this.items[i]);
49
+ }
50
+ return arr;
51
+ }
52
+ toObject() {
53
+ const obj = {};
54
+ for (let i = this.frontIndex; i < this.backIndex; i++) {
55
+ obj[i] = this.items[i];
56
+ }
57
+ return obj;
58
+ }
59
+ get size() {
60
+ return this.backIndex - this.frontIndex;
61
+ }
62
+ }
63
+ exports.default = Queue;
64
+ //# sourceMappingURL=Queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../src/Queue.ts"],"names":[],"mappings":";;AAAA,MAAqB,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;AAlED,wBAkEC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCountryFromIp = getCountryFromIp;
7
+ const maxmind_1 = __importDefault(require("maxmind"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function getDbPath() {
10
+ return (process.env.GEO_DB_PATH ||
11
+ path_1.default.join(process.cwd(), 'assets', 'GeoLite2-Country.mmdb'));
12
+ }
13
+ let _reader = null;
14
+ async function getReader() {
15
+ if (!_reader) {
16
+ _reader = await maxmind_1.default.open(getDbPath());
17
+ }
18
+ return _reader;
19
+ }
20
+ async function getCountryFromIp(ip) {
21
+ const reader = await getReader();
22
+ const result = reader.get(ip);
23
+ if (!result?.country)
24
+ return null;
25
+ return {
26
+ iso: result.country.iso_code ?? 'Unknown',
27
+ name: result.country.names?.en ?? 'Unknown',
28
+ continent: result.continent?.code ?? 'Unknown',
29
+ };
30
+ }
31
+ //# sourceMappingURL=geo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo.js","sourceRoot":"","sources":["../../../../src/utils/geo.ts"],"names":[],"mappings":";;;;;AAyBA,4CAWC;AApCD,sDAAqE;AACrE,gDAAwB;AAExB,SAAS,SAAS;IAChB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,IAAI,OAAO,GAAmC,IAAI,CAAC;AAEnD,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,MAAM,iBAAO,CAAC,IAAI,CAAkB,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQM,KAAK,UAAU,gBAAgB,CAAC,EAAU;IAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE9B,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS;QACzC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,SAAS;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,IAAI,SAAS;KAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = makeRequestWithProxy;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ async function makeRequestWithProxy(proxy, options = {}) {
9
+ try {
10
+ const response = await axios_1.default.get('https://api.ipify.org?format=json', {
11
+ proxy: {
12
+ host: proxy.host,
13
+ port: Number(proxy.port),
14
+ protocol: 'http',
15
+ },
16
+ });
17
+ if (!options.quiet) {
18
+ console.log(response.data);
19
+ }
20
+ return response.data;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ //# sourceMappingURL=makeRequestWithProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeRequestWithProxy.js","sourceRoot":"","sources":["../../../../src/utils/makeRequestWithProxy.ts"],"names":[],"mappings":";;;;;AAaA,uCAmBC;AAhCD,kDAA0B;AAaX,KAAK,UAAU,oBAAoB,CAChD,KAAkB,EAClB,UAAuC,EAAE;IAEzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,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,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,QAAQ,CAAC,IAAsB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import ProxyRotator from './src/ProxyRotator.js';
2
+ import Proxy from './src/Proxy.js';
3
+ export default ProxyRotator;
4
+ export { ProxyRotator, Proxy };
5
+ export type { ProxyRotatorOptions, ReturnAs, PoolStatus, ProxyTestResult, ProxyTestResults, } from './src/ProxyRotator.js';
6
+ export type { ProxyStatus, ProxyInfo, ProxyObj } from './src/Proxy.js';
7
+ export type { GeoCountry } from './src/utils/geo.js';
8
+ export type { ProxyConfig } from './src/utils/makeRequestWithProxy.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAE/B,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import ProxyRotator from './src/ProxyRotator.js';
2
+ import Proxy from './src/Proxy.js';
3
+ export default ProxyRotator;
4
+ export { ProxyRotator, Proxy };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { GeoCountry } from './utils/geo.js';
2
+ export type ProxyStatus = 'new' | 'alive' | 'dead';
3
+ export interface ProxyInfo {
4
+ protocol: string | null;
5
+ ip: string;
6
+ host: string;
7
+ port: string;
8
+ country?: GeoCountry | null;
9
+ }
10
+ export interface ProxyObj extends ProxyInfo {
11
+ status: ProxyStatus;
12
+ changeTimeStamp: number;
13
+ }
14
+ export default class Proxy {
15
+ readonly protocol: string | null;
16
+ readonly ip: string;
17
+ readonly host: string;
18
+ readonly port: string;
19
+ readonly proxy: string;
20
+ status: ProxyStatus;
21
+ changeTimeStamp: number;
22
+ country: GeoCountry | null;
23
+ constructor(proxy: string, protocol?: string | null, assumeAlive?: boolean, country?: GeoCountry | null);
24
+ toString(): string;
25
+ get(): ProxyInfo;
26
+ obj(): ProxyObj;
27
+ setCountry(country: GeoCountry | null): void;
28
+ kill(): void;
29
+ setDead(): void;
30
+ setAlive(): void;
31
+ setNew(): void;
32
+ isDead(): boolean;
33
+ isAlive(): boolean;
34
+ isNew(): boolean;
35
+ revive(): void;
36
+ reset(): void;
37
+ equals(proxy: string | Proxy): boolean;
38
+ timeSinceStatusChange(): number;
39
+ print(): void;
40
+ getIp(): string;
41
+ getPort(): string;
42
+ getProtocol(): string | null;
43
+ }
44
+ //# sourceMappingURL=Proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Proxy.d.ts","sourceRoot":"","sources":["../../src/Proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,UAAU,GAAG,IAAI,CAAQ;gBAGhC,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,WAAW,GAAE,OAAe,EAC5B,OAAO,GAAE,UAAU,GAAG,IAAW;IAmBnC,QAAQ,IAAI,MAAM;IAIlB,GAAG,IAAI,SAAS;IAUhB,GAAG,IAAI,QAAQ;IAYf,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAI5C,IAAI,IAAI,IAAI;IAKZ,OAAO,IAAI,IAAI;IAKf,QAAQ,IAAI,IAAI;IAKhB,MAAM,IAAI,IAAI;IAKd,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,OAAO;IAIhB,MAAM,IAAI,IAAI;IAKd,KAAK,IAAI,IAAI;IAKb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO;IAKtC,qBAAqB,IAAI,MAAM;IAI/B,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM,GAAG,IAAI;CAG7B"}
@@ -0,0 +1,100 @@
1
+ export default class Proxy {
2
+ constructor(proxy, protocol = null, assumeAlive = false, country = null) {
3
+ this.country = null;
4
+ if (proxy.includes('://')) {
5
+ this.protocol = proxy.split('://')[0];
6
+ this.ip = proxy.split('://')[1].split(':')[0];
7
+ this.host = this.ip;
8
+ this.port = proxy.split('://')[1].split(':')[1];
9
+ }
10
+ else {
11
+ this.protocol = protocol;
12
+ this.ip = proxy.split(':')[0];
13
+ this.host = this.ip;
14
+ this.port = proxy.split(':')[1];
15
+ }
16
+ this.proxy = `${this.protocol ? this.protocol + '://' : ''}${this.ip}:${this.port}`;
17
+ this.status = assumeAlive ? 'alive' : 'new';
18
+ this.changeTimeStamp = Date.now();
19
+ this.country = country ?? null;
20
+ }
21
+ toString() {
22
+ return `${this.protocol ? this.protocol + '://' : ''}${this.ip}:${this.port}`;
23
+ }
24
+ get() {
25
+ return {
26
+ protocol: this.protocol,
27
+ ip: this.ip,
28
+ host: this.host,
29
+ port: this.port,
30
+ country: this.country ?? undefined,
31
+ };
32
+ }
33
+ obj() {
34
+ return {
35
+ protocol: this.protocol,
36
+ ip: this.ip,
37
+ host: this.host,
38
+ port: this.port,
39
+ status: this.status,
40
+ changeTimeStamp: this.changeTimeStamp,
41
+ country: this.country ?? undefined,
42
+ };
43
+ }
44
+ setCountry(country) {
45
+ this.country = country;
46
+ }
47
+ kill() {
48
+ this.status = 'dead';
49
+ this.changeTimeStamp = Date.now();
50
+ }
51
+ setDead() {
52
+ this.status = 'dead';
53
+ this.changeTimeStamp = Date.now();
54
+ }
55
+ setAlive() {
56
+ this.status = 'alive';
57
+ this.changeTimeStamp = Date.now();
58
+ }
59
+ setNew() {
60
+ this.status = 'new';
61
+ this.changeTimeStamp = Date.now();
62
+ }
63
+ isDead() {
64
+ return this.status === 'dead';
65
+ }
66
+ isAlive() {
67
+ return this.status === 'alive';
68
+ }
69
+ isNew() {
70
+ return this.status === 'new';
71
+ }
72
+ revive() {
73
+ this.status = 'alive';
74
+ this.changeTimeStamp = Date.now();
75
+ }
76
+ reset() {
77
+ this.status = 'new';
78
+ this.changeTimeStamp = Date.now();
79
+ }
80
+ equals(proxy) {
81
+ const other = typeof proxy === 'string' ? new Proxy(proxy) : proxy;
82
+ return this.ip === other.ip && this.port === other.port;
83
+ }
84
+ timeSinceStatusChange() {
85
+ return Date.now() - this.changeTimeStamp;
86
+ }
87
+ print() {
88
+ console.log(this.get());
89
+ }
90
+ getIp() {
91
+ return this.ip;
92
+ }
93
+ getPort() {
94
+ return this.port;
95
+ }
96
+ getProtocol() {
97
+ return this.protocol;
98
+ }
99
+ }
100
+ //# sourceMappingURL=Proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/Proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import Proxy from './Proxy.js';
2
+ import type { ProxyObj } from './Proxy.js';
3
+ export type ReturnAs = 'string' | 'object';
4
+ /** Result from a single proxy test. */
5
+ export interface ProxyTestResult {
6
+ proxy: string;
7
+ working: boolean;
8
+ expectedIp: string;
9
+ actualIp: string | null;
10
+ error?: string;
11
+ }
12
+ /** Result from test_proxies(). */
13
+ export interface ProxyTestResults {
14
+ results: ProxyTestResult[];
15
+ summary: {
16
+ total: number;
17
+ working: number;
18
+ notWorking: number;
19
+ };
20
+ }
21
+ /** Status of the pool returned by status(). */
22
+ export interface PoolStatus {
23
+ pool: {
24
+ size: number;
25
+ proxies: string[];
26
+ };
27
+ graveyard: {
28
+ size: number;
29
+ proxies: string[];
30
+ };
31
+ config: {
32
+ revive_timer: number;
33
+ returnAs: ReturnAs;
34
+ protocol: string | null;
35
+ shuffle: boolean;
36
+ assume_aliveness: boolean;
37
+ check_on_next: boolean;
38
+ fetchGeo: boolean;
39
+ };
40
+ }
41
+ export interface ProxyRotatorOptions {
42
+ returnAs?: ReturnAs | 'str' | 'obj';
43
+ revive_timer?: number;
44
+ shuffle?: boolean;
45
+ protocol?: string | null;
46
+ assume_aliveness?: boolean;
47
+ check_on_next?: boolean;
48
+ /** If true, fetches country geolocation when adding proxies. Default true. */
49
+ fetchGeo?: boolean;
50
+ }
51
+ export default class ProxyRotator {
52
+ private pool;
53
+ private graveyard;
54
+ revive_timer: number;
55
+ returnAs: ReturnAs;
56
+ protocol: string | null;
57
+ shuffle: boolean;
58
+ assume_aliveness: boolean;
59
+ check_on_next: boolean;
60
+ fetchGeo: boolean;
61
+ constructor(proxies?: null | string | string[], options?: ProxyRotatorOptions);
62
+ getGraveyard(): string[];
63
+ getGraveyardSize(): number;
64
+ getPool(): string[];
65
+ getPoolSize(): number;
66
+ /** Returns the status of the pool as a JSON-serializable object. */
67
+ status(): PoolStatus;
68
+ add(proxies: string | string[]): Promise<void>;
69
+ /** Parse a file of proxies (newline-, space-, or comma-separated) and add each to the pool. */
70
+ add_file(filename: string): Promise<void>;
71
+ /** Fetch country geolocation for all proxies in pool and graveyard. */
72
+ refreshGeo(): Promise<void>;
73
+ private _add;
74
+ /** Treat a string as either a file path (add all proxies from file) or a single proxy "ip:port" / "protocol://ip:port". */
75
+ private _processOne;
76
+ /** Sync add used by constructor (no geo). Use add() for geo lookup. */
77
+ private _addSync;
78
+ /** True if the string is an existing file path. */
79
+ private _isFilePath;
80
+ remove(proxy: string | string[]): void;
81
+ private _remove;
82
+ getAlive(): string | undefined;
83
+ setAlive(proxy: string | Proxy): void;
84
+ resurect(proxy: string | Proxy): void;
85
+ setDead(proxy: string | Proxy): void;
86
+ kill(proxy: string | Proxy): void;
87
+ next(options?: {
88
+ returnAs?: ReturnAs | 'str' | 'obj';
89
+ }): string | ProxyObj | null;
90
+ private _shuffleArray;
91
+ private _handleReturnAsInput;
92
+ private _parseFile;
93
+ private _isArray;
94
+ private _resurection;
95
+ test_proxies(options?: {
96
+ /** "console" prints to stdout; "json" returns results. Default "console". */
97
+ output?: 'console' | 'json';
98
+ }): Promise<void | ProxyTestResults>;
99
+ test: (options?: {
100
+ /** "console" prints to stdout; "json" returns results. Default "console". */
101
+ output?: "console" | "json";
102
+ }) => Promise<void | ProxyTestResults>;
103
+ }
104
+ //# sourceMappingURL=ProxyRotator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyRotator.d.ts","sourceRoot":"","sources":["../../src/ProxyRotator.ts"],"names":[],"mappings":"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"}