@nexusts/mail 0.9.6 → 0.9.7
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/dist/index.js +30 -18
- package/dist/index.js.map +4 -4
- package/dist/mail.service.d.ts +9 -3
- package/dist/types.d.ts +0 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -25,11 +25,6 @@ var __legacyDecorateClassTS = function(decorators, target, key, desc) {
|
|
|
25
25
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
26
26
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
27
27
|
};
|
|
28
|
-
var __legacyDecorateParamTS = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
29
|
-
var __legacyMetadataTS = (k, v) => {
|
|
30
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
31
|
-
return Reflect.metadata(k, v);
|
|
32
|
-
};
|
|
33
28
|
var __require = import.meta.require;
|
|
34
29
|
// packages/mail/src/transports/null.ts
|
|
35
30
|
class NullTransport {
|
|
@@ -172,15 +167,33 @@ class SmtpTransport {
|
|
|
172
167
|
import { Inject, Injectable } from "@nexusts/core";
|
|
173
168
|
class MailService {
|
|
174
169
|
static TOKEN = Symbol.for("nexus:MailService");
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
|
|
170
|
+
_transport = null;
|
|
171
|
+
_defaultFrom = undefined;
|
|
172
|
+
init() {
|
|
173
|
+
if (this._transport)
|
|
174
|
+
return;
|
|
175
|
+
const cfg = this.config ?? {};
|
|
176
|
+
this._transport = cfg.transport ?? new NullTransport;
|
|
177
|
+
this._defaultFrom = cfg.defaultFrom;
|
|
178
|
+
}
|
|
179
|
+
get transport() {
|
|
180
|
+
this.init();
|
|
181
|
+
return this._transport;
|
|
182
|
+
}
|
|
183
|
+
set transport(v) {
|
|
184
|
+
this._transport = v;
|
|
185
|
+
}
|
|
186
|
+
get defaultFrom() {
|
|
187
|
+
this.init();
|
|
188
|
+
return this._defaultFrom;
|
|
189
|
+
}
|
|
190
|
+
set defaultFrom(v) {
|
|
191
|
+
this._defaultFrom = v;
|
|
180
192
|
}
|
|
181
193
|
async send(msg) {
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
this.init();
|
|
195
|
+
const full = { ...msg, from: msg.from ?? this._defaultFrom };
|
|
196
|
+
return this._transport.send(full);
|
|
184
197
|
}
|
|
185
198
|
async sendBatch(msg, recipients) {
|
|
186
199
|
const results = [];
|
|
@@ -199,12 +212,11 @@ class MailService {
|
|
|
199
212
|
}
|
|
200
213
|
}
|
|
201
214
|
}
|
|
215
|
+
__legacyDecorateClassTS([
|
|
216
|
+
Inject("MAIL_CONFIG")
|
|
217
|
+
], MailService.prototype, "config", undefined);
|
|
202
218
|
MailService = __legacyDecorateClassTS([
|
|
203
|
-
Injectable()
|
|
204
|
-
__legacyDecorateParamTS(0, Inject("MAIL_CONFIG")),
|
|
205
|
-
__legacyMetadataTS("design:paramtypes", [
|
|
206
|
-
typeof MailConfig === "undefined" ? Object : MailConfig
|
|
207
|
-
])
|
|
219
|
+
Injectable()
|
|
208
220
|
], MailService);
|
|
209
221
|
// packages/mail/src/mail.module.ts
|
|
210
222
|
import { Module } from "@nexusts/core";
|
|
@@ -250,5 +262,5 @@ export {
|
|
|
250
262
|
FileTransport
|
|
251
263
|
};
|
|
252
264
|
|
|
253
|
-
//# debugId=
|
|
265
|
+
//# debugId=C368BFBE13D13D3764756E2164756E21
|
|
254
266
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
"/**\n * Null mail transport. Drops every message. Useful in tests.\n */\nimport type { MailMessage, MailSendResult, MailTransport } from \"../types.js\";\n\nexport class NullTransport implements MailTransport {\n\treadonly kind = \"null\";\n\t/** Captured messages for inspection in tests. */\n\tsent: MailMessage[] = [];\n\n\tasync send(msg: MailMessage): Promise<MailSendResult> {\n\t\tthis.sent.push(msg);\n\t\treturn {\n\t\t\tid: `null-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n\t\t\tsentAt: Date.now(),\n\t\t};\n\t}\n}\n",
|
|
6
6
|
"/**\n * File mail transport. Writes each outgoing message as a `.eml` file\n * under a directory. Useful for development and acceptance tests.\n *\n * new FileTransport({ dir: './tmp/mail', pretty: true });\n */\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { MailMessage, MailSendResult, MailTransport } from \"../types.js\";\n\nexport interface FileTransportOptions {\n\t/** Directory where `.eml` files are written. */\n\tdir: string;\n\t/** Format the .eml with proper headers (true) or just the body (false). Default: true. */\n\tincludeHeaders?: boolean;\n\t/** Pretty-print JSON content-type bodies. */\n\tpretty?: boolean;\n}\n\nexport class FileTransport implements MailTransport {\n\treadonly kind = \"file\";\n\tprivate opts: Required<FileTransportOptions>;\n\n\tconstructor(opts: FileTransportOptions) {\n\t\tthis.opts = {\n\t\t\tdir: opts.dir,\n\t\t\tincludeHeaders: opts.includeHeaders ?? true,\n\t\t\tpretty: opts.pretty ?? true,\n\t\t};\n\t}\n\n\tasync send(msg: MailMessage): Promise<MailSendResult> {\n\t\tawait mkdir(this.opts.dir, { recursive: true });\n\t\tconst id = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\t\tconst filename = `${id}.eml`;\n\t\tconst body = this.opts.includeHeaders ? this.toEml(msg) : this.toBody(msg);\n\t\tawait writeFile(join(this.opts.dir, filename), body, \"utf-8\");\n\t\treturn { id, sentAt: Date.now() };\n\t}\n\n\tprivate toEml(msg: MailMessage): string {\n\t\tconst headers: string[] = [];\n\t\tif (msg.from) headers.push(`From: ${this.formatAddr(msg.from)}`);\n\t\theaders.push(`To: ${this.formatAddr(msg.to)}`);\n\t\tif (msg.cc) headers.push(`Cc: ${this.formatAddr(msg.cc)}`);\n\t\tif (msg.replyTo) headers.push(`Reply-To: ${this.formatAddr(msg.replyTo)}`);\n\t\theaders.push(`Subject: ${msg.subject}`);\n\t\theaders.push(`Date: ${new Date().toUTCString()}`);\n\t\theaders.push(`MIME-Version: 1.0`);\n\t\tif (msg.html) {\n\t\t\theaders.push(`Content-Type: text/html; charset=utf-8`);\n\t\t} else {\n\t\t\theaders.push(`Content-Type: text/plain; charset=utf-8`);\n\t\t}\n\t\tconst body = msg.html ?? msg.text ?? \"\";\n\t\treturn `${headers.join(\"\\r\\n\")}\\r\\n\\r\\n${body}`;\n\t}\n\n\tprivate toBody(msg: MailMessage): string {\n\t\treturn msg.html ?? msg.text ?? \"\";\n\t}\n\n\tprivate formatAddr(a: MailMessage[\"to\"]): string {\n\t\tif (Array.isArray(a)) return a.map((x) => this.formatAddr(x)).join(\", \");\n\t\tif (typeof a === \"string\") return a;\n\t\treturn a.name ? `${a.name} <${a.address}>` : a.address;\n\t}\n}\n",
|
|
7
7
|
"/**\n * SMTP mail transport. Uses `nodemailer` as an optional peer dep.\n *\n * const transport = new SmtpTransport({\n * host: 'smtp.gmail.com',\n * port: 465,\n * secure: true,\n * auth: { user: '...', pass: '...' },\n * });\n * const mail = new MailService({ transport });\n */\nimport type { MailMessage, MailSendResult, MailTransport } from \"../types.js\";\n\nexport interface SmtpTransportOptions {\n\thost: string;\n\tport?: number;\n\tsecure?: boolean;\n\tauth?: { user: string; pass: string };\n\t/** Optional pool of pre-opened connections. */\n\tpool?: boolean;\n\t/** Maximum connections. */\n\tmaxConnections?: number;\n\t/** Sender override. */\n\tdefaultFrom?: string;\n\t/** `nodemailer` extra options. */\n\textras?: Record<string, any>;\n}\n\nexport class SmtpTransport implements MailTransport {\n\treadonly kind = \"smtp\";\n\tprivate opts: SmtpTransportOptions;\n\tprivate _transporter: any = null;\n\n\tconstructor(opts: SmtpTransportOptions) {\n\t\tthis.opts = opts;\n\t}\n\n\tprivate async transporter() {\n\t\tif (this._transporter) return this._transporter;\n\t\ttry {\n\t\t\tconst mod = await import(\"nodemailer\");\n\t\t\tthis._transporter = mod.default.createTransport({\n\t\t\t\thost: this.opts.host,\n\t\t\t\tport: this.opts.port,\n\t\t\t\tsecure: this.opts.secure,\n\t\t\t\tauth: this.opts.auth,\n\t\t\t\tpool: this.opts.pool,\n\t\t\t\tmaxConnections: this.opts.maxConnections,\n\t\t\t\t...this.opts.extras,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tthrow new Error(\n\t\t\t\t\"SmtpTransport requires nodemailer. Install it with: bun add nodemailer\",\n\t\t\t);\n\t\t}\n\t\treturn this._transporter;\n\t}\n\n\tasync send(msg: MailMessage): Promise<MailSendResult> {\n\t\tconst t = await this.transporter();\n\t\tconst from = this.formatAddr(msg.from ?? this.opts.defaultFrom);\n\t\tconst res = await t.sendMail({\n\t\t\tfrom,\n\t\t\tto: this.formatAddr(msg.to),\n\t\t\tcc: msg.cc ? this.formatAddr(msg.cc) : undefined,\n\t\t\tbcc: msg.bcc ? this.formatAddr(msg.bcc) : undefined,\n\t\t\treplyTo: msg.replyTo ? this.formatAddr(msg.replyTo) : undefined,\n\t\t\tsubject: msg.subject,\n\t\t\ttext: msg.text,\n\t\t\thtml: msg.html,\n\t\t\tattachments: msg.attachments?.map((a) => ({\n\t\t\t\tfilename: a.filename,\n\t\t\t\tcontent: a.content,\n\t\t\t\tcontentType: a.contentType,\n\t\t\t\tcid: a.cid,\n\t\t\t})),\n\t\t\theaders: msg.headers,\n\t\t\tpriority: msg.priority,\n\t\t});\n\t\treturn {\n\t\t\tid: res.messageId ?? `smtp-${Date.now()}`,\n\t\t\tsentAt: Date.now(),\n\t\t};\n\t}\n\n\tasync close(): Promise<void> {\n\t\tif (this._transporter) {\n\t\t\tawait this._transporter.close();\n\t\t\tthis._transporter = null;\n\t\t}\n\t}\n\n\tprivate formatAddr(a: MailMessage[\"to\"] | undefined): string {\n\t\tif (!a) return \"\";\n\t\tif (Array.isArray(a)) return a.map((x) => this.formatAddr(x)).join(\", \");\n\t\tif (typeof a === \"string\") return a;\n\t\treturn a.name ? `${a.name} <${a.address}>` : a.address;\n\t}\n}\n",
|
|
8
|
-
"/**\n * `MailService` — main entry point for outbound mail.\n *\n * const mail = new MailService({ transport: new NullTransport() });\n * await mail.send({ to: 'a@b.com', subject: 'hi', html: '<h1>hi</h1>' });\n *\n * mail.renderMjml('<mjml>...</mjml>', { name: 'Kim' });\n */\nimport { Inject, Injectable } from \"@nexusts/core\";\nimport { NullTransport } from \"./transports/null.js\";\nimport type {\n\tMailConfig,\n\tMailMessage,\n\tMailSendResult,\n\tMailTransport,\n} from \"./types.js\";\n\n@Injectable()\nexport class MailService {\n\t/** DI token. */\n\tstatic readonly TOKEN = Symbol.for(\"nexus:MailService\");\n\n\
|
|
9
|
-
"/**\n * `MailModule` — drop-in mail.\n *\n * @Module({\n * imports: [\n * MailModule.forRoot({\n * transport: new SmtpTransport({ host: 'smtp.example.com' }),\n * defaultFrom: 'no-reply@example.com',\n * }),\n * ],\n * })\n * export class AppModule {}\n */\nimport { Module } from \"@nexusts/core\";\nimport { MailService } from \"./mail.service.js\";\nimport { NullTransport } from \"./transports/null.js\";\nimport type { MailConfig } from \"./types.js\";\
|
|
8
|
+
"/**\n * `MailService` — main entry point for outbound mail.\n *\n * const mail = new MailService({ transport: new NullTransport() });\n * await mail.send({ to: 'a@b.com', subject: 'hi', html: '<h1>hi</h1>' });\n *\n * mail.renderMjml('<mjml>...</mjml>', { name: 'Kim' });\n */\nimport { Inject, Injectable } from \"@nexusts/core\";\nimport { NullTransport } from \"./transports/null.js\";\nimport type {\n\tMailConfig,\n\tMailMessage,\n\tMailSendResult,\n\tMailTransport,\n} from \"./types.js\";\n\n@Injectable()\nexport class MailService {\n\t/** DI token. */\n\tstatic readonly TOKEN = Symbol.for(\"nexus:MailService\");\n\n\t/** Mail config — injected by DI container. */\n\t@Inject(\"MAIL_CONFIG\") declare private config: MailConfig;\n\n\tprivate _transport: MailTransport | null = null;\n\tprivate _defaultFrom: MailConfig[\"defaultFrom\"] = undefined;\n\n\tprivate init(): void {\n\t\tif (this._transport) return;\n\t\tconst cfg = this.config ?? {};\n\t\tthis._transport = cfg.transport ?? new NullTransport();\n\t\tthis._defaultFrom = cfg.defaultFrom;\n\t}\n\n\tget transport(): MailTransport {\n\t\tthis.init();\n\t\treturn this._transport!;\n\t}\n\tset transport(v: MailTransport) { this._transport = v; }\n\n\tget defaultFrom(): MailConfig[\"defaultFrom\"] { this.init(); return this._defaultFrom; }\n\tset defaultFrom(v: MailConfig[\"defaultFrom\"]) { this._defaultFrom = v; }\n\n\t/** Send a single message. */\n\tasync send(msg: MailMessage): Promise<MailSendResult> {\n\t\tthis.init();\n\t\tconst full = { ...msg, from: msg.from ?? this._defaultFrom };\n\t\treturn this._transport!.send(full);\n\t}\n\n\t/** Send the same message to many recipients (one envelope per call). */\n\tasync sendBatch(msg: Omit<MailMessage, \"to\">, recipients: string[]): Promise<MailSendResult[]> {\n\t\tconst results: MailSendResult[] = [];\n\t\tfor (const to of recipients) {\n\t\t\tresults.push(await this.send({ ...msg, to }));\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Render an MJML template. The optional `mjml` peer dep is loaded lazily.\n\t * Throws a clear error if not installed.\n\t */\n\tasync renderMjml(template: string, _vars?: Record<string, unknown>): Promise<string> {\n\t\ttry {\n\t\t\tconst mod = await import(\"mjml\");\n\t\t\tconst { html } = mod.mjml2html(template);\n\t\t\treturn html;\n\t\t} catch (err) {\n\t\t\tthrow new Error(\n\t\t\t\t\"renderMjml requires the 'mjml' package. Install it with: bun add mjml\",\n\t\t\t);\n\t\t}\n\t}\n}\n",
|
|
9
|
+
"/**\n * `MailModule` — drop-in mail.\n *\n * @Module({\n * imports: [\n * MailModule.forRoot({\n * transport: new SmtpTransport({ host: 'smtp.example.com' }),\n * defaultFrom: 'no-reply@example.com',\n * }),\n * ],\n * })\n * export class AppModule {}\n */\nimport { Module } from \"@nexusts/core\";\nimport { MailService } from \"./mail.service.js\";\nimport { NullTransport } from \"./transports/null.js\";\nimport type { MailConfig } from \"./types.js\";\n\n@Module({\n\tproviders: [\n\t\tMailService,\n\t\t{ provide: MailService.TOKEN, useExisting: MailService },\n\t],\n\texports: [MailService, MailService.TOKEN],\n})\nexport class MailModule {\n\tstatic forRoot(config: MailConfig = {}) {\n\t\tconst cfg: MailConfig = {\n\t\t\ttransport: new NullTransport(),\n\t\t\t...config,\n\t\t};\n\t\t@Module({\n\t\t\tproviders: [\n\t\t\t\tMailService,\n\t\t\t\t{ provide: MailService.TOKEN, useExisting: MailService },\n\t\t\t\t{ provide: \"MAIL_CONFIG\", useValue: cfg },\n\t\t\t],\n\t\t\texports: [MailService, MailService.TOKEN],\n\t\t})\n\t\tclass ConfiguredMailModule {}\n\t\tObject.defineProperty(ConfiguredMailModule, \"name\", {\n\t\t\tvalue: \"ConfiguredMailModule\",\n\t\t});\n\t\treturn ConfiguredMailModule;\n\t}\n}\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "C368BFBE13D13D3764756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/dist/mail.service.d.ts
CHANGED
|
@@ -2,9 +2,15 @@ import type { MailConfig, MailMessage, MailSendResult, MailTransport } from "./t
|
|
|
2
2
|
export declare class MailService {
|
|
3
3
|
/** DI token. */
|
|
4
4
|
static readonly TOKEN: unique symbol;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
/** Mail config — injected by DI container. */
|
|
6
|
+
private config;
|
|
7
|
+
private _transport;
|
|
8
|
+
private _defaultFrom;
|
|
9
|
+
private init;
|
|
10
|
+
get transport(): MailTransport;
|
|
11
|
+
set transport(v: MailTransport);
|
|
12
|
+
get defaultFrom(): MailConfig["defaultFrom"];
|
|
13
|
+
set defaultFrom(v: MailConfig["defaultFrom"]);
|
|
8
14
|
/** Send a single message. */
|
|
9
15
|
send(msg: MailMessage): Promise<MailSendResult>;
|
|
10
16
|
/** Send the same message to many recipients (one envelope per call). */
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexusts/mail",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.7",
|
|
4
4
|
"description": "Outbound email (SMTP / File / Null transports)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
],
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@nexusts/core": "^0.9.
|
|
29
|
+
"@nexusts/core": "^0.9.7"
|
|
30
30
|
},
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|