import { Payment } from './Payment';
import { Query } from './Query';
import { Action } from './Action';
import { ECPayAIOServiceUrls, MerchantMode, MerchantConfig, BasePaymentParams, PaymentParams, QueryParams, ActionParams } from '../types';
declare type PaymentConstructor<SpecificPaymentClass, SpecificPaymentParams> = {
    new (merchant: Merchant, baseParams: BasePaymentParams, params: SpecificPaymentParams): SpecificPaymentClass;
};
declare type QueryConstructor<SpecificQueryClass, SpecificQueryParams> = {
    new (merchant: Merchant, params: SpecificQueryParams): SpecificQueryClass;
};
declare type ActionConstructor<SpecificActionClass, SpecificActionParams> = {
    new (merchant: Merchant, params: SpecificActionParams): SpecificActionClass;
};
export declare class Merchant {
    private readonly version;
    readonly mode: MerchantMode;
    readonly config: MerchantConfig;
    readonly ecpayServiceUrls: ECPayAIOServiceUrls;
    constructor(mode: MerchantMode, config: MerchantConfig, ecpayServiceUrls?: ECPayAIOServiceUrls);
    createPayment<SpecificPaymentClass extends Payment<PaymentParams>, SpecificPaymentParams>(PaymentCtor: PaymentConstructor<SpecificPaymentClass, SpecificPaymentParams>, baseParams: BasePaymentParams, params: SpecificPaymentParams): SpecificPaymentClass;
    createQuery<SpecificQueryClass extends Query<QueryParams>, SpecificQueryParams>(QueryCtor: QueryConstructor<SpecificQueryClass, SpecificQueryParams>, params: SpecificQueryParams): SpecificQueryClass;
    createAction<SpecificActionClass extends Action<ActionParams>, SpecificActionParams>(ActionCtor: ActionConstructor<SpecificActionClass, SpecificActionParams>, params: SpecificActionParams): SpecificActionClass;
    _mergeServiceUrls(customUrls: ECPayAIOServiceUrls): ECPayAIOServiceUrls;
}
export {};
