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