payload-plugin-newsletter 0.16.8 → 0.16.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/collections.cjs +104 -40
- package/dist/collections.cjs.map +1 -1
- package/dist/collections.js +104 -40
- package/dist/collections.js.map +1 -1
- package/dist/index.cjs +104 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +104 -40
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/collections.js
CHANGED
|
@@ -1536,7 +1536,7 @@ var createBroadcastsCollection = (pluginConfig) => {
|
|
|
1536
1536
|
return doc;
|
|
1537
1537
|
}
|
|
1538
1538
|
}
|
|
1539
|
-
if (operation === "update"
|
|
1539
|
+
if (operation === "update") {
|
|
1540
1540
|
req.payload.logger.info("Broadcast afterChange update hook triggered", {
|
|
1541
1541
|
operation,
|
|
1542
1542
|
hasProviderId: !!doc.providerId,
|
|
@@ -1551,58 +1551,122 @@ var createBroadcastsCollection = (pluginConfig) => {
|
|
|
1551
1551
|
}
|
|
1552
1552
|
const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
|
|
1553
1553
|
const provider = new BroadcastApiProvider2(providerConfig);
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
return doc;
|
|
1559
|
-
}
|
|
1560
|
-
const contentChanged = doc.subject !== previousDoc?.subject || doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader || JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content) || doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens || doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks || doc.settings?.replyTo !== previousDoc?.settings?.replyTo || JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds);
|
|
1561
|
-
if (contentChanged) {
|
|
1562
|
-
const updates = {};
|
|
1563
|
-
if (doc.subject !== previousDoc?.subject) {
|
|
1564
|
-
updates.name = doc.subject;
|
|
1565
|
-
updates.subject = doc.subject;
|
|
1566
|
-
}
|
|
1567
|
-
if (doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader) {
|
|
1568
|
-
updates.preheader = doc.contentSection?.preheader;
|
|
1569
|
-
}
|
|
1570
|
-
if (JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content)) {
|
|
1571
|
-
updates.content = await convertToEmailSafeHtml(doc.contentSection?.content);
|
|
1554
|
+
if (!doc.providerId) {
|
|
1555
|
+
if (!doc.subject || !doc.contentSection?.content) {
|
|
1556
|
+
req.payload.logger.info("Still missing required fields for provider sync");
|
|
1557
|
+
return doc;
|
|
1572
1558
|
}
|
|
1573
|
-
|
|
1574
|
-
|
|
1559
|
+
req.payload.logger.info("Creating broadcast in provider (deferred from initial create)...");
|
|
1560
|
+
const htmlContent = await convertToEmailSafeHtml(doc.contentSection?.content);
|
|
1561
|
+
if (!htmlContent || htmlContent.trim() === "") {
|
|
1562
|
+
req.payload.logger.info("Skipping provider sync - content is empty after conversion");
|
|
1563
|
+
return doc;
|
|
1575
1564
|
}
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1565
|
+
const createData = {
|
|
1566
|
+
name: doc.subject,
|
|
1567
|
+
subject: doc.subject,
|
|
1568
|
+
preheader: doc.contentSection?.preheader,
|
|
1569
|
+
content: htmlContent,
|
|
1570
|
+
trackOpens: doc.settings?.trackOpens,
|
|
1571
|
+
trackClicks: doc.settings?.trackClicks,
|
|
1572
|
+
replyTo: doc.settings?.replyTo || providerConfig.replyTo,
|
|
1573
|
+
audienceIds: doc.audienceIds?.map((a) => a.audienceId)
|
|
1574
|
+
};
|
|
1575
|
+
req.payload.logger.info("Creating broadcast with data:", {
|
|
1576
|
+
name: createData.name,
|
|
1577
|
+
subject: createData.subject,
|
|
1578
|
+
preheader: createData.preheader || "NONE",
|
|
1579
|
+
contentLength: htmlContent ? htmlContent.length : 0,
|
|
1580
|
+
contentPreview: htmlContent ? htmlContent.substring(0, 100) + "..." : "EMPTY",
|
|
1581
|
+
apiUrl: providerConfig.apiUrl,
|
|
1582
|
+
hasToken: !!providerConfig.token
|
|
1583
|
+
});
|
|
1584
|
+
const providerBroadcast = await provider.create(createData);
|
|
1585
|
+
await req.payload.update({
|
|
1586
|
+
collection: "broadcasts",
|
|
1587
|
+
id: doc.id,
|
|
1588
|
+
data: {
|
|
1589
|
+
providerId: providerBroadcast.id,
|
|
1590
|
+
providerData: providerBroadcast.providerData
|
|
1591
|
+
},
|
|
1592
|
+
req
|
|
1593
|
+
});
|
|
1594
|
+
req.payload.logger.info(`Broadcast ${doc.id} created in provider successfully (deferred)`);
|
|
1595
|
+
return {
|
|
1596
|
+
...doc,
|
|
1597
|
+
providerId: providerBroadcast.id,
|
|
1598
|
+
providerData: providerBroadcast.providerData
|
|
1599
|
+
};
|
|
1600
|
+
}
|
|
1601
|
+
if (doc.providerId) {
|
|
1602
|
+
const capabilities = provider.getCapabilities();
|
|
1603
|
+
const sendStatus = doc.sendStatus || "draft" /* DRAFT */;
|
|
1604
|
+
if (!capabilities.editableStatuses.includes(sendStatus)) {
|
|
1605
|
+
req.payload.logger.info(`Skipping sync for broadcast in status: ${sendStatus}`);
|
|
1606
|
+
return doc;
|
|
1581
1607
|
}
|
|
1582
|
-
|
|
1583
|
-
|
|
1608
|
+
const contentChanged = doc.subject !== previousDoc?.subject || doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader || JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content) || doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens || doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks || doc.settings?.replyTo !== previousDoc?.settings?.replyTo || JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds);
|
|
1609
|
+
if (contentChanged) {
|
|
1610
|
+
const updates = {};
|
|
1611
|
+
if (doc.subject !== previousDoc?.subject) {
|
|
1612
|
+
updates.name = doc.subject;
|
|
1613
|
+
updates.subject = doc.subject;
|
|
1614
|
+
}
|
|
1615
|
+
if (doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader) {
|
|
1616
|
+
updates.preheader = doc.contentSection?.preheader;
|
|
1617
|
+
}
|
|
1618
|
+
if (JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content)) {
|
|
1619
|
+
updates.content = await convertToEmailSafeHtml(doc.contentSection?.content);
|
|
1620
|
+
}
|
|
1621
|
+
if (doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens) {
|
|
1622
|
+
updates.trackOpens = doc.settings.trackOpens;
|
|
1623
|
+
}
|
|
1624
|
+
if (doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks) {
|
|
1625
|
+
updates.trackClicks = doc.settings.trackClicks;
|
|
1626
|
+
}
|
|
1627
|
+
if (doc.settings?.replyTo !== previousDoc?.settings?.replyTo) {
|
|
1628
|
+
updates.replyTo = doc.settings.replyTo || providerConfig.replyTo;
|
|
1629
|
+
}
|
|
1630
|
+
if (JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds)) {
|
|
1631
|
+
updates.audienceIds = doc.audienceIds?.map((a) => a.audienceId);
|
|
1632
|
+
}
|
|
1633
|
+
req.payload.logger.info("Syncing broadcast updates to provider", {
|
|
1634
|
+
providerId: doc.providerId,
|
|
1635
|
+
updates
|
|
1636
|
+
});
|
|
1637
|
+
await provider.update(doc.providerId, updates);
|
|
1638
|
+
req.payload.logger.info(`Broadcast ${doc.id} synced to provider successfully`);
|
|
1639
|
+
} else {
|
|
1640
|
+
req.payload.logger.info("No content changes to sync to provider");
|
|
1584
1641
|
}
|
|
1585
|
-
req.payload.logger.info("Syncing broadcast updates to provider", {
|
|
1586
|
-
providerId: doc.providerId,
|
|
1587
|
-
updates
|
|
1588
|
-
});
|
|
1589
|
-
await provider.update(doc.providerId, updates);
|
|
1590
|
-
req.payload.logger.info(`Broadcast ${doc.id} synced to provider successfully`);
|
|
1591
|
-
} else {
|
|
1592
|
-
req.payload.logger.info("No content changes to sync to provider");
|
|
1593
1642
|
}
|
|
1594
1643
|
} catch (error) {
|
|
1644
|
+
req.payload.logger.error("Raw error from broadcast update operation:");
|
|
1645
|
+
req.payload.logger.error(error);
|
|
1595
1646
|
if (error instanceof Error) {
|
|
1596
|
-
req.payload.logger.error("
|
|
1647
|
+
req.payload.logger.error("Error is instance of Error:", {
|
|
1597
1648
|
message: error.message,
|
|
1598
1649
|
stack: error.stack,
|
|
1599
1650
|
name: error.name,
|
|
1600
|
-
|
|
1601
|
-
...error.
|
|
1651
|
+
...error.details,
|
|
1652
|
+
...error.response,
|
|
1653
|
+
...error.data,
|
|
1654
|
+
...error.status,
|
|
1655
|
+
...error.statusText
|
|
1602
1656
|
});
|
|
1657
|
+
} else if (typeof error === "string") {
|
|
1658
|
+
req.payload.logger.error("Error is a string:", error);
|
|
1659
|
+
} else if (error && typeof error === "object") {
|
|
1660
|
+
req.payload.logger.error("Error is an object:", JSON.stringify(error, null, 2));
|
|
1603
1661
|
} else {
|
|
1604
|
-
req.payload.logger.error("
|
|
1662
|
+
req.payload.logger.error("Unknown error type:", typeof error);
|
|
1605
1663
|
}
|
|
1664
|
+
req.payload.logger.error("Failed broadcast document (update operation):", {
|
|
1665
|
+
id: doc.id,
|
|
1666
|
+
subject: doc.subject,
|
|
1667
|
+
hasContent: !!doc.contentSection?.content,
|
|
1668
|
+
contentType: doc.contentSection?.content ? typeof doc.contentSection.content : "none"
|
|
1669
|
+
});
|
|
1606
1670
|
}
|
|
1607
1671
|
}
|
|
1608
1672
|
return doc;
|