@arghajit/playwright-pulse-report 0.3.3 → 0.3.5

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,20 +1,22 @@
1
1
  #!/usr/bin/env node
2
- import nodemailer from "nodemailer"; // CHANGED
3
- import path from "path"; // CHANGED (already was, but good to be explicit)
4
- import archiver from "archiver"; // CHANGED
2
+ import nodemailer from "nodemailer";
3
+ import path from "path";
4
+ import archiver from "archiver";
5
5
  import {
6
6
  createWriteStream,
7
- readFileSync as fsReadFileSync, // Renamed to avoid conflict if fs from fs/promises is used
8
- existsSync as fsExistsSync, // Renamed
9
- } from "fs"; // CHANGED for specific functions
7
+ readFileSync as fsReadFileSync,
8
+ existsSync as fsExistsSync,
9
+ } from "fs";
10
10
  import { fileURLToPath } from "url";
11
- import { fork } from "child_process"; // This was missing in your sendReport.js but present in generate-email-report.js and needed for runScript
12
- import "dotenv/config"; // CHANGED for dotenv
13
- import { getOutputDir } from "./config-reader.mjs";
11
+ import { animate } from "./terminal-logo.mjs";
12
+ import { fork } from "child_process";
13
+ import "dotenv/config";
14
+ import { getReporterConfig, getOutputDir } from "./config-reader.mjs";
15
+ import { mergeSequentialReportsIfNeeded } from "./merge-sequential-reports.mjs";
14
16
 
15
- // Import chalk using top-level await if your Node version supports it (14.8+)
16
- // or keep the dynamic import if preferred, but ensure chalk is resolved before use.
17
17
  let chalk;
