@foundatiofx/fetchclient 0.47.0
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/esm/mod.js +5 -0
- package/esm/package.json +3 -0
- package/esm/src/Counter.js +36 -0
- package/esm/src/DefaultHelpers.js +132 -0
- package/esm/src/FetchClient.js +543 -0
- package/esm/src/FetchClientCache.js +88 -0
- package/esm/src/FetchClientContext.js +1 -0
- package/esm/src/FetchClientMiddleware.js +1 -0
- package/esm/src/FetchClientOptions.js +1 -0
- package/esm/src/FetchClientProvider.js +200 -0
- package/esm/src/FetchClientResponse.js +1 -0
- package/esm/src/LinkHeader.js +70 -0
- package/esm/src/ObjectEvent.js +15 -0
- package/esm/src/ProblemDetails.js +47 -0
- package/esm/src/RateLimitMiddleware.js +115 -0
- package/esm/src/RateLimiter.js +347 -0
- package/esm/src/RequestOptions.js +1 -0
- package/license +20 -0
- package/package.json +50 -0
- package/readme.md +303 -0
- package/script/mod.js +27 -0
- package/script/package.json +3 -0
- package/script/src/Counter.js +40 -0
- package/script/src/DefaultHelpers.js +149 -0
- package/script/src/FetchClient.js +547 -0
- package/script/src/FetchClientCache.js +92 -0
- package/script/src/FetchClientContext.js +2 -0
- package/script/src/FetchClientMiddleware.js +2 -0
- package/script/src/FetchClientOptions.js +2 -0
- package/script/src/FetchClientProvider.js +204 -0
- package/script/src/FetchClientResponse.js +2 -0
- package/script/src/LinkHeader.js +72 -0
- package/script/src/ObjectEvent.js +19 -0
- package/script/src/ProblemDetails.js +51 -0
- package/script/src/RateLimitMiddleware.js +120 -0
- package/script/src/RateLimiter.js +356 -0
- package/script/src/RequestOptions.js +2 -0
- package/types/_dnt.test_shims.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/almost_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/array_includes.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/assert.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/assertion_error.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/exists.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/fail.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/false.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/greater.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/greater_or_equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/instance_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/is_error.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/less.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/less_or_equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/not_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/not_instance_of.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/not_match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/not_strict_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/object_match.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/rejects.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/strict_equals.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/string_includes.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/throws.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/unimplemented.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/1.0.14/unreachable.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/build_message.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/diff.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/diff_str.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/format.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/styles.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/internal/1.0.10/types.d.ts.map +1 -0
- package/types/mod.d.ts +11 -0
- package/types/mod.d.ts.map +1 -0
- package/types/src/Counter.d.ts +27 -0
- package/types/src/Counter.d.ts.map +1 -0
- package/types/src/DefaultHelpers.d.ts +106 -0
- package/types/src/DefaultHelpers.d.ts.map +1 -0
- package/types/src/FetchClient.d.ts +156 -0
- package/types/src/FetchClient.d.ts.map +1 -0
- package/types/src/FetchClient.test.d.ts.map +1 -0
- package/types/src/FetchClientCache.d.ts +62 -0
- package/types/src/FetchClientCache.d.ts.map +1 -0
- package/types/src/FetchClientContext.d.ts +8 -0
- package/types/src/FetchClientContext.d.ts.map +1 -0
- package/types/src/FetchClientMiddleware.d.ts +9 -0
- package/types/src/FetchClientMiddleware.d.ts.map +1 -0
- package/types/src/FetchClientOptions.d.ts +53 -0
- package/types/src/FetchClientOptions.d.ts.map +1 -0
- package/types/src/FetchClientProvider.d.ts +109 -0
- package/types/src/FetchClientProvider.d.ts.map +1 -0
- package/types/src/FetchClientResponse.d.ts +29 -0
- package/types/src/FetchClientResponse.d.ts.map +1 -0
- package/types/src/LinkHeader.d.ts +15 -0
- package/types/src/LinkHeader.d.ts.map +1 -0
- package/types/src/ObjectEvent.d.ts +20 -0
- package/types/src/ObjectEvent.d.ts.map +1 -0
- package/types/src/ProblemDetails.d.ts +43 -0
- package/types/src/ProblemDetails.d.ts.map +1 -0
- package/types/src/RateLimit.test.d.ts.map +1 -0
- package/types/src/RateLimitMiddleware.d.ts +50 -0
- package/types/src/RateLimitMiddleware.d.ts.map +1 -0
- package/types/src/RateLimiter.d.ts +179 -0
- package/types/src/RateLimiter.d.ts.map +1 -0
- package/types/src/RequestOptions.d.ts +64 -0
- package/types/src/RequestOptions.d.ts.map +1 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateLimiter = void 0;
|
|
4
|
+
exports.groupByDomain = groupByDomain;
|
|
5
|
+
exports.buildRateLimitHeader = buildRateLimitHeader;
|
|
6
|
+
exports.buildRateLimitPolicyHeader = buildRateLimitPolicyHeader;
|
|
7
|
+
exports.parseRateLimitHeader = parseRateLimitHeader;
|
|
8
|
+
exports.parseRateLimitPolicyHeader = parseRateLimitPolicyHeader;
|
|
9
|
+
/**
|
|
10
|
+
* A rate limiter that tracks requests per time window.
|
|
11
|
+
*/
|
|
12
|
+
class RateLimiter {
|
|
13
|
+
options;
|
|
14
|
+
buckets = new Map();
|
|
15
|
+
groupOptions = new Map();
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = {
|
|
18
|
+
getGroupFunc: () => "global",
|
|
19
|
+
onRateLimitExceeded: () => { },
|
|
20
|
+
groups: {},
|
|
21
|
+
...options,
|
|
22
|
+
};
|
|
23
|
+
// Initialize group options if provided
|
|
24
|
+
if (options.groups) {
|
|
25
|
+
for (const [groupKey, groupOptions] of Object.entries(options.groups)) {
|
|
26
|
+
this.groupOptions.set(groupKey, groupOptions);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Checks if a request is allowed and updates the rate limit state.
|
|
32
|
+
* @param url - The request URL
|
|
33
|
+
* @returns True if the request is allowed, false if rate limit is exceeded
|
|
34
|
+
*/
|
|
35
|
+
isAllowed(url) {
|
|
36
|
+
const key = this.options.getGroupFunc(url);
|
|
37
|
+
const groupOptions = this.getGroupOptions(key);
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
// Use group-specific options if available, otherwise fall back to global options
|
|
40
|
+
const maxRequests = groupOptions.maxRequests ?? 0;
|
|
41
|
+
const windowSeconds = groupOptions.windowSeconds ?? 0;
|
|
42
|
+
const onRateLimitExceeded = groupOptions.onRateLimitExceeded ??
|
|
43
|
+
this.options.onRateLimitExceeded;
|
|
44
|
+
let bucket = this.buckets.get(key);
|
|
45
|
+
if (!bucket) {
|
|
46
|
+
bucket = {
|
|
47
|
+
requests: [],
|
|
48
|
+
resetTime: now + (windowSeconds * 1000),
|
|
49
|
+
};
|
|
50
|
+
this.buckets.set(key, bucket);
|
|
51
|
+
}
|
|
52
|
+
// Clean up old requests outside the time window
|
|
53
|
+
const windowStart = now - (windowSeconds * 1000);
|
|
54
|
+
bucket.requests = bucket.requests.filter((time) => time > windowStart);
|
|
55
|
+
// Update reset time if all requests have expired
|
|
56
|
+
if (bucket.requests.length === 0) {
|
|
57
|
+
bucket.resetTime = now + (windowSeconds * 1000);
|
|
58
|
+
}
|
|
59
|
+
// Check if we're within the rate limit
|
|
60
|
+
if (bucket.requests.length >= maxRequests) {
|
|
61
|
+
onRateLimitExceeded(bucket.resetTime);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
// Add the current request
|
|
65
|
+
bucket.requests.push(now);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gets the current request count for a specific key.
|
|
70
|
+
* @param url - The request URL
|
|
71
|
+
* @returns The current number of requests in the time window
|
|
72
|
+
*/
|
|
73
|
+
getRequestCount(url) {
|
|
74
|
+
const key = this.options.getGroupFunc(url);
|
|
75
|
+
const groupOptions = this.getGroupOptions(key);
|
|
76
|
+
const bucket = this.buckets.get(key);
|
|
77
|
+
if (!bucket) {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
const windowSeconds = groupOptions.windowSeconds ?? 0;
|
|
82
|
+
const windowStart = now - (windowSeconds * 1000);
|
|
83
|
+
return bucket.requests.filter((time) => time > windowStart).length;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Gets the remaining requests allowed for a specific key.
|
|
87
|
+
* @param url - The request URL
|
|
88
|
+
* @returns The number of remaining requests allowed
|
|
89
|
+
*/
|
|
90
|
+
getRemainingRequests(url) {
|
|
91
|
+
const key = this.options.getGroupFunc(url);
|
|
92
|
+
const groupOptions = this.getGroupOptions(key);
|
|
93
|
+
const maxRequests = groupOptions.maxRequests ?? 0;
|
|
94
|
+
return Math.max(0, maxRequests - this.getRequestCount(url));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Gets the time when the rate limit will reset for a specific key.
|
|
98
|
+
* @param url - The request URL
|
|
99
|
+
* @returns The reset time in milliseconds since epoch, or null if no bucket exists
|
|
100
|
+
*/
|
|
101
|
+
getResetTime(url) {
|
|
102
|
+
const key = this.options.getGroupFunc(url);
|
|
103
|
+
const bucket = this.buckets.get(key);
|
|
104
|
+
return bucket?.resetTime ?? null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clears the rate limit state for a specific key.
|
|
108
|
+
* @param url - The request URL
|
|
109
|
+
*/
|
|
110
|
+
clearBucket(url) {
|
|
111
|
+
const key = this.options.getGroupFunc(url);
|
|
112
|
+
this.buckets.delete(key);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Gets the group key for a URL.
|
|
116
|
+
* @param url - The request URL
|
|
117
|
+
* @returns The group key
|
|
118
|
+
*/
|
|
119
|
+
getGroup(url) {
|
|
120
|
+
return this.options.getGroupFunc(url);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Gets the options for a specific group. Falls back to global options if not set.
|
|
124
|
+
* @param group - The group key
|
|
125
|
+
* @returns The options for the group
|
|
126
|
+
*/
|
|
127
|
+
getGroupOptions(group) {
|
|
128
|
+
const options = this.groupOptions.get(group);
|
|
129
|
+
if (!options) {
|
|
130
|
+
return {
|
|
131
|
+
maxRequests: this.options.maxRequests,
|
|
132
|
+
windowSeconds: this.options.windowSeconds,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return options;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Checks if a group has specific options set.
|
|
139
|
+
* @param group - The group key
|
|
140
|
+
* @returns True if the group has options, false otherwise
|
|
141
|
+
*/
|
|
142
|
+
hasGroupOptions(group) {
|
|
143
|
+
return this.groupOptions.has(group);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Sets options for a specific group.
|
|
147
|
+
* @param group - The group key
|
|
148
|
+
* @param options - The options to set
|
|
149
|
+
*/
|
|
150
|
+
setGroupOptions(group, options) {
|
|
151
|
+
this.groupOptions.set(group, options);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Sets rate limit options for a request.
|
|
155
|
+
* @param url - The request URL
|
|
156
|
+
* @param options - The options to set for this group
|
|
157
|
+
*/
|
|
158
|
+
setOptionsForRequest(url, options) {
|
|
159
|
+
const group = this.getGroup(url);
|
|
160
|
+
this.setGroupOptions(group, options);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Updates rate limit options for a request based on standard rate limit headers.
|
|
164
|
+
* @param url - The request URL
|
|
165
|
+
* @param method - The HTTP method
|
|
166
|
+
* @param headers - The response headers containing rate limit information
|
|
167
|
+
*/
|
|
168
|
+
updateFromHeadersForRequest(url, headers) {
|
|
169
|
+
const group = this.getGroup(url);
|
|
170
|
+
this.updateFromHeaders(group, headers);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Updates rate limit options based on standard rate limit headers.
|
|
174
|
+
* @param group - The group key
|
|
175
|
+
* @param headers - The response headers containing rate limit information
|
|
176
|
+
*/
|
|
177
|
+
updateFromHeaders(group, headers) {
|
|
178
|
+
// Get existing group-specific options (not global fallback)
|
|
179
|
+
const currentOptions = this.hasGroupOptions(group)
|
|
180
|
+
? this.groupOptions.get(group)
|
|
181
|
+
: {};
|
|
182
|
+
const newOptions = { ...currentOptions };
|
|
183
|
+
// Parse IETF standard rate limit headers first, then fall back to x-ratelimit headers
|
|
184
|
+
let limit = null;
|
|
185
|
+
let window = null;
|
|
186
|
+
let reset = null;
|
|
187
|
+
// Try IETF standard headers first
|
|
188
|
+
const rateLimitPolicyHeader = headers.get("ratelimit-policy");
|
|
189
|
+
if (rateLimitPolicyHeader) {
|
|
190
|
+
const parsed = parseRateLimitPolicyHeader(rateLimitPolicyHeader);
|
|
191
|
+
if (parsed?.limit) {
|
|
192
|
+
limit = parsed.limit.toString();
|
|
193
|
+
}
|
|
194
|
+
if (parsed?.windowSeconds) {
|
|
195
|
+
window = parsed.windowSeconds.toString();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const rateLimitHeader = headers.get("ratelimit");
|
|
199
|
+
if (rateLimitHeader) {
|
|
200
|
+
const parsed = parseRateLimitHeader(rateLimitHeader);
|
|
201
|
+
if (parsed?.resetSeconds) {
|
|
202
|
+
reset = parsed.resetSeconds.toString();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Fall back to x-ratelimit headers if IETF headers not found
|
|
206
|
+
if (!limit) {
|
|
207
|
+
limit = headers.get("x-ratelimit-limit") ||
|
|
208
|
+
headers.get("x-rate-limit-limit");
|
|
209
|
+
}
|
|
210
|
+
if (!window) {
|
|
211
|
+
window = headers.get("x-ratelimit-window") ||
|
|
212
|
+
headers.get("x-rate-limit-window");
|
|
213
|
+
}
|
|
214
|
+
if (!reset) {
|
|
215
|
+
reset = headers.get("x-ratelimit-reset") ||
|
|
216
|
+
headers.get("x-rate-limit-reset");
|
|
217
|
+
}
|
|
218
|
+
let hasChanges = false;
|
|
219
|
+
// Apply the parsed values
|
|
220
|
+
if (limit) {
|
|
221
|
+
const maxRequests = parseInt(limit, 10);
|
|
222
|
+
if (!isNaN(maxRequests)) {
|
|
223
|
+
newOptions.maxRequests = maxRequests;
|
|
224
|
+
hasChanges = true;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (window) {
|
|
228
|
+
const windowSeconds = parseInt(window, 10);
|
|
229
|
+
if (!isNaN(windowSeconds)) {
|
|
230
|
+
newOptions.windowSeconds = windowSeconds;
|
|
231
|
+
hasChanges = true;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else if (reset) {
|
|
235
|
+
// If no window header, try to calculate from reset time
|
|
236
|
+
const resetTime = parseInt(reset, 10);
|
|
237
|
+
if (!isNaN(resetTime)) {
|
|
238
|
+
const now = Math.floor(Date.now() / 1000);
|
|
239
|
+
const windowSeconds = Math.max(1, resetTime - now);
|
|
240
|
+
newOptions.windowSeconds = windowSeconds;
|
|
241
|
+
hasChanges = true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Update the group options if we found valid headers
|
|
245
|
+
if (hasChanges) {
|
|
246
|
+
this.setGroupOptions(group, newOptions);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Clears all rate limit state.
|
|
251
|
+
*/
|
|
252
|
+
clearAll() {
|
|
253
|
+
this.buckets.clear();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.RateLimiter = RateLimiter;
|
|
257
|
+
/**
|
|
258
|
+
* Creates a group generator function that groups requests by domain only (no protocol).
|
|
259
|
+
* @param url - The request URL
|
|
260
|
+
* @returns A string representing the domain without protocol
|
|
261
|
+
*/
|
|
262
|
+
function groupByDomain(url) {
|
|
263
|
+
try {
|
|
264
|
+
const urlObj = new URL(url);
|
|
265
|
+
return urlObj.hostname;
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return url;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Creates an IETF standard RateLimit header value.
|
|
273
|
+
* @param info - The rate limit information
|
|
274
|
+
* @returns The formatted RateLimit header value
|
|
275
|
+
*/
|
|
276
|
+
function buildRateLimitHeader(info) {
|
|
277
|
+
let headerValue = `"${info.policy}";r=${info.remaining}`;
|
|
278
|
+
if (info.resetSeconds > 0) {
|
|
279
|
+
headerValue += `;t=${info.resetSeconds}`;
|
|
280
|
+
}
|
|
281
|
+
return headerValue;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Creates an IETF standard RateLimit-Policy header value.
|
|
285
|
+
* @param info - The rate limit information
|
|
286
|
+
* @returns The formatted RateLimit-Policy header value
|
|
287
|
+
*/
|
|
288
|
+
function buildRateLimitPolicyHeader(info) {
|
|
289
|
+
let headerValue = `"${info.policy}";q=${info.limit}`;
|
|
290
|
+
if (info.windowSeconds && info.windowSeconds > 0) {
|
|
291
|
+
headerValue += `;w=${info.windowSeconds}`;
|
|
292
|
+
}
|
|
293
|
+
return headerValue;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Parses an IETF standard RateLimit header value.
|
|
297
|
+
* @param headerValue - The RateLimit header value to parse
|
|
298
|
+
* @returns The parsed rate limit information or null if invalid
|
|
299
|
+
*/
|
|
300
|
+
function parseRateLimitHeader(headerValue) {
|
|
301
|
+
if (!headerValue)
|
|
302
|
+
return null;
|
|
303
|
+
try {
|
|
304
|
+
const result = {};
|
|
305
|
+
// Extract policy name (quoted string at the beginning)
|
|
306
|
+
const policyMatch = headerValue.match(/^"([^"]+)"/);
|
|
307
|
+
if (policyMatch) {
|
|
308
|
+
result.policy = policyMatch[1];
|
|
309
|
+
}
|
|
310
|
+
// Extract remaining (r parameter)
|
|
311
|
+
const remainingMatch = headerValue.match(/r=(\d+)/);
|
|
312
|
+
if (remainingMatch) {
|
|
313
|
+
result.remaining = parseInt(remainingMatch[1], 10);
|
|
314
|
+
}
|
|
315
|
+
// Extract reset time (t parameter)
|
|
316
|
+
const resetMatch = headerValue.match(/t=(\d+)/);
|
|
317
|
+
if (resetMatch) {
|
|
318
|
+
result.resetSeconds = parseInt(resetMatch[1], 10);
|
|
319
|
+
}
|
|
320
|
+
return result;
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Parses an IETF standard RateLimit-Policy header value.
|
|
328
|
+
* @param headerValue - The RateLimit-Policy header value to parse
|
|
329
|
+
* @returns The parsed rate limit policy information or null if invalid
|
|
330
|
+
*/
|
|
331
|
+
function parseRateLimitPolicyHeader(headerValue) {
|
|
332
|
+
if (!headerValue)
|
|
333
|
+
return null;
|
|
334
|
+
try {
|
|
335
|
+
const result = {};
|
|
336
|
+
// Extract policy name (quoted string at the beginning)
|
|
337
|
+
const policyMatch = headerValue.match(/^"([^"]+)"/);
|
|
338
|
+
if (policyMatch) {
|
|
339
|
+
result.policy = policyMatch[1];
|
|
340
|
+
}
|
|
341
|
+
// Extract quota/limit (q parameter)
|
|
342
|
+
const quotaMatch = headerValue.match(/q=(\d+)/);
|
|
343
|
+
if (quotaMatch) {
|
|
344
|
+
result.limit = parseInt(quotaMatch[1], 10);
|
|
345
|
+
}
|
|
346
|
+
// Extract window (w parameter)
|
|
347
|
+
const windowMatch = headerValue.match(/w=(\d+)/);
|
|
348
|
+
if (windowMatch) {
|
|
349
|
+
result.windowSeconds = parseInt(windowMatch[1], 10);
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_dnt.test_shims.d.ts","sourceRoot":"","sources":["../src/_dnt.test_shims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAKvC,eAAO,MAAM,aAAa;;CAA2C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"almost_equals.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/almost_equals.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,QAmBb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array_includes.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/array_includes.ts"],"names":[],"mappings":"AAMA,0FAA0F;AAC1F,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,QAwBb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/assert.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion_error.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/assertion_error.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equal.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/equal.ts"],"names":[],"mappings":"AA2FA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAuGrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/equals.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,MAAM,QAkBb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exists.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/exists.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,CAAC,EACT,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAOlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fail.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/fail.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAGxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"false.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/false.ts"],"names":[],"mappings":"AAIA,uDAAuD;AACvD,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAI1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/greater.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAMpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greater_or_equal.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/greater_or_equal.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,MAAM,QASb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance_of.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/instance_of.ts"],"names":[],"mappings":"AAIA,sBAAsB;AAEtB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AACzD,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAE9B,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAE9C,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,CAAC,EACf,GAAG,SAAK,GACP,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CA6BnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is_error.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/is_error.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACnD,KAAK,EAAE,OAAO,EAEd,UAAU,CAAC,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAC/C,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAC5B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,IAAI,CAAC,CA8BpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/less.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAMjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less_or_equal.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/less_or_equal.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,MAAM,QASb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/match.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,QAMb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/mod.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not_equals.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/not_equals.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAUtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not_instance_of.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/not_instance_of.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EACtC,MAAM,EAAE,CAAC,EAET,cAAc,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAClD,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAKjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not_match.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/not_match.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,QAMb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"not_strict_equals.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/not_strict_equals.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,MAAM,QAYb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object_match.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/object_match.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAE/B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAChC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACtC,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAUN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejects.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/rejects.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAAC;AACpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EACnD,EAAE,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,EAE9B,UAAU,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAC9C,WAAW,CAAC,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict_equals.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/strict_equals.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,IAAI,CAAC,CA+BrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string_includes.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/string_includes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,QAMb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throws.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/throws.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,OAAO,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;AACX;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAClD,EAAE,EAAE,MAAM,OAAO,EAEjB,UAAU,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAC9C,WAAW,CAAC,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,MAAM,GACX,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unimplemented.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/unimplemented.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAGjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unreachable.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/1.0.14/unreachable.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAG/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build_message.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/build_message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ;AAClB;;;GAGG;AACH,UAAU,UAAQ,GACjB,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CASvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CASrD;AAED,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAC7C,OAAO,GAAE,mBAAwB,GAChC,MAAM,EAAE,CAsBV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/diff.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAanD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAWvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,CAAC,EAAE,CAAC,EAAE,EACN,CAAC,EAAE,CAAC,EAAE,EACN,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,MAAM,GACzB,KAAK,CAAC;IACP,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,CAAC,CAAC;CACV,CAAC,CAgCD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CACtB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,WAAW,EACnB,kBAAkB,EAAE,MAAM,EAC1B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,aAAa,EACrB,IAAI,CAAC,EAAE,aAAa,GACnB,aAAa,CAsBf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAwEvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff_str.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/diff_str.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY/C;AAKD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM,EAAE,CAiBnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EACxB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,GAC3B,UAAU,CAAC,MAAM,CAAC,EAAE,CAetB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAkDlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/format.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,CACtB,CAAC,EAAE,OAAO,EACV,OAAO,EAAE;IACP,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,KACE,MAAM,CAAC;AAEZ;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAmBzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/styles.ts"],"names":[],"mappings":"AAqCA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/internal/1.0.10/types.ts"],"names":[],"mappings":"AAGA,kDAAkD;AAClD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD;;;;GAIG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,4BAA4B;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,6BAA6B;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,+BAA+B;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;CAC3B"}
|
package/types/mod.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { FetchClient } from "./src/FetchClient.js";
|
|
2
|
+
export type { FetchClientOptions } from "./src/FetchClientOptions.js";
|
|
3
|
+
export type { FetchClientResponse } from "./src/FetchClientResponse.js";
|
|
4
|
+
export { ProblemDetails } from "./src/ProblemDetails.js";
|
|
5
|
+
export { type CacheKey, FetchClientCache } from "./src/FetchClientCache.js";
|
|
6
|
+
export type { RequestOptions } from "./src/RequestOptions.js";
|
|
7
|
+
export type { FetchClientMiddleware } from "./src/FetchClientMiddleware.js";
|
|
8
|
+
export type { FetchClientContext } from "./src/FetchClientContext.js";
|
|
9
|
+
export { defaultInstance as defaultProviderInstance, FetchClientProvider, } from "./src/FetchClientProvider.js";
|
|
10
|
+
export * from "./src/DefaultHelpers.js";
|
|
11
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,eAAe,IAAI,uBAAuB,EAC1C,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type IObjectEvent } from "./ObjectEvent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a counter that can be incremented and decremented.
|
|
4
|
+
*/
|
|
5
|
+
export declare class Counter {
|
|
6
|
+
#private;
|
|
7
|
+
/**
|
|
8
|
+
* Gets the current count.
|
|
9
|
+
*/
|
|
10
|
+
get count(): number;
|
|
11
|
+
/**
|
|
12
|
+
* Gets an event that is triggered when the count changes.
|
|
13
|
+
*/
|
|
14
|
+
get changed(): IObjectEvent<{
|
|
15
|
+
previous: number;
|
|
16
|
+
value: number;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Increments the count by 1.
|
|
20
|
+
*/
|
|
21
|
+
increment(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Decrements the count by 1.
|
|
24
|
+
*/
|
|
25
|
+
decrement(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=Counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Counter.d.ts","sourceRoot":"","sources":["../../src/src/Counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAElE;;GAEG;AACH,qBAAa,OAAO;;IAIlB;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,YAAY,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAEtE;IAED;;OAEG;IACH,SAAS;IAMT;;OAEG;IACH,SAAS;CAKV"}
|