UNPKG

@socket.io/postgres-adapter

Version:

The Socket.IO Postgres adapter, allowing to broadcast events between several Socket.IO servers

74 lines (73 loc) 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PostgresAdapter = exports.createAdapter = void 0; const socket_io_adapter_1 = require("socket.io-adapter"); const debug_1 = require("debug"); const util_1 = require("./util"); const debug = (0, debug_1.default)("socket.io-postgres-adapter"); /** * Returns a function that will create a PostgresAdapter instance. * * @param pool - a pg.Pool instance * @param opts - additional options * * @public */ function createAdapter(pool, opts = {}) { const options = Object.assign({ channelPrefix: "socket.io", tableName: "socket_io_attachments", payloadThreshold: 8000, cleanupInterval: 30000, errorHandler: (err) => debug(err), }, opts); const namespaces = new Map(); const client = new util_1.PubSubClient(pool, options, (msg) => { var _a; // @ts-expect-error uid is protected return ((_a = namespaces.get(msg.nsp)) === null || _a === void 0 ? void 0 : _a.uid) === msg.uid; }, (msg) => { var _a; (_a = namespaces.get(msg.nsp)) === null || _a === void 0 ? void 0 : _a.onMessage(msg); }); return function (nsp) { let adapter = new PostgresAdapter(nsp, opts, client); namespaces.set(nsp.name, adapter); client.addNamespace(nsp.name); const defaultClose = adapter.close; adapter.close = () => { namespaces.delete(nsp.name); if (namespaces.size === 0) { client.close(); } defaultClose.call(adapter); }; return adapter; }; } exports.createAdapter = createAdapter; class PostgresAdapter extends socket_io_adapter_1.ClusterAdapterWithHeartbeat { /** * Adapter constructor. * * @param nsp - the namespace * @param opts - additional options * @param client * * @public */ constructor(nsp, opts, client) { super(nsp, opts); this.client = client; } doPublish(message) { return this.client.publish(message).then(() => { // connection state recovery is not currently supported return ""; }); } doPublishResponse(_requesterUid, response) { return this.client.publish(response); } } exports.PostgresAdapter = PostgresAdapter;