@perseidesjs/notification-nodemailer 3.0.0 → 3.1.1

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 +1 @@
1
- export { NodemailerNotificationProviderService, PluginOptions, } from './providers/nodemailer/service';
1
+ export { NodemailerNotificationProviderService, PluginOptions, } from "./providers/nodemailer/service";
@@ -1,8 +1,8 @@
1
- import { type ProviderSendNotificationDTO, type ProviderSendNotificationResultsDTO } from '@medusajs/framework/types';
2
- import { AbstractNotificationProviderService } from '@medusajs/framework/utils';
3
- import { type Transporter } from 'nodemailer';
4
- import type SMTPConnection from 'nodemailer/lib/smtp-connection';
5
- import type SMTPTransport from 'nodemailer/lib/smtp-transport';
1
+ import type { ProviderSendNotificationDTO, ProviderSendNotificationResultsDTO } from "@medusajs/framework/types";
2
+ import { AbstractNotificationProviderService } from "@medusajs/framework/utils";
3
+ import { type Transporter } from "nodemailer";
4
+ import type SMTPConnection from "nodemailer/lib/smtp-connection";
5
+ import type SMTPTransport from "nodemailer/lib/smtp-transport";
6
6
  /**
7
7
  * Checks if a string is in binary digit format.
8
8
  * This format is created by converting a Buffer using:
@@ -17,6 +17,11 @@ export declare function isBinaryString(content: string): boolean;
17
17
  * of each byte, e.g., "0100100001101001" represents "Hi".
18
18
  */
19
19
  export declare function binaryStringToBuffer(binaryString: string): Buffer;
