diff --git a/package.json b/package.json index 7aa6335c..029a5c7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unoapi-cloud", - "version": "2.8.0", + "version": "2.8.1-alpha", "description": "Unoapi Cloud", "exports": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/services/auto_connect.ts b/src/services/auto_connect.ts index 864de18f..857c04ec 100644 --- a/src/services/auto_connect.ts +++ b/src/services/auto_connect.ts @@ -37,8 +37,9 @@ export const autoConnect = async ( try { const store = await config.getStore(phone, config) const { sessionStore } = store - if ((await sessionStore.isStatusConnecting(phone)) || (await sessionStore.isStatusOnline(phone))) { - logger.info(`Update session status to auto connect ${phone}...`) + const currentStatus = await sessionStore.getStatus(phone) + if (['connecting', 'online', 'reloading'].includes(currentStatus)) { + logger.info(`Update session current status ${currentStatus} to offline in session ${phone}...`) await sessionStore.setStatus(phone, 'offline') } getClient({ phone, listener, getConfig, onNewLogin }) diff --git a/src/services/reload_baileys.ts b/src/services/reload_baileys.ts index cb6e2469..ae241249 100644 --- a/src/services/reload_baileys.ts +++ b/src/services/reload_baileys.ts @@ -27,15 +27,21 @@ export class ReloadBaileys extends Reload { logger.debug('Reload broker for phone %s', phone) return super.run(phone) } + const store = await config.getStore(phone, config) + const { sessionStore } = store + const currentStatus = await sessionStore.getStatus(phone) + if (currentStatus == 'reloading') { + logger.info('Already reloading session %s!', phone) + return + } + await sessionStore.setStatus(phone, 'reloading') const currentClient = await this.getClient({ phone, listener: this.listener, getConfig: this.getConfig, onNewLogin: this.onNewLogin, }) - const store = await config.getStore(phone, config) - const { sessionStore } = store - if ((await sessionStore.isStatusOnline(phone)) || (await sessionStore.isStatusStandBy(phone)) || (await sessionStore.isStatusConnecting(phone))) { + if (['online', 'standby', 'connecting'].includes(currentStatus)) { logger.warn('Reload disconnect session %s!', phone) await currentClient?.disconnect() } diff --git a/src/services/session_store.ts b/src/services/session_store.ts index 1dd48784..3926ea6a 100644 --- a/src/services/session_store.ts +++ b/src/services/session_store.ts @@ -1,7 +1,7 @@ import { MAX_CONNECT_RETRY } from '../defaults' import logger from './logger' -export type sessionStatus = 'offline' | 'online' | 'disconnected' | 'connecting' | 'standby' | 'restart_required' +export type sessionStatus = 'offline' | 'online' | 'disconnected' | 'connecting' | 'standby' | 'restart_required' | 'reloading' const statuses: Map = new Map() const retries: Map = new Map() @@ -23,6 +23,10 @@ export abstract class SessionStore { return (await this.getStatus(phone)) == 'online' } + async isStatusReloading(phone: string) { + return (await this.getStatus(phone)) == 'reloading' + } + async isStatusConnecting(phone: string) { return (await this.getStatus(phone)) == 'connecting' } diff --git a/src/services/session_store_redis.ts b/src/services/session_store_redis.ts index 971162d5..f7ec11f3 100644 --- a/src/services/session_store_redis.ts +++ b/src/services/session_store_redis.ts @@ -47,7 +47,7 @@ export class SessionStoreRedis extends SessionStore { async setStatus(phone: string, status: sessionStatus) { logger.info(`Session status ${phone} change from ${await this.getStatus(phone)} to ${status}`) - if (['online', 'restart_required'].includes(status)) { + if (['online', 'restart_required', 'reloading'].includes(status)) { await this.clearConnectCount(phone) } return setSessionStatus(phone, status)