/// <reference types="node" />
import { BlueprintHelper } from "../../../blueprint/Helpers/BlueprintHelper";
import type { NonEmptyString } from "../../../common/CustomTypes/NonEmptyString";
import type { NaturalNumber } from "../../../common/CustomTypes/Numerics";
import type { Logger, OperationLoggingSeverity } from "../../../common/Logging";
import type { Void } from "../../../common/Types";
import type { AxiosInstance } from 'axios';
import type { TaggedDeploymentPart } from "../../CustomTypes/TaggedDeployment";
import { Git } from "../../git";
import type { Project, ProjectId, ProjectType } from "../../Types";
import type { ErrorMapping, IdentityToken, ServiceClientConfig } from "../common";
import type { ItemSelection } from "../ItemSelection";
import { ServiceClientBase } from "../ServiceClientBase";
import type { ConfigurableServiceClientCtor } from "../ServiceClientBase/ConfigurableServiceClient";
import type { ProjectValidatingServiceClientCtor } from "../ServiceClientBase/ProjectValidatingServiceClient";
import type { Cursor, PresignedUrlsResponse, UploadBuiltProjectOptions, VersionsSummaryResponse, VersionsResponse } from "./Types";
export declare const BuildsServiceClientBase: ConfigurableServiceClientCtor<ServiceClientConfig, ProjectValidatingServiceClientCtor<typeof ServiceClientBase>>;
export interface BuildsManagerOptions {
    axios?: AxiosInstance;
    endpoints: BuildEndpoints;
    getToken: () => Promise<IdentityToken>;
    logger?: Logger<OperationLoggingSeverity>;
    config?: ServiceClientConfig;
    git?: Git;
    customPresigning?: (projectId: string, version: TaggedDeploymentPart, partsNumbers: number, projectType?: ProjectType) => Promise<PresignedUrlsResponse>;
    errorMapping?: ErrorMapping;
}
export interface BuildEndpoints {
    backoffice: string;
    integrations: string;
}
export interface IBuildsManager {
    publish(options: PublishOptions): Promise<Void>;
    publishNonAltostraProject(options: PublishNonAltostraOptions): Promise<Void>;
    list(projectId: ItemSelection | NonEmptyString, options?: ListOptions): Promise<VersionsResponse>;
    getVersionsSummary(): Promise<VersionsSummaryResponse>;
    delete(projectId: NonEmptyString, version: TaggedDeploymentPart): Promise<Void>;
}
export interface PublishOptionsBase {
    project?: Project;
    version: TaggedDeploymentPart;
    requireCommitOnPush: boolean;
}
export interface PublishOptions extends PublishOptionsBase {
    projectDir: string;
    force?: boolean;
    initializeProject?: boolean;
}
export interface PublishNonAltostraOptions extends PublishOptionsBase {
    project: Project;
    packagePath: string | null;
    cfnTemplatePath: string;
}
export interface ListOptions {
    pageCursor?: Cursor;
    filter?: ListFilter;
}
export interface ListFilter {
    date?: {
        from?: DateInput;
        to?: DateInput;
    };
}
export declare type DateInput = ConstructorParameters<typeof Date>[0];
export declare const defaultConfig: ServiceClientConfig;
export declare class BuildsManager extends BuildsServiceClientBase implements IBuildsManager {
    #private;
    constructor({ axios, endpoints, getToken, logger, config, customPresigning, errorMapping, git, }: BuildsManagerOptions);
    publishNonAltostraProject({ project, packagePath, cfnTemplatePath, version, requireCommitOnPush, }: PublishNonAltostraOptions): Promise<Void>;
    publish({ projectDir, version, force, project, initializeProject, requireCommitOnPush, }: PublishOptions): Promise<Void>;
    list(projectIdOrSelection: ItemSelection | ProjectId, options?: ListOptions): Promise<VersionsResponse>;
    getVersionsSummary(): Promise<VersionsSummaryResponse>;
    delete(projectId: NonEmptyString, version: TaggedDeploymentPart): Promise<Void>;
    static packFiles(projectDir: string, helper?: BlueprintHelper, isFileIgnored?: (projectDir: string, file: string) => boolean): Promise<Buffer>;
    static getPartsNumberFromPackedFiles(packedFiles: null): 0;
    static getPartsNumberFromPackedFiles(packedFiles: Buffer): NaturalNumber;
    static getPartsNumberFromPackedFiles(packedFiles: Buffer | null): NaturalNumber | 0;
    static uploadBuiltProject({ uploadParams, cleanup, complete, concurrencyLimit, }: UploadBuiltProjectOptions): Promise<Void>;
}
export declare const NEXT_PAGE_QUERY_PARAM = "next-page";
export declare const FROM_DATE_FILTER_QUERY_PARAM = "from-date";
export declare const TO_DATE_FILTER_QUERY_PARAM = "to-date";
