Skip to content

Commit f5b1a58

Browse files
committed
add support for reddit, improve gitlab
1 parent cb17dbc commit f5b1a58

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

source/ratelimit-header-parser.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { isModuleNamespaceObject } from 'node:util/types'
12
import {
23
HeadersObject,
34
RateLimit,
@@ -24,12 +25,22 @@ function parseHeadersObject(input: HeadersObject, options: RateLimitOptions | un
2425
prefix = 'ratelimit-'
2526
} else if (getHeader(input, 'x-ratelimit-remaining')) {
2627
prefix = 'x-ratelimit-'
28+
} else if (getHeader(input, 'x-rate-limit-remaining')) {
29+
// twitter - https://developer.twitter.com/en/docs/twitter-api/rate-limits#headers-and-codes
30+
prefix = 'x-rate-limit-'
2731
} else {
28-
// todo: handle vendor-specific headers here - see https://github.com/ietf-wg-httpapi/ratelimit-headers/issues/25
32+
// todo: handle other vendor-specific headers - see
33+
// https://github.com/ietf-wg-httpapi/ratelimit-headers/issues/25
34+
// https://stackoverflow.com/questions/16022624/examples-of-http-api-rate-limiting-http-response-headers
35+
// https://github.com/mre/rate-limits/blob/master/src/variants.rs
36+
// etc.
2937
return;
3038
}
3139

3240
const limit = num(getHeader(input, `${prefix}limit`))
41+
// used - https://github.com/reddit-archive/reddit/wiki/API#rules
42+
// observed - https://docs.gitlab.com/ee/administration/settings/user_and_ip_rate_limits.html#response-headers
43+
const current = num(getHeader(input, `${prefix}used`)) || num(getHeader(input, `${prefix}observed`))
3344
const remaining = num(getHeader(input, `${prefix}remaining`))
3445

3546
let reset: Date|undefined = undefined;
@@ -49,8 +60,8 @@ function parseHeadersObject(input: HeadersObject, options: RateLimitOptions | un
4960
}
5061

5162
return {
52-
limit,
53-
current: limit - remaining,
63+
limit: isNaN(limit) ? current + remaining : limit, // reddit omits
64+
current: isNaN(current) ? limit - remaining : current, // most omit
5465
remaining,
5566
reset
5667
}

0 commit comments

Comments
 (0)