import { type Context, EggAppConfig, Logger } from 'egg';
import { NotFoundError, UnavailableForLegalReasonsError } from 'egg/errors';
import type { Package as PackageEntity } from '../../core/entity/Package.ts';
import type { PackageVersion as PackageVersionEntity } from '../../core/entity/PackageVersion.ts';
import type { User as UserEntity } from '../../core/entity/User.ts';
import type { UserService } from '../../core/service/UserService.ts';
import type { PackageRepository } from '../../repository/PackageRepository.ts';
import type { UserRepository } from '../../repository/UserRepository.ts';
import { MiddlewareController } from '../middleware/index.ts';
import type { UserRoleManager } from '../UserRoleManager.ts';
declare class PackageNotFoundError extends NotFoundError {
    redirectToSourceRegistry?: string;
}
declare class ControllerRedirectError extends NotFoundError {
    location: string;
    constructor(location: string);
}
export declare abstract class AbstractController extends MiddlewareController {
    protected logger: Logger;
    protected config: EggAppConfig;
    protected userRoleManager: UserRoleManager;
    protected packageRepository: PackageRepository;
    protected userRepository: UserRepository;
    protected userService: UserService;
    protected get sourceRegistry(): string;
    protected get enableSync(): boolean;
    protected isPrivateScope(scope: string): boolean | "";
    protected ensurePublishAccess<C extends boolean>(ctx: Context, fullname: string, checkPkgExist?: C): Promise<{
        pkg: C extends true ? PackageEntity : undefined;
        user: UserEntity;
    }>;
    protected get syncNotFound(): boolean;
    protected get redirectNotFound(): boolean;
    protected getAllowSync(ctx: Context): boolean;
    protected createControllerRedirectError(location: string): ControllerRedirectError;
    protected createPackageNotFoundError(fullname: string, version?: string): PackageNotFoundError;
    protected createPackageNotFoundErrorWithRedirect(fullname: string, version?: string, allowSync?: boolean): PackageNotFoundError;
    protected createPackageBlockError(reason: string, fullname: string, version?: string): UnavailableForLegalReasonsError;
    protected getPackageEntityByFullname(fullname: string, allowSync?: boolean): Promise<PackageEntity>;
    protected getPackageEntity(scope: string, name: string, allowSync?: boolean): Promise<PackageEntity>;
    protected getPackageVersionEntity(pkg: PackageEntity, version: string, allowSync?: boolean): Promise<PackageVersionEntity>;
    protected getAndCheckVersionFromFilename(ctx: Context, fullname: string, filenameWithVersion: string): string;
    protected setCDNHeaders(ctx: Context): void;
}
export {};
