payload-plugin-newsletter
Version:
Complete newsletter management plugin for Payload CMS with subscriber management, magic link authentication, and email service integration
193 lines (151 loc) • 8.04 kB
Markdown
## [0.6.0] - 2025-06-20
- fix: resolve ESLint error for unused variable in test mock
- fix: update tests to support newsletter settings as global
- feat: convert newsletter settings from collection to global
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.5.0] - 2025-06-20
### Changed
- **BREAKING**: Changed newsletter settings from a collection back to a global configuration
- Settings are now accessed as a single global config instead of multiple documents
- Removed the "name" and "active" fields as they're no longer needed for globals
- Settings now appear as a single page in the admin UI instead of a list view
- Updated all code to use `payload.findGlobal()` instead of `payload.find()`
### Migration Required
- Users with existing newsletter-settings collections will need to manually copy their active configuration to the new global settings
- After migration, the old newsletter-settings collection can be removed from the database
### Fixed
- Resolved user confusion around having multiple settings documents when only one could be active
- Settings now follow the standard Payload pattern for configuration globals
## [0.4.5] - 2025-06-19
### Fixed
- Added tsup build system for proper ESM/CJS dual package support
## [0.4.4] - 2025-06-16
### Fixed
- Fixed all ESLint errors across the codebase (56 errors resolved)
- Fixed test failures by restoring mock data seeding
- Fixed import paths in test files
- Fixed unused variable and parameter warnings
- Fixed regex escape character issues
### Added
- Added comprehensive CI/CD workflows for automatic testing and releases
- Added CI workflow that runs on every push to main and PRs
- Added auto-release workflow with smart version bumping based on commit messages
- Auto-release workflow now skips test-only and documentation-only changes
### Changed
- Improved auto-release workflow to check for significant changes before releasing
- Test files now properly import and use mock data fixtures
## [0.4.3] - 2025-06-16
### Fixed
- Resolved all 76 failing tests by fixing test runner configuration
- Fixed duplicate test execution issue (tests were running from both src/ and dist/)
- Fixed React component test timeouts by applying Happy DOM timer patch
- Corrected newsletter settings access control to allow public read access
- Fixed subscribe endpoint to properly access nested subscriptionSettings fields
- Excluded test files from build output to prevent test code in production
### Changed
- Switched from `bun test` to `bun run test` to properly use Vitest
- Updated build configuration to exclude test files from TypeScript and SWC compilation
- Added .npmignore file to ensure dist/ folder is included in npm package
- Skipped rate-limiting tests due to Vitest mocking incompatibilities
### Developer Experience
- All 287 tests now pass (17 skipped)
- Cleaner npm package without test files
- Proper separation of source and distribution code
## [0.3.2] - 2025-06-16
### Security
- Enhanced input sanitization using DOMPurify to prevent XSS attacks
- Fixed CSRF protection test implementations
- Improved HTML sanitization for all user inputs
### Added
- Comprehensive test infrastructure with Vitest
- Unit tests for access control utilities and JWT security
- Security tests for XSS, CSRF, and access control patterns
- Integration tests for API endpoints
- Behavior-based email provider mocks for realistic testing
### Changed
- Updated `sanitizeInput` function to use DOMPurify for proper HTML removal
- Enhanced test coverage with 44 passing security tests
- Improved mock implementations to match production behavior
### Fixed
- HTML content in subscriber names and custom fields is now properly sanitized
- Mock response objects now include all required methods
- Test expectations aligned with actual implementation behavior
## [0.3.1] - 2025-06-15
### Security
- **CRITICAL**: Fixed access control vulnerability where any authenticated user could read, update, or delete any subscriber
- **CRITICAL**: Fixed access control vulnerability where any authenticated user could modify newsletter settings
- Added proper admin role checking with support for multiple admin patterns
- Added configurable admin check function for custom authentication setups
### Added
- New `access.isAdmin` configuration option for custom admin authentication
- Flexible admin detection supporting common patterns (roles, isAdmin, role, admin)
- Access control utility functions for consistent security
### Changed
- All collection access controls now properly validate admin status
- Improved security documentation with custom admin configuration examples
## [0.3.0] - 2025-06-15
### Added
- Comprehensive security improvements to respect Payload access control
- Synthetic user pattern for subscriber self-service operations
- Admin verification for newsletter settings modifications
- Security documentation in README
### Changed
- All API endpoints now properly implement `overrideAccess` and `user` parameters
- Preferences endpoint now ensures subscribers can only access their own data
- Unsubscribe endpoint validates ownership through tokens
- Magic link verification uses synthetic users for updates
- Newsletter settings modifications now require admin authentication
### Security
- Implemented proper access control for all Payload Local API operations
- Added user context validation for authenticated endpoints
- Restricted settings access to admin users only
- Enhanced protection against unauthorized data access
## [0.2.0] - 2025-06-15
### Changed
- **BREAKING**: Changed newsletter settings from a global to a collection
- Allows multiple configurations (e.g., dev/staging/prod)
- Only one configuration can be active at a time
- Migrate existing settings by creating a new configuration in the collection
- Updated README to clarify the settings collection usage
### Added
- Support for multiple email configurations
- Automatic deactivation of other configs when activating one
- Configuration name field for better organization
## [0.1.1] - 2025-06-15
### Fixed
- Updated README to reflect npm availability
- Fixed package.json warnings for npm publishing
## [0.1.0] - 2025-06-15
### Added
- Initial release of Payload Newsletter Plugin
- Subscribers collection with comprehensive field schema
- Email settings global for admin UI configuration
- Magic link authentication system (separate from Payload auth)
- Email service providers: Resend and Broadcast
- Newsletter scheduling for any collection
- Automatic markdown generation from rich text fields
- Customizable email templates using React Email
- React components: NewsletterForm, PreferencesForm, MagicLinkVerify
- useNewsletterAuth hook for client-side state management
- API endpoints for subscription, authentication, and preferences
- Full TypeScript support with comprehensive types
- Internationalization support
- UTM tracking and analytics data collection
- Lead magnet support
- Rate limiting and security features
### Security
- JWT-based authentication for magic links
- Session token management
- Rate limiting by IP address
- Domain restriction options
- Input validation and sanitization
[0.3.2]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.3.2
[0.3.1]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.3.1
[0.3.0]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.3.0
[0.2.0]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.2.0
[0.1.1]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.1.1
[0.1.0]: https://github.com/aniketpanjwani/payload-plugin-email-newsletter/releases/tag/v0.1.0
---
**npm**: https://www.npmjs.com/package/payload-plugin-newsletter