/* * Copyright (C) Sapphirecode - All Rights Reserved * This file is part of Auth-Server-Helper which is released under MIT. * See file 'LICENSE' for full license details. * Created by Timo Hocker , August 2022 */ import IORedis from 'ioredis'; import { debug } from './debug'; const logger = debug ('redis'); export class Redis { private _redis: IORedis | null = null; public connect (url: string): void { const log = logger.extend ('connect'); log ('connecting to redis instance %s', url); if (this._redis !== null) { log ('disconnecting existing redis client'); this.disconnect (); } this._redis = new IORedis (url); this._redis.on ('connect', () => { log ('connected'); }); this._redis.on ('ready', () => { log ('ready'); }); this._redis.on ('error', (err) => { log ('error %o', err); }); this._redis.on ('reconnecting', () => { log ('reconnecting'); }); this._redis.on ('end', () => { log ('connection ended'); }); } public disconnect (): void { const log = logger.extend ('disconnect'); log ('disconnecting redis client'); if (this._redis === null) { log ('redis is inactive, skipping'); return; } this._redis.quit (); this._redis = null; log ('done'); } protected get redis (): IORedis { if (this._redis === null) throw new Error ('redis is not connected'); return this._redis; } protected get is_active (): boolean { return this._redis !== null; } }