@perseidesjs/notification-nodemailer 1.1.0 → 3.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.
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const widgetModule = { widgets: [] };
|
|
3
|
+
const routeModule = {
|
|
4
|
+
routes: []
|
|
5
|
+
};
|
|
6
|
+
const menuItemModule = {
|
|
7
|
+
menuItems: []
|
|
8
|
+
};
|
|
9
|
+
const formModule = { customFields: {} };
|
|
10
|
+
const displayModule = {
|
|
11
|
+
displays: {}
|
|
12
|
+
};
|
|
13
|
+
const i18nModule = { resources: {} };
|
|
14
|
+
const plugin = {
|
|
15
|
+
widgetModule,
|
|
16
|
+
routeModule,
|
|
17
|
+
menuItemModule,
|
|
18
|
+
formModule,
|
|
19
|
+
displayModule,
|
|
20
|
+
i18nModule
|
|
21
|
+
};
|
|
22
|
+
module.exports = plugin;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const widgetModule = { widgets: [] };
|
|
2
|
+
const routeModule = {
|
|
3
|
+
routes: []
|
|
4
|
+
};
|
|
5
|
+
const menuItemModule = {
|
|
6
|
+
menuItems: []
|
|
7
|
+
};
|
|
8
|
+
const formModule = { customFields: {} };
|
|
9
|
+
const displayModule = {
|
|
10
|
+
displays: {}
|
|
11
|
+
};
|
|
12
|
+
const i18nModule = { resources: {} };
|
|
13
|
+
const plugin = {
|
|
14
|
+
widgetModule,
|
|
15
|
+
routeModule,
|
|
16
|
+
menuItemModule,
|
|
17
|
+
formModule,
|
|
18
|
+
displayModule,
|
|
19
|
+
i18nModule
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
plugin as default
|
|
23
|
+
};
|
|
@@ -3,6 +3,28 @@ import { AbstractNotificationProviderService } from '@medusajs/framework/utils';
|
|
|
3
3
|
import { type Transporter } from 'nodemailer';
|
|
4
4
|
import type SMTPConnection from 'nodemailer/lib/smtp-connection';
|
|
5
5
|
import type SMTPTransport from 'nodemailer/lib/smtp-transport';
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a string is in binary digit format.
|
|
8
|
+
* This format is created by converting a Buffer using:
|
|
9
|
+
* [...buffer].map((byte) => byte.toString(2).padStart(8, "0")).join("")
|
|
10
|
+
*
|
|
11
|
+
* This results in a string containing only 0s and 1s with length divisible by 8.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isBinaryString(content: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Converts a binary digit string back to a Buffer.
|
|
16
|
+
* The binary string format is a sequence of 8-character binary representations
|
|
17
|
+
* of each byte, e.g., "0100100001101001" represents "Hi".
|
|
18
|
+
*/
|
|
19
|
+
export declare function binaryStringToBuffer(binaryString: string): Buffer;
|
|
20
|
+
/**
|
|
21
|
+
* Processes attachment content to ensure it's in a format Nodemailer can handle.
|
|
22
|
+
* Supports:
|
|
23
|
+
* - Buffer: Passed through as-is
|
|
24
|
+
* - Binary digit string: Converted to Buffer
|
|
25
|
+
* - Regular string: Passed through as-is (assumed to be base64 or text content)
|
|
26
|
+
*/
|
|
27
|
+
export declare function processAttachmentContent(content: string | Buffer): string | Buffer;
|
|
6
28
|
export type PluginOptions = SMTPConnection.Options & SMTPTransport.MailOptions & {
|
|
7
29
|
from: string;
|
|
8
30
|
};
|
|
@@ -4,8 +4,59 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.NodemailerNotificationProviderService = void 0;
|
|
7
|
+
exports.isBinaryString = isBinaryString;
|
|
8
|
+
exports.binaryStringToBuffer = binaryStringToBuffer;
|
|
9
|
+
exports.processAttachmentContent = processAttachmentContent;
|
|
7
10
|
const utils_1 = require("@medusajs/framework/utils");
|
|
8
11
|
const nodemailer_1 = __importDefault(require("nodemailer"));
|
|
12
|
+
/**
|
|
13
|
+
* Checks if a string is in binary digit format.
|
|
14
|
+
* This format is created by converting a Buffer using:
|
|
15
|
+
* [...buffer].map((byte) => byte.toString(2).padStart(8, "0")).join("")
|
|
16
|
+
*
|
|
17
|
+
* This results in a string containing only 0s and 1s with length divisible by 8.
|
|
18
|
+
*/
|
|
19
|
+
function isBinaryString(content) {
|
|
20
|
+
// Must only contain 0s and 1s
|
|
21
|
+
if (!/^[01]+$/.test(content)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
// Must be divisible by 8 (each byte = 8 bits)
|
|
25
|
+
if (content.length % 8 !== 0) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// Must be reasonably long (at least 1 byte worth)
|
|
29
|
+
return content.length >= 8;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Converts a binary digit string back to a Buffer.
|
|
33
|
+
* The binary string format is a sequence of 8-character binary representations
|
|
34
|
+
* of each byte, e.g., "0100100001101001" represents "Hi".
|
|
35
|
+
*/
|
|
36
|
+
function binaryStringToBuffer(binaryString) {
|
|
37
|
+
const bytes = [];
|
|
38
|
+
for (let i = 0; i < binaryString.length; i += 8) {
|
|
39
|
+
const byteStr = binaryString.slice(i, i + 8);
|
|
40
|
+
bytes.push(parseInt(byteStr, 2));
|
|
41
|
+
}
|
|
42
|
+
return Buffer.from(bytes);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Processes attachment content to ensure it's in a format Nodemailer can handle.
|
|
46
|
+
* Supports:
|
|
47
|
+
* - Buffer: Passed through as-is
|
|
48
|
+
* - Binary digit string: Converted to Buffer
|
|
49
|
+
* - Regular string: Passed through as-is (assumed to be base64 or text content)
|
|
50
|
+
*/
|
|
51
|
+
function processAttachmentContent(content) {
|
|
52
|
+
if (Buffer.isBuffer(content)) {
|
|
53
|
+
return content;
|
|
54
|
+
}
|
|
55
|
+
if (typeof content === 'string' && isBinaryString(content)) {
|
|
56
|
+
return binaryStringToBuffer(content);
|
|
57
|
+
}
|
|
58
|
+
return content;
|
|
59
|
+
}
|
|
9
60
|
class NodemailerNotificationProviderService extends utils_1.AbstractNotificationProviderService {
|
|
10
61
|
constructor(_, options) {
|
|
11
62
|
super();
|
|
@@ -34,7 +85,7 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
|
|
|
34
85
|
Array.isArray(notification.attachments) &&
|
|
35
86
|
notification.attachments.length > 0) {
|
|
36
87
|
attachments = notification.attachments.map((attachment) => ({
|
|
37
|
-
content: attachment.content,
|
|
88
|
+
content: processAttachmentContent(attachment.content),
|
|
38
89
|
filename: attachment.filename,
|
|
39
90
|
contentType: attachment.content_type,
|
|
40
91
|
contentDisposition: attachment.disposition === 'inline' ||
|
|
@@ -67,4 +118,4 @@ class NodemailerNotificationProviderService extends utils_1.AbstractNotification
|
|
|
67
118
|
exports.NodemailerNotificationProviderService = NodemailerNotificationProviderService;
|
|
68
119
|
NodemailerNotificationProviderService.identifier = 'nodemailer';
|
|
69
120
|
exports.default = NodemailerNotificationProviderService;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbm9kZW1haWxlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFCQSx3Q0FXQztBQU9ELG9EQU9DO0FBU0QsNERBVUM7QUE3REQscURBSWtDO0FBQ2xDLDREQUF5RDtBQUt6RDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUM3Qyw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFDRCw4Q0FBOEM7SUFDOUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQTtJQUNiLENBQUM7SUFDRCxrREFBa0Q7SUFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3hELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzVDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNI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
|
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025 adevinwild ( Adil BASRI )
|
|
3
|
+
Copyright (c) 2025 perseidesjs - adevinwild ( Adil BASRI )
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perseidesjs/notification-nodemailer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "A Medusa plugin for sending notifications via Nodemailer (SMTP)",
|
|
5
5
|
"author": "adevinwild",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,59 +37,34 @@
|
|
|
37
37
|
"format": "prettier --write .",
|
|
38
38
|
"format:check": "prettier --check .",
|
|
39
39
|
"typecheck": "tsc --noEmit",
|
|
40
|
+
"test": "vitest run",
|
|
41
|
+
"test:watch": "vitest",
|
|
40
42
|
"prepare": "husky"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
45
|
"@changesets/cli": "^2.29.5",
|
|
44
46
|
"@epic-web/config": "^1.21.0",
|
|
45
|
-
"@medusajs/
|
|
46
|
-
"@medusajs/
|
|
47
|
-
"@medusajs/
|
|
48
|
-
"@medusajs/icons": "2.4.0",
|
|
49
|
-
"@medusajs/medusa": "2.4.0",
|
|
50
|
-
"@medusajs/test-utils": "2.4.0",
|
|
51
|
-
"@medusajs/ui": "4.0.4",
|
|
52
|
-
"@mikro-orm/cli": "6.4.3",
|
|
53
|
-
"@mikro-orm/core": "6.4.3",
|
|
54
|
-
"@mikro-orm/knex": "6.4.3",
|
|
55
|
-
"@mikro-orm/migrations": "6.4.3",
|
|
56
|
-
"@mikro-orm/postgresql": "6.4.3",
|
|
47
|
+
"@medusajs/cli": "2.12.4",
|
|
48
|
+
"@medusajs/framework": "2.12.4",
|
|
49
|
+
"@medusajs/medusa": "2.12.4",
|
|
57
50
|
"@swc/core": "1.5.7",
|
|
58
51
|
"@types/node": "^20.0.0",
|
|
59
52
|
"@types/nodemailer": "^6.4.17",
|
|
60
|
-
"@types/react": "^18.3.2",
|
|
61
|
-
"@types/react-dom": "^18.2.25",
|
|
62
|
-
"awilix": "^8.0.1",
|
|
63
53
|
"eslint": "^9.30.1",
|
|
64
54
|
"husky": "^9.1.7",
|
|
65
55
|
"lint-staged": "^16.1.2",
|
|
66
56
|
"nodemailer": "^7.0.5",
|
|
67
|
-
"pg": "^8.13.0",
|
|
68
57
|
"prettier": "^3.6.2",
|
|
69
|
-
"prop-types": "^15.8.1",
|
|
70
|
-
"react": "^18.2.0",
|
|
71
|
-
"react-dom": "^18.2.0",
|
|
72
58
|
"ts-node": "^10.9.2",
|
|
73
59
|
"typescript": "^5.6.2",
|
|
74
|
-
"
|
|
60
|
+
"vitest": "^4.0.16",
|
|
75
61
|
"yalc": "^1.0.0-pre.53"
|
|
76
62
|
},
|
|
77
63
|
"peerDependencies": {
|
|
78
|
-
"@medusajs/
|
|
79
|
-
"@medusajs/
|
|
80
|
-
"@medusajs/
|
|
81
|
-
"
|
|
82
|
-
"@medusajs/medusa": "2.4.0",
|
|
83
|
-
"@medusajs/test-utils": "2.4.0",
|
|
84
|
-
"@medusajs/ui": "4.0.3",
|
|
85
|
-
"@mikro-orm/cli": "6.4.3",
|
|
86
|
-
"@mikro-orm/core": "6.4.3",
|
|
87
|
-
"@mikro-orm/knex": "6.4.3",
|
|
88
|
-
"@mikro-orm/migrations": "6.4.3",
|
|
89
|
-
"@mikro-orm/postgresql": "6.4.3",
|
|
90
|
-
"awilix": "^8.0.1",
|
|
91
|
-
"nodemailer": "^7.0.5",
|
|
92
|
-
"pg": "^8.13.0"
|
|
64
|
+
"@medusajs/cli": ">=2.12.4",
|
|
65
|
+
"@medusajs/framework": ">2.12.4",
|
|
66
|
+
"@medusajs/medusa": ">2.12.4",
|
|
67
|
+
"nodemailer": "^7.0.5"
|
|
93
68
|
},
|
|
94
69
|
"engines": {
|
|
95
70
|
"node": ">=20"
|