+8
-0
@@ -268,2 +268,10 @@ /** @deprecated Use provider prefix strings instead, e.g. `"anthropic:claude-sonnet-4-5"` */ | ||
| requestTimeoutMs?: number; | ||
| /** | ||
| * Optional caller-supplied cancellation signal. When it aborts, the in-flight | ||
| * provider request is cancelled and `callWithRetries` rejects immediately — | ||
| * it does NOT retry or fall back (both retry loop and fallback branch bail on | ||
| * `signal.aborted`). Threaded through every adapter to the underlying | ||
| * fetch/axios/SDK call, mirroring `requestTimeoutMs`. | ||
| */ | ||
| signal?: AbortSignal; | ||
| } | ||
@@ -270,0 +278,0 @@ |
+8
-0
@@ -268,2 +268,10 @@ /** @deprecated Use provider prefix strings instead, e.g. `"anthropic:claude-sonnet-4-5"` */ | ||
| requestTimeoutMs?: number; | ||
| /** | ||
| * Optional caller-supplied cancellation signal. When it aborts, the in-flight | ||
| * provider request is cancelled and `callWithRetries` rejects immediately — | ||
| * it does NOT retry or fall back (both retry loop and fallback branch bail on | ||
| * `signal.aborted`). Threaded through every adapter to the underlying | ||
| * fetch/axios/SDK call, mirroring `requestTimeoutMs`. | ||
| */ | ||
| signal?: AbortSignal; | ||
| } | ||
@@ -270,0 +278,0 @@ |
+65
-36
@@ -144,4 +144,9 @@ "use strict"; | ||
| var decode = require("heic-decode"); | ||
| function anySignal(signals) { | ||
| return AbortSignal.any( | ||
| signals | ||
| ); | ||
| } | ||
| async function withRetries(identifier, apiName, fn, options = {}) { | ||
| var _a, _b, _c, _d; | ||
| var _a, _b, _c, _d, _e; | ||
| const { retries = 5, baseDelayMs = 125, onError } = options; | ||
@@ -155,2 +160,4 @@ logger_default.log(identifier, `Calling ${apiName} API with retries`); | ||
| lastError = error3; | ||
| if ((_a = options.signal) == null ? void 0 : _a.aborted) | ||
| throw error3; | ||
| if (onError) { | ||
@@ -162,3 +169,3 @@ onError(error3, attempt); | ||
| `Retry #${attempt} error: ${error3.message}`, | ||
| ((_a = error3.response) == null ? void 0 : _a.data) || error3 | ||
| ((_b = error3.response) == null ? void 0 : _b.data) || error3 | ||
| ); | ||
@@ -169,3 +176,3 @@ } | ||
| } | ||
| const detail = ((_d = (_c = (_b = lastError == null ? void 0 : lastError.response) == null ? void 0 : _b.data) == null ? void 0 : _c.error) == null ? void 0 : _d.message) || (lastError == null ? void 0 : lastError.message) || String(lastError); | ||
| const detail = ((_e = (_d = (_c = lastError == null ? void 0 : lastError.response) == null ? void 0 : _c.data) == null ? void 0 : _d.error) == null ? void 0 : _e.message) || (lastError == null ? void 0 : lastError.message) || String(lastError); | ||
| const error2 = new Error( | ||
@@ -393,3 +400,3 @@ `Failed to call ${apiName} API after ${retries} attempts: ${detail}` | ||
| } | ||
| async function callOpenAIStream(id, openAiPayload, openAiConfig, chunkTimeoutMs, requestTimeoutMs = 12e4) { | ||
| async function callOpenAIStream(id, openAiPayload, openAiConfig, chunkTimeoutMs, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; | ||
@@ -414,3 +421,6 @@ const functionNames = openAiPayload.tools ? new Set(openAiPayload.tools.map((fn) => fn.function.name)) : null; | ||
| body: JSON.stringify({ ...openAiPayload, stream: true }), | ||
| signal: controller.signal | ||
| // Merge (don't overwrite) the internal timeout controller with the caller's | ||
| // cancellation signal so both an internal timeout and an external abort stop | ||
| // the stream. | ||
| signal: signal ? anySignal([controller.signal, signal]) : controller.signal | ||
| }); | ||
@@ -505,3 +515,3 @@ if (!response.body) { | ||
| } | ||
| async function callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs = 12e4) { | ||
| async function callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; | ||
@@ -521,3 +531,4 @@ const { endpoint, headers } = buildOpenAIRequestConfig( | ||
| body: JSON.stringify({ ...openAiPayload, stream: false }), | ||
| signal: controller.signal | ||
| // Merge the internal timeout controller with the caller's cancellation signal. | ||
| signal: signal ? anySignal([controller.signal, signal]) : controller.signal | ||
| }); | ||
@@ -585,3 +596,3 @@ if (!response.ok) { | ||
| } | ||
| async function callOpenAiWithRetries(id, openAiPayload, openAiConfig, retries = 5, chunkTimeoutMs = 15e3, requestTimeoutMs = 12e4) { | ||
| async function callOpenAiWithRetries(id, openAiPayload, openAiConfig, retries = 5, chunkTimeoutMs = 15e3, requestTimeoutMs = 12e4, signal) { | ||
| logger_default.log( | ||
@@ -605,6 +616,7 @@ id, | ||
| chunkTimeoutMs, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
| } else { | ||
| return callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs); | ||
| return callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs, signal); | ||
| } | ||
@@ -614,2 +626,3 @@ }, | ||
| retries, | ||
| signal, | ||
| baseDelayMs: 250, | ||
@@ -746,3 +759,3 @@ onError: (error2, attempt) => { | ||
| } | ||
| async function callAnthropic(id, payload, config, requestTimeoutMs = 12e4) { | ||
| async function callAnthropic(id, payload, config, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c; | ||
@@ -771,3 +784,4 @@ const anthropicMessages = jigAnthropicMessages(payload.messages); | ||
| modelId: MODEL_ID | ||
| }) | ||
| }), | ||
| { abortSignal: signal } | ||
| ); | ||
@@ -798,3 +812,4 @@ const decodedResponseBody = new TextDecoder().decode(response.body); | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -869,9 +884,10 @@ ); | ||
| } | ||
| async function callAnthropicWithRetries(id, payload, config, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callAnthropicWithRetries(id, payload, config, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries( | ||
| id, | ||
| "Anthropic", | ||
| () => callAnthropic(id, payload, config, requestTimeoutMs), | ||
| () => callAnthropic(id, payload, config, requestTimeoutMs, signal), | ||
| { | ||
| retries | ||
| retries, | ||
| signal | ||
| } | ||
@@ -994,3 +1010,3 @@ ); | ||
| } | ||
| async function callGoogleAI(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callGoogleAI(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; | ||
@@ -1019,3 +1035,4 @@ const contents = jigGoogleMessages(payload.messages); | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1119,6 +1136,7 @@ ); | ||
| } | ||
| async function callGoogleAIWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callGoogleAIWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| let hasTriedWithoutImages = false; | ||
| return withRetries(id, "Google AI", () => callGoogleAI(id, payload, requestTimeoutMs), { | ||
| return withRetries(id, "Google AI", () => callGoogleAI(id, payload, requestTimeoutMs, signal), { | ||
| retries, | ||
| signal, | ||
| onError: (error2, attempt) => { | ||
@@ -1249,3 +1267,3 @@ var _a, _b; | ||
| } | ||
| async function callGroq(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callGroq(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g; | ||
@@ -1260,3 +1278,4 @@ const response = await import_axios.default.post( | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1309,5 +1328,6 @@ ); | ||
| } | ||
| async function callGroqWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| return withRetries(id, "Groq", () => callGroq(id, payload, requestTimeoutMs), { | ||
| retries | ||
| async function callGroqWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries(id, "Groq", () => callGroq(id, payload, requestTimeoutMs, signal), { | ||
| retries, | ||
| signal | ||
| }); | ||
@@ -1377,3 +1397,3 @@ } | ||
| } | ||
| async function callOpenRouter(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callOpenRouter(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i; | ||
@@ -1388,3 +1408,4 @@ const response = await import_axios.default.post( | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1447,8 +1468,8 @@ ); | ||
| } | ||
| async function callOpenRouterWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callOpenRouterWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries( | ||
| id, | ||
| "OpenRouter", | ||
| () => callOpenRouter(id, payload, requestTimeoutMs), | ||
| { retries } | ||
| () => callOpenRouter(id, payload, requestTimeoutMs, signal), | ||
| { retries, signal } | ||
| ); | ||
@@ -1494,3 +1515,3 @@ } | ||
| async function callWithRetries(id, aiPayload, aiConfig, retries = 5, chunkTimeoutMs = 15e3) { | ||
| var _a; | ||
| var _a, _b; | ||
| try { | ||
@@ -1500,2 +1521,3 @@ const { provider, modelId } = parseModelString(aiPayload.model); | ||
| const requestTimeoutMs = (_a = aiPayload.requestTimeoutMs) != null ? _a : 12e4; | ||
| const signal = aiPayload.signal; | ||
| switch (provider) { | ||
@@ -1508,3 +1530,4 @@ case "anthropic": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1518,3 +1541,4 @@ case "openai": | ||
| chunkTimeoutMs, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1526,3 +1550,4 @@ case "groq": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1534,3 +1559,4 @@ case "google": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1542,6 +1568,9 @@ case "openrouter": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
| } | ||
| } catch (error2) { | ||
| if ((_b = aiPayload.signal) == null ? void 0 : _b.aborted) | ||
| throw error2; | ||
| if (aiPayload.fallbackModel) { | ||
@@ -1548,0 +1577,0 @@ logger_default.error( |
+65
-36
@@ -113,4 +113,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { | ||
| var decode = __require("heic-decode"); | ||
| function anySignal(signals) { | ||
| return AbortSignal.any( | ||
| signals | ||
| ); | ||
| } | ||
| async function withRetries(identifier, apiName, fn, options = {}) { | ||
| var _a, _b, _c, _d; | ||
| var _a, _b, _c, _d, _e; | ||
| const { retries = 5, baseDelayMs = 125, onError } = options; | ||
@@ -124,2 +129,4 @@ logger_default.log(identifier, `Calling ${apiName} API with retries`); | ||
| lastError = error3; | ||
| if ((_a = options.signal) == null ? void 0 : _a.aborted) | ||
| throw error3; | ||
| if (onError) { | ||
@@ -131,3 +138,3 @@ onError(error3, attempt); | ||
| `Retry #${attempt} error: ${error3.message}`, | ||
| ((_a = error3.response) == null ? void 0 : _a.data) || error3 | ||
| ((_b = error3.response) == null ? void 0 : _b.data) || error3 | ||
| ); | ||
@@ -138,3 +145,3 @@ } | ||
| } | ||
| const detail = ((_d = (_c = (_b = lastError == null ? void 0 : lastError.response) == null ? void 0 : _b.data) == null ? void 0 : _c.error) == null ? void 0 : _d.message) || (lastError == null ? void 0 : lastError.message) || String(lastError); | ||
| const detail = ((_e = (_d = (_c = lastError == null ? void 0 : lastError.response) == null ? void 0 : _c.data) == null ? void 0 : _d.error) == null ? void 0 : _e.message) || (lastError == null ? void 0 : lastError.message) || String(lastError); | ||
| const error2 = new Error( | ||
@@ -362,3 +369,3 @@ `Failed to call ${apiName} API after ${retries} attempts: ${detail}` | ||
| } | ||
| async function callOpenAIStream(id, openAiPayload, openAiConfig, chunkTimeoutMs, requestTimeoutMs = 12e4) { | ||
| async function callOpenAIStream(id, openAiPayload, openAiConfig, chunkTimeoutMs, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; | ||
@@ -383,3 +390,6 @@ const functionNames = openAiPayload.tools ? new Set(openAiPayload.tools.map((fn) => fn.function.name)) : null; | ||
| body: JSON.stringify({ ...openAiPayload, stream: true }), | ||
| signal: controller.signal | ||
| // Merge (don't overwrite) the internal timeout controller with the caller's | ||
| // cancellation signal so both an internal timeout and an external abort stop | ||
| // the stream. | ||
| signal: signal ? anySignal([controller.signal, signal]) : controller.signal | ||
| }); | ||
@@ -474,3 +484,3 @@ if (!response.body) { | ||
| } | ||
| async function callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs = 12e4) { | ||
| async function callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j; | ||
@@ -490,3 +500,4 @@ const { endpoint, headers } = buildOpenAIRequestConfig( | ||
| body: JSON.stringify({ ...openAiPayload, stream: false }), | ||
| signal: controller.signal | ||
| // Merge the internal timeout controller with the caller's cancellation signal. | ||
| signal: signal ? anySignal([controller.signal, signal]) : controller.signal | ||
| }); | ||
@@ -554,3 +565,3 @@ if (!response.ok) { | ||
| } | ||
| async function callOpenAiWithRetries(id, openAiPayload, openAiConfig, retries = 5, chunkTimeoutMs = 15e3, requestTimeoutMs = 12e4) { | ||
| async function callOpenAiWithRetries(id, openAiPayload, openAiConfig, retries = 5, chunkTimeoutMs = 15e3, requestTimeoutMs = 12e4, signal) { | ||
| logger_default.log( | ||
@@ -574,6 +585,7 @@ id, | ||
| chunkTimeoutMs, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
| } else { | ||
| return callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs); | ||
| return callOpenAI(id, openAiPayload, openAiConfig, requestTimeoutMs, signal); | ||
| } | ||
@@ -583,2 +595,3 @@ }, | ||
| retries, | ||
| signal, | ||
| baseDelayMs: 250, | ||
@@ -715,3 +728,3 @@ onError: (error2, attempt) => { | ||
| } | ||
| async function callAnthropic(id, payload, config, requestTimeoutMs = 12e4) { | ||
| async function callAnthropic(id, payload, config, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c; | ||
@@ -740,3 +753,4 @@ const anthropicMessages = jigAnthropicMessages(payload.messages); | ||
| modelId: MODEL_ID | ||
| }) | ||
| }), | ||
| { abortSignal: signal } | ||
| ); | ||
@@ -767,3 +781,4 @@ const decodedResponseBody = new TextDecoder().decode(response.body); | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -838,9 +853,10 @@ ); | ||
| } | ||
| async function callAnthropicWithRetries(id, payload, config, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callAnthropicWithRetries(id, payload, config, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries( | ||
| id, | ||
| "Anthropic", | ||
| () => callAnthropic(id, payload, config, requestTimeoutMs), | ||
| () => callAnthropic(id, payload, config, requestTimeoutMs, signal), | ||
| { | ||
| retries | ||
| retries, | ||
| signal | ||
| } | ||
@@ -963,3 +979,3 @@ ); | ||
| } | ||
| async function callGoogleAI(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callGoogleAI(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r; | ||
@@ -988,3 +1004,4 @@ const contents = jigGoogleMessages(payload.messages); | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1088,6 +1105,7 @@ ); | ||
| } | ||
| async function callGoogleAIWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callGoogleAIWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| let hasTriedWithoutImages = false; | ||
| return withRetries(id, "Google AI", () => callGoogleAI(id, payload, requestTimeoutMs), { | ||
| return withRetries(id, "Google AI", () => callGoogleAI(id, payload, requestTimeoutMs, signal), { | ||
| retries, | ||
| signal, | ||
| onError: (error2, attempt) => { | ||
@@ -1218,3 +1236,3 @@ var _a, _b; | ||
| } | ||
| async function callGroq(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callGroq(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g; | ||
@@ -1229,3 +1247,4 @@ const response = await axios.post( | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1278,5 +1297,6 @@ ); | ||
| } | ||
| async function callGroqWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| return withRetries(id, "Groq", () => callGroq(id, payload, requestTimeoutMs), { | ||
| retries | ||
| async function callGroqWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries(id, "Groq", () => callGroq(id, payload, requestTimeoutMs, signal), { | ||
| retries, | ||
| signal | ||
| }); | ||
@@ -1346,3 +1366,3 @@ } | ||
| } | ||
| async function callOpenRouter(id, payload, requestTimeoutMs = 12e4) { | ||
| async function callOpenRouter(id, payload, requestTimeoutMs = 12e4, signal) { | ||
| var _a, _b, _c, _d, _e, _f, _g, _h, _i; | ||
@@ -1357,3 +1377,4 @@ const response = await axios.post( | ||
| }, | ||
| timeout: requestTimeoutMs | ||
| timeout: requestTimeoutMs, | ||
| signal | ||
| } | ||
@@ -1416,8 +1437,8 @@ ); | ||
| } | ||
| async function callOpenRouterWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4) { | ||
| async function callOpenRouterWithRetries(id, payload, retries = 5, requestTimeoutMs = 12e4, signal) { | ||
| return withRetries( | ||
| id, | ||
| "OpenRouter", | ||
| () => callOpenRouter(id, payload, requestTimeoutMs), | ||
| { retries } | ||
| () => callOpenRouter(id, payload, requestTimeoutMs, signal), | ||
| { retries, signal } | ||
| ); | ||
@@ -1463,3 +1484,3 @@ } | ||
| async function callWithRetries(id, aiPayload, aiConfig, retries = 5, chunkTimeoutMs = 15e3) { | ||
| var _a; | ||
| var _a, _b; | ||
| try { | ||
@@ -1469,2 +1490,3 @@ const { provider, modelId } = parseModelString(aiPayload.model); | ||
| const requestTimeoutMs = (_a = aiPayload.requestTimeoutMs) != null ? _a : 12e4; | ||
| const signal = aiPayload.signal; | ||
| switch (provider) { | ||
@@ -1477,3 +1499,4 @@ case "anthropic": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1487,3 +1510,4 @@ case "openai": | ||
| chunkTimeoutMs, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1495,3 +1519,4 @@ case "groq": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1503,3 +1528,4 @@ case "google": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
@@ -1511,6 +1537,9 @@ case "openrouter": | ||
| retries, | ||
| requestTimeoutMs | ||
| requestTimeoutMs, | ||
| signal | ||
| ); | ||
| } | ||
| } catch (error2) { | ||
| if ((_b = aiPayload.signal) == null ? void 0 : _b.aborted) | ||
| throw error2; | ||
| if (aiPayload.fallbackModel) { | ||
@@ -1517,0 +1546,0 @@ logger_default.error( |
+1
-1
| { | ||
| "name": "190proof", | ||
| "version": "1.0.101", | ||
| "version": "1.0.102", | ||
| "description": "", | ||
@@ -5,0 +5,0 @@ "main": "./dist/index.js", |
+5
-0
@@ -276,2 +276,7 @@ # 190proof | ||
| Two optional per-request knobs live on `payload` (`GenericPayload`): | ||
| - `payload.requestTimeoutMs`: `number` - Per-attempt HTTP timeout in ms (default: 120000), honored by every adapter. | ||
| - `payload.signal`: `AbortSignal` - Caller-supplied cancellation. When it aborts, the in-flight provider request is cancelled and `callWithRetries` **rejects immediately — it does not retry or fall back** (both the retry loop and the fallback branch bail on `signal.aborted`). Threaded to the underlying fetch/axios/SDK call of each provider. | ||
| #### Returns | ||
@@ -278,0 +283,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
388381
2.42%3394
1.98%368
1.38%