import { z } from 'zod';
declare const API_VERSION = "v2";
declare const advancedDateTimeFilterSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
    $eq: z.ZodOptional<z.ZodString>;
    $neq: z.ZodOptional<z.ZodString>;
    $exists: z.ZodOptional<z.ZodBoolean>;
    $gt: z.ZodOptional<z.ZodString>;
    $gte: z.ZodOptional<z.ZodString>;
    $lt: z.ZodOptional<z.ZodString>;
    $lte: z.ZodOptional<z.ZodString>;
    $in: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strip>]>;
type AdvancedDateTimeFilter = z.infer<typeof advancedDateTimeFilterSchema>;
declare const basicStringFilterSchema: z.ZodUnion<[z.ZodObject<{
    $eq: z.ZodOptional<z.ZodString>;
    $neq: z.ZodOptional<z.ZodString>;
    $exists: z.ZodOptional<z.ZodBoolean>;
    $in: z.ZodOptional<z.ZodArray<z.ZodString>>;
    $notIn: z.ZodOptional<z.ZodArray<z.ZodString>>;
}, z.core.$strip>, z.ZodString]>;
type BasicStringFilter = z.infer<typeof basicStringFilterSchema>;
declare const advancedStringFilterSchema: z.ZodUnion<[z.ZodObject<{
    $eq: z.ZodOptional<z.ZodString>;
    $neq: z.ZodOptional<z.ZodString>;
    $exists: z.ZodOptional<z.ZodBoolean>;
    $in: z.ZodOptional<z.ZodArray<z.ZodString>>;
    $notIn: z.ZodOptional<z.ZodArray<z.ZodString>>;
    $like: z.ZodOptional<z.ZodString>;
}, z.core.$strip>, z.ZodString]>;
type AdvancedStringFilter = z.infer<typeof advancedStringFilterSchema>;
declare const advancedIntegerFilterSchema: z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
    $eq: z.ZodOptional<z.ZodNumber>;
    $neq: z.ZodOptional<z.ZodNumber>;
    $exists: z.ZodOptional<z.ZodBoolean>;
    $gt: z.ZodOptional<z.ZodNumber>;
    $gte: z.ZodOptional<z.ZodNumber>;
    $lt: z.ZodOptional<z.ZodNumber>;
    $lte: z.ZodOptional<z.ZodNumber>;
    $in: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
}, z.core.$strip>]>;
type AdvancedIntegerFilter = z.infer<typeof advancedIntegerFilterSchema>;
declare function getOrFilterSchema<T extends z.ZodRawShape>(schema: z.ZodObject<T>): z.ZodObject<T & {
    $or: z.ZodOptional<z.ZodArray<z.ZodObject<T, z.core.$strip>>>;
} extends infer T_1 ? { -readonly [P in keyof T_1]: (T & {
    $or: z.ZodOptional<z.ZodArray<z.ZodObject<T, z.core.$strip>>>;
})[P]; } : never, z.core.$strip>;
declare const problemDetailsSchema: z.ZodObject<{
    type: z.ZodString;
    title: z.ZodString;
    status: z.ZodNumber;
    detail: z.ZodString;
    instance: z.ZodString;
}, z.core.$strip>;
type ProblemDetails = z.infer<typeof problemDetailsSchema>;
declare const querySortOrderSchema: z.ZodEnum<{
    asc: "asc";
    desc: "desc";
}>;
type QuerySortOrder = z.infer<typeof querySortOrderSchema>;
declare const queryPageSchema: z.ZodObject<{
    from: z.ZodOptional<z.ZodNumber>;
    limit: z.ZodOptional<z.ZodNumber>;
    before: z.ZodOptional<z.ZodOptional<z.ZodString>>;
    after: z.ZodOptional<z.ZodOptional<z.ZodString>>;
}, z.core.$strip>;
type QueryPage = z.infer<typeof queryPageSchema>;
declare const queryResponsePageSchema: z.ZodObject<{
    totalItems: z.ZodNumber;
    startCursor: z.ZodOptional<z.ZodString>;
    endCursor: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
type QueryResponsePage = z.infer<typeof queryResponsePageSchema>;
interface QueryResponseBody<Item> {
    items: Item[];
    page: QueryResponsePage;
}
declare function getQueryResponseBodySchema<ItemSchema extends z.ZodTypeAny>(itemSchema: ItemSchema): z.ZodType<QueryResponseBody<z.infer<ItemSchema>>>;
declare function getCollectionResponseBodySchema<ItemSchema extends z.ZodTypeAny>(itemSchema: ItemSchema): z.ZodType<{
    items: z.infer<ItemSchema>[];
}>;
declare function getEnumFilterSchema<T extends Readonly<Record<string, string>>>(fields: z.ZodEnum<T>): z.ZodUnion<readonly [z.ZodEnum<T>, z.ZodObject<{
    $eq: z.ZodOptional<z.ZodEnum<T>>;
    $neq: z.ZodOptional<z.ZodEnum<T>>;
    $exists: z.ZodOptional<z.ZodBoolean>;
    $in: z.ZodOptional<z.ZodArray<z.ZodEnum<T>>>;
    $notIn: z.ZodOptional<z.ZodArray<z.ZodEnum<T>>>;
}, z.core.$strip>]>;
declare function getQueryRequestBodySchema<FilterSchema extends z.ZodTypeAny, SortFields extends [string, ...string[]]>(options: {
    sortFields: SortFields;
    filter: FilterSchema;
}): z.ZodObject<{
    sort: z.ZodOptional<z.ZodArray<z.ZodObject<{
        field: z.ZodEnum<{ [k_1 in SortFields[number]]: k_1; } extends infer T ? { [k in keyof T]: { [k_1 in SortFields[number]]: k_1; }[k]; } : never>;
        order: z.ZodOptional<z.ZodEnum<{
            asc: "asc";
            desc: "desc";
        }>>;
    }, z.core.$strip>>>;
    page: z.ZodOptional<z.ZodObject<{
        from: z.ZodOptional<z.ZodNumber>;
        limit: z.ZodOptional<z.ZodNumber>;
        before: z.ZodOptional<z.ZodOptional<z.ZodString>>;
        after: z.ZodOptional<z.ZodOptional<z.ZodString>>;
    }, z.core.$strip>>;
    filter: z.ZodOptional<FilterSchema>;
}, z.core.$strip>;
interface Endpoint<URLParams extends object | undefined = undefined> {
    getUrl: URLParams extends undefined ? () => string : {} extends URLParams ? (params?: URLParams) => string : (params: URLParams) => string;
    method: string;
}
declare const problemDetailResponseSchema: z.ZodObject<{
    type: z.ZodString;
    title: z.ZodString;
    status: z.ZodNumber;
    detail: z.ZodString;
    instance: z.ZodString;
}, z.core.$strip>;
type ProblemDetailsResponse = z.infer<typeof problemDetailResponseSchema>;
export { API_VERSION, advancedDateTimeFilterSchema, basicStringFilterSchema, advancedStringFilterSchema, advancedIntegerFilterSchema, problemDetailsSchema, querySortOrderSchema, queryPageSchema, queryResponsePageSchema, getCollectionResponseBodySchema, getQueryResponseBodySchema, getQueryRequestBodySchema, getEnumFilterSchema, getOrFilterSchema, problemDetailResponseSchema, };
export type { AdvancedDateTimeFilter, BasicStringFilter, AdvancedStringFilter, AdvancedIntegerFilter, ProblemDetails, QuerySortOrder, QueryPage, Endpoint, QueryResponseBody, ProblemDetailsResponse, };
