@c9up/rover 0.1.3

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/BaseMail.d.ts +28 -0
  4. package/dist/BaseMail.d.ts.map +1 -0
  5. package/dist/BaseMail.js +42 -0
  6. package/dist/BaseMail.js.map +1 -0
  7. package/dist/Mail.d.ts +166 -0
  8. package/dist/Mail.d.ts.map +1 -0
  9. package/dist/Mail.js +451 -0
  10. package/dist/Mail.js.map +1 -0
  11. package/dist/MessageBuilder.d.ts +38 -0
  12. package/dist/MessageBuilder.d.ts.map +1 -0
  13. package/dist/MessageBuilder.js +70 -0
  14. package/dist/MessageBuilder.js.map +1 -0
  15. package/dist/RoverError.d.ts +30 -0
  16. package/dist/RoverError.d.ts.map +1 -0
  17. package/dist/RoverError.js +33 -0
  18. package/dist/RoverError.js.map +1 -0
  19. package/dist/RoverProvider.d.ts +24 -0
  20. package/dist/RoverProvider.d.ts.map +1 -0
  21. package/dist/RoverProvider.js +51 -0
  22. package/dist/RoverProvider.js.map +1 -0
  23. package/dist/config.d.ts +4 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +4 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +7 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/queue/MailJob.d.ts +41 -0
  32. package/dist/queue/MailJob.d.ts.map +1 -0
  33. package/dist/queue/MailJob.js +75 -0
  34. package/dist/queue/MailJob.js.map +1 -0
  35. package/dist/retry.d.ts +20 -0
  36. package/dist/retry.d.ts.map +1 -0
  37. package/dist/retry.js +101 -0
  38. package/dist/retry.js.map +1 -0
  39. package/dist/services/main.d.ts +20 -0
  40. package/dist/services/main.d.ts.map +1 -0
  41. package/dist/services/main.js +33 -0
  42. package/dist/services/main.js.map +1 -0
  43. package/dist/templating/SimpleTemplate.d.ts +7 -0
  44. package/dist/templating/SimpleTemplate.d.ts.map +1 -0
  45. package/dist/templating/SimpleTemplate.js +192 -0
  46. package/dist/templating/SimpleTemplate.js.map +1 -0
  47. package/dist/templating/loadNapi.d.ts +21 -0
  48. package/dist/templating/loadNapi.d.ts.map +1 -0
  49. package/dist/templating/loadNapi.js +115 -0
  50. package/dist/templating/loadNapi.js.map +1 -0
  51. package/dist/testing/FakeMail.d.ts +31 -0
  52. package/dist/testing/FakeMail.d.ts.map +1 -0
  53. package/dist/testing/FakeMail.js +90 -0
  54. package/dist/testing/FakeMail.js.map +1 -0
  55. package/dist/transports/MailgunTransport.d.ts +7 -0
  56. package/dist/transports/MailgunTransport.d.ts.map +1 -0
  57. package/dist/transports/MailgunTransport.js +149 -0
  58. package/dist/transports/MailgunTransport.js.map +1 -0
  59. package/dist/transports/ResendTransport.d.ts +7 -0
  60. package/dist/transports/ResendTransport.d.ts.map +1 -0
  61. package/dist/transports/ResendTransport.js +111 -0
  62. package/dist/transports/ResendTransport.js.map +1 -0
  63. package/dist/transports/SendGridTransport.d.ts +7 -0
  64. package/dist/transports/SendGridTransport.d.ts.map +1 -0
  65. package/dist/transports/SendGridTransport.js +165 -0
  66. package/dist/transports/SendGridTransport.js.map +1 -0
  67. package/dist/transports/SesTransport.d.ts +7 -0
  68. package/dist/transports/SesTransport.d.ts.map +1 -0
  69. package/dist/transports/SesTransport.js +334 -0
  70. package/dist/transports/SesTransport.js.map +1 -0
  71. package/dist/transports/fetchError.d.ts +13 -0
  72. package/dist/transports/fetchError.d.ts.map +1 -0
  73. package/dist/transports/fetchError.js +35 -0
  74. package/dist/transports/fetchError.js.map +1 -0
  75. package/dist/webhooks/context.d.ts +35 -0
  76. package/dist/webhooks/context.d.ts.map +1 -0
  77. package/dist/webhooks/context.js +7 -0
  78. package/dist/webhooks/context.js.map +1 -0
  79. package/dist/webhooks/mailgun.d.ts +13 -0
  80. package/dist/webhooks/mailgun.d.ts.map +1 -0
  81. package/dist/webhooks/mailgun.js +102 -0
  82. package/dist/webhooks/mailgun.js.map +1 -0
  83. package/dist/webhooks/resend.d.ts +16 -0
  84. package/dist/webhooks/resend.d.ts.map +1 -0
  85. package/dist/webhooks/resend.js +121 -0
  86. package/dist/webhooks/resend.js.map +1 -0
  87. package/dist/webhooks/sendgrid.d.ts +13 -0
  88. package/dist/webhooks/sendgrid.d.ts.map +1 -0
  89. package/dist/webhooks/sendgrid.js +104 -0
  90. package/dist/webhooks/sendgrid.js.map +1 -0
  91. package/index.darwin-arm64.node +0 -0
  92. package/index.darwin-x64.node +0 -0
  93. package/index.linux-arm64-gnu.node +0 -0
  94. package/index.linux-x64-gnu.node +0 -0
  95. package/index.win32-x64-msvc.node +0 -0
  96. package/package.json +97 -0
  97. package/scripts/copy-napi.mjs +62 -0
  98. package/src/BaseMail.ts +52 -0
  99. package/src/Mail.ts +663 -0
  100. package/src/MessageBuilder.ts +101 -0
  101. package/src/RoverError.ts +44 -0
  102. package/src/RoverProvider.ts +72 -0
  103. package/src/config.ts +7 -0
  104. package/src/index.ts +30 -0
  105. package/src/queue/MailJob.ts +131 -0
  106. package/src/retry.ts +135 -0
  107. package/src/services/main.ts +41 -0
  108. package/src/templating/SimpleTemplate.ts +240 -0
  109. package/src/templating/loadNapi.ts +169 -0
  110. package/src/testing/FakeMail.ts +112 -0
  111. package/src/transports/MailgunTransport.ts +204 -0
  112. package/src/transports/ResendTransport.ts +147 -0
  113. package/src/transports/SendGridTransport.ts +246 -0
  114. package/src/transports/SesTransport.ts +394 -0
  115. package/src/transports/fetchError.ts +42 -0
  116. package/src/webhooks/context.ts +41 -0
  117. package/src/webhooks/mailgun.ts +134 -0
  118. package/src/webhooks/resend.ts +164 -0
  119. package/src/webhooks/sendgrid.ts +133 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MailgunTransport.js","sourceRoot":"","sources":["../../src/transports/MailgunTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type MailMessage, type MailSendOutcome, type MailTransport } from "../Mail.js";
