0.0.4 • Published 2 years ago

express-webhook-gateway v0.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

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