11import axios , { AxiosRequestConfig } from 'axios' ;
22import { fetchLatestBaileysVersion , WAVersion } from 'baileys' ;
33
4+ import { CacheService } from '../api/services/cache.service' ;
5+ import { CacheEngine } from '../cache/cacheengine' ;
46import { Baileys , configService } from '../config/env.config' ;
57
6- export const fetchLatestWaWebVersion = async ( options : AxiosRequestConfig < { } > ) => {
8+ // Cache keys
9+ const CACHE_KEY_WHATSAPP_WEB_VERSION = 'whatsapp_web_version' ;
10+ const CACHE_KEY_BAILEYS_FALLBACK_VERSION = 'baileys_fallback_version' ;
11+
12+ // Cache TTL (1 hour in seconds)
13+ const CACHE_TTL_SECONDS = 3600 ;
14+
15+ const MODULE_NAME = 'whatsapp-version' ;
16+
17+ export const fetchLatestWaWebVersion = async ( options : AxiosRequestConfig < { } > , cache ?: CacheService ) => {
718 // Check if manual version is set via configuration
819 const baileysConfig = configService . get < Baileys > ( 'BAILEYS' ) ;
920 const manualVersion = baileysConfig ?. VERSION ;
@@ -19,6 +30,22 @@ export const fetchLatestWaWebVersion = async (options: AxiosRequestConfig<{}>) =
1930 }
2031 }
2132
33+ let versionCache = cache || null ;
34+
35+ if ( ! versionCache ) {
36+ // Cache estático para versões do WhatsApp Web e fallback do Baileys (fallback se não for passado via parâmetro)
37+ const cacheEngine = new CacheEngine ( configService , MODULE_NAME ) ;
38+ const engine = cacheEngine . getEngine ( ) ;
39+ const defaultVersionCache = new CacheService ( engine ) ;
40+ versionCache = defaultVersionCache ;
41+ }
42+
43+ // Check cache for WhatsApp Web version
44+ const cachedWaVersion = await versionCache . get ( CACHE_KEY_WHATSAPP_WEB_VERSION ) ;
45+ if ( cachedWaVersion ) {
46+ return cachedWaVersion ;
47+ }
48+
2249 try {
2350 const { data } = await axios . get ( 'https://web.whatsapp.com/sw.js' , {
2451 ...options ,
@@ -29,26 +56,51 @@ export const fetchLatestWaWebVersion = async (options: AxiosRequestConfig<{}>) =
2956 const match = data . match ( regex ) ;
3057
3158 if ( ! match ?. [ 1 ] ) {
32- return {
59+ // Check cache for Baileys fallback version
60+ const cachedFallback = await versionCache . get ( CACHE_KEY_BAILEYS_FALLBACK_VERSION ) ;
61+ if ( cachedFallback ) {
62+ return cachedFallback ;
63+ }
64+
65+ // Fetch and cache Baileys fallback version
66+ const fallbackVersion = {
3367 version : ( await fetchLatestBaileysVersion ( ) ) . version as WAVersion ,
3468 isLatest : false ,
3569 error : {
3670 message : 'Could not find client revision in the fetched content' ,
3771 } ,
3872 } ;
73+
74+ await versionCache . set ( CACHE_KEY_BAILEYS_FALLBACK_VERSION , fallbackVersion , CACHE_TTL_SECONDS ) ;
75+ return fallbackVersion ;
3976 }
4077
4178 const clientRevision = match [ 1 ] ;
4279
43- return {
80+ const result = {
4481 version : [ 2 , 3000 , + clientRevision ] as WAVersion ,
4582 isLatest : true ,
4683 } ;
84+
85+ // Cache the successful result
86+ await versionCache . set ( CACHE_KEY_WHATSAPP_WEB_VERSION , result , CACHE_TTL_SECONDS ) ;
87+
88+ return result ;
4789 } catch ( error ) {
48- return {
90+ // Check cache for Baileys fallback version
91+ const cachedFallback = await versionCache . get ( CACHE_KEY_BAILEYS_FALLBACK_VERSION ) ;
92+ if ( cachedFallback ) {
93+ return cachedFallback ;
94+ }
95+
96+ // Fetch and cache Baileys fallback version
97+ const fallbackVersion = {
4998 version : ( await fetchLatestBaileysVersion ( ) ) . version as WAVersion ,
5099 isLatest : false ,
51100 error,
52101 } ;
102+
103+ await versionCache . set ( CACHE_KEY_BAILEYS_FALLBACK_VERSION , fallbackVersion , CACHE_TTL_SECONDS ) ;
104+ return fallbackVersion ;
53105 }
54106} ;
0 commit comments