/** * Receives POST from Hail Recon when a monitored address is hailed. * Stores the storm event in Vercel KV so /api/hail-status can serve it. * * Configure in Hail Recon dashboard: * Webhook URL: https://yourapp.vercel.app/api/hail-webhook?secret=YOUR_WEBHOOK_SECRET * * Requires Vercel KV to be connected for persistence. * Without KV: logs the event but auto Storm Mode won't trigger on next poll. */ export default async function handler(req, res) { if (req.method !== 'POST') { return res.status(405).json({ error: 'Method not allowed' }); } const secret = process.env.HAIL_RECON_WEBHOOK_SECRET; if (secret && req.query.secret !== secret) { return res.status(401).json({ error: 'Unauthorized' }); } const payload = req.body || {}; const stormEvent = { address: payload.address || payload.street || 'Unknown address', city: payload.city || '', state: payload.state || 'TX', zip: payload.zip || '', hailSize: payload.hailSize || payload.hail_size || payload.size || null, stormDate: payload.stormDate || payload.storm_date || payload.date || new Date().toISOString(), markerId: payload.markerId || payload.AddressMarker_id || null, receivedAt: Date.now(), }; try { const { kv } = await import('@vercel/kv'); await kv.set('lastStormEvent', stormEvent); console.log('[hail-webhook] Storm event stored in KV:', stormEvent); } catch { // KV not configured — log only, auto Storm Mode won't trigger console.log('[hail-webhook] KV unavailable. Event received but not persisted:', stormEvent); } return res.status(200).json({ ok: true, received: stormEvent }); }