@growth-labs/mailer 0.6.5 → 0.7.0

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/options.d.ts CHANGED
@@ -3,18 +3,18 @@ import type { SiteConfigLookup } from './types.js';
3
3
  export declare const mailerOptionsSchema: z.ZodObject<{
4
4
  siteId: z.ZodString;
5
5
  senderName: z.ZodString;
6
- fromAddress: z.ZodString;
7
- replyTo: z.ZodOptional<z.ZodString>;
6
+ fromAddress: z.ZodEmail;
7
+ replyTo: z.ZodOptional<z.ZodEmail>;
8
8
  d1Binding: z.ZodDefault<z.ZodString>;
9
9
  sendsD1Binding: z.ZodOptional<z.ZodString>;
10
10
  queueBinding: z.ZodDefault<z.ZodString>;
11
11
  senderBinding: z.ZodDefault<z.ZodString>;
12
- siteConfigLookup: z.ZodOptional<z.ZodType<SiteConfigLookup, z.ZodTypeDef, SiteConfigLookup>>;
12
+ siteConfigLookup: z.ZodOptional<z.ZodCustom<SiteConfigLookup, SiteConfigLookup>>;
13
13
  turnstileSiteKey: z.ZodString;
14
14
  turnstileSecretBinding: z.ZodDefault<z.ZodString>;
15
15
  turnstileSecretKey: z.ZodOptional<z.ZodString>;
16
16
  doubleOptIn: z.ZodDefault<z.ZodBoolean>;
17
- topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
17
+ topics: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
18
  signingSecretBinding: z.ZodDefault<z.ZodString>;
19
19
  signingSecret: z.ZodOptional<z.ZodString>;
20
20
  subscribePath: z.ZodDefault<z.ZodString>;
@@ -22,244 +22,38 @@ export declare const mailerOptionsSchema: z.ZodObject<{
22
22
  unsubscribePath: z.ZodDefault<z.ZodString>;
23
23
  preferencesPath: z.ZodDefault<z.ZodString>;
24
24
  webhookPath: z.ZodDefault<z.ZodString>;
25
- webhookSignature: z.ZodDefault<z.ZodDiscriminatedUnion<"enabled", [z.ZodObject<{
25
+ webhookSignature: z.ZodPrefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
26
26
  enabled: z.ZodLiteral<false>;
27
27
  header: z.ZodDefault<z.ZodString>;
28
28
  timestampHeader: z.ZodDefault<z.ZodString>;
29
29
  toleranceSeconds: z.ZodDefault<z.ZodNumber>;
30
- }, "strip", z.ZodTypeAny, {
31
- enabled: false;
32
- header: string;
33
- timestampHeader: string;
34
- toleranceSeconds: number;
35
- }, {
36
- enabled: false;
37
- header?: string | undefined;
38
- timestampHeader?: string | undefined;
39
- toleranceSeconds?: number | undefined;
40
- }>, z.ZodObject<{
30
+ }, z.core.$strip>, z.ZodObject<{
41
31
  enabled: z.ZodLiteral<true>;
42
32
  secret: z.ZodString;
43
33
  header: z.ZodDefault<z.ZodString>;
44
34
  timestampHeader: z.ZodDefault<z.ZodString>;
45
35
  toleranceSeconds: z.ZodDefault<z.ZodNumber>;
46
- }, "strip", z.ZodTypeAny, {
47
- enabled: true;
48
- header: string;
49
- timestampHeader: string;
50
- toleranceSeconds: number;
51
- secret: string;
52
- }, {
53
- enabled: true;
54
- secret: string;
55
- header?: string | undefined;
56
- timestampHeader?: string | undefined;
57
- toleranceSeconds?: number | undefined;
58
- }>]>>;
36
+ }, z.core.$strip>], "enabled">>;
59
37
  trackOpenPath: z.ZodDefault<z.ZodString>;
60
38
  trackClickPath: z.ZodDefault<z.ZodString>;
61
- siteUrl: z.ZodString;
62
- brand: z.ZodDefault<z.ZodObject<{
63
- logoUrl: z.ZodOptional<z.ZodString>;
39
+ siteUrl: z.ZodURL;
40
+ brand: z.ZodPrefault<z.ZodObject<{
41
+ logoUrl: z.ZodOptional<z.ZodURL>;
64
42
  primaryColor: z.ZodDefault<z.ZodString>;
65
43
  accentColor: z.ZodDefault<z.ZodString>;
66
44
  footerText: z.ZodOptional<z.ZodString>;
67
- }, "strip", z.ZodTypeAny, {
68
- primaryColor: string;
69
- accentColor: string;
70
- logoUrl?: string | undefined;
71
- footerText?: string | undefined;
72
- }, {
73
- logoUrl?: string | undefined;
74
- primaryColor?: string | undefined;
75
- accentColor?: string | undefined;
76
- footerText?: string | undefined;
77
- }>>;
45
+ }, z.core.$strip>>;
78
46
  batchSize: z.ZodDefault<z.ZodNumber>;
