import type { IncomingMessage } from 'node:http'; import type { FetchOptions, FetchResult } from '@pnpm/fetching.fetcher-base'; import type { FetchFromRegistry, GetAuthHeader } from '@pnpm/fetching.types'; import type { Cafs } from '@pnpm/store.cafs-types'; import type { StoreIndex } from '@pnpm/store.index'; export interface HttpResponse { body: string; } export type DownloadOptions = { getAuthHeaderByURI: GetAuthHeader; cafs: Cafs; registry?: string; onStart?: (totalSize: number | null, attempt: number) => void; onProgress?: (downloaded: number) => void; integrity?: string; storeIndex: StoreIndex; pkg?: FetchOptions['pkg']; } & Pick; export type DownloadFunction = (url: string, opts: DownloadOptions) => Promise; export interface NpmRegistryClient { get: (url: string, getOpts: object, cb: (err: Error, data: object, raw: object, res: HttpResponse) => void) => void; fetch: (url: string, opts: { auth?: object; }, cb: (err: Error, res: IncomingMessage) => void) => void; } export interface CreateDownloaderOptions { retry?: { retries?: number; factor?: number; minTimeout?: number; maxTimeout?: number; randomize?: boolean; }; timeout?: number; fetchMinSpeedKiBps?: number; } export declare function createDownloader(fetchFromRegistry: FetchFromRegistry, gotOpts: CreateDownloaderOptions): DownloadFunction;