import type { IOClients, ParamsContext, RouteHandler } from '@vtex/api';
import type { Constructor } from 'ramda';
import type { PaymentProviderState } from '.';
import type { PaymentProvider } from './paymentProvider';
export interface PaymentProviderHandlers<ClientsT extends IOClients = IOClients, StateT extends PaymentProviderState = PaymentProviderState, CustomT extends ParamsContext = ParamsContext> {
    authorize: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    settle: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    cancel: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    refund: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    paymentMethods: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    manifest: Array<RouteHandler<ClientsT, StateT, CustomT>>;
    inbound: Array<RouteHandler<ClientsT, StateT, CustomT>>;
}
export declare type AvailableConfigurableHandlers<ClientsT extends IOClients = IOClients, StateT extends PaymentProviderState = PaymentProviderState, CustomT extends ParamsContext = ParamsContext> = Omit<PaymentProviderHandlers<ClientsT, StateT, CustomT>, 'manifest' | 'paymentMethods'>;
export declare type PaymentProviderConfigurableHandlers<ClientsT extends IOClients = IOClients, StateT extends PaymentProviderState = PaymentProviderState, CustomT extends ParamsContext = ParamsContext> = {
    [key in keyof AvailableConfigurableHandlers<ClientsT, StateT, CustomT>]?: AvailableConfigurableHandlers<ClientsT, StateT, CustomT>[key];
};
export declare const buildRoutes: <ClientsT extends IOClients = IOClients, StateT extends PaymentProviderState<import(".").PaymentRequest> = PaymentProviderState<import(".").PaymentRequest>, CustomT extends ParamsContext = ParamsContext>(Connector: Constructor<PaymentProvider<ClientsT, StateT, CustomT>>, middlewares?: PaymentProviderConfigurableHandlers<ClientsT, StateT, CustomT> | undefined) => PaymentProviderHandlers<ClientsT, StateT, CustomT>;
