@growth-labs/mailer 0.5.0 → 0.6.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.
Files changed (45) hide show
  1. package/README.md +28 -0
  2. package/dist/index.d.ts +5 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +14 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/options.d.ts +89 -0
  7. package/dist/options.d.ts.map +1 -1
  8. package/dist/options.js +5 -0
  9. package/dist/options.js.map +1 -1
  10. package/dist/queue/consumer.d.ts +12 -2
  11. package/dist/queue/consumer.d.ts.map +1 -1
  12. package/dist/queue/consumer.js +66 -0
  13. package/dist/queue/consumer.js.map +1 -1
  14. package/dist/schema/sends.d.ts +38 -0
  15. package/dist/schema/sends.d.ts.map +1 -1
  16. package/dist/schema/sends.js +2 -0
  17. package/dist/schema/sends.js.map +1 -1
  18. package/dist/types.d.ts +22 -1
  19. package/dist/types.d.ts.map +1 -1
  20. package/dist/utils/broadcast.d.ts +12 -0
  21. package/dist/utils/broadcast.d.ts.map +1 -1
  22. package/dist/utils/broadcast.js +7 -1
  23. package/dist/utils/broadcast.js.map +1 -1
  24. package/dist/utils/delivery-claim.d.ts +37 -0
  25. package/dist/utils/delivery-claim.d.ts.map +1 -0
  26. package/dist/utils/delivery-claim.js +46 -0
  27. package/dist/utils/delivery-claim.js.map +1 -0
  28. package/dist/utils/send.d.ts.map +1 -1
  29. package/dist/utils/send.js +6 -0
  30. package/dist/utils/send.js.map +1 -1
  31. package/dist/vite-plugin.d.ts +5 -3
  32. package/dist/vite-plugin.d.ts.map +1 -1
  33. package/dist/vite-plugin.js +4 -2
  34. package/dist/vite-plugin.js.map +1 -1
  35. package/migrations/0003_add_delivery_claim_to_email_sends.sql +8 -0
  36. package/package.json +3 -3
  37. package/src/index.ts +22 -4
  38. package/src/options.ts +9 -0
  39. package/src/queue/consumer.ts +116 -2
  40. package/src/schema/sends.ts +2 -0
  41. package/src/types.ts +23 -0
  42. package/src/utils/broadcast.ts +7 -1
  43. package/src/utils/delivery-claim.ts +66 -0
  44. package/src/utils/send.ts +6 -0
  45. package/src/vite-plugin.ts +7 -8
package/src/utils/send.ts CHANGED
@@ -93,6 +93,7 @@ export async function sendTransactional(
93
93
  const signingSecret = params.subscriberId ? await requireSigningSecret(env, options) : undefined
94
94
  const { sendsDb, queue } = resolveProducerBindings(env, options)
95
95
  const trackingId = ulid()
96
+ const deliveryToken = ulid()
96
97
  const subscriberId = params.subscriberId ?? ulid()
97
98
 
98
99
  // Render HTML
@@ -123,6 +124,7 @@ export async function sendTransactional(
123
124
  type: 'transactional',
124
125
  status: 'queued',
125
126
  trackingId,
127
+ deliveryToken,
126
128
  createdAt: new Date().toISOString(),
127
129
  })
128
130
 
@@ -137,6 +139,7 @@ export async function sendTransactional(
137
139
  trackingId,
138
140
  unsubscribeToken: '',
139
141
  preferencesToken: '',
142
+ deliveryToken,
140
143
  },
141
144
  ],
142
145
  subject: params.subject,
@@ -178,6 +181,7 @@ async function fanOutToSubscribers(
178
181
  const recipients: QueueRecipient[] = []
179
182
  for (const sub of batch) {
180
183
  const trackingId = ulid()
184
+ const deliveryToken = ulid()
181
185
  const unsubscribeToken = await generateToken(signingSecret, {
182
186
  subscriberId: sub.id,
183
187
  action: 'unsubscribe',
@@ -199,6 +203,7 @@ async function fanOutToSubscribers(
199
203
  type: params.type,
200
204
  status: 'queued',
201
205
  trackingId,
206
+ deliveryToken,
202
207
  createdAt: new Date().toISOString(),
203
208
  })
204
209
 
@@ -208,6 +213,7 @@ async function fanOutToSubscribers(
208
213
  trackingId,
209
214
  unsubscribeToken,
210
215
  preferencesToken,
216
+ deliveryToken,
211
217
  })
212
218
  }
213
219
 
@@ -1,22 +1,21 @@
1
1
  import type { Plugin } from 'vite'
2
- import type { ResolvedMailerOptions } from './options.js'
2
+ import type { ResolvedMailerComponentsOptions, ResolvedMailerOptions } from './options.js'
3
+
4
+ type MailerConfig = ResolvedMailerOptions | ResolvedMailerComponentsOptions
3
5
 
4
6
  const VIRTUAL_MODULE_ID = 'virtual:growth-labs/mailer/config'
5
7
  const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`
6
8
 
7
- export function renderMailerConfigModule(
8
- config: ResolvedMailerOptions,
9
- command: 'build' | 'serve',
10
- ): string {
9
+ export function renderMailerConfigModule(config: MailerConfig, command: 'build' | 'serve'): string {
11
10
  const serializableConfig = { ...config }
12
11
  if (command !== 'serve') {
13
- delete serializableConfig.turnstileSecretKey
14
- delete serializableConfig.signingSecret
12
+ if ('turnstileSecretKey' in serializableConfig) delete serializableConfig.turnstileSecretKey
13
+ if ('signingSecret' in serializableConfig) delete serializableConfig.signingSecret
15
14
  }
16
15
  return `export const config = ${JSON.stringify(serializableConfig)};`
17
16
  }
18
17
 
19
- export function growthLabsMailerPlugin(config: ResolvedMailerOptions): Plugin {
18
+ export function growthLabsMailerPlugin(config: MailerConfig): Plugin {
20
19
  let command: 'build' | 'serve' = 'build'
21
20
 
22
21
  return {