import type { TChainableClient, TNpmClientConfig, TRequestOptions } from "./services/npm-client";
import type { TNpmAuditResponse, TNpmCollaborator, TNpmDeprecation, TNpmDistTags, TNpmDownloadCount, TNpmDownloadsResponse, TNpmOrganization, TNpmPackageInfo, TNpmPackageSize, TNpmPackageVersion, TNpmSearchResponse, TNpmSearchResult, TNpmUser, TNpmVulnerability } from "./types";
type TNpm = {
    api: TChainableClient;
    package(packageName: string): TPackageClient;
    search: TSearchClient;
    downloads: TDownloadsClient;
    user(username: string): TUserClient;
    org(orgName: string): TOrgClient;
    tag(tag: string): TTagClient;
};
type TPackageClient = {
    get(): Promise<TNpmPackageInfo>;
    version(version: string): TVersionClient;
    latest(): Promise<TNpmPackageVersion>;
    versions(): Promise<Record<string, TNpmPackageVersion>>;
    downloads: {
        last(period: "day" | "week" | "month"): Promise<TNpmDownloadCount>;
        range(start: string, end: string): Promise<TNpmDownloadsResponse>;
    };
    chain: TChainableClient;
};
type TVersionClient = {
    get(): Promise<TNpmPackageVersion>;
    chain: TChainableClient;
};
type TSearchClient = {
    packages(query: string, options?: TRequestOptions & {
        size?: number;
        from?: number;
        quality?: number;
        popularity?: number;
        maintenance?: number;
    }): Promise<TNpmSearchResponse>;
    chain: TChainableClient;
};
type TDownloadsClient = {
    package(packageName: string, period?: "last-day" | "last-week" | "last-month"): Promise<TNpmDownloadCount>;
    packages(packageNames: string[], period?: "last-day" | "last-week" | "last-month"): Promise<Record<string, TNpmDownloadCount>>;
    range(packageName: string, start: string, end: string): Promise<TNpmDownloadsResponse>;
    chain: TChainableClient;
};
type TUserClient = {
    get(): Promise<TNpmUser>;
    packages(options?: TRequestOptions): Promise<TNpmPackageInfo[]>;
    chain: TChainableClient;
};
type TOrgClient = {
    get(): Promise<TNpmOrganization>;
    packages(options?: TRequestOptions): Promise<TNpmPackageInfo[]>;
    members(options?: TRequestOptions): Promise<TNpmUser[]>;
    chain: TChainableClient;
};
type TTagClient = {
    packages(options?: TRequestOptions): Promise<TNpmPackageInfo[]>;
    chain: TChainableClient;
};
type TAdvancedPackageClient = TPackageClient & {
    vulnerabilities(): Promise<TNpmVulnerability[]>;
    audit(): Promise<TNpmAuditResponse>;
    size(): Promise<TNpmPackageSize>;
    deprecation(): Promise<TNpmDeprecation | null>;
    distTags(): Promise<TNpmDistTags>;
    collaborators(): Promise<TNpmCollaborator[]>;
    isDeprecated(): Promise<boolean>;
    bundleAnalysis(): Promise<{
        size: number;
        gzip: number;
        modules: number;
        dependencies: string[];
    }>;
};
/**
 * Creates a new NPM Registry API client
 *
 * @param config - Optional configuration for the NPM client
 * @param config.cache - Enable response caching (default: false)
 * @param config.cacheTTL - Cache time-to-live in milliseconds (default: 300000)
 * @param config.baseUrl - Custom NPM registry URL (default: https://registry.npmjs.org)
 * @param config.timeout - Request timeout in milliseconds (default: 30000)
 *
 * @returns NPM client instance with access to packages, search, downloads, users, orgs, and tags
 *
 * @example
 * ```typescript
 * const npm = NPM({ cache: true, cacheTTL: 600000 });
 *
 * // Get package information
 * const reactInfo = await npm.package('react').get();
 *
 * // Search for packages
 * const results = await npm.search.packages('typescript');
 *
 * // Get download statistics
 * const downloads = await npm.downloads.package('react', 'last-week');
 * ```
 */
declare function NPM(config?: TNpmClientConfig): TNpm;
export { NPM };
export type { TNpm, TPackageClient, TAdvancedPackageClient, TVersionClient, TSearchClient, TDownloadsClient, TUserClient, TOrgClient, TTagClient, TChainableClient, TRequestOptions, TNpmClientConfig, TNpmPackageInfo, TNpmPackageVersion, TNpmSearchResponse, TNpmSearchResult, TNpmDownloadsResponse, TNpmDownloadCount, TNpmUser, TNpmOrganization, TNpmVulnerability, TNpmAuditResponse, TNpmPackageSize, TNpmDeprecation, TNpmDistTags, TNpmCollaborator, };
//# sourceMappingURL=index.d.ts.map