@growth-labs/mailer 0.4.10 → 0.4.11

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 CHANGED
@@ -108,6 +108,7 @@ dataset = "your_analytics_dataset"
108
108
  - Turnstile on subscribe endpoint (+ IP rate limiting as backup)
109
109
  - Provider failover logged for observability
110
110
  - WAE events via the configured Analytics Engine binding — fire-and-forget, non-blocking, and compatible with bindings whose `writeDataPoint()` returns `void`
111
+ - Cloudflare Email Sending uses the current structured `html` payload and forwards `replyTo` plus custom headers to the binding
111
112
  - `.astro` component files ship as source, not compiled
112
113
 
113
114
  ## Analytics Events
@@ -4,11 +4,10 @@ export interface CloudflareEmailSender {
4
4
  to: string;
5
5
  from: string;
6
6
  subject: string;
7
- content: {
8
- type: string;
9
- value: string;
10
- }[];
11
- }): Promise<void>;
7
+ html: string;
8
+ replyTo?: string;
9
+ headers?: Record<string, string>;
10
+ }): Promise<unknown>;
12
11
  }
13
12
  export declare class CloudflareEmailProvider implements EmailProvider {
14
13
  readonly name = "cloudflare";
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI3E,MAAM,WAAW,qBAAqB;IACrC,IAAI,CAAC,OAAO,EAAE;QACb,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB;AAID,qBAAa,uBAAwB,YAAW,aAAa;IAC5D,QAAQ,CAAC,IAAI,gBAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,WAAW,EAAE,qBAAqB;IAIxC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;CAqBrD;AAID,wBAAgB,WAAW,CAAC,WAAW,EAAE,qBAAqB,GAAG,aAAa,CAE7E;AAID,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI3E,MAAM,WAAW,qBAAqB;IACrC,IAAI,CAAC,OAAO,EAAE;QACb,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACpB;AAID,qBAAa,uBAAwB,YAAW,aAAa;IAC5D,QAAQ,CAAC,IAAI,gBAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,WAAW,EAAE,qBAAqB;IAIxC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;CA6BrD;AAID,wBAAgB,WAAW,CAAC,WAAW,EAAE,qBAAqB,GAAG,aAAa,CAE7E;AAID,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
@@ -7,12 +7,19 @@ export class CloudflareEmailProvider {
7
7
  }
8
8
  async send(email) {
9
9
  try {
10
- await this.sender.send({
10
+ const message = {
11
11
  to: email.to,
12
12
  from: email.from,
13
13
  subject: email.subject,
14
- content: [{ type: 'text/html', value: email.html }],
15
- });
14
+ html: email.html,
15
+ };
16
+ if (email.replyTo) {
17
+ message.replyTo = email.replyTo;
18
+ }
19
+ if (email.headers && Object.keys(email.headers).length > 0) {
20
+ message.headers = email.headers;
21
+ }
22
+ await this.sender.send(message);
16
23
  return { success: true, retryable: false };
17
24
  }
18
25
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAaA,kCAAkC;AAElC,MAAM,OAAO,uBAAuB;IAC1B,IAAI,GAAG,YAAY,CAAA;IACX,MAAM,CAAuB;IAE9C,YAAY,WAAkC;QAC7C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAoB;QAC9B,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;aACnD,CAAC,CAAA;YAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;YAEnD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,WAAW;aACtB,CAAA;QACF,CAAC;IACF,CAAC;CACD;AAED,2BAA2B;AAE3B,MAAM,UAAU,WAAW,CAAC,WAAkC;IAC7D,OAAO,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAA;AAChD,CAAC;AAED,kBAAkB;AAElB,MAAM,UAAU,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAC9C,MAAM,QAAQ,GAAG;QAChB,SAAS;QACT,SAAS;QACT,cAAc;QACd,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,GAAG;QACH,cAAc;QACd,qBAAqB;QACrB,iBAAiB;KACjB,CAAA;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAeA,kCAAkC;AAElC,MAAM,OAAO,uBAAuB;IAC1B,IAAI,GAAG,YAAY,CAAA;IACX,MAAM,CAAuB;IAE9C,YAAY,WAAkC;QAC7C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAoB;QAC9B,IAAI,CAAC;YACJ,MAAM,OAAO,GAAiD;gBAC7D,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;aAChB,CAAA;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAChC,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;YAChC,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAE/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;YAEnD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,WAAW;aACtB,CAAA;QACF,CAAC;IACF,CAAC;CACD;AAED,2BAA2B;AAE3B,MAAM,UAAU,WAAW,CAAC,WAAkC;IAC7D,OAAO,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAA;AAChD,CAAC;AAED,kBAAkB;AAElB,MAAM,UAAU,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;IAC9C,MAAM,QAAQ,GAAG;QAChB,SAAS;QACT,SAAS;QACT,cAAc;QACd,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,GAAG;QACH,cAAc;QACd,qBAAqB;QACrB,iBAAiB;KACjB,CAAA;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/mailer",
3
- "version": "0.4.10",
3
+ "version": "0.4.11",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
@@ -7,8 +7,10 @@ export interface CloudflareEmailSender {
7
7
  to: string
8
8
  from: string
9
9
  subject: string
10
- content: { type: string; value: string }[]
11
- }): Promise<void>
10
+ html: string
11
+ replyTo?: string
12
+ headers?: Record<string, string>
13
+ }): Promise<unknown>
12
14
  }
13
15
 
14
16
  // ─── CloudflareEmailProvider ───
@@ -23,12 +25,20 @@ export class CloudflareEmailProvider implements EmailProvider {
23
25
 
24
26
  async send(email: OutboundEmail): Promise<SendResult> {
25
27
  try {
26
- await this.sender.send({
28
+ const message: Parameters<CloudflareEmailSender['send']>[0] = {
27
29
  to: email.to,
28
30
  from: email.from,
29
31
  subject: email.subject,
30
- content: [{ type: 'text/html', value: email.html }],
31
- })
32
+ html: email.html,
33
+ }
34
+ if (email.replyTo) {
35
+ message.replyTo = email.replyTo
36
+ }
37
+ if (email.headers && Object.keys(email.headers).length > 0) {
38
+ message.headers = email.headers
39
+ }
40
+
41
+ await this.sender.send(message)
32
42
 
33
43
  return { success: true, retryable: false }
34
44
  } catch (err) {