payload-plugin-newsletter 0.20.0 → 0.20.2

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.
@@ -1,538 +1,9 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __esm = (fn, res) => function __init() {
4
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
5
- };
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
-
11
- // src/types/newsletter.ts
12
- var NewsletterProviderError;
13
- var init_newsletter = __esm({
14
- "src/types/newsletter.ts"() {
15
- "use strict";
16
- NewsletterProviderError = class extends Error {
17
- constructor(message, code, provider, details) {
18
- super(message);
19
- this.code = code;
20
- this.provider = provider;
21
- this.details = details;
22
- this.name = "NewsletterProviderError";
23
- }
24
- };
25
- }
26
- });
27
-
28
- // src/types/broadcast.ts
29
- var BroadcastProviderError;
30
- var init_broadcast = __esm({
31
- "src/types/broadcast.ts"() {
32
- "use strict";
33
- init_newsletter();
34
- BroadcastProviderError = class extends Error {
35
- constructor(message, code, provider, details) {
36
- super(message);
37
- this.code = code;
38
- this.provider = provider;
39
- this.details = details;
40
- this.name = "BroadcastProviderError";
41
- }
42
- };
43
- }
44
- });
45
-
46
- // src/types/providers.ts
47
- var BaseBroadcastProvider;
48
- var init_providers = __esm({
49
- "src/types/providers.ts"() {
50
- "use strict";
51
- init_broadcast();
52
- init_newsletter();
53
- BaseBroadcastProvider = class {
54
- constructor(config) {
55
- this.config = config;
56
- }
57
- /**
58
- * Schedule a broadcast - default implementation throws not supported
59
- */
60
- async schedule(_id, _scheduledAt) {
61
- const capabilities = this.getCapabilities();
62
- if (!capabilities.supportsScheduling) {
63
- throw new BroadcastProviderError(
64
- "Scheduling is not supported by this provider",
65
- "NOT_SUPPORTED" /* NOT_SUPPORTED */,
66
- this.name
67
- );
68
- }
69
- throw new Error("Method not implemented");
70
- }
71
- /**
72
- * Cancel scheduled broadcast - default implementation throws not supported
73
- */
74
- async cancelSchedule(_id) {
75
- const capabilities = this.getCapabilities();
76
- if (!capabilities.supportsScheduling) {
77
- throw new BroadcastProviderError(
78
- "Scheduling is not supported by this provider",
79
- "NOT_SUPPORTED" /* NOT_SUPPORTED */,
80
- this.name
81
- );
82
- }
83
- throw new Error("Method not implemented");
84
- }
85
- /**
86
- * Get analytics - default implementation returns zeros
87
- */
88
- async getAnalytics(_id) {
89
- const capabilities = this.getCapabilities();
90
- if (!capabilities.supportsAnalytics) {
91
- throw new BroadcastProviderError(
92
- "Analytics are not supported by this provider",
93
- "NOT_SUPPORTED" /* NOT_SUPPORTED */,
94
- this.name
95
- );
96
- }
97
- return {
98
- sent: 0,
99
- delivered: 0,
100
- opened: 0,
101
- clicked: 0,
102
- bounced: 0,
103
- complained: 0,
104
- unsubscribed: 0
105
- };
106
- }
107
- /**
108
- * Helper method to validate required fields
109
- */
110
- validateRequiredFields(data, fields) {
111
- const missing = fields.filter((field) => !data[field]);
112
- if (missing.length > 0) {
113
- throw new BroadcastProviderError(
114
- `Missing required fields: ${missing.join(", ")}`,
115
- "VALIDATION_ERROR" /* VALIDATION_ERROR */,
116
- this.name
117
- );
118
- }
119
- }
120
- /**
121
- * Helper method to check if a status transition is allowed
122
- */
123
- canEditInStatus(status) {
124
- const capabilities = this.getCapabilities();
125
- return capabilities.editableStatuses.includes(status);
126
- }
127
- /**
128
- * Helper to build pagination response
129
- */
130
- buildListResponse(items, total, options = {}) {
131
- const limit = options.limit || 20;
132
- const offset = options.offset || 0;
133
- return {
134
- items,
135
- total,
136
- limit,
137
- offset,
138
- hasMore: offset + items.length < total
139
- };
140
- }
141
- };
142
- }
143
- });
144
-
145
- // src/types/index.ts
146
- var init_types = __esm({
147
- "src/types/index.ts"() {
148
- "use strict";
149
- init_broadcast();
150
- init_providers();
151
- init_newsletter();
152
- }
153
- });
154
-
155
- // src/providers/broadcast/broadcast.ts
156
- var broadcast_exports = {};
157
- __export(broadcast_exports, {
158
- BroadcastApiProvider: () => BroadcastApiProvider
159
- });
160
- var BroadcastApiProvider;
161
- var init_broadcast2 = __esm({
162
- "src/providers/broadcast/broadcast.ts"() {
163
- "use strict";
164
- init_types();
165
- BroadcastApiProvider = class extends BaseBroadcastProvider {
166
- constructor(config) {
167
- super(config);
168
- this.name = "broadcast";
169
- this.apiUrl = config.apiUrl.replace(/\/$/, "");
170
- this.token = config.token;
171
- if (!this.token) {
172
- throw new BroadcastProviderError(
173
- "Broadcast API token is required",
174
- "CONFIGURATION_ERROR" /* CONFIGURATION_ERROR */,
175
- this.name
176
- );
177
- }
178
- }
179
- // Broadcast Management Methods
180
- async list(options) {
181
- try {
182
- const params = new URLSearchParams();
183
- if (options?.limit) params.append("limit", options.limit.toString());
184
- if (options?.offset) params.append("offset", options.offset.toString());
185
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts?${params}`, {
186
- method: "GET",
187
- headers: {
188
- "Authorization": `Bearer ${this.token}`,
189
- "Content-Type": "application/json"
190
- }
191
- });
192
- if (!response.ok) {
193
- const error = await response.text();
194
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
195
- }
196
- const data = await response.json();
197
- const broadcasts = data.data.map((broadcast) => this.transformBroadcastFromApi(broadcast));
198
- return this.buildListResponse(broadcasts, data.total, options);
199
- } catch (error) {
200
- throw new BroadcastProviderError(
201
- `Failed to list broadcasts: ${error instanceof Error ? error.message : "Unknown error"}`,
202
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
203
- this.name,
204
- error
205
- );
206
- }
207
- }
208
- async get(id) {
209
- try {
210
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}`, {
211
- method: "GET",
212
- headers: {
213
- "Authorization": `Bearer ${this.token}`,
214
- "Content-Type": "application/json"
215
- }
216
- });
217
- if (!response.ok) {
218
- if (response.status === 404) {
219
- throw new BroadcastProviderError(
220
- `Broadcast not found: ${id}`,
221
- "NOT_FOUND" /* NOT_FOUND */,
222
- this.name
223
- );
224
- }
225
- const error = await response.text();
226
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
227
- }
228
- const broadcast = await response.json();
229
- return this.transformBroadcastFromApi(broadcast);
230
- } catch (error) {
231
- if (error instanceof BroadcastProviderError) throw error;
232
- throw new BroadcastProviderError(
233
- `Failed to get broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
234
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
235
- this.name,
236
- error
237
- );
238
- }
239
- }
240
- async create(data) {
241
- try {
242
- this.validateRequiredFields(data, ["name", "subject", "content"]);
243
- const requestBody = {
244
- broadcast: {
245
- name: data.name,
246
- subject: data.subject,
247
- preheader: data.preheader,
248
- body: data.content,
249
- html_body: true,
250
- track_opens: data.trackOpens ?? true,
251
- track_clicks: data.trackClicks ?? true,
252
- reply_to: data.replyTo,
253
- segment_ids: data.audienceIds
254
- }
255
- };
256
- console.log("[BroadcastApiProvider] Creating broadcast:", {
257
- url: `${this.apiUrl}/api/v1/broadcasts`,
258
- method: "POST",
259
- hasToken: !!this.token,
260
- tokenLength: this.token?.length,
261
- body: JSON.stringify(requestBody, null, 2)
262
- });
263
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts`, {
264
- method: "POST",
265
- headers: {
266
- "Authorization": `Bearer ${this.token}`,
267
- "Content-Type": "application/json"
268
- },
269
- body: JSON.stringify(requestBody)
270
- });
271
- console.log("[BroadcastApiProvider] Response status:", response.status);
272
- console.log("[BroadcastApiProvider] Response headers:", Object.fromEntries(response.headers.entries()));
273
- if (!response.ok) {
274
- const errorText = await response.text();
275
- console.error("[BroadcastApiProvider] Error response body:", errorText);
276
- let errorDetails;
277
- try {
278
- errorDetails = JSON.parse(errorText);
279
- console.error("[BroadcastApiProvider] Parsed error:", errorDetails);
280
- } catch {
281
- }
282
- throw new Error(`Broadcast API error: ${response.status} - ${errorText}`);
283
- }
284
- const result = await response.json();
285
- return this.get(result.id.toString());
286
- } catch (error) {
287
- if (error instanceof BroadcastProviderError) throw error;
288
- throw new BroadcastProviderError(
289
- `Failed to create broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
290
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
291
- this.name,
292
- error
293
- );
294
- }
295
- }
296
- async update(id, data) {
297
- try {
298
- const existing = await this.get(id);
299
- if (!this.canEditInStatus(existing.sendStatus)) {
300
- throw new BroadcastProviderError(
301
- `Cannot update broadcast in status: ${existing.sendStatus}`,
302
- "INVALID_STATUS" /* INVALID_STATUS */,
303
- this.name
304
- );
305
- }
306
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}`, {
307
- method: "PATCH",
308
- headers: {
309
- "Authorization": `Bearer ${this.token}`,
310
- "Content-Type": "application/json"
311
- },
312
- body: JSON.stringify({
313
- broadcast: {
314
- name: data.name,
315
- subject: data.subject,
316
- preheader: data.preheader,
317
- body: data.content,
318
- track_opens: data.trackOpens,
319
- track_clicks: data.trackClicks,
320
- reply_to: data.replyTo,
321
- segment_ids: data.audienceIds
322
- }
323
- })
324
- });
325
- if (!response.ok) {
326
- const error = await response.text();
327
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
328
- }
329
- const broadcast = await response.json();
330
- return this.transformBroadcastFromApi(broadcast);
331
- } catch (error) {
332
- if (error instanceof BroadcastProviderError) throw error;
333
- throw new BroadcastProviderError(
334
- `Failed to update broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
335
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
336
- this.name,
337
- error
338
- );
339
- }
340
- }
341
- async delete(id) {
342
- try {
343
- const existing = await this.get(id);
344
- if (!this.canEditInStatus(existing.sendStatus)) {
345
- throw new BroadcastProviderError(
346
- `Cannot delete broadcast in status: ${existing.sendStatus}`,
347
- "INVALID_STATUS" /* INVALID_STATUS */,
348
- this.name
349
- );
350
- }
351
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}`, {
352
- method: "DELETE",
353
- headers: {
354
- "Authorization": `Bearer ${this.token}`,
355
- "Content-Type": "application/json"
356
- }
357
- });
358
- if (!response.ok) {
359
- const error = await response.text();
360
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
361
- }
362
- } catch (error) {
363
- if (error instanceof BroadcastProviderError) throw error;
364
- throw new BroadcastProviderError(
365
- `Failed to delete broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
366
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
367
- this.name,
368
- error
369
- );
370
- }
371
- }
372
- async send(id, options) {
373
- try {
374
- if (options?.testMode && options.testRecipients?.length) {
375
- throw new BroadcastProviderError(
376
- "Test send is not yet implemented for Broadcast provider",
377
- "NOT_SUPPORTED" /* NOT_SUPPORTED */,
378
- this.name
379
- );
380
- }
381
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}/send_broadcast`, {
382
- method: "POST",
383
- headers: {
384
- "Authorization": `Bearer ${this.token}`,
385
- "Content-Type": "application/json"
386
- },
387
- body: JSON.stringify({
388
- segment_ids: options?.audienceIds
389
- })
390
- });
391
- if (!response.ok) {
392
- const error = await response.text();
393
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
394
- }
395
- const result = await response.json();
396
- return this.get(result.id.toString());
397
- } catch (error) {
398
- if (error instanceof BroadcastProviderError) throw error;
399
- throw new BroadcastProviderError(
400
- `Failed to send broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
401
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
402
- this.name,
403
- error
404
- );
405
- }
406
- }
407
- async schedule(id, scheduledAt) {
408
- try {
409
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}`, {
410
- method: "PATCH",
411
- headers: {
412
- "Authorization": `Bearer ${this.token}`,
413
- "Content-Type": "application/json"
414
- },
415
- body: JSON.stringify({
416
- broadcast: {
417
- scheduled_send_at: scheduledAt.toISOString(),
418
- // TODO: Handle timezone properly
419
- scheduled_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
420
- }
421
- })
422
- });
423
- if (!response.ok) {
424
- const error = await response.text();
425
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
426
- }
427
- const broadcast = await response.json();
428
- return this.transformBroadcastFromApi(broadcast);
429
- } catch (error) {
430
- throw new BroadcastProviderError(
431
- `Failed to schedule broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
432
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
433
- this.name,
434
- error
435
- );
436
- }
437
- }
438
- async cancelSchedule(id) {
439
- try {
440
- const response = await fetch(`${this.apiUrl}/api/v1/broadcasts/${id}`, {
441
- method: "PATCH",
442
- headers: {
443
- "Authorization": `Bearer ${this.token}`,
444
- "Content-Type": "application/json"
445
- },
446
- body: JSON.stringify({
447
- broadcast: {
448
- scheduled_send_at: null,
449
- scheduled_timezone: null
450
- }
451
- })
452
- });
453
- if (!response.ok) {
454
- const error = await response.text();
455
- throw new Error(`Broadcast API error: ${response.status} - ${error}`);
456
- }
457
- const broadcast = await response.json();
458
- return this.transformBroadcastFromApi(broadcast);
459
- } catch (error) {
460
- throw new BroadcastProviderError(
461
- `Failed to cancel scheduled broadcast: ${error instanceof Error ? error.message : "Unknown error"}`,
462
- "PROVIDER_ERROR" /* PROVIDER_ERROR */,
463
- this.name,
464
- error
465
- );
466
- }
467
- }
468
- async getAnalytics(_id) {
469
- throw new BroadcastProviderError(
470
- "Analytics API not yet implemented for Broadcast provider",
471
- "NOT_SUPPORTED" /* NOT_SUPPORTED */,
472
- this.name
473
- );
474
- }
475
- getCapabilities() {
476
- return {
477
- supportsScheduling: true,
478
- supportsSegmentation: true,
479
- supportsAnalytics: false,
480
- // Not documented yet
481
- supportsABTesting: false,
482
- supportsTemplates: false,
483
- supportsPersonalization: true,
484
- supportsMultipleChannels: false,
485
- supportsChannelSegmentation: false,
486
- editableStatuses: ["draft" /* DRAFT */, "scheduled" /* SCHEDULED */],
487
- supportedContentTypes: ["html", "text"]
488
- };
489
- }
490
- async validateConfiguration() {
491
- try {
492
- await this.list({ limit: 1 });
493
- return true;
494
- } catch {
495
- return false;
496
- }
497
- }
498
- transformBroadcastFromApi(broadcast) {
499
- return {
500
- id: broadcast.id.toString(),
501
- name: broadcast.name,
502
- subject: broadcast.subject,
503
- preheader: broadcast.preheader,
504
- content: broadcast.body,
505
- sendStatus: this.mapBroadcastStatus(broadcast.status),
506
- trackOpens: broadcast.track_opens,
507
- trackClicks: broadcast.track_clicks,
508
- replyTo: broadcast.reply_to,
509
- recipientCount: broadcast.total_recipients,
510
- sentAt: broadcast.sent_at ? new Date(broadcast.sent_at) : void 0,
511
- scheduledAt: broadcast.scheduled_send_at ? new Date(broadcast.scheduled_send_at) : void 0,
512
- createdAt: new Date(broadcast.created_at),
513
- updatedAt: new Date(broadcast.updated_at),
514
- providerData: { broadcast },
515
- providerId: broadcast.id.toString(),
516
- providerType: "broadcast"
517
- };
518
- }
519
- mapBroadcastStatus(status) {
520
- const statusMap = {
521
- "draft": "draft" /* DRAFT */,
522
- "scheduled": "scheduled" /* SCHEDULED */,
523
- "queueing": "sending" /* SENDING */,
524
- "sending": "sending" /* SENDING */,
525
- "sent": "sent" /* SENT */,
526
- "failed": "failed" /* FAILED */,
527
- "partial_failure": "failed" /* FAILED */,
528
- "paused": "paused" /* PAUSED */,
529
- "aborted": "canceled" /* CANCELED */
530
- };
531
- return statusMap[status] || "draft" /* DRAFT */;
532
- }
533
- };
534
- }
535
- });
1
+ import {
2
+ BaseBroadcastProvider,
3
+ BroadcastApiProvider,
4
+ BroadcastProviderError,
5
+ NewsletterProviderError
6
+ } from "./chunk-XVMYJQRQ.js";
536
7
 
537
8
  // src/utils/access.ts
538
9
  var isAdmin = (user, config) => {
@@ -3155,9 +2626,6 @@ var createUnsubscribeSyncJob = (pluginConfig) => {
3155
2626
  };
3156
2627
  };
3157
2628
 
3158
- // src/collections/Broadcasts.ts
3159
- init_types();
3160
-
3161
2629
  // src/fields/emailContent.ts
3162
2630
  import {
3163
2631
  BoldFeature,
@@ -4013,9 +3481,6 @@ async function getBroadcastConfig(req, pluginConfig) {
4013
3481
  }
4014
3482
  }
4015
3483
 
4016
- // src/endpoints/broadcasts/send.ts
4017
- init_types();
4018
-
4019
3484
  // src/utils/auth.ts
4020
3485
  async function getAuthenticatedUser(req) {
4021
3486
  try {
@@ -4103,7 +3568,7 @@ var createSendBroadcastEndpoint = (config, collectionSlug) => {
4103
3568
  error: "Broadcast provider not configured in Newsletter Settings or environment variables"
4104
3569
  }, { status: 500 });
4105
3570
  }
4106
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
3571
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
4107
3572
  const provider = new BroadcastApiProvider2(providerConfig);
4108
3573
  const broadcast = await provider.send(broadcastDoc.providerId, data);
4109
3574
  await req.payload.update({
@@ -4139,7 +3604,6 @@ var createSendBroadcastEndpoint = (config, collectionSlug) => {
4139
3604
  };
4140
3605
 
4141
3606
  // src/endpoints/broadcasts/schedule.ts
4142
- init_types();
4143
3607
  var createScheduleBroadcastEndpoint = (config, collectionSlug) => {
4144
3608
  return {
4145
3609
  path: "/:id/schedule",
@@ -4207,7 +3671,7 @@ var createScheduleBroadcastEndpoint = (config, collectionSlug) => {
4207
3671
  error: "Broadcast provider not configured"
4208
3672
  }, { status: 500 });
4209
3673
  }
4210
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
3674
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
4211
3675
  const provider = new BroadcastApiProvider2(providerConfig);
4212
3676
  const broadcast = await provider.schedule(broadcastDoc.providerId, scheduledDate);
4213
3677
  await req.payload.update({
@@ -4723,7 +4187,7 @@ var createBroadcastsCollection = (pluginConfig) => {
4723
4187
  req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
4724
4188
  return doc;
4725
4189
  }
4726
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
4190
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
4727
4191
  const provider = new BroadcastApiProvider2(providerConfig);
4728
4192
  req.payload.logger.info("Populating media fields and converting content to HTML...");
4729
4193
  const populatedContent = await populateMediaFields(doc.contentSection?.content, req.payload, pluginConfig);
@@ -4818,7 +4282,7 @@ var createBroadcastsCollection = (pluginConfig) => {
4818
4282
  req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
4819
4283
  return doc;
4820
4284
  }
4821
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
4285
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
4822
4286
  const provider = new BroadcastApiProvider2(providerConfig);
4823
4287
  if (!doc.providerId) {
4824
4288
  if (!doc.subject || !doc.contentSection?.content) {
@@ -4963,7 +4427,7 @@ var createBroadcastsCollection = (pluginConfig) => {
4963
4427
  return doc;
4964
4428
  }
4965
4429
  if (broadcastConfig && broadcastConfig.token) {
4966
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
4430
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
4967
4431
  const provider = new BroadcastApiProvider2(broadcastConfig);
4968
4432
  await provider.send(doc.providerId);
4969
4433
  }
@@ -5014,7 +4478,7 @@ var createBroadcastsCollection = (pluginConfig) => {
5014
4478
  req.payload.logger.error("Broadcast provider not configured in Newsletter Settings or environment variables");
5015
4479
  return doc;
5016
4480
  }
5017
- const { BroadcastApiProvider: BroadcastApiProvider2 } = await Promise.resolve().then(() => (init_broadcast2(), broadcast_exports));
4481
+ const { BroadcastApiProvider: BroadcastApiProvider2 } = await import("./broadcast-VMCYSZRY.js");
5018
4482
  const provider = new BroadcastApiProvider2(providerConfig);
5019
4483
  const capabilities = provider.getCapabilities();
5020
4484
  if (capabilities.editableStatuses.includes(doc.sendStatus)) {
@@ -5040,11 +4504,7 @@ var createBroadcastsCollection = (pluginConfig) => {
5040
4504
  };
5041
4505
  };
5042
4506
 
5043
- // src/index.ts
5044
- init_broadcast2();
5045
-
5046
4507
  // src/providers/resend/broadcast.ts
5047
- init_types();
5048
4508
  import { Resend as Resend2 } from "resend";
5049
4509
  var ResendBroadcastProvider = class extends BaseBroadcastProvider {
5050
4510
  constructor(config) {
@@ -5257,100 +4717,16 @@ var ResendBroadcastProvider = class extends BaseBroadcastProvider {
5257
4717
  }
5258
4718
  };
5259
4719
 
5260
- // src/utilities/session.ts
5261
- import jwt2 from "jsonwebtoken";
5262
- var getTokenFromRequest = (req) => {
5263
- const cookies = req.cookies || req.headers?.cookie;
5264
- if (!cookies) return null;
5265
- if (typeof cookies === "string") {
5266
- const parsed = cookies.split(";").reduce((acc, cookie) => {
5267
- const [key, value] = cookie.trim().split("=");
5268
- acc[key] = value;
5269
- return acc;
5270
- }, {});
5271
- return parsed["newsletter-auth"] || null;
5272
- }
5273
- return cookies["newsletter-auth"] || null;
5274
- };
5275
- var verifyToken = (token, secret) => {
5276
- try {
5277
- const decoded = jwt2.verify(token, secret);
5278
- return decoded;
5279
- } catch {
5280
- return null;
5281
- }
5282
- };
5283
- var getServerSideAuth = async (context, secret) => {
5284
- const token = getTokenFromRequest(context.req);
5285
- if (!token) {
5286
- return { subscriber: null, isAuthenticated: false };
5287
- }
5288
- const payloadSecret = secret || process.env.PAYLOAD_SECRET;
5289
- if (!payloadSecret) {
5290
- console.error("No secret provided for token verification");
5291
- return { subscriber: null, isAuthenticated: false };
5292
- }
5293
- const decoded = verifyToken(token, payloadSecret);
5294
- if (!decoded) {
5295
- return { subscriber: null, isAuthenticated: false };
5296
- }
5297
- return {
5298
- subscriber: decoded,
5299
- isAuthenticated: true
5300
- };
4720
+ // src/contexts/ServerContext.ts
4721
+ var configStore = {
4722
+ config: null
5301
4723
  };
5302
- var requireAuth = (gssp) => {
5303
- return async (context) => {
5304
- const { isAuthenticated: isAuthenticated2, subscriber } = await getServerSideAuth(context);
5305
- if (!isAuthenticated2) {
5306
- return {
5307
- redirect: {
5308
- destination: "/auth/signin",
5309
- permanent: false
5310
- }
5311
- };
5312
- }
5313
- if (gssp) {
5314
- const result = await gssp(context);
5315
- return {
5316
- ...result,
5317
- props: {
5318
- ...result.props,
5319
- subscriber
5320
- }
5321
- };
5322
- }
5323
- return {
5324
- props: {
5325
- subscriber
5326
- }
5327
- };
5328
- };
5329
- };
5330
- var isAuthenticated = (req, secret) => {
5331
- const token = getTokenFromRequest(req);
5332
- if (!token) return false;
5333
- const decoded = verifyToken(token, secret);
5334
- return !!decoded;
4724
+ var setPluginConfig = (config) => {
4725
+ configStore.config = config;
5335
4726
  };
5336
4727
 
5337
- // src/contexts/PluginConfigContext.tsx
5338
- import { createContext, useContext } from "react";
5339
- import { jsx as jsx5 } from "react/jsx-runtime";
5340
- var PluginConfigContext = createContext(null);
5341
- var PluginConfigProvider = ({ config, children }) => {
5342
- return /* @__PURE__ */ jsx5(PluginConfigContext.Provider, { value: config, children });
5343
- };
5344
- var usePluginConfig = () => {
5345
- const config = useContext(PluginConfigContext);
5346
- if (!config) {
5347
- throw new Error("usePluginConfig must be used within PluginConfigProvider");
5348
- }
5349
- return config;
5350
- };
5351
- var usePluginConfigOptional = () => {
5352
- return useContext(PluginConfigContext);
5353
- };
4728
+ // src/utilities/session.ts
4729
+ import jwt2 from "jsonwebtoken";
5354
4730
 
5355
4731
  // src/index.ts
5356
4732
  var newsletterPlugin = (pluginConfig) => (incomingConfig) => {
@@ -5366,6 +4742,7 @@ var newsletterPlugin = (pluginConfig) => (incomingConfig) => {
5366
4742
  },
5367
4743
  ...pluginConfig
5368
4744
  };
4745
+ setPluginConfig(config);
5369
4746
  if (!config.enabled) {
5370
4747
  return incomingConfig;
5371
4748
  }
@@ -5528,15 +4905,14 @@ var newsletterPlugin = (pluginConfig) => (incomingConfig) => {
5528
4905
  return modifiedConfig;
5529
4906
  };
5530
4907
  export {
5531
- PluginConfigProvider,
5532
- newsletterPlugin as default,
5533
- getServerSideAuth,
5534
- getTokenFromRequest,
5535
- isAuthenticated,
5536
- newsletterPlugin,
5537
- requireAuth,
5538
- usePluginConfig,
5539
- usePluginConfigOptional,
5540
- verifyToken
4908
+ BroadcastProvider,
4909
+ ResendProvider,
4910
+ createBroadcastsCollection,
4911
+ createNewsletterSettingsGlobal,
4912
+ createPreferencesEndpoint,
4913
+ createSubscribeEndpoint,
4914
+ createSubscribersCollection,
4915
+ createUnsubscribeEndpoint,
4916
+ createVerifyMagicLinkEndpoint,
4917
+ newsletterPlugin
5541
4918
  };
5542
- //# sourceMappingURL=index.js.map