79
47
  analyticsEnabled: z.ZodDefault<z.ZodBoolean>;
80
48
  analyticsBinding: z.ZodDefault<z.ZodString>;
81
- }, "strip", z.ZodTypeAny, {
82
- senderName: string;
83
- siteUrl: string;
84
- brand: {
85
- primaryColor: string;
86
- accentColor: string;
87
- logoUrl?: string | undefined;
88
- footerText?: string | undefined;
89
- };
90
- siteId: string;
91
- fromAddress: string;
92
- d1Binding: string;
93
- queueBinding: string;
94
- senderBinding: string;
95
- turnstileSiteKey: string;
96
- turnstileSecretBinding: string;
97
- doubleOptIn: boolean;
98
- signingSecretBinding: string;
99
- subscribePath: string;
100
- confirmPath: string;
101
- unsubscribePath: string;
102
- preferencesPath: string;
103
- webhookPath: string;
104
- webhookSignature: {
105
- enabled: false;
106
- header: string;
107
- timestampHeader: string;
108
- toleranceSeconds: number;
109
- } | {
110
- enabled: true;
111
- header: string;
112
- timestampHeader: string;
113
- toleranceSeconds: number;
114
- secret: string;
115
- };
116
- trackOpenPath: string;
117
- trackClickPath: string;
118
- batchSize: number;
119
- analyticsEnabled: boolean;
120
- analyticsBinding: string;
121
- replyTo?: string | undefined;
122
- sendsD1Binding?: string | undefined;
123
- siteConfigLookup?: SiteConfigLookup | undefined;
124
- turnstileSecretKey?: string | undefined;
125
- topics?: string[] | undefined;
126
- signingSecret?: string | undefined;
127
- }, {
128
- senderName: string;
129
- siteUrl: string;
130
- siteId: string;
131
- fromAddress: string;
132
- turnstileSiteKey: string;
133
- brand?: {
134
- logoUrl?: string | undefined;
135
- primaryColor?: string | undefined;
136
- accentColor?: string | undefined;
137
- footerText?: string | undefined;
138
- } | undefined;
139
- replyTo?: string | undefined;
140
- d1Binding?: string | undefined;
141
- sendsD1Binding?: string | undefined;
142
- queueBinding?: string | undefined;
143
- senderBinding?: string | undefined;
144
- siteConfigLookup?: SiteConfigLookup | undefined;
145
- turnstileSecretBinding?: string | undefined;
146
- turnstileSecretKey?: string | undefined;
147
- doubleOptIn?: boolean | undefined;
148
- topics?: string[] | undefined;
149
- signingSecretBinding?: string | undefined;
150
- signingSecret?: string | undefined;
151
- subscribePath?: string | undefined;
152
- confirmPath?: string | undefined;
153
- unsubscribePath?: string | undefined;
154
- preferencesPath?: string | undefined;
155
- webhookPath?: string | undefined;
156
- webhookSignature?: {
157
- enabled: false;
158
- header?: string | undefined;
159
- timestampHeader?: string | undefined;
160
- toleranceSeconds?: number | undefined;
161
- } | {
162
- enabled: true;
163
- secret: string;
164
- header?: string | undefined;
165
- timestampHeader?: string | undefined;
166
- toleranceSeconds?: number | undefined;
167
- } | undefined;
168
- trackOpenPath?: string | undefined;
169
- trackClickPath?: string | undefined;
170
- batchSize?: number | undefined;
171
- analyticsEnabled?: boolean | undefined;
172
- analyticsBinding?: string | undefined;
173
- }>;
49
+ }, z.core.$strip>;
174
50
  export type MailerOptions = z.input<typeof mailerOptionsSchema>;
175
51
  export type ResolvedMailerOptions = z.output<typeof mailerOptionsSchema>;
