@@ -8,15 +8,33 @@ import colors from "colors";
88
99// Helper function to convert date strings to Date objects in proxy metrics
1010const convertDates = ( proxy : IProxy ) : IProxy => {
11- Object . values ( proxy . providerMetrics ) . forEach ( ( providerMetrics ) => {
12- Object . values ( providerMetrics ) . forEach ( ( metrics ) => {
13- if ( metrics . lastSuccessTime ) {
14- metrics . lastSuccessTime = new Date ( metrics . lastSuccessTime ) ;
15- }
16- if ( metrics . lastFailureTime ) {
17- metrics . lastFailureTime = new Date ( metrics . lastFailureTime ) ;
18- }
19- } ) ;
11+ if ( ! proxy . providerMetrics ) {
12+ proxy . providerMetrics = { } ;
13+ return proxy ;
14+ }
15+
16+ Object . entries ( proxy . providerMetrics ) . forEach ( ( [ providerId , providerMetrics ] ) => {
17+ if ( ! providerMetrics ) {
18+ proxy . providerMetrics [ providerId ] = {
19+ healthScore : 50 ,
20+ consecutiveFailures : 0 ,
21+ successRate : 0 ,
22+ averageResponseTime : 0 ,
23+ successfulRequests : 0 ,
24+ totalRequests : 0 ,
25+ successStreak : 0 ,
26+ latencyScore : 50 ,
27+ } ;
28+ return ;
29+ }
30+
31+ // Convert timestamps to numbers if they're strings
32+ if ( providerMetrics . lastSuccessTime ) {
33+ providerMetrics . lastSuccessTime = typeof providerMetrics . lastSuccessTime === "string" ? new Date ( providerMetrics . lastSuccessTime ) . getTime ( ) : providerMetrics . lastSuccessTime ;
34+ }
35+ if ( providerMetrics . lastFailureTime ) {
36+ providerMetrics . lastFailureTime = typeof providerMetrics . lastFailureTime === "string" ? new Date ( providerMetrics . lastFailureTime ) . getTime ( ) : providerMetrics . lastFailureTime ;
37+ }
2038 } ) ;
2139 return proxy ;
2240} ;
@@ -53,31 +71,27 @@ export async function preloadProxies(): Promise<void> {
5371 }
5472
5573 // Only include proxies that have metrics for this specific provider
56- const convertedProxies = typeProxies
57- . map ( convertDates )
58- . filter ( proxy => proxy . providerMetrics && proxy . providerMetrics [ provider . id ] ) ;
59-
74+ const convertedProxies = typeProxies . map ( convertDates ) . filter ( ( proxy ) => proxy . providerMetrics && proxy . providerMetrics [ provider . id ] ) ;
75+
6076 // Update the provider's proxy list
6177 proxyCache . validProxies [ provider . providerType ] [ provider . id ] = convertedProxies ;
6278
6379 // Update the main proxy list with any new proxies that have metrics for this provider
6480 convertedProxies . forEach ( ( typeProxy ) => {
65- const existingProxy = proxyCache . proxies . find (
66- ( p ) => p . ip === typeProxy . ip && p . port === typeProxy . port
67- ) ;
81+ const existingProxy = proxyCache . proxies . find ( ( p ) => p . ip === typeProxy . ip && p . port === typeProxy . port ) ;
6882 if ( existingProxy ) {
6983 // Merge provider metrics, but only for this specific provider
7084 existingProxy . providerMetrics = {
7185 ...existingProxy . providerMetrics ,
72- [ provider . id ] : typeProxy . providerMetrics [ provider . id ]
86+ [ provider . id ] : typeProxy . providerMetrics [ provider . id ] ,
7387 } ;
7488 } else {
7589 // Only include the metrics for this specific provider
7690 const newProxy = {
7791 ...typeProxy ,
7892 providerMetrics : {
79- [ provider . id ] : typeProxy . providerMetrics [ provider . id ]
80- }
93+ [ provider . id ] : typeProxy . providerMetrics [ provider . id ] ,
94+ } ,
8195 } ;
8296 proxyCache . proxies . push ( newProxy ) ;
8397 }
0 commit comments