diff --git a/src/api/sessions.controller.ts b/src/api/sessions.controller.ts index 90165f73..d8922c26 100644 --- a/src/api/sessions.controller.ts +++ b/src/api/sessions.controller.ts @@ -35,21 +35,14 @@ import { SessionUpdateRequest, } from '../structures/sessions.dto'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const AsyncLock = require('async-lock'); - @ApiSecurity('api_key') @Controller('api/sessions') @ApiTags('🖥️ Sessions') class SessionsController { - private lock: any; - - constructor(private manager: SessionManager) { - this.lock = new AsyncLock({ maxPending: Infinity }); - } + constructor(private manager: SessionManager) {} private withLock(name: string, fn: () => any) { - return this.lock.acquire(name, fn); + return this.manager.withLock(name, fn); } @Get('/') diff --git a/src/core/abc/manager.abc.ts b/src/core/abc/manager.abc.ts index 209bcac1..f3883438 100644 --- a/src/core/abc/manager.abc.ts +++ b/src/core/abc/manager.abc.ts @@ -24,15 +24,28 @@ import { ISessionConfigRepository } from '../storage/ISessionConfigRepository'; import { WhatsappSession } from './session.abc'; import { WebhookConductor } from './webhooks.abc'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const AsyncLock = require('async-lock'); + export abstract class SessionManager implements BeforeApplicationShutdown { public store: any; public sessionAuthRepository: ISessionAuthRepository; public sessionConfigRepository: ISessionConfigRepository; protected sessionMeRepository: ISessionMeRepository; public events: EventEmitter; + private lock: any; + WAIT_STATUS_INTERVAL = 500; WAIT_STATUS_TIMEOUT = 5_000; + protected constructor() { + this.lock = new AsyncLock({ maxPending: Infinity }); + } + + public withLock(name: string, fn: () => any) { + return this.lock.acquire(name, fn); + } + protected abstract getEngine(engine: WAHAEngine): typeof WhatsappSession; protected abstract get EngineClass(): typeof WhatsappSession;