// @flow import type { IBasicAuth, IBasicStorage, UpLinkConf, Callback, Versions, Version, MergeTags, Config, Logger, PackageAccess, StringValue as verdaccio$StringValue, Package} from '@verdaccio/types'; import type { IUploadTarball, IReadTarball, } from '@verdaccio/streams'; import type {ILocalData} from '@verdaccio/local-storage'; import type {NextFunction, $Request, $Response} from 'request'; export type StringValue = verdaccio$StringValue; interface IAuthWebUI { issueUIjwt(user: string, time: string): string; } interface IAuthMiddleware { apiJWTmiddleware(): $NextFunctionVer; webUIJWTmiddleware(): $NextFunctionVer; } export interface IAuth extends IBasicAuth, IAuthMiddleware, IAuthWebUI { config: verdaccio$Config; logger: verdaccio$Logger; secret: string; plugins: Array; } export interface IWebSearch { index: any; storage: IStorageHandler; query(query: string): any; add(pkg: Version): void; remove(name: string): void; reindex(): void; configureStorage(storage: IStorageHandler): void; } export interface IProxy { config: UpLinkConf; failed_requests: number; userAgent: string; ca?: string | void; logger: Logger; server_id: string; url: any; maxage: number; timeout: number; max_fails: number; fail_timeout: number; upname: string; fetchTarball(url: string): IReadTarball; isUplinkValid(url: string): boolean; getRemoteMetadata(name: string, options: any, callback: Callback): void; } export type ProxyList = { [key: string]: IProxy; } export type Utils = { ErrorCode: any; getLatestVersion: Callback; isObject: (value: any) => boolean; validate_name: (value: any) => boolean; tag_version: (value: any, version: string, tag: string) => void; normalizeDistTags: (pkg: Package) => void; semverSort: (keys: Array) => Array; } export interface IStorageHandler { config: Config; localStorage: IStorage; logger: Logger; uplinks: ProxyList; addPackage(name: string, metadata: any, callback: Function): Promise; init(config: Config): Promise; addVersion(name: string, version: string, metadata: Version, tag: StringValue, callback: Callback): void; mergeTags(name: string, tagHash: MergeTags, callback: Callback): void; changePackage(name: string, metadata: Package, revision: string, callback: Callback): void; removePackage(name: string, callback: Callback): void; removeTarball(name: string, filename: string, revision: string, callback: Callback): void; addTarball(name: string, filename: string): IUploadTarball; getTarball(name: string, filename: string): IReadTarball; getPackage(options: any): void; search(startkey: string, options: any): void; getLocalDatabase(callback: Callback): void; _syncUplinksMetadata(name: string, packageInfo: Package, options: any, callback: Callback): void; _updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void; } export type StartUpConfig = { storage: string; self_path: string; } export type MatchedPackage = PackageAccess | void; export interface IStorage extends IBasicStorage { config: Config; localData: ILocalData; logger: Logger; } export type JWTPayload = { user: string; group: string | void; } export type JWTSignOptions = { expiresIn: string; } export type $RequestExtend = $Request & {remote_user?: any} export type $ResponseExtend = $Response & {cookies?: any} export type $NextFunctionVer = NextFunction & mixed; export type $SidebarPackage = Package & {latest: mixed}