lago-javascript-client
Version:
Lago JavaScript API Client
51 lines (50 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseRateLimitInfo = exports.parseRateLimitHeaders = exports.rateLimitUsagePct = void 0;
/**
* Returns the fraction of the rate limit currently used in [0.0, 1.0],
* or `null` when the headers aren't usable (missing limit, zero limit,
* missing remaining).
*/
function rateLimitUsagePct(info) {
if (info.limit == null || info.remaining == null || info.limit <= 0) {
return null;
}
return 1 - info.remaining / info.limit;
}
exports.rateLimitUsagePct = rateLimitUsagePct;
/**
* Extract rate limit information from response headers
*/
function parseRateLimitHeaders(headers) {
return {
limit: parseHeaderAsNumber(headers, "x-ratelimit-limit"),
remaining: parseHeaderAsNumber(headers, "x-ratelimit-remaining"),
reset: parseHeaderAsNumber(headers, "x-ratelimit-reset"),
};
}
exports.parseRateLimitHeaders = parseRateLimitHeaders;
/**
* Returns a `RateLimitInfo` (headers + request context), or `null` when no
* `x-ratelimit-*` headers are present (e.g. self-hosted Lago instance with
* limits disabled). Useful for skipping observability emission entirely when
* there's nothing to report.
*/
function parseRateLimitInfo(headers, method, url) {
const parsed = parseRateLimitHeaders(headers);
if (parsed.limit == null && parsed.remaining == null && parsed.reset == null) {
return null;
}
return { ...parsed, method, url };
}
exports.parseRateLimitInfo = parseRateLimitInfo;
/**
* Helper to parse a header value as a number
*/
function parseHeaderAsNumber(headers, headerName) {
const value = headers.get(headerName);
if (value === null)
return null;
const num = parseInt(value, 10);
return isNaN(num) ? null : num;
}