Socket
Socket
Sign inDemoInstall

@gitbeaker/requester-utils

Package Overview
Dependencies
Maintainers
1
Versions
256
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gitbeaker/requester-utils - npm Package Compare versions

Comparing version 39.29.0 to 39.30.0--canary.3428.1137971077.0

14

dist/index.d.ts

@@ -1,6 +0,5 @@

import { RateLimit } from 'async-sema';
type RateLimiters = Record<string, ReturnType<typeof RateLimit> | {
type RateLimiterFn = () => Promise<number>;
type RateLimiters = Record<string, RateLimiterFn | {
method: string;
limit: ReturnType<typeof RateLimit>;
limit: RateLimiterFn;
}>;

@@ -48,3 +47,3 @@ type RateLimitOptions = Record<string, number | {

signal?: AbortSignal;
rateLimiters?: Record<string, ReturnType<typeof RateLimit>>;
rateLimiters?: Record<string, RateLimiterFn>;
};

@@ -59,2 +58,3 @@ interface RequesterType {

type RequestHandlerFn<T extends ResponseBodyTypes = ResponseBodyTypes> = (endpoint: string, options?: Record<string, unknown>) => Promise<FormattedResponse<T>>;
declare function generateRateLimiterFn(limit: number, interval: number): () => Promise<number>;
declare function formatQuery(params?: Record<string, unknown>): string;

@@ -66,3 +66,3 @@ type OptionsHandlerFn = (serviceOptions: ResourceOptions, requestOptions: RequestOptions) => Promise<RequestOptions>;

declare function presetResourceArguments<T extends Record<string, Constructable>>(resources: T, customConfig?: Record<string, unknown>): T;
declare function getMatchingRateLimiter(endpoint: string, rateLimiters?: RateLimiters, method?: string): () => Promise<void>;
declare function getMatchingRateLimiter(endpoint: string, rateLimiters?: RateLimiters, method?: string): RateLimiterFn;

@@ -123,2 +123,2 @@ interface RootResourceOptions<C> {

export { type BaseRequestOptionsWithAccessToken, type BaseRequestOptionsWithJobToken, type BaseRequestOptionsWithOAuthToken, BaseResource, type BaseResourceOptions, type Constructable, type DefaultRequestOptions, type FormattedResponse, GitbeakerRequestError, GitbeakerRetryError, GitbeakerTimeoutError, type GitlabToken, type OptionsHandlerFn, type RateLimitOptions, type RateLimiters, type RequestHandlerFn, type RequestOptions, type RequesterType, type ResourceOptions, type ResponseBodyTypes, type RootResourceOptions, createRateLimiters, createRequesterFn, defaultOptionsHandler, formatQuery, getMatchingRateLimiter, presetResourceArguments };
export { type BaseRequestOptionsWithAccessToken, type BaseRequestOptionsWithJobToken, type BaseRequestOptionsWithOAuthToken, BaseResource, type BaseResourceOptions, type Constructable, type DefaultRequestOptions, type FormattedResponse, GitbeakerRequestError, GitbeakerRetryError, GitbeakerTimeoutError, type GitlabToken, type OptionsHandlerFn, type RateLimitOptions, type RateLimiterFn, type RateLimiters, type RequestHandlerFn, type RequestOptions, type RequesterType, type ResourceOptions, type ResponseBodyTypes, type RootResourceOptions, createRateLimiters, createRequesterFn, defaultOptionsHandler, formatQuery, generateRateLimiterFn, getMatchingRateLimiter, presetResourceArguments };

@@ -5,10 +5,17 @@ 'use strict';

var xcase = require('xcase');
var asyncSema = require('async-sema');
var micromatch = require('micromatch');
var rateLimiterFlexible = require('rate-limiter-flexible');
var Picomatch = require('picomatch-browser');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var micromatch__default = /*#__PURE__*/_interopDefault(micromatch);
var Picomatch__default = /*#__PURE__*/_interopDefault(Picomatch);
// src/RequesterUtils.ts
var { isMatch: isGlobMatch } = Picomatch__default.default;
function generateRateLimiterFn(limit, interval) {
const limiter = new rateLimiterFlexible.RateLimiterQueue(
new rateLimiterFlexible.RateLimiterMemory({ points: limit, duration: interval })
);
return () => limiter.removeTokens(1);
}
function formatQuery(params = {}) {

@@ -56,7 +63,7 @@ const decamelized = xcase.decamelizeKeys(params);

if (typeof config === "number")
rateLimiters[key] = asyncSema.RateLimit(config, { timeUnit: 6e4 });
rateLimiters[key] = generateRateLimiterFn(config, 60);
else
rateLimiters[key] = {
method: config.method.toUpperCase(),
limit: asyncSema.RateLimit(config.limit, { timeUnit: 6e4 })
limit: generateRateLimiterFn(config.limit, 60)
};

@@ -101,11 +108,10 @@ });

const sortedEndpoints = Object.keys(rateLimiters).sort().reverse();
const match = sortedEndpoints.find((ep) => micromatch__default.default.isMatch(endpoint, ep));
const match = sortedEndpoints.find((ep) => isGlobMatch(endpoint, ep));
const rateLimitConfig = match && rateLimiters[match];
if (rateLimitConfig && typeof rateLimitConfig !== "object") {
if (typeof rateLimitConfig === "function")
return rateLimitConfig;
}
if (rateLimitConfig && rateLimitConfig.method.toUpperCase() === method.toUpperCase()) {
if (rateLimitConfig && rateLimitConfig?.method?.toUpperCase() === method.toUpperCase()) {
return rateLimitConfig.limit;
}
return asyncSema.RateLimit(3e3, { timeUnit: 6e4 });
return generateRateLimiterFn(3e3, 60);
}

@@ -231,3 +237,4 @@

exports.formatQuery = formatQuery;
exports.generateRateLimiterFn = generateRateLimiterFn;
exports.getMatchingRateLimiter = getMatchingRateLimiter;
exports.presetResourceArguments = presetResourceArguments;
{
"name": "@gitbeaker/requester-utils",
"version": "39.29.0",
"version": "39.30.0--canary.3428.1137971077.0",
"description": "Utility functions for requester implementatons used in @gitbeaker",

@@ -28,5 +28,10 @@ "license": "MIT",

".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
}

@@ -55,13 +60,13 @@ },

"dependencies": {
"async-sema": "^3.1.1",
"micromatch": "^4.0.5",
"picomatch-browser": "^2.2.6",
"qs": "^6.11.2",
"rate-limiter-flexible": "^4.0.0",
"xcase": "^2.0.1"
},
"devDependencies": {
"@types/node": "^20.10.4",
"@types/node": "^20.10.5",
"tsup": "^8.0.1",
"typescript": "^5.3.3"
},
"gitHead": "29e36d244bf9f4852e227012775b946f80caa5af"
"gitHead": "54851e218b030b5ec4ebcb2b6b99c5c246fc7d99"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc