import { FastifyInstance } from 'fastify';
import { CacheableOptions, Cacheable } from 'cacheable';
export { CacheableOptions } from 'cacheable';
import { FastifyCorsOptions } from '@fastify/cors';
import { FastifyHelmetOptions } from '@fastify/helmet';
export { FastifyHelmetOptions } from '@fastify/helmet';
import pino, { LoggerOptions } from 'pino';
export { LoggerOptions } from 'pino';
import { FastifyRateLimitOptions } from '@fastify/rate-limit';
export { FastifyRateLimitOptions } from '@fastify/rate-limit';

declare const defaultCacheableOptions: CacheableOptions;
declare function fuseCacheable(fastify: FastifyInstance, options?: CacheableOptions): Promise<void>;

declare const defaultFastifyHelmetOptions: FastifyHelmetOptions;
declare function fuseHelmet(fastify: FastifyInstance, options: FastifyHelmetOptions): Promise<void>;

declare const defaultLoggingOptions: {
    transport: {
        target: string;
        options: {
            colorize: boolean;
            translateTime: boolean;
            ignore: string;
            singleLine: boolean;
        };
    };
};
declare function fuseLog(fastify: FastifyInstance, options: LoggerOptions): Promise<void>;
declare function logger(options?: LoggerOptions): pino.Logger;

type OpenApiOptions = {
    title?: string;
    description?: string;
    version?: string;
    openApiRoutePrefix?: string;
    docsRoutePath?: string;
};
declare function fuseOpenApi(fastify: FastifyInstance, options?: OpenApiOptions): Promise<void>;

declare const defaultFastifyRateLimitOptions: FastifyRateLimitOptions;
declare function fuseRateLimit(fastify: FastifyInstance, options: FastifyRateLimitOptions): Promise<void>;

type StaticPath = {
    dir: string;
    path: string;
};
type StaticOptions = StaticPath[];
declare function fuseStatic(fastify: FastifyInstance, options: StaticOptions): Promise<void>;

type FuseOptions = {
    static?: boolean | StaticOptions;
    log?: boolean | LoggerOptions;
    helmet?: boolean | FastifyHelmetOptions;
    rateLimit?: boolean | FastifyRateLimitOptions;
    cors?: boolean | FastifyCorsOptions;
    openApi?: boolean | OpenApiOptions;
    cache?: boolean | CacheableOptions;
};
declare function fuse(fastify: FastifyInstance, options?: FuseOptions): Promise<void>;

declare module "fastify" {
    interface FastifyInstance {
        cache: Cacheable;
    }
}

type StartOptions = {
    port?: number;
    host?: string;
    message?: (host: string, port: number) => string;
};
declare const defaultStartOptions: StartOptions;
declare function start(fastify: FastifyInstance, options?: StartOptions): Promise<void>;

export { type FuseOptions, type OpenApiOptions, type StartOptions, type StaticOptions, type StaticPath, defaultCacheableOptions, defaultFastifyHelmetOptions, defaultFastifyRateLimitOptions, defaultLoggingOptions, defaultStartOptions, fuse, fuseCacheable, fuseHelmet, fuseLog, fuseOpenApi, fuseRateLimit, fuseStatic, logger, start };
