import { NotFoundError, UnavailableForLegalReasonsError } from 'egg-errors';
import { EggContext } from '@eggjs/tegg';
import { EggLogger, EggAppConfig } from 'egg';
import { MiddlewareController } from '../middleware';
import { UserRoleManager } from '../UserRoleManager';
import { PackageRepository } from '../../repository/PackageRepository';
import { UserRepository } from '../../repository/UserRepository';
import { Package as PackageEntity } from '../../core/entity/Package';
import { PackageVersion as PackageVersionEntity } from '../../core/entity/PackageVersion';
import { UserService } from '../../core/service/UserService';
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: EggLogger;
    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(ctx: EggContext, fullname: string, checkPkgExist?: boolean): Promise<{
        pkg: PackageEntity | null;
        user: import("../../core/entity/User").User;
    }>;
    protected get syncNotFound(): boolean;
    protected get redirectNotFound(): boolean;
    protected getAllowSync(ctx: EggContext): 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: EggContext, fullname: string, filenameWithVersion: string): string;
    protected setCDNHeaders(ctx: EggContext): void;
}
export {};
