# express-webhook-gateway

> Serverless Webhook Gateway for Express and Firebase

Latest version **0.0.4** (published 2022-01-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install express-webhook-gateway
pnpm add express-webhook-gateway
yarn add express-webhook-gateway
bun add express-webhook-gateway
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.4 |
| Published | 2022-01-05 |
| First published | 2021-12-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 9 |
| Unpacked size | 11.2 KB |
| Known vulnerabilities | 0 (+25 in 3 direct dependencies) |
| Install scripts | no |
| Author | Michal Slowik |
| Maintainers | sl0wik |
| Keywords | express, webhook, webhooks, server, service, firebase |

## Links

- npm: https://www.npmjs.com/package/express-webhook-gateway
- npm.io page: https://npm.io/package/express-webhook-gateway

## Dependencies (9)

- [ajv](https://npm.io/package/ajv.md) ^8.8.2
- [uuid](https://npm.io/package/uuid.md) ^8.3.2
- [axios](https://npm.io/package/axios.md) ^0.21.1
- [express](https://npm.io/package/express.md) ^4.17.2
- [crypto-js](https://npm.io/package/crypto-js.md) ^4.1.1
- [firebase-admin](https://npm.io/package/firebase-admin.md) ^9.2.0
- [firebase-functions](https://npm.io/package/firebase-functions.md) ^3.11.0
- [@google-cloud/pubsub](https://npm.io/package/@google-cloud/pubsub.md) ^2.18.4
- [@google-cloud/firestore](https://npm.io/package/@google-cloud/firestore.md) ^5.0.1

## Recent versions

- 0.0.4 (latest) — 2022-01-05
- 0.0.3 — 2022-01-03
- 0.0.2 — 2021-12-28
- 0.0.1 — 2021-12-28

## 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-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](https://firebase.google.com/docs/firestore/quotas#limits) 10k events or calls per second, 1 MiB event size.
- [PubSub](https://cloud.google.com/pubsub/quotas) 120GB of events, and 120GB of calls per minute.
- [Cloud Functions](https://firebase.google.com/docs/functions/quotas) 1000 events per second

---
_Source: https://npm.io/package/express-webhook-gateway · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
