Files
juls07.dev/supabase/functions/newsletter/index.ts

37 lines
1.2 KiB
TypeScript

// Follow this setup guide to integrate the Deno language server with your editor:
// https://deno.land/manual/getting_started/setup_your_environment
// This enables autocomplete, go to definition, etc.
import { serve } from "https://deno.land/std@0.131.0/http/server.ts"
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'
console.log("Hello from functions!")
const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
serve(async (req) => {
if (req.method === 'OPTIONS') {
return new Response('ok')
}
const supabase = createClient(Deno.env.get('SUPABASE_URL'), Deno.env.get('SUPABASE_ANON_KEY'))
const { email, name } = await req.json()
if (!email || !emailRegex.test(email)) throw new Error(
'Please provide a valid email address or name'
)
const name = email.split('@')[0]
const { data, error } = await supabase
.from('subscribers')
.upsert({ name: name, email: email })
.select()
if (error) throw new Error(error.message)
return new Response(
JSON.stringify(data),
{ headers: { "Content-Type": "application/json" } },
)
})