@timshel_npm/maildev 3.2.18 → 3.2.21

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/README.md CHANGED
@@ -30,8 +30,8 @@ Or can be installed using [Github](https://docs.npmjs.com/cli/v10/configuring-np
30
30
  Ex:
31
31
  ```json
32
32
  "devDependencies": {
33
- "maildev": "github:timshel/maildev#3.2.18",
34
- "maildev": "npm:@timshel_npm/maildev@^3.2.18"
33
+ "maildev": "github:timshel/maildev#3.2.21",
34
+ "maildev": "npm:@timshel_npm/maildev@^3.2.21"
35
35
  }
36
36
  ```
37
37
 
@@ -83,7 +83,7 @@ export declare class MailServer {
83
83
  /**
84
84
  * Get an email by id
85
85
  */
86
- getEmail(id: string): Promise<Mail>;
86
+ getEmail(id: string, setRead: boolean): Promise<Mail>;
87
87
  /**
88
88
  * Returns a readable stream of the raw email
89
89
  */
@@ -255,13 +255,14 @@ class MailServer {
255
255
  /**
256
256
  * Get an email by id
257
257
  */
258
- getEmail(id) {
258
+ getEmail(id, setRead) {
259
259
  return __awaiter(this, void 0, void 0, function* () {
260
260
  const envelope = this.store.find(function (elt) {
261
261
  return elt.id === id;
262
262
  });
263
263
  if (envelope) {
264
- return getDiskEmail(this.mailDir, envelope.id).then((mail) => {
264
+ envelope.isRead = setRead || envelope.isRead;
265
+ return getDiskEmail(this.mailDir, envelope.id, envelope.isRead).then((mail) => {
265
266
  if (mail.html) {
266
267
  // sanitize html
267
268
  const window = new JSDOM("").window;
@@ -301,7 +302,7 @@ class MailServer {
301
302
  getEmailHTML(id_1) {
302
303
  return __awaiter(this, arguments, void 0, function* (id, baseUrl = "") {
303
304
  baseUrl = baseUrl ? "//" + baseUrl : "";
304
- const mail = yield this.getEmail(id);
305
+ const mail = yield this.getEmail(id, false);
305
306
  if (typeof mail.html === "string") {
306
307
  var html = mail.html;
307
308
  const getFileUrl = function (filename) {
@@ -337,7 +338,7 @@ class MailServer {
337
338
  }
338
339
  getAllEmail() {
339
340
  const emails = this.store.map((elt) => {
340
- return this.getEmail(elt.id);
341
+ return this.getEmail(elt.id, false);
341
342
  });
342
343
  return Promise.all(emails);
343
344
  }
@@ -391,7 +392,7 @@ class MailServer {
391
392
  */
392
393
  getEmailAttachment(id, filename) {
393
394
  return __awaiter(this, void 0, void 0, function* () {
394
- const mail = yield this.getEmail(id);
395
+ const mail = yield this.getEmail(id, false);
395
396
  if (mail.attachments.length === 0) {
396
397
  throw new Error("Email has no attachments");
397
398
  }
@@ -442,7 +443,7 @@ class MailServer {
442
443
  let saved = chunk.map(function (file) {
443
444
  return __awaiter(this, void 0, void 0, function* () {
444
445
  const id = path.parse(file).name;
445
- const email = yield getDiskEmail(self.mailDir, id);
446
+ const email = yield getDiskEmail(self.mailDir, id, false);
446
447
  return saveEmailToStore(self, email);
447
448
  });
448
449
  });
@@ -470,16 +471,16 @@ function createMailDir(mailDir) {
470
471
  fs.mkdirSync(mailDir, { recursive: true });
471
472
  logger.info("MailDev using directory %s", mailDir);
472
473
  }
473
- function getDiskEmail(mailDir, id) {
474
+ function getDiskEmail(mailDir, id, isRead) {
474
475
  return __awaiter(this, void 0, void 0, function* () {
475
476
  const emlPath = path.join(mailDir, id + ".eml");
476
477
  const data = yield fs_1.promises.readFile(emlPath, "utf8");
477
478
  const stat = yield fs_1.promises.stat(emlPath);
478
479
  const parsedMail = yield (0, mailparser_1.parse)(data);
479
- return buildMail(id, parsedMail, stat.size);
480
+ return buildMail(id, parsedMail, stat.size, isRead);
480
481
  });
481
482
  }
482
- function buildMail(id, parsedMail, size) {
483
+ function buildMail(id, parsedMail, size, isRead) {
483
484
  return __awaiter(this, void 0, void 0, function* () {
484
485
  const envelope = {
485
486
  id: id,
@@ -488,7 +489,7 @@ function buildMail(id, parsedMail, size) {
488
489
  date: parsedMail.date,
489
490
  subject: parsedMail.subject,
490
491
  hasAttachment: parsedMail.attachments.length > 0,
491
- isRead: false,
492
+ isRead,
492
493
  };
493
494
  return Object.assign({ id: envelope.id, envelope, calculatedBcc: (0, bcc_1.calculateBcc)(envelope.to, parsedMail.to, parsedMail.cc), size, sizeHuman: utils.formatBytes(size) }, parsedMail);
494
495
  });
@@ -541,7 +542,7 @@ function handleDataStream(mailServer, stream, session, callback) {
541
542
  });
542
543
  const parsed = yield (0, mailparser_1.parse)(stream.pipe(pt));
543
544
  yield streamEnd;
544
- const mail = yield buildMail(id, parsed, size);
545
+ const mail = yield buildMail(id, parsed, size, false);
545
546
  return saveEmailToStore(mailServer, mail);
546
547
  });
547
548
  }
@@ -34,9 +34,8 @@ function routes(app, mailserver, basePathname) {
34
34
  // Get single email
35
35
  router.get("/email/:id", function (req, res) {
36
36
  mailserver
37
- .getEmail(req.params.id)
37
+ .getEmail(req.params.id, true)
38
38
  .then((mail) => {
39
- mail.envelope.isRead = true; // Mark the email as 'read'
40
39
  res.status(200).json(mail);
41
40
  })
42
41
  .catch((err) => res.status(404).json({ error: err.message }));
@@ -116,7 +115,7 @@ function routes(app, mailserver, basePathname) {
116
115
  // Relay the email
117
116
  router.post("/email/:id/relay{/:relayTo}", function (req, res) {
118
117
  mailserver
119
- .getEmail(req.params.id)
118
+ .getEmail(req.params.id, false)
120
119
  .then((mail) => {
121
120
  if (req.params.relayTo) {
122
121
  if (emailRegexp.test(req.params.relayTo)) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@timshel_npm/maildev",
3
3
  "description": "SMTP Server with async API and Web Interface for viewing and testing emails during development",
4
- "version": "3.2.18",
4
+ "version": "3.2.21",
5
5
  "keywords": [
6
6
  "email",
7
7
  "e-mail",
@@ -60,37 +60,39 @@
60
60
  "commander": "14.0.3",
61
61
  "compression": "1.8.1",
62
62
  "cors": "2.8.6",
63
- "dompurify": "3.3.3",
63
+ "dompurify": "3.4.7",
64
64
  "express": "5.2.1",
65
- "jsdom": "29.0.1",
66
- "mailparser": "3.9.6",
65
+ "jsdom": "29.1.1",
66
+ "mailparser": "3.9.8",
67
67
  "mime": "4.1.0",
68
- "nodemailer": "8.0.4",
69
- "smtp-server": "3.18.3",
68
+ "nodemailer": "8.0.9",
69
+ "smtp-server": "3.18.4",
70
70
  "socket.io": "4.8.3",
71
71
  "wildstring": "1.0.9"
72
72
  },
73
73
  "overrides": {
74
- "brace-expansion": "5.0.5",
74
+ "brace-expansion": "5.0.6",
75
75
  "diff": "8.0.4",
76
- "path-to-regexp": "8.4.1",
77
- "picomatch": "4.0.4",
78
- "serialize-javascript": "7.0.5"
76
+ "follow-redirects": "1.16.0",
77
+ "qs": "6.15.2",
78
+ "serialize-javascript": "7.0.5",
79
+ "uuid": "14.0.0",
80
+ "ws": "8.21.0"
79
81
  },
80
82
  "devDependencies": {
81
83
  "@types/express": "5.0.6",
82
- "@types/node": "20.19.11",
83
- "expect": "30.3.0",
84
+ "@types/node": "20.19.39",
85
+ "expect": "30.4.1",
84
86
  "http-proxy-middleware": "3.0.5",
85
- "jest": "30.3.0",
86
- "jest-mock": "30.3.0",
87
- "mocha": "11.7.5",
87
+ "jest": "30.4.2",
88
+ "jest-mock": "30.4.1",
89
+ "mocha": "11.7.6",
88
90
  "nodemon": "3.1.14",
89
91
  "nyc": "18.0.0",
90
- "prettier": "3.8.1",
92
+ "prettier": "3.8.3",
91
93
  "ts-node": "10.9.2",
92
94
  "ts-node-dev": "2.0.0",
93
- "typescript": "6.0.2"
95
+ "typescript": "6.0.3"
94
96
  },
95
97
  "engines": {
96
98
  "node": ">=20.0.0"