@solytude/listmonk 1.0.0

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.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +542 -0
  3. package/dist/chunk-saezhne8.js +14 -0
  4. package/dist/chunk-saezhne8.js.map +9 -0
  5. package/dist/client.d.ts +430 -0
  6. package/dist/errors/api.d.ts +178 -0
  7. package/dist/errors/base.d.ts +47 -0
  8. package/dist/errors/configuration.d.ts +49 -0
  9. package/dist/errors/index.d.ts +13 -0
  10. package/dist/errors/network.d.ts +69 -0
  11. package/dist/errors/validation.d.ts +57 -0
  12. package/dist/http/auth.d.ts +39 -0
  13. package/dist/http/client.d.ts +149 -0
  14. package/dist/http/hooks.d.ts +90 -0
  15. package/dist/http/index.d.ts +10 -0
  16. package/dist/http/resource.d.ts +100 -0
  17. package/dist/http/sse.d.ts +36 -0
  18. package/dist/http/url.d.ts +51 -0
  19. package/dist/index.d.ts +64 -0
  20. package/dist/index.js +16039 -0
  21. package/dist/index.js.map +120 -0
  22. package/dist/resources/admin/admin.d.ts +92 -0
  23. package/dist/resources/admin/index.d.ts +10 -0
  24. package/dist/resources/admin/schemas.d.ts +23 -0
  25. package/dist/resources/admin/types.d.ts +29 -0
  26. package/dist/resources/bounces/bounces.d.ts +262 -0
  27. package/dist/resources/bounces/index.d.ts +10 -0
  28. package/dist/resources/bounces/schemas.d.ts +86 -0
  29. package/dist/resources/bounces/types.d.ts +37 -0
  30. package/dist/resources/campaigns/campaigns.d.ts +339 -0
  31. package/dist/resources/campaigns/index.d.ts +10 -0
  32. package/dist/resources/campaigns/schemas.d.ts +374 -0
  33. package/dist/resources/campaigns/types.d.ts +111 -0
  34. package/dist/resources/dashboard/dashboard.d.ts +73 -0
  35. package/dist/resources/dashboard/index.d.ts +10 -0
  36. package/dist/resources/dashboard/schemas.d.ts +55 -0
  37. package/dist/resources/dashboard/types.d.ts +22 -0
  38. package/dist/resources/import/import.d.ts +215 -0
  39. package/dist/resources/import/index.d.ts +10 -0
  40. package/dist/resources/import/schemas.d.ts +109 -0
  41. package/dist/resources/import/types.d.ts +72 -0
  42. package/dist/resources/lists/index.d.ts +10 -0
  43. package/dist/resources/lists/lists.d.ts +180 -0
  44. package/dist/resources/lists/schemas.d.ts +176 -0
  45. package/dist/resources/lists/types.d.ts +56 -0
  46. package/dist/resources/maintenance/index.d.ts +10 -0
  47. package/dist/resources/maintenance/maintenance.d.ts +92 -0
  48. package/dist/resources/maintenance/schemas.d.ts +36 -0
  49. package/dist/resources/maintenance/types.d.ts +31 -0
  50. package/dist/resources/media/index.d.ts +10 -0
  51. package/dist/resources/media/media.d.ts +198 -0
  52. package/dist/resources/media/schemas.d.ts +48 -0
  53. package/dist/resources/media/types.d.ts +48 -0
  54. package/dist/resources/public/index.d.ts +10 -0
  55. package/dist/resources/public/public.d.ts +111 -0
  56. package/dist/resources/public/schemas.d.ts +52 -0
  57. package/dist/resources/public/types.d.ts +30 -0
  58. package/dist/resources/settings/index.d.ts +10 -0
  59. package/dist/resources/settings/schemas.d.ts +374 -0
  60. package/dist/resources/settings/settings.d.ts +106 -0
  61. package/dist/resources/settings/types.d.ts +78 -0
  62. package/dist/resources/subscribers/index.d.ts +10 -0
  63. package/dist/resources/subscribers/schemas.d.ts +360 -0
  64. package/dist/resources/subscribers/subscribers.d.ts +308 -0
  65. package/dist/resources/subscribers/types.d.ts +113 -0
  66. package/dist/resources/templates/index.d.ts +10 -0
  67. package/dist/resources/templates/schemas.d.ts +110 -0
  68. package/dist/resources/templates/templates.d.ts +225 -0
  69. package/dist/resources/templates/types.d.ts +45 -0
  70. package/dist/resources/tx/index.d.ts +10 -0
  71. package/dist/resources/tx/schemas.d.ts +67 -0
  72. package/dist/resources/tx/tx.d.ts +167 -0
  73. package/dist/resources/tx/types.d.ts +88 -0
  74. package/dist/schemas/common.d.ts +48 -0
  75. package/dist/schemas/index.d.ts +6 -0
  76. package/dist/testing/errors.d.ts +25 -0
  77. package/dist/testing/factories/bounce.d.ts +43 -0
  78. package/dist/testing/factories/campaign.d.ts +43 -0
  79. package/dist/testing/factories/common.d.ts +54 -0
  80. package/dist/testing/factories/index.d.ts +12 -0
  81. package/dist/testing/factories/list.d.ts +43 -0
  82. package/dist/testing/factories/media.d.ts +40 -0
  83. package/dist/testing/factories/subscriber.d.ts +43 -0
  84. package/dist/testing/factories/template.d.ts +40 -0
  85. package/dist/testing/index.d.ts +39 -0
  86. package/dist/testing/index.js +573 -0
  87. package/dist/testing/index.js.map +32 -0
  88. package/dist/testing/mock-client.d.ts +119 -0
  89. package/dist/testing/mock-function.d.ts +28 -0
  90. package/dist/testing/resources/admin.d.ts +20 -0
  91. package/dist/testing/resources/bounces.d.ts +22 -0
  92. package/dist/testing/resources/campaigns.d.ts +31 -0
  93. package/dist/testing/resources/dashboard.d.ts +17 -0
  94. package/dist/testing/resources/import.d.ts +19 -0
  95. package/dist/testing/resources/index.d.ts +18 -0
  96. package/dist/testing/resources/lists.d.ts +24 -0
  97. package/dist/testing/resources/maintenance.d.ts +18 -0
  98. package/dist/testing/resources/media.d.ts +21 -0
  99. package/dist/testing/resources/public.d.ts +18 -0
  100. package/dist/testing/resources/settings.d.ts +19 -0
  101. package/dist/testing/resources/subscribers.d.ts +33 -0
  102. package/dist/testing/resources/templates.d.ts +24 -0
  103. package/dist/testing/resources/tx.d.ts +16 -0
  104. package/dist/testing/types.d.ts +138 -0
  105. package/dist/types/config.d.ts +59 -0
  106. package/dist/types/index.d.ts +7 -0
  107. package/dist/types/pagination.d.ts +37 -0
  108. package/package.json +97 -0
