UNPKG

lago-javascript-client

Version:
51 lines (50 loc) 1.81 kB
"use strict"; 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; }