MCPcopy Create free account
hub / github.com/arctic-cli/interface / delay

Function delay

packages/arctic/src/session/retry.ts:50–90  ·  view source on GitHub ↗
(attempt: number, error?: MessageV2.APIError)

Source from the content-addressed store, hash-verified

48 }
49
50 export function delay(attempt: number, error?: MessageV2.APIError) {
51 if (error) {
52 const headers = error.data.responseHeaders
53 if (headers) {
54 const retryAfterMs = headers["retry-after-ms"]
55 if (retryAfterMs) {
56 const parsedMs = Number.parseFloat(retryAfterMs)
57 if (!Number.isNaN(parsedMs)) {
58 return parsedMs
59 }
60 }
61
62 const retryAfter = headers["retry-after"]
63 if (retryAfter) {
64 const parsedSeconds = Number.parseFloat(retryAfter)
65 if (!Number.isNaN(parsedSeconds)) {
66 // convert seconds to milliseconds
67 return Math.ceil(parsedSeconds * 1000)
68 }
69 // Try parsing as HTTP date format
70 const parsed = Date.parse(retryAfter) - Date.now()
71 if (!Number.isNaN(parsed) && parsed > 0) {
72 return Math.ceil(parsed)
73 }
74 }
75 }
76
77 // try to extract delay from google error message/body
78 const fromMessage = extractGoogleRetryDelay(error.data.message)
79 if (fromMessage) return fromMessage
80
81 const fromBody = extractRetryDelayFromBody(error.data.responseBody)
82 if (fromBody) return fromBody
83
84 if (headers) {
85 return RETRY_INITIAL_DELAY * Math.pow(RETRY_BACKOFF_FACTOR, attempt - 1)
86 }
87 }
88
89 return Math.min(RETRY_INITIAL_DELAY * Math.pow(RETRY_BACKOFF_FACTOR, attempt - 1), RETRY_MAX_DELAY_NO_HEADERS)
90 }
91
92 // check if error is a permanent billing/quota exhaustion (not retryable)
93 function isPermanentUsageError(error: MessageV2.APIError): boolean {

Callers

nothing calls this directly

Calls 2

extractGoogleRetryDelayFunction · 0.85

Tested by

no test coverage detected