mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
2ec9e903ce
* feat: implement webhook tasker with async/sync fallback This PR implements a webhook tasker with async/sync fallback architecture to fix failing E2E tests. The solution follows the existing proration tasker pattern and uses Dependency Injection with @evyweb/ioctopus. Key changes: - Create IWebhookTasker interface for webhook delivery - Implement WebhookSyncTasker for immediate execution (E2E tests) - Implement WebhookAsyncTasker for queued execution (production) - Create main WebhookTasker class extending Tasker<IWebhookTasker> - Add DI modules and tokens for all tasker components - Update WebhookTaskerProducerService to use new WebhookTasker - Add unit tests for sync and async taskers The ENABLE_ASYNC_TASKER flag automatically selects the appropriate mode: - Production: Uses WebhookAsyncTasker to queue tasks - E2E Tests: Uses WebhookSyncTasker for immediate execution This ensures webhooks are delivered immediately in E2E tests without requiring the cron job that processes queued tasks. Co-Authored-By: [email protected] <[email protected]> * fix: update WebhookTaskerProducerService tests for new interface Update tests to use the new deps-based constructor and mockWebhookTasker.deliverWebhook instead of mockTasker.create Co-Authored-By: [email protected] <[email protected]> * fix: use moduleLoader pattern for WebhookProducerService in container Co-Authored-By: [email protected] <[email protected]> * refactor: replace InternalTasker with Trigger.dev for webhook delivery This commit refactors the WebhookTasker to use Trigger.dev instead of InternalTasker, following the pattern established in BookingEmailAndSmsTasker and PlatformOrganizationBillingTasker (PR #26803). Changes: - Replace WebhookAsyncTasker with WebhookTriggerTasker that uses trigger.dev - Create trigger.dev task files (deliver-webhook.ts, config.ts, schema.ts) - Update DI modules to use WebhookTriggerTasker - Remove old InternalTasker-based implementation - Update unit tests for new implementation The WebhookSyncTasker continues to execute webhooks immediately for E2E tests where ENABLE_ASYNC_TASKER is automatically false. Co-Authored-By: [email protected] <[email protected]> * fix: update comments to reflect Trigger.dev usage instead of InternalTasker Co-Authored-By: unknown <> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { WEBHOOK_TASKER_DI_TOKENS } from "./tasker/tokens";
|
|
|
|
export const WEBHOOK_TOKENS = {
|
|
...WEBHOOK_TASKER_DI_TOKENS,
|
|
// Core interfaces
|
|
WEBHOOK_SERVICE: Symbol("IWebhookService"),
|
|
BOOKING_WEBHOOK_SERVICE: Symbol("IBookingWebhookService"),
|
|
FORM_WEBHOOK_SERVICE: Symbol("IFormWebhookService"),
|
|
RECORDING_WEBHOOK_SERVICE: Symbol("IRecordingWebhookService"),
|
|
WEBHOOK_NOTIFIER: Symbol("IWebhookNotifier"),
|
|
OOO_WEBHOOK_SERVICE: Symbol("OOO_WEBHOOK_SERVICE"),
|
|
WEBHOOK_NOTIFICATION_HANDLER: Symbol("WebhookNotificationHandler"),
|
|
|
|
// Payload builder factory (versioning)
|
|
PAYLOAD_BUILDER_FACTORY: Symbol("PayloadBuilderFactory"),
|
|
|
|
// Repositories
|
|
WEBHOOK_REPOSITORY: Symbol("IWebhookRepository"),
|
|
WEBHOOK_EVENT_TYPE_REPOSITORY: Symbol("IEventTypeRepository"),
|
|
WEBHOOK_USER_REPOSITORY: Symbol("IUserRepository"),
|
|
|
|
// Producer/Consumer
|
|
WEBHOOK_PRODUCER_SERVICE: Symbol("IWebhookProducerService"),
|
|
WEBHOOK_PRODUCER_SERVICE_MODULE: Symbol("WebhookProducerService.module"),
|
|
WEBHOOK_TASK_CONSUMER: Symbol("WebhookTaskConsumer"),
|
|
WEBHOOK_TASK_CONSUMER_MODULE: Symbol("WebhookTaskConsumer.module"),
|
|
|
|
// Data Fetchers (Strategy Pattern implementations for WebhookTaskConsumer)
|
|
BOOKING_DATA_FETCHER: Symbol("BookingWebhookDataFetcher"),
|
|
PAYMENT_DATA_FETCHER: Symbol("PaymentWebhookDataFetcher"),
|
|
FORM_DATA_FETCHER: Symbol("FormWebhookDataFetcher"),
|
|
RECORDING_DATA_FETCHER: Symbol("RecordingWebhookDataFetcher"),
|
|
OOO_DATA_FETCHER: Symbol("OOOWebhookDataFetcher"),
|
|
} as const;
|