import { OpenAPIV3_1 } from "openapi-types";
/**
 * Validation error object structure
 * Simplified from AJV's ErrorObject for broader compatibility
 */
export interface ValidationError {
    keyword: string;
    instancePath: string;
    schemaPath: string;
    message?: string;
    params?: Record<string, unknown>;
}
export interface ValidationResult {
    isValid: boolean;
    errors: ValidationError[];
    warnings: ValidationError[];
}
type Modify<T, R> = Omit<T, keyof R> & R;
export type ZuploHttpMethods = OpenAPIV3_1.HttpMethods | string;
export declare const ZUPLO_OPEN_API_VENDOR_PREFIX = "x-zuplo";
export declare const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = "x-internal";
export declare const ZUPLO_OPEN_API_PATH_KEY: "x-zuplo-path";
export declare const ZUPLO_OPEN_API_ROUTE_KEY: "x-zuplo-route";
export type ZuploOpenApiDocument = Modify<OpenAPIV3_1.Document<ZuploOpenApiOperationExtension>, {
    paths: ZuploOpenApiPathsObject | undefined;
}>;
export type ZuploOpenApiPathsObject = Record<string, ZuploOpenApiPathItemObject | undefined>;
export type ZuploOpenApiPathItemObject = Modify<OpenAPIV3_1.PathItemObject<ZuploOpenApiOperationExtension> & ZuploOpenApiPathItemExtension, {
    get?: ZuploOpenApiOperationObject;
    put?: ZuploOpenApiOperationObject;
    post?: ZuploOpenApiOperationObject;
    delete?: ZuploOpenApiOperationObject;
    options?: ZuploOpenApiOperationObject;
    head?: ZuploOpenApiOperationObject;
    patch?: ZuploOpenApiOperationObject;
    trace?: ZuploOpenApiOperationObject;
}>;
export interface ZuploOpenApiPathItemExtension {
    [ZUPLO_OPEN_API_PATH_KEY]?: ZuploOpenApiPathItemProperties;
}
export interface ZuploOpenApiPathItemProperties {
    pathMode: PathMode;
}
export type PathMode = "open-api" | "url-pattern";
export type ZuploOpenApiOperationObject = Modify<OpenAPIV3_1.OperationObject<ZuploOpenApiOperationExtension>, {
    operationId: string;
}>;
/**
 * Zuplo OpenAPI operation properties
 * This is a subset of RouteConfiguration that can be specified in the OpenAPI document.
 * Uses a flexible type to avoid dependency on @zuplo/runtime in the openapi-tools package.
 */
export interface ZuploOpenApiOperationProperties {
    handler?: {
        export: string;
        module: string;
        options?: Record<string, unknown>;
    };
    policies?: {
        inbound?: unknown[];
        outbound?: unknown[];
    };
    corsPolicy?: string;
    rateLimitPolicy?: string;
    [key: string]: unknown;
}
export interface ZuploOpenApiOperationExtension {
    [ZUPLO_OPEN_API_ROUTE_KEY]?: ZuploOpenApiOperationProperties;
    [OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG]?: boolean;
}
export {};
//# sourceMappingURL=interfaces.d.ts.map