11import type { DataCategory } from '../types-hoist/datacategory' ;
22import type { TransportMakeRequestResponse } from '../types-hoist/transport' ;
3+ import { runInRandomSafeContext , safeDateNow } from './safeRandomGeneratorRunner' ;
34
45// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend
56export type RateLimits = Record < string , number > ;
@@ -12,7 +13,7 @@ export const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds
1213 * @param now current unix timestamp
1314 *
1415 */
15- export function parseRetryAfterHeader ( header : string , now : number = Date . now ( ) ) : number {
16+ export function parseRetryAfterHeader ( header : string , now : number = runInRandomSafeContext ( ( ) => Date . now ( ) ) ) : number {
1617 const headerDelay = parseInt ( `${ header } ` , 10 ) ;
1718 if ( ! isNaN ( headerDelay ) ) {
1819 return headerDelay * 1000 ;
@@ -40,7 +41,7 @@ export function disabledUntil(limits: RateLimits, dataCategory: DataCategory): n
4041/**
4142 * Checks if a category is rate limited
4243 */
43- export function isRateLimited ( limits : RateLimits , dataCategory : DataCategory , now : number = Date . now ( ) ) : boolean {
44+ export function isRateLimited ( limits : RateLimits , dataCategory : DataCategory , now : number = safeDateNow ( ) ) : boolean {
4445 return disabledUntil ( limits , dataCategory ) > now ;
4546}
4647
@@ -52,7 +53,7 @@ export function isRateLimited(limits: RateLimits, dataCategory: DataCategory, no
5253export function updateRateLimits (
5354 limits : RateLimits ,
5455 { statusCode, headers } : TransportMakeRequestResponse ,
55- now : number = Date . now ( ) ,
56+ now : number = safeDateNow ( ) ,
5657) : RateLimits {
5758 const updatedRateLimits : RateLimits = {
5859 ...limits ,
0 commit comments