import { RequestHandler } from 'express';
export type NotificationDTO = {
    /**
     * Для переводов из кошелька — `p2p-incoming`.
     *
     * Для переводов с произвольной карты — `card-incoming`.
     */
    notification_type: "p2p-incoming" | "card-incoming";
    /** Идентификатор операции в истории счета получателя. */
    operation_id: string;
    /** Сумма, которая зачислена на счет получателя. */
    amount: number;
    /** Сумма, которая списана со счета отправителя. */
    withdraw_amount: number;
    /** Код валюты — всегда `643` (рубль РФ согласно ISO 4217). */
    currency: "643";
    /** Дата и время совершения перевода. */
    datetime: string;
    /**
     * Для переводов из кошелька — номер кошелька отправителя.
     *
     * Для переводов с произвольной карты — параметр содержит пустую
     * строку.
     */
    sender: string;
    /**
     * Признак того, что перевод защищен кодом протекции. В ЮMoney больше нельзя делать переводы с кодом протекции, поэтому параметр всегда имеет значение `false`.
     */
    codepro: boolean;
    /**
     * Метка платежа. Если ее нет, параметр содержит пустую строку.
     */
    label: string;
    /** SHA-1 hash параметров уведомления. */
    sha1_hash: string;
    test_notification: boolean;
    /**
     * Перевод еще не зачислен. Получателю нужно освободить место
     * в кошельке или использовать код протекции (если `codepro=true`).
     */
    unaccepted: boolean;
    /**
     * Фамилия.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     */
    lastname?: string;
    /**
     * Имя.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     * */
    firstname?: string;
    /**
     * Отчество.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    fathersname?: string;
    /**
     * Адрес электронной почты отправителя перевода. Если почта не
     * запрашивалась, параметр содержит пустую строку.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     */
    email?: string;
    /**
     * Телефон отправителя перевода. Если телефон не запрашивался,
     * параметр содержит пустую строку.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     */
    phone?: string;
    /**
     * Город.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     **/
    city?: string;
    /**
     * Улица.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    street?: string;
    /**
     * Дом.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    building?: string;
    /**
     * Корпус.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    suite?: string;
    /**
     * Квартира.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    flat?: string;
    /**
     * Индекс.
     *
     * @deprecated **Больше не предоставляется ЮMoney**
     *  */
    zip?: string;
};
/**
 * Ошибка проверки уведомления от YooMoney
 */
export declare class YMNotificationError extends Error {
    constructor(message: string);
}
/**
 * Класс, который реализует [механизм проверки уведомлений от YooMoney](https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security)
 *
 * @see {@link https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security|Описание механизма}
 */
export declare class NotificationChecker {
    private readonly secret;
    /**
     * Creates an instance of NotificationChecker.
     * @param {string} secret Секретное слово
     */
    constructor(secret: string);
    /**
     * Проверяет полученное уведомление и возвращает типизированную версию
     *
     * @throws {YMNotificationError} Если хеш уведомления не совпадает
     * @param {Object} notification Объект уведомления
     * @return {NotificationDTO}
     */
    check(notification: Record<keyof NotificationDTO, string>): NotificationDTO;
    /**
     *
     * Упрощает интеграцию с `express`
     * @deprecated **Экспресс морально устарел - вызывайте {@link check} самостоятельно**
     *
     * - Это middleware кидает ошибки, позаботьтесь об их обработке
     *
     * @param {Object} [options={}] Параметры обработки запроса
     * @param {boolean} [options.memo=true] Флаг для включения/отключения пропуска повторяющихся запросов, если один из них был успешно обработан
     * @param {RequestHandler<Record<string, string>, any, NotificationDTO>=} actualHandler
     * @return {RequestHandler}
     *
     * ##### Пример:
     * **В начале файла**
     * ```js
     * const nc = new YMNotificationChecker(process.env.YM_SECRET);
     *
     * ```
     * *`Вариант 1 - Классический`*
     *
     * ```js
     * app.post('/webhook/yoomoney', nc.middleware(), (req, res) => {
     *  req.body // Это `NotificationDTO`
     * })
     * ```
     *
     * *`Вариант 2 - Если нужны подсказки типов`*
     *
     * ```js
     * app.post('/webhook/yoomoney', nc.middleware({}, (req, res) => {
     *  req.body // Это `NotificationDTO`
     * }))
     * ```
     *
     *  **Обработка ошибок**
     * ```js
     * app.use((error, request, response, next) => {
     *  console.log(error); // [YMNotificationError: Notification hash mismatch]
     * })
     * ```
     */
    middleware(options?: {
        memo?: boolean;
    }, actualHandler?: RequestHandler<Record<string, string>, any, NotificationDTO>): RequestHandler;
}
