fix: histsync LID improvements — raw_id mapping, prekeys, keepalive j… (#304)
* fix: histsync LID improvements — raw_id mapping, prekeys, keepalive jitter, CDN DELETE * fix: prekey pool strategy — 800 initial, top-up to 800 when below 200 - INITIAL_PREKEY_COUNT: 812 → 800 (rounded, matches WA Business ~812 from CDP capture) - MIN_PREKEY_COUNT: 25 → 200 (replenishment trigger threshold) - uploadPreKeysToServerIfRequired: top-up to INITIAL_PREKEY_COUNT instead of uploading a flat MIN_PREKEY_COUNT — restores full 800-key pool on each replenish - handleEncryptNotification: same top-up logic (INITIAL_PREKEY_COUNT - count) so server notification path also restores to 800, not just adds 200 uploadPreKeys(5) in error recovery path intentionally left unchanged.
This commit is contained in:
@@ -9,6 +9,7 @@ import type {
|
||||
AlbumMessageOptions,
|
||||
AlbumSendResult,
|
||||
AnyMessageContent,
|
||||
LIDMapping,
|
||||
MediaConnInfo,
|
||||
MessageReceiptType,
|
||||
MessageRelayOptions,
|
||||
@@ -338,6 +339,33 @@ export const makeMessagesSocket = (config: SocketConfig) => {
|
||||
}
|
||||
}
|
||||
|
||||
// 4th LID→PN source: device-list entries sharing the same raw_id
|
||||
// WA Business uses this for accounts where HistorySync sends zero phoneNumberToLidMappings
|
||||
const allEntries = [...result.list, ...result.sideList]
|
||||
const rawIdMap = new Map<number, { pn?: string; lid?: string }>()
|
||||
for (const item of allEntries) {
|
||||
if (typeof item.rawId !== 'number' || isNaN(item.rawId)) continue
|
||||
const decoded = jidDecode(item.id)
|
||||
if (!decoded) continue
|
||||
const entry = rawIdMap.get(item.rawId) || {}
|
||||
if (decoded.server === 'lid' || decoded.server === 'hosted.lid') {
|
||||
entry.lid = item.id
|
||||
} else if (decoded.server === 's.whatsapp.net' || decoded.server === 'c.us') {
|
||||
entry.pn = item.id
|
||||
}
|
||||
rawIdMap.set(item.rawId, entry)
|
||||
}
|
||||
const rawIdMappings: LIDMapping[] = []
|
||||
for (const { pn, lid } of rawIdMap.values()) {
|
||||
if (pn && lid) {
|
||||
rawIdMappings.push({ lid: jidNormalizedUser(lid), pn: jidNormalizedUser(pn) })
|
||||
}
|
||||
}
|
||||
if (rawIdMappings.length > 0) {
|
||||
await signalRepository.lidMapping.storeLIDPNMappings(rawIdMappings)
|
||||
logger.debug({ count: rawIdMappings.length }, 'stored LID-PN mappings from raw_id pairing')
|
||||
}
|
||||
|
||||
const meId = authState.creds.me?.id
|
||||
if (!meId) throw new Boom('Not authenticated', { statusCode: 401 })
|
||||
const meLid = authState.creds.me?.lid || ''
|
||||
|
||||
Reference in New Issue
Block a user