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/dist/index.js CHANGED
@@ -4486,7 +4486,7 @@ var createBroadcastsCollection = (pluginConfig) => {
4486
4486
  return doc;
4487
4487
  }
4488
4488
  }
4489
- if (operation === "update" && doc.providerId) {
4489
+ if (operation === "update") {
4490
4490
  req.payload.logger.info("Broadcast afterChange update hook triggered", {
4491
4491
  operation,
4492
4492
  hasProviderId: !!doc.providerId,
@@ -4501,58 +4501,122 @@ var createBroadcastsCollection = (pluginConfig) => {
4501
4501
  }
4502
4502
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
4503
4503
  const provider = new BroadcastApiProvider2(providerConfig);
4504
- const capabilities = provider.getCapabilities();
4505
- const sendStatus = doc.sendStatus || "draft" /* DRAFT */;
4506
- if (!capabilities.editableStatuses.includes(sendStatus)) {
4507
- req.payload.logger.info(`Skipping sync for broadcast in status: ${sendStatus}`);
4508
- return doc;
4509
- }
4510
- 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);
4511
- if (contentChanged) {
4512
- const updates = {};
4513
- if (doc.subject !== previousDoc?.subject) {
4514
- updates.name = doc.subject;
4515
- updates.subject = doc.subject;
4516
- }
4517
- if (doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader) {
4518
- updates.preheader = doc.contentSection?.preheader;
4504
+ if (!doc.providerId) {
4505
+ if (!doc.subject || !doc.contentSection?.content) {
4506
+ req.payload.logger.info("Still missing required fields for provider sync");
4507
+ return doc;
4519
4508
  }
4520
- if (JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content)) {
4521
- updates.content = await convertToEmailSafeHtml(doc.contentSection?.content);
4509
+ req.payload.logger.info("Creating broadcast in provider (deferred from initial create)...");
4510
+ const htmlContent = await convertToEmailSafeHtml(doc.contentSection?.content);
4511
+ if (!htmlContent || htmlContent.trim() === "") {
4512
+ req.payload.logger.info("Skipping provider sync - content is empty after conversion");
4513
+ return doc;
4522
4514
  }
4523
- if (doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens) {
4524
- updates.trackOpens = doc.settings.trackOpens;
4525
- }
4526
- if (doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks) {
4527
- updates.trackClicks = doc.settings.trackClicks;
4528
- }
4529
- if (doc.settings?.replyTo !== previousDoc?.settings?.replyTo) {
4530
- updates.replyTo = doc.settings.replyTo || providerConfig.replyTo;
4515
+ const createData = {
4516
+ name: doc.subject,
4517
+ subject: doc.subject,
4518
+ preheader: doc.contentSection?.preheader,
4519
+ content: htmlContent,
4520
+ trackOpens: doc.settings?.trackOpens,
4521
+ trackClicks: doc.settings?.trackClicks,
4522
+ replyTo: doc.settings?.replyTo || providerConfig.replyTo,
4523
+ audienceIds: doc.audienceIds?.map((a) => a.audienceId)
4524
+ };
4525
+ req.payload.logger.info("Creating broadcast with data:", {
4526
+ name: createData.name,
4527
+ subject: createData.subject,
4528
+ preheader: createData.preheader || "NONE",
4529
+ contentLength: htmlContent ? htmlContent.length : 0,
4530
+ contentPreview: htmlContent ? htmlContent.substring(0, 100) + "..." : "EMPTY",
4531
+ apiUrl: providerConfig.apiUrl,
4532
+ hasToken: !!providerConfig.token
4533
+ });
4534
+ const providerBroadcast = await provider.create(createData);
4535
+ await req.payload.update({
4536
+ collection: "broadcasts",
4537
+ id: doc.id,
4538
+ data: {
4539
+ providerId: providerBroadcast.id,
4540
+ providerData: providerBroadcast.providerData
4541
+ },
4542
+ req
4543
+ });
4544
+ req.payload.logger.info(`Broadcast ${doc.id} created in provider successfully (deferred)`);
4545
+ return {
4546
+ ...doc,
4547
+ providerId: providerBroadcast.id,
4548
+ providerData: providerBroadcast.providerData
4549
+ };
4550
+ }
4551
+ if (doc.providerId) {
4552
+ const capabilities = provider.getCapabilities();
4553
+ const sendStatus = doc.sendStatus || "draft" /* DRAFT */;
4554
+ if (!capabilities.editableStatuses.includes(sendStatus)) {
4555
+ req.payload.logger.info(`Skipping sync for broadcast in status: ${sendStatus}`);
4556
+ return doc;
4531
4557
  }
4532
- if (JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds)) {
4533
- updates.audienceIds = doc.audienceIds?.map((a) => a.audienceId);
4558
+ 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);
4559
+ if (contentChanged) {
4560
+ const updates = {};
4561
+ if (doc.subject !== previousDoc?.subject) {
4562
+ updates.name = doc.subject;
4563
+ updates.subject = doc.subject;
4564
+ }
4565
+ if (doc.contentSection?.preheader !== previousDoc?.contentSection?.preheader) {
4566
+ updates.preheader = doc.contentSection?.preheader;
4567
+ }
4568
+ if (JSON.stringify(doc.contentSection?.content) !== JSON.stringify(previousDoc?.contentSection?.content)) {
4569
+ updates.content = await convertToEmailSafeHtml(doc.contentSection?.content);
4570
+ }
4571
+ if (doc.settings?.trackOpens !== previousDoc?.settings?.trackOpens) {
4572
+ updates.trackOpens = doc.settings.trackOpens;
4573
+ }
4574
+ if (doc.settings?.trackClicks !== previousDoc?.settings?.trackClicks) {
4575
+ updates.trackClicks = doc.settings.trackClicks;
4576
+ }
4577
+ if (doc.settings?.replyTo !== previousDoc?.settings?.replyTo) {
4578
+ updates.replyTo = doc.settings.replyTo || providerConfig.replyTo;
4579
+ }
4580
+ if (JSON.stringify(doc.audienceIds) !== JSON.stringify(previousDoc?.audienceIds)) {
4581
+ updates.audienceIds = doc.audienceIds?.map((a) => a.audienceId);
4582
+ }
4583
+ req.payload.logger.info("Syncing broadcast updates to provider", {
4584
+ providerId: doc.providerId,
4585
+ updates
4586
+ });
4587
+ await provider.update(doc.providerId, updates);
4588
+ req.payload.logger.info(`Broadcast ${doc.id} synced to provider successfully`);
4589
+ } else {
4590
+ req.payload.logger.info("No content changes to sync to provider");
4534
4591
  }
4535
- req.payload.logger.info("Syncing broadcast updates to provider", {
4536
- providerId: doc.providerId,
4537
- updates
4538
- });
4539
- await provider.update(doc.providerId, updates);
4540
- req.payload.logger.info(`Broadcast ${doc.id} synced to provider successfully`);
4541
- } else {
4542
- req.payload.logger.info("No content changes to sync to provider");
4543
4592
  }
4544
4593
  } catch (error) {
4594
+ req.payload.logger.error("Raw error from broadcast update operation:");
4595
+ req.payload.logger.error(error);
4545
4596
  if (error instanceof Error) {
4546
- req.payload.logger.error("Failed to sync broadcast update to provider:", {
4597
+ req.payload.logger.error("Error is instance of Error:", {
4547
4598
  message: error.message,
4548
4599
  stack: error.stack,
4549
4600
  name: error.name,
4550
- // If it's a BroadcastProviderError, it might have additional details
4551
- ...error.details
4601
+ ...error.details,
4602
+ ...error.response,
4603
+ ...error.data,
4604
+ ...error.status,
4605
+ ...error.statusText
4552
4606
  });
4607
+ } else if (typeof error === "string") {
4608
+ req.payload.logger.error("Error is a string:", error);
4609
+ } else if (error && typeof error === "object") {
4610
+ req.payload.logger.error("Error is an object:", JSON.stringify(error, null, 2));
4553
4611
  } else {
4554
- req.payload.logger.error("Failed to sync broadcast update to provider:", error);
4612
+ req.payload.logger.error("Unknown error type:", typeof error);
4555
4613
  }
4614
+ req.payload.logger.error("Failed broadcast document (update operation):", {
4615
+ id: doc.id,
4616
+ subject: doc.subject,
4617
+ hasContent: !!doc.contentSection?.content,
4618
+ contentType: doc.contentSection?.content ? typeof doc.contentSection.content : "none"
4619
+ });
4556
4620
  }
4557
4621
  }
4558
4622
  return doc;