@remcostoeten/fync
Version:
A unified TypeScript library for easy access to popular APIs (GitHub, Spotify, GitLab, etc.)
101 lines • 4.29 kB
TypeScript
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