import type { Client } from '@smithy/smithy-client';
import { AwsClientPool } from '../aws/ClientPool.js';
import { type AwsCredentialProviderWithMetaData } from '../aws/coreAuth.js';
import { AbstractClient, type ClientConstructor } from './AbstractClient.js';
type AnyClient = Client<any, any, any, any>;
/**
 * Type for custom client constructors
 */
type CustomClientConstructor<CustomClientContext = {}> = (new (options: {
    credentials: AwsCredentialProviderWithMetaData;
    region: string | undefined;
    endpoint?: string | undefined;
}, customContext: CustomClientContext) => AbstractClient<CustomClientContext>) & {
    clientName: string;
};
/**
 * AWS Config-based client pool using dedicated Config client classes with registry
 */
export declare class AbstractClientPool<CustomClientContext = {}> extends AwsClientPool {
    private configClientCache;
    private clientRegistry;
    constructor();
    /**
     * Register the default supported clients
     */
    protected registerDefaultClients(): void;
    /**
     * Get the custom client context for a specific client type and configuration
     * @param ClientType The client constructor
     * @param credentials AWS credentials
     * @param region AWS region
     * @param endpoint Custom endpoint
     * @returns Custom client context
     */
    protected getClientContext(ClientType: ClientConstructor<any>, credentials: AwsCredentialProviderWithMetaData, region: string | undefined, endpoint: string | undefined): CustomClientContext;
    /**
     * Register a Config client implementation - automatically extracts SDK client name
     *
     * @param customClientConstructor The custom client constructor
     */
    registerClient(customClientConstructor: CustomClientConstructor<CustomClientContext>): void;
    /**
     * Returns a Config-based client that implements the same interface as the AWS SDK client
     *
     * @param ClientType The AWS SDK client constructor
     * @param credentials AWS credentials
     * @param region AWS region
     * @param endpoint Custom endpoint
     */
    client<T extends AnyClient>(ClientType: ClientConstructor<T>, credentials: AwsCredentialProviderWithMetaData, region: string | undefined, endpoint: string | undefined): T;
}
export {};
//# sourceMappingURL=AbstractClientPool.d.ts.map