Files
Syed Ali ShahbazGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2ec9e903ce feat: implement webhook tasker with async/sync fallback (#27378)
* 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>
2026-01-29 15:30:07 +04:00

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;