@imqueue/pg-pubsub
Version:
Reliable PostgreSQL LISTEN/NOTIFY with inter-process lock support
99 lines (98 loc) • 3.69 kB
TypeScript
/*!
* I'm Queue Software Project
* Copyright (C) 2025 imqueue.com <support@imqueue.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* If you want to use this code in a closed source (commercial) project, you can
* purchase a proprietary commercial license. Please contact us at
* <support@imqueue.com> to get commercial licensing options.
*/
import { Client, ClientConfig } from 'pg';
/**
* Options accepted as option argument of PgPubSub constructor.
* It extends `pg.ClientConfig` options, mostly because it is used to
* construct PostgreSQL database connection, adding more properties required
* to configure PgBubSub objects behavior.
*/
export interface PgPubSubOptions extends ClientConfig {
/**
* Existing PostgreSQL client connection (optional). Can be passed if
* there is a need to re-use existing db connection from external code.
* Otherwise it is required to bypass correct options to instantiate
* new `pg.Client` connection properly.
*
* @type {Client}
*/
pgClient?: Client;
/**
* Specifies delay in milliseconds between re-connection retries
*
* @type {number}
*/
retryDelay: number;
/**
* Specifies maximum number of re-connection retries to process, before
* connection would be treated as broken (disconnected). By default
* is set to infinite number of retries.
*
* @type {number}
*/
retryLimit: number;
/**
* Time interval in milliseconds before `LISTEN` clients would re-try to
* acquire channel locks. It works from one hand as connection keep-alive
* periodical pings, from other hand adds additional level of reliability
* for the cases when connection, which holds the lock has been suddenly
* disconnected in a silent manner.
*
* By default is set to `30000ms` (`30sec`). Please, assume this value
* should be selected for a particular system with care of often acquire
* lock hits and overall infrastructure reliability.
*
* @type {number}
*/
acquireInterval: number;
/**
* Boolean flag, which turns off/on single listener mode. By default is
* set to true, so instantiated PgPubSub connections will act using
* inter-process locking mechanism.
*
* @type {boolean}
*/
singleListener: boolean;
/**
* If set to true, self emitted messages (those which were sent using
* `NOTIFY` on the same connection) will be filtered on this connection.
* By default is false - means that connection will `LISTEN` to the
* messages, which were notified on the same connection.
*
* @type {boolean}
*/
filtered: boolean;
/**
* If set to true, all instances become listeners but only instance is an
* executor which still implements inter-process locking mechanism.
*
* @type {boolean}
*/
executionLock: boolean;
}
/**
* Hard-coded pre-set of PgPubSubOptions
*
* @see PgPubSubOptions
* @type {PgPubSubOptions}
*/
export declare const DefaultOptions: PgPubSubOptions;