aunubaileys 1.0.20 → 1.0.22
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.
- package/README.md +8 -0
- package/lib/Utils/auth-utils.js +13 -1
- package/lib/Utils/use-multi-file-auth-state.js +25 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -64,6 +64,14 @@ Everything else is pure upstream. When upstream moves, we rebase the patch layer
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
### 🆕 What's new in 1.0.22 / Baru di 1.0.22
|
|
68
|
+
|
|
69
|
+
- 🗑️ **Cacheable key store honours deletions** — `makeCacheableSignalKeyStore` cached `null` values verbatim, but null means *deleted*: later gets returned a phantom present-but-null entry, and a value re-created in the store stayed hidden behind the cached null until the 5-minute TTL expired. Deletions now evict the cache entry, so the next get reads the store's authoritative state — which is exactly what makes `deleteSession`/`deleteSenderKey` (1.0.14/1.0.17) behave correctly through the recommended cacheable wiring. Both defects were reproduced before the fix and pass after it.
|
|
70
|
+
|
|
71
|
+
### 🆕 What's new in 1.0.21 / Baru di 1.0.21
|
|
72
|
+
|
|
73
|
+
- 💾 **saveCreds writes are coalesced** — during pairing, `creds.update` fires many times per second and every event used to queue a full atomic creds.json write. Concurrent `saveCreds()` calls now share one in-flight write, and a call landing mid-write schedules exactly one follow-up, so the file always ends with the latest creds — verified: a 30-call burst produced only ~2–3 real writes instead of 30.
|
|
74
|
+
|
|
67
75
|
### 🆕 What's new in 1.0.20 / Baru di 1.0.20
|
|
68
76
|
|
|
69
77
|
- ⏳ **Sends survive reconnect blips** — calling `sendMessage` while the connection is re-establishing used to fail instantly with a 428 from the first internal query, and the message was simply lost. `relayMessage` now waits for the transport to reopen (bounded by `connectTimeoutMs`; a permanently closed connection still fails fast, and a wait that expires raises a clear 408). When the connection is open, behaviour is unchanged.
|
package/lib/Utils/auth-utils.js
CHANGED
|
@@ -49,7 +49,19 @@ export function makeCacheableSignalKeyStore(store, logger, _cache) {
|
|
|
49
49
|
let keys = 0;
|
|
50
50
|
for (const type in data) {
|
|
51
51
|
for (const id in data[type]) {
|
|
52
|
-
|
|
52
|
+
// AunuBaileys: a null/undefined value is a DELETION. Upstream
|
|
53
|
+
// cached the null itself, so later gets returned a phantom
|
|
54
|
+
// present-but-null entry and — worse — kept shadowing a value
|
|
55
|
+
// re-created in the store until the TTL expired. Evict instead,
|
|
56
|
+
// so the next get reads the store's authoritative state. This
|
|
57
|
+
// is what makes deleteSession/deleteSenderKey (1.0.14/1.0.17)
|
|
58
|
+
// behave correctly through the recommended cacheable wiring.
|
|
59
|
+
if (data[type][id] === null || typeof data[type][id] === 'undefined') {
|
|
60
|
+
cache.del(getUniqueId(type, id));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
cache.set(getUniqueId(type, id), data[type][id]);
|
|
64
|
+
}
|
|
53
65
|
keys += 1;
|
|
54
66
|
}
|
|
55
67
|
}
|
|
@@ -88,6 +88,8 @@ export const useMultiFileAuthState = async (folder) => {
|
|
|
88
88
|
}
|
|
89
89
|
const fixFileName = (file) => file?.replace(/\//g, '__')?.replace(/:/g, '-');
|
|
90
90
|
const creds = (await readData('creds.json')) || initAuthCreds();
|
|
91
|
+
let credsWriteInFlight = null;
|
|
92
|
+
let credsWriteQueued = false;
|
|
91
93
|
return {
|
|
92
94
|
state: {
|
|
93
95
|
creds,
|
|
@@ -117,7 +119,29 @@ export const useMultiFileAuthState = async (folder) => {
|
|
|
117
119
|
}
|
|
118
120
|
},
|
|
119
121
|
saveCreds: async () => {
|
|
120
|
-
|
|
122
|
+
// AunuBaileys: coalesce the write bursts. creds.update fires many
|
|
123
|
+
// times per second during pairing (registration, pre-key uploads,
|
|
124
|
+
// identity pushes); upstream queued one full atomic write per call
|
|
125
|
+
// on the file mutex, so pairing did dozens of redundant full-file
|
|
126
|
+
// writes. Concurrent callers now share one in-flight write, and a
|
|
127
|
+
// call landing mid-write schedules exactly ONE follow-up write so
|
|
128
|
+
// the file always ends with the LATEST creds.
|
|
129
|
+
if (credsWriteInFlight) {
|
|
130
|
+
credsWriteQueued = true;
|
|
131
|
+
return credsWriteInFlight;
|
|
132
|
+
}
|
|
133
|
+
credsWriteInFlight = (async () => {
|
|
134
|
+
try {
|
|
135
|
+
do {
|
|
136
|
+
credsWriteQueued = false;
|
|
137
|
+
await writeData(creds, 'creds.json');
|
|
138
|
+
} while (credsWriteQueued);
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
credsWriteInFlight = null;
|
|
142
|
+
}
|
|
143
|
+
})();
|
|
144
|
+
return credsWriteInFlight;
|
|
121
145
|
}
|
|
122
146
|
};
|
|
123
147
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aunubaileys",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.22",
|
|
5
5
|
"description": "AunuBaileys \u2014 a WhatsApp Web API for bots that never sleep. Full upstream power with the beloved in-memory store restored and pairing that just works. Forged by AunuCore.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"whatsapp",
|