@nwire/mail 0.9.2 → 0.10.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.
- package/dist/mail.d.ts +1 -2
- package/dist/mail.js +4 -5
- package/package.json +3 -2
- package/dist/__tests__/mail.test.d.ts +0 -5
- package/dist/__tests__/mail.test.d.ts.map +0 -1
- package/dist/__tests__/mail.test.js +0 -86
- package/dist/__tests__/mail.test.js.map +0 -1
- package/dist/mail.d.ts.map +0 -1
- package/dist/mail.js.map +0 -1
package/dist/mail.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Test-grade `InMemoryMailer` is shipped here — captures every send so
|
|
13
13
|
* assertions like `mailer.sent[0].subject === "Welcome!"` work directly.
|
|
14
14
|
*/
|
|
15
|
-
import { type PluginDefinition } from "@nwire/
|
|
15
|
+
import { type PluginDefinition } from "@nwire/app";
|
|
16
16
|
/** A single email recipient. */
|
|
17
17
|
export interface MailAddress {
|
|
18
18
|
readonly email: string;
|
|
@@ -112,4 +112,3 @@ export interface MailPluginOptions {
|
|
|
112
112
|
* })
|
|
113
113
|
*/
|
|
114
114
|
export declare function mailPlugin(options?: MailPluginOptions): PluginDefinition;
|
|
115
|
-
//# sourceMappingURL=mail.d.ts.map
|
package/dist/mail.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Test-grade `InMemoryMailer` is shipped here — captures every send so
|
|
13
13
|
* assertions like `mailer.sent[0].subject === "Welcome!"` work directly.
|
|
14
14
|
*/
|
|
15
|
-
import { definePlugin } from "@nwire/
|
|
15
|
+
import { definePlugin } from "@nwire/app";
|
|
16
16
|
// ─── Errors ────────────────────────────────────────────────────────
|
|
17
17
|
/** Thrown by adapters when the provider rejects a message. */
|
|
18
18
|
export class MailSendError extends Error {
|
|
@@ -77,11 +77,11 @@ export function mailPlugin(options = {}) {
|
|
|
77
77
|
const effective = options.defaultFrom
|
|
78
78
|
? wrapWithDefaultFrom(mailer, options.defaultFrom)
|
|
79
79
|
: mailer;
|
|
80
|
-
return definePlugin(`mail:${name}`, ({ bind,
|
|
81
|
-
bind(name,
|
|
80
|
+
return definePlugin(`mail:${name}`, ({ bind, dispose }) => {
|
|
81
|
+
bind(name, effective);
|
|
82
82
|
const stop = mailer.shutdown;
|
|
83
83
|
if (stop) {
|
|
84
|
-
|
|
84
|
+
dispose(async () => {
|
|
85
85
|
await stop.call(mailer);
|
|
86
86
|
});
|
|
87
87
|
}
|
|
@@ -99,4 +99,3 @@ function stripFrom(message) {
|
|
|
99
99
|
void _from;
|
|
100
100
|
return rest;
|
|
101
101
|
}
|
|
102
|
-
//# sourceMappingURL=mail.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nwire/mail",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Nwire — transactional-mail contract + InMemoryMailer default + mailPlugin. Adapters (SMTP/nodemailer, SES, SendGrid, …) live in separate packages.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"adapter",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@nwire/
|
|
31
|
+
"@nwire/app": "0.10.0",
|
|
32
|
+
"@nwire/forge": "0.10.0"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@types/node": "^22.19.9",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mail.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `@nwire/mail` — contract verification via InMemoryMailer + plugin.
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect } from "vitest";
|
|
5
|
-
import { createApp } from "@nwire/forge";
|
|
6
|
-
import { InMemoryMailer, mailPlugin, MailSendError } from "../mail.js";
|
|
7
|
-
describe("InMemoryMailer", () => {
|
|
8
|
-
it("captures every send", async () => {
|
|
9
|
-
const m = new InMemoryMailer();
|
|
10
|
-
await m.send({ to: "alice@x", subject: "hi", text: "hello" });
|
|
11
|
-
await m.send({ to: "bob@x", subject: "hey", text: "world" });
|
|
12
|
-
expect(m.sent.map((x) => x.subject)).toEqual(["hi", "hey"]);
|
|
13
|
-
});
|
|
14
|
-
it("returns a synthetic messageId on each send", async () => {
|
|
15
|
-
const m = new InMemoryMailer();
|
|
16
|
-
const a = await m.send({ to: "x", subject: "" });
|
|
17
|
-
const b = await m.send({ to: "x", subject: "" });
|
|
18
|
-
expect(a.messageId).not.toBe(b.messageId);
|
|
19
|
-
});
|
|
20
|
-
it("failNext throws for one send and then clears itself", async () => {
|
|
21
|
-
const m = new InMemoryMailer();
|
|
22
|
-
m.failNext = new MailSendError("smtp down");
|
|
23
|
-
await expect(m.send({ to: "a", subject: "" })).rejects.toBeInstanceOf(MailSendError);
|
|
24
|
-
await expect(m.send({ to: "a", subject: "" })).resolves.toBeTruthy();
|
|
25
|
-
expect(m.sent).toHaveLength(1);
|
|
26
|
-
});
|
|
27
|
-
it("clear resets captured + queued-failure", async () => {
|
|
28
|
-
const m = new InMemoryMailer();
|
|
29
|
-
await m.send({ to: "a", subject: "" });
|
|
30
|
-
m.failNext = new MailSendError("x");
|
|
31
|
-
m.clear();
|
|
32
|
-
expect(m.sent).toEqual([]);
|
|
33
|
-
expect(m.failNext).toBeUndefined();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe("mailPlugin", () => {
|
|
37
|
-
it("boots + stops cleanly with the default mailer", async () => {
|
|
38
|
-
const app = createApp({ modules: [], plugins: [mailPlugin()] });
|
|
39
|
-
await app.start();
|
|
40
|
-
await app.stop();
|
|
41
|
-
});
|
|
42
|
-
it("calls adapter.shutdown on app.stop when defined", async () => {
|
|
43
|
-
let stopped = false;
|
|
44
|
-
const adapter = {
|
|
45
|
-
send: async () => ({ messageId: "x" }),
|
|
46
|
-
shutdown: async () => {
|
|
47
|
-
stopped = true;
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
const app = createApp({
|
|
51
|
-
modules: [],
|
|
52
|
-
plugins: [mailPlugin({ mailer: adapter })],
|
|
53
|
-
});
|
|
54
|
-
await app.start();
|
|
55
|
-
await app.stop();
|
|
56
|
-
expect(stopped).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
it("defaultFrom is applied when a message omits `from`", async () => {
|
|
59
|
-
const inner = new InMemoryMailer();
|
|
60
|
-
const app = createApp({
|
|
61
|
-
modules: [],
|
|
62
|
-
plugins: [
|
|
63
|
-
mailPlugin({
|
|
64
|
-
mailer: inner,
|
|
65
|
-
defaultFrom: '"My App" <noreply@my.app>',
|
|
66
|
-
name: "test-mailer",
|
|
67
|
-
}),
|
|
68
|
-
],
|
|
69
|
-
});
|
|
70
|
-
await app.start();
|
|
71
|
-
// The plugin wraps the mailer; we still send via the wrapper through
|
|
72
|
-
// a resolved binding. For this slim test, send via the inner mailer's
|
|
73
|
-
// wrapper directly using the binding mechanism would require a
|
|
74
|
-
// resolver. Instead, verify the wrap behavior in isolation:
|
|
75
|
-
const { mailPlugin: _p } = await import("../mail.js");
|
|
76
|
-
void _p;
|
|
77
|
-
// Re-create the wrapping inline (mirrors what the plugin does).
|
|
78
|
-
const wrapped = {
|
|
79
|
-
send: (msg) => inner.send({ from: msg.from ?? '"My App" <noreply@my.app>', ...msg }),
|
|
80
|
-
};
|
|
81
|
-
await wrapped.send({ to: "alice@x", subject: "hi" });
|
|
82
|
-
expect(inner.sent[0].from).toBe('"My App" <noreply@my.app>');
|
|
83
|
-
await app.stop();
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=mail.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail.test.js","sourceRoot":"","sources":["../../src/__tests__/mail.test.ts"],"names":[],"mappings":"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"}
|
package/dist/mail.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../src/mail.ts"],"names":[],"mappings":"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"}
|
package/dist/mail.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../src/mail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAyB,MAAM,cAAc,CAAC;AAwDnE,sEAAsE;AAEtE,8DAA8D;AAC9D,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,KAAK,GAAG,kBAA2B,CAAC;IACpC,MAAM,GAAG,GAAY,CAAC;IACtB,KAAK,CAAW;IACzB,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,oEAAoE;AAEpE;;;;;;;GAOG;AACH,MAAM,OAAO,cAAc;IACzB,+CAA+C;IACtC,IAAI,GAAkB,EAAE,CAAC;IAClC,kEAAkE;IAClE,QAAQ,CAAS;IAEjB,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,EAAE,SAAS,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IAED,oCAAoC;IACpC,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;CACF;AAoBD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,UAA6B,EAAE;IACxD,MAAM,MAAM,GAAW,OAAO,CAAC,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,oEAAoE;IACpE,uEAAuE;IACvE,0DAA0D;IAC1D,MAAM,SAAS,GAAW,OAAO,CAAC,WAAW;QAC3C,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;QAClD,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO,YAAY,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzD,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,IAAI,EAAE;gBAClB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,WAAiC;IAC5E,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5F,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7E,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAAoB;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACzC,KAAK,KAAK,CAAC;IACX,OAAO,IAAI,CAAC;AACd,CAAC"}
|