/********************************************************************
 * @author:      Kaven
 * @email:       kaven@wuwenkai.com
 * @website:     http://blog.kaven.xyz
 * @file:        [Kaven-Utils] /src/KavenUtility.Server.ts
 * @create:      2018-08-30 13:24:44.049
 * @modify:      2025-05-21 17:56:31.412
 * @version:     5.4.5
 * @times:       88
 * @lines:       480
 * @copyright:   Copyright © 2018-2025 Kaven. All Rights Reserved.
 * @description: [description]
 * @license:     [license]
 ********************************************************************/
import { ErrorRequestHandler, Request, RequestHandler, Response } from "express";
import { HttpStatusCode } from "kaven-basic";
import * as http from "node:http";
import { KavenLogger } from "./KavenLogger.js";
import { IHttpServerLoggerOptions, IStartServerOptions } from "./base/Interfaces.js";
import { HttpOrHttpsServer } from "./base/Types.js";
import { KavenAuthentication } from "./net/authentication/KavenAuthentication.js";
/**
 *
 * @param dir
 * @param names
 * @returns
 * @since 5.0.0
 * @version 2023-11-18
 */
export declare function LoadJsonConfig<T>(dir: string, ...names: string[]): Promise<T | undefined>;
/**
 *
 * @param dir
 * @param names
 * @returns
 * @since 5.0.1
 * @version 2023-11-18
 */
export declare function LoadJsonConfigSync<T>(dir: string, ...names: string[]): T | undefined;
/**
 * @since 5.0.0
 * @version 2023-11-18
 */
export declare function SaveJsonConfig(config: unknown, path: string): Promise<string>;
/**
 * @since 5.0.1
 * @version 2023-11-18
 */
export declare function SaveJsonConfigSync(config: unknown, path: string): string;
/**
 * @since 1.0.5
 * @version 2025-05-21
 */
export declare function CreateExpressLogger(options?: IHttpServerLoggerOptions, logger?: KavenLogger): RequestHandler;
/**
 *
 * @param log default: `true`
 * @param redirectTo default: `/`
 * @returns ErrorRequestHandler
 * @since 2.0.14
 * @version 2021-03-19
 */
export declare function CreateExpressErrorHandler(log?: boolean, redirectTo?: string | undefined): ErrorRequestHandler;
/**
 *
 * @param redirectTo default: `/`
 * @returns RequestHandler
 * @since 2.0.14
 * @version 2021-03-19
 */
export declare function CreateExpress404Handler(redirectTo?: string): RequestHandler;
/**
 *
 * @param domainNames
 * @param allowEmpty default: `false`
 * @param redirectTo
 * @param status default: `403`
 * @returns
 * @since 2.0.14
 * @version 2021-03-19
 */
export declare function CreateExpressCheckReferer(domainNames: string[], allowEmpty?: boolean, redirectTo?: string, status?: HttpStatusCode): RequestHandler;
/**
 *
 * @since 4.3.1
 * @version 2022-06-29
 */
export declare function HandleSignalsForServer(server: HttpOrHttpsServer, disposeBeforeShutdown?: () => Promise<void>): void;
/**
 *
 * @param app
 * @param port
 * @param options
 * @since 2.0.14
 * @version 2023-11-18
 */
export declare function StartServer(app: http.RequestListener, port: number, options?: IStartServerOptions): Promise<HttpOrHttpsServer>;
/**
 *
 * @param authentication
 * @since 4.1.0
 * @version 2022-09-20
 * @returns
 */
export declare function CreateExpressAuthentication(authentication: KavenAuthentication): {
    auth: (req: Request, res?: Response) => Promise<boolean>;
    handler: RequestHandler;
};
