import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'; import { createEdgeFunction, type EdgeFunctionContext } from '../_shared/edgeFunctionWrapper.ts'; import { corsHeaders } from '../_shared/cors.ts'; import { addSpanEvent } from '../_shared/logger.ts'; interface EmailRequest { email: string; displayName?: string; username?: string; } const handler = async (req: Request, { user, span, requestId }: EdgeFunctionContext) => { const { email, displayName, username }: EmailRequest = await req.json(); if (!email) { throw new Error('Email is required'); } addSpanEvent(span, 'sending_password_email', { userId: user.id, email }); const recipientName = displayName || username || 'there'; const siteUrl = Deno.env.get('SITE_URL') || 'https://thrillwiki.com'; const emailHTML = `

Password Successfully Added

Hi ${recipientName},

Great news! A password has been successfully added to your ThrillWiki account (${email}).

✅ What This Means

You now have an additional way to access your account. You can sign in using:

🔐 Complete Your Setup

Important: To complete your password setup, you need to confirm your email address.

  1. Check your inbox for a confirmation email from ThrillWiki
  2. Click the confirmation link in that email
  3. Return to the sign-in page and log in with your email and password
Go to Sign In Page

Note: You must confirm your email before you can sign in with your password.

⚠️ Security Notice
If you didn't add a password to your account, please contact our support team immediately at support@thrillwiki.com

Thanks for being part of the ThrillWiki community!

Best regards,
The ThrillWiki Team

`; const forwardEmailKey = Deno.env.get('FORWARDEMAIL_API_KEY'); const fromEmail = Deno.env.get('FROM_EMAIL_ADDRESS') || 'noreply@thrillwiki.com'; if (!forwardEmailKey) { addSpanEvent(span, 'email_config_missing', {}); throw new Error('Email service not configured'); } const emailResponse = await fetch('https://api.forwardemail.net/v1/emails', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Basic ${btoa(forwardEmailKey + ':')}`, }, body: JSON.stringify({ from: fromEmail, to: email, subject: 'Password Added to Your ThrillWiki Account', html: emailHTML, }), }); if (!emailResponse.ok) { const errorText = await emailResponse.text(); addSpanEvent(span, 'email_send_failed', { status: emailResponse.status, error: errorText }); throw new Error(`Failed to send email: ${emailResponse.statusText}`); } addSpanEvent(span, 'email_sent_successfully', { email }); return { success: true, message: 'Password addition email sent successfully', }; }; serve(createEdgeFunction({ name: 'send-password-added-email', requireAuth: true, corsHeaders, enableTracing: true, logRequests: true, }, handler));