* refactor: apply biome formatting to packages/features (batch 1 - small subdirs) Format small subdirectories in packages/features: di, flags, holidays, oauth, settings, users, assignment-reason, selectedCalendar, hashedLink, host, form, form-builder, availability, data-table, pbac, schedules, troubleshooter, eventtypes, calendar-subscription, and root-level files. Also includes straggler apps/web BookEventForm.tsx. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: apply biome formatting to packages/features (batch 2 - medium subdirs) Format medium subdirectories in packages/features: auth, credentials, calendars, routing-forms, routing-trace, attributes, watchlist, calAIPhone, tasker, and webhooks. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: apply biome formatting to packages/features (batch 3 - bookings + insights) Format bookings and insights subdirectories in packages/features. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: apply biome formatting to packages/features (batch 4 - ee) Format packages/features/ee subdirectory covering billing, workflows, organizations, teams, managed-event-types, round-robin, dsync, integration-attribute-sync, and payments. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: apply biome formatting to packages/features (batch 5 - booking-audit part 1) Format booking-audit di, actions, common, dto, repository, and types subdirectories in packages/features/booking-audit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: apply biome formatting to packages/features (batch 6 - booking-audit part 2) Format booking-audit service subdirectory in packages/features/booking-audit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { WebhookEventDTO } from "../dto/types";
|
|
import type { ILogger } from "../interface/infrastructure";
|
|
import type { IWebhookNotifier, IWebhookNotificationHandler } from "../interface/webhook";
|
|
|
|
export class WebhookNotifier implements IWebhookNotifier {
|
|
private readonly log: ILogger;
|
|
|
|
constructor(
|
|
private readonly handler: IWebhookNotificationHandler,
|
|
logger: ILogger
|
|
) {
|
|
this.log = logger.getSubLogger({ prefix: ["[WebhookNotifier]"] });
|
|
}
|
|
|
|
async emitWebhook(dto: WebhookEventDTO, isDryRun = false): Promise<void> {
|
|
const trigger = dto.triggerEvent;
|
|
|
|
try {
|
|
this.log.debug(`Emitting webhook event: ${trigger}`, {
|
|
bookingId: dto.bookingId,
|
|
eventTypeId: dto.eventTypeId,
|
|
isDryRun,
|
|
});
|
|
|
|
await this.handler.handleNotification(dto, isDryRun);
|
|
|
|
this.log.debug(`Successfully emitted webhook event: ${trigger}`, {
|
|
bookingId: dto.bookingId,
|
|
});
|
|
} catch (error) {
|
|
this.log.error(`Failed to emit webhook event: ${trigger}`, {
|
|
error: error instanceof Error ? error.message : String(error),
|
|
bookingId: dto.bookingId,
|
|
eventTypeId: dto.eventTypeId,
|
|
});
|
|
throw error;
|
|
}
|
|
}
|
|
}
|