From d9b62e6c6afd1bc188f7db80c5235725e7427f9b Mon Sep 17 00:00:00 2001 From: Collin Duncan <3679940+cgduncan7@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:22:05 +0200 Subject: [PATCH] Adding reconnection logic to email client --- src/email/client.ts | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/email/client.ts b/src/email/client.ts index 61ff269..6fc0159 100644 --- a/src/email/client.ts +++ b/src/email/client.ts @@ -47,10 +47,23 @@ export class EmailClient { this.status = status } - public connect() { + private connect() { this.imapClient.connect() } + private openBox() { + this.imapClient.openBox(this.mailboxName, (error, mailbox) => { + if (error) { + this.loggerService.error('Error opening mailbox', { + ...error, + }) + return + } + this.loggerService.debug('Mailbox opened', { mailbox }) + this.mailbox = mailbox + }) + } + private attempt( label: string, current: number, @@ -106,16 +119,6 @@ export class EmailClient { throw new Error('Not ready to listen') } - this.imapClient.openBox(this.mailboxName, (error, mailbox) => { - if (error) { - this.loggerService.error('Error opening mailbox', { - ...error, - }) - return - } - this.mailbox = mailbox - }) - this.imapClient.on('mail', (n: number) => this.handleNewMail(n, callback)) } @@ -212,19 +215,19 @@ export class EmailClient { private setupDefaultListeners() { this.imapClient.on('ready', () => { this.loggerService.debug('email client ready') - this.setStatus(EmailClientStatus.Ready) + if (this.status === EmailClientStatus.NotReady) { + this.setStatus(EmailClientStatus.Ready) + this.openBox() + } }) this.imapClient.on('close', () => { this.loggerService.debug('email client close') - if (this.status !== EmailClientStatus.Error) - this.setStatus(EmailClientStatus.NotReady) - }) - - this.imapClient.on('end', () => { - this.loggerService.debug('email client end') - if (this.status !== EmailClientStatus.Error) + if (this.status !== EmailClientStatus.Error) { + this.loggerService.debug('email client reconnecting') this.setStatus(EmailClientStatus.NotReady) + this.connect() + } }) this.imapClient.on('error', (error: Error) => {