20
+ /**
21
+ * Checks if a string is valid base64 encoded data.
22
+ * Base64 strings contain only A-Z, a-z, 0-9, +, /, and optional = padding.
23
+ */
24
+ export declare function isBase64String(content: string): boolean;
20
25
  /**
21
26
  * Processes attachment content to ensure it's in a format Nodemailer can handle.
22
27
  * Supports:
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.NodemailerNotificationProviderService = void 0;
7
7
  exports.isBinaryString = isBinaryString;
8
8
  exports.binaryStringToBuffer = binaryStringToBuffer;
9
+ exports.isBase64String = isBase64String;
9
10
  exports.processAttachmentContent = processAttachmentContent;
10
11
  const utils_1 = require("@medusajs/framework/utils");
11
12
  const nodemailer_1 = __importDefault(require("nodemailer"));
@@ -41,6 +42,20 @@ function binaryStringToBuffer(binaryString) {
41
42
  }
42
43
  return Buffer.from(bytes);
43
44
  }
45
+ /**
46
+ * Checks if a string is valid base64 encoded data.
47
+ * Base64 strings contain only A-Z, a-z, 0-9, +, /, and optional = padding.
48
+ */
49
+ function isBase64String(content) {
50
+ if (content.length < 4)
51
+ return false;
52
+ // Binary strings (only 0s and 1s) are NOT base64
53
+ if (isBinaryString(content))
54
+ return false;
55
+ // Base64 pattern: alphanumeric, +, /, with optional = padding at end
56
+ // Allow strings not divisible by 4 (some encoders omit padding)
57
+ return /^[A-Za-z0-9+/]+=*$/.test(content);
58
+ }
44
59
  /**
45
60
  * Processes attachment content to ensure it's in a format Nodemailer can handle.
46
61
  * Supports:
@@ -52,7 +67,7 @@ function processAttachmentContent(content) {
52
67
  if (Buffer.isBuffer(content)) {
53
68
  return content;
54
69
  }
55
- if (typeof content === 'string' && isBinaryString(content)) {
70
+ if (typeof content === "string" && isBinaryString(content)) {
56
71
  return binaryStringToBuffer(content);
57
72
  }
58
73
  return content;
@@ -65,10 +80,10 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
65
80
  }
66
81
  static validateOptions(options) {
67
82
  if (!options.host) {
68
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `"host" is required in the ${this.identifier} provider's options.`);
83
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `"host" is required in the ${NodemailerNotificationProviderService.identifier} provider's options.`);
69
84
  }
70
85
  if (!options.port) {
71
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `"port" is required in the ${this.identifier} provider's options.`);
86
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `"port" is required in the ${NodemailerNotificationProviderService.identifier} provider's options.`);
72
87
  }
73
88
  }
74
89
  async send(notification) {
@@ -84,19 +99,23 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
84
99
  if ((0, utils_1.isDefined)(notification.attachments) &&
85
100
  Array.isArray(notification.attachments) &&
86
101
  notification.attachments.length > 0) {
87
- attachments = notification.attachments.map((attachment) => ({
88
- content: processAttachmentContent(attachment.content),
89
- filename: attachment.filename,
90
- contentType: attachment.content_type,
91
- contentDisposition: attachment.disposition === 'inline' ||
92
- attachment.disposition === 'attachment'
93
- ? attachment.disposition
94
- : undefined,
95
- cid: attachment.id,
96
- contentTransferEncoding: attachment.content_type === 'text/html'
97
- ? 'quoted-printable'
98
- : 'base64',
99
- }));
102
+ attachments = notification.attachments.map((attachment) => {
103
+ const processedContent = processAttachmentContent(attachment.content);
104
+ const isBase64Content = typeof processedContent === "string" &&
105
+ isBase64String(processedContent);
106
+ return {
107
+ content: processedContent,
108
+ filename: attachment.filename,
109
+ contentType: attachment.content_type,
110
+ contentDisposition: attachment.disposition === "inline" ||
111
+ attachment.disposition === "attachment"
112
+ ? attachment.disposition
113
+ : undefined,
114
+ cid: attachment.id,
115
+ // Tell nodemailer the content is base64-encoded so it decodes first
116
+ encoding: isBase64Content ? "base64" : undefined,
117
+ };
118
+ });
100
119
  }
101
120
  const mailOptions = {
102
121
  from: notification.from ?? this.options_.from,
@@ -116,6 +135,6 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
116
135
  }
117
136
  }
118
137
  exports.NodemailerNotificationProviderService = NodemailerNotificationProviderService;
119
- NodemailerNotificationProviderService.identifier = 'nodemailer';
138
+ NodemailerNotificationProviderService.identifier = "nodemailer";
120
139
  exports.default = NodemailerNotificationProviderService;
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbm9kZW1haWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFCQSx3Q0FXQztBQU9ELG9EQU9DO0FBU0QsNERBVUM7QUE3REQscURBSWtDO0FBQ2xDLDREQUF5RDtBQUt6RDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUM3Qyw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFDRCw4Q0FBOEM7SUFDOUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFDRCxrREFBa0Q7SUFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3hELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzVDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNI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
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbm9kZW1haWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFCQSx3Q0FXQztBQU9ELG9EQU9DO0FBTUQsd0NBT0M7QUFTRCw0REFVQztBQTFFRCxxREFJa0M7QUFDbEMsNERBQXlEO0FBS3pEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzdDLDhCQUE4QjtJQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUNELDhDQUE4QztJQUM5QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsWUFBb0I7SUFDeEQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQ7OztH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
package/README.md CHANGED
@@ -11,8 +11,17 @@
11
11
  @perseidesjs/notification-nodemailer
12
12
  </h1>
13
13
 
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/@perseidesjs/notification-nodemailer"><img src="https://img.shields.io/npm/v/@perseidesjs/notification-nodemailer.svg" alt="npm version"></a>
16
+ <a href="https://www.npmjs.com/package/@perseidesjs/notification-nodemailer"><img src="https://img.shields.io/npm/dm/@perseidesjs/notification-nodemailer.svg" alt="npm downloads"></a>
17
+ <a href="https://github.com/perseidesjs/notification-nodemailer/blob/develop/LICENSE.md"><img src="https://img.shields.io/npm/l/@perseidesjs/notification-nodemailer.svg" alt="license"></a>
18
+ <img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen" alt="node version">
19
+ <img src="https://img.shields.io/badge/TypeScript-5.x-blue" alt="typescript">
20
+ </p>
21
+
14
22
  <h4 align="center">
15
23
  <a href="https://perseides.org">Website</a> |
24
+ <a href="https://docs.perseides.org/plugins/notification-nodemailer/getting-started">Documentation</a> |
16
25
  <a href="https://www.medusajs.com">Medusa</a>
17
26
  </h4>
18
27
 
@@ -20,6 +29,20 @@
20
29
  A Medusa plugin for sending notifications via Nodemailer (SMTP)
21
30
  </p>
22
31
 
23
- # [Documentation](https://docs.perseides.org/plugins/notification-nodemailer/getting-started)
32
+ ## Installation
33
+
34
+ ```bash
35
+ npm install @perseidesjs/notification-nodemailer
36
+ # or
37
+ yarn add @perseidesjs/notification-nodemailer
38
+ # or
39
+ pnpm add @perseidesjs/notification-nodemailer
40
+ ```
41
+
42
+ ## Documentation
43
+
44
+ Access the full documentation at [docs.perseides.org/plugins/notification-nodemailer](https://docs.perseides.org/plugins/notification-nodemailer/getting-started)
45
+
46
+ ## License
24
47
 
25
- Access the documentation for the package, by clicking ["here"](https://docs.perseides.org/plugins/notification-nodemailer/getting-started)
48
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perseidesjs/notification-nodemailer",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "A Medusa plugin for sending notifications via Nodemailer (SMTP)",
5
5
  "author": "adevinwild",
6
6
  "license": "MIT",
@@ -32,51 +32,39 @@
32
32
  "changeset": "changeset",
33
33
  "version": "changeset version",
34
34
  "release": "yarn build && changeset publish",
35
- "lint": "eslint .",
36
- "lint:fix": "eslint . --fix",
37
- "format": "prettier --write .",
38
- "format:check": "prettier --check .",
35
+ "lint": "biome lint --write",
36
+ "lint:check": "biome lint",
37
+ "format": "biome format --write",
38
+ "format:check": "biome format",
39
39
  "typecheck": "tsc --noEmit",
40
40
  "test": "vitest run",
41
- "test:watch": "vitest",
42
- "prepare": "husky"
41
+ "test:watch": "vitest"
43
42
  },
44
43
  "devDependencies": {
44
+ "@biomejs/biome": "2.3.11",
45
45
  "@changesets/cli": "^2.29.5",
46
- "@epic-web/config": "^1.21.0",
47
- "@medusajs/cli": "2.12.4",
48
- "@medusajs/framework": "2.12.4",
49
- "@medusajs/medusa": "2.12.4",
46
+ "@medusajs/cli": "2.13.0",
47
+ "@medusajs/framework": "2.13.0",
48
+ "@medusajs/medusa": "2.13.0",
50
49
  "@swc/core": "1.5.7",
51
50
  "@types/node": "^20.0.0",
52
51
  "@types/nodemailer": "^6.4.17",
53
- "eslint": "^9.30.1",
54
- "husky": "^9.1.7",
55
- "lint-staged": "^16.1.2",
52
+ "@types/qrcode": "^1.5.6",
56
53
  "nodemailer": "^7.0.5",
57
- "prettier": "^3.6.2",
54
+ "qrcode": "^1.5.4",
58
55
  "ts-node": "^10.9.2",
59
56
  "typescript": "^5.6.2",
60
57
  "vitest": "^4.0.16",
61
58
  "yalc": "^1.0.0-pre.53"
62
59
  },
63
60
  "peerDependencies": {
64
- "@medusajs/cli": ">=2.12.4",
65
- "@medusajs/framework": ">2.12.4",
66
- "@medusajs/medusa": ">2.12.4",
61
+ "@medusajs/cli": ">=2.13.0",
62
+ "@medusajs/framework": ">=2.13.0",
63
+ "@medusajs/medusa": ">=2.13.0",
67
64
  "nodemailer": "^7.0.5"
68
65
  },
69
66
  "engines": {
70
67
  "node": ">=20"
71
68
  },
72
- "packageManager": "yarn@4.9.2",
73
- "lint-staged": {
74
- "*.{js,jsx,ts,tsx,mjs,cjs}": [
75
- "eslint --fix",
76
- "prettier --write"
77
- ],
78
- "*.{json,md,yml,yaml}": [
79
- "prettier --write"
80
- ]
81
- }
69
+ "packageManager": "yarn@4.9.2"
82
70
  }