import { Duration } from '@salesforce/kit';
import { Connection } from '@salesforce/core';
import { NamedPackagingDir, SfProject } from '@salesforce/core/project';
import type { SaveResult } from '@jsforce/jsforce-node';
import { Attributes } from 'graphology-types';
import { Optional } from '@salesforce/ts-types';
import { ConvertResult } from '@salesforce/source-deploy-retrieve';
import type { Package } from '@salesforce/types/metadata';
import { PackageProfileApi } from '../package/packageProfileApi';
import { PackageAncestryNode } from '../package/packageAncestry';
import { VersionNumber } from '../package/versionNumber';
import { PackagingSObjects } from './packagingSObjects';
import Package2VersionStatus = PackagingSObjects.Package2VersionStatus;
import PackageInstallRequest = PackagingSObjects.PackageInstallRequest;
import MetadataPackageVersion = PackagingSObjects.MetadataPackageVersion;
export type IPackageVersion1GP = {
    getPackageVersion(id: string): Promise<MetadataPackageVersion[]>;
};
export type IPackageVersion2GP = {
    create(): Promise<void>;
    convert(): Promise<void>;
    delete(): Promise<void>;
    install(): Promise<void>;
    list(): Promise<void>;
    uninstall(): Promise<void>;
    update(): Promise<void>;
};
export type PackageOptions = {
    connection: Connection;
    project?: SfProject;
    packageAliasOrId: string;
};
export type PackageUpdateOptions = {
    Id: string;
    Name?: string;
    Description?: string;
    PackageErrorUsername?: string;
    AppAnalyticsEnabled?: boolean;
    RecommendedVersionId?: string;
};
export type PackageIdType = 'PackageId' | 'SubscriberPackageVersionId' | 'PackageInstallRequestId' | 'PackageUninstallRequestId';
export type PackageVersionOptions1GP = Record<string, unknown>;
export type PackageVersionCreateRequestResult = {
    Id: string;
    Status: Package2VersionStatus;
    Package2Id: string;
    Package2Name: string | null;
    Package2VersionId: string;
    SubscriberPackageVersionId: string | null;
    Tag: string;
    Branch: string;
    Error: any[];
    CreatedDate: string;
    HasMetadataRemoved: boolean | null;
    HasPassedCodeCoverageCheck: boolean | null;
    CodeCoverage: number | null;
    VersionNumber: string | null;
    CreatedBy: string;
    ConvertedFromVersionId: string | null;
    TotalNumberOfMetadataFiles: number | null;
    TotalSizeOfMetadataFiles: number | null;
};
export declare const PackageVersionCreateRequestResultInProgressStatuses: PackagingSObjects.Package2VersionStatus[];
export type PackageVersionCreateRequestError = {
    Message: string;
};
export type PackageVersionCreateEventData = {
    id: string;
    packageUpdated?: boolean;
    packageVersionCreateRequestResult: PackageVersionCreateRequestResult;
    message?: string;
    timeRemaining?: Duration;
};
export type PackageVersionListResult = {
    Id: string;
    Package2Id: string;
    SubscriberPackageVersionId: string;
    Name: string;
    Package2: {
        [key: string]: unknown;
        Name: string;
        NamespacePrefix: string;
        IsOrgDependent?: boolean;
    };
    Description: string;
    Tag: string;
    Branch: string;
    MajorVersion: string;
    MinorVersion: string;
    PatchVersion: string;
    BuildNumber: string;
    IsReleased: boolean;
    CreatedDate: string;
    LastModifiedDate: string;
    IsPasswordProtected: boolean;
    AncestorId: string;
    ValidationSkipped: boolean;
    ValidatedAsync?: boolean;
    CreatedById: string;
    CodeCoverage?: {
        [key: string]: unknown;
        apexCodeCoveragePercentage: number;
    };
    HasPassedCodeCoverageCheck?: boolean;
    ConvertedFromVersionId?: string;
    ReleaseVersion?: string;
    BuildDurationInSeconds?: number;
    HasMetadataRemoved?: boolean;
    Language?: string;
    HasVpi?: boolean;
};
export type PackagePushRequestListQueryOptions = {
    packageId: string;
    scheduledLastDays?: number;
    status?: 'Created' | 'Cancelled' | 'Pending' | 'In Progress' | 'Failed' | 'Succeeded';
    isMigration?: boolean;
};
export type PackagePushRequestListResult = {
    Id: string;
    PackageVersionId: string;
    PackageVersion: {
        Name: string;
        MajorVersion: string;
        MinorVersion: string;
    };
    Status: string;
    ScheduledStartTime: string;
    StartTime: string;
    EndTime: string;
    OrgsScheduled: number;
    OrgsUpgradeSucceeded: number;
    OrgsUpgradeFailed: number;
};
export type PackagePushScheduleQueryOptions = {
    packageVersionId: string;
    scheduledStartTime?: string;
    orgList: string;
};
export type PackagePushScheduleResult = {
    PushRequestId: string;
    ScheduledStartTime: string | undefined;
    Status: string;
};
export type PackagePushRequestReportQueryOptions = {
    packagePushRequestId: string;
};
export type PackagePushRequestAbortQueryOptions = {
    packagePushRequestId: string;
};
export type PackageInstallCreateRequest = Partial<Pick<PackageInstallRequest, 'ApexCompileType' | 'EnableRss' | 'NameConflictResolution' | 'PackageInstallSource' | 'Password' | 'SecurityType' | 'SkipHandlers' | 'UpgradeType'>> & Pick<PackagingSObjects.PackageInstallRequest, 'SubscriberPackageVersionKey'>;
export type Package1Display = {
    MetadataPackageVersionId: string;
    MetadataPackageId: string;
    Name: string;
    Version: string;
    ReleaseState: string;
    BuildNumber: number;
};
export type PackageType = 'Managed' | 'Unlocked';
export type PackageCreateOptions = {
    name: string;
    description: string;
    noNamespace: boolean;
    orgDependent: boolean;
    packageType: PackageType;
    errorNotificationUsername: string;
    path: string;
};
export type PackageDescriptorJson = Partial<NamedPackagingDir> & Partial<{
    id: string;
    features: string[];
    orgPreferences: string[];
    snapshot: string;
    packageMetadataAccess: {
        permissionSets: string[] | string;
        permissionSetLicenses: string[] | string;
    };
    apexTestAccess: {
        permissionSets: string[] | string;
        permissionSetLicenses: string[] | string;
    };
    permissionSetNames: string[];
    permissionSetLicenseDeveloperNames: string[];
    packageMetadataPermissionSetNames: string[];
    packageMetadataPermissionSetLicenseNames: string[];
    branch: string;
    subscriberPackageVersionId: string;
    packageId: string;
    versionName: string;
    language?: string;
}>;
export type PackageVersionCreateRequest = {
    Package2Id: string;
    VersionInfo: string;
    Tag?: string;
    Branch?: string;
    InstallKey?: string;
    Instance?: string;
    SourceOrg?: string;
    Language?: string;
    CalculateCodeCoverage: boolean;
    SkipValidation: boolean;
    AsyncValidation?: boolean;
    IsDevUsePkgZipRequested?: boolean;
    CalcTransitiveDependencies?: boolean;
};
export type PackageVersionListOptions = {
    orderBy?: string;
    modifiedLastDays?: number;
    createdLastDays?: number;
    packages?: string[];
    verbose?: boolean;
    concise?: boolean;
    isReleased?: boolean;
    showConversionsOnly?: boolean;
    branch?: string;
};
export type PackageVersionUpdateOptions = {
    InstallKey?: string;
    VersionName?: string;
    VersionDescription?: string;
    Branch?: string;
    Tag?: string;
};
export type PackageSaveResult = SaveResult;
export type PackageVersionCreateRequestOptions = {
    path: string;
    preserve: boolean;
    definitionfile?: string;
    codecoverage?: boolean;
    branch?: string;
    skipancestorcheck?: boolean;
};
export type PackageVersionMetadataDownloadOptions = {
    subscriberPackageVersionId: string;
    destinationFolder?: string;
};
export type PackageVersionMetadataDownloadResult = ConvertResult;
export type PackageInstallOptions = {
    /**
     * The frequency to poll the org for package publish status. If providing a number
     * it is interpreted in milliseconds.
     */
    publishFrequency?: number | Duration;
    /**
     * The amount of time to wait for package publish to complete. If providing a number
     * it is interpreted in minutes.
     */
    publishTimeout?: number | Duration;
    /**
     * The frequency to poll the org for package installation status. If providing a number
     * it is interpreted in milliseconds.
     */
    pollingFrequency?: number | Duration;
    /**
     * The amount of time to wait for package installation to complete. If providing a number
     * it is interpreted in minutes.
     */
    pollingTimeout?: number | Duration;
};
export type MDFolderForArtifactOptions = {
    packageName?: string;
    sourceDir?: string;
    outputDir?: string;
    manifest?: string;
    sourcePaths?: string[];
    metadataPaths?: string[];
    deploydir?: string;
    sourceApiVersion?: string;
};
export type PackageVersionOptions = {
    connection: Connection;
    /**
     * Can be one of:
     * 1. SubscriberPackageVersionId (04t)
     * 2. PackageVersionId (05i)
     * 3. Alias for a 04t or 05i, defined in sfdx-project.json
     */
    idOrAlias: string;
    project?: SfProject;
};
export type SubscriberPackageVersionOptions = {
    connection: Connection;
    aliasOrId: string;
    password: Optional<string>;
};
export type ConvertPackageOptions = {
    installationKey?: string;
    definitionfile?: string;
    /** @deprecated stop using it*/
    installationKeyBypass: boolean;
    wait: Duration;
    buildInstance?: string;
    frequency?: Duration;
    seedMetadata?: string;
    patchversion?: string;
    codecoverage?: boolean;
};
export type PackageVersionCreateOptions = {
    connection: Connection;
    project: SfProject;
} & Partial<{
    branch: string;
    buildinstance: string;
    codecoverage: boolean;
    definitionfile: string;
    installationkey: string;
    installationkeybypass: boolean;
    language?: string;
    packageId: string;
    path: string;
    postinstallscript: string;
    postinstallurl: string;
    preserve: boolean;
    releasenotesurl: string;
    skipancestorcheck: boolean;
    skipvalidation: boolean;
    asyncvalidation: boolean;
    generatepkgzip?: boolean;
    sourceorg: string;
    tag: string;
    uninstallscript: string;
    validateschema: boolean;
    versiondescription: string;
    versionname: string;
    versionnumber: string;
    profileApi: PackageProfileApi;
}>;
export type PackageVersionCreateRequestQueryOptions = {
    createdlastdays?: number;
    status?: 'Queued' | 'InProgress' | 'Success' | 'Error';
    id?: string;
    showConversionsOnly?: boolean;
};
export type ProfileApiOptions = {
    project: SfProject;
    includeUserLicenses: boolean;
};
export type PackageVersionReportResult = Partial<Omit<PackagingSObjects.Package2Version, 'AncestorId' | 'HasPassedCodeCoverageCheck' | 'HasMetadataRemoved'>> & {
    Package2: Partial<Omit<PackagingSObjects.Package2, 'IsOrgDependent'>> & {
        IsOrgDependent: boolean | null | undefined;
    };
    SubscriberPackageVersion?: Pick<PackagingSObjects.SubscriberPackageVersion, 'Dependencies'>;
    Version: string;
    AncestorVersion?: string | null;
    AncestorId?: string | null;
    PackageType?: PackageType | null;
    HasPassedCodeCoverageCheck?: boolean | null;
    HasMetadataRemoved?: boolean | null;
};
export type PackageVersionCreateReportProgress = PackageVersionCreateRequestResult & {
    remainingWaitTime: Duration;
};
export type Package1VersionCreateRequest = Pick<PackagingSObjects.PackageUploadRequest, 'VersionName' | 'MetadataPackageId'> & Partial<Pick<PackagingSObjects.PackageUploadRequest, 'Description' | 'MajorVersion' | 'MinorVersion' | 'IsReleaseVersion' | 'ReleaseNotesUrl' | 'PostInstallUrl' | 'Password'>>;
export type InstalledPackages = {
    Id: string;
    SubscriberPackageId: string;
    SubscriberPackageVersionId: string;
    MinPackageVersionId: string;
    SubscriberPackage?: PackagingSObjects.SubscriberPackage;
    SubscriberPackageVersion?: PackagingSObjects.SubscriberPackageVersion;
};
export type CodeCoverage = null | {
    apexCodeCoveragePercentage: number;
};
export type CodeCoveragePercentages = null | {
    codeCovPercentages: [
        {
            className: string;
            codeCoveragePercentage: number;
        }
    ];
};
export type PackageAncestryNodeOptions = Attributes & {
    AncestorId?: string;
    SubscriberPackageVersionId: string;
    MajorVersion: string | number;
    MinorVersion: string | number;
    PatchVersion: string | number;
    BuildNumber: string | number;
    depthCounter: number;
};
export type PackageAncestryNodeAttributes = PackageAncestryNodeOptions & {
    node: PackageAncestryNode;
};
export type PackageAncestryData = Omit<PackageAncestryNodeAttributes, 'AncestorId'>;
export type PackageAncestryNodeData = {
    data: PackageAncestryNodeOptions;
    children: PackageAncestryNodeData[];
};
export type PackageAncestryOptions = {
    packageId: string;
    project?: SfProject;
    connection: Connection;
};
export type AncestryRepresentationProducerOptions = {
    packageNode?: PackageAncestryNode;
    depth: number;
    verbose?: boolean;
    logger?: (text: string) => void;
};
export type AncestryRepresentationProducer = {
    label: string;
    options?: AncestryRepresentationProducerOptions;
    addNode(node: AncestryRepresentationProducer): void;
    produce(): PackageAncestryNodeData | string | void;
};
export type PackageVersionDependencyOptions = {
    packageVersionId: string;
    project?: SfProject;
    connection: Connection;
    verbose?: boolean;
    edgeDirection?: 'root-first' | 'root-last';
};
export type DependencyGraphData = {
    creator: string;
    nodes: DependencyGraphNode[];
    edges: DependencyGraphEdge[];
};
export type DependencyGraphNode = {
    subscriberPackageVersionId: string;
    packageName: string;
    version: VersionNumber;
};
export type DependencyGraphEdge = {
    source: string;
    target: string;
};
export declare const PackageEvents: {
    convert: {
        success: string;
        error: string;
        progress: string;
    };
    install: {
        warning: string;
        presend: string;
        postsend: string;
        status: string;
        'subscriber-status': string;
    };
    uninstall: string;
};
export declare const PackageVersionEvents: {
    create: {
        enqueued: string;
        progress: string;
        success: string;
        error: string;
        'timed-out': string;
        'preserve-files': string;
    };
};
export declare const Package1VersionEvents: {
    create: {
        progress: string;
    };
};
export type PackageXml = Pick<Package, 'types' | 'version'>;
export type PackagePushRequestReportResult = {
    PackageVersion: {
        MetadataPackage: {
            Name: string;
            NamespacePrefix: string;
        };
        MetadataPackageId: string;
        Name: string;
        MajorVersion: string;
        MinorVersion: string;
    };
    Id: string;
    PackageVersionId: string;
    Status: string;
    ScheduledStartTime: string | null;
    StartTime: string | null;
    EndTime: string | null;
    DurationSeconds: number | null;
};
export type PackagePushRequestJobCountByStatusResult = {
    expr0: number;
};
export type PackagePushRequestReportJobFailuresResult = {
    ErrorMessage: string;
    ErrorDetails: string;
    ErrorTitle: string;
    ErrorSeverity: string;
    ErrorType: string;
    PackagePushJobId: string;
};
