- Add .github/workflows/ci.yml with typecheck, lint, build, test, and badge publishing
- Add scripts/coverage-badge.mjs to generate shields.io endpoint JSON from coverage summary
- Update vitest.config.ts with json-summary reporter and include package sources
- Update README.md coverage badge to read from badges branch endpoint
- Ignore badge directory and ignore .next in eslint.config.js
- Add test coverage for DeliveryWorker circuit breaker isolation, consecutive failure trips, and probe recovery
- Add test coverage for fallback chain exhaustion and terminal NonRetryableError assertions
- Add comprehensive test suite for ConsoleTransport dev provider
- Upgrade firebase-admin from ^12.0.0 to ^14.0.0 in provider-fcm
- Refresh package-lock.json resolving dependency security advisories
- Include src in provider-fcm published files
- Embed sources in JS maps via inlineSources: true in tsconfig.base.json
- Add src to package files array across root and packages for declaration map resolution
- Move baseUrl and path aliases from shared base into root tsconfig.json to prevent TS6059 errors
- Align packages/provider-console/tsconfig.json with workspace base
Delivers via Meta's WhatsApp Cloud API. notifkit has no native "whatsapp"
channel — the enum is fixed across schemas and the DB layer — so this
registers under channel: "sms" and sends to the recipient's existing
phone field instead, same pattern as the other first-party transports.
Free tier: Meta's Cloud API is free for roughly the first 1,000
business-initiated conversations/month per WABA.
Note: free-form text only works inside a 24h customer-service session
window. Cold/business-initiated sends need an approved message template,
which isn't built here since it needs template name + component params
per message — documented in the package README as a known limitation.