41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { NEWSLETTER_API_TOKEN, NEWSLETTER_LIST_ID } from '$env/static/private'
|
||
import type { RequestHandler } from './$types'
|
||
import { error, json } from '@sveltejs/kit'
|
||
|
||
export const POST = (async ({ request, fetch }) => {
|
||
const data: { email: string } = await request.json()
|
||
const { email } = data
|
||
|
||
// No email
|
||
if (!email) {
|
||
throw error(400, { message: 'NO_EMAIL' })
|
||
}
|
||
// Invalid email
|
||
if (!email.match(/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)) {
|
||
throw error(400, { message: 'INVALID_EMAIL' })
|
||
}
|
||
|
||
// return json(email)
|
||
|
||
// Newsletter API request
|
||
const req = await fetch(`https://emailoctopus.com/api/1.6/lists/${NEWSLETTER_LIST_ID}/contacts`, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
api_key: NEWSLETTER_API_TOKEN,
|
||
email_address: email,
|
||
})
|
||
})
|
||
const res = await req.json()
|
||
console.log('server API response:', res)
|
||
|
||
// Other error
|
||
if (res && res.status !== 'PENDING') {
|
||
throw error(400, { message: res.error.code })
|
||
}
|
||
|
||
return json({
|
||
success: true,
|
||
message: res.status,
|
||
})
|
||
}) satisfies RequestHandler |