express-webhook-gateway v0.0.4
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-gateway
Usage
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