@dofek/provider-http 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @dofek/provider-http
2
2
 
3
- Fetch-compatible HTTP helpers for provider integrations that need typed rate-limit
4
- and service-unavailable errors, `Retry-After` parsing, and optional adaptive
5
- request admission.
3
+ Fetch-compatible HTTP helpers for provider integrations that need typed
4
+ rate-limit, service-unavailable, and request-timeout errors; `Retry-After`
5
+ parsing; and optional adaptive request admission.
6
6
 
7
7
  ## Install
8
8
 
@@ -19,6 +19,7 @@ Requires Node.js 22.14 or newer and its built-in
19
19
  import {
20
20
  createRateLimitAwareFetch,
21
21
  ProviderRateLimitError,
22
+ ProviderRequestTimeoutError,
22
23
  } from "@dofek/provider-http";
23
24
 
24
25
  const providerFetch = createRateLimitAwareFetch(fetch, {
@@ -34,6 +35,8 @@ try {
34
35
  } catch (error) {
35
36
  if (error instanceof ProviderRateLimitError) {
36
37
  console.log(`Retry after ${error.retryAfterSeconds ?? "an unknown number of"} seconds`);
38
+ } else if (error instanceof ProviderRequestTimeoutError) {
39
+ console.log(`Request exceeded ${error.timeoutMs}ms`);
37
40
  } else {
38
41
  throw error;
39
42
  }
@@ -44,7 +47,7 @@ try {
44
47
 
45
48
  | Import | Main exports |
46
49
  | --- | --- |
47
- | `@dofek/provider-http` | `createRateLimitAwareFetch`, `fetchWithRateLimitHandling`, `parseRetryAfterHeader`, `isServiceUnavailableStatus`, `ProviderRateLimitError`, `ProviderServiceUnavailableError`, and their option/store types |
50
+ | `@dofek/provider-http` | `createRateLimitAwareFetch`, `fetchWithRateLimitHandling`, `parseRetryAfterHeader`, `isServiceUnavailableStatus`, `PROVIDER_HTTP_REQUEST_TIMEOUT_MS`, `ProviderRateLimitError`, `ProviderRequestTimeoutError`, `ProviderServiceUnavailableError`, and their option/store types |
48
51
  | `@dofek/provider-http/rate-limit` | Alias of the root rate-limit API |
49
52
  | `@dofek/provider-http/adaptive-rate-limit` | Adaptive budget state, serialization, admission-delay calculations, Strava quota parsing, defaults, constants, and `AdaptiveRateLimitStore` |
50
53
 
@@ -55,13 +58,23 @@ coordination appropriate to their runtime.
55
58
 
56
59
  - HTTP `429` throws `ProviderRateLimitError`.
57
60
  - HTTP `502`, `503`, and `504` throw `ProviderServiceUnavailableError`.
58
- - Both errors expose the provider, status, response body, scope, optional user,
59
- and parsed `retryAfterSeconds`.
61
+ - Every request made through `createRateLimitAwareFetch` has a shared two-minute
62
+ deadline. The wrapper composes its timeout signal with a caller-provided
63
+ signal and throws
64
+ `ProviderRequestTimeoutError` with code `ETIMEDOUT` only when that deadline
65
+ wins; caller cancellation remains the caller's error.
66
+ - HTTP errors expose the provider, status, response body, scope, optional user,
67
+ and parsed `retryAfterSeconds`. Timeout errors expose the provider, scope,
68
+ optional user, `timeoutMs`, and original cause.
60
69
  - Other HTTP error responses are returned unchanged, so callers must check
61
70
  `response.ok`.
62
71
  - These helpers do not retry automatically. The caller decides whether and when
63
72
  to retry; an adaptive store can delay admission before a request.
64
73
 
74
+ The deadline uses Node's
75
+ [`AbortSignal.timeout()` and `AbortSignal.any()`](https://nodejs.org/api/globals.html#class-abortsignal)
76
+ APIs.
77
+
65
78
  No authentication or environment variables are required by this package.
66
79
 
67
80
  ## License and contributing
@@ -1 +1 @@
1
- {"version":3,"file":"adaptive-rate-limit.d.ts","sourceRoot":"","sources":["../src/adaptive-rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,QAAgB,CAAC;AAErD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAE3D,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAAgC,CAAC;AAE3F;;;GAGG;AACH,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG/E,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI7E,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAoBzF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAO3B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBxF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvF;AAmBD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,SAAa,GACjB,yBAAyB,CAgB3B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,oBAAoB,GAC1B,yBAAyB,CAQ3B;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAQ3B;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAO3B;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,yBAAyB,EAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,yBAAyB,CAY3B;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAIR;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,yBAAyB,GAAG,IAAI,CAoE3F"}
1
+ {"version":3,"file":"adaptive-rate-limit.d.ts","sourceRoot":"","sources":["../src/adaptive-rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,QAAgB,CAAC;AAErD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,yCAAyC,IAAI,CAAC;AAE3D,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAAgC,CAAC;AAE3F;;;GAGG;AACH,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG/E,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI7E,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEvE;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAoBzF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAI9F;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAkB3B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,eAAe,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBxF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvF;AA6BD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,SAAa,GACjB,yBAAyB,CAgB3B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,oBAAoB,GAC1B,yBAAyB,CAQ3B;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAQ3B;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAO3B;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,yBAAyB,EAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,yBAAyB,CAY3B;AAED,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAIR;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,yBAAyB,GAAG,IAAI,CAoE3F"}
@@ -72,10 +72,20 @@ export function blendObservedCooldown(previous, observedSeconds) {
72
72
  return Math.round(previous * 0.7 + observedSeconds * 0.3);
73
73
  }
74
74
  export function slideAdaptiveWindow(state, nowMs) {
75
- if (nowMs - state.windowStartMs < ADAPTIVE_RATE_WINDOW_MS)
76
- return state;
75
+ const lastRequestMs = state.lastRequestMs === null ? null : Math.min(state.lastRequestMs, nowMs);
76
+ if (nowMs < state.windowStartMs) {
77
+ return {
78
+ ...state,
79
+ lastRequestMs,
80
+ windowStartMs: nowMs,
81
+ };
82
+ }
83
+ if (nowMs - state.windowStartMs < ADAPTIVE_RATE_WINDOW_MS) {
84
+ return lastRequestMs === state.lastRequestMs ? state : { ...state, lastRequestMs };
85
+ }
77
86
  return {
78
87
  ...state,
88
+ lastRequestMs,
79
89
  windowStartMs: nowMs,
80
90
  requestCount: 0,
81
91
  };
@@ -98,22 +108,23 @@ export function learnInferredBudget(current, requestsAtLimit, providerId) {
98
108
  return Math.min(current, candidate);
99
109
  }
100
110
  export function admissionDelayMs(state, nowMs) {
101
- let delayMs = Math.max(throttleDelayMs(state, nowMs), budgetAdmissionDelayMs(state));
111
+ let delayMs = Math.max(throttleDelayMs(state, nowMs), budgetAdmissionDelayMs(state, nowMs));
102
112
  if (state.providerId === "strava" &&
103
113
  state.stravaShortLimit != null &&
104
114
  state.stravaShortUsage != null) {
105
115
  const remaining = state.stravaShortLimit - state.stravaShortUsage;
116
+ let quotaIntervalMs;
106
117
  if (remaining <= 2) {
107
- delayMs = Math.max(delayMs, state.throttleMs * 4);
118
+ quotaIntervalMs = state.throttleMs * 4;
108
119
  }
109
120
  else if (remaining <= 5) {
110
- delayMs = Math.max(delayMs, state.throttleMs * 2);
121
+ quotaIntervalMs = state.throttleMs * 2;
111
122
  }
112
123
  else {
113
124
  const windowMs = 15 * 60 * 1000;
114
- const pacedDelay = Math.ceil(windowMs / remaining);
115
- delayMs = Math.max(delayMs, Math.min(pacedDelay, ADAPTIVE_THROTTLE_MAX_MS));
125
+ quotaIntervalMs = Math.min(Math.ceil(windowMs / remaining), ADAPTIVE_THROTTLE_MAX_MS);
116
126
  }
127
+ delayMs = Math.max(delayMs, remainingIntervalDelayMs(state.lastRequestMs, quotaIntervalMs, nowMs));
117
128
  }
118
129
  return delayMs;
119
130
  }
@@ -121,9 +132,14 @@ export function throttleDelayMs(state, nowMs) {
121
132
  if (state.lastRequestMs == null)
122
133
  return 0;
123
134
  const elapsed = nowMs - state.lastRequestMs;
124
- return elapsed < state.throttleMs ? state.throttleMs - elapsed : 0;
135
+ return Math.max(0, state.throttleMs - elapsed);
136
+ }
137
+ function remainingIntervalDelayMs(lastRequestMs, intervalMs, nowMs) {
138
+ if (lastRequestMs == null)
139
+ return 0;
140
+ return Math.max(0, intervalMs - Math.max(0, nowMs - lastRequestMs));
125
141
  }
126
- function budgetAdmissionDelayMs(state) {
142
+ function budgetAdmissionDelayMs(state, nowMs) {
127
143
  if (state.inferredBudget == null)
128
144
  return 0;
129
145
  const softCap = Math.floor(state.inferredBudget * ADAPTIVE_BUDGET_SAFETY_RATIO);
@@ -134,7 +150,8 @@ function budgetAdmissionDelayMs(state) {
134
150
  ? Math.max(1, Math.floor(softCap / httpRequestsPerSyncJob(state.providerId)))
135
151
  : softCap;
136
152
  if (effectiveRequestCount >= effectiveSoftCap) {
137
- return state.throttleMs;
153
+ const elapsedMs = Math.max(0, nowMs - state.windowStartMs);
154
+ return Math.max(0, ADAPTIVE_RATE_WINDOW_MS - elapsedMs);
138
155
  }
139
156
  return 0;
140
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adaptive-rate-limit.js","sourceRoot":"","sources":["../src/adaptive-rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptive-rate-limit.js","sourceRoot":"","sources":["../src/adaptive-rate-limit.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ export interface ProviderServiceUnavailableErrorOptions {
18
18
  userId?: string | null;
19
19
  retryAfterSeconds?: number | null;
20
20
  }
21
+ export interface ProviderRequestTimeoutErrorOptions {
22
+ cause?: unknown;
23
+ providerId: string;
24
+ scope?: ProviderHttpErrorScope;
25
+ timeoutMs: number;
26
+ userId?: string | null;
27
+ }
21
28
  export declare class ProviderRateLimitError extends Error {
22
29
  readonly providerId: string;
23
30
  readonly statusCode: number;
@@ -36,6 +43,14 @@ export declare class ProviderServiceUnavailableError extends Error {
36
43
  readonly retryAfterSeconds: number | null;
37
44
  constructor(options: ProviderServiceUnavailableErrorOptions);
38
45
  }
46
+ export declare class ProviderRequestTimeoutError extends Error {
47
+ readonly code = "ETIMEDOUT";
48
+ readonly providerId: string;
49
+ readonly scope: ProviderHttpErrorScope;
50
+ readonly timeoutMs: number;
51
+ readonly userId: string | null;
52
+ constructor(options: ProviderRequestTimeoutErrorOptions);
53
+ }
39
54
  export interface AdaptiveRateLimitStore {
40
55
  awaitAdmission(providerId: string, scope: ProviderRateLimitScope, userId: string | null): Promise<void>;
41
56
  recordSuccess(providerId: string, scope: ProviderRateLimitScope, userId: string | null, responseHeaders?: Headers): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit-types.d.ts","sourceRoot":"","sources":["../src/rate-limit-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAE5D,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,sCAAsC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE9B,OAAO,EAAE,6BAA6B;CAUnD;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE9B,OAAO,EAAE,sCAAsC;CAU5D;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACvE"}
1
+ {"version":3,"file":"rate-limit-types.d.ts","sourceRoot":"","sources":["../src/rate-limit-types.ts"],"names":[],"mappings":"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"}
@@ -34,4 +34,21 @@ export class ProviderServiceUnavailableError extends Error {
34
34
  this.retryAfterSeconds = options.retryAfterSeconds ?? null;
35
35
  }
36
36
  }
37
+ export class ProviderRequestTimeoutError extends Error {
38
+ code = "ETIMEDOUT";
39
+ providerId;
40
+ scope;
41
+ timeoutMs;
42
+ userId;
43
+ constructor(options) {
44
+ super(`${options.providerId} provider request timed out after ${options.timeoutMs}ms`, {
45
+ cause: options.cause,
46
+ });
47
+ this.name = "ProviderRequestTimeoutError";
48
+ this.providerId = options.providerId;
49
+ this.scope = options.scope ?? "provider";
50
+ this.timeoutMs = options.timeoutMs;
51
+ this.userId = options.userId ?? null;
52
+ }
53
+ }
37
54
  //# sourceMappingURL=rate-limit-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit-types.js","sourceRoot":"","sources":["../src/rate-limit-types.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,KAAK,CAAyB;IAC9B,MAAM,CAAgB;IACtB,iBAAiB,CAAgB;IAE1C,YAAY,OAAsC;QAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,KAAK,CAAyB;IAC9B,MAAM,CAAgB;IACtB,iBAAiB,CAAgB;IAE1C,YAAY,OAA+C;QACzD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC7D,CAAC;CACF"}
1
+ {"version":3,"file":"rate-limit-types.js","sourceRoot":"","sources":["../src/rate-limit-types.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,KAAK,CAAyB;IAC9B,MAAM,CAAgB;IACtB,iBAAiB,CAAgB;IAE1C,YAAY,OAAsC;QAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,KAAK,CAAyB;IAC9B,MAAM,CAAgB;IACtB,iBAAiB,CAAgB;IAE1C,YAAY,OAA+C;QACzD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,GAAG,WAAW,CAAC;IACnB,UAAU,CAAS;IACnB,KAAK,CAAyB;IAC9B,SAAS,CAAS;IAClB,MAAM,CAAgB;IAE/B,YAAY,OAA2C;QACrD,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,qCAAqC,OAAO,CAAC,SAAS,IAAI,EAAE;YACrF,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACvC,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  import type { AdaptiveRateLimitStore } from "./rate-limit-types.ts";
2
- import { ProviderRateLimitError, type ProviderRateLimitScope, ProviderServiceUnavailableError } from "./rate-limit-types.ts";
3
- export type { AdaptiveRateLimitStore, ProviderHttpErrorScope, ProviderRateLimitErrorOptions, ProviderRateLimitScope, ProviderServiceUnavailableErrorOptions, } from "./rate-limit-types.ts";
4
- export { ProviderRateLimitError, ProviderServiceUnavailableError };
2
+ import { ProviderRateLimitError, type ProviderRateLimitScope, ProviderRequestTimeoutError, ProviderServiceUnavailableError } from "./rate-limit-types.ts";
3
+ export type { AdaptiveRateLimitStore, ProviderHttpErrorScope, ProviderRateLimitErrorOptions, ProviderRateLimitScope, ProviderRequestTimeoutErrorOptions, ProviderServiceUnavailableErrorOptions, } from "./rate-limit-types.ts";
4
+ export { ProviderRateLimitError, ProviderRequestTimeoutError, ProviderServiceUnavailableError };
5
5
  export interface FetchRateLimitHandlingOptions {
6
6
  createRateLimitError: (response: Response, responseBody: string) => Error;
7
7
  createServiceUnavailableError?: (response: Response, responseBody: string) => Error;
@@ -14,6 +14,7 @@ export interface RateLimitAwareFetchOptions {
14
14
  createServiceUnavailableError?: (response: Response, responseBody: string) => Error;
15
15
  adaptiveStore?: AdaptiveRateLimitStore;
16
16
  }
17
+ export declare const PROVIDER_HTTP_REQUEST_TIMEOUT_MS: number;
17
18
  /**
18
19
  * Parses an HTTP `Retry-After` header value, which may be either a number of
19
20
  * seconds or an HTTP-date. Returns the delay in seconds, or null when absent or
@@ -21,6 +22,7 @@ export interface RateLimitAwareFetchOptions {
21
22
  */
22
23
  export declare function parseRetryAfterHeader(header: string | null | undefined): number | null;
23
24
  export declare function isServiceUnavailableStatus(statusCode: number): boolean;
25
+ export declare function isProviderConnectFailure(error: unknown): boolean;
24
26
  export declare function fetchWithRateLimitHandling(fetchFn: typeof globalThis.fetch, input: RequestInfo | URL, init: RequestInit | undefined, options: FetchRateLimitHandlingOptions): Promise<Response>;
25
27
  export declare function createRateLimitAwareFetch(fetchFn: typeof globalThis.fetch, options: RateLimitAwareFetchOptions): typeof globalThis.fetch;
26
28
  //# sourceMappingURL=rate-limit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAEL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,sCAAsC,GACvC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAE,CAAC;AAEnE,MAAM,WAAW,6BAA6B;IAC5C,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IAC1E,6BAA6B,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;CACrF;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IAC3E,6BAA6B,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IACpF,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAUtF;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAqBnB;AAsCD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,EAAE,0BAA0B,GAClC,OAAO,UAAU,CAAC,KAAK,CA+CzB"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAEL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,2BAA2B,EAC3B,+BAA+B,EAChC,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,+BAA+B,EAAE,CAAC;AAEhG,MAAM,WAAW,6BAA6B;IAC5C,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IAC1E,6BAA6B,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;CACrF;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IAC3E,6BAA6B,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;IACpF,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC;AAGD,eAAO,MAAM,gCAAgC,QAAgB,CAAC;AAU9D;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAUtF;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEtE;AAWD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAoBhE;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAqBnB;AAsCD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,EAAE,0BAA0B,GAClC,OAAO,UAAU,CAAC,KAAK,CAkFzB"}
@@ -1,6 +1,12 @@
1
- import { ProviderRateLimitError, ProviderServiceUnavailableError, } from "./rate-limit-types.js";
2
- export { ProviderRateLimitError, ProviderServiceUnavailableError };
1
+ import { ProviderRateLimitError, ProviderRequestTimeoutError, ProviderServiceUnavailableError, } from "./rate-limit-types.js";
2
+ export { ProviderRateLimitError, ProviderRequestTimeoutError, ProviderServiceUnavailableError };
3
3
  const rateLimitAwareFetches = new WeakSet();
4
+ export const PROVIDER_HTTP_REQUEST_TIMEOUT_MS = 2 * 60 * 1000;
5
+ function callerAbortSignal(input, init) {
6
+ if (init?.signal)
7
+ return init.signal;
8
+ return input instanceof Request ? input.signal : undefined;
9
+ }
4
10
  /**
5
11
  * Parses an HTTP `Retry-After` header value, which may be either a number of
6
12
  * seconds or an HTTP-date. Returns the delay in seconds, or null when absent or
@@ -20,6 +26,29 @@ export function parseRetryAfterHeader(header) {
20
26
  export function isServiceUnavailableStatus(statusCode) {
21
27
  return statusCode === 502 || statusCode === 503 || statusCode === 504;
22
28
  }
29
+ const PROVIDER_CONNECT_FAILURE_CODES = new Set(["ETIMEDOUT", "ECONNRESET", "ENETUNREACH"]);
30
+ function errorCause(error) {
31
+ if (typeof error !== "object" || error === null || !("cause" in error)) {
32
+ return undefined;
33
+ }
34
+ return error.cause;
35
+ }
36
+ export function isProviderConnectFailure(error) {
37
+ const visited = new Set();
38
+ let current = error;
39
+ while (current instanceof Error && !visited.has(current)) {
40
+ visited.add(current);
41
+ if (current.name === "ConnectTimeoutError") {
42
+ return true;
43
+ }
44
+ const code = typeof current === "object" && current !== null && "code" in current ? current.code : null;
45
+ if (typeof code === "string" && PROVIDER_CONNECT_FAILURE_CODES.has(code)) {
46
+ return true;
47
+ }
48
+ current = errorCause(current);
49
+ }
50
+ return false;
51
+ }
23
52
  export async function fetchWithRateLimitHandling(fetchFn, input, init, options) {
24
53
  const response = init === undefined ? await fetchFn(input) : await fetchFn(input, init);
25
54
  if (response.status === 429) {
@@ -65,8 +94,13 @@ export function createRateLimitAwareFetch(fetchFn, options) {
65
94
  if (options.adaptiveStore) {
66
95
  await options.adaptiveStore.awaitAdmission(options.providerId, scope, userId);
67
96
  }
97
+ const timeoutSignal = AbortSignal.timeout(PROVIDER_HTTP_REQUEST_TIMEOUT_MS);
98
+ const upstreamSignal = callerAbortSignal(input, init);
99
+ const signal = upstreamSignal
100
+ ? AbortSignal.any([upstreamSignal, timeoutSignal])
101
+ : timeoutSignal;
68
102
  try {
69
- const response = await fetchWithRateLimitHandling(fetchFn, input, init, {
103
+ const response = await fetchWithRateLimitHandling(fetchFn, input, { ...init, signal }, {
70
104
  createRateLimitError: options.createRateLimitError ??
71
105
  ((response, responseBody) => createDefaultRateLimitError(options.providerId, scope, userId, response, responseBody)),
72
106
  createServiceUnavailableError: options.createServiceUnavailableError ??
@@ -78,6 +112,24 @@ export function createRateLimitAwareFetch(fetchFn, options) {
78
112
  return response;
79
113
  }
80
114
  catch (err) {
115
+ if (timeoutSignal.aborted && signal.reason === timeoutSignal.reason) {
116
+ throw new ProviderRequestTimeoutError({
117
+ cause: err,
118
+ providerId: options.providerId,
119
+ scope,
120
+ timeoutMs: PROVIDER_HTTP_REQUEST_TIMEOUT_MS,
121
+ userId,
122
+ });
123
+ }
124
+ if (isProviderConnectFailure(err)) {
125
+ throw new ProviderRequestTimeoutError({
126
+ cause: err,
127
+ providerId: options.providerId,
128
+ scope,
129
+ timeoutMs: PROVIDER_HTTP_REQUEST_TIMEOUT_MS,
130
+ userId,
131
+ });
132
+ }
81
133
  if (options.adaptiveStore && err instanceof ProviderRateLimitError) {
82
134
  await options.adaptiveStore.recordRateLimit(err);
83
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dofek/provider-http",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Rate-limit-aware Fetch utilities and typed provider HTTP errors",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,9 +46,7 @@
46
46
  },
47
47
  "scripts": {
48
48
  "build": "tsc",
49
- "prepack": "pnpm run build",
50
49
  "test": "vitest run src",
51
50
  "typecheck": "tsc --noEmit"
52
- },
53
- "gitHead": "ac95258c753c7e75b57da7ae47426d22b78e8c01"
54
- }
51
+ }
52
+ }