open-messaging
v0.1.1
Published
Open messaging provider port for transactional notify (email-first, multi-ESP ready)
Downloads
386
Maintainers
Readme
open-messaging
Provider-agnostic transactional messaging port (email-first).
There is no useful open standard for SaaS transactional send across ESPs.
This package owns a small hexagonal MessagingProvider port and ships adapters.
Install
npm install open-messagingQuick start
import { getMessagingProvider } from 'open-messaging';
const messaging = getMessagingProvider(); // EMAIL_PROVIDER / MESSAGING_PROVIDER, default resend
await messaging.send({
to: '[email protected]',
subject: 'Welcome',
html: '<p>Hello</p>',
tags: { category: 'welcome' },
});Env
MESSAGING_PROVIDER=resend # alias: EMAIL_PROVIDER
EMAIL_FROM=App <[email protected]>
RESEND_API_KEY=When RESEND_API_KEY is unset, sends are mocked ({ mocked: true, ok: true }).
Supported providers (v0.1)
| Id | Adapter |
|---|---|
| resend | adapters/resend |
Additional ESPs (Postmark, SES, SendGrid, …) can register on the same port later.
License
MIT
Testing / mocks
import { createMockMessagingProvider, fixtureSendInput } from 'open-messaging/testing';
import { setMessagingProviderOverride, getMessagingProvider } from 'open-messaging';
const mock = createMockMessagingProvider({ id: 'resend' });
setMessagingProviderOverride(mock);
await getMessagingProvider().send(fixtureSendInput);
expect(mock.calls.send).toHaveLength(1);With RESEND_API_KEY unset, the Resend adapter mock-sends. With the key set, unit tests can stub fetch.
