export interface Repository {
    repositoryArn?: string;
    registryId?: string;
    repositoryName?: string;
    repositoryUri?: string;
    createdAt?: string;
    imageTagMutability?: 'MUTABLE' | 'IMMUTABLE';
    imageScanningConfiguration?: {
        scanOnPush?: boolean;
    };
    encryptionConfiguration?: {
        encryptionType?: 'AES256' | 'KMS';
        kmsKey?: string;
    };
}
export interface AuthorizationData {
    authorizationToken?: string;
    expiresAt?: string;
    proxyEndpoint?: string;
}
export interface ImageDetail {
    registryId?: string;
    repositoryName?: string;
    imageDigest?: string;
    imageTags?: string[];
    imageSizeInBytes?: number;
    imagePushedAt?: string;
    imageScanStatus?: {
        status?: string;
        description?: string;
    };
    imageScanFindingsSummary?: {
        findingSeverityCounts?: Record<string, number>;
    };
}
export interface CreateRepositoryOptions {
    repositoryName: string;
    tags?: {
        Key: string;
        Value: string;
    }[];
    imageTagMutability?: 'MUTABLE' | 'IMMUTABLE';
    imageScanningConfiguration?: {
        scanOnPush?: boolean;
    };
    encryptionConfiguration?: {
        encryptionType?: 'AES256' | 'KMS';
        kmsKey?: string;
    };
}
export interface LifecyclePolicy {
    rulePriority: number;
    description?: string;
    selection: {
        tagStatus: 'tagged' | 'untagged' | 'any';
        tagPrefixList?: string[];
        countType: 'imageCountMoreThan' | 'sinceImagePushed';
        countNumber?: number;
        countUnit?: 'days';
    };
    action: {
        type: 'expire';
    };
}
/**
 * ECR service management using direct API calls
 */
export declare class ECRClient {
    private client;
    private region;
    constructor(region?: string, profile?: string);
    /**
     * Create a new ECR repository
     */
    createRepository(options: CreateRepositoryOptions): Promise<{
        repository?: Repository;
    }>;
    /**
     * Describe ECR repositories
     */
    describeRepositories(options?: {
        repositoryNames?: string[];
        registryId?: string;
        maxResults?: number;
        nextToken?: string;
    }): Promise<{
        repositories?: Repository[];
        nextToken?: string;
    }>;
    /**
     * Get authorization token for Docker login
     */
    getAuthorizationToken(registryIds?: string[]): Promise<{
        authorizationData?: AuthorizationData[];
    }>;
    /**
     * Delete an ECR repository
     */
    deleteRepository(options: {
        repositoryName: string;
        registryId?: string;
        force?: boolean;
    }): Promise<{
        repository?: Repository;
    }>;
    /**
     * Describe images in a repository
     */
    describeImages(options: {
        repositoryName: string;
        registryId?: string;
        imageIds?: {
            imageTag?: string;
            imageDigest?: string;
        }[];
        filter?: {
            tagStatus?: 'TAGGED' | 'UNTAGGED' | 'ANY';
        };
        maxResults?: number;
        nextToken?: string;
    }): Promise<{
        imageDetails?: ImageDetail[];
        nextToken?: string;
    }>;
    /**
     * Batch delete images from a repository
     */
    batchDeleteImage(options: {
        repositoryName: string;
        registryId?: string;
        imageIds: {
            imageTag?: string;
            imageDigest?: string;
        }[];
    }): Promise<{
        imageIds?: {
            imageTag?: string;
            imageDigest?: string;
        }[];
        failures?: {
            imageId?: {
                imageTag?: string;
                imageDigest?: string;
            };
            failureCode?: string;
            failureReason?: string;
        }[];
    }>;
    /**
     * Put lifecycle policy on a repository
     */
    putLifecyclePolicy(options: {
        repositoryName: string;
        registryId?: string;
        lifecyclePolicyText: string;
    }): Promise<{
        registryId?: string;
        repositoryName?: string;
        lifecyclePolicyText?: string;
    }>;
    /**
     * Get lifecycle policy for a repository
     */
    getLifecyclePolicy(options: {
        repositoryName: string;
        registryId?: string;
    }): Promise<{
        registryId?: string;
        repositoryName?: string;
        lifecyclePolicyText?: string;
        lastEvaluatedAt?: string;
    }>;
    /**
     * Set repository policy
     */
    setRepositoryPolicy(options: {
        repositoryName: string;
        policyText: string;
        registryId?: string;
        force?: boolean;
    }): Promise<{
        registryId?: string;
        repositoryName?: string;
        policyText?: string;
    }>;
    /**
     * Get repository policy
     */
    getRepositoryPolicy(options: {
        repositoryName: string;
        registryId?: string;
    }): Promise<{
        registryId?: string;
        repositoryName?: string;
        policyText?: string;
    }>;
    /**
     * Tag a repository resource
     */
    tagResource(options: {
        resourceArn: string;
        tags: {
            Key: string;
            Value: string;
        }[];
    }): Promise<void>;
    /**
     * List tags for a resource
     */
    listTagsForResource(resourceArn: string): Promise<{
        tags?: {
            Key: string;
            Value: string;
        }[];
    }>;
    /**
     * Helper: Create a standard lifecycle policy to keep only N images
     */
    createLifecyclePolicyText(rules: LifecyclePolicy[]): string;
    /**
     * Helper: Get docker login command
     */
    getDockerLoginCommand(): Promise<string>;
    /**
     * Helper: Get the registry URI for this region
     */
    getRegistryUri(accountId: string): string;
    /**
     * Parse repository response
     */
    private parseRepository;
    /**
     * Parse image detail response
     */
    private parseImageDetail;
}
