1
import { TriggerClient, verifyRequestSignature } from "@trigger.dev/sdk";
2
import { Slack } from "@trigger.dev/slack";
3
const dateFormatter = new Intl.DateTimeFormat("en-US", {
8
const timeFormatter = new Intl.DateTimeFormat("en-US", {
12
const slack = new Slack({ id: "slack" });
15
const caldotcom = client.defineHttpEndpoint({
19
verify: async (request) => {
20
return await verifyRequestSignature({
22
headerName: "X-Cal-Signature-256",
23
secret: process.env.CALDOTCOM_SECRET!,
36
trigger: caldotcom.onRequest(),
40
run: async (request, io, ctx) => {
41
const body = await request.json();
42
await io.logger.info(`Body`, body);
44
const attendees = body.payload.attendees
45
.map((attendee: any) => attendee.email)
46
.join(", ") as string[];
48
const startTime = dateFormatter.format(new Date(body.payload.startTime));
49
const endTime = timeFormatter.format(new Date(body.payload.endTime));
51
switch (body.triggerEvent) {
52
case "BOOKING_CREATED": {
53
await io.slack.postMessage("booking-created", {
54
channel: process.env.SLACK_CHANNEL!,
55
text: `Meeting booked:\n ${attendees} \n ${startTime}—${endTime}`,
59
case "BOOKING_CANCELLED": {
60
await io.slack.postMessage("booking-cancelled", {
61
channel: process.env.SLACK_CHANNEL!,
62
text: `Meeting canceled:\n ${attendees} \n ${startTime}—${endTime}`,