18
+ let logo =
19
+ "data:image/png;base64,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";
18
20
  try {
19
21
  chalk = (await import("chalk")).default;
20
22
  } catch (e) {
@@ -39,25 +41,19 @@ for (let i = 0; i < args.length; i++) {
39
41
  }
40
42
 
41
43
  let fetch;
42
- // Ensure fetch is imported and available before it's used in fetchCredentials
43
- // Using a top-level import is generally cleaner:
44
- // import fetch from 'node-fetch';
45
- // However, your dynamic import pattern is also fine if `fetch` is awaited properly.
46
- // For simplicity, I'll assume the dynamic import is handled and awaited before fetchCredentials is called.
47
- // The existing dynamic import for fetch is okay.
48
-
49
44
  let projectName;
50
45
 
51
- function getUUID(reportDir) {
52
- const reportPath = path.join(reportDir, "playwright-pulse-report.json");
46
+ async function getUUID(reportDir) {
47
+ const config = await getReporterConfig(customOutputDir);
48
+ const outputFile = config.outputFile;
49
+ const reportPath = path.join(reportDir, outputFile);
53
50
  console.log("Report path:", reportPath);
54
51
 
55
52
  if (!fsExistsSync(reportPath)) {
56
- // CHANGED
57
53
  throw new Error("Pulse report file not found.");
58
54
  }
59
55
 
60
- const content = JSON.parse(fsReadFileSync(reportPath, "utf-8")); // CHANGED
56
+ const content = JSON.parse(fsReadFileSync(reportPath, "utf-8"));
61
57
  const idString = content.run.id;
62
58
  const parts = idString.split("-");
63
59
  const uuid = parts.slice(-5).join("-");
@@ -71,27 +67,52 @@ function formatDuration(ms) {
71
67
  if (ms < 3600000) return `${(ms / 60000).toFixed(1)}min`;
72
68
  return `${(ms / 3600000).toFixed(1)}h`;
73
69
  }
74
- const formatStartTime = (isoString) => {
75
- const date = new Date(isoString);
76
- return date.toLocaleString(); // Default locale
77
- };
78
70
 
79
- const getPulseReportSummary = (reportDir) => {
80
- const reportPath = path.join(reportDir, "playwright-pulse-report.json");
71
+ const getPulseReportSummary = async (reportDir) => {
72
+ const config = await getReporterConfig(customOutputDir);
73
+ const outputFile = config.outputFile;
74
+ const reportPath = path.join(reportDir, outputFile);
81
75
 
82
76
  if (!fsExistsSync(reportPath)) {
83
- // CHANGED
84
77
  throw new Error("Pulse report file not found.");
85
78
  }
86
79
 
87
- const content = JSON.parse(fsReadFileSync(reportPath, "utf-8")); // D
80
+ const content = JSON.parse(fsReadFileSync(reportPath, "utf-8"));
81
+
82
+ if (content.metadata?.logo) {
83
+ try {
84
+ const logoPath = path.resolve(process.cwd(), content.metadata.logo);
85
+ const ext = path.extname(logoPath).toLowerCase();
86
+ let mimeType = "image/png";
87
+ if (ext === ".svg") mimeType = "image/svg+xml";
88
+ else if (ext === ".jpg" || ext === ".jpeg") mimeType = "image/jpeg";
89
+ else if (ext === ".gif") mimeType = "image/gif";
90
+ else if (ext === ".webp") mimeType = "image/webp";
91
+
92
+ const logoData = fsReadFileSync(logoPath, "base64");
93
+ logo = `data:${mimeType};base64,${logoData}`;
94
+ } catch (e) {
95
+ if (chalk && typeof chalk.yellow === "function") {
96
+ console.warn(
97
+ chalk.yellow(
98
+ `Warning: Could not read custom logo file at ${content.metadata.logo}. Using default logo.`,
99
+ ),
100
+ );
101
+ } else {
102
+ console.warn(
103
+ `Warning: Could not read custom logo file at ${content.metadata.logo}. Using default logo.`,
104
+ );
105
+ }
106
+ }
107
+ }
108
+
88
109
  const run = content.run;
89
110
 
90
111
  const total = run.totalTests || 0;
91
112
  const passed = run.passed || 0;
92
113
  const failed = run.failed || 0;
93
114
  const skipped = run.skipped || 0;
94
- const durationInMs = run.duration || 0; // Keep in ms for formatDuration
115
+ const durationInMs = run.duration || 0;
95
116
 
96
117
  const readableStartTime = new Date(run.timestamp).toLocaleString();
97
118
 
@@ -104,35 +125,12 @@ const getPulseReportSummary = (reportDir) => {
104
125
  failedPercentage: total ? ((failed / total) * 100).toFixed(2) : "0.00",
105
126
  skippedPercentage: total ? ((skipped / total) * 100).toFixed(2) : "0.00",
106
127
  startTime: readableStartTime,
107
- duration: formatDuration(durationInMs), // Pass ms to formatDuration
128
+ duration: formatDuration(durationInMs),
108
129
  };
109
130
  };
110
131
 
111
- const delay = (time) => new Promise((resolve) => setTimeout(resolve, time));
112
-
113
- const zipFolder = async (folderPath, zipPath) => {
114
- return new Promise((resolve, reject) => {
115
- const output = createWriteStream(zipPath); // CHANGED
116
- const archiveInstance = archiver("zip", { zlib: { level: 9 } }); // Renamed to avoid conflict
117
-
118
- output.on("close", () => {
119
- console.log(`${archiveInstance.pointer()} total bytes`);
120
- console.log("Folder has been zipped successfully.");
121
- resolve();
122
- });
123
-
124
- archiveInstance.on("error", (err) => {
125
- reject(err);
126
- });
127
-
128
- archiveInstance.pipe(output);
129
- archiveInstance.directory(folderPath, false);
130
- archiveInstance.finalize();
131
- });
132
- };
133
-
134
132
  const generateHtmlTable = (data) => {
135
- projectName = "Pulse Emailable Report"; // Consider passing projectName as an arg or making it a const
133
+ projectName = "Pulse Emailable Report";
136
134
  const stats = data;
137
135
  const total = stats.passed + stats.failed + stats.skipped;
138
136
  const passedTests = stats.passed;
@@ -142,9 +140,9 @@ const generateHtmlTable = (data) => {
142
140
  const skippedTests = stats.skipped;
143
141
  const skippedPercentage = stats.skippedPercentage;
144
142
  const startTime = stats.startTime;
145
- const durationString = stats.duration; // Already formatted string
143
+ const durationString = stats.duration;
146
144
 
147
- return `
145
+ return `
148
146
  <!DOCTYPE html>
149
147
  <html lang="en">
150
148
  <head>
@@ -152,68 +150,41 @@ return `
152
150
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
153
151
  <title>Test Stats Report</title>
154
152
  <style>
155
- /* ANIMATION KEYFRAMES
156
- (Supported by Apple Mail, iOS, Outlook Mac, etc.)
157
- */
158
-
159
- /* 1. Slide the card up and fade in */
160
153
  @keyframes slideUpFade {
161
154
  0% { opacity: 0; transform: translateY(20px); }
162
155
  100% { opacity: 1; transform: translateY(0); }
163
156
  }
164
-
165
- /* 2. Gentle pulse for the logo */
166
157
  @keyframes gentlePulse {
167
158
  0% { transform: scale(1); }
168
159
  50% { transform: scale(1.05); }
169
160
  100% { transform: scale(1); }
170
161
  }
171
-
172
- /* 3. Pop in effect for status badges */
173
162
  @keyframes popIn {
174
163
  0% { opacity: 0; transform: scale(0.5); }
175
164
  80% { transform: scale(1.1); }
176
165
  100% { opacity: 1; transform: scale(1); }
177
166
  }
178
-
179
- /* CLASSES TO APPLY ANIMATIONS */
180
- .anim-card {
181
- animation: slideUpFade 0.8s ease-out forwards;
182
- }
183
-
184
- .anim-logo {
185
- animation: gentlePulse 3s infinite ease-in-out;
186
- }
187
-
188
- /* Staggered delays for list items so they cascade in */
167
+ .anim-card { animation: slideUpFade 0.8s ease-out forwards; }
168
+ .anim-logo { animation: gentlePulse 3s infinite ease-in-out; }
189
169
  .anim-row-1 { animation: slideUpFade 0.5s ease-out 0.2s backwards; }
190
170
  .anim-row-2 { animation: slideUpFade 0.5s ease-out 0.3s backwards; }
191
171
  .anim-row-3 { animation: slideUpFade 0.5s ease-out 0.4s backwards; }
192
172
  .anim-row-4 { animation: slideUpFade 0.5s ease-out 0.5s backwards; }
193
-
194
- .anim-badge {
195
- animation: popIn 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55) 0.6s backwards;
196
- }
173
+ .anim-badge { animation: popIn 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55) 0.6s backwards; }
197
174
  </style>
198
175
  </head>
199
176
  <body style="margin: 0; padding: 0; background-color: #f3f4f6; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;">
200
-
201
177
  <table role="presentation" width="100%" border="0" cellspacing="0" cellpadding="0" style="background-color: #f3f4f6; padding: 40px 0;">
202
178
  <tr>
203
179
  <td align="center">
204
-
205
180
  <table class="anim-card" role="presentation" width="100%" border="0" cellspacing="0" cellpadding="0" style="max-width: 600px; background-color: #ffffff; border-radius: 12px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); overflow: hidden;">
206
-
207
- <tr>
208
- <td height="6" style="background-color: #4f46e5;"></td>
209
- </tr>
210
-
181
+ <tr><td height="6" style="background-color: #4f46e5;"></td></tr>
211
182
  <tr>
212
183
  <td style="padding: 32px 32px 20px 32px;">
213
184
  <table border="0" cellspacing="0" cellpadding="0" width="100%">
214
185
  <tr>
215
186
  <td width="55" style="vertical-align: middle; padding-right: 16px;">
216
- <img class="anim-logo" src="https://ocpaxmghzmfbuhxzxzae.supabase.co/storage/v1/object/public/images/pulse-report/playwright_pulse_icon.png" alt="Report Logo" height="40" style="display: block; border: 0; border-radius: 8px;">
187
+ <img class="anim-logo" src=${logo} alt="Report Logo" height="40" style="display: block; border: 0; border-radius: 8px;">
217
188
  </td>
218
189
  <td style="vertical-align: middle;">
219
190
  <h1 style="margin: 0; font-size: 24px; font-weight: 700; color: #111827;">${projectName}</h1>
@@ -223,7 +194,6 @@ return `
223
194
  </table>
224
195
  </td>
225
196
  </tr>
226
-
227
197
  <tr>
228
198
  <td style="padding: 0 32px 20px 32px;">
229
199
  <table width="100%" border="0" cellspacing="0" cellpadding="0" style="background-color: #f9fafb; border-radius: 8px; border: 1px solid #e5e7eb;">
@@ -240,16 +210,13 @@ return `
240
210
  </table>
241
211
  </td>
242
212
  </tr>
243
-
244
213
  <tr>
245
214
  <td style="padding: 0 32px 32px 32px;">
246
215
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
247
-
248
216
  <tr class="anim-row-1">
249
217
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; font-size: 14px; color: #4b5563;">Total Tests Executed</td>
250
218
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; text-align: right; font-size: 14px; font-weight: 600; color: #111827;">${total}</td>
251
219
  </tr>
252
-
253
220
  <tr class="anim-row-2">
254
221
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; font-size: 14px; color: #4b5563;">Tests Passed</td>
255
222
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; text-align: right;">
@@ -258,7 +225,6 @@ return `
258
225
  </span>
259
226
  </td>
260
227
  </tr>
261
-
262
228
  <tr class="anim-row-3">
263
229
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; font-size: 14px; color: #4b5563;">Tests Failed</td>
264
230
  <td style="padding: 12px 0; border-bottom: 1px solid #f3f4f6; text-align: right;">
@@ -267,7 +233,6 @@ return `
267
233
  </span>
268
234
  </td>
269
235
  </tr>
270
-
271
236
  <tr class="anim-row-4">
272
237
  <td style="padding: 12px 0; font-size: 14px; color: #4b5563;">Tests Skipped</td>
273
238
  <td style="padding: 12px 0; text-align: right;">
@@ -276,17 +241,14 @@ return `
276
241
  </span>
277
242
  </td>
278
243
  </tr>
279
-
280
244
  </table>
281
245
  </td>
282
246
  </tr>
283
-
284
247
  <tr>
285
248
  <td style="background-color: #f9fafb; padding: 20px; text-align: center; border-top: 1px solid #e5e7eb;">
286
249
  <p style="margin: 0; font-size: 12px; color: #9ca3af;">Generated by Pulse Report</p>
287
250
  </td>
288
251
  </tr>
289
-
290
252
  </table>
291
253
  </td>
292
254
  </tr>
@@ -298,45 +260,96 @@ return `
298
260
 
299
261
  const __filename = fileURLToPath(import.meta.url);
300
262
  const __dirname = path.dirname(__filename);
301
-
302
- // Ensure the name here matches the actual file name of input_file_0.js
303
- // If input_file_0.js is indeed the script, use that name.
304
- // Using .mjs extension explicitly tells Node to treat it as ESM.
305
263
  const archiveRunScriptPath = path.resolve(
306
264
  __dirname,
307
- "generate-email-report.mjs" // Or input_file_0.mjs if you rename it, or input_file_0.js if you configure package.json
265
+ "generate-email-report.mjs",
308
266
  );
309
267
 
310
- async function runScript(scriptPath, args = []) {
268
+ async function runScript(scriptPath, args = [], options = {}) {
311
269
  return new Promise((resolve, reject) => {
312
270
  const childProcess = fork(scriptPath, args, {
313
- // Renamed variable
314
271
  stdio: "inherit",
272
+ ...options,
273
+ env: { ...process.env, ...options.env },
315
274
  });
316
-
317
275
  childProcess.on("error", (err) => {
318
276
  console.error(chalk.red(`Failed to start script: ${scriptPath}`), err);
319
277
  reject(err);
320
278
  });
321
-
322
279
  childProcess.on("exit", (code) => {
323
- if (code === 0) {
324
- resolve();
325
- } else {
326
- const errorMessage = `Script ${scriptPath} exited with code ${code}.`;
327
- console.error(chalk.red(errorMessage));
328
- reject(new Error(errorMessage));
329
- }
280
+ if (code === 0) resolve();
281
+ else reject(new Error(`Script ${scriptPath} exited with code ${code}.`));
330
282
  });
331
283
  });
332
284
  }
333
285
 
334
286
  const sendEmail = async (credentials, reportDir) => {
335
287
  const archiveArgs = customOutputDir ? ["--outputDir", customOutputDir] : [];
336
- await runScript(archiveRunScriptPath, archiveArgs);
288
+ await runScript(archiveRunScriptPath, archiveArgs, {
289
+ env: { SKIP_LOGO: "true" },
290
+ });
291
+
337
292
  try {
338
293
  console.log("Starting the sendEmail function...");
294
+ const uuid = await getUUID(reportDir);
295
+ const summary = await getPulseReportSummary(reportDir);
296
+ const htmlContent = generateHtmlTable(summary);
297
+
298
+ const recipients = [
299
+ process.env.RECIPIENT_EMAIL_1 || "",
300
+ process.env.RECIPIENT_EMAIL_2 || "",
301
+ process.env.RECIPIENT_EMAIL_3 || "",
302
+ process.env.RECIPIENT_EMAIL_4 || "",
303
+ process.env.RECIPIENT_EMAIL_5 || "",
304
+ ].filter((email) => email);
305
+
306
+ // --- DEFAULT FLOW: BREVO API ---
307
+ if (credentials.apiKey) {
308
+ const SENDER_NAME = "Pulse Email Report";
309
+ const attachmentPath = path.join(reportDir, "pulse-email-summary.html");
310
+ let attachments = [];
311
+ if (fsExistsSync(attachmentPath)) {
312
+ // Brevo requires attachments to be Base64 encoded strings
313
+ const fileContent = fsReadFileSync(attachmentPath).toString("base64");
314
+ attachments.push({
315
+ content: fileContent,
316
+ name: "report.html",
317
+ });
318
+ }
319
+ const payload = {
320
+ sender: {
321
+ name: SENDER_NAME,
322
+ email: credentials.username,
323
+ },
324
+ to: recipients.map((email) => ({ email })),
325
+ subject: "Pulse Report " + new Date().toLocaleString(),
326
+ htmlContent: htmlContent,
327
+ attachment: attachments,
328
+ };
329
+
330
+ const response = await fetch("https://api.brevo.com/v3/smtp/email", {
331
+ method: "POST",
332
+ headers: {
333
+ accept: "application/json",
334
+ "api-key": credentials.apiKey,
335
+ "content-type": "application/json",
336
+ },
337
+ body: JSON.stringify(payload),
338
+ });
339
339
 
340
+ const result = await response.json();
341
+ if (response.ok) {
342
+ console.log("Email sent: ", result.messageId);
343
+ } else {
344
+ console.error(
345
+ "Error sending email via Brevo: ",
346
+ result.message || result,
347
+ );
348
+ }
349
+ return; // Exit after default flow
350
+ }
351
+
352
+ // --- CUSTOM FLOW: GMAIL / OUTLOOK ---
340
353
  let secureTransporter;
341
354
  const mailHost = credentials.host
342
355
  ? credentials.host.toLowerCase()
@@ -345,49 +358,32 @@ const sendEmail = async (credentials, reportDir) => {
345
358
  if (mailHost === "gmail") {
346
359
  secureTransporter = nodemailer.createTransport({
347
360
  service: "gmail",
348
- auth: {
349
- user: credentials.username,
350
- pass: credentials.password,
351
- },
361
+ auth: { user: credentials.username, pass: credentials.password },
352
362
  });
353
363
  } else if (mailHost === "outlook") {
354
364
  secureTransporter = nodemailer.createTransport({
355
365
  host: "smtp.outlook.com",
356
366
  port: 587,
357
367
  secure: false,
358
- auth: {
359
- user: credentials.username,
360
- pass: credentials.password,
361
- },
368
+ auth: { user: credentials.username, pass: credentials.password },
362
369
  });
363
370
  } else {
364
- // Should be caught in main, but safety check here
365
371
  console.log(
366
372
  chalk.red(
367
- "Pulse report currently do not support provided mail host, kindly use either outlook mail or, gmail"
368
- )
373
+ "Pulse report currently do not support provided mail host, kindly use either outlook mail or, gmail",
374
+ ),
369
375
  );
370
376
  process.exit(1);
371
377
  }
372
378
 
373
- const reportData = getPulseReportSummary(reportDir);
374
- const htmlContent = generateHtmlTable(reportData);
375
-
376
379
  const mailOptions = {
377
380
  from: credentials.username,
378
- to: [
379
- process.env.RECIPIENT_EMAIL_1 || "",
380
- process.env.RECIPIENT_EMAIL_2 || "",
381
- process.env.RECIPIENT_EMAIL_3 || "",
382
- process.env.RECIPIENT_EMAIL_4 || "",
383
- process.env.RECIPIENT_EMAIL_5 || "",
384
- ].filter((email) => email), // Filter out empty strings
381
+ to: recipients,
385
382
  subject: "Pulse Report " + new Date().toLocaleString(),
386
383
  html: htmlContent,
387
384
  attachments: [
388
385
  {
389
386
  filename: `report.html`,
390
- // Make sure this path is correct and the file is generated by archiveRunScriptPath
391
387
  path: path.join(reportDir, "pulse-email-summary.html"),
392
388
  },
393
389
  ],
@@ -401,25 +397,24 @@ const sendEmail = async (credentials, reportDir) => {
401
397
  };
402
398
 
403
399
  async function fetchCredentials(reportDir, retries = 10) {
404
- // Ensure fetch is initialized from the dynamic import before calling this
405
400
  if (!fetch) {
406
401
  try {
407
402
  fetch = (await import("node-fetch")).default;
408
403
  } catch (err) {
409
404
  console.error(
410
405
  "Failed to import node-fetch dynamically for fetchCredentials:",
411
- err
406
+ err,
412
407
  );
413
408
  return null;
414
409
  }
415
410
  }
416
411
 
417
412
  const timeout = 10000;
418
- const key = getUUID(reportDir);
413
+ const key = await getUUID(reportDir);
419
414
 
420
415
  if (!key) {
421
416
  console.error(
422
- "🔴 Critical: API key (UUID from report) not found or invalid."
417
+ "🔴 Critical: API key (UUID from report) not found or invalid.",
423
418
  );
424
419
  return null;
425
420
  }
@@ -428,110 +423,73 @@ async function fetchCredentials(reportDir, retries = 10) {
428
423
  try {
429
424
  console.log(`🟡 Attempt ${attempt} of ${retries} to fetch credentials`);
430
425
 
431
- const timeoutPromise = new Promise((_, reject) => {
432
- setTimeout(() => {
433
- reject(new Error(`Request timed out after ${timeout}ms`));
434
- }, timeout);
435
- });
426
+ const controller = new AbortController();
427
+ const id = setTimeout(() => controller.abort(), timeout);
436
428
 
437
- const fetchPromise = fetch(
429
+ const response = await fetch(
438
430
  "https://get-credentials.netlify.app/api/getcredentials",
439
431
  {
440
432
  method: "GET",
441
- headers: {
442
- "x-api-key": `${key}`,
443
- },
444
- }
433
+ headers: { "x-api-key": `${key}` },
434
+ signal: controller.signal,
435
+ },
445
436
  );
446
-
447
- const response = await Promise.race([fetchPromise, timeoutPromise]);
437
+ clearTimeout(id);
448
438
 
449
439
  if (!response.ok) {
450
- if (response.status === 401) {
451
- console.error("🔴 Invalid API key - authentication failed");
452
- } else if (response.status === 404) {
453
- console.error("🔴 Endpoint not found - check the API URL");
454
- } else {
455
- console.error(`🔴 Fetch failed with status: ${response.status}`);
456
- }
457
440
  if (attempt < retries)
458
441
  await new Promise((resolve) => setTimeout(resolve, 1000));
459
442
  continue;
460
443
  }
461
444
 
462
445
  const data = await response.json();
463
-
464
- if (!data.username || !data.password) {
465
- console.error("🔴 Invalid credentials format received from API");
466
- if (attempt < retries)
467
- await new Promise((resolve) => setTimeout(resolve, 1000));
468
- continue;
469
- }
470
-
471
446
  console.log("🟢 Fetched credentials successfully");
472
- return data;
447
+ return data; // Returns data which now contains 'apiKey' for Brevo
473
448
  } catch (err) {
474
449
  console.error(`🔴 Attempt ${attempt} failed: ${err.message}`);
475
- if (attempt === retries) {
476
- console.error(
477
- `🔴 All ${retries} attempts failed. Last error: ${err.message}`
478
- );
479
- return null;
480
- }
450
+ if (attempt === retries) return null;
481
451
  await new Promise((resolve) => setTimeout(resolve, 1000));
482
452
  }
483
453
  }
484
- return null; // Should be unreachable if loop logic is correct
454
+ return null;
485
455
  }
486
456
 
487
457
  const main = async () => {
488
- // Ensure fetch is initialized (dynamic import at top or here)
458
+ await animate();
489
459
  if (!fetch) {
490
460
  try {
491
461
  fetch = (await import("node-fetch")).default;
492
462
  } catch (err) {
493
463
  console.error("Failed to import node-fetch at start of main:", err);
494
- process.exit(1); // Or handle error appropriately
464
+ process.exit(1);
495
465
  }
496
466
  }
497
467
 
498
468
  const reportDir = await getOutputDir(customOutputDir);
499
-
469
+ await mergeSequentialReportsIfNeeded(reportDir);
500
470
  console.log(chalk.blue(`Preparing to send email report...`));
501
471
  console.log(chalk.blue(`Report directory set to: ${reportDir}`));
502
- if (customOutputDir) {
503
- console.log(chalk.gray(` (from CLI argument)`));
504
- } else {
505
- console.log(
506
- chalk.gray(` (auto-detected from playwright.config or using default)`)
507
- );
508
- }
509
472
 
510
- // --- MODIFIED: Credentials Selection Logic ---
511
473
  let credentials;
512
474
 
513
- // Check if custom environment variables are provided
514
475
  if (
515
476
  process.env.PULSE_MAIL_HOST &&
516
477
  process.env.PULSE_MAIL_USERNAME &&
517
478
  process.env.PULSE_MAIL_PASSWORD
518
479
  ) {
519
480
  const host = process.env.PULSE_MAIL_HOST.toLowerCase();
520
-
521
- // Validate host immediately
522
481
  if (host !== "gmail" && host !== "outlook") {
523
482
  console.log(
524
483
  chalk.red(
525
- "Pulse report currently do not support provided mail host, kindly use either outlook mail or, gmail."
526
- )
484
+ "Pulse report currently do not support provided mail host, kindly use either outlook mail or, gmail.",
485
+ ),
527
486
  );
528
487
  process.exit(1);
529
488
  }
530
-
531
489
  console.log(
532
490
  chalk.blue(
533
- `Using custom credentials from environment variables for ${host}.`
534
- )
491
+ `Using custom credentials from environment variables for ${host}.`,
492
+ ),
535
493
  );
536
494
  credentials = {
537
495
  username: process.env.PULSE_MAIL_USERNAME,
@@ -539,19 +497,15 @@ const main = async () => {
539
497
  host: host,
540
498
  };
541
499
  } else {
542
- // Fallback to existing fetch mechanism
543
500
  credentials = await fetchCredentials(reportDir);
544
501
  if (!credentials) {
545
502
  console.warn(
546
- "Skipping email sending due to missing or failed credential fetch"
503
+ "Skipping email sending due to missing or failed credential fetch",
547
504
  );
548
505
  return;
549
506
  }
550
- // Mark fetched credentials as gmail by default for compatibility
551
- credentials.host = "gmail";
552
507
  }
553
- // --- END MODIFICATION ---
554
- // Removed await delay(10000); // If not strictly needed, remove it.
508
+
555
509
  try {
556
510
  await sendEmail(credentials, reportDir);
557
511
  } catch (error) {