import { S as Subscriber, C as ContextResolved, L as EmailOutputUnvalidated, f as Awaitable, p as providerSchemas, W as WithPassthrough, a1 as SmsOutputUnvalidated, k as ChatOutputUnvalidated, Z as PushOutputUnvalidated, O as InAppOutputUnvalidated } from './subscriber.types-CftO3aFY.cjs';
export { a9 as channelStepSchemas } from './subscriber.types-CftO3aFY.cjs';
import { S as Schema, a as FromSchema } from './base.schema.types-BApIn9jr.cjs';
import 'json-schema-to-ts';
import 'zod';

type StepResolverContext<TPayload extends Record<string, unknown> = Record<string, unknown>> = {
    payload: TPayload;
    subscriber: Subscriber;
    context: ContextResolved;
    steps: Record<string, unknown>;
};
type ResolveControls<T extends Schema | undefined> = T extends Schema ? FromSchema<T> : Record<string, unknown>;
type StepResolverProviders<T_StepType extends keyof typeof providerSchemas, T_Controls, T_Output, T_Payload extends Record<string, unknown> = Record<string, unknown>> = {
    [K in keyof (typeof providerSchemas)[T_StepType]]?: (step: {
        controls: T_Controls;
        outputs: T_Output;
    }, ctx: StepResolverContext<T_Payload>) => Awaitable<WithPassthrough<Record<string, unknown>>>;
};
type BaseStepResolverOptions<TControlSchema extends Schema | undefined, TPayloadSchema extends Schema | undefined> = {
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Awaitable<boolean>;
};
type ChannelStepResolverOptions<T_StepType extends keyof typeof providerSchemas, TControlSchema extends Schema | undefined, TPayloadSchema extends Schema | undefined, T_Output extends Record<string, unknown>> = BaseStepResolverOptions<TControlSchema, TPayloadSchema> & {
    providers?: StepResolverProviders<T_StepType, ResolveControls<TControlSchema>, T_Output, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type EmailStepResolver<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined> = {
    type: 'email';
    stepId: string;
    resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<EmailOutputUnvalidated>;
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: BaseStepResolverOptions<TControlSchema, TPayloadSchema>['skip'];
    providers?: StepResolverProviders<'email', ResolveControls<TControlSchema>, EmailOutputUnvalidated, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type SmsStepResolver<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined> = {
    type: 'sms';
    stepId: string;
    resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<SmsOutputUnvalidated>;
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: BaseStepResolverOptions<TControlSchema, TPayloadSchema>['skip'];
    providers?: StepResolverProviders<'sms', ResolveControls<TControlSchema>, SmsOutputUnvalidated, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type ChatStepResolver<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined> = {
    type: 'chat';
    stepId: string;
    resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<ChatOutputUnvalidated>;
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: BaseStepResolverOptions<TControlSchema, TPayloadSchema>['skip'];
    providers?: StepResolverProviders<'chat', ResolveControls<TControlSchema>, ChatOutputUnvalidated, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type PushStepResolver<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined> = {
    type: 'push';
    stepId: string;
    resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<PushOutputUnvalidated>;
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: BaseStepResolverOptions<TControlSchema, TPayloadSchema>['skip'];
    providers?: StepResolverProviders<'push', ResolveControls<TControlSchema>, PushOutputUnvalidated, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type InAppStepResolver<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined> = {
    type: 'in_app';
    stepId: string;
    resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<InAppOutputUnvalidated>;
    controlSchema?: TControlSchema;
    payloadSchema?: TPayloadSchema;
    skip?: BaseStepResolverOptions<TControlSchema, TPayloadSchema>['skip'];
    providers?: StepResolverProviders<'in_app', ResolveControls<TControlSchema>, InAppOutputUnvalidated, ResolveControls<TPayloadSchema>>;
    disableOutputSanitization?: boolean;
};
type AnyStepResolver = EmailStepResolver<Schema | undefined, Schema | undefined> | SmsStepResolver<Schema | undefined, Schema | undefined> | ChatStepResolver<Schema | undefined, Schema | undefined> | PushStepResolver<Schema | undefined, Schema | undefined> | InAppStepResolver<Schema | undefined, Schema | undefined>;
declare function email<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined>(stepId: string, resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<EmailOutputUnvalidated>, options?: ChannelStepResolverOptions<'email', TControlSchema, TPayloadSchema, EmailOutputUnvalidated>): EmailStepResolver<TControlSchema, TPayloadSchema>;
declare function sms<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined>(stepId: string, resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<SmsOutputUnvalidated>, options?: ChannelStepResolverOptions<'sms', TControlSchema, TPayloadSchema, SmsOutputUnvalidated>): SmsStepResolver<TControlSchema, TPayloadSchema>;
declare function chat<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined>(stepId: string, resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<ChatOutputUnvalidated>, options?: ChannelStepResolverOptions<'chat', TControlSchema, TPayloadSchema, ChatOutputUnvalidated>): ChatStepResolver<TControlSchema, TPayloadSchema>;
declare function push<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined>(stepId: string, resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<PushOutputUnvalidated>, options?: ChannelStepResolverOptions<'push', TControlSchema, TPayloadSchema, PushOutputUnvalidated>): PushStepResolver<TControlSchema, TPayloadSchema>;
declare function inApp<TControlSchema extends Schema | undefined = undefined, TPayloadSchema extends Schema | undefined = undefined>(stepId: string, resolve: (controls: ResolveControls<TControlSchema>, ctx: StepResolverContext<ResolveControls<TPayloadSchema>>) => Promise<InAppOutputUnvalidated>, options?: ChannelStepResolverOptions<'in_app', TControlSchema, TPayloadSchema, InAppOutputUnvalidated>): InAppStepResolver<TControlSchema, TPayloadSchema>;
declare const step: {
    email: typeof email;
    sms: typeof sms;
    chat: typeof chat;
    push: typeof push;
    inApp: typeof inApp;
};

export { type AnyStepResolver, type ChatStepResolver, ContextResolved, type EmailStepResolver, type InAppStepResolver, type PushStepResolver, type SmsStepResolver, type StepResolverContext, Subscriber, WithPassthrough, providerSchemas, step };
