let singleton: UserChannel = null; export default class UserChannel { private subscription; private constructor(private ws) { this.subscription = null; } async connect(): Promise { this.subscription = this.ws.subscribe(`user_channel`); const subscription = this.subscription; const self = this; return new Promise((resolve, reject) => { subscription.on('error', () => { resolve(false) }); subscription.on('ready', () => { resolve(true) }); subscription.on('close', self.close); }); } on(event: string, callback: (...args) => void) { if (this.subscription) this.subscription.on(event, callback); } static async getInstance(ws) { if (singleton) return singleton; else return new UserChannel(ws); } close() { this.subscription.close(); singleton = null; } }