Adapters Overview
MUS is notification-agnostic. An adapter tells MUS where to send feedback. You configure it once in createMusHandlers and every event (voice, thumbs, support requests, standalone) flows through it.
Quick setup
Section titled “Quick setup”import { createMusHandlers } from '@datachef/mus/server'import { slackAdapter } from '@datachef/mus/adapters/slack'
export const { POST, POSTStandalone, POSTSupportChannel } = createMusHandlers({ adapter: slackAdapter({ token: process.env.SLACK_BOT_TOKEN! }),})Available adapters
Section titled “Available adapters”| Adapter | Import | Use case |
|---|---|---|
| Slack | @datachef/mus/adapters/slack | Full Slack integration: threads, channels, file uploads |
| Discord | @datachef/mus/adapters/discord | Discord channel via incoming webhook |
| Microsoft Teams | @datachef/mus/adapters/teams | Teams channel via incoming webhook |
| Webhook | @datachef/mus/adapters/webhook | Any HTTP endpoint: Zapier, n8n, custom API |
| Custom | (none) | Implement MusAdapter for any destination |
Multiple adapters
Section titled “Multiple adapters”Pass an array to fan out to multiple destinations simultaneously. All adapters run in parallel, so a failure in one doesn’t block the others.
createMusHandlers({ adapter: [ slackAdapter({ token: process.env.SLACK_BOT_TOKEN! }), discordAdapter({ webhookUrl: process.env.DISCORD_WEBHOOK_URL! }), ],})Conditionally include adapters:
createMusHandlers({ adapter: [ slackAdapter({ token: process.env.SLACK_BOT_TOKEN! }), process.env.DISCORD_WEBHOOK_URL ? discordAdapter({ webhookUrl: process.env.DISCORD_WEBHOOK_URL }) : null, ].filter(Boolean),})The MusAdapter interface
Section titled “The MusAdapter interface”Every adapter implements this interface. Only the methods you define are called; unimplemented methods are silently skipped.
interface MusAdapter { onVoiceUpload?(event: VoiceEvent): Promise<void> onSupportRequest?(event: SupportEvent): Promise<{ channelId?: string }> onStandaloneFeedback?(event: StandaloneEvent): Promise<void>}See Event Types for the full event shapes.