import { z } from 'zod';
import { Components } from './Components';
import { Request } from './Request';
export declare const InfoValidationSchema: z.ZodObject<{
    version: z.ZodString;
    title: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    license: z.ZodOptional<z.ZodObject<{
        name: z.ZodString;
        url: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        name: string;
        url?: string | undefined;
    }, {
        name: string;
        url?: string | undefined;
    }>>;
}, "strip", z.ZodTypeAny, {
    version: string;
    title: string;
    description?: string | undefined;
    license?: {
        name: string;
        url?: string | undefined;
    } | undefined;
}, {
    version: string;
    title: string;
    description?: string | undefined;
    license?: {
        name: string;
        url?: string | undefined;
    } | undefined;
}>;
export type Info = z.infer<typeof InfoValidationSchema> & Record<string, any>;
export declare const SecurityValidationSchema: z.ZodUnion<[z.ZodObject<{
    APIKeyAuth: z.ZodArray<z.ZodAny, "many">;
}, "strip", z.ZodTypeAny, {
    APIKeyAuth: any[];
}, {
    APIKeyAuth: any[];
}>, z.ZodObject<{
    apikeyAuth: z.ZodArray<z.ZodAny, "many">;
}, "strip", z.ZodTypeAny, {
    apikeyAuth: any[];
}, {
    apikeyAuth: any[];
}>, z.ZodObject<{
    BearerAuth: z.ZodArray<z.ZodAny, "many">;
}, "strip", z.ZodTypeAny, {
    BearerAuth: any[];
}, {
    BearerAuth: any[];
}>]>;
export type Security = z.infer<typeof SecurityValidationSchema>;
export declare const TagPermissionValidationSchema: z.ZodObject<{
    code: z.ZodString;
    scope: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    parentPermissionCode: z.ZodOptional<z.ZodString>;
    name: z.ZodString;
}, "strip", z.ZodTypeAny, {
    name: string;
    code: string;
    scope: string;
    description?: string | undefined;
    parentPermissionCode?: string | undefined;
}, {
    name: string;
    code: string;
    scope: string;
    description?: string | undefined;
    parentPermissionCode?: string | undefined;
}>;
export type TagPermission = {
    /**
     * The code that uniquely identifies the permission.
     */
    code: string;
    /**
     * The scope of the permission.
     */
    scope: string;
    /**
     * The description of the permission.
     */
    description?: string;
    /**
     * The code of the permission that is the parent of this permission.
     */
    parentPermissionCode?: string;
    /**
     * The name of the permission.
     */
    name: string;
};
export declare const TagValidationSchema: z.ZodObject<{
    name: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
    'x-permissions': z.ZodOptional<z.ZodArray<z.ZodObject<{
        code: z.ZodString;
        scope: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        parentPermissionCode: z.ZodOptional<z.ZodString>;
        name: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        name: string;
        code: string;
        scope: string;
        description?: string | undefined;
        parentPermissionCode?: string | undefined;
    }, {
        name: string;
        code: string;
        scope: string;
        description?: string | undefined;
        parentPermissionCode?: string | undefined;
    }>, "many">>;
}, "strip", z.ZodTypeAny, {
    name: string;
    description?: string | undefined;
    'x-permissions'?: {
        name: string;
        code: string;
        scope: string;
        description?: string | undefined;
        parentPermissionCode?: string | undefined;
    }[] | undefined;
}, {
    name: string;
    description?: string | undefined;
    'x-permissions'?: {
        name: string;
        code: string;
        scope: string;
        description?: string | undefined;
        parentPermissionCode?: string | undefined;
    }[] | undefined;
}>;
export type Tag = {
    /**
     * The tag name.
     * */
    name: string;
    /**
     * The tag description.
     * */
    description?: string;
    /**
     * The permissions of the tag.
     * */
    'x-permissions'?: TagPermission[];
};
export declare const ServerValidationSchema: z.ZodObject<{
    url: z.ZodString;
    description: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    url: string;
    description?: string | undefined;
}, {
    url: string;
    description?: string | undefined;
}>;
export type Server = z.infer<typeof ServerValidationSchema>;
export declare const OpenAPISpecificationValidationSchema: z.ZodObject<{
    openapi: z.ZodString;
    info: z.ZodObject<{
        version: z.ZodString;
        title: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        license: z.ZodOptional<z.ZodObject<{
            name: z.ZodString;
            url: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            name: string;
            url?: string | undefined;
        }, {
            name: string;
            url?: string | undefined;
        }>>;
    }, "strip", z.ZodTypeAny, {
        version: string;
        title: string;
        description?: string | undefined;
        license?: {
            name: string;
            url?: string | undefined;
        } | undefined;
    }, {
        version: string;
        title: string;
        description?: string | undefined;
        license?: {
            name: string;
            url?: string | undefined;
        } | undefined;
    }>;
    components: z.ZodObject<{
        securitySchemes: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
            type: z.ZodString;
            scheme: z.ZodOptional<z.ZodLiteral<"apikey">>;
            in: z.ZodOptional<z.ZodString>;
            name: z.ZodOptional<z.ZodString>;
            description: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        }, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        }>, z.ZodObject<{
            type: z.ZodString;
            scheme: z.ZodOptional<z.ZodLiteral<"bearer">>;
            bearerFormat: z.ZodOptional<z.ZodString>;
            description: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }, {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }>]>>;
        schemas: z.ZodRecord<z.ZodString, z.ZodAny>;
    }, "strip", z.ZodTypeAny, {
        securitySchemes: Record<string, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        } | {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }>;
        schemas: Record<string, any>;
    }, {
        securitySchemes: Record<string, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        } | {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }>;
        schemas: Record<string, any>;
    }>;
    security: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodObject<{
        APIKeyAuth: z.ZodArray<z.ZodAny, "many">;
    }, "strip", z.ZodTypeAny, {
        APIKeyAuth: any[];
    }, {
        APIKeyAuth: any[];
    }>, z.ZodObject<{
        apikeyAuth: z.ZodArray<z.ZodAny, "many">;
    }, "strip", z.ZodTypeAny, {
        apikeyAuth: any[];
    }, {
        apikeyAuth: any[];
    }>, z.ZodObject<{
        BearerAuth: z.ZodArray<z.ZodAny, "many">;
    }, "strip", z.ZodTypeAny, {
        BearerAuth: any[];
    }, {
        BearerAuth: any[];
    }>]>, "many">>;
    paths: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<any, "strip", z.ZodTypeAny, {
        [x: string]: any;
    }, {
        [x: string]: any;
    }>>>;
    tags: z.ZodArray<z.ZodObject<{
        name: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        'x-permissions': z.ZodOptional<z.ZodArray<z.ZodObject<{
            code: z.ZodString;
            scope: z.ZodString;
            description: z.ZodOptional<z.ZodString>;
            parentPermissionCode: z.ZodOptional<z.ZodString>;
            name: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }, {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }>, "many">>;
    }, "strip", z.ZodTypeAny, {
        name: string;
        description?: string | undefined;
        'x-permissions'?: {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }[] | undefined;
    }, {
        name: string;
        description?: string | undefined;
        'x-permissions'?: {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }[] | undefined;
    }>, "many">;
    servers: z.ZodOptional<z.ZodArray<z.ZodObject<{
        url: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        url: string;
        description?: string | undefined;
    }, {
        url: string;
        description?: string | undefined;
    }>, "many">>;
}, "strip", z.ZodTypeAny, {
    openapi: string;
    info: {
        version: string;
        title: string;
        description?: string | undefined;
        license?: {
            name: string;
            url?: string | undefined;
        } | undefined;
    };
    components: {
        securitySchemes: Record<string, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        } | {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }>;
        schemas: Record<string, any>;
    };
    paths: Record<string, Record<string, {
        [x: string]: any;
    }>>;
    tags: {
        name: string;
        description?: string | undefined;
        'x-permissions'?: {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }[] | undefined;
    }[];
    security?: ({
        APIKeyAuth: any[];
    } | {
        apikeyAuth: any[];
    } | {
        BearerAuth: any[];
    })[] | undefined;
    servers?: {
        url: string;
        description?: string | undefined;
    }[] | undefined;
}, {
    openapi: string;
    info: {
        version: string;
        title: string;
        description?: string | undefined;
        license?: {
            name: string;
            url?: string | undefined;
        } | undefined;
    };
    components: {
        securitySchemes: Record<string, {
            type: string;
            scheme?: "apikey" | undefined;
            in?: string | undefined;
            name?: string | undefined;
            description?: string | undefined;
        } | {
            type: string;
            scheme?: "bearer" | undefined;
            bearerFormat?: string | undefined;
            description?: string | undefined;
        }>;
        schemas: Record<string, any>;
    };
    paths: Record<string, Record<string, {
        [x: string]: any;
    }>>;
    tags: {
        name: string;
        description?: string | undefined;
        'x-permissions'?: {
            name: string;
            code: string;
            scope: string;
            description?: string | undefined;
            parentPermissionCode?: string | undefined;
        }[] | undefined;
    }[];
    security?: ({
        APIKeyAuth: any[];
    } | {
        apikeyAuth: any[];
    } | {
        BearerAuth: any[];
    })[] | undefined;
    servers?: {
        url: string;
        description?: string | undefined;
    }[] | undefined;
}>;
export type OpenAPISpecification = {
    /**
     * This string MUST be the version number of the OpenAPI Specification that the OpenAPI document uses.
     * The openapi field SHOULD be used by tooling to interpret the OpenAPI document.
     * This is not related to the API info.version string.
     */
    openapi: string;
    /**
     * Provides metadata about the API. The metadata MAY be used by tooling as required.
     */
    info: Info;
    /**
     * An element to hold various schemas for the document.
     */
    components: Components;
    /**
     * A declaration of which security mechanisms can be used across the API.
     * The list of values includes alternative security requirement objects that can be used.
     * Only one of the security requirement objects need to be satisfied to authorize a request.
     * Individual operations can override this definition.
     * To make security optional, an empty security requirement ({}) can be included in the array.
     */
    security?: Security[];
    /**
     * The available paths and operations for the API.
     */
    paths: Record<string, Record<string, Request>>;
    /**
     * A list of tags used by the document with additional metadata.
     * The order of the tags can be used to reflect on their order by the parsing tools.
     * Not all tags that are used by the [Operation Object](https://swagger.io/specification/#operation-object) must be declared.
     * The tags that are not declared MAY be organized randomly or based on the tools' logic.
     * Each tag name in the list MUST be unique.
     */
    tags: Tag[];
    /**
     * An array of Server Objects, which provide connectivity information to a target server.
     * If the `servers` property is not provided, or is an empty array, the default value would
     * be a [Server Object](https://swagger.io/specification/#server-object) with a [url](https://swagger.io/specification/#server-url) value of `/`.
     */
    servers?: Server[];
};
export declare const defineOpenAPI: (spec: OpenAPISpecification) => OpenAPISpecification;
