Files
calendar/packages/features/bookings/lib/handleWebhookTrigger.ts
T
Udit TakkarandGitHub 4e1d05a7e7 feat: dist tracing 4 (#25574)
* feat: distributed tracing 2

* feat: distributed tracing 2

* refactor: feedback

* refactor: feedback

* fix: type error

* fix: trpc error

* feat: distributed tracing - 3

* chore: translation

* refactor: improvements

* fix: feedback

* chore: remove

* feat: dist tracing 4

* fix: type errors

* fix: type errors

* fix: remove string type

* fix: type errors
2025-12-15 10:43:22 +00:00

46 lines
1.8 KiB
TypeScript

import getWebhooks from "@calcom/features/webhooks/lib/getWebhooks";
import type { GetSubscriberOptions } from "@calcom/features/webhooks/lib/getWebhooks";
import sendPayload from "@calcom/features/webhooks/lib/sendOrSchedulePayload";
import { isEventPayload, type WebhookPayloadType } from "@calcom/features/webhooks/lib/sendPayload";
import { safeStringify } from "@calcom/lib/safeStringify";
import { withReporting } from "@calcom/lib/sentryWrapper";
import type { TraceContext } from "@calcom/lib/tracing";
import { distributedTracing } from "@calcom/lib/tracing/factory";
async function _handleWebhookTrigger(args: {
subscriberOptions: GetSubscriberOptions;
eventTrigger: string;
webhookData: WebhookPayloadType;
isDryRun?: boolean;
traceContext: TraceContext;
}) {
const spanContext = distributedTracing.createSpan(args.traceContext, "webhook_trigger", {
eventTrigger: args.eventTrigger || "unknown",
});
const tracingLogger = distributedTracing.getTracingLogger(spanContext);
try {
if (args.isDryRun) return;
const subscribers = await getWebhooks(args.subscriberOptions);
const promises = subscribers.map((sub) =>
sendPayload(sub.secret, args.eventTrigger, new Date().toISOString(), sub, args.webhookData).catch(
(e) => {
if (isEventPayload(args.webhookData)) {
tracingLogger.error(
`Error executing webhook for event: ${args.eventTrigger}, URL: ${sub.subscriberUrl}, booking id: ${args.webhookData.bookingId}, booking uid: ${args.webhookData.uid}`,
safeStringify(e)
);
}
}
)
);
await Promise.all(promises);
} catch (error) {
tracingLogger.error("Error while sending webhook", error);
}
}
export const handleWebhookTrigger = withReporting(_handleWebhookTrigger, "handleWebhookTrigger");