diff --git a/package.json b/package.json index 625f458..a48b4f1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unoapi-cloud", - "version": "1.28.4", + "version": "1.28.5", "description": "Unoapi Cloud", "exports": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/services/redis.ts b/src/services/redis.ts index 32bdc10..af98223 100644 --- a/src/services/redis.ts +++ b/src/services/redis.ts @@ -131,7 +131,7 @@ const redisSetAndExpire = async function (key: string, value: any, ttl: number) } } -const authKey = (phone: string) => { +export const authKey = (phone: string) => { return `${BASE_KEY}auth:${phone}` } diff --git a/src/services/session_store.ts b/src/services/session_store.ts index 7199777..9031276 100644 --- a/src/services/session_store.ts +++ b/src/services/session_store.ts @@ -65,4 +65,6 @@ export abstract class SessionStore { } async syncConnections() {} + + async syncConnection(_phone: string) {} } diff --git a/src/services/session_store_redis.ts b/src/services/session_store_redis.ts index 2dd9e1b..4550a30 100644 --- a/src/services/session_store_redis.ts +++ b/src/services/session_store_redis.ts @@ -1,5 +1,5 @@ import { SessionStore, sessionStatus } from './session_store' -import { configKey, redisKeys, getSessionStatus, setSessionStatus, sessionStatusKey, redisGet, getConfig, getConnectCount, setConnectCount, delAuth } from './redis' +import { configKey, authKey, redisKeys, getSessionStatus, setSessionStatus, sessionStatusKey, redisGet, getConfig, getConnectCount, setConnectCount, delAuth } from './redis' import logger from './logger' import { MAX_CONNECT_RETRY } from '../defaults' @@ -49,19 +49,26 @@ export class SessionStoreRedis extends SessionStore { for (let i = 0; i < keys.length; i++) { const key = keys[i]; const phone = key.replace(toReplaceStatus, '') - if (await redisGet(key) == 'connecting' || !await getConfig(phone) ) { - logger.info(`Sync ${phone} lost connecting!`) - await this.setStatus(phone, 'disconnected') - await delAuth(`${phone}:creds`) - } - if (await redisGet(key) == 'blocked' && await this.getConnectCount(phone) < MAX_CONNECT_RETRY) { - logger.info(`Sync ${phone} blocked!`) - await this.setStatus(phone, 'offline') - } + await this.syncConnection(phone) } } catch (error) { logger.error(error, 'Error on sync lost connecting') throw error } } + + async syncConnection(phone: string) { + const aKey = authKey(`${phone}*`) + const keys = await redisKeys(aKey) + if (keys.length == 1 && keys[0] == authKey(`${phone}:creds`)) { + logger.info(`Sync ${phone} lost connecting!`) + await delAuth(phone) + await this.setStatus(phone, 'disconnected') + } + const key = sessionStatusKey(phone) + if (await redisGet(key) == 'blocked' && await this.getConnectCount(phone) < MAX_CONNECT_RETRY) { + logger.info(`Sync ${phone} blocked!`) + await this.setStatus(phone, 'offline') + } + } } \ No newline at end of file diff --git a/src/services/socket.ts b/src/services/socket.ts index efbb590..06b932f 100644 --- a/src/services/socket.ts +++ b/src/services/socket.ts @@ -142,7 +142,7 @@ export const connect = async ({ const onConnectionUpdate = async (event: Partial) => { logger.debug('onConnectionUpdate ==> %s %s', phone, JSON.stringify(event)) - if (event.qr) { + if (event.qr && config.connectionType == 'qrcode') { if (status.attempt > attempts) { const message = t('attempts_exceeded', attempts) logger.debug(message) @@ -437,6 +437,7 @@ export const connect = async ({ } const connect = async () => { + await sessionStore.syncConnection(phone) if (await sessionStore.isStatusConnecting(phone)) { logger.warn('Already Connecting %s', phone) return @@ -504,7 +505,7 @@ export const connect = async ({ if (sock) { dataStore.bind(sock.ev) event('creds.update', saveCreds) - event('connection.update', onConnectionUpdate) + logger.info('Connection type %s already creds %s', config.connectionType, sock?.authState?.creds?.registered) if (config.connectionType == 'pairing_code' && !sock?.authState?.creds?.registered) { logger.info(`Requesting pairing code ${phone}`) try { @@ -514,10 +515,13 @@ export const connect = async ({ const beatyCode = `${code?.match(/.{1,4}/g)?.join('-')}` const message = t('pairing_code', beatyCode) await onNotification(message, true) + event('connection.update', onConnectionUpdate) } catch (error) { console.error(error) throw error } + } else { + event('connection.update', onConnectionUpdate) } if (config.wavoipToken) { useVoiceCallsBaileys(config.wavoipToken, sock as any, 'close', true)