Webhook handler
Handle webhook events in your application.
Express.js example
import express from "express";
import { Mappa } from "@mappa-ai/mappa-node";
const app = express();
const mappa = new Mappa({ apiKey: process.env.MAPPA_API_KEY! });
app.post("/webhooks/mappa", express.json(), (req, res) => {
// Verify signature
const signature = req.headers["x-mappa-signature"] as string;
const isValid = mappa.webhooks.verify(req.body, signature, {
secret: process.env.MAPPA_WEBHOOK_SECRET!,
});
if (!isValid) {
return res.status(401).json({ error: "Invalid signature" });
}
// Handle event
const { event, data } = req.body;
switch (event) {
case "job.completed":
console.info(`Job ${data.jobId} completed`);
// Process the completed report
break;
case "job.failed":
console.error(`Job ${data.jobId} failed: ${data.error}`);
// Handle failure
break;
case "job.canceled":
console.info(`Job ${data.jobId} was canceled`);
break;
default:
console.warn(`Unknown event: ${event}`);
}
res.status(200).json({ received: true });
});
app.listen(3000);
FastAPI example
from fastapi import FastAPI, Request, HTTPException
from mappa import Mappa
app = FastAPI()
mappa = Mappa(api_key=os.environ["MAPPA_API_KEY"])
@app.post("/webhooks/mappa")
async def handle_webhook(request: Request):
signature = request.headers.get("x-mappa-signature")
payload = await request.json()
if not mappa.webhooks.verify(payload, signature, secret=os.environ["MAPPA_WEBHOOK_SECRET"]):
raise HTTPException(status_code=401, detail="Invalid signature")
event = payload["event"]
data = payload["data"]
if event == "job.completed":
print(f"Job {data['jobId']} completed")
elif event == "job.failed":
print(f"Job {data['jobId']} failed: {data['error']}")
return {"received": True}