express-webhook-gateway
v0.0.4
Published
Serverless Webhook Gateway for Express and Firebase
Maintainers
Readme
Express Webhook Gateway
Webhook Gateway allows sharing events and webhooks between services. Developed in NodeJS Express framework and designed to run on Firebase Functions.
Stack:
- Google Firestore for logging events, storing clients and services data.
- Google PubSub + listeners running on Google Cloud Functions to process calls and events.
Use cases
Webhook Gateway was primarily developer to:
- Share events between micro-services, for example where the billing service needs to know that that payment service processed payment.
- Share events between internal and external services, for example where the external tracking system needs to know about new users.
Installation
npm i express-webhook-gatewayUsage
const functions = require("firebase-functions");
const express = require('express');
const app = express();
app.use(express.json());
const gateway = require('express-webhook-gateway');
app.use('/webhook', gateway.routes);
exports.onCall = gateway.pubsub.onCall;
exports.onEvent = gateway.pubsub.onEvent;
exports.webhooks = functions.https.onRequest(app);Creating client
Client endpoint can receive events from webhooks gateways. To add a new client, add to Firestore collection webhookgateway_clients new document with random id (client id) and payload:
{
"secret": "[random secret key]",
"url": "[https://client/endpoints]"
}Creating a subscription
To start receiving events posted on channels, client subscription must be created. To create a new channel subscription, add to collection webhookgateway_subscriptions new document with random id (subscription id) and payload:
{
"channel": "service.event.name",
"client": {
"id": "[client id]",
}
}Creating service
Services can send events to Webhook Gateway. To create a new service, add to collection webhookgateway_services a document with service name as id, and payload:
{
"secret": "[secret]"
}Security
Each event is signed with a signature generated from the secret to verify the origin. Events are not encrypted unless sent to the https endpoint (recommended).
Limitations
- Firestore 10k events or calls per second, 1 MiB event size.
- PubSub 120GB of events, and 120GB of calls per minute.
- Cloud Functions 1000 events per second
