Skip to content

Commit be2fbf1

Browse files
committed
sync lost connecting
1 parent 326ee55 commit be2fbf1

File tree

4 files changed

+27
-4
lines changed

4 files changed

+27
-4
lines changed

src/services/auto_connect.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export const autoConnect = async (
1616
onNewLogin: OnNewLogin,
1717
) => {
1818
try {
19+
await sessionStore.syncConnecting()
1920
const phones = await sessionStore.getPhones()
2021
logger.info(`${phones.length} phones to verify if is auto connect`)
2122
for (let i = 0, j = phones.length; i < j; i++) {

src/services/redis.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ const authKey = (phone: string) => {
135135
return `${BASE_KEY}auth:${phone}`
136136
}
137137

138-
const sessionStatusKey = (phone: string) => {
138+
export const sessionStatusKey = (phone: string) => {
139139
return `${BASE_KEY}status:${phone}`
140140
}
141141

src/services/session_store.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ export abstract class SessionStore {
3232
async isStatusIsDisconnect(phone: string) {
3333
return await this.getStatus(phone) == 'disconnected'
3434
}
35+
36+
async syncConnecting() {}
3537
}

src/services/session_store_redis.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { SessionStore, sessionStatus } from './session_store'
2-
import { configKey, redisKeys, getSessionStatus, setSessionStatus } from './redis'
2+
import { configKey, redisKeys, getSessionStatus, setSessionStatus, sessionStatusKey, redisGet, getConfig } from './redis'
33
import logger from './logger'
44

5-
const toReplace = configKey('')
5+
const toReplaceConfig = configKey('')
6+
const toReplaceStatus = sessionStatusKey('')
67

78
export class SessionStoreRedis extends SessionStore {
89
async getPhones(): Promise<string[]> {
910
try {
1011
const pattern = configKey('*')
1112
const keys = await redisKeys(pattern)
12-
return keys.map((key: string) => key.replace(toReplace, ''))
13+
return keys.map((key: string) => key.replace(toReplaceConfig, ''))
1314
} catch (error) {
1415
logger.error(error, 'Erro on get configs')
1516
throw error
@@ -24,4 +25,23 @@ export class SessionStoreRedis extends SessionStore {
2425
logger.info(`Session status ${phone} change from ${await this.getStatus(phone)} to ${status}`)
2526
return setSessionStatus(phone, status)
2627
}
28+
29+
async syncConnecting() {
30+
logger.info(`Sync lost connecting!`)
31+
try {
32+
const pattern = sessionStatusKey('*')
33+
const keys = await redisKeys(pattern)
34+
for (let i = 0; i < keys.length; i++) {
35+
const key = keys[i];
36+
const phone = key.replace(toReplaceStatus, '')
37+
if ((await redisGet(key)) == 'connecting' || !getConfig(phone) ) {
38+
logger.info(`Sync ${phone} lost connecting!`)
39+
await this.setStatus(phone, 'disconnected')
40+
}
41+
}
42+
} catch (error) {
43+
logger.error(error, 'Error on sync lost connecting')
44+
throw error
45+
}
46+
}
2747
}

0 commit comments

Comments
 (0)