@perseidesjs/notification-nodemailer 3.1.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.
|
@@ -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:
|
|
@@ -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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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,
|
|
@@ -118,4 +137,4 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
|
|
|
118
137
|
exports.NodemailerNotificationProviderService = NodemailerNotificationProviderService;
|
|
119
138
|
NodemailerNotificationProviderService.identifier = "nodemailer";
|
|
120
139
|
exports.default = NodemailerNotificationProviderService;
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbm9kZW1haWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFCQSx3Q0FXQztBQU9ELG9EQU9DO0FBTUQsd0NBT0M7QUFTRCw0REFVQztBQTFFRCxxREFJa0M7QUFDbEMsNERBQXlEO0FBS3pEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzdDLDhCQUE4QjtJQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUNELDhDQUE4QztJQUM5QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsWUFBb0I7SUFDeEQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQ7OztH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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perseidesjs/notification-nodemailer",
|
|
3
|
-
"version": "3.1.
|
|
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",
|
|
@@ -49,7 +49,9 @@
|
|
|
49
49
|
"@swc/core": "1.5.7",
|
|
50
50
|
"@types/node": "^20.0.0",
|
|
51
51
|
"@types/nodemailer": "^6.4.17",
|
|
52
|
+
"@types/qrcode": "^1.5.6",
|
|
52
53
|
"nodemailer": "^7.0.5",
|
|
54
|
+
"qrcode": "^1.5.4",
|
|
53
55
|
"ts-node": "^10.9.2",
|
|
54
56
|
"typescript": "^5.6.2",
|
|
55
57
|
"vitest": "^4.0.16",
|