waitlist-mailer
v2.1.0
Published
Modern, modular TypeScript library for managing waitlists with pluggable storage and mail providers. Supports MongoDB, SQL databases, and custom adapters with zero required dependencies for basic usage.
Maintainers
Readme
WaitlistMailer v2.1.0
A modern, modular, and lightweight TypeScript library for managing email waitlists with zero required dependencies for basic usage. Built with clean architecture principles: dependency injection, adapter pattern, and event-driven design.
✨ Key Features
✅ Modular Adapters: Pluggable storage and mail providers
✅ Zero Bloat: No forced dependencies unless you use them
✅ Dependency Injection: Clean, testable architecture
✅ TypeScript-First: Full type safety with generic support
✅ Event-Driven: Rich event system for integrations
✅ Production-Ready: 44+ tests, comprehensive coverage
✅ Smart Defaults: Works out of the box with in-memory storage
✅ Scalable: Database-level search & streaming for large datasets (NEW in v2.1)
📦 Installation
npm install waitlist-mailerFor Database Support
Choose the storage adapter you need:
# For MongoDB
npm install mongoose
# For PostgreSQL
npm install sequelize pg
# For MySQL
npm install sequelize mysql2
# For SQLite
npm install sequelize better-sqlite3🚀 Quick Start
Minimal Setup (Default)
By default, WaitlistManager uses in-memory storage, perfect for rapid prototyping.
import { WaitlistManager } from 'waitlist-mailer';
// Defaults to MemoryStorage automatically
const manager = new WaitlistManager({
companyName: 'My App'
});
// Add someone to the waitlist
const result = await manager.join('[email protected]', {
name: 'John Doe',
source: 'Twitter'
});
console.log(result);
// Output: { success: true, message: 'Successfully joined...', email: '[email protected]' }With Email Sending
To send emails, simply provide a mailer adapter.
import { WaitlistManager, NodemailerProvider } from 'waitlist-mailer';
const manager = new WaitlistManager({
// Storage defaults to MemoryStorage if not provided
mailer: new NodemailerProvider({
host: 'smtp.gmail.com',
port: 587,
user: '[email protected]',
pass: 'your-app-password'
}),
companyName: 'My Startup'
});
// When users join, they'll automatically receive a confirmation email
await manager.join('[email protected]');With MongoDB
For persistent storage, inject the Mongoose adapter.
import { WaitlistManager, MongooseStorage } from 'waitlist-mailer';
import mongoose from 'mongoose';
// Connect to MongoDB
await mongoose.connect('mongodb://localhost:27017/waitlist');
// Define schema
const schema = new mongoose.Schema({
email: { type: String, required: true, unique: true },
metadata: { type: mongoose.Schema.Types.Mixed },
createdAt: { type: Date, default: Date.now }
});
const WaitlistModel = mongoose.model('Waitlist', schema);
// Initialize manager
const manager = new WaitlistManager({
storage: new MongooseStorage({ model: WaitlistModel }),
companyName: 'My App'
});📖 Documentation
→ Complete Documentation Map Quick Links:
API Reference — Complete method documentation, event system, and type definitions
Customization Guide — Email templates, custom adapters, and advanced examples
Practical Examples — Real-world scenarios: MVP setup, production patterns, campaigns
Architecture — Design patterns and extensibility
Migration Guide — Upgrading from v1.x to v2.0
📄 License
MIT License - see LICENSE file for details.
🤝 Contributing
Contributions are welcome! Please open an issue or pull request on GitHub.
📞 Support
Issues: GitHub Issues
Documentation: See DOCS.md for complete reference
NPM: waitlist-mailer
Made with ❤️ by JuansesDev
