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
JavaScript
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
;