UNPKG

payload-plugin-newsletter

Version:

Complete newsletter management plugin for Payload CMS with subscriber management, magic link authentication, and email service integration

288 lines (284 loc) 9.07 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/exports/types.ts var types_exports = {}; __export(types_exports, { BaseBroadcastProvider: () => BaseBroadcastProvider, BaseNewsletterProvider: () => BaseNewsletterProvider, BroadcastErrorCode: () => BroadcastErrorCode, BroadcastProviderError: () => BroadcastProviderError, BroadcastStatus: () => BroadcastStatus, NewsletterErrorCode: () => NewsletterErrorCode, NewsletterProviderError: () => NewsletterProviderError, NewsletterStatus: () => NewsletterStatus }); module.exports = __toCommonJS(types_exports); // src/types/newsletter.ts var NewsletterStatus = /* @__PURE__ */ ((NewsletterStatus2) => { NewsletterStatus2["DRAFT"] = "draft"; NewsletterStatus2["SCHEDULED"] = "scheduled"; NewsletterStatus2["SENDING"] = "sending"; NewsletterStatus2["SENT"] = "sent"; NewsletterStatus2["FAILED"] = "failed"; NewsletterStatus2["PAUSED"] = "paused"; NewsletterStatus2["CANCELED"] = "canceled"; return NewsletterStatus2; })(NewsletterStatus || {}); var NewsletterProviderError = class extends Error { constructor(message, code, provider, details) { super(message); this.code = code; this.provider = provider; this.details = details; this.name = "NewsletterProviderError"; } }; var NewsletterErrorCode = /* @__PURE__ */ ((NewsletterErrorCode2) => { NewsletterErrorCode2["NOT_SUPPORTED"] = "NOT_SUPPORTED"; NewsletterErrorCode2["INVALID_STATUS"] = "INVALID_STATUS"; NewsletterErrorCode2["PROVIDER_ERROR"] = "PROVIDER_ERROR"; NewsletterErrorCode2["VALIDATION_ERROR"] = "VALIDATION_ERROR"; NewsletterErrorCode2["NOT_FOUND"] = "NOT_FOUND"; NewsletterErrorCode2["PERMISSION_DENIED"] = "PERMISSION_DENIED"; NewsletterErrorCode2["RATE_LIMITED"] = "RATE_LIMITED"; NewsletterErrorCode2["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR"; return NewsletterErrorCode2; })(NewsletterErrorCode || {}); // src/types/broadcast.ts var BroadcastStatus = /* @__PURE__ */ ((BroadcastStatus2) => { BroadcastStatus2["DRAFT"] = "draft"; BroadcastStatus2["SCHEDULED"] = "scheduled"; BroadcastStatus2["SENDING"] = "sending"; BroadcastStatus2["SENT"] = "sent"; BroadcastStatus2["FAILED"] = "failed"; BroadcastStatus2["PAUSED"] = "paused"; BroadcastStatus2["CANCELED"] = "canceled"; return BroadcastStatus2; })(BroadcastStatus || {}); var BroadcastProviderError = class extends Error { constructor(message, code, provider, details) { super(message); this.code = code; this.provider = provider; this.details = details; this.name = "BroadcastProviderError"; } }; var BroadcastErrorCode = /* @__PURE__ */ ((BroadcastErrorCode2) => { BroadcastErrorCode2["NOT_SUPPORTED"] = "NOT_SUPPORTED"; BroadcastErrorCode2["INVALID_STATUS"] = "INVALID_STATUS"; BroadcastErrorCode2["PROVIDER_ERROR"] = "PROVIDER_ERROR"; BroadcastErrorCode2["VALIDATION_ERROR"] = "VALIDATION_ERROR"; BroadcastErrorCode2["NOT_FOUND"] = "NOT_FOUND"; BroadcastErrorCode2["PERMISSION_DENIED"] = "PERMISSION_DENIED"; BroadcastErrorCode2["RATE_LIMITED"] = "RATE_LIMITED"; BroadcastErrorCode2["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR"; return BroadcastErrorCode2; })(BroadcastErrorCode || {}); // src/types/providers.ts var BaseBroadcastProvider = class { constructor(config) { this.config = config; } /** * Schedule a broadcast - default implementation throws not supported */ async schedule(_id, _scheduledAt) { const capabilities = this.getCapabilities(); if (!capabilities.supportsScheduling) { throw new BroadcastProviderError( "Scheduling is not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } throw new Error("Method not implemented"); } /** * Cancel scheduled broadcast - default implementation throws not supported */ async cancelSchedule(_id) { const capabilities = this.getCapabilities(); if (!capabilities.supportsScheduling) { throw new BroadcastProviderError( "Scheduling is not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } throw new Error("Method not implemented"); } /** * Get analytics - default implementation returns zeros */ async getAnalytics(_id) { const capabilities = this.getCapabilities(); if (!capabilities.supportsAnalytics) { throw new BroadcastProviderError( "Analytics are not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } return { sent: 0, delivered: 0, opened: 0, clicked: 0, bounced: 0, complained: 0, unsubscribed: 0 }; } /** * Helper method to validate required fields */ validateRequiredFields(data, fields) { const missing = fields.filter((field) => !data[field]); if (missing.length > 0) { throw new BroadcastProviderError( `Missing required fields: ${missing.join(", ")}`, "VALIDATION_ERROR" /* VALIDATION_ERROR */, this.name ); } } /** * Helper method to check if a status transition is allowed */ canEditInStatus(status) { const capabilities = this.getCapabilities(); return capabilities.editableStatuses.includes(status); } /** * Helper to build pagination response */ buildListResponse(items, total, options = {}) { const limit = options.limit || 20; const offset = options.offset || 0; return { items, total, limit, offset, hasMore: offset + items.length < total }; } }; var BaseNewsletterProvider = class { constructor(config) { this.config = config; } /** * Schedule a newsletter - default implementation throws not supported */ async schedule(_id, _scheduledAt) { const capabilities = this.getCapabilities(); if (!capabilities.supportsScheduling) { throw new NewsletterProviderError( "Scheduling is not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } throw new Error("Method not implemented"); } /** * Cancel scheduled newsletter - default implementation throws not supported */ async cancelSchedule(_id) { const capabilities = this.getCapabilities(); if (!capabilities.supportsScheduling) { throw new NewsletterProviderError( "Scheduling is not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } throw new Error("Method not implemented"); } /** * Get analytics - default implementation returns zeros */ async getAnalytics(_id) { const capabilities = this.getCapabilities(); if (!capabilities.supportsAnalytics) { throw new NewsletterProviderError( "Analytics are not supported by this provider", "NOT_SUPPORTED" /* NOT_SUPPORTED */, this.name ); } return { sent: 0, delivered: 0, opened: 0, clicked: 0, bounced: 0, complained: 0, unsubscribed: 0 }; } /** * Helper method to validate required fields */ validateRequiredFields(data, fields) { const missing = fields.filter((field) => !data[field]); if (missing.length > 0) { throw new NewsletterProviderError( `Missing required fields: ${missing.join(", ")}`, "VALIDATION_ERROR" /* VALIDATION_ERROR */, this.name ); } } /** * Helper method to check if a status transition is allowed */ canEditInStatus(status) { const capabilities = this.getCapabilities(); return capabilities.editableStatuses.includes(status); } /** * Helper to build pagination response */ buildListResponse(items, total, options = {}) { const limit = options.limit || 20; const offset = options.offset || 0; return { items, total, limit, offset, hasMore: offset + items.length < total }; } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { BaseBroadcastProvider, BaseNewsletterProvider, BroadcastErrorCode, BroadcastProviderError, BroadcastStatus, NewsletterErrorCode, NewsletterProviderError, NewsletterStatus }); //# sourceMappingURL=types.cjs.map