@c9up/rover 0.1.9 → 0.1.10
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/BaseMail.d.ts +11 -0
- package/dist/BaseMail.d.ts.map +1 -1
- package/dist/BaseMail.js +18 -1
- package/dist/BaseMail.js.map +1 -1
- package/dist/Mail.d.ts +58 -23
- package/dist/Mail.d.ts.map +1 -1
- package/dist/Mail.js +88 -39
- package/dist/Mail.js.map +1 -1
- package/dist/MessageBuilder.d.ts +107 -9
- package/dist/MessageBuilder.d.ts.map +1 -1
- package/dist/MessageBuilder.js +151 -16
- package/dist/MessageBuilder.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/transports/BrevoTransport.d.ts.map +1 -1
- package/dist/transports/BrevoTransport.js +3 -2
- package/dist/transports/BrevoTransport.js.map +1 -1
- package/dist/transports/MailgunTransport.d.ts.map +1 -1
- package/dist/transports/MailgunTransport.js +3 -2
- package/dist/transports/MailgunTransport.js.map +1 -1
- package/dist/transports/ResendTransport.d.ts.map +1 -1
- package/dist/transports/ResendTransport.js +3 -2
- package/dist/transports/ResendTransport.js.map +1 -1
- package/dist/transports/SendGridTransport.d.ts.map +1 -1
- package/dist/transports/SendGridTransport.js +8 -5
- package/dist/transports/SendGridTransport.js.map +1 -1
- package/dist/transports/SesTransport.js +9 -2
- package/dist/transports/SesTransport.js.map +1 -1
- package/dist/transports/SparkPostTransport.d.ts.map +1 -1
- package/dist/transports/SparkPostTransport.js +3 -2
- package/dist/transports/SparkPostTransport.js.map +1 -1
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
- package/src/BaseMail.ts +19 -1
- package/src/Mail.ts +139 -63
- package/src/MessageBuilder.ts +211 -17
- package/src/index.ts +4 -1
- package/src/transports/BrevoTransport.ts +3 -2
- package/src/transports/MailgunTransport.ts +3 -2
- package/src/transports/ResendTransport.ts +3 -2
- package/src/transports/SendGridTransport.ts +8 -5
- package/src/transports/SesTransport.ts +9 -2
- package/src/transports/SparkPostTransport.ts +3 -2
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type MailTransport,
|
|
6
6
|
registerTransport,
|
|
7
7
|
} from "../Mail.js";
|
|
8
|
-
import { attachmentsFor } from "../MessageBuilder.js";
|
|
8
|
+
import { attachmentsFor, headerValue } from "../MessageBuilder.js";
|
|
9
9
|
import { RoverError } from "../RoverError.js";
|
|
10
10
|
import { fetchWithTimeout, wrapFetchNetworkError } from "./fetchError.js";
|
|
11
11
|
|
|
@@ -99,7 +99,8 @@ export class BrevoTransport implements MailTransport {
|
|
|
99
99
|
const customHeaders = Object.entries(message.headers);
|
|
100
100
|
if (customHeaders.length > 0) {
|
|
101
101
|
body.headers = {};
|
|
102
|
-
for (const [k,
|
|
102
|
+
for (const [k, raw] of customHeaders) {
|
|
103
|
+
const v = headerValue(raw);
|
|
103
104
|
body.headers[stripCrlf(k)] = Array.isArray(v)
|
|
104
105
|
? v.map(stripCrlf).join(", ")
|
|
105
106
|
: stripCrlf(v);
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type MailTransport,
|
|
8
8
|
registerTransport,
|
|
9
9
|
} from "../Mail.js";
|
|
10
|
-
import { attachmentsFor } from "../MessageBuilder.js";
|
|
10
|
+
import { attachmentsFor, headerValue } from "../MessageBuilder.js";
|
|
11
11
|
import { RoverError } from "../RoverError.js";
|
|
12
12
|
|
|
13
13
|
const stripCrlf = (v: string): string => v.replace(/[\r\n]/g, "");
|
|
@@ -128,7 +128,8 @@ export class MailgunTransport implements MailTransport {
|
|
|
128
128
|
if (message.text) data.text = message.text;
|
|
129
129
|
if (message.html) data.html = message.html;
|
|
130
130
|
if (message.replyTo) data["h:Reply-To"] = stripCrlf(message.replyTo);
|
|
131
|
-
for (const [k,
|
|
131
|
+
for (const [k, raw] of Object.entries(message.headers)) {
|
|
132
|
+
const v = headerValue(raw);
|
|
132
133
|
data[`h:${stripCrlf(k)}`] = Array.isArray(v)
|
|
133
134
|
? v.map(stripCrlf).join(", ")
|
|
134
135
|
: stripCrlf(v);
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type MailTransport,
|
|
6
6
|
registerTransport,
|
|
7
7
|
} from "../Mail.js";
|
|
8
|
-
import { attachmentsFor } from "../MessageBuilder.js";
|
|
8
|
+
import { attachmentsFor, headerValue } from "../MessageBuilder.js";
|
|
9
9
|
import { RoverError } from "../RoverError.js";
|
|
10
10
|
import { fetchWithTimeout, wrapFetchNetworkError } from "./fetchError.js";
|
|
11
11
|
|
|
@@ -92,7 +92,8 @@ export class ResendTransport implements MailTransport {
|
|
|
92
92
|
const customHeaders = Object.entries(message.headers);
|
|
93
93
|
if (customHeaders.length > 0) {
|
|
94
94
|
body.headers = {};
|
|
95
|
-
for (const [k,
|
|
95
|
+
for (const [k, raw] of customHeaders) {
|
|
96
|
+
const v = headerValue(raw);
|
|
96
97
|
body.headers[stripCrlf(k)] = Array.isArray(v)
|
|
97
98
|
? v.map(stripCrlf).join(", ")
|
|
98
99
|
: stripCrlf(v);
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
type MailTransport,
|
|
9
9
|
registerTransport,
|
|
10
10
|
} from "../Mail.js";
|
|
11
|
-
import { attachmentsFor } from "../MessageBuilder.js";
|
|
11
|
+
import { attachmentsFor, headerValue } from "../MessageBuilder.js";
|
|
12
12
|
import { RoverError } from "../RoverError.js";
|
|
13
13
|
|
|
14
14
|
const stripCrlf = (v: string): string => v.replace(/[\r\n]/g, "");
|
|
@@ -91,10 +91,13 @@ export class SendGridTransport implements MailTransport {
|
|
|
91
91
|
...(Object.keys(message.headers).length
|
|
92
92
|
? {
|
|
93
93
|
headers: Object.fromEntries(
|
|
94
|
-
Object.entries(message.headers).map(([k,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
Object.entries(message.headers).map(([k, raw]) => {
|
|
95
|
+
const v = headerValue(raw);
|
|
96
|
+
return [
|
|
97
|
+
stripCrlf(k),
|
|
98
|
+
Array.isArray(v) ? v.map(stripCrlf).join(", ") : stripCrlf(v),
|
|
99
|
+
];
|
|
100
|
+
}),
|
|
98
101
|
),
|
|
99
102
|
}
|
|
100
103
|
: {}),
|
|
@@ -281,10 +281,17 @@ function buildRawMime(message: MailMessage): string {
|
|
|
281
281
|
"content-transfer-encoding",
|
|
282
282
|
"content-disposition",
|
|
283
283
|
]);
|
|
284
|
-
for (const [k,
|
|
284
|
+
for (const [k, raw] of Object.entries(message.headers)) {
|
|
285
285
|
if (reserved.has(k.toLowerCase())) continue;
|
|
286
|
+
// A PREPARED header is the one case the flag actually decides: this
|
|
287
|
+
// builds raw MIME, and re-encoding a value that is already exactly what
|
|
288
|
+
// must go on the wire — a signature, a pre-encoded id — corrupts it.
|
|
289
|
+
if (!Array.isArray(raw) && typeof raw !== "string") {
|
|
290
|
+
parts.push(`${stripCrlf(k)}: ${stripCrlf(raw.value)}`);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
286
293
|
parts.push(
|
|
287
|
-
`${stripCrlf(k)}: ${encodeHeaderWord(Array.isArray(
|
|
294
|
+
`${stripCrlf(k)}: ${encodeHeaderWord(Array.isArray(raw) ? raw.join(", ") : raw)}`,
|
|
288
295
|
);
|
|
289
296
|
}
|
|
290
297
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
type MailTransport,
|
|
6
6
|
registerTransport,
|
|
7
7
|
} from "../Mail.js";
|
|
8
|
-
import { attachmentsFor } from "../MessageBuilder.js";
|
|
8
|
+
import { attachmentsFor, headerValue } from "../MessageBuilder.js";
|
|
9
9
|
import { RoverError } from "../RoverError.js";
|
|
10
10
|
import { fetchWithTimeout, wrapFetchNetworkError } from "./fetchError.js";
|
|
11
11
|
|
|
@@ -103,7 +103,8 @@ export class SparkPostTransport implements MailTransport {
|
|
|
103
103
|
if (message.text) body.content.text = message.text;
|
|
104
104
|
if (message.replyTo) body.content.reply_to = stripCrlf(message.replyTo);
|
|
105
105
|
const headers: Record<string, string> = {};
|
|
106
|
-
for (const [k,
|
|
106
|
+
for (const [k, raw] of Object.entries(message.headers)) {
|
|
107
|
+
const v = headerValue(raw);
|
|
107
108
|
headers[stripCrlf(k)] = Array.isArray(v)
|
|
108
109
|
? v.map(stripCrlf).join(", ")
|
|
109
110
|
: stripCrlf(v);
|