JavaScript Package
Learn how to use cside's JavaScript package for webhooks.
Installing the Package
First, install our webhooks package using the following command:
npm i @cside.dev/webhooksUsing the Package
import { constructEvent } from "@cside.dev/webhooks";
const rawBody = req.rawBody; // This is the raw body from the request, how you get this will depend on your HTTP framework
const signature = req.headers["x-cside-signature"]; // This will always be provided in the headers.
const event = await constructEvent({
rawBody,
signature,
secret: process.env.CSIDE_WEBHOOK_SECRET, // This is the webhook secret you were given when you created the webhook endpoint
});
switch (event.type) {
case "alert.created": {
const alert = webhookEvent.data;
// ^ entirely type safe
console.log({
type: alert.type,
domain: alert.domain,
target: alert.target,
action: alert.action,
});
}
}Examples
import Fastify from 'fastify';import { constructEvent } from "@cside.dev/webhooks";const fastify = Fastify({ logger: true });await fastify.register(import('@fastify/raw-body'), { field: 'rawBody', global: false, routes: ['/webhook']});fastify.post('/webhook', { config: { rawBody: true }}, async (request, reply) => { const signature = request.headers['x-cside-signature']; const webhookEvent = await constructEvent( request.rawBody, signature, process.env.CSIDE_WEBHOOK_SECRET!, ); switch (webhookEvent.event) { case "alert.created": { const alert = webhookEvent.data; console.log({ type: alert.type, domain: alert.domain, target: alert.target, action: alert.action, }); } }});import { createKaitoHandler, KaitoError } from "@kaito-http/core";import { constructEvent } from "@cside.dev/webhooks";const app = router() .get("/", async ({ ctx }) => { return { uptime: ctx.uptime, time_now: Date.now(), }; }) .post("/", async ({ ctx }) => { const signature = ctx.req.headers.get("x-cside-signature"); if (!signature) { throw new KaitoError(400, "Missing signature"); } const rawBody = await ctx.req.text(); const webhookEvent = await constructEvent( rawBody, signature, process.env.CSIDE_WEBHOOK_SECRET!, ); switch (webhookEvent.event) { case "alert.created": { const alert = webhookEvent.data; console.log({ type: alert.type, domain: alert.domain, target: alert.target, action: alert.action, }); } } return { message: "OK!", };});How is this doc?