payload-plugin-newsletter 0.25.8 → 0.25.9

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.
@@ -2293,92 +2293,18 @@ var createBroadcastsCollection = (pluginConfig) => {
2293
2293
  async ({ doc, operation, req, previousDoc }) => {
2294
2294
  if (!hasProviders) return doc;
2295
2295
  if (operation === "create") {
2296
- try {
2297
- req.payload.logger.info("Broadcast afterChange CREATE hook (sync) - doc info:", {
2298
- docId: doc.id,
2299
- docIdType: typeof doc.id,
2300
- hasDoc: !!doc,
2301
- operation,
2302
- status: doc._status,
2303
- hasExternalId: !!doc.externalId,
2304
- hasProviderId: !!doc.providerId
2305
- });
2306
- if (doc.externalId || doc.providerId) {
2307
- req.payload.logger.info("Broadcast already has provider IDs, skipping creation", {
2308
- externalId: doc.externalId,
2309
- providerId: doc.providerId
2310
- });
2311
- return doc;
2312
- }
2313
- const providerConfig = await getBroadcastConfig(req, pluginConfig);
2314
- if (!providerConfig || !providerConfig.token) {
2315
- req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
2316
- return doc;
2317
- }
2318
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
2319
- const provider = new BroadcastApiProvider2(providerConfig);
2320
- const subject = doc.subject || `Draft Broadcast ${(/* @__PURE__ */ new Date()).toISOString()}`;
2321
- const htmlContent = doc.contentSection?.content ? await convertToEmailSafeHtml(
2322
- await populateMediaFields(doc.contentSection.content, req.payload, pluginConfig),
2323
- {
2324
- wrapInTemplate: pluginConfig.customizations?.broadcasts?.emailPreview?.wrapInTemplate ?? true,
2325
- customWrapper: pluginConfig.customizations?.broadcasts?.emailPreview?.customWrapper,
2326
- preheader: doc.contentSection?.preheader,
2327
- subject,
2328
- documentData: doc,
2329
- customBlockConverter: pluginConfig.customizations?.broadcasts?.customBlockConverter
2330
- }
2331
- ) : "<p>Draft content - to be updated</p>";
2332
- const createData = {
2333
- name: subject,
2334
- // Use subject as name
2335
- subject,
2336
- preheader: doc.contentSection?.preheader || "",
2337
- content: htmlContent,
2338
- trackOpens: doc.settings?.trackOpens ?? true,
2339
- trackClicks: doc.settings?.trackClicks ?? true,
2340
- replyTo: doc.settings?.replyTo || providerConfig.replyTo,
2341
- audienceIds: doc.audienceIds?.map((a) => a.audienceId) || []
2342
- };
2343
- req.payload.logger.info("Creating broadcast in provider with minimal data to establish association", {
2344
- subject: createData.subject,
2345
- hasActualContent: !!doc.contentSection?.content
2346
- });
2347
- const providerBroadcast = await provider.create(createData);
2348
- req.payload.logger.info("Provider broadcast created:", {
2349
- providerBroadcastId: providerBroadcast.id,
2350
- providerBroadcastIdType: typeof providerBroadcast.id,
2351
- docId: doc.id,
2352
- docIdType: typeof doc.id
2353
- });
2354
- req.payload.logger.info(`Broadcast ${doc.id} created in provider with ID ${providerBroadcast.id}`);
2355
- return {
2356
- ...doc,
2357
- providerId: providerBroadcast.id,
2358
- externalId: providerBroadcast.id,
2359
- // Include externalId in return value
2360
- providerData: providerBroadcast.providerData
2361
- };
2362
- } catch (error) {
2363
- req.payload.logger.error("Failed to create broadcast in provider during initial creation:");
2364
- if (error instanceof Error) {
2365
- req.payload.logger.error("Error details:", {
2366
- message: error.message,
2367
- stack: error.stack,
2368
- name: error.name
2369
- });
2370
- } else {
2371
- req.payload.logger.error("Raw error:", error);
2372
- }
2373
- return doc;
2374
- }
2296
+ req.payload.logger.info("Broadcast created in Payload, provider sync will happen on first update with content");
2297
+ return doc;
2375
2298
  }
2376
2299
  if (operation === "update") {
2377
2300
  req.payload.logger.info("Broadcast afterChange update hook triggered", {
2378
2301
  operation,
2379
2302
  hasProviderId: !!doc.providerId,
2303
+ hasExternalId: !!doc.externalId,
2380
2304
  sendStatus: doc.sendStatus,
2381
- publishStatus: doc._status
2305
+ publishStatus: doc._status,
2306
+ hasSubject: !!doc.subject,
2307
+ hasContent: !!doc.contentSection?.content
2382
2308
  });
2383
2309
  try {
2384
2310
  const providerConfig = await getBroadcastConfig(req, pluginConfig);
@@ -2388,8 +2314,40 @@ var createBroadcastsCollection = (pluginConfig) => {
2388
2314
  }
2389
2315
  const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
2390
2316
  const provider = new BroadcastApiProvider2(providerConfig);
2317
+ if (!doc.providerId && !doc.externalId && doc.subject && doc.contentSection?.content) {
2318
+ req.payload.logger.info("Creating broadcast in provider on first update with content");
2319
+ const htmlContent = await convertToEmailSafeHtml(
2320
+ await populateMediaFields(doc.contentSection.content, req.payload, pluginConfig),
2321
+ {
2322
+ wrapInTemplate: pluginConfig.customizations?.broadcasts?.emailPreview?.wrapInTemplate ?? true,
2323
+ customWrapper: pluginConfig.customizations?.broadcasts?.emailPreview?.customWrapper,
2324
+ preheader: doc.contentSection?.preheader,
2325
+ subject: doc.subject,
2326
+ documentData: doc,
2327
+ customBlockConverter: pluginConfig.customizations?.broadcasts?.customBlockConverter
2328
+ }
2329
+ );
2330
+ const createData = {
2331
+ name: doc.subject,
2332
+ subject: doc.subject,
2333
+ preheader: doc.contentSection?.preheader || "",
2334
+ content: htmlContent,
2335
+ trackOpens: doc.settings?.trackOpens ?? true,
2336
+ trackClicks: doc.settings?.trackClicks ?? true,
2337
+ replyTo: doc.settings?.replyTo || providerConfig.replyTo,
2338
+ audienceIds: doc.audienceIds?.map((a) => a.audienceId) || []
2339
+ };
2340
+ const providerBroadcast = await provider.create(createData);
2341
+ req.payload.logger.info(`Broadcast ${doc.id} created in provider with ID ${providerBroadcast.id}`);
2342
+ return {
2343
+ ...doc,
2344
+ providerId: providerBroadcast.id,
2345
+ externalId: providerBroadcast.id,
2346
+ providerData: providerBroadcast.providerData
2347
+ };
2348
+ }
2391
2349
  if (!doc.providerId) {
2392
- req.payload.logger.warn(`Broadcast ${doc.id} has no providerId - provider sync skipped. This shouldn't happen with immediate creation.`);
2350
+ req.payload.logger.info(`Broadcast ${doc.id} has no providerId and insufficient content for creation - skipping sync`);
2393
2351
  return doc;
2394
2352
  }
2395
2353
  if (doc.providerId) {