import { type EventHandler, type H3Event } from 'h3';
import z from 'zod';
export interface Procedure<I extends z.ZodTypeAny = z.ZodUndefined, O extends z.ZodTypeAny = z.ZodVoid> extends EventHandler {
    __procedureMetadata: {
        inputSchema: I;
        outputSchema: O;
    };
}
type Awaitable<T> = T | Promise<T>;
type HandlerArgs<I> = I extends undefined ? {
    event: H3Event;
} : {
    input: I;
    event: H3Event;
};
type Handler<I extends z.ZodTypeAny = z.ZodUndefined, O extends z.ZodTypeAny = z.ZodVoid> = (args: HandlerArgs<z.infer<I>>) => Awaitable<z.infer<O>>;
export declare function defineProcedure<I extends z.ZodTypeAny = z.ZodUndefined, O extends z.ZodTypeAny = z.ZodVoid>(args: {
    input?: I;
    output?: O;
    handler: Handler<I, O>;
}): Procedure<I, O>;
export {};
