@c9up/rover 0.1.5 → 0.1.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/README.md +3 -1
- package/dist/BaseMail.d.ts +2 -1
- package/dist/BaseMail.d.ts.map +1 -1
- package/dist/BaseMail.js +9 -4
- package/dist/BaseMail.js.map +1 -1
- package/dist/Mail.d.ts +65 -11
- package/dist/Mail.d.ts.map +1 -1
- package/dist/Mail.js +142 -49
- package/dist/Mail.js.map +1 -1
- package/dist/MessageBuilder.d.ts +44 -7
- package/dist/MessageBuilder.d.ts.map +1 -1
- package/dist/MessageBuilder.js +57 -10
- package/dist/MessageBuilder.js.map +1 -1
- package/dist/format.d.ts +12 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +14 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/queue/MailJob.d.ts.map +1 -1
- package/dist/queue/MailJob.js.map +1 -1
- package/dist/queue/MemoryMailMessenger.d.ts +15 -0
- package/dist/queue/MemoryMailMessenger.d.ts.map +1 -0
- package/dist/queue/MemoryMailMessenger.js +42 -0
- package/dist/queue/MemoryMailMessenger.js.map +1 -0
- package/dist/testing/FakeMail.d.ts +30 -3
- package/dist/testing/FakeMail.d.ts.map +1 -1
- package/dist/testing/FakeMail.js +106 -28
- package/dist/testing/FakeMail.js.map +1 -1
- package/dist/transports/BrevoTransport.d.ts +14 -0
- package/dist/transports/BrevoTransport.d.ts.map +1 -0
- package/dist/transports/BrevoTransport.js +134 -0
- package/dist/transports/BrevoTransport.js.map +1 -0
- package/dist/transports/MailgunTransport.d.ts.map +1 -1
- package/dist/transports/MailgunTransport.js +3 -1
- package/dist/transports/MailgunTransport.js.map +1 -1
- package/dist/transports/ResendTransport.d.ts.map +1 -1
- package/dist/transports/ResendTransport.js +4 -2
- package/dist/transports/ResendTransport.js.map +1 -1
- package/dist/transports/SendGridTransport.d.ts.map +1 -1
- package/dist/transports/SendGridTransport.js +2 -2
- package/dist/transports/SendGridTransport.js.map +1 -1
- package/dist/transports/SesTransport.js +1 -1
- package/dist/transports/SesTransport.js.map +1 -1
- package/dist/transports/SparkPostTransport.d.ts +14 -0
- package/dist/transports/SparkPostTransport.d.ts.map +1 -0
- package/dist/transports/SparkPostTransport.js +144 -0
- package/dist/transports/SparkPostTransport.js.map +1 -0
- package/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +10 -1
- package/src/BaseMail.ts +17 -5
- package/src/Mail.ts +205 -62
- package/src/MessageBuilder.ts +103 -12
- package/src/format.ts +14 -0
- package/src/index.ts +5 -1
- package/src/queue/MailJob.ts +1 -1
- package/src/queue/MemoryMailMessenger.ts +45 -0
- package/src/testing/FakeMail.ts +232 -31
- package/src/transports/BrevoTransport.ts +174 -0
- package/src/transports/MailgunTransport.ts +3 -1
- package/src/transports/ResendTransport.ts +4 -2
- package/src/transports/SendGridTransport.ts +2 -2
- package/src/transports/SesTransport.ts +3 -1
- package/src/transports/SparkPostTransport.ts +182 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBuilder.d.ts","sourceRoot":"","sources":["../src/MessageBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MessageBuilder.d.ts","sourceRoot":"","sources":["../src/MessageBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/MessageBuilder.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatAddress } from "./format.js";
|
|
1
2
|
import { renderFile as renderTemplateFile } from "./templating/SimpleTemplate.js";
|
|
2
3
|
export class MessageBuilder {
|
|
3
4
|
#msg = {
|
|
@@ -10,24 +11,24 @@ export class MessageBuilder {
|
|
|
10
11
|
headers: {},
|
|
11
12
|
};
|
|
12
13
|
#pendingView = null;
|
|
13
|
-
from(address) {
|
|
14
|
-
this.#msg.from = address;
|
|
14
|
+
from(address, name) {
|
|
15
|
+
this.#msg.from = formatAddress(address, name);
|
|
15
16
|
return this;
|
|
16
17
|
}
|
|
17
|
-
to(address) {
|
|
18
|
-
this.#msg.to
|
|
18
|
+
to(address, name) {
|
|
19
|
+
addRecipients(this.#msg.to, address, name);
|
|
19
20
|
return this;
|
|
20
21
|
}
|
|
21
|
-
cc(address) {
|
|
22
|
-
this.#msg.cc
|
|
22
|
+
cc(address, name) {
|
|
23
|
+
addRecipients(this.#msg.cc, address, name);
|
|
23
24
|
return this;
|
|
24
25
|
}
|
|
25
|
-
bcc(address) {
|
|
26
|
-
this.#msg.bcc
|
|
26
|
+
bcc(address, name) {
|
|
27
|
+
addRecipients(this.#msg.bcc, address, name);
|
|
27
28
|
return this;
|
|
28
29
|
}
|
|
29
|
-
replyTo(address) {
|
|
30
|
-
this.#msg.replyTo = address;
|
|
30
|
+
replyTo(address, name) {
|
|
31
|
+
this.#msg.replyTo = formatAddress(address, name);
|
|
31
32
|
return this;
|
|
32
33
|
}
|
|
33
34
|
subject(text) {
|
|
@@ -42,10 +43,40 @@ export class MessageBuilder {
|
|
|
42
43
|
this.#msg.text = content;
|
|
43
44
|
return this;
|
|
44
45
|
}
|
|
46
|
+
/** Email priority (`low` | `normal` | `high`). */
|
|
47
|
+
priority(priority) {
|
|
48
|
+
this.#msg.priority = priority;
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
/** Set a custom `Message-ID` header. */
|
|
52
|
+
messageId(messageId) {
|
|
53
|
+
this.#msg.messageId = messageId;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
/** Set the `In-Reply-To` header for threading replies. */
|
|
57
|
+
inReplyTo(messageId) {
|
|
58
|
+
this.#msg.inReplyTo = messageId;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/** Set the `References` header (thread message ids). */
|
|
62
|
+
references(messageIds) {
|
|
63
|
+
this.#msg.references = messageIds.slice();
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
45
66
|
attach(filename, content, contentType) {
|
|
46
67
|
this.#msg.attachments.push({ filename, content, contentType });
|
|
47
68
|
return this;
|
|
48
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Embed inline content referenced by a Content-ID. Use `cid:<cid>` inside the
|
|
72
|
+
* HTML body to reference it. Content-based (rover is agnostic / no-fs): the
|
|
73
|
+
* path-based `embed(file, cid)` form from `@adonisjs/mail` is a deliberate
|
|
74
|
+
* divergence — pass the bytes directly instead.
|
|
75
|
+
*/
|
|
76
|
+
embedData(content, cid, contentType) {
|
|
77
|
+
this.#msg.attachments.push({ filename: cid, content, contentType, cid });
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
49
80
|
header(key, value) {
|
|
50
81
|
this.#msg.headers[key] = value;
|
|
51
82
|
return this;
|
|
@@ -73,4 +104,20 @@ export class MessageBuilder {
|
|
|
73
104
|
return this.#msg;
|
|
74
105
|
}
|
|
75
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Append one recipient, an array of recipients, or a `(address, name)` pair to
|
|
109
|
+
* a recipient list, formatting each into the `"Name" <address>` display form
|
|
110
|
+
* when a name is present.
|
|
111
|
+
*/
|
|
112
|
+
function addRecipients(list, address, name) {
|
|
113
|
+
if (Array.isArray(address)) {
|
|
114
|
+
for (const entry of address) {
|
|
115
|
+
list.push(typeof entry === "string"
|
|
116
|
+
? entry
|
|
117
|
+
: formatAddress(entry.address, entry.name));
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
list.push(formatAddress(address, name));
|
|
122
|
+
}
|
|
76
123
|
//# sourceMappingURL=MessageBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBuilder.js","sourceRoot":"","sources":["../src/MessageBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageBuilder.js","sourceRoot":"","sources":["../src/MessageBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared address formatting helper. Kept dependency-free and in its own module
|
|
3
|
+
* so both `BaseMail` and `MessageBuilder` can import it without re-introducing
|
|
4
|
+
* the BaseMail ↔ MessageBuilder value cycle.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Format a recipient address with an optional display name into the
|
|
8
|
+
* `"Name" <address>` form (RFC 5322 quoted display name). A bare address —
|
|
9
|
+
* or an empty/whitespace-only name — is returned unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatAddress(address: string, name?: string): string;
|
|
12
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpE"}
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared address formatting helper. Kept dependency-free and in its own module
|
|
3
|
+
* so both `BaseMail` and `MessageBuilder` can import it without re-introducing
|
|
4
|
+
* the BaseMail ↔ MessageBuilder value cycle.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Format a recipient address with an optional display name into the
|
|
8
|
+
* `"Name" <address>` form (RFC 5322 quoted display name). A bare address —
|
|
9
|
+
* or an empty/whitespace-only name — is returned unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export function formatAddress(address, name) {
|
|
12
|
+
return name !== undefined && name !== "" ? `"${name}" <${address}>` : address;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,IAAa;IAC3D,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/E,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export type { MailAddress } from "./BaseMail.js";
|
|
2
2
|
export { BaseMail } from "./BaseMail.js";
|
|
3
3
|
export { defineConfig } from "./config.js";
|
|
4
|
+
export type { EmitterLike, MailAttachment, MailConfig, MailFailedEvent, MailHooks, MailMessage, MailQueueEvent, MailSendingEvent, MailSendOutcome, MailSendResult, MailSentEvent, MailTransport, MailTransportFactory, } from "./Mail.js";
|
|
5
|
+
export { LogTransport, Mail, Mailer, MessageBuilder, registerTransport, SmtpTransport, } from "./Mail.js";
|
|
6
|
+
export type { Recipient, RecipientObject } from "./MessageBuilder.js";
|
|
4
7
|
export { RoverError } from "./RoverError.js";
|
|
5
|
-
export type { EmitterLike, MailAttachment, MailConfig, MailFailedEvent, MailHooks, MailMessage, MailSendOutcome, MailSendResult, MailSentEvent, MailTransport, MailTransportFactory, } from "./Mail.js";
|
|
6
|
-
export { LogTransport, Mail, MessageBuilder, registerTransport, SmtpTransport, } from "./Mail.js";
|
|
7
8
|
export { default as RoverProvider } from "./RoverProvider.js";
|
|
8
9
|
export { DEFAULT_RETRY_CONFIG, isRetryableError, type RetryConfig, } from "./retry.js";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACN,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,aAAa,GACb,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,WAAW,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { BaseMail } from "./BaseMail.js";
|
|
2
2
|
export { defineConfig } from "./config.js";
|
|
3
|
+
export { LogTransport, Mail, Mailer, MessageBuilder, registerTransport, SmtpTransport, } from "./Mail.js";
|
|
3
4
|
export { RoverError } from "./RoverError.js";
|
|
4
|
-
export { LogTransport, Mail, MessageBuilder, registerTransport, SmtpTransport, } from "./Mail.js";
|
|
5
5
|
export { default as RoverProvider } from "./RoverProvider.js";
|
|
6
6
|
export { DEFAULT_RETRY_CONFIG, isRetryableError, } from "./retry.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,OAAO,EACN,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,aAAa,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EACN,oBAAoB,EACpB,gBAAgB,GAEhB,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailJob.d.ts","sourceRoot":"","sources":["../../src/queue/MailJob.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MailJob.d.ts","sourceRoot":"","sources":["../../src/queue/MailJob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9D,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzD,QAAQ,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,sFAAsF;AACtF,UAAU,aAAa;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,eAAe,CACd,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,aAAa,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,cAAe,YAAW,iBAAiB;;gBAG3C,IAAI,EAAE,cAAc;IAI1B,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAY7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailJob.js","sourceRoot":"","sources":["../../src/queue/MailJob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"MailJob.js","sourceRoot":"","sources":["../../src/queue/MailJob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EmitterLike, MailMessage } from "../Mail.js";
|
|
2
|
+
import type { MailDispatcher } from "./MailJob.js";
|
|
3
|
+
/**
|
|
4
|
+
* Default in-memory messenger for `sendLater()` when no `@c9up/bay` queue is
|
|
5
|
+
* wired — mirrors `@adonisjs/mail`'s `MemoryQueueMessenger`. The send is
|
|
6
|
+
* scheduled on a microtask so `sendLater()` returns immediately (fire-and-
|
|
7
|
+
* forget). Background delivery failures surface on the `queued:mail:error`
|
|
8
|
+
* event rather than becoming unhandled rejections.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MemoryMailMessenger {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(dispatcher: MailDispatcher, emitter: EmitterLike | null);
|
|
13
|
+
queue(message: MailMessage, transport?: string): string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=MemoryMailMessenger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryMailMessenger.d.ts","sourceRoot":"","sources":["../../src/queue/MemoryMailMessenger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,mBAAmB;;gBAInB,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAKnE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;CAwBvD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Default in-memory messenger for `sendLater()` when no `@c9up/bay` queue is
|
|
4
|
+
* wired — mirrors `@adonisjs/mail`'s `MemoryQueueMessenger`. The send is
|
|
5
|
+
* scheduled on a microtask so `sendLater()` returns immediately (fire-and-
|
|
6
|
+
* forget). Background delivery failures surface on the `queued:mail:error`
|
|
7
|
+
* event rather than becoming unhandled rejections.
|
|
8
|
+
*/
|
|
9
|
+
export class MemoryMailMessenger {
|
|
10
|
+
#dispatcher;
|
|
11
|
+
#emitter;
|
|
12
|
+
constructor(dispatcher, emitter) {
|
|
13
|
+
this.#dispatcher = dispatcher;
|
|
14
|
+
this.#emitter = emitter;
|
|
15
|
+
}
|
|
16
|
+
queue(message, transport) {
|
|
17
|
+
const jobId = `mem_${randomBytes(12).toString("hex")}`;
|
|
18
|
+
queueMicrotask(() => {
|
|
19
|
+
this.#dispatcher
|
|
20
|
+
.dispatchMessage(message, transport)
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
if (!this.#emitter)
|
|
23
|
+
return;
|
|
24
|
+
try {
|
|
25
|
+
this.#emitter.emit("queued:mail:error", {
|
|
26
|
+
jobId,
|
|
27
|
+
transportName: transport,
|
|
28
|
+
error: error instanceof Error
|
|
29
|
+
? { message: error.message }
|
|
30
|
+
: { message: String(error) },
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Event bus failure ≠ mail failure — swallow so the microtask
|
|
35
|
+
// never rejects.
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
return jobId;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=MemoryMailMessenger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryMailMessenger.js","sourceRoot":"","sources":["../../src/queue/MemoryMailMessenger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C;;;;;;GAMG;AACH,MAAM,OAAO,mBAAmB;IAC/B,WAAW,CAAiB;IAC5B,QAAQ,CAAqB;IAE7B,YAAY,UAA0B,EAAE,OAA2B;QAClE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAoB,EAAE,SAAkB;QAC7C,MAAM,KAAK,GAAG,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,cAAc,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,WAAW;iBACd,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC;iBACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,IAAI,CAAC;oBACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE;wBACvC,KAAK;wBACL,aAAa,EAAE,SAAS;wBACxB,KAAK,EACJ,KAAK,YAAY,KAAK;4BACrB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;4BAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC9B,CAAC,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACR,8DAA8D;oBAC9D,iBAAiB;gBAClB,CAAC;YACF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseMail } from "../BaseMail.js";
|
|
1
2
|
import type { MailMessage, MailSendOutcome, MailTransport } from "../Mail.js";
|
|
2
3
|
export interface FakeMailPredicate {
|
|
3
4
|
from?: string;
|
|
@@ -10,22 +11,48 @@ export interface FakeMailPredicate {
|
|
|
10
11
|
}
|
|
11
12
|
export type FakeMailPredicateArg = FakeMailPredicate | ((m: MailMessage) => boolean);
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* Constructor of a `BaseMail` subclass — the `new (...args: never[]) => T`
|
|
15
|
+
* form keeps `instanceof` sound without an `any` in the signature.
|
|
16
|
+
*/
|
|
17
|
+
export type MailConstructor<T extends BaseMail = BaseMail> = new (...args: never[]) => T;
|
|
18
|
+
/**
|
|
19
|
+
* In-memory capture for tests — records every `send` (`trackSent`) and
|
|
20
|
+
* `sendLater` (`trackQueued`) routed through a faked `Mail`, and exposes
|
|
21
|
+
* Adonis/Laravel-style assertions over both message content (predicate form)
|
|
22
|
+
* and the originating `BaseMail` class (constructor form).
|
|
15
23
|
*
|
|
16
24
|
* Not re-exported from the main barrel; reach via `@c9up/rover/testing`.
|
|
17
25
|
*/
|
|
18
26
|
export declare class FakeMail implements MailTransport {
|
|
19
27
|
#private;
|
|
28
|
+
/** MailTransport contract — direct `send()` capture (backward compatible). */
|
|
20
29
|
send(message: MailMessage): Promise<MailSendOutcome>;
|
|
30
|
+
/** Record a synchronously-sent message (and its source `BaseMail`, if any). */
|
|
31
|
+
trackSent(message: MailMessage, mail?: BaseMail): void;
|
|
32
|
+
/** Record a queued message (and its source `BaseMail`, if any). */
|
|
33
|
+
trackQueued(message: MailMessage, mail?: BaseMail): void;
|
|
21
34
|
/**
|
|
22
|
-
* Return a defensive snapshot of
|
|
35
|
+
* Return a defensive snapshot of sent messages. Each message is cloned
|
|
23
36
|
* (shallow-per-field with array copies) so test-side mutations can't bleed
|
|
24
37
|
* back into the internal capture store — avoids cross-test contamination.
|
|
25
38
|
*/
|
|
26
39
|
getSent(): MailMessage[];
|
|
40
|
+
/** Return a defensive snapshot of queued messages. */
|
|
41
|
+
getQueued(): MailMessage[];
|
|
27
42
|
reset(): void;
|
|
28
43
|
assertSent(predicate: FakeMailPredicateArg): void;
|
|
44
|
+
assertSent<T extends BaseMail>(mailConstructor: MailConstructor<T>, findFn?: (mail: T) => boolean): void;
|
|
29
45
|
assertNotSent(predicate: FakeMailPredicateArg): void;
|
|
46
|
+
assertNotSent<T extends BaseMail>(mailConstructor: MailConstructor<T>, findFn?: (mail: T) => boolean): void;
|
|
47
|
+
assertQueued(predicate: FakeMailPredicateArg): void;
|
|
48
|
+
assertQueued<T extends BaseMail>(mailConstructor: MailConstructor<T>, findFn?: (mail: T) => boolean): void;
|
|
49
|
+
assertNotQueued(predicate: FakeMailPredicateArg): void;
|
|
50
|
+
assertNotQueued<T extends BaseMail>(mailConstructor: MailConstructor<T>, findFn?: (mail: T) => boolean): void;
|
|
51
|
+
assertSentCount(count: number): void;
|
|
52
|
+
assertSentCount(mailConstructor: MailConstructor<BaseMail>, count: number): void;
|
|
53
|
+
assertQueuedCount(count: number): void;
|
|
54
|
+
assertQueuedCount(mailConstructor: MailConstructor<BaseMail>, count: number): void;
|
|
55
|
+
assertNoneSent(): void;
|
|
56
|
+
assertNoneQueued(): void;
|
|
30
57
|
}
|
|
31
58
|
//# sourceMappingURL=FakeMail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeMail.d.ts","sourceRoot":"","sources":["../../src/testing/FakeMail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAC7B,iBAAiB,GACjB,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC;AAEjC
|
|
1
|
+
{"version":3,"file":"FakeMail.d.ts","sourceRoot":"","sources":["../../src/testing/FakeMail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAC7B,iBAAiB,GACjB,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC;AAEjC;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI,KAC5D,GAAG,IAAI,EAAE,KAAK,EAAE,KACZ,CAAC,CAAC;AAOP;;;;;;;GAOG;AACH,qBAAa,QAAS,YAAW,aAAa;;IAI7C,8EAA8E;IACxE,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAK1D,+EAA+E;IAC/E,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI;IAItD,mEAAmE;IACnE,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIxD;;;;OAIG;IACH,OAAO,IAAI,WAAW,EAAE;IAIxB,sDAAsD;IACtD,SAAS,IAAI,WAAW,EAAE;IAI1B,KAAK,IAAI,IAAI;IAKb,UAAU,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IACjD,UAAU,CAAC,CAAC,SAAS,QAAQ,EAC5B,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAC3B,IAAI;IAQP,aAAa,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IACpD,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC/B,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAC3B,IAAI;IAeP,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IACnD,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC9B,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAC3B,IAAI;IAeP,eAAe,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IACtD,eAAe,CAAC,CAAC,SAAS,QAAQ,EACjC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAC3B,IAAI;IAeP,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IACpC,eAAe,CACd,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC,EAC1C,KAAK,EAAE,MAAM,GACX,IAAI;IAQP,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IACtC,iBAAiB,CAChB,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC,EAC1C,KAAK,EAAE,MAAM,GACX,IAAI;IAQP,cAAc,IAAI,IAAI;IAQtB,gBAAgB,IAAI,IAAI;CAgExB"}
|
package/dist/testing/FakeMail.js
CHANGED
|
@@ -1,51 +1,129 @@
|
|
|
1
|
+
import { BaseMail } from "../BaseMail.js";
|
|
1
2
|
/**
|
|
2
|
-
* In-memory
|
|
3
|
-
*
|
|
3
|
+
* In-memory capture for tests — records every `send` (`trackSent`) and
|
|
4
|
+
* `sendLater` (`trackQueued`) routed through a faked `Mail`, and exposes
|
|
5
|
+
* Adonis/Laravel-style assertions over both message content (predicate form)
|
|
6
|
+
* and the originating `BaseMail` class (constructor form).
|
|
4
7
|
*
|
|
5
8
|
* Not re-exported from the main barrel; reach via `@c9up/rover/testing`.
|
|
6
9
|
*/
|
|
7
10
|
export class FakeMail {
|
|
8
|
-
#
|
|
11
|
+
#sent = [];
|
|
12
|
+
#queued = [];
|
|
13
|
+
/** MailTransport contract — direct `send()` capture (backward compatible). */
|
|
9
14
|
async send(message) {
|
|
10
|
-
this
|
|
15
|
+
this.trackSent(message);
|
|
11
16
|
return undefined;
|
|
12
17
|
}
|
|
18
|
+
/** Record a synchronously-sent message (and its source `BaseMail`, if any). */
|
|
19
|
+
trackSent(message, mail) {
|
|
20
|
+
this.#sent.push({ message, mail });
|
|
21
|
+
}
|
|
22
|
+
/** Record a queued message (and its source `BaseMail`, if any). */
|
|
23
|
+
trackQueued(message, mail) {
|
|
24
|
+
this.#queued.push({ message, mail });
|
|
25
|
+
}
|
|
13
26
|
/**
|
|
14
|
-
* Return a defensive snapshot of
|
|
27
|
+
* Return a defensive snapshot of sent messages. Each message is cloned
|
|
15
28
|
* (shallow-per-field with array copies) so test-side mutations can't bleed
|
|
16
29
|
* back into the internal capture store — avoids cross-test contamination.
|
|
17
30
|
*/
|
|
18
31
|
getSent() {
|
|
19
|
-
return this.#
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
replyTo: m.replyTo,
|
|
25
|
-
subject: m.subject,
|
|
26
|
-
html: m.html,
|
|
27
|
-
text: m.text,
|
|
28
|
-
attachments: m.attachments.slice(),
|
|
29
|
-
headers: { ...m.headers },
|
|
30
|
-
}));
|
|
32
|
+
return this.#sent.map((e) => cloneMessage(e.message));
|
|
33
|
+
}
|
|
34
|
+
/** Return a defensive snapshot of queued messages. */
|
|
35
|
+
getQueued() {
|
|
36
|
+
return this.#queued.map((e) => cloneMessage(e.message));
|
|
31
37
|
}
|
|
32
38
|
reset() {
|
|
33
|
-
this.#
|
|
39
|
+
this.#sent = [];
|
|
40
|
+
this.#queued = [];
|
|
41
|
+
}
|
|
42
|
+
assertSent(arg, findFn) {
|
|
43
|
+
this.#assertPresence("assertSent", "sent", this.#sent, arg, findFn, true);
|
|
44
|
+
}
|
|
45
|
+
assertNotSent(arg, findFn) {
|
|
46
|
+
this.#assertPresence("assertNotSent", "sent", this.#sent, arg, findFn, false);
|
|
47
|
+
}
|
|
48
|
+
assertQueued(arg, findFn) {
|
|
49
|
+
this.#assertPresence("assertQueued", "queued", this.#queued, arg, findFn, true);
|
|
50
|
+
}
|
|
51
|
+
assertNotQueued(arg, findFn) {
|
|
52
|
+
this.#assertPresence("assertNotQueued", "queued", this.#queued, arg, findFn, false);
|
|
53
|
+
}
|
|
54
|
+
assertSentCount(arg, count) {
|
|
55
|
+
this.#assertCount("assertSentCount", this.#sent, arg, count);
|
|
56
|
+
}
|
|
57
|
+
assertQueuedCount(arg, count) {
|
|
58
|
+
this.#assertCount("assertQueuedCount", this.#queued, arg, count);
|
|
59
|
+
}
|
|
60
|
+
assertNoneSent() {
|
|
61
|
+
if (this.#sent.length !== 0) {
|
|
62
|
+
throw new Error(`mail.assertNoneSent() failed — expected zero sent messages, found ${this.#sent.length}.\n${describeCaptured(this.#sent)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
assertNoneQueued() {
|
|
66
|
+
if (this.#queued.length !== 0) {
|
|
67
|
+
throw new Error(`mail.assertNoneQueued() failed — expected zero queued messages, found ${this.#queued.length}.\n${describeCaptured(this.#queued)}`);
|
|
68
|
+
}
|
|
34
69
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Shared body for the present/absent assertions. `expectPresent` flips the
|
|
72
|
+
* pass/fail sense so `assertSent` and `assertNotSent` share one code path.
|
|
73
|
+
*/
|
|
74
|
+
#assertPresence(method, bucket, entries, arg, findFn, expectPresent) {
|
|
75
|
+
const found = isMailConstructor(arg)
|
|
76
|
+
? entries.some((e) => e.mail !== undefined &&
|
|
77
|
+
e.mail instanceof arg &&
|
|
78
|
+
(findFn ? findFn(e.mail) : true))
|
|
79
|
+
: entries.some((e) => makeMatcher(arg)(e.message));
|
|
80
|
+
if (found === expectPresent)
|
|
38
81
|
return;
|
|
39
|
-
|
|
82
|
+
const target = isMailConstructor(arg)
|
|
83
|
+
? `an instance of ${arg.name}`
|
|
84
|
+
: describePredicate(arg);
|
|
85
|
+
const reason = expectPresent
|
|
86
|
+
? `no ${bucket} message matches ${target}`
|
|
87
|
+
: `at least one ${bucket} message matches ${target}`;
|
|
88
|
+
throw new Error(`mail.${method}() failed — ${reason}.\n${describeCaptured(entries)}`);
|
|
40
89
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
90
|
+
#assertCount(method, entries, arg, count) {
|
|
91
|
+
if (typeof arg === "number") {
|
|
92
|
+
if (entries.length !== arg) {
|
|
93
|
+
throw new Error(`mail.${method}() failed — expected ${arg}, found ${entries.length}.\n${describeCaptured(entries)}`);
|
|
94
|
+
}
|
|
45
95
|
return;
|
|
46
|
-
|
|
96
|
+
}
|
|
97
|
+
const expected = count ?? 0;
|
|
98
|
+
const actual = entries.filter((e) => e.mail !== undefined && e.mail instanceof arg).length;
|
|
99
|
+
if (actual !== expected) {
|
|
100
|
+
throw new Error(`mail.${method}() failed — expected ${expected} of ${arg.name}, found ${actual}.\n${describeCaptured(entries)}`);
|
|
101
|
+
}
|
|
47
102
|
}
|
|
48
103
|
}
|
|
104
|
+
function isMailConstructor(arg) {
|
|
105
|
+
return (typeof arg === "function" &&
|
|
106
|
+
typeof arg.prototype === "object" &&
|
|
107
|
+
arg.prototype instanceof BaseMail);
|
|
108
|
+
}
|
|
109
|
+
function cloneMessage(m) {
|
|
110
|
+
return {
|
|
111
|
+
from: m.from,
|
|
112
|
+
to: m.to.slice(),
|
|
113
|
+
cc: m.cc.slice(),
|
|
114
|
+
bcc: m.bcc.slice(),
|
|
115
|
+
replyTo: m.replyTo,
|
|
116
|
+
subject: m.subject,
|
|
117
|
+
html: m.html,
|
|
118
|
+
text: m.text,
|
|
119
|
+
attachments: m.attachments.slice(),
|
|
120
|
+
headers: { ...m.headers },
|
|
121
|
+
priority: m.priority,
|
|
122
|
+
messageId: m.messageId,
|
|
123
|
+
inReplyTo: m.inReplyTo,
|
|
124
|
+
references: m.references ? m.references.slice() : undefined,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
49
127
|
function makeMatcher(predicate) {
|
|
50
128
|
if (typeof predicate === "function")
|
|
51
129
|
return predicate;
|
|
@@ -84,7 +162,7 @@ function describePredicate(predicate) {
|
|
|
84
162
|
function describeCaptured(captured) {
|
|
85
163
|
if (captured.length === 0)
|
|
86
164
|
return "Captured: (none)";
|
|
87
|
-
const lines = captured.map((
|
|
165
|
+
const lines = captured.map((e, i) => ` [${i}] to=[${e.message.to.join(", ")}] subject="${e.message.subject}" from="${e.message.from}"`);
|
|
88
166
|
return `Captured (${captured.length}):\n${lines.join("\n")}`;
|
|
89
167
|
}
|
|
90
168
|
//# sourceMappingURL=FakeMail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeMail.js","sourceRoot":"","sources":["../../src/testing/FakeMail.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FakeMail.js","sourceRoot":"","sources":["../../src/testing/FakeMail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AA8B1C;;;;;;;GAOG;AACH,MAAM,OAAO,QAAQ;IACpB,KAAK,GAAc,EAAE,CAAC;IACtB,OAAO,GAAc,EAAE,CAAC;IAExB,8EAA8E;IAC9E,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,+EAA+E;IAC/E,SAAS,CAAC,OAAoB,EAAE,IAAe;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,OAAoB,EAAE,IAAe;QAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,OAAO;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,sDAAsD;IACtD,SAAS;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC;IAOD,UAAU,CACT,GAAqD,EACrD,MAAoC;QAEpC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAOD,aAAa,CACZ,GAAqD,EACrD,MAAoC;QAEpC,IAAI,CAAC,eAAe,CACnB,eAAe,EACf,MAAM,EACN,IAAI,CAAC,KAAK,EACV,GAAG,EACH,MAAM,EACN,KAAK,CACL,CAAC;IACH,CAAC;IAOD,YAAY,CACX,GAAqD,EACrD,MAAoC;QAEpC,IAAI,CAAC,eAAe,CACnB,cAAc,EACd,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,GAAG,EACH,MAAM,EACN,IAAI,CACJ,CAAC;IACH,CAAC;IAOD,eAAe,CACd,GAAqD,EACrD,MAAoC;QAEpC,IAAI,CAAC,eAAe,CACnB,iBAAiB,EACjB,QAAQ,EACR,IAAI,CAAC,OAAO,EACZ,GAAG,EACH,MAAM,EACN,KAAK,CACL,CAAC;IACH,CAAC;IAOD,eAAe,CACd,GAAuC,EACvC,KAAc;QAEd,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAOD,iBAAiB,CAChB,GAAuC,EACvC,KAAc;QAEd,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,cAAc;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACd,qEAAqE,IAAI,CAAC,KAAK,CAAC,MAAM,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC1H,CAAC;QACH,CAAC;IACF,CAAC;IAED,gBAAgB;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACd,yEAAyE,IAAI,CAAC,OAAO,CAAC,MAAM,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAClI,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,eAAe,CACd,MAAc,EACd,MAAc,EACd,OAAkB,EAClB,GAAqD,EACrD,MAAiD,EACjD,aAAsB;QAEtB,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,IAAI,CACZ,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,IAAI,KAAK,SAAS;gBACpB,CAAC,CAAC,IAAI,YAAY,GAAG;gBACrB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CACjC;YACF,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,KAAK,aAAa;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,kBAAkB,GAAG,CAAC,IAAI,EAAE;YAC9B,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa;YAC3B,CAAC,CAAC,MAAM,MAAM,oBAAoB,MAAM,EAAE;YAC1C,CAAC,CAAC,gBAAgB,MAAM,oBAAoB,MAAM,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACd,QAAQ,MAAM,eAAe,MAAM,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,CACpE,CAAC;IACH,CAAC;IAED,YAAY,CACX,MAAc,EACd,OAAkB,EAClB,GAAuC,EACvC,KAAyB;QAEzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACd,QAAQ,MAAM,wBAAwB,GAAG,WAAW,OAAO,CAAC,MAAM,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,CACnG,CAAC;YACH,CAAC;YACD,OAAO;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,YAAY,GAAG,CACpD,CAAC,MAAM,CAAC;QACT,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACd,QAAQ,MAAM,wBAAwB,QAAQ,OAAO,GAAG,CAAC,IAAI,WAAW,MAAM,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAC/G,CAAC;QACH,CAAC;IACF,CAAC;CACD;AAED,SAAS,iBAAiB,CACzB,GAAqD;IAErD,OAAO,CACN,OAAO,GAAG,KAAK,UAAU;QACzB,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QACjC,GAAG,CAAC,SAAS,YAAY,QAAQ,CACjC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,CAAc;IACnC,OAAO;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE;QAClC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;KAC3D,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CACnB,SAA+B;IAE/B,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,CAAC,GAAG,SAAS,CAAC;IACpB,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACd,8HAA8H,CAC9H,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC5D,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACrE,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QACrE,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;YAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;YACjD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;YACjD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA+B;IACzD,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,sBAAsB,CAAC;IACnE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAmB;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CACzB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACR,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CACnG,CAAC;IACF,OAAO,aAAa,QAAQ,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type MailMessage, type MailSendOutcome, type MailTransport } from "../Mail.js";
|
|
2
|
+
/**
|
|
3
|
+
* Brevo (formerly Sendinblue) transactional email transport. Talks to the
|
|
4
|
+
* `v3/smtp/email` REST API over `fetch`, mirroring the `@adonisjs/mail` Brevo
|
|
5
|
+
* transport. Same conventions as the other fetch-based transports (Resend /
|
|
6
|
+
* SES): CRLF stripping at the wire boundary, secret redaction, `retry-after`
|
|
7
|
+
* surfacing.
|
|
8
|
+
*/
|
|
9
|
+
export declare class BrevoTransport implements MailTransport {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(config: Record<string, unknown>);
|
|
12
|
+
send(message: MailMessage): Promise<MailSendOutcome>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=BrevoTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrevoTransport.d.ts","sourceRoot":"","sources":["../../src/transports/BrevoTransport.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,MAAM,YAAY,CAAC;AAmCpB;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,aAAa;;gBAIvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAqBrC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAmF1D"}
|