@itsliaaa/baileys 0.1.29 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,27 +3,38 @@ import { DEFAULT_CACHE_TTLS } from '../Defaults/index.js';
3
3
  import { proto } from '../../WAProto/index.js';
4
4
  import { initAuthCreds } from './auth-utils.js';
5
5
  import { BufferJSON } from './generics.js';
6
+ import { LRUCache } from 'lru-cache';
6
7
  // Lia@Changes 25-03-26 --- Add useSingleFileAuthState with integrated cache
7
8
  const FLUSH_TIMEOUT_MS = 3000;
8
- // Lia@Note 21-04-26 --- Unstable need enhancement soon!
9
+ // Lia@Changes 22-04-26 --- Enhanced useSingleFileAuthState with LRUCache
9
10
  export const useSingleFileAuthState = async (fileName) => {
10
- const cache = new Map();
11
- let isLoaded,
12
- isWriting,
13
- isNeedWrite,
14
- flushTimeout,
15
- loadPromise;
11
+ const cache = new LRUCache({
12
+ max: 10000,
13
+ ttl: 1000 * DEFAULT_CACHE_TTLS.SIGNAL_STORE,
14
+ updateAgeOnGet: false,
15
+ updateAgeOnHas: false,
16
+ ttlAutopurge: true
17
+ });
18
+ let fileData = {},
19
+ isLoaded = false,
20
+ isWriting = false,
21
+ isNeedWrite = false,
22
+ flushTimeout = null,
23
+ loadPromise = null;
16
24
  const loadKey = () => {
17
25
  if (isLoaded) return;
18
26
  if (loadPromise) return loadPromise;
19
27
  loadPromise = (async () => {
20
28
  try {
21
29
  const data = JSON.parse(await readFile(fileName, 'utf-8'), BufferJSON.reviver);
22
- for (const [keyName, value] of Object.entries(data)) {
30
+ fileData = data || {};
31
+ for (const [keyName, value] of Object.entries(fileData)) {
23
32
  cache.set(keyName, value);
24
33
  }
25
34
  }
26
- catch { }
35
+ catch {
36
+ fileData = {};
37
+ }
27
38
  isLoaded = true;
28
39
  loadPromise = null;
29
40
  })();
@@ -41,20 +52,20 @@ export const useSingleFileAuthState = async (fileName) => {
41
52
  do {
42
53
  isNeedWrite = false;
43
54
  const tempFile = fileName + '.temp';
44
- const value = Object.fromEntries(cache);
45
- await writeFile(tempFile, JSON.stringify(value, BufferJSON.replacer));
55
+ await writeFile(tempFile, JSON.stringify(fileData, BufferJSON.replacer));
46
56
  await rename(tempFile, fileName);
47
- }
48
- while (isNeedWrite);
57
+ } while (isNeedWrite);
49
58
  isWriting = false;
50
59
  }, FLUSH_TIMEOUT_MS);
51
60
  };
52
61
  const writeKey = (keyName, value) => {
53
62
  cache.set(keyName, value);
63
+ fileData[keyName] = value;
54
64
  flushKey();
55
65
  };
56
66
  const removeKey = (keyName) => {
57
67
  cache.delete(keyName);
68
+ delete fileData[keyName];
58
69
  flushKey();
59
70
  };
60
71
  const fileInfo = await stat(fileName).catch(() => null);
@@ -65,7 +76,7 @@ export const useSingleFileAuthState = async (fileName) => {
65
76
  throw new Error(`found something that is not a file at ${fileName}, either delete it or specify a different location`);
66
77
  }
67
78
  await loadKey();
68
- const creds = cache.get('creds') || initAuthCreds();
79
+ const creds = fileData['creds'] || initAuthCreds();
69
80
  return {
70
81
  state: {
71
82
  creds,
@@ -73,7 +84,12 @@ export const useSingleFileAuthState = async (fileName) => {
73
84
  get: (type, ids) => {
74
85
  const data = {};
75
86
  for (const id of ids) {
76
- let value = cache.get(type + id);
87
+ const keyName = type + id;
88
+ let value = cache.get(keyName);
89
+ if (value === undefined && fileData[keyName] !== undefined) {
90
+ value = fileData[keyName];
91
+ cache.set(keyName, value);
92
+ }
77
93
  if (type === 'app-state-sync-key' && value) {
78
94
  value = proto.Message.AppStateSyncKeyData.fromObject(value);
79
95
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itsliaaa/baileys",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "description": "Enhanced Baileys v7 with fixed newsletter media upload, plus support for interactive messages, albums, and more message types.",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",