176
- export declare const mailerComponentsOptionsSchema: z.ZodObject<Pick<{
177
- siteId: z.ZodString;
178
- senderName: z.ZodString;
179
- fromAddress: z.ZodString;
180
- replyTo: z.ZodOptional<z.ZodString>;
181
- d1Binding: z.ZodDefault<z.ZodString>;
182
- sendsD1Binding: z.ZodOptional<z.ZodString>;
183
- queueBinding: z.ZodDefault<z.ZodString>;
184
- senderBinding: z.ZodDefault<z.ZodString>;
185
- siteConfigLookup: z.ZodOptional<z.ZodType<SiteConfigLookup, z.ZodTypeDef, SiteConfigLookup>>;
52
+ export declare const mailerComponentsOptionsSchema: z.ZodObject<{
186
53
  turnstileSiteKey: z.ZodString;
187
- turnstileSecretBinding: z.ZodDefault<z.ZodString>;
188
- turnstileSecretKey: z.ZodOptional<z.ZodString>;
189
- doubleOptIn: z.ZodDefault<z.ZodBoolean>;
190
- topics: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
191
- signingSecretBinding: z.ZodDefault<z.ZodString>;
192
- signingSecret: z.ZodOptional<z.ZodString>;
54
+ topics: z.ZodOptional<z.ZodArray<z.ZodString>>;
193
55
  subscribePath: z.ZodDefault<z.ZodString>;
194
- confirmPath: z.ZodDefault<z.ZodString>;
195
- unsubscribePath: z.ZodDefault<z.ZodString>;
196
- preferencesPath: z.ZodDefault<z.ZodString>;
197
- webhookPath: z.ZodDefault<z.ZodString>;
198
- webhookSignature: z.ZodDefault<z.ZodDiscriminatedUnion<"enabled", [z.ZodObject<{
199
- enabled: z.ZodLiteral<false>;
200
- header: z.ZodDefault<z.ZodString>;
201
- timestampHeader: z.ZodDefault<z.ZodString>;
202
- toleranceSeconds: z.ZodDefault<z.ZodNumber>;
203
- }, "strip", z.ZodTypeAny, {
204
- enabled: false;
205
- header: string;
206
- timestampHeader: string;
207
- toleranceSeconds: number;
208
- }, {
209
- enabled: false;
210
- header?: string | undefined;
211
- timestampHeader?: string | undefined;
212
- toleranceSeconds?: number | undefined;
213
- }>, z.ZodObject<{
214
- enabled: z.ZodLiteral<true>;
215
- secret: z.ZodString;
216
- header: z.ZodDefault<z.ZodString>;
217
- timestampHeader: z.ZodDefault<z.ZodString>;
218
- toleranceSeconds: z.ZodDefault<z.ZodNumber>;
219
- }, "strip", z.ZodTypeAny, {
220
- enabled: true;
221
- header: string;
222
- timestampHeader: string;
223
- toleranceSeconds: number;
224
- secret: string;
225
- }, {
226
- enabled: true;
227
- secret: string;
228
- header?: string | undefined;
229
- timestampHeader?: string | undefined;
230
- toleranceSeconds?: number | undefined;
231
- }>]>>;
232
- trackOpenPath: z.ZodDefault<z.ZodString>;
233
- trackClickPath: z.ZodDefault<z.ZodString>;
234
- siteUrl: z.ZodString;
235
- brand: z.ZodDefault<z.ZodObject<{
236
- logoUrl: z.ZodOptional<z.ZodString>;
237
- primaryColor: z.ZodDefault<z.ZodString>;
238
- accentColor: z.ZodDefault<z.ZodString>;
239
- footerText: z.ZodOptional<z.ZodString>;
240
- }, "strip", z.ZodTypeAny, {
241
- primaryColor: string;
242
- accentColor: string;
243
- logoUrl?: string | undefined;
244
- footerText?: string | undefined;
245
- }, {
246
- logoUrl?: string | undefined;
247
- primaryColor?: string | undefined;
248
- accentColor?: string | undefined;
249
- footerText?: string | undefined;
250
- }>>;
251
- batchSize: z.ZodDefault<z.ZodNumber>;
252
- analyticsEnabled: z.ZodDefault<z.ZodBoolean>;
253
- analyticsBinding: z.ZodDefault<z.ZodString>;
254
- }, "turnstileSiteKey" | "topics" | "subscribePath">, "strict", z.ZodTypeAny, {
255
- turnstileSiteKey: string;
256
- subscribePath: string;
257
- topics?: string[] | undefined;
258
- }, {
259
- turnstileSiteKey: string;
260
- topics?: string[] | undefined;
261
- subscribePath?: string | undefined;
262
- }>;
56
+ }, z.core.$strict>;
263
57
  export type MailerComponentsOptions = z.input<typeof mailerComponentsOptionsSchema>;
264
58
  export type ResolvedMailerComponentsOptions = z.output<typeof mailerComponentsOptionsSchema>;
