import { SpruceSchemas } from '@sprucelabs/mercury-types';
import { Schema, AreAnyFieldsRequired } from '@sprucelabs/schema';
export type EventTargetSchema = SpruceSchemas.SpruceEventUtils.v2021_09_13.EventTargetSchema;
export type EventTarget = SpruceSchemas.SpruceEventUtils.v2021_09_13.EventTarget;
export type EventSourceSchema = SpruceSchemas.SpruceEventUtils.v2021_09_13.EventSourceSchema;
export type EventSource = SpruceSchemas.SpruceEventUtils.v2021_09_13.EventSource;
export interface TargetAndPayload<TargetSchema extends Schema | undefined, PayloadSchema extends Schema | undefined> {
    id: string;
    fields: Omit<{
        source: {
            type: 'schema';
            isRequired: false;
            options: {
                schema: EventSourceSchema;
            };
        };
        target: {
            type: 'schema';
            isRequired: AreAnyFieldsRequired<TargetSchema>;
            options: {
                schema: TargetSchema;
            };
        };
        payload: {
            type: 'schema';
            isRequired: AreAnyFieldsRequired<PayloadSchema>;
            options: {
                schema: PayloadSchema;
            };
        };
    }, (TargetSchema extends undefined ? 'target' : '') | (PayloadSchema extends undefined ? 'payload' : '')>;
}
declare function buildEmitTargetAndPayloadSchema<Payload extends Schema, Target extends Schema>(options: {
    eventName: string;
    payloadSchema?: Payload;
    targetSchema?: Target;
}): TargetAndPayload<Target, Payload>;
export default buildEmitTargetAndPayloadSchema;
