@novu/framework
Version:
The Code-First Notifications Workflow SDK.
94 lines (91 loc) • 8.21 kB
text/typescript
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 };