import type { FastifyRequest, FastifyReply } from 'fastify';
import { IncomingHttpHeaders } from 'http';
import { TOrUndefined, DomainError, Result } from '@piggly/ddd-toolkit';
/**
 * Return a response with error.
 *
 * @param {FastifyReply} reply
 * @param {Result<never, DomainError>} result
 * @param {{ debug: boolean }} env
 * @returns {FastifyReply}
 * @since 5.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const replyError: (reply: FastifyReply<any>, result: Result<never, DomainError>, env?: {
    debug: boolean;
}) => FastifyReply<any>;
/**
 * Get request body.
 *
 * @param {FastifyRequest} request
 * @returns {string}
 * @since 5.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getBody: <T = any>(request: FastifyRequest) => T;
/**
 * Get a request param.
 *
 * @param {FastifyRequest} request
 * @param {string} key
 * @returns {string}
 * @since 5.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getParam: <T = string>(request: FastifyRequest, key: string) => T;
/**
 * Get all queries from request.
 *
 * @param {FastifyRequest} request
 * @returns {string}
 * @since 5.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getQueries: <T = any>(request: FastifyRequest) => T;
/**
 * Get a query parameter from request.
 *
 * @param {FastifyRequest} request
 * @param {string} key
 * @param {TOrUndefined<T>} defaultValue
 * @returns {string}
 * @since 5.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getQuery: <T = string>(request: FastifyRequest, key: string, defaultValue?: T) => TOrUndefined<T>;
/**
 * Try to get origin from request headers.
 *
 * @param {FastifyRequest} request
 * @param {Array<string>} [headers] Headers to check in order. By default: 'x-forwarded-host', 'host'
 * @returns {string}
 * @since 1.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getOrigin: (request: FastifyRequest, headers?: Array<string>) => string;
/**
 * Try to get IP from request headers.
 *
 * @param {FastifyRequest} request
 * @param {Array<string>} [headers] Headers to check in order. By default: 'cf-connecting-ip', 'x-real-ip', 'x-forwarded-for'
 * @returns {string}
 * @since 1.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getIp: (request: FastifyRequest, headers?: Array<string>) => string;
/**
 * Get bearer token from headers.
 *
 * @param {IncomingHttpHeaders} headers
 * @returns {string}
 * @since 1.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getBearerToken: (headers: IncomingHttpHeaders) => TOrUndefined<string>;
/**
 * Get basic token from headers.
 *
 * @param {IncomingHttpHeaders} headers
 * @returns {string}
 * @since 4.0.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getBasicToken: (headers: IncomingHttpHeaders) => TOrUndefined<{
    password: string;
    username: string;
}>;
/**
 * Get a header from request. If not found, return a default value or an empty string.
 *
 * @param {FastifyRequest} request
 * @param {string} header
 * @param {string} [default_value]
 * @returns {string}
 * @since 5.4.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getHeaderValue: (request: FastifyRequest, header: string, default_value?: string) => string;
/**
 * Get all values for a header from request. If not found, return a default value or an empty array.
 *
 * @param {FastifyRequest} request
 * @param {string} header
 * @param {Array<string>} [default_value]
 * @returns {Array<string>}
 * @since 5.4.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const getHeaderValues: (request: FastifyRequest, header: string, default_value?: Array<string>) => Array<string>;
/**
 * Evaluate if the request headers match the expected headers.
 * Will return an array with the headers that do not match the expected headers.
 *
 * @param {FastifyRequest} request
 * @param {Record<string, string>} expected_headers
 * @returns {Array<string>}
 * @since 5.4.0
 * @author Caique Araujo <caique@piggly.com.br>
 */
export declare const evaluateHeaders: (request: FastifyRequest, expected_headers: Record<string, string>) => Array<string>;
