import { Agent } from 'http'; type RateLimiterFn = () => Promise; type RateLimiters = Record; type RateLimitOptions = Record; type ResponseBodyTypes = Record | Record[] | ReadableStream | Blob | string | string[] | number | void | null; interface FormattedResponse { body: T; headers: Record; status: number; } interface Constructable { new (...args: any[]): T; } type ResourceOptions = { headers: { [header: string]: string; }; authHeaders: { [authHeader: string]: () => Promise; }; url: string; rateLimits?: RateLimitOptions; rateLimitDuration?: number; agent?: Agent; }; type DefaultRequestOptions = { body?: FormData | Record; searchParams?: Record; sudo?: string | number; method?: string; asStream?: boolean; signal?: AbortSignal; }; type RequestOptions = { headers?: Record; timeout?: number; method?: string; searchParams?: string; prefixUrl?: string; body?: string | FormData; asStream?: boolean; signal?: AbortSignal; rateLimiters?: Record; agent?: Agent; }; interface RequesterType { get(endpoint: string, options?: DefaultRequestOptions): Promise>; post(endpoint: string, options?: DefaultRequestOptions): Promise>; put(endpoint: string, options?: DefaultRequestOptions): Promise>; patch(endpoint: string, options?: DefaultRequestOptions): Promise>; delete(endpoint: string, options?: DefaultRequestOptions): Promise>; } type RequestHandlerFn = (endpoint: string, options?: Record) => Promise>; declare function generateRateLimiterFn(limit: number, interval: number): () => Promise; declare function formatQuery(params?: Record): string; type OptionsHandlerFn = (serviceOptions: ResourceOptions, requestOptions: RequestOptions) => Promise; declare function defaultOptionsHandler(resourceOptions: ResourceOptions, { body, searchParams, sudo, signal, asStream, method, }?: DefaultRequestOptions): Promise; declare function createRateLimiters(rateLimitOptions?: RateLimitOptions, rateLimitDuration?: number): RateLimiters; declare function createRequesterFn(optionsHandler: OptionsHandlerFn, requestHandler: RequestHandlerFn): (serviceOptions: ResourceOptions) => RequesterType; type PresetConstructors = { [K in keyof T]: T[K]; }; declare function presetResourceArguments>(resources: T, customConfig?: Record): PresetConstructors; declare function getMatchingRateLimiter(endpoint: string, rateLimiters?: RateLimiters, method?: string): RateLimiterFn; interface RootResourceOptions { requesterFn?: (resourceOptions: ResourceOptions) => RequesterType; host?: string; prefixUrl?: string; camelize?: C; queryTimeout?: number | null; rateLimitDuration?: number; sudo?: string | number; profileToken?: string; profileMode?: 'execution' | 'memory'; rateLimits?: RateLimitOptions; agent?: Agent; } type GitlabToken = string | (() => Promise); interface BaseRequestOptionsWithOAuthToken extends RootResourceOptions { oauthToken: GitlabToken; } interface BaseRequestOptionsWithAccessToken extends RootResourceOptions { token: GitlabToken; } interface BaseRequestOptionsWithJobToken extends RootResourceOptions { jobToken: GitlabToken; } type BaseRequestOptionsWithoutToken = RootResourceOptions; type BaseResourceOptions = BaseRequestOptionsWithoutToken | BaseRequestOptionsWithOAuthToken | BaseRequestOptionsWithAccessToken | BaseRequestOptionsWithJobToken; declare class BaseResource { readonly url: string; readonly requester: RequesterType; readonly queryTimeout: number | null; readonly headers: { [header: string]: string; }; readonly authHeaders: { [authHeader: string]: () => Promise; }; readonly camelize: C | undefined; constructor({ sudo, profileToken, camelize, requesterFn, agent, profileMode, host, prefixUrl, queryTimeout, rateLimitDuration, rateLimits, ...tokens }: BaseResourceOptions); } declare class GitbeakerRequestError extends Error { readonly cause?: { description: string; request: Request; response: Response; }; constructor(message: string, options?: { cause?: { description: string; request: Request; response: Response; }; }); } declare class GitbeakerTimeoutError extends Error { constructor(message: string, options?: ErrorOptions); } declare class GitbeakerRetryError extends Error { constructor(message: string, options?: ErrorOptions); } export { type BaseRequestOptionsWithAccessToken, type BaseRequestOptionsWithJobToken, type BaseRequestOptionsWithOAuthToken, type BaseRequestOptionsWithoutToken, 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 };