Webhook handler
Handle webhook events in your application.
Express.js example
import express from "express";
import { Conduit } from "@mappa-ai/conduit";
const app = express();
const conduit = new Conduit({ apiKey: process.env.CONDUIT_API_KEY! });
app.post("/webhooks/conduit", express.json(), (req, res) => {
// Verify signature
const signature = req.headers["x-conduit-signature"] as string;
const isValid = conduit.webhooks.verify(req.body, signature, {
secret: process.env.CONDUIT_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
import os
from fastapi import FastAPI, Request, HTTPException
from conduit import Conduit
app = FastAPI()
conduit = Conduit(api_key=os.environ["CONDUIT_API_KEY"])
@app.post("/webhooks/conduit")
async def handle_webhook(request: Request):
payload = (await request.body()).decode()
try:
conduit.webhooks.verify_signature(
payload,
request.headers,
os.environ["CONDUIT_WEBHOOK_SECRET"],
)
except Exception as exc:
raise HTTPException(status_code=401, detail=str(exc)) from exc
event = conduit.webhooks.parse_event(payload)
if event.type == "report.completed":
report = conduit.reports.get(event.data["reportId"])
print(f"Report ready: {report.id}")
return {"received": True}