Async + Multi Cache (#1741)

* fix: handle invalid signatureKeyPublic types in sender-key-state

- added extra check to ensure signatureKeyPublic is either a base64 string or a Buffer
- fallback to empty buffer when unexpected object type is received
- prevents ERR_INVALID_ARG_TYPE error in Buffer.from

* adjusted based on  @jlucaso1 recommmendation

* fix: handle chain key objects for skmsg group message decryption

previously, some sender chain keys were stored or retrieved as plain objects
(e.g. { '0': 85, '1': 100, ... }) instead of Buffers. this caused
"ERR_INVALID_ARG_TYPE" during initial decryption of skmsg group messages.

this fixes any chain key object is converted to a proper Buffer
before being passed to SenderChainKey.

* fix: add more robust checks and fallbacks

* feat: async cache

feat: async caching

* fix: linting issues

* fix: mget logic

---------

Co-authored-by: αѕтяσχ11 <devastro0010@gmail.com>
This commit is contained in:
Martín Schere
2025-09-14 16:13:11 +02:00
committed by GitHub
parent f0cc173aa3
commit 8029446511
7 changed files with 70 additions and 50 deletions
+3 -3
View File
@@ -152,7 +152,7 @@ export const prepareWAMessageMedia = async (
}
if (cacheableKey) {
const mediaBuff = options.mediaCache!.get<Buffer>(cacheableKey)
const mediaBuff = await options.mediaCache!.get<Buffer>(cacheableKey)
if (mediaBuff) {
logger?.debug({ cacheableKey }, 'got media cache hit')
@@ -202,7 +202,7 @@ export const prepareWAMessageMedia = async (
if (cacheableKey) {
logger?.debug({ cacheableKey }, 'set cache')
options.mediaCache!.set(cacheableKey, WAProto.Message.encode(obj).finish())
await options.mediaCache!.set(cacheableKey, WAProto.Message.encode(obj).finish())
}
return obj
@@ -305,7 +305,7 @@ export const prepareWAMessageMedia = async (
if (cacheableKey) {
logger?.debug({ cacheableKey }, 'set cache')
options.mediaCache!.set(cacheableKey, WAProto.Message.encode(obj).finish())
await options.mediaCache!.set(cacheableKey, WAProto.Message.encode(obj).finish())
}
return obj