MCPcopy Create free account
hub / github.com/anus-dev/ANUS / getRetryAfterDelayMs

Function getRetryAfterDelayMs

packages/core/src/utils/retry.ts:251–282  ·  view source on GitHub ↗

* Extracts the Retry-After delay from an error object's headers. * @param error The error object. * @returns The delay in milliseconds, or 0 if not found or invalid.

(error: unknown)

Source from the content-addressed store, hash-verified

249 * @returns The delay in milliseconds, or 0 if not found or invalid.
250 */
251function getRetryAfterDelayMs(error: unknown): number {
252 if (typeof error === 'object' && error !== null) {
253 // Check for error.response.headers (common in axios errors)
254 if (
255 'response' in error &&
256 typeof (error as { response?: unknown }).response === 'object' &&
257 (error as { response?: unknown }).response !== null
258 ) {
259 const response = (error as { response: { headers?: unknown } }).response;
260 if (
261 'headers' in response &&
262 typeof response.headers === 'object' &&
263 response.headers !== null
264 ) {
265 const headers = response.headers as { 'retry-after'?: unknown };
266 const retryAfterHeader = headers['retry-after'];
267 if (typeof retryAfterHeader === 'string') {
268 const retryAfterSeconds = parseInt(retryAfterHeader, 10);
269 if (!isNaN(retryAfterSeconds)) {
270 return retryAfterSeconds * 1000;
271 }
272 // It might be an HTTP date
273 const retryAfterDate = new Date(retryAfterHeader);
274 if (!isNaN(retryAfterDate.getTime())) {
275 return Math.max(0, retryAfterDate.getTime() - Date.now());
276 }
277 }
278 }
279 }
280 }
281 return 0;
282}
283
284/**
285 * Determines the delay duration based on the error, prioritizing Retry-After header.

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected