proxy-pool-manager 1.0.0

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.
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * FileStreamRotator
3
+ * Copyright(c) 2012-2017 Holiday Extras.
4
+ * Copyright(c) 2017 Roger C.
5
+ * MIT Licensed
6
+ */
7
+
8
+ /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
9
+
10
+ //! moment.js
11
+
12
+ //! moment.js locale configuration
@@ -0,0 +1,71 @@
1
+ import { ProxyItem, MongoConfig } from "./types";
2
+ import { Document } from "mongoose";
3
+ export interface ProxyDocument extends ProxyItem, Document {
4
+ }
5
+ export declare class MongoProxyManager {
6
+ private static instances;
7
+ private ProxyModel;
8
+ private config;
9
+ private isConnected;
10
+ private connectPromise;
11
+ private logLevel;
12
+ private connectionAttempts;
13
+ private maxConnectionAttempts;
14
+ private constructor();
15
+ /**
16
+ * 带重试的连接方法
17
+ */
18
+ private connectWithRetry;
19
+ static getInstance(config: MongoConfig): MongoProxyManager;
20
+ /**
21
+ * 统一的日志记录方法(通过服务定位器)
22
+ */
23
+ private log;
24
+ /**
25
+ * 确保连接的方法
26
+ */
27
+ ensureConnected(): Promise<void>;
28
+ connect(): Promise<void>;
29
+ disconnect(): Promise<void>;
30
+ checkConnection(): Promise<boolean>;
31
+ findAll(filter?: Record<string, any>): Promise<ProxyItem[]>;
32
+ findByUrl(url: string): Promise<ProxyItem | null>;
33
+ upsert(proxy: ProxyItem): Promise<ProxyItem>;
34
+ updateByUrl(url: string, updates: Partial<ProxyItem>): Promise<ProxyItem | null>;
35
+ bulkUpsert(proxies: ProxyItem[]): Promise<void>;
36
+ bulkUpdateByUrl(updates: Array<{
37
+ url: string;
38
+ data: Partial<ProxyItem>;
39
+ }>): Promise<void>;
40
+ bulkInsert(proxies: ProxyItem[]): Promise<{
41
+ insertedCount: number;
42
+ }>;
43
+ delete(url: string): Promise<boolean>;
44
+ clear(): Promise<void>;
45
+ updateMany(filter: Partial<ProxyItem>, updates: Partial<ProxyItem>): Promise<number>;
46
+ /**
47
+ * 按条件查询代理,并支持限制返回数量
48
+ * @param filter 查询条件
49
+ * @param limit 最大返回数量,0 表示无限制
50
+ * @param skip 跳过的记录数
51
+ */
52
+ findLimited(filter?: Record<string, any>, limit?: number, skip?: number): Promise<ProxyItem[]>;
53
+ /**
54
+ * 删除所有状态为 invalid 的代理
55
+ */
56
+ deleteInvalidProxies(): Promise<number>;
57
+ /**
58
+ * 根据条件删除代理
59
+ */
60
+ deleteByCondition(filter: Record<string, any>): Promise<number>;
61
+ /**
62
+ * 获取代理统计信息
63
+ */
64
+ getStats(): Promise<{
65
+ total: number;
66
+ valid: number;
67
+ invalid: number;
68
+ avgResponseTime: number;
69
+ }>;
70
+ }
71
+ //# sourceMappingURL=mongoUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoUtils.d.ts","sourceRoot":"","sources":["../src/mongoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAY,MAAM,SAAS,CAAC;AAE3D,OAAiB,EAAE,QAAQ,EAA8B,MAAM,UAAU,CAAC;AAG1E,MAAM,WAAW,aAAc,SAAQ,SAAS,EAAE,QAAQ;CAAI;AAwB9D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IACrE,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAa;IAE1C,OAAO;IAOP;;KAEC;YACa,gBAAgB;WAqDhB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB;IASjE;;KAEC;IACD,OAAO,CAAC,GAAG;IAiBX;;KAEC;IACY,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC,OAAO,CAAC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO/D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAOjD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAW5C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0BhF,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/C,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzF,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,UAAU,CACrB,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAC1B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,OAAO,CAAC,MAAM,CAAC;IAUlB;;;;;OAKG;IACU,WAAW,CACtB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,KAAK,GAAE,MAAU,EACjB,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,SAAS,EAAE,CAAC;IAYvB;;KAEC;IACY,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOpD;;OAEG;IACU,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5E;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CAgBH"}
@@ -0,0 +1,179 @@
1
+ import { ProxyStrategy, ProxyItem, ProxyManagerOptions, LogLevel } from "./types";
2
+ export declare class ProxyManager {
3
+ private static instance;
4
+ private static instanceLock;
5
+ private proxies;
6
+ private currentProxyIndex;
7
+ private proxyLimit;
8
+ private proxyCheckEnabled;
9
+ private proxyStrategy;
10
+ private usedProxies;
11
+ private proxyCheckOptions;
12
+ private availableProxies;
13
+ private checkInProgress;
14
+ private maxConcurrentChecks;
15
+ private mongoClient;
16
+ private asyncQueue;
17
+ private isInitialized;
18
+ private initializationPromise;
19
+ private currentPage;
20
+ private pageSize;
21
+ private hasMorePages;
22
+ private totalLoaded;
23
+ private logLevel;
24
+ private constructor();
25
+ /**
26
+ * 异步初始化方法
27
+ */
28
+ private initializeAsync;
29
+ /**
30
+ * 等待初始化完成
31
+ */
32
+ waitForInitialization(): Promise<void>;
33
+ /**
34
+ * 同步添加代理到内存(异步保存到数据库)
35
+ */
36
+ private addProxySync;
37
+ static getInstance(options?: ProxyManagerOptions): ProxyManager;
38
+ static resetInstance(): void;
39
+ private log;
40
+ /**
41
+ * 设置日志等级
42
+ */
43
+ setLogLevel(level: LogLevel): void;
44
+ /**
45
+ * 获取当前日志等级
46
+ */
47
+ getLogLevel(): LogLevel;
48
+ /**
49
+ * 从数据库加载代理(支持分页查询)
50
+ * @param limit 最大加载数量,默认 0 表示加载全部
51
+ * @param query 查询条件
52
+ * @param forceReset 是否强制重置分页(从第一页开始)
53
+ */
54
+ private loadProxiesFromDB;
55
+ /**
56
+ * 手动加载下一页代理
57
+ */
58
+ loadNextPage(): Promise<number>;
59
+ /**
60
+ * 重置分页状态并重新加载第一页
61
+ */
62
+ resetPagination(): Promise<void>;
63
+ /**
64
+ * 获取分页状态信息
65
+ */
66
+ getPaginationInfo(): {
67
+ currentPage: number;
68
+ pageSize: number;
69
+ hasMorePages: boolean;
70
+ totalLoaded: number;
71
+ totalInMemory: number;
72
+ };
73
+ /**
74
+ * 添加新代理
75
+ */
76
+ addProxy(proxyUrl: string): Promise<ProxyItem | null>;
77
+ /**
78
+ * 删除代理
79
+ */
80
+ deleteProxy(proxyUrl: string): Promise<boolean>;
81
+ /**
82
+ * 删除所有无效代理
83
+ */
84
+ deleteInvalidProxies(): Promise<number>;
85
+ /**
86
+ * 独立的代理检测方法,不依赖Request服务
87
+ */
88
+ private standaloneProxyCheck;
89
+ private taskHandler;
90
+ /**
91
+ * 检查所有代理的可用性并更新状态
92
+ */
93
+ private checkAllProxies;
94
+ /**
95
+ * 获取当前代理
96
+ */
97
+ getCurrentProxy(): string | null;
98
+ /**
99
+ * 根据策略选择代理
100
+ */
101
+ selectProxy(): string | null;
102
+ /**
103
+ * 轮换到下一个代理(失败时调用)
104
+ */
105
+ rotateProxy(): Promise<string | null>;
106
+ /**
107
+ * 记录代理请求结果
108
+ */
109
+ recordProxyUsage(proxyUrl: string, success: boolean, responseTime: number): Promise<void>;
110
+ /**
111
+ * 重置代理使用记录
112
+ */
113
+ resetProxyUsage(): void;
114
+ /**
115
+ * 设置代理策略
116
+ */
117
+ setProxyStrategy(strategy: ProxyStrategy): void;
118
+ /**
119
+ * 增强的代理检测方法
120
+ */
121
+ enhancedProxyCheck(proxy: string): Promise<boolean>;
122
+ /**
123
+ * 设置最大并发检查数
124
+ */
125
+ setMaxConcurrentChecks(maxConcurrentChecks: number): void;
126
+ /**
127
+ * 获取队列统计信息
128
+ */
129
+ getQueueStats(): import("./types").QueueStats;
130
+ /**
131
+ * 暂停代理检测队列
132
+ */
133
+ pauseProxyChecks(): void;
134
+ /**
135
+ * 恢复代理检测队列
136
+ */
137
+ resumeProxyChecks(): void;
138
+ /**
139
+ * 检查单个代理可用性
140
+ */
141
+ checkProxy(proxy?: string): Promise<boolean>;
142
+ /**
143
+ * 获取可用代理
144
+ */
145
+ getAvailableProxy(): string | null;
146
+ /**
147
+ * 判断是否应该轮换代理
148
+ */
149
+ shouldRotateProxy(error: any): boolean;
150
+ /**
151
+ * 手动触发所有代理检测
152
+ */
153
+ triggerProxyCheck(): Promise<void>;
154
+ /**
155
+ * 获取当前可用代理列表
156
+ */
157
+ getAvailableProxiesList(): string[];
158
+ /**
159
+ * 获取代理详细信息
160
+ */
161
+ getProxyDetails(proxyUrl: string): ProxyItem | undefined;
162
+ /**
163
+ * 获取代理数量统计
164
+ */
165
+ getProxiesCount(): number;
166
+ /**
167
+ * 获取代理策略
168
+ */
169
+ getProxyStrategy(): ProxyStrategy;
170
+ /**
171
+ * 获取当前代理索引
172
+ */
173
+ getCurrentProxyIndex(): number;
174
+ /**
175
+ * 清理资源
176
+ */
177
+ destroy(): Promise<void>;
178
+ }
179
+ //# sourceMappingURL=proxyManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxyManager.d.ts","sourceRoot":"","sources":["../src/proxyManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ export type BrowserImpersonate = 'chrome' | 'firefox' | 'safari' | 'edge';
2
+ export type ProxyStrategy = 'sequential' | 'random' | 'failover';
3
+ export type LogLevel = 'none' | 'error' | 'warn' | 'info' | 'debug' | 'verbose';
4
+ export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
5
+ export type LogType = 'debug' | 'error' | 'both' | 'none';
6
+ export interface ProxyItem {
7
+ url: string;
8
+ totalRequests: number;
9
+ failCount: number;
10
+ avgResponseTime: number;
11
+ lastCheckTime: number;
12
+ consecutiveFails: number;
13
+ status: 'valid' | 'invalid';
14
+ }
15
+ export interface ProxyCheckOptions {
16
+ mainUrl: string;
17
+ testUrls?: string[];
18
+ timeout?: number;
19
+ successStatusCodes?: number[];
20
+ maxConsecutiveFails?: number;
21
+ maxResponseTime?: number;
22
+ }
23
+ export interface ProxyManagerOptions {
24
+ reqUrl?: string;
25
+ proxies?: string[];
26
+ proxy?: string;
27
+ impersonate?: BrowserImpersonate;
28
+ logLevel?: LogLevel;
29
+ proxyCheckEnabled?: boolean;
30
+ proxyStrategy?: ProxyStrategy;
31
+ timeout?: number;
32
+ proxyCheckOptions?: ProxyCheckOptions;
33
+ mongoUri?: string;
34
+ maxConcurrentChecks?: number;
35
+ proxyLimit?: number;
36
+ instanceId?: string;
37
+ }
38
+ export interface RequestInitOptions {
39
+ logLevel?: LogLevel;
40
+ mongoUri?: string;
41
+ proxyStrategy?: ProxyStrategy;
42
+ maxRetries?: number;
43
+ timeout?: number;
44
+ proxy?: string;
45
+ instanceId?: string;
46
+ }
47
+ export interface RequestOptions {
48
+ url?: string;
49
+ method?: HTTPMethod;
50
+ headers?: Record<string, string>;
51
+ data?: Record<string, string>;
52
+ params?: Record<string, string>;
53
+ timeout?: number;
54
+ proxy?: string;
55
+ }
56
+ export interface HttpResponse<T = unknown> {
57
+ status: number;
58
+ statusText: string;
59
+ headers: Record<string, string>;
60
+ data: T;
61
+ error: string | null;
62
+ errors: unknown[];
63
+ text(): string;
64
+ json(): T;
65
+ buffer(): Buffer;
66
+ }
67
+ export interface RequestConfig {
68
+ url: string;
69
+ method: HTTPMethod;
70
+ options: RequestOptions;
71
+ }
72
+ export interface PythonResponse {
73
+ status_code: number;
74
+ success: boolean;
75
+ headers: Record<string, string>;
76
+ data?: unknown;
77
+ error?: unknown;
78
+ timestamp: string;
79
+ }
80
+ export interface MongoConfig {
81
+ uri: string;
82
+ logLevel?: LogLevel;
83
+ }
84
+ export interface AsyncQueueOptions<T = any> {
85
+ logLevel?: LogLevel;
86
+ concurrency?: number;
87
+ autoStart?: boolean;
88
+ onDrain?: () => void;
89
+ onError?: (error: Error) => void;
90
+ onSuccess?: (result: T) => void;
91
+ taskHandler?: (task: Task) => Promise<T>;
92
+ }
93
+ export interface QueueStats {
94
+ length: number;
95
+ running: number;
96
+ concurrency: number;
97
+ idle: boolean;
98
+ }
99
+ export type Task = any;
100
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC1E,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AACjE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAChF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AACrE,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAI1D,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CAErB;AAGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,IAAI,IAAI,MAAM,CAAC;IACf,IAAI,IAAI,CAAC,CAAC;IACV,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAGD,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,GAAG;IACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type LogLevel = 'info' | 'debug' | 'warn' | 'error' | 'none';
2
+ export declare function getFormattedDate(includeTime?: boolean): string;
3
+ export declare function getMainDirectory(): string;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,OAAe,GAAG,MAAM,CAcrE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "proxy-pool-manager",
3
+ "version": "1.0.0",
4
+ "description": "proxy manager",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "package.json"
10
+ ],
11
+ "scripts": {
12
+ "build": "webpack --mode=production",
13
+ "dev": "webpack --mode=development",
14
+ "watch": "webpack --watch --mode=development",
15
+ "build:analyze": "webpack --mode=production --analyze"
16
+ },
17
+ "author": "memeak",
18
+ "license": "ISC",
19
+ "devDependencies": {
20
+ "@types/node": "^22.5.4",
21
+ "@webpack-cli/generators": "^3.0.7",
22
+ "async": "^3.2.6",
23
+ "clean-webpack-plugin": "^4.0.0",
24
+ "mongoose": "^7.8.7",
25
+ "node-fetch": "^2.7.0",
26
+ "ts-loader": "^9.5.1",
27
+ "typescript": "^5.6.2",
28
+ "webpack": "^5.94.0",
29
+ "webpack-cli": "^5.1.4"
30
+ },
31
+ "dependencies": {
32
+ "winston": "^3.18.3",
33
+ "winston-daily-rotate-file": "^5.0.0"
34
+ },
35
+ "packageManager": "pnpm@10.18.2+sha512.9fb969fa749b3ade6035e0f109f0b8a60b5d08a1a87fdf72e337da90dcc93336e2280ca4e44f2358a649b83c17959e9993e777c2080879f3801e6f0d999ad3dd"
36
+ }