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.
@@ -1536,7 +1536,7 @@ var createBroadcastsCollection = (pluginConfig) => {
1536
1536
  return doc;
1537
1537
  }
1538
1538
  }
1539
- if (operation === "update" && doc.providerId) {
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
- const capabilities = provider.getCapabilities();
1555
- const sendStatus = doc.sendStatus || "draft" /* DRAFT */;
1556
- if (!capabilities.editableStatuses.includes(sendStatus)) {
1557
- req.payload.logger.info(`Skipping sync for broadcast in status: ${sendStatus}`);
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
- if (doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens) {
1574
- updates.trackOpens = doc.settings.trackOpens;
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
- if (doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks) {
1577
- updates.trackClicks = doc.settings.trackClicks;
1578
- }
1579
- if (doc.settings?.replyTo !== previousDoc?.settings?.replyTo) {
1580
- updates.replyTo = doc.settings.replyTo || providerConfig.replyTo;
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
- if (JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds)) {
1583
- updates.audienceIds = doc.audienceIds?.map((a) => a.audienceId);
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("Failed to sync broadcast update to provider:", {
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
- // If it's a BroadcastProviderError, it might have additional details
1601
- ...error.details
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("Failed to sync broadcast update to provider:", 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;