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/webhooks

Using 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?

On this page