Skip to content

Unify sender workers into one package - #583

Open
Kuchizu wants to merge 2 commits into
masterfrom
refactor/unified-sender
Open

Unify sender workers into one package#583
Kuchizu wants to merge 2 commits into
masterfrom
refactor/unified-sender

Conversation

@Kuchizu

@Kuchizu Kuchizu commented Aug 6, 2026

Copy link
Copy Markdown
Member

Merges email, telegram, slack, webhook and loop sender workers into workers/sender.
One process serves all channels, each channel still consumes its own sender/ queue, MongoDB connections are shared.

Goal: optimize k8s resource usage

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

There are confirmed runtime/templating bugs (undefined variables, wrong Twig include vars, broken prettyTime pluralization) and a TS visibility issue (channelWorkers private but referenced) that should be fixed before merge.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR consolidates multiple per-channel “sender” workers (email/telegram/slack/webhook/loop) into a single workers/sender package that starts one queue consumer per enabled channel while sharing MongoDB connections, aiming to reduce k8s resource usage.

Changes:

  • Replace standalone channel sender workers with one multi-channel sender process (SenderWorker + ChannelSenderWorker).
  • Move channel providers/templates under workers/sender/src/providers/<channel>/ and update tests accordingly.
  • Update local/dev/prod run/test wiring (root package.json, compose files, worker name registry).