@@ -0,0 +1,573 @@
1
+ import"../chunk-saezhne8.js";
2
+
3
+ // src/testing/errors.ts
4
+ class MockNotConfiguredError extends Error {
5
+ name = "MockNotConfiguredError";
6
+ methodName;
7
+ resourceName;
8
+ constructor(resourceName, methodName) {
9
+ const fullPath = `${resourceName}.${methodName}`;
10
+ super(`Mock method '${fullPath}' was called but not configured.
11
+ ` + `Configure with: mockClient.${fullPath}.mockResolvedValue(...)`);
12
+ this.resourceName = resourceName;
13
+ this.methodName = methodName;
14
+ }
15
+ }
16
+
17
+ // src/testing/mock-function.ts
18
+ function createMockFunction(resourceName, methodName) {
19
+ let implementation;
20
+ let isConfigured = false;
21
+ const state = {
22
+ calls: [],
23
+ results: [],
24
+ lastCall: undefined,
25
+ callCount: 0
26
+ };
27
+ const mockFn = (...args) => {
28
+ state.calls.push(args);
29
+ state.lastCall = args;
30
+ state.callCount++;
31
+ if (!isConfigured) {
32
+ const error = new MockNotConfiguredError(resourceName, methodName);
33
+ state.results.push({ type: "throw", value: error });
34
+ throw error;
35
+ }
36
+ try {
37
+ const result = implementation(...args);
38
+ if (result instanceof Promise) {
39
+ return result.then((value) => {
40
+ state.results.push({
41
+ type: "return",
42
+ value
43
+ });
44
+ return value;
45
+ }).catch((error) => {
46
+ state.results.push({ type: "throw", value: error });
47
+ throw error;
48
+ });
49
+ }
50
+ state.results.push({
51
+ type: "return",
52
+ value: result
53
+ });
54
+ return result;
55
+ } catch (error) {
56
+ state.results.push({
57
+ type: "throw",
58
+ value: error instanceof Error ? error : new Error(String(error))
59
+ });
60
+ throw error;
61
+ }
62
+ };
63
+ mockFn.mock = state;
64
+ mockFn.mockResolvedValue = function(value) {
65
+ isConfigured = true;
66
+ implementation = () => Promise.resolve(value);
67
+ return this;
68
+ };
69
+ mockFn.mockRejectedValue = function(error) {
70
+ isConfigured = true;
71
+ implementation = () => Promise.reject(error);
72
+ return this;
73
+ };
74
+ mockFn.mockImplementation = function(fn) {
75
+ isConfigured = true;
76
+ implementation = fn;
77
+ return this;
78
+ };
79
+ mockFn.mockReturnValue = function(value) {
80
+ isConfigured = true;
81
+ implementation = () => value;
82
+ return this;
83
+ };
84
+ mockFn.mockAsyncIterator = function(values) {
85
+ isConfigured = true;
86
+ implementation = () => {
87
+ let index = 0;
88
+ return {
89
+ [Symbol.asyncIterator]() {
90
+ return this;
91
+ },
92
+ async next() {
93
+ if (index < values.length) {
94
+ return { done: false, value: values[index++] };
95
+ }
96
+ return { done: true, value: undefined };
97
+ }
98
+ };
99
+ };
100
+ return this;
101
+ };
102
+ mockFn.mockClear = function() {
103
+ state.calls = [];
104
+ state.results = [];
105
+ state.lastCall = undefined;
106
+ state.callCount = 0;
107
+ return this;
108
+ };
109
+ mockFn.mockReset = function() {
110
+ this.mockClear();
111
+ implementation = undefined;
112
+ isConfigured = false;
113
+ return this;
114
+ };
115
+ return mockFn;
116
+ }
117
+
118
+ // src/testing/resources/subscribers.ts
119
+ function createMockSubscribersResource() {
120
+ return {
121
+ create: createMockFunction("subscribers", "create"),
122
+ retrieve: createMockFunction("subscribers", "retrieve"),
123
+ update: createMockFunction("subscribers", "update"),
124
+ remove: createMockFunction("subscribers", "remove"),
125
+ list: createMockFunction("subscribers", "list"),
126
+ listAll: createMockFunction("subscribers", "listAll"),
127
+ modifyLists: createMockFunction("subscribers", "modifyLists"),
128
+ modifyListsForList: createMockFunction("subscribers", "modifyListsForList"),
129
+ blocklist: createMockFunction("subscribers", "blocklist"),
130
+ blocklistMany: createMockFunction("subscribers", "blocklistMany"),
131
+ blocklistByQuery: createMockFunction("subscribers", "blocklistByQuery"),
132
+ deleteMany: createMockFunction("subscribers", "deleteMany"),
133
+ deleteByQuery: createMockFunction("subscribers", "deleteByQuery"),
134
+ getBounces: createMockFunction("subscribers", "getBounces"),
135
+ deleteBounces: createMockFunction("subscribers", "deleteBounces"),
136
+ export: createMockFunction("subscribers", "export"),
137
+ sendOptin: createMockFunction("subscribers", "sendOptin"),
138
+ modifyListsByQuery: createMockFunction("subscribers", "modifyListsByQuery")
139
+ };
140
+ }
141
+ // src/testing/resources/lists.ts
142
+ function createMockListsResource() {
143
+ return {
144
+ create: createMockFunction("lists", "create"),
145
+ retrieve: createMockFunction("lists", "retrieve"),
146
+ update: createMockFunction("lists", "update"),
147
+ remove: createMockFunction("lists", "remove"),
148
+ list: createMockFunction("lists", "list"),
149
+ listAll: createMockFunction("lists", "listAll"),
150
+ deleteMany: createMockFunction("lists", "deleteMany"),
151
+ deleteByQuery: createMockFunction("lists", "deleteByQuery"),
152
+ getPublic: createMockFunction("lists", "getPublic")
153
+ };
154
+ }
155
+ // src/testing/resources/campaigns.ts
156
+ function createMockCampaignsResource() {
157
+ return {
158
+ create: createMockFunction("campaigns", "create"),
159
+ retrieve: createMockFunction("campaigns", "retrieve"),
160
+ update: createMockFunction("campaigns", "update"),
161
+ remove: createMockFunction("campaigns", "remove"),
162
+ list: createMockFunction("campaigns", "list"),
163
+ listAll: createMockFunction("campaigns", "listAll"),
164
+ updateStatus: createMockFunction("campaigns", "updateStatus"),
165
+ preview: createMockFunction("campaigns", "preview"),
166
+ previewText: createMockFunction("campaigns", "previewText"),
167
+ getRunningStats: createMockFunction("campaigns", "getRunningStats"),
168
+ getAnalytics: createMockFunction("campaigns", "getAnalytics"),
169
+ sendTest: createMockFunction("campaigns", "sendTest"),
170
+ archive: createMockFunction("campaigns", "archive"),
171
+ convertContent: createMockFunction("campaigns", "convertContent"),
172
+ deleteMany: createMockFunction("campaigns", "deleteMany"),
173
+ deleteByQuery: createMockFunction("campaigns", "deleteByQuery")
174
+ };
175
+ }
176
+ // src/testing/resources/templates.ts
177
+ function createMockTemplatesResource() {
178
+ return {
179
+ create: createMockFunction("templates", "create"),
180
+ retrieve: createMockFunction("templates", "retrieve"),
181
+ update: createMockFunction("templates", "update"),
182
+ remove: createMockFunction("templates", "remove"),
183
+ list: createMockFunction("templates", "list"),
184
+ listAll: createMockFunction("templates", "listAll"),
185
+ preview: createMockFunction("templates", "preview"),
186
+ setDefault: createMockFunction("templates", "setDefault"),
187
+ deleteMany: createMockFunction("templates", "deleteMany")
188
+ };
189
+ }
190
+ // src/testing/resources/tx.ts
191
+ function createMockTransactionalResource() {
192
+ return {
193
+ send: createMockFunction("tx", "send")
194
+ };
195
+ }
196
+ // src/testing/resources/media.ts
197
+ function createMockMediaResource() {
198
+ return {
199
+ upload: createMockFunction("media", "upload"),
200
+ list: createMockFunction("media", "list"),
201
+ listAll: createMockFunction("media", "listAll"),
202
+ retrieve: createMockFunction("media", "retrieve"),
203
+ remove: createMockFunction("media", "remove"),
204
+ deleteMany: createMockFunction("media", "deleteMany")
205
+ };
206
+ }
207
+ // src/testing/resources/import.ts
208
+ function createMockImportResource() {
209
+ return {
210
+ start: createMockFunction("import", "start"),
211
+ getStatus: createMockFunction("import", "getStatus"),
212
+ getLogs: createMockFunction("import", "getLogs"),
213
+ cancel: createMockFunction("import", "cancel")
214
+ };
215
+ }
216
+ // src/testing/resources/bounces.ts
217
+ function createMockBouncesResource() {
218
+ return {
219
+ list: createMockFunction("bounces", "list"),
220
+ listAll: createMockFunction("bounces", "listAll"),
221
+ remove: createMockFunction("bounces", "remove"),
222
+ deleteMany: createMockFunction("bounces", "deleteMany"),
223
+ deleteAll: createMockFunction("bounces", "deleteAll"),
224
+ retrieve: createMockFunction("bounces", "retrieve"),
225
+ blocklistBounced: createMockFunction("bounces", "blocklistBounced")
226
+ };
227
+ }
228
+ // src/testing/resources/settings.ts
229
+ function createMockSettingsResource() {
230
+ return {
231
+ getAll: createMockFunction("settings", "getAll"),
232
+ update: createMockFunction("settings", "update"),
233
+ updateByKey: createMockFunction("settings", "updateByKey"),
234
+ testSmtp: createMockFunction("settings", "testSmtp")
235
+ };
236
+ }
237
+ // src/testing/resources/dashboard.ts
238
+ function createMockDashboardResource() {
239
+ return {
240
+ getCounts: createMockFunction("dashboard", "getCounts"),
241
+ getCharts: createMockFunction("dashboard", "getCharts")
242
+ };
243
+ }
244
+ // src/testing/resources/admin.ts
245
+ function createMockAdminResource() {
246
+ return {
247
+ reload: createMockFunction("admin", "reload"),
248
+ getLogs: createMockFunction("admin", "getLogs"),
249
+ getEventStream: createMockFunction("admin", "getEventStream")
250
+ };
251
+ }
252
+ // src/testing/resources/maintenance.ts
253
+ function createMockMaintenanceResource() {
254
+ return {
255
+ gcSubscribers: createMockFunction("maintenance", "gcSubscribers"),
256
+ gcSubscriptions: createMockFunction("maintenance", "gcSubscriptions"),
257
+ gcAnalytics: createMockFunction("maintenance", "gcAnalytics")
258
+ };
259
+ }
260
+ // src/testing/resources/public.ts
261
+ function createMockPublicResource() {
262
+ return {
263
+ getLists: createMockFunction("public", "getLists"),
264
+ subscribe: createMockFunction("public", "subscribe"),
265
+ getCaptchaChallenge: createMockFunction("public", "getCaptchaChallenge")
266
+ };
267
+ }
268
+ // src/testing/mock-client.ts
269
+ class MockListmonkClient {
270
+ subscribers;
271
+ lists;
272
+ campaigns;
273
+ templates;
274
+ tx;
275
+ media;
276
+ import;
277
+ bounces;
278
+ settings;
279
+ dashboard;
280
+ admin;
281
+ maintenance;
282
+ public;
283
+ health;
284
+ publicHealth;
285
+ getConfig;
286
+ constructor() {
287
+ this.subscribers = createMockSubscribersResource();
288
+ this.lists = createMockListsResource();
289
+ this.campaigns = createMockCampaignsResource();
290
+ this.templates = createMockTemplatesResource();
291
+ this.tx = createMockTransactionalResource();
292
+ this.media = createMockMediaResource();
293
+ this.import = createMockImportResource();
294
+ this.bounces = createMockBouncesResource();
295
+ this.settings = createMockSettingsResource();
296
+ this.dashboard = createMockDashboardResource();
297
+ this.admin = createMockAdminResource();
298
+ this.maintenance = createMockMaintenanceResource();
299
+ this.public = createMockPublicResource();
300
+ this.health = createMockFunction("client", "health");
301
+ this.publicHealth = createMockFunction("client", "publicHealth");
302
+ this.getConfig = createMockFunction("client", "getConfig");
303
+ }
304
+ reset() {
305
+ for (const method of Object.values(this.subscribers)) {
306
+ if (typeof method?.mockReset === "function") {
307
+ method.mockReset();
308
+ }
309
+ }
310
+ for (const method of Object.values(this.lists)) {
311
+ if (typeof method?.mockReset === "function") {
312
+ method.mockReset();
313
+ }
314
+ }
315
+ for (const method of Object.values(this.campaigns)) {
316
+ if (typeof method?.mockReset === "function") {
317
+ method.mockReset();
318
+ }
319
+ }
320
+ for (const method of Object.values(this.templates)) {
321
+ if (typeof method?.mockReset === "function") {
322
+ method.mockReset();
323
+ }
324
+ }
325
+ for (const method of Object.values(this.tx)) {
326
+ if (typeof method?.mockReset === "function") {
327
+ method.mockReset();
328
+ }
329
+ }
330
+ for (const method of Object.values(this.media)) {
331
+ if (typeof method?.mockReset === "function") {
332
+ method.mockReset();
333
+ }
334
+ }
335
+ for (const method of Object.values(this.import)) {
336
+ if (typeof method?.mockReset === "function") {
337
+ method.mockReset();
338
+ }
339
+ }
340
+ for (const method of Object.values(this.bounces)) {
341
+ if (typeof method?.mockReset === "function") {
342
+ method.mockReset();
343
+ }
344
+ }
345
+ for (const method of Object.values(this.settings)) {
346
+ if (typeof method?.mockReset === "function") {
347
+ method.mockReset();
348
+ }
349
+ }
350
+ for (const method of Object.values(this.dashboard)) {
351
+ if (typeof method?.mockReset === "function") {
352
+ method.mockReset();
353
+ }
354
+ }
355
+ for (const method of Object.values(this.admin)) {
356
+ if (typeof method?.mockReset === "function") {
357
+ method.mockReset();
358
+ }
359
+ }
360
+ for (const method of Object.values(this.maintenance)) {
361
+ if (typeof method?.mockReset === "function") {
362
+ method.mockReset();
363
+ }
364
+ }
365
+ for (const method of Object.values(this.public)) {
366
+ if (typeof method?.mockReset === "function") {
367
+ method.mockReset();
368
+ }
369
+ }
370
+ this.health.mockReset();
371
+ this.publicHealth.mockReset();
372
+ this.getConfig.mockReset();
373
+ }
374
+ }
375
+ // src/testing/factories/common.ts
376
+ var counters = {
377
+ subscriber: 0,
378
+ list: 0,
379
+ campaign: 0,
380
+ template: 0,
381
+ media: 0,
382
+ bounce: 0
383
+ };
384
+ function nextId(key) {
385
+ return ++counters[key];
386
+ }
387
+ function resetFactories() {
388
+ counters.subscriber = 0;
389
+ counters.list = 0;
390
+ counters.campaign = 0;
391
+ counters.template = 0;
392
+ counters.media = 0;
393
+ counters.bounce = 0;
394
+ }
395
+ var ENTITY_HEX_CODES = {
396
+ sub: "00000001",
397
+ list: "00000002",
398
+ camp: "00000003",
399
+ tmpl: "00000004",
400
+ med: "00000005",
401
+ bnce: "00000006"
402
+ };
403
+ function mockUuid(entityType, id) {
404
+ const segment1 = ENTITY_HEX_CODES[entityType] || "00000000";
405
+ const segment2 = id.toString(16).padStart(4, "0");
406
+ const segment3 = "4000";
407
+ const segment4 = "8000";
408
+ const segment5 = id.toString(16).padStart(12, "0");
409
+ return `${segment1}-${segment2}-${segment3}-${segment4}-${segment5}`;
410
+ }
411
+ function nowISO() {
412
+ return new Date().toISOString();
413
+ }
414
+ // src/testing/factories/subscriber.ts
415
+ function createMockSubscriber(overrides) {
416
+ const id = overrides?.id ?? nextId("subscriber");
417
+ const now = nowISO();
418
+ return {
419
+ id,
420
+ uuid: mockUuid("sub", id),
421
+ email: `user${id}@example.com`,
422
+ name: `Test User ${id}`,
423
+ status: "enabled",
424
+ attribs: {},
425
+ lists: [],
426
+ created_at: now,
427
+ updated_at: now,
428
+ ...overrides
429
+ };
430
+ }
431
+ function createMockSubscribers(count, overrides) {
432
+ return Array.from({ length: count }, () => createMockSubscriber(overrides));
433
+ }
434
+ // src/testing/factories/list.ts
435
+ function createMockList(overrides) {
436
+ const id = overrides?.id ?? nextId("list");
437
+ const now = nowISO();
438
+ return {
439
+ id,
440
+ uuid: mockUuid("list", id),
441
+ name: `Test List ${id}`,
442
+ type: "public",
443
+ optin: "single",
444
+ status: "active",
445
+ tags: [],
446
+ description: "",
447
+ subscriber_count: 0,
448
+ created_at: now,
449
+ updated_at: now,
450
+ ...overrides
451
+ };
452
+ }
453
+ function createMockLists(count, overrides) {
454
+ return Array.from({ length: count }, () => createMockList(overrides));
455
+ }
456
+ // src/testing/factories/campaign.ts
457
+ function createMockCampaign(overrides) {
458
+ const id = overrides?.id ?? nextId("campaign");
459
+ const now = nowISO();
460
+ return {
461
+ id,
462
+ uuid: mockUuid("camp", id),
463
+ name: `Test Campaign ${id}`,
464
+ subject: `Test Subject ${id}`,
465
+ from_email: "test@example.com",
466
+ status: "draft",
467
+ type: "regular",
468
+ content_type: "html",
469
+ body: "<p>Test campaign content</p>",
470
+ altbody: null,
471
+ template_id: 1,
472
+ messenger: "email",
473
+ lists: [],
474
+ headers: [],
475
+ tags: [],
476
+ send_at: null,
477
+ started_at: null,
478
+ to_send: 0,
479
+ sent: 0,
480
+ archive: false,
481
+ archive_slug: null,
482
+ archive_template_id: null,
483
+ archive_meta: {},
484
+ views: 0,
485
+ clicks: 0,
486
+ bounces: 0,
487
+ created_at: now,
488
+ updated_at: now,
489
+ ...overrides
490
+ };
491
+ }
492
+ function createMockCampaigns(count, overrides) {
493
+ return Array.from({ length: count }, () => createMockCampaign(overrides));
494
+ }
495
+ // src/testing/factories/template.ts
496
+ function createMockTemplate(overrides) {
497
+ const id = overrides?.id ?? nextId("template");
498
+ const now = nowISO();
499
+ return {
500
+ id,
501
+ name: `Test Template ${id}`,
502
+ type: "campaign",
503
+ subject: null,
504
+ body: '<html><body>{{ template "content" . }}</body></html>',
505
+ is_default: false,
506
+ created_at: now,
507
+ updated_at: now,
508
+ ...overrides
509
+ };
510
+ }
511
+ function createMockTemplates(count, overrides) {
512
+ return Array.from({ length: count }, () => createMockTemplate(overrides));
513
+ }
514
+ // src/testing/factories/media.ts
515
+ function createMockMedia(overrides) {
516
+ const id = overrides?.id ?? nextId("media");
517
+ const now = nowISO();
518
+ return {
519
+ id,
520
+ uuid: mockUuid("med", id),
521
+ filename: `image${id}.jpg`,
522
+ content_type: "image/jpeg",
523
+ url: `/uploads/image${id}.jpg`,
524
+ thumb_url: `/uploads/thumb_image${id}.jpg`,
525
+ provider: "filesystem",
526
+ meta: {},
527
+ created_at: now,
528
+ ...overrides
529
+ };
530
+ }
531
+ function createMockMediaItems(count, overrides) {
532
+ return Array.from({ length: count }, () => createMockMedia(overrides));
533
+ }
534
+ // src/testing/factories/bounce.ts
535
+ function createMockBounce(overrides) {
536
+ const id = overrides?.id ?? nextId("bounce");
537
+ const now = nowISO();
538
+ return {
539
+ id,
540
+ email: `bounce${id}@example.com`,
541
+ subscriber_uuid: mockUuid("sub", id),
542
+ subscriber_id: id,
543
+ campaign: null,
544
+ type: "hard",
545
+ source: "smtp",
546
+ meta: {},
547
+ created_at: now,
548
+ ...overrides
549
+ };
550
+ }
551
+ function createMockBounces(count, overrides) {
552
+ return Array.from({ length: count }, () => createMockBounce(overrides));
553
+ }
554
+ export {
555
+ resetFactories,
556
+ createMockTemplates,
557
+ createMockTemplate,
558
+ createMockSubscribers,
559
+ createMockSubscriber,
560
+ createMockMediaItems,
561
+ createMockMedia,
562
+ createMockLists,
563
+ createMockList,
564
+ createMockFunction,
565
+ createMockCampaigns,
566
+ createMockCampaign,
567
+ createMockBounces,
568
+ createMockBounce,
569
+ MockNotConfiguredError,
570
+ MockListmonkClient
571
+ };
572
+
573
+ //# debugId=367CDA81B275C35364756E2164756E21