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 } from '@sveltejs/kit'
|
||
|
||
export const POST = (async ({ request }) => {
|
||
const data = await request.json()
|
||
const { email } = data
|
||
console.log('server:', data, email)
|
||
|
||
// 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' })
|
||
}
|
||
|
||
// 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.text()
|
||
console.log('server:', res)
|
||
return new Response(res)
|
||
|
||
// Other error
|
||
if (res && res.status !== 'PENDING') {
|
||
throw error(400, { message: res.error.code })
|
||
}
|
||
|
||
return new Response(JSON.stringify({
|
||
success: true,
|
||
message: res.status,
|
||
}))
|
||
}) satisfies RequestHandler |