Skip to content

Ingress Deduplicator (Deduplikasi Pesan) ​

Jaringan WhatsApp sesekali dapat mengirimkan event webhook pesan yang sama lebih dari satu kali saat terjadi rekoneksi atau retry jaringan. IngressDeduplicator menyediakan deduplikasi pesan berbasis memori dengan operasi atomic test-and-set untuk menjamin logika bot hanya dieksekusi tepat satu kali per pesan.

NOTE

IngressDeduplicator adalah filter in-memory pada level proses. Subsistem ini bukan database idempotensi terdistribusi.


Invarian & Fitur Utama ​

  1. Atomic Test-and-Set (checkAndMark): Memeriksa keberadaan dan mencatat pesan pertama kali secara atomik dalam satu langkah sinkron.
  2. Ekstraksi Identitas Ganda: Mendukung objek Message ternormalisasi maupun raw key Baileys.
    • Pesan Pribadi: ${chatId}:${messageId}:${fromMe}
    • Pesan Grup: ${chatId}:${messageId}:${fromMe}:${senderId}
  3. TTL Kedaluwarsa Tetap: Pesan duplikat menambah counter pengamatan namun tidak memperpanjang TTL entri asli.
  4. Kapasitas Terbatas (maxTrackedMessages: 10000): Mencegah kebocoran memori dengan batasan kapasitas maksimum entri.

Konfigurasi & Default ​

javascript
import { IngressDeduplicator } from 'leaves-guardian';

const dedup = new IngressDeduplicator({
  ttlMs: 300000,              // TTL deduplikasi 5 menit (300.000 ms)
  maxTrackedMessages: 10000,  // Maksimal 10.000 identitas pesan terlacak
  cleanupIntervalMs: 60000    // Pembersihan entri kedaluwarsa tiap 60s
});

Penggunaan ​

javascript
client.on('message', async (msg) => {
  const hasil = dedup.checkAndMark(msg);

  if (hasil.isDuplicate) {
    console.log(`Mengabaikan pesan duplikat ${msg.id} (diterima ${hasil.seenCount} kali)`);
    return;
  }

  // Jalankan proses bisnis pesan
});

Event Subsistem ​

EventPayloadDeskripsi
duplicate_detected{ key, result, timestamp }Dipancarkan saat pesan duplikat terdeteksi.
dedup_reset{ key?, clearedCount?, timestamp }Dipancarkan saat catatan pelacakan dibersihkan.

Released under the MIT License.