@graphile/pg-pubsub
v4.13.0
Published
Subscriptions plugin for PostGraphile using PostgreSQL's LISTEN/NOTIFY
Downloads
33,334
Readme
@graphile/pg-pubsub
This PostGraphile server
plugin provides a pubsub
instance to schema
plugins that uses
PostgreSQL LISTEN
/NOTIFY
to provide realtime features.
Also adds support for @pgSubscriptions
directive to easily define your own
subscriptions using LISTEN/NOTIFY with makeExtendSchemaPlugin
; and adds the
--simple-subscriptions
feature which, when enabled, adds a simple listen
subscription field to your GraphQL API.
It's intended that you use this plugin as a provider of realtime data to other plugins which can use it to add subscription fields to your API.
For full documentation, see: https://www.graphile.org/postgraphile/subscriptions/
Crowd-funded open-source software
To help us develop this software sustainably under the MIT license, we ask all individuals and businesses that use it to help support its ongoing maintenance and development via sponsorship.
Click here to find out more about sponsors and sponsorship.
And please give some love to our featured sponsors 🤩:
* Sponsors the entire Graphile suite
Usage
CLI:
yarn add @graphile/pg-pubsub
postgraphile \
--plugins @graphile/pg-pubsub \
--subscriptions \
--simple-subscriptions \
-c postgres:///mydb
Library:
const express = require("express");
const { postgraphile, makePluginHook } = require("postgraphile");
const { default: PgPubsub } = require("@graphile/pg-pubsub");
const pluginHook = makePluginHook([PgPubsub]);
const postgraphileOptions = {
pluginHook,
subscriptions: true, // Enable PostGraphile websocket capabilities
simpleSubscriptions: true, // Add the `listen` subscription field
subscriptionEventEmitterMaxListeners: 20, // Set max listeners on eventEmitter, 0 unlimited, 10 default
websocketMiddlewares: [
// Add whatever middlewares you need here, note that they should only
// manipulate properties on req/res, they must not sent response data. e.g.:
//
// require('express-session')(),
// require('passport').initialize(),
// require('passport').session(),
],
};
const app = express();
app.use(postgraphile(databaseUrl, "app_public", postgraphileOptions));
app.listen(parseInt(process.env.PORT, 10) || 3000);