2
+ export declare class ResendTransport implements MailTransport {
3
+ #private;
4
+ constructor(config: Record<string, unknown>);
5
+ send(message: MailMessage): Promise<MailSendOutcome>;
6
+ }
7
+ //# sourceMappingURL=ResendTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResendTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ResendTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,MAAM,YAAY,CAAC;AAiCpB,qBAAa,eAAgB,YAAW,aAAa;;gBAGxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAarC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAwF1D"}
@@ -0,0 +1,111 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { RoverError } from "../RoverError.js";
3
+ import { registerTransport, } from "../Mail.js";
4
+ import { wrapFetchNetworkError } from "./fetchError.js";
5
+ const stripCrlf = (v) => v.replace(/[\r\n]/g, "");
6
+ const normalizeConfig = (v) => stripCrlf(v).trim();
7
+ const MAX_PROVIDER_MESSAGE = 16 * 1024;
8
+ const capMessage = (s) => s.length <= MAX_PROVIDER_MESSAGE
9
+ ? s
10
+ : `${s.slice(0, MAX_PROVIDER_MESSAGE)}...[truncated]`;
11
+ /** Redact Basic/Bearer tokens if the upstream echoes our own request headers. */
12
+ const redactSecrets = (s) => s
13
+ .replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/g, "Bearer [REDACTED]")
14
+ .replace(/Basic\s+[A-Za-z0-9+/=]+/g, "Basic [REDACTED]");
15
+ export class ResendTransport {
16
+ #apiKey;
17
+ constructor(config) {
18
+ const apiKey = typeof config.apiKey === "string" ? normalizeConfig(config.apiKey) : "";
19
+ if (!apiKey) {
20
+ throw new RoverError("MAIL_PROVIDER_CONFIG", "Resend transport requires apiKey", { hint: "Set { apiKey } in your mail config." });
21
+ }
22
+ this.#apiKey = apiKey;
23
+ }
24
+ async send(message) {
25
+ if (message.to.length === 0 &&
26
+ message.cc.length === 0 &&
27
+ message.bcc.length === 0) {
28
+ throw new RoverError("MAIL_PROVIDER_CONFIG", "Mail message has no recipients", { hint: "Set at least one `to`, `cc`, or `bcc` before sending." });
29
+ }
30
+ const body = {
31
+ from: stripCrlf(message.from),
32
+ to: message.to.map(stripCrlf),
33
+ subject: stripCrlf(message.subject),
34
+ };
35
+ if (message.cc.length)
36
+ body.cc = message.cc.map(stripCrlf);
37
+ if (message.bcc.length)
38
+ body.bcc = message.bcc.map(stripCrlf);
39
+ if (message.replyTo)
40
+ body.reply_to = stripCrlf(message.replyTo);
41
+ if (message.html)
42
+ body.html = message.html;
43
+ if (message.text)
44
+ body.text = message.text;
45
+ if (message.attachments.length > 0) {
46
+ body.attachments = message.attachments.map((att) => {
47
+ const buf = Buffer.from(att.content);
48
+ return {
49
+ filename: stripCrlf(att.filename),
50
+ content: buf.toString("base64"),
51
+ content_type: att.contentType
52
+ ? stripCrlf(att.contentType)
53
+ : undefined,
54
+ };
55
+ });
56
+ }
57
+ const customHeaders = Object.entries(message.headers);
58
+ if (customHeaders.length > 0) {
59
+ body.headers = {};
60
+ for (const [k, v] of customHeaders) {
61
+ body.headers[stripCrlf(k)] = stripCrlf(v);
62
+ }
63
+ }
64
+ // fetch() rejections (DNS / TCP / TLS / socket reset) bypass the
65
+ // !res.ok branch entirely. Wrap them so retry classification can
66
+ // pick up the underlying errno (top-level `.code` for legacy
67
+ // shims, `.cause.code` for Node's built-in undici).
68
+ let res;
69
+ try {
70
+ res = await fetch("https://api.resend.com/emails", {
71
+ method: "POST",
72
+ headers: {
73
+ Authorization: `Bearer ${this.#apiKey}`,
74
+ "Content-Type": "application/json",
75
+ },
76
+ body: JSON.stringify(body),
77
+ });
78
+ }
79
+ catch (err) {
80
+ throw wrapFetchNetworkError("resend", err);
81
+ }
82
+ if (!res.ok) {
83
+ const providerMessage = redactSecrets(capMessage(await res.text()));
84
+ const retryAfter = res.headers.get("retry-after") ?? undefined;
85
+ const ctx = {
86
+ provider: "resend",
87
+ upstreamStatus: String(res.status),
88
+ providerMessage,
89
+ };
90
+ if (retryAfter)
91
+ ctx.retryAfter = retryAfter;
92
+ throw new RoverError("MAIL_PROVIDER_ERROR", `Resend returned ${res.status}`, {
93
+ hint: "Inspect `context.upstreamStatus` to decide retry eligibility. `context.retryAfter` (when set) carries the provider's backoff hint in seconds.",
94
+ context: ctx,
95
+ });
96
+ }
97
+ // Success: Resend returns `{ id: "<uuid>" }` per API docs.
98
+ try {
99
+ const body = (await res.json());
100
+ if (typeof body.id === "string" && body.id.length > 0) {
101
+ return { providerId: body.id };
102
+ }
103
+ }
104
+ catch {
105
+ // Empty body or non-JSON — fall back to generated id.
106
+ }
107
+ return;
108
+ }
109
+ }
110
+ registerTransport("resend", (config) => new ResendTransport(config));
111
+ //# sourceMappingURL=ResendTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResendTransport.js","sourceRoot":"","sources":["../../src/transports/ResendTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type MailMessage, type MailSendOutcome, type MailTransport } from "../Mail.js";
2
+ export declare class SendGridTransport implements MailTransport {
3
+ #private;
4
+ constructor(config: Record<string, unknown>);
5
+ send(message: MailMessage): Promise<MailSendOutcome>;
6
+ }
7
+ //# sourceMappingURL=SendGridTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendGridTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SendGridTransport.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,MAAM,YAAY,CAAC;AAiCpB,qBAAa,iBAAkB,YAAW,aAAa;;gBAG1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA6BrC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CA4D1D"}
@@ -0,0 +1,165 @@
1
+ import { RoverError } from "../RoverError.js";
2
+ import sgMail from "@sendgrid/mail";
3
+ import { registerTransport, } from "../Mail.js";
4
+ const stripCrlf = (v) => v.replace(/[\r\n]/g, "");
5
+ const normalizeConfig = (v) => stripCrlf(v).trim();
6
+ const MAX_PROVIDER_MESSAGE = 16 * 1024;
7
+ const capMessage = (s) => s.length <= MAX_PROVIDER_MESSAGE
8
+ ? s
9
+ : `${s.slice(0, MAX_PROVIDER_MESSAGE)}...[truncated]`;
10
+ const redactSecrets = (s) => s
11
+ .replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/g, "Bearer [REDACTED]")
12
+ .replace(/Basic\s+[A-Za-z0-9+/=]+/g, "Basic [REDACTED]");
13
+ export class SendGridTransport {
14
+ #client;
15
+ constructor(config) {
16
+ const apiKey = typeof config.apiKey === "string" ? normalizeConfig(config.apiKey) : "";
17
+ if (!apiKey) {
18
+ throw new RoverError("MAIL_PROVIDER_CONFIG", "SendGrid transport requires apiKey", { hint: "Set { apiKey } in your mail config." });
19
+ }
20
+ // Dependency injection for tests — stronger guard than the old version
21
+ // (require both `send` AND `setApiKey` to pass through).
22
+ const injected = config._client;
23
+ if (injected &&
24
+ typeof injected === "object" &&
25
+ typeof injected.send === "function" &&
26
+ typeof injected.setApiKey === "function") {
27
+ this.#client = injected;
28
+ }
29
+ else {
30
+ // Per-instance MailService (not the shared `sgMail` singleton) so
31
+ // `setApiKey` can't race across multiple transports.
32
+ this.#client = new (resolveMailServiceCtor(sgMail))();
33
+ }
34
+ this.#client.setApiKey(apiKey);
35
+ }
36
+ async send(message) {
37
+ assertHasRecipients(message);
38
+ const content = buildSendGridContent(message);
39
+ // CRLF stripping at the wire boundary (defence-in-depth, matches the
40
+ // Dev Notes anti-pattern: never trust the SDK to handle it).
41
+ const data = {
42
+ from: stripCrlf(message.from),
43
+ to: message.to.map(stripCrlf),
44
+ subject: stripCrlf(message.subject),
45
+ content,
46
+ ...(message.cc.length ? { cc: message.cc.map(stripCrlf) } : {}),
47
+ ...(message.bcc.length ? { bcc: message.bcc.map(stripCrlf) } : {}),
48
+ ...(message.replyTo ? { replyTo: stripCrlf(message.replyTo) } : {}),
49
+ ...(Object.keys(message.headers).length
50
+ ? {
51
+ headers: Object.fromEntries(Object.entries(message.headers).map(([k, v]) => [
52
+ stripCrlf(k),
53
+ stripCrlf(v),
54
+ ])),
55
+ }
56
+ : {}),
57
+ ...(message.attachments.length
58
+ ? {
59
+ attachments: message.attachments.map((att) => {
60
+ const entry = {
61
+ filename: stripCrlf(att.filename),
62
+ content: Buffer.from(att.content).toString("base64"),
63
+ disposition: "attachment",
64
+ };
65
+ if (att.contentType)
66
+ entry.type = stripCrlf(att.contentType);
67
+ return entry;
68
+ }),
69
+ }
70
+ : {}),
71
+ };
72
+ try {
73
+ const result = await this.#client.send(data);
74
+ // Guard against non-standard SDK responses: `[]`, `[undefined]`, etc.
75
+ const response = Array.isArray(result) ? result[0] : undefined;
76
+ const msgId = response?.headers?.["x-message-id"];
77
+ const idStr = Array.isArray(msgId) ? msgId[0] : msgId;
78
+ if (idStr && typeof idStr === "string" && idStr.length > 0) {
79
+ return { providerId: idStr };
80
+ }
81
+ return undefined;
82
+ }
83
+ catch (err) {
84
+ throw wrapSendGridError(err);
85
+ }
86
+ }
87
+ }
88
+ function assertHasRecipients(message) {
89
+ if (message.to.length === 0 &&
90
+ message.cc.length === 0 &&
91
+ message.bcc.length === 0) {
92
+ throw new RoverError("MAIL_PROVIDER_CONFIG", "Mail message has no recipients", { hint: "Set at least one `to`, `cc`, or `bcc` before sending." });
93
+ }
94
+ }
95
+ /**
96
+ * Build the SendGrid v3 `content[]`: text/plain when text is set, text/html when
97
+ * html is set, always at least one entry (SendGrid rejects empty content). The
98
+ * non-empty tuple type lets the SDK's MailDataRequired see `content[0]` exists.
99
+ */
100
+ function buildSendGridContent(message) {
101
+ const first = message.text
102
+ ? { type: "text/plain", value: message.text }
103
+ : message.html
104
+ ? { type: "text/html", value: message.html }
105
+ : { type: "text/plain", value: "" };
106
+ const rest = [];
107
+ if (message.text && message.html) {
108
+ rest.push({ type: "text/html", value: message.html });
109
+ }
110
+ return [first, ...rest];
111
+ }
112
+ function wrapSendGridError(err) {
113
+ if (err instanceof RoverError)
114
+ return err;
115
+ // @sendgrid/mail throws `{ code, message, response: { body, headers, statusCode } }`
116
+ const anyErr = err;
117
+ const statusFromResponse = anyErr.response?.statusCode;
118
+ const statusFromCode = Number(anyErr.code);
119
+ const status = Number.isFinite(statusFromResponse)
120
+ ? statusFromResponse
121
+ : Number.isFinite(statusFromCode)
122
+ ? statusFromCode
123
+ : 0;
124
+ const body = anyErr.response?.body;
125
+ const providerMessage = redactSecrets(capMessage(typeof body === "string"
126
+ ? body
127
+ : body !== undefined
128
+ ? JSON.stringify(body)
129
+ : (anyErr.message ?? "unknown")));
130
+ const ctx = {
131
+ provider: "sendgrid",
132
+ upstreamStatus: String(status),
133
+ providerMessage,
134
+ };
135
+ if (typeof anyErr.code === "string") {
136
+ ctx.networkCode = anyErr.code;
137
+ }
138
+ const retryAfter = anyErr.response?.headers?.["retry-after"];
139
+ if (retryAfter)
140
+ ctx.retryAfter = retryAfter;
141
+ return new RoverError("MAIL_PROVIDER_ERROR", `SendGrid returned ${status || "unknown"}`, {
142
+ hint: "Inspect `context.upstreamStatus` (HTTP) or `context.networkCode` (ECONNRESET/etc.) to decide retry eligibility. `context.retryAfter` (when set) carries the provider's backoff hint in seconds.",
143
+ context: ctx,
144
+ });
145
+ }
146
+ /**
147
+ * Type-guard resolver for the `MailService` constructor attached to the
148
+ * module's default export at runtime. The cerebrum forbids `as unknown as T`;
149
+ * here we receive `sgMail` through a parameter typed `unknown`, narrow with
150
+ * runtime `typeof` checks, and return a single cast to a precise callable
151
+ * type. No double-cast chain, no `as unknown` anchor.
152
+ */
153
+ function resolveMailServiceCtor(mod) {
154
+ if (mod && typeof mod === "object" && "MailService" in mod) {
155
+ const candidate = mod.MailService;
156
+ if (typeof candidate === "function") {
157
+ return candidate;
158
+ }
159
+ }
160
+ throw new RoverError("MAIL_PROVIDER_CONFIG", "@sendgrid/mail runtime does not expose `.MailService` — upgrade to v8+", {
161
+ hint: "Expected `module.exports.MailService` to be the MailService class (index.js attaches it).",
162
+ });
163
+ }
164
+ registerTransport("sendgrid", (config) => new SendGridTransport(config));
165
+ //# sourceMappingURL=SendGridTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendGridTransport.js","sourceRoot":"","sources":["../../src/transports/SendGridTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type MailMessage, type MailSendOutcome, type MailTransport } from "../Mail.js";
2
+ export declare class SesTransport implements MailTransport {
3
+ #private;
4
+ constructor(config: Record<string, unknown>);
5
+ send(message: MailMessage): Promise<MailSendOutcome>;
6
+ }
7
+ //# sourceMappingURL=SesTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SesTransport.d.ts","sourceRoot":"","sources":["../../src/transports/SesTransport.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,MAAM,YAAY,CAAC;AAoCpB,qBAAa,YAAa,YAAW,aAAa;;gBAMrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAmCrC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CA6G1D"}