import { type Country, type Currency } from "./enums.js";
import RestClient from "./restClient.js";
import type { AuthorizeCardChargePayload, BulkPayoutToBankAccountPayload, ChargeViaBankTransferPayload, ChargeViaCardPayload, ChargeViaMobileMoneyPayload, CreateVirtualBankAccountPayload, InitiateChargePayload, KorapayResponse, PayoutToBankAccountPayload, PayoutToMobileMoneyPayload } from "./types/global.js";
/**
 * A class for interfacing with Korapay API in your JS/TS project.
 */
export default class KorapayClient {
    private client;
    /**
     * @constructor Instantiate a KorapayClient.
     *
     * @remarks When no params are passed in, the client will attempt to load the
     * publicKey, secretKey, and encryptionKey via their respective default
     * environmental variable name.  'KORAPAY_PUBLIC_KEY','KORAPAY_SECRET_KEY'
     * and 'KORAPAY_ENCRYPTION_KEY', If a client is passed in, the publicKey,
     * and secretKey are ignored
     *
     * @param publicKey - Your korapay integration public key. Omit if
     * 'KORAPAY_PUBLIC_KEY' is set in your environmental variables.
     * @param secretKey - Your korapay integration secret key. Omit if
     * 'KORAPAY_SECRET_KEY' is set in your environmental variables.
     * @param encryptionKey - Your korapay integration key. Omit if
     * 'KORAPAY_ENCRYPTION_KEY' is set in your environmental variables.
     * @param client - A custom {@link RestClient} to use for making request to korapay.
     */
    constructor(publicKey?: string, secretKey?: string, encryptionKey?: string, client?: RestClient, disablePackageDevModeMessage?: boolean);
    /**
     * Accept debit card payments.
     *
     * @remarks No validation is done on the payload in the client, it is sent
     * as it is.
     *
     * @param payload - {@link ChargeViaCardPayload} is the data that is sent to korapay.
     *
     * @returns A promise containing a {@link KorapayResponse}
     */
    chargeViaCard(payload: ChargeViaCardPayload): Promise<KorapayResponse>;
    /**
     * Authorize a pending charge on a debit card.
     *
     * @param payload {@link AuthorizeCardChargePayload} is the data sent to korapay
     *  to authorize a charge
     * @returns A promise containing a {@link KorapayResponse}
     */
    authorizeCardCharge(payload: AuthorizeCardChargePayload): Promise<KorapayResponse>;
    /**
     * Resend one time password/pin for pending transaction.
     *
     * @param transactionReference The reference to the pending charge
     * returned as a response by korapay when the charge was initiated.
     * @returns A promise containing a {@link KorapayResponse}
     */
    resendCardOtp(transactionReference: string): Promise<KorapayResponse>;
    /**
     * Accept payments via bank transfers.
     *
     * @param payload {@link ChargeViaBankTransferPayload} is the data sent to korapay
     * to initiate a charge via bank transfer
     * @returns A promise containing a {@link KorapayResponse}
     */
    chargeViaBankTransfer(payload: ChargeViaBankTransferPayload): Promise<KorapayResponse>;
    /**
     * Create a virtual bank account.
     *
     * @param payload {@link CreateVirtualBankAccountPayload} is the data sent to korapay to
     * create a virtual bank account.
     * @returns A promise containing a {@link KorapayResponse}
     */
    createVirtualBankAccount(payload: CreateVirtualBankAccountPayload): Promise<KorapayResponse>;
    /**
     * Retrieve a virtual bank account.
     *
     * @param accountReference Your unique reference for the virtual bank account.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getVirtualBankAccount(accountReference: string): Promise<KorapayResponse>;
    /**
     * Retrieve transactions associated with a virtual bank account.
     *
     * @param accountNumber The account number of the virtual account.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getVirtualBankAccountTransactions(accountNumber: string): Promise<KorapayResponse>;
    /**
     * Create a virtual bank account for testing/development.
     *
     * @param accountNumber This is the account number of the Fixed Virtual Bank Account.
     * @param amount This is the amount you want to credit to the account. The minimum
     * amount is NGN 100, and the maximum amount is NGN 10,000,000.
     * @param currency An enum representing the currency for the account. Only `Currency.NGN` is accepted
     * for now.
     * @returns A promise containing a {@link KorapayResponse}
     */
    creditSandboxVirtualBankAccount(accountNumber: string, amount: number, currency: Currency): Promise<KorapayResponse>;
    /**
     * Accept payments via mobile money.
     *
     * @param payload {@link ChargeViaMobileMoneyPayload} is the data sent to korapay to
     * initiate a charge via mobile money
     * @returns A promise containing a {@link KorapayResponse}
     */
    chargeViaMobileMoney(payload: ChargeViaMobileMoneyPayload): Promise<KorapayResponse>;
    /**
     * Authorize a payment via mobile money
     *
     * @param reference The reference to the transaction.
     * @param token the otp or token from the customer.
     * @returns A promise containing a {@link KorapayResponse}
     */
    authorizeMobileMoneyCharge(reference: string, token: string): Promise<KorapayResponse>;
    /**
     * Resend one time password/pin for a pending mobile money transaction.
     *
     * @param transactionReference The reference of the pending transaction.
     * @returns A promise containing a {@link KorapayResponse}
     */
    resendMobileMoneyOtp(transactionReference: string): Promise<KorapayResponse>;
    /**
     * Resend SKT prompt.
     *
     * @param transactionReference The reference of the pending transaction.
     * @returns A promise containing a {@link KorapayResponse}
     */
    resendSkt(transactionReference: string): Promise<KorapayResponse>;
    /**
     * Authorize SKT prompts in testing/development
     *
     * @param reference The reference of the pending transaction.
     * @param pin The simulated customer's pin
     * @returns A promise containing a {@link KorapayResponse}
     */
    authorizeSkt(reference: string, pin: string): Promise<KorapayResponse>;
    /**
     * Initiate a charge on your customer supporting multiple payment channels
     *
     * @param payload {@link InitiateChargePayload} is the data sent to korapay to
     * initiate a charge.
     * @returns A promise containing a {@link KorapayResponse}
     */
    initiateCharge(payload: InitiateChargePayload): Promise<KorapayResponse>;
    /**
     * Retrieve a charge.
     *
     * @param reference The reference of the charge.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getCharge(reference: string): Promise<KorapayResponse>;
    /**
     * Resolves a bank account.
     *
     * @param bankCode The code for the bank the account number belongs to.
     * @param accountNumber The account number to be resolved.
     * @returns A promise containing a {@link KorapayResponse}
     */
    resolveBankAccount(bankCode: string, accountNumber: string): Promise<KorapayResponse>;
    /**
     * Retrieve all your pending and available balances
     *
     * @returns A promise containing a {@link KorapayResponse}
     */
    getBalances(): Promise<KorapayResponse>;
    /**
     * Retrieve a list of all banks supported by Korapay and their properties.
     *
     * @param country An enum representing the country to retrieve the banks from.
     * E.g., `Country.NIGERIA`.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getBanks(country: Country): Promise<KorapayResponse>;
    /**
     * Retrieve a list of all mobile money operators supported by Korapay and their properties.
     *
     * @param country An enum representing the country to retrieve the MMOs from. E.g., `Country.GHANA`.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getMmo(country: Country): Promise<KorapayResponse>;
    /**
     * Initiate a single disbursement to a bank account.
     *
     * @param payload {@link PayoutToBankAccountPayload} is the data sent to korapay to
     * initiate a payout to bank account
     * @returns A promise containing a {@link KorapayResponse}
     */
    payoutToBankAccount(payload: PayoutToBankAccountPayload): Promise<KorapayResponse>;
    /**
     * Initiate a single disbursement to a mobile money account.
     *
     * @param payload {@link PayoutToMobileMoneyPayload} is the data sent to korapay
     * to initiate a payout to mobile money
     * @returns A promise containing a {@link KorapayResponse}
     */
    payoutToMobileMoney(payload: PayoutToMobileMoneyPayload): Promise<KorapayResponse>;
    /**
     * Initiate a bulk payout to bank accounts.
     *
     * @param payload {@link BulkPayoutToBankAccountPayload} is the data sent to korapay
     * to initiate a bulk payout to bank accounts
     * @returns A promise containing a {@link KorapayResponse}
     */
    bulkPayoutToBankAccount(payload: BulkPayoutToBankAccountPayload): Promise<KorapayResponse>;
    /**
     * Retrieve a bulk payout
     *
     * @param bulkReference - The reference of the bulk payout to retrieve.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getPayouts(bulkReference: string): Promise<KorapayResponse>;
    /**
     * Retrieve the transactions in a bulk payout.
     *
     * @param bulkReference - The reference of the bulk payout whose transactions you to retrieve.
     * @returns A promise containing a {@link KorapayResponse}
     */
    getBulkTransaction(bulkReference: string): Promise<KorapayResponse>;
    /**
     * Retrieve the status and details of a disbursement through the reference.
     *
     * @param transactionReference - The transaction reference of the payout.
     * @returns
     */
    getPayoutTransaction(transactionReference: string): Promise<KorapayResponse>;
    private showPackageMessage;
    private isUsingTestSecretKey;
}
//# sourceMappingURL=korapay.d.ts.map