From 79aa2e5176a615727220725e23dfc60b2ed5971b Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Tue, 21 Feb 2023 11:56:27 +0530 Subject: [PATCH] feat: narrower definition of cachestore --- src/Types/Message.ts | 3 ++- src/Types/Socket.ts | 23 +++++++++++++++++------ src/Utils/auth-utils.ts | 6 +++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Types/Message.ts b/src/Types/Message.ts index 1c26edf..382ce4f 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -6,6 +6,7 @@ import type { URL } from 'url' import { proto } from '../../WAProto' import { MEDIA_HKDF_KEY_MAPPING } from '../Defaults' import type { GroupMetadata } from './GroupMetadata' +import { CacheStore } from './Socket' // export the WAMessage Prototypes export { proto as WAProto } @@ -202,7 +203,7 @@ export type MediaGenerationOptions = { mediaTypeOverride?: MediaType upload: WAMediaUploadFunction /** cache media so it does not have to be uploaded again */ - mediaCache?: NodeCache + mediaCache?: CacheStore mediaUploadTimeoutMs?: number diff --git a/src/Types/Socket.ts b/src/Types/Socket.ts index 1627f07..0534457 100644 --- a/src/Types/Socket.ts +++ b/src/Types/Socket.ts @@ -1,7 +1,6 @@ import { AxiosRequestConfig } from 'axios' import type { Agent } from 'https' -import type NodeCache from 'node-cache' import type { Logger } from 'pino' import type { URL } from 'url' import { proto } from '../../WAProto' @@ -11,6 +10,17 @@ import { MediaConnInfo } from './Message' export type WAVersion = [number, number, number] export type WABrowserDescription = [string, string, string] +export type CacheStore = { + /** get a cached key and change the stats */ + get(key: string): T | undefined + /** set a key in the cache */ + set(key: string, value: T): void + /** delete a key from the cache */ + del(key: string): void + /** flush all data */ + flushAll(): void +} + export type SocketConfig = { /** the WS url to connect to WA */ waWebSocketUrl: string | URL @@ -34,8 +44,6 @@ export type SocketConfig = { printQRInTerminal: boolean /** should events be emitted for actions done by this socket connection */ emitOwnEvents: boolean - /** provide a cache to store media, so does not have to be re-uploaded */ - mediaCache?: NodeCache /** custom upload hosts to upload media to */ customUploadHosts: MediaConnInfo['hosts'] /** time to wait between sending new retry requests */ @@ -50,14 +58,17 @@ export type SocketConfig = { transactionOpts: TransactionCapabilityOptions /** marks the client as online whenever the socket successfully connects */ markOnlineOnConnect: boolean + + /** provide a cache to store media, so does not have to be re-uploaded */ + mediaCache?: CacheStore /** * map to store the retry counts for failed messages; * used to determine whether to retry a message or not */ - msgRetryCounterCache?: NodeCache + msgRetryCounterCache?: CacheStore /** provide a cache to store a user's device list */ - userDevicesCache?: NodeCache + userDevicesCache?: CacheStore /** cache to store call offers */ - callOfferCache?: NodeCache + callOfferCache?: CacheStore /** width for link preview images */ linkPreviewImageThumbnailWidth: number /** Should Baileys ask the phone for full history, will be received async */ diff --git a/src/Utils/auth-utils.ts b/src/Utils/auth-utils.ts index ceffb38..0b29d82 100644 --- a/src/Utils/auth-utils.ts +++ b/src/Utils/auth-utils.ts @@ -2,7 +2,7 @@ import { randomBytes } from 'crypto' import NodeCache from 'node-cache' import type { Logger } from 'pino' import { DEFAULT_CACHE_TTLS } from '../Defaults' -import type { AuthenticationCreds, SignalDataSet, SignalDataTypeMap, SignalKeyStore, SignalKeyStoreWithTransaction, TransactionCapabilityOptions } from '../Types' +import type { AuthenticationCreds, CacheStore, SignalDataSet, SignalDataTypeMap, SignalKeyStore, SignalKeyStoreWithTransaction, TransactionCapabilityOptions } from '../Types' import { Curve, signedKeyPair } from './crypto' import { delay, generateRegistrationId } from './generics' @@ -10,12 +10,12 @@ import { delay, generateRegistrationId } from './generics' * Adds caching capability to a SignalKeyStore * @param store the store to add caching to * @param logger to log trace events - * @param _cache NodeCache to use + * @param _cache cache store to use */ export function makeCacheableSignalKeyStore( store: SignalKeyStore, logger: Logger, - _cache?: NodeCache + _cache?: CacheStore ): SignalKeyStore { const cache = _cache || new NodeCache({ stdTTL: DEFAULT_CACHE_TTLS.SIGNAL_STORE, // 5 minutes