265
59
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqF9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIxE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhC,CAAA;AAEV,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqF9B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAIxE,eAAO,MAAM,6BAA6B;;;;kBAEhC,CAAA;AAEV,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAA"}
package/dist/options.js CHANGED
@@ -3,9 +3,9 @@ export const mailerOptionsSchema = z.object({
3
3
  // ─── Required ───
4
4
  siteId: z.string().min(1),
5
5
  senderName: z.string(),
6
- fromAddress: z.string().email(),
6
+ fromAddress: z.email(),
7
7
  // ─── Reply-to ───
8
- replyTo: z.string().email().optional(),
8
+ replyTo: z.email().optional(),
9
9
  // ─── Cloudflare bindings ───
10
10
  d1Binding: z.string().default('SITE_DB'),
11
11
  // D1 binding holding gl_email_sends (the send-record table). Defaults to
@@ -49,7 +49,7 @@ export const mailerOptionsSchema = z.object({
49
49
  toleranceSeconds: z.number().min(0).default(300),
50
50
  }),
51
51
  ])
52
- .default({
52
+ .prefault({
53
53
  enabled: false,
54
54
  header: 'x-gl-mailer-signature',
55
55
  timestampHeader: 'x-gl-mailer-timestamp',
@@ -58,16 +58,16 @@ export const mailerOptionsSchema = z.object({
58
58
  // ─── Tracking ───
59
59
  trackOpenPath: z.string().default('/api/email/open'),
60
60
  trackClickPath: z.string().default('/api/email/click'),
61
- siteUrl: z.string().url(),
61
+ siteUrl: z.url(),
62
62
  // ─── Branding (for built-in templates) ───
63
63
  brand: z
64
64
  .object({
65
- logoUrl: z.string().url().optional(),
65
+ logoUrl: z.url().optional(),
66
66
  primaryColor: z.string().default('#1a365d'),
67
67
  accentColor: z.string().default('#e53e3e'),
68
68
  footerText: z.string().optional(),
69
69
  })
70
- .default({}),
70
+ .prefault({}),
71
71
  // ─── Queue batching ───
72
72
  batchSize: z.number().min(1).max(500).default(100),
73
73
  // ─── Optional peer: analytics ───
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@growth-labs/mailer",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
@@ -81,7 +81,7 @@
81
81
  "dependencies": {
82
82
  "drizzle-orm": "^0.45.2",
83
83
  "ulidx": "^2.4.0",
84
- "zod": "^3.23.0"
84
+ "zod": "^4.6.7"
85
85
  },
86
86
  "devDependencies": {
87
87
  "@cloudflare/workers-types": "^4.20260402.1",
package/src/options.ts CHANGED
@@ -5,10 +5,10 @@ export const mailerOptionsSchema = z.object({
5
5
  // ─── Required ───
6
6
  siteId: z.string().min(1),
7
7
  senderName: z.string(),
8
- fromAddress: z.string().email(),
8
+ fromAddress: z.email(),
9
9
 
10
10
  // ─── Reply-to ───
11
- replyTo: z.string().email().optional(),
11
+ replyTo: z.email().optional(),
12
12
 
13
13
  // ─── Cloudflare bindings ───
14
14
  d1Binding: z.string().default('SITE_DB'),
@@ -58,7 +58,7 @@ export const mailerOptionsSchema = z.object({
58
58
  toleranceSeconds: z.number().min(0).default(300),
59
59
  }),
60
60
  ])
61
- .default({
61
+ .prefault({
62
62
  enabled: false,
63
63
  header: 'x-gl-mailer-signature',
64
64
  timestampHeader: 'x-gl-mailer-timestamp',
@@ -68,17 +68,17 @@ export const mailerOptionsSchema = z.object({
68
68
  // ─── Tracking ───
69
69
  trackOpenPath: z.string().default('/api/email/open'),
70
70
  trackClickPath: z.string().default('/api/email/click'),
71
- siteUrl: z.string().url(),
71
+ siteUrl: z.url(),
72
72
 
73
73
  // ─── Branding (for built-in templates) ───
74
74
  brand: z
75
75
  .object({
76
- logoUrl: z.string().url().optional(),
76
+ logoUrl: z.url().optional(),
77
77
  primaryColor: z.string().default('#1a365d'),
78
78
  accentColor: z.string().default('#e53e3e'),
79
79
  footerText: z.string().optional(),
80
80
  })
81
- .default({}),
81
+ .prefault({}),
82
82
 
83
83
  // ─── Queue batching ───
84
84
  batchSize: z.number().min(1).max(500).default(100),