@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.
- package/README.md +28 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +89 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +5 -0
- package/dist/options.js.map +1 -1
- package/dist/queue/consumer.d.ts +12 -2
- package/dist/queue/consumer.d.ts.map +1 -1
- package/dist/queue/consumer.js +66 -0
- package/dist/queue/consumer.js.map +1 -1
- package/dist/schema/sends.d.ts +38 -0
- package/dist/schema/sends.d.ts.map +1 -1
- package/dist/schema/sends.js +2 -0
- package/dist/schema/sends.js.map +1 -1
- package/dist/types.d.ts +22 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/broadcast.d.ts +12 -0
- package/dist/utils/broadcast.d.ts.map +1 -1
- package/dist/utils/broadcast.js +7 -1
- package/dist/utils/broadcast.js.map +1 -1
- package/dist/utils/delivery-claim.d.ts +37 -0
- package/dist/utils/delivery-claim.d.ts.map +1 -0
- package/dist/utils/delivery-claim.js +46 -0
- package/dist/utils/delivery-claim.js.map +1 -0
- package/dist/utils/send.d.ts.map +1 -1
- package/dist/utils/send.js +6 -0
- package/dist/utils/send.js.map +1 -1
- package/dist/vite-plugin.d.ts +5 -3
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +4 -2
- package/dist/vite-plugin.js.map +1 -1
- package/migrations/0003_add_delivery_claim_to_email_sends.sql +8 -0
- package/package.json +3 -3
- package/src/index.ts +22 -4
- package/src/options.ts +9 -0
- package/src/queue/consumer.ts +116 -2
- package/src/schema/sends.ts +2 -0
- package/src/types.ts +23 -0
- package/src/utils/broadcast.ts +7 -1
- package/src/utils/delivery-claim.ts +66 -0
- package/src/utils/send.ts +6 -0
- 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
|
|
package/src/vite-plugin.ts
CHANGED
|
@@ -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:
|
|
18
|
+
export function growthLabsMailerPlugin(config: MailerConfig): Plugin {
|
|
20
19
|
let command: 'build' | 'serve' = 'build'
|
|
21
20
|
|
|
22
21
|
return {
|