ts-web-scraper
Version:
A powerful web scraper for both static and client-side rendered sites using only Bun native APIs
52 lines • 1.58 kB
TypeScript
import type { ScraperError } from './errors';
/**
* Execute a function with retry logic
*/
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
/**
* Create a retry wrapper for a function
*/
export declare function retryable<T extends (...args: any[]) => Promise<any>>(fn: T, options?: RetryOptions): T;
/**
* Calculate the delay for a given attempt
*/
export declare function calculateDelay(attempt: number, options?: Pick<RetryOptions, 'initialDelay' | 'maxDelay' | 'backoffMultiplier' | 'jitter'>): number;
export declare interface RetryOptions {
maxRetries?: number
initialDelay?: number
maxDelay?: number
backoffMultiplier?: number
jitter?: boolean
retryOn?: number[]
shouldRetry?: (error: ScraperError, attempt: number) => boolean
onRetry?: (error: ScraperError, attempt: number, delay: number) => void
debug?: boolean
}
export declare interface RetryStats {
attempts: number
totalDelay: number
lastError?: ScraperError
success: boolean
}
/**
* Retry budget - limit total retry time
*/
export declare class RetryBudget {
private startTime: number;
private totalRetries: any;
private successfulRetries: any;
private readonly maxDuration?: number;
private readonly maxRetries?: number;
constructor(maxDuration?: number, maxRetries?: number);
canRetry(): boolean;
recordRetry(success: boolean): void;
getStats(): {
totalRetries: number
successfulRetries: number
failedRetries: number
elapsed: number
remaining: number
canRetry: boolean
};
reset(): void;
}