@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.
Files changed (45) hide show
  1. package/dist/BaseMail.d.ts +11 -0
  2. package/dist/BaseMail.d.ts.map +1 -1
  3. package/dist/BaseMail.js +18 -1
  4. package/dist/BaseMail.js.map +1 -1
  5. package/dist/Mail.d.ts +58 -23
  6. package/dist/Mail.d.ts.map +1 -1
  7. package/dist/Mail.js +88 -39
  8. package/dist/Mail.js.map +1 -1
  9. package/dist/MessageBuilder.d.ts +107 -9
  10. package/dist/MessageBuilder.d.ts.map +1 -1
  11. package/dist/MessageBuilder.js +151 -16
  12. package/dist/MessageBuilder.js.map +1 -1
  13. package/dist/index.d.ts +3 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/transports/BrevoTransport.d.ts.map +1 -1
  18. package/dist/transports/BrevoTransport.js +3 -2
  19. package/dist/transports/BrevoTransport.js.map +1 -1
  20. package/dist/transports/MailgunTransport.d.ts.map +1 -1
  21. package/dist/transports/MailgunTransport.js +3 -2
  22. package/dist/transports/MailgunTransport.js.map +1 -1
  23. package/dist/transports/ResendTransport.d.ts.map +1 -1
  24. package/dist/transports/ResendTransport.js +3 -2
  25. package/dist/transports/ResendTransport.js.map +1 -1
  26. package/dist/transports/SendGridTransport.d.ts.map +1 -1
  27. package/dist/transports/SendGridTransport.js +8 -5
  28. package/dist/transports/SendGridTransport.js.map +1 -1
  29. package/dist/transports/SesTransport.js +9 -2
  30. package/dist/transports/SesTransport.js.map +1 -1
  31. package/dist/transports/SparkPostTransport.d.ts.map +1 -1
  32. package/dist/transports/SparkPostTransport.js +3 -2
  33. package/dist/transports/SparkPostTransport.js.map +1 -1
  34. package/index.win32-x64-msvc.node +0 -0
  35. package/package.json +1 -1
  36. package/src/BaseMail.ts +19 -1
  37. package/src/Mail.ts +139 -63
  38. package/src/MessageBuilder.ts +211 -17
  39. package/src/index.ts +4 -1
  40. package/src/transports/BrevoTransport.ts +3 -2
  41. package/src/transports/MailgunTransport.ts +3 -2
  42. package/src/transports/ResendTransport.ts +3 -2
  43. package/src/transports/SendGridTransport.ts +8 -5
  44. package/src/transports/SesTransport.ts +9 -2
  45. 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, v] of customHeaders) {
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, v] of Object.entries(message.headers)) {
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, v] of customHeaders) {
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, v]) => [
95
- stripCrlf(k),
96
- Array.isArray(v) ? v.map(stripCrlf).join(", ") : stripCrlf(v),
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, v] of Object.entries(message.headers)) {
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(v) ? v.join(", ") : v)}`,
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, v] of Object.entries(message.headers)) {
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);