import { Express, ErrorRequestHandler, RequestHandler, NextFunction, Request as ExpressRequest, Response as ExpressResponse } from "express";
import "dotenv/config";
import { ConversationsRouterParams } from "./routes/conversations/conversationsRouter";
import { CorsOptions } from "cors";
/**
  Configuration for the server Express.js app.
 */
export interface AppConfig {
    /**
      Configuration for the conversations router.
     */
    conversationsRouterConfig: ConversationsRouterParams;
    /**
      Maximum time in milliseconds for a request to complete before timing out.
      Defaults to 60000 (1 minute).
     */
    maxRequestTimeoutMs?: number;
    /**
      Configuration for CORS middleware. Defaults to allowing all origins.
     */
    corsOptions?: CorsOptions;
    /**
      Prefix for all API routes. Defaults to `/api/v1`.
     */
    apiPrefix?: string;
    /**
      Additional server logic using the server's `Express` app object.
      Can do things like add additional, routes, global middleware, etc.
      Runs immediately after the app is instantiated,
      before additional routes and middleware are added.
      @example
      (app)=> {
        app.get("/", (req, res) => res.send({ hello: "world" }))
      }
     */
    expressAppConfig?: (app: Express) => Promise<void>;
}
/**
  General error handler. Called at usage of `next()` in routes.
*/
export declare const errorHandler: ErrorRequestHandler;
export declare const reqHandler: RequestHandler;
export declare const makeHandleTimeoutMiddleware: (apiTimeout: number) => (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => void;
export declare const DEFAULT_API_PREFIX = "/api/v1";
export declare const DEFAULT_MAX_REQUEST_TIMEOUT_MS = 60000;
/**
  Constructor function to make the Express.js app.
 */
export declare const makeApp: (config: AppConfig) => Promise<Express>;
//# sourceMappingURL=app.d.ts.map