import { z } from "zod";
/** Longest window a single calendar query may ask for. Mirrors
 * MAX_WINDOW_DAYS in libs/core/src/recurrence.ts — recurring series are
 * expanded per request, so an unbounded range is an unbounded response. */
export declare const MAX_EVENT_WINDOW_DAYS = 92;
/** The stored RRULE subset. Validated by shape here and parsed for real by
 * parseRecurrenceRule in libs/core; this keeps obvious junk out of the
 * column without duplicating the parser in a regex. */
export declare const RecurrenceRuleString: z.ZodString;
export declare const CreateEventRequest: z.ZodEffects<z.ZodObject<{
    title: z.ZodString;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    location: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    startsAt: z.ZodString;
    endsAt: z.ZodString;
    allDay: z.ZodOptional<z.ZodBoolean>;
    /** IANA zone the event was authored in; defaults to UTC server-side. */
    timezone: z.ZodOptional<z.ZodString>;
    recurrenceRule: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    channelId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
    attendeeUserIds: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
}, "strip", z.ZodTypeAny, {
    title: string;
    startsAt: string;
    endsAt: string;
    description?: string | null | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    attendeeUserIds?: number[] | undefined;
}, {
    title: string;
    startsAt: string;
    endsAt: string;
    description?: string | null | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    attendeeUserIds?: number[] | undefined;
}>, {
    title: string;
    startsAt: string;
    endsAt: string;
    description?: string | null | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    attendeeUserIds?: number[] | undefined;
}, {
    title: string;
    startsAt: string;
    endsAt: string;
    description?: string | null | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    attendeeUserIds?: number[] | undefined;
}>;
export type CreateEventRequest = z.infer<typeof CreateEventRequest>;
/**
 * Which slice of a repeating event a write applies to. "series" rewrites the
 * stored row (every occurrence); "occurrence" detaches just the one named by
 * occurrenceDate. A one-off event only ever takes "series".
 */
export declare const EventWriteScope: z.ZodEnum<["series", "occurrence"]>;
export type EventWriteScope = z.infer<typeof EventWriteScope>;
export declare const UpdateEventRequest: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodObject<{
    scope: z.ZodDefault<z.ZodEnum<["series", "occurrence"]>>;
    /** Required when scope is "occurrence": which instance to detach. */
    occurrenceDate: z.ZodOptional<z.ZodString>;
    title: z.ZodOptional<z.ZodString>;
    description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    location: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    startsAt: z.ZodOptional<z.ZodString>;
    endsAt: z.ZodOptional<z.ZodString>;
    allDay: z.ZodOptional<z.ZodBoolean>;
    timezone: z.ZodOptional<z.ZodString>;
    recurrenceRule: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    channelId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
}, "strip", z.ZodTypeAny, {
    scope: "series" | "occurrence";
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
}, {
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>, {
    scope: "series" | "occurrence";
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
}, {
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>, {
    scope: "series" | "occurrence";
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
}, {
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>, {
    scope: "series" | "occurrence";
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
}, {
    description?: string | null | undefined;
    title?: string | undefined;
    channelId?: number | null | undefined;
    location?: string | null | undefined;
    startsAt?: string | undefined;
    endsAt?: string | undefined;
    allDay?: boolean | undefined;
    timezone?: string | undefined;
    recurrenceRule?: string | null | undefined;
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>;
export type UpdateEventRequest = z.infer<typeof UpdateEventRequest>;
export declare const DeleteEventRequest: z.ZodEffects<z.ZodObject<{
    scope: z.ZodDefault<z.ZodEnum<["series", "occurrence"]>>;
    occurrenceDate: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    scope: "series" | "occurrence";
    occurrenceDate?: string | undefined;
}, {
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>, {
    scope: "series" | "occurrence";
    occurrenceDate?: string | undefined;
}, {
    occurrenceDate?: string | undefined;
    scope?: "series" | "occurrence" | undefined;
}>;
export type DeleteEventRequest = z.infer<typeof DeleteEventRequest>;
/** Replaces the invite list wholesale — simpler to reason about than
 * add/remove deltas, and existing RSVPs for retained users are preserved. */
export declare const InviteEventRequest: z.ZodObject<{
    attendeeUserIds: z.ZodArray<z.ZodNumber, "many">;
}, "strip", z.ZodTypeAny, {
    attendeeUserIds: number[];
}, {
    attendeeUserIds: number[];
}>;
export type InviteEventRequest = z.infer<typeof InviteEventRequest>;
export declare const RsvpEventRequest: z.ZodObject<{
    status: z.ZodEnum<["needs_action", "going", "maybe", "declined"]>;
}, "strip", z.ZodTypeAny, {
    status: "needs_action" | "going" | "maybe" | "declined";
}, {
    status: "needs_action" | "going" | "maybe" | "declined";
}>;
export type RsvpEventRequest = z.infer<typeof RsvpEventRequest>;
/**
 * GET /workspaces/:workspaceId/events. `from`/`to` are required — there is no
 * "all events" read, because answering it would mean expanding every series
 * over an unbounded horizon.
 */
export declare const ListEventsQuery: z.ZodEffects<z.ZodEffects<z.ZodObject<{
    from: z.ZodString;
    to: z.ZodString;
    channelId: z.ZodOptional<z.ZodNumber>;
    mine: z.ZodOptional<z.ZodEffects<z.ZodEnum<["true", "false", "1", "0"]>, boolean, "0" | "1" | "true" | "false">>;
}, "strip", z.ZodTypeAny, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: boolean | undefined;
}, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: "0" | "1" | "true" | "false" | undefined;
}>, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: boolean | undefined;
}, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: "0" | "1" | "true" | "false" | undefined;
}>, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: boolean | undefined;
}, {
    from: string;
    to: string;
    channelId?: number | undefined;
    mine?: "0" | "1" | "true" | "false" | undefined;
}>;
export type ListEventsQuery = z.infer<typeof ListEventsQuery>;
//# sourceMappingURL=calendar-http.d.ts.map