payload-plugin-newsletter 0.16.1 → 0.16.3

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.
@@ -1149,6 +1149,29 @@ function wrapInEmailTemplate(content, preheader) {
1149
1149
  </html>`;
1150
1150
  }
1151
1151
 
1152
+ // src/utils/getBroadcastConfig.ts
1153
+ async function getBroadcastConfig(req, pluginConfig) {
1154
+ try {
1155
+ const settings = await req.payload.findGlobal({
1156
+ slug: pluginConfig.settingsSlug || "newsletter-settings",
1157
+ req
1158
+ });
1159
+ if (settings?.provider === "broadcast" && settings?.broadcastSettings) {
1160
+ return {
1161
+ apiUrl: settings.broadcastSettings.apiUrl || pluginConfig.providers?.broadcast?.apiUrl || "",
1162
+ token: settings.broadcastSettings.token || pluginConfig.providers?.broadcast?.token || "",
1163
+ fromAddress: settings.fromAddress || pluginConfig.providers?.broadcast?.fromAddress || "",
1164
+ fromName: settings.fromName || pluginConfig.providers?.broadcast?.fromName || "",
1165
+ replyTo: settings.replyTo || pluginConfig.providers?.broadcast?.replyTo
1166
+ };
1167
+ }
1168
+ return pluginConfig.providers?.broadcast || null;
1169
+ } catch (error) {
1170
+ req.payload.logger.error("Failed to get broadcast config from settings:", error);
1171
+ return pluginConfig.providers?.broadcast || null;
1172
+ }
1173
+ }
1174
+
1152
1175
  // src/collections/Broadcasts.ts
1153
1176
  var createBroadcastsCollection = (pluginConfig) => {
1154
1177
  const hasProviders = !!(pluginConfig.providers?.broadcast || pluginConfig.providers?.resend);
@@ -1389,9 +1412,9 @@ var createBroadcastsCollection = (pluginConfig) => {
1389
1412
  async ({ doc, operation, req }) => {
1390
1413
  if (!hasProviders || operation !== "create") return doc;
1391
1414
  try {
1392
- const providerConfig = pluginConfig.providers?.broadcast;
1393
- if (!providerConfig) {
1394
- req.payload.logger.error("Broadcast provider not configured");
1415
+ const providerConfig = await getBroadcastConfig(req, pluginConfig);
1416
+ if (!providerConfig || !providerConfig.token) {
1417
+ req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
1395
1418
  return doc;
1396
1419
  }
1397
1420
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
@@ -1423,7 +1446,17 @@ var createBroadcastsCollection = (pluginConfig) => {
1423
1446
  providerData: providerBroadcast.providerData
1424
1447
  };
1425
1448
  } catch (error) {
1426
- req.payload.logger.error("Failed to create broadcast in provider:", error);
1449
+ if (error instanceof Error) {
1450
+ req.payload.logger.error("Failed to create broadcast in provider:", {
1451
+ message: error.message,
1452
+ stack: error.stack,
1453
+ name: error.name,
1454
+ // If it's a BroadcastProviderError, it might have additional details
1455
+ ...error.details
1456
+ });
1457
+ } else {
1458
+ req.payload.logger.error("Failed to create broadcast in provider:", error);
1459
+ }
1427
1460
  return doc;
1428
1461
  }
1429
1462
  },
@@ -1437,13 +1470,13 @@ var createBroadcastsCollection = (pluginConfig) => {
1437
1470
  return doc;
1438
1471
  }
1439
1472
  try {
1440
- const broadcastConfig = pluginConfig.providers?.broadcast;
1473
+ const broadcastConfig = await getBroadcastConfig(req, pluginConfig);
1441
1474
  const resendConfig = pluginConfig.providers?.resend;
1442
1475
  if (!broadcastConfig && !resendConfig) {
1443
- req.payload.logger.error("No provider configured for sending");
1476
+ req.payload.logger.error("No provider configured for sending in Newsletter Settings or environment variables");
1444
1477
  return doc;
1445
1478
  }
1446
- if (broadcastConfig) {
1479
+ if (broadcastConfig && broadcastConfig.token) {
1447
1480
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
1448
1481
  const provider = new BroadcastApiProvider2(broadcastConfig);
1449
1482
  await provider.send(doc.providerId);
@@ -1459,7 +1492,17 @@ var createBroadcastsCollection = (pluginConfig) => {
1459
1492
  });
1460
1493
  req.payload.logger.info(`Broadcast ${doc.id} sent successfully`);
1461
1494
  } catch (error) {
1462
- req.payload.logger.error(`Failed to send broadcast ${doc.id}:`, error);
1495
+ if (error instanceof Error) {
1496
+ req.payload.logger.error(`Failed to send broadcast ${doc.id}:`, {
1497
+ message: error.message,
1498
+ stack: error.stack,
1499
+ name: error.name,
1500
+ // If it's a BroadcastProviderError, it might have additional details
1501
+ ...error.details
1502
+ });
1503
+ } else {
1504
+ req.payload.logger.error(`Failed to send broadcast ${doc.id}:`, error);
1505
+ }
1463
1506
  await req.payload.update({
1464
1507
  collection: "broadcasts",
1465
1508
  id: doc.id,
@@ -1478,9 +1521,9 @@ var createBroadcastsCollection = (pluginConfig) => {
1478
1521
  async ({ data, originalDoc, operation, req }) => {
1479
1522
  if (!hasProviders || !originalDoc?.providerId || operation !== "update") return data;
1480
1523
  try {
1481
- const providerConfig = pluginConfig.providers?.broadcast;
1482
- if (!providerConfig) {
1483
- req.payload.logger.error("Broadcast provider not configured");
1524
+ const providerConfig = await getBroadcastConfig(req, pluginConfig);
1525
+ if (!providerConfig || !providerConfig.token) {
1526
+ req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
1484
1527
  return data;
1485
1528
  }
1486
1529
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
@@ -1514,7 +1557,17 @@ var createBroadcastsCollection = (pluginConfig) => {
1514
1557
  await provider.update(originalDoc.providerId, updates);
1515
1558
  }
1516
1559
  } catch (error) {
1517
- req.payload.logger.error("Failed to update broadcast in provider:", error);
1560
+ if (error instanceof Error) {
1561
+ req.payload.logger.error("Failed to update broadcast in provider:", {
1562
+ message: error.message,
1563
+ stack: error.stack,
1564
+ name: error.name,
1565
+ // If it's a BroadcastProviderError, it might have additional details
1566
+ ...error.details
1567
+ });
1568
+ } else {
1569
+ req.payload.logger.error("Failed to update broadcast in provider:", error);
1570
+ }
1518
1571
  }
1519
1572
  return data;
1520
1573
  }
@@ -1524,9 +1577,9 @@ var createBroadcastsCollection = (pluginConfig) => {
1524
1577
  async ({ doc, req }) => {
1525
1578
  if (!hasProviders || !doc?.providerId) return doc;
1526
1579
  try {
1527
- const providerConfig = pluginConfig.providers?.broadcast;
1528
- if (!providerConfig) {
1529
- req.payload.logger.error("Broadcast provider not configured");
1580
+ const providerConfig = await getBroadcastConfig(req, pluginConfig);
1581
+ if (!providerConfig || !providerConfig.token) {
1582
+ req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
1530
1583
  return doc;
1531
1584
  }
1532
1585
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
@@ -1536,7 +1589,17 @@ var createBroadcastsCollection = (pluginConfig) => {
1536
1589
  await provider.delete(doc.providerId);
1537
1590
  }
1538
1591
  } catch (error) {
1539
- req.payload.logger.error("Failed to delete broadcast from provider:", error);
1592
+ if (error instanceof Error) {
1593
+ req.payload.logger.error("Failed to delete broadcast from provider:", {
1594
+ message: error.message,
1595
+ stack: error.stack,
1596
+ name: error.name,
1597
+ // If it's a BroadcastProviderError, it might have additional details
1598
+ ...error.details
1599
+ });
1600
+ } else {
1601
+ req.payload.logger.error("Failed to delete broadcast from provider:", error);
1602
+ }
1540
1603
  }
1541
1604
  return doc;
1542
1605
  }