import type { RestInputWithModels, RestHandlerReturn, RestMiddlewareChain } from './types';
import type { AmplifyModelType } from '../../queries/types';
/**
 * Creates a new REST middleware chain with type-safe model support
 *
 * Initializes a composable middleware chain for REST API handlers
 * with support for Amplify Data models and custom return types.
 *
 * @template TTypes - Record of all available Amplify model types
 * @template TSelected - Subset of model types to initialize
 * @template TReturn - Handler return type (defaults to RestHandlerReturn)
 * @param config - Configuration options for the middleware chain
 * @param config.enableDebugLogging - Enable detailed middleware execution logging
 * @param config.onError - Custom error handler for middleware failures
 * @returns Configured REST middleware chain instance
 */
export declare function createRestChain<TTypes extends Record<string, AmplifyModelType>, TSelected extends keyof TTypes = keyof TTypes, TReturn = RestHandlerReturn>(config?: {
    enableDebugLogging?: boolean;
    onError?: (error: unknown, middlewareName: string) => void;
}): RestMiddlewareChain<TTypes, TSelected, TReturn>;
/**
 * Wraps a REST handler function with middleware chain execution
 *
 * Converts a middleware chain and handler into a Lambda-compatible
 * function that executes middleware before the handler.
 *
 * @template TTypes - Record of all available Amplify model types
 * @template TSelected - Subset of model types to initialize
 * @template TReturn - Handler return type
 * @param chain - Configured REST middleware chain
 * @param handler - Handler function to execute after middleware
 * @returns Lambda-compatible function with middleware execution
 */
export declare function wrapRestHandler<TTypes extends Record<string, AmplifyModelType>, TSelected extends keyof TTypes = keyof TTypes, TReturn extends RestHandlerReturn = RestHandlerReturn>(chain: RestMiddlewareChain<TTypes, TSelected, TReturn>, handler: (input: RestInputWithModels<TTypes, TSelected>) => Promise<TReturn>): (event: RestInputWithModels<TTypes, TSelected>['event'], context: RestInputWithModels<TTypes, TSelected>['context']) => Promise<TReturn>;
//# sourceMappingURL=RestMiddlewareChain.d.ts.map