/** * 重試選項配置 * * @interface RetryOptions * @property maxRetries - 最大重試次數(預設 3) * @property baseDelay - 初始延遲毫秒數(預設 100) * @property maxDelay - 最大延遲毫秒數(預設 5000) * @property backoffMultiplier - 退避倍數(預設 2) * @property shouldRetry - 自訂重試條件函數 */ export interface RetryOptions { /** * 最大重試次數 * * @default 3 */ maxRetries?: number; /** * 初始延遲毫秒數 * * @default 100 */ baseDelay?: number; /** * 最大延遲毫秒數 * * @default 5000 */ maxDelay?: number; /** * 指數退避倍數 * * @default 2 */ backoffMultiplier?: number; /** * 自訂重試判斷函數 * 返回 true 表示應該重試此錯誤 * * @param error - 拋出的錯誤物件 * @returns 是否應該重試 */ shouldRetry?: (error: unknown) => boolean; } /** * 帶指數退避的非同步重試執行 * * 自動重試失敗的非同步操作,採用指數退避演算法。 * 每次失敗時延遲遞增,直到達到最大延遲時間。 * * @typeParam T - 操作返回的結果類型 * @param operation - 要執行的非同步操作函數 * @param options - 重試配置選項 * @returns 操作的返回值 * @throws {Error} 達到最大重試次數後拋出原始錯誤 * * @example * ```typescript * import { retryWithBackoff } from '@carllee1983/tappay-backend-payment-node' * * // 基本用法:預設配置(最多 3 次重試) * const result = await retryWithBackoff(async () => { * return await fetch('https://api.example.com/data') * }) * * // 自訂重試次數和延遲 * const response = await retryWithBackoff( * async () => client.getTransaction(id), * { * maxRetries: 5, * baseDelay: 200, * maxDelay: 10000, * backoffMultiplier: 2 * } * ) * * // 自訂重試判斷(只重試特定錯誤) * const data = await retryWithBackoff( * async () => client.fetchData(), * { * maxRetries: 3, * shouldRetry: (error: unknown) => { * // 只重試 5xx 錯誤和 429 Too Many Requests * if (error instanceof Response) { * return error.status >= 500 || error.status === 429 * } * return false * } * } * ) * ``` */ export declare function retryWithBackoff(operation: () => Promise, options?: RetryOptions): Promise; //# sourceMappingURL=retry.d.ts.map