///
///
import { URL } from 'url';
import { ConnectionOptions as TlsConnectionOptions } from 'tls';
import Diagnostic from '../Diagnostic';
import { kCaFingerprint } from '../symbols';
import { Connection, ConnectionOptions, BaseConnection } from '../connection';
import { HttpAgentOptions, UndiciAgentOptions, agentFn, ApiKeyAuth, BasicAuth, BearerAuth, nodeFilterFn, nodeSelectorFn } from '../types';
type AddConnectionOptions = string | ConnectionOptions;
export interface ConnectionPoolOptions {
tls?: TlsConnectionOptions;
agent?: HttpAgentOptions | UndiciAgentOptions | agentFn | false;
proxy?: string | URL;
auth?: BasicAuth | ApiKeyAuth | BearerAuth;
diagnostic?: Diagnostic;
Connection: typeof BaseConnection;
pingTimeout?: number;
resurrectStrategy?: 'none' | 'ping' | 'optimistic';
caFingerprint?: string;
}
export interface GetConnectionOptions {
filter?: nodeFilterFn;
selector?: nodeSelectorFn;
now: number;
requestId: string | number;
name: string | symbol;
context: any;
}
export default class BaseConnectionPool {
connections: Connection[];
size: number;
Connection: typeof BaseConnection;
diagnostic: Diagnostic;
auth?: BasicAuth | ApiKeyAuth | BearerAuth;
_agent?: HttpAgentOptions | UndiciAgentOptions | agentFn | false;
_proxy?: string | URL;
_tls?: TlsConnectionOptions;
[kCaFingerprint]?: string;
constructor(opts: ConnectionPoolOptions);
markAlive(connection: Connection): this;
markDead(connection: Connection): this;
getConnection(opts: GetConnectionOptions): Connection | null;
/**
* Creates a new connection instance.
*/
createConnection(opts: string | ConnectionOptions): Connection;
/**
* Adds a new connection to the pool.
*
* @param {object|string} host
* @returns {ConnectionPool}
*/
addConnection(connection: AddConnectionOptions | AddConnectionOptions[]): this;
/**
* Removes a new connection to the pool.
*
* @param {object} connection
* @returns {ConnectionPool}
*/
removeConnection(connection: Connection): this;
/**
* Empties the connection pool.
*
* @returns {ConnectionPool}
*/
empty(): Promise;
/**
* Update the ConnectionPool with new connections.
*
* @param {array} array of connections
* @returns {ConnectionPool}
*/
update(nodes: Array): this;
/**
* Transforms the nodes objects to a host object.
*
* @param {object} nodes
* @returns {array} hosts
*/
nodesToHost(nodes: Record, protocol: string): ConnectionOptions[];
/**
* Transforms an url string to a host object
*
* @param {string} url
* @returns {object} host
*/
urlToHost(url: string): ConnectionOptions;
}
export {};