SDK
eventTrigger()
eventTrigger()
is set as a Job's trigger to subscribe to an event a Job from a sent event.
There are two way to send an event that will trigger eventTrigger()
:
- Use client.sendEvent() from anywhere in your codebase.
- Use io.sendEvent() from inside a Job’s
run()
function.
You can have multiple Jobs that subscribe to the same event, they will all trigger when the event gets delivered.
Parameters
optionsrequired
object
namerequired
string
The name of the event you are subscribing to. Must be an exact match (case sensitive).
schema
object
A Zod schema that defines the shape of the
event payload. The default is z.any()
which is any
.
source
string
You can use this to filter events based on the source.
filter
object
Used to filter which events trigger the Job.
An example:
{
name: ["John", "Jane"],
age: [18, 21]
}
This filter would match against an event with the following data:
{
"name": "Jane",
"age": 18,
"location": "San Francisco"
}
//this Job subscribes to an event called new.user
client.defineJob({
id: "job-2",
name: "Second job",
version: "0.0.1",
//subscribes to the "new.user" event
trigger: eventTrigger({
//sent events with this name will trigger this Job
name: "new.user",
//the expected payload shape
schema: z.object({
userId: z.string(),
tier: z.union([z.literal("free"), z.literal("pro")]),
}),
//only events with the tier: "pro" will trigger this Job
filter: {
tier: ["pro"],
},
}),
run: async (payload, io, ctx) => {
await io.logger.log("New pro user created", { userId: payload.userId });
//do stuff
},
});
Was this page helpful?
//this Job subscribes to an event called new.user
client.defineJob({
id: "job-2",
name: "Second job",
version: "0.0.1",
//subscribes to the "new.user" event
trigger: eventTrigger({
//sent events with this name will trigger this Job
name: "new.user",
//the expected payload shape
schema: z.object({
userId: z.string(),
tier: z.union([z.literal("free"), z.literal("pro")]),
}),
//only events with the tier: "pro" will trigger this Job
filter: {
tier: ["pro"],
},
}),
run: async (payload, io, ctx) => {
await io.logger.log("New pro user created", { userId: payload.userId });
//do stuff
},
});