File summaries
File Description
workers/webhook/src/index.ts Removes standalone webhook sender worker entrypoint
workers/webhook/package.json Removes standalone webhook worker package metadata
workers/telegram/src/index.ts Removes standalone telegram sender worker entrypoint
workers/telegram/README.md Removes standalone telegram worker docs
workers/telegram/package.json Removes standalone telegram worker package metadata
workers/slack/yarn.lock Removes slack worker lockfile (worker removed)
workers/slack/src/index.ts Removes standalone slack sender worker entrypoint
workers/slack/package.json Removes standalone slack worker package metadata
workers/sender/tests/worker.test.ts Updates worker tests for multi-channel sender
workers/sender/tests/webhook/provider.test.ts Repoints webhook provider tests to new paths
workers/sender/tests/webhook/mocks/several-events-notify.ts Adds webhook mock payload fixture
workers/sender/tests/webhook/mocks/event-notify.ts Adds webhook mock payload fixture
workers/sender/tests/webhook/mocks/assignee-notify.ts Adds webhook mock payload fixture
workers/sender/tests/telegram/provider.test.ts Repoints telegram provider tests to new paths
workers/sender/tests/slack/utils.test.ts Repoints slack utils test to new paths
workers/sender/tests/slack/provider.test.ts Repoints slack provider tests to new paths
workers/sender/tests/slack/mocks/several-events-notify.ts Adds slack mock payload fixture
workers/sender/tests/slack/mocks/event-notify.ts Adds slack mock payload fixture
workers/sender/tests/sender-example.ts Removes example sender worker class (replaced)
workers/sender/tests/loop/provider.test.ts Repoints loop provider tests to new paths
workers/sender/tests/loop/mocks/several-events-notify.ts Adds loop mock payload fixture
workers/sender/tests/loop/mocks/event-notify.ts Adds loop mock payload fixture
workers/sender/tests/email/provider.test.ts Repoints email provider tests to new paths
workers/sender/src/providers/webhook/types/template.d.ts Adds webhook delivery shape type
workers/sender/src/providers/webhook/templates/index.ts Exports webhook template helpers
workers/sender/src/providers/webhook/templates/generic.ts Implements generic webhook serializer
workers/sender/src/providers/webhook/provider.ts Adds webhook provider in unified sender
workers/sender/src/providers/webhook/deliverer.ts Moves webhook HTTP deliverer under sender
workers/sender/src/providers/telegram/types/template.d.ts Adds telegram template interface type
workers/sender/src/providers/telegram/templates/several-events.ts Adds telegram several-events template
workers/sender/src/providers/telegram/templates/index.ts Exports telegram templates registry
workers/sender/src/providers/telegram/templates/event.ts Adds telegram event template
workers/sender/src/providers/telegram/provider.ts Updates telegram provider template typing import
workers/sender/src/providers/slack/types/template.d.ts Adds slack template interface type
workers/sender/src/providers/slack/templates/utils.ts Adds slack template helper utilities
workers/sender/src/providers/slack/templates/several-events.ts Adds slack several-events template
workers/sender/src/providers/slack/templates/index.ts Exports slack templates registry
workers/sender/src/providers/slack/templates/event.ts Adds slack event template
workers/sender/src/providers/slack/provider.ts Updates slack provider template typing import
workers/sender/src/providers/slack/deliverer.ts Adds slack deliverer abstraction for testing
workers/sender/src/providers/loop/types/template.d.ts Adds loop template interface type
workers/sender/src/providers/loop/templates/several-events.ts Fixes loop template util import path
workers/sender/src/providers/loop/templates/index.ts Exports loop templates registry
workers/sender/src/providers/loop/templates/event.ts Repoints toMaxLen helper to unified slack utils
workers/sender/src/providers/loop/provider.ts Updates loop provider template typing import
workers/sender/src/providers/loop/deliverer.ts Adds loop deliverer abstraction
workers/sender/src/providers/email/templates/names.ts Adds generated email template names enum
workers/sender/src/providers/email/templates/index.ts Updates template path docs to new location
workers/sender/src/providers/email/templates/extensions.ts Adds twig extensions/filters for email templates
workers/sender/src/providers/email/templates/emails/workspace-invite/text.twig Adds workspace-invite email (text)
workers/sender/src/providers/email/templates/emails/workspace-invite/subject.twig Adds workspace-invite email (subject)
workers/sender/src/providers/email/templates/emails/workspace-invite/html.twig Adds workspace-invite email (html)
workers/sender/src/providers/email/templates/emails/sign-up/text.twig Adds sign-up email (text)
workers/sender/src/providers/email/templates/emails/sign-up/subject.twig Adds sign-up email (subject)
workers/sender/src/providers/email/templates/emails/sign-up/html.twig Adds sign-up email (html)
workers/sender/src/providers/email/templates/emails/several-events/text.twig Adds several-events email (text)
workers/sender/src/providers/email/templates/emails/several-events/subject.twig Adds several-events email (subject)
workers/sender/src/providers/email/templates/emails/several-events/html.twig Adds several-events email (html)
workers/sender/src/providers/email/templates/emails/payment-success/text.twig Adds payment-success email (text)
workers/sender/src/providers/email/templates/emails/payment-success/subject.twig Adds payment-success email (subject)
workers/sender/src/providers/email/templates/emails/payment-success/html.twig Adds payment-success email (html)
workers/sender/src/providers/email/templates/emails/payment-failed/text.twig Adds payment-failed email (text)
workers/sender/src/providers/email/templates/emails/payment-failed/subject.twig Adds payment-failed email (subject)
workers/sender/src/providers/email/templates/emails/payment-failed/html.twig Adds payment-failed email (html)
workers/sender/src/providers/email/templates/emails/password-reset/text.twig Adds password-reset email (text)
workers/sender/src/providers/email/templates/emails/password-reset/subject.twig Adds password-reset email (subject)
workers/sender/src/providers/email/templates/emails/password-reset/html.twig Adds password-reset email (html)
workers/sender/src/providers/email/templates/emails/events-limit-almost-reached/text.twig Adds events-limit email (text)
workers/sender/src/providers/email/templates/emails/events-limit-almost-reached/subject.twig Adds events-limit email (subject)
workers/sender/src/providers/email/templates/emails/events-limit-almost-reached/html.twig Adds events-limit email (html)
workers/sender/src/providers/email/templates/emails/event/text.twig Adds event email (text)
workers/sender/src/providers/email/templates/emails/event/subject.twig Adds event email (subject)
workers/sender/src/providers/email/templates/emails/event/html.twig Adds event email (html)
workers/sender/src/providers/email/templates/emails/days-limit-almost-reached/text.twig Adds days-limit email (text)
workers/sender/src/providers/email/templates/emails/days-limit-almost-reached/subject.twig Adds days-limit email (subject)
workers/sender/src/providers/email/templates/emails/days-limit-almost-reached/html.twig Adds days-limit email (html)
workers/sender/src/providers/email/templates/emails/blocked-workspace-reminder/text.twig Adds blocked reminder email (text)
workers/sender/src/providers/email/templates/emails/blocked-workspace-reminder/subject.twig Adds blocked reminder email (subject)
workers/sender/src/providers/email/templates/emails/blocked-workspace-reminder/html.twig Adds blocked reminder email (html)
workers/sender/src/providers/email/templates/emails/block-workspace/text.twig Adds block-workspace email (text)
workers/sender/src/providers/email/templates/emails/block-workspace/subject.twig Adds block-workspace email (subject)
workers/sender/src/providers/email/templates/emails/block-workspace/html.twig Adds block-workspace email (html)
workers/sender/src/providers/email/templates/emails/assignee/text.twig Adds assignee email (text)
workers/sender/src/providers/email/templates/emails/assignee/subject.twig Adds assignee email (subject)
workers/sender/src/providers/email/templates/emails/assignee/html.twig Adds assignee email (html)
workers/sender/src/providers/email/templates/components/workspace.twig Adds reusable workspace header component
workers/sender/src/providers/email/templates/components/project.twig Adds reusable project header component
workers/sender/src/providers/email/templates/components/layout.twig Adds shared email layout wrapper
workers/sender/src/providers/email/templates/components/filename.twig Adds filename display component
workers/sender/src/providers/email/templates/components/event.twig Adds reusable event component
workers/sender/src/providers/email/templates/components/event-info.twig Adds reusable event meta component
workers/sender/src/providers/email/templates/components/button.twig Adds reusable CTA button component
workers/sender/src/providers/email/templates/components/backtrace.twig Adds reusable backtrace component
workers/sender/src/providers/email/provider.ts Updates email provider util import path
workers/sender/src/index.ts Implements multi-channel sender orchestrator
workers/sender/src/channels.ts Adds channel→provider registry
workers/sender/src/channel-sender.ts Adds per-channel queue consumer worker
workers/sender/scripts/generateTemplatesNames.ts Updates generator paths for moved templates
workers/sender/scripts/emailOverviewForm.twig Updates email overview links to sender
workers/sender/scripts/emailOverview.ts Repoints email overview script to new template module
workers/sender/README.md Updates docs for unified sender structure/config
workers/sender/package.json Adds dependencies/scripts merged from channel workers
workers/sender/.env.sample Documents SENDER_CHANNELS + SMTP vars
workers/loop/yarn.lock Removes loop worker lockfile (worker removed)
workers/loop/src/index.ts Removes standalone loop sender worker entrypoint
workers/loop/package.json Removes standalone loop worker package metadata
workers/email/yarn.lock Removes email worker lockfile (worker removed)
workers/email/src/index.ts Removes standalone email sender worker entrypoint
workers/email/src/env.ts Removes email worker env loader
workers/email/README.md Removes email worker docs (moved to sender)
workers/email/package.json Removes standalone email worker package metadata
workers/email/.gitignore Removes email worker .env ignore (worker removed)
workers/email/.env.sample Removes email worker env sample (moved to sender)
README.md Updates compose example to hawk-worker-sender
package.json Consolidates run/test scripts under sender
lib/workerNames.js Adds explicit per-channel sender queue names
docker-compose.prod.yml Replaces email/telegram services with sender
docker-compose.dev.yml Replaces multiple sender services with sender
Review details
  • Files reviewed: 46/118 changed files
  • Comments generated: 1
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

* Workers of enabled channels
*/
protected abstract channelType: ChannelType;
private channelWorkers: ChannelSenderWorker[];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants