From 4eef340d7d658650a370fb52ee0392f1f123ce10 Mon Sep 17 00:00:00 2001 From: nicktrn <55853254+nicktrn@users.noreply.github.com> Date: Tue, 28 Nov 2023 09:00:34 +0000 Subject: [PATCH] Add batch opts to event trigger --- packages/core/src/schemas/triggers.ts | 11 +++++++++ .../trigger-sdk/src/triggers/eventTrigger.ts | 23 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/core/src/schemas/triggers.ts b/packages/core/src/schemas/triggers.ts index e38697661..d1022bec7 100644 --- a/packages/core/src/schemas/triggers.ts +++ b/packages/core/src/schemas/triggers.ts @@ -37,6 +37,16 @@ export const TriggerHelpSchema = z.object({ .optional(), }); +export const EventDispatchBatcherOptionsSchema = z.union([ + z.boolean(), + z.object({ + maxPayloads: z.number().optional(), + maxInterval: z.number().optional(), + }), +]); + +export type EventDispatchBatcherOptions = z.infer; + export const StaticTriggerMetadataSchema = z.object({ type: z.literal("static"), title: z.union([z.string(), z.array(z.string())]), @@ -44,6 +54,7 @@ export const StaticTriggerMetadataSchema = z.object({ rule: EventRuleSchema, link: z.string().optional(), help: TriggerHelpSchema.optional(), + batch: EventDispatchBatcherOptionsSchema.optional(), }); export const InvokeTriggerMetadataSchema = z.object({ diff --git a/packages/trigger-sdk/src/triggers/eventTrigger.ts b/packages/trigger-sdk/src/triggers/eventTrigger.ts index 0a7d2f245..ad4cacbda 100644 --- a/packages/trigger-sdk/src/triggers/eventTrigger.ts +++ b/packages/trigger-sdk/src/triggers/eventTrigger.ts @@ -1,4 +1,9 @@ -import { EventFilter, TriggerMetadata, deepMergeFilters } from "@trigger.dev/core"; +import { + EventDispatchBatcherOptions, + EventFilter, + TriggerMetadata, + deepMergeFilters, +} from "@trigger.dev/core"; import { Job } from "../job"; import { TriggerClient } from "../triggerClient"; import { @@ -18,6 +23,7 @@ type EventTriggerOptions> = source?: string; filter?: EventFilter; verify?: EventTypeFromSpecification extends Request ? VerifyCallback : never; + batch?: EventDispatchBatcherOptions; }; export class EventTrigger> @@ -38,6 +44,7 @@ export class EventTrigger> source: this.#options.source ?? "trigger.dev", payload: deepMergeFilters(this.#options.filter ?? {}, this.#options.event.filter ?? {}), }, + batch: this.#options.batch, }; } @@ -47,6 +54,17 @@ export class EventTrigger> attachToJob(triggerClient: TriggerClient, job: Job, any>): void {} + batch( + options?: Exclude + ): EventTrigger { + const { batch, ...rest } = this.#options; + + return new EventTrigger({ + ...rest, + batch: options ?? true, + }); + } + get preprocessRuns() { return false; } @@ -93,6 +111,8 @@ type TriggerOptions = { * ``` */ filter?: EventFilter; + /** Used to set batching options. */ + batch?: EventDispatchBatcherOptions; examples?: EventSpecificationExample[]; }; @@ -106,6 +126,7 @@ export function eventTrigger( return new EventTrigger({ name: options.name, filter: options.filter, + batch: options.batch, event: { name: options.name, title: "Event",