'use strict'; const events = require("events"); module.exports = function createDeduplicator(options) { let mergedOptions = Object.assign({ historyLength: 10 }, options); let seenMessages = {}; // FIXME: Use a Set instead? function tryMessage(client, data, callback) { if (client.socketId == null) { // FIXME: Warning! console.error("Not deduplicating message because client.socketId is null"); callback(); } else if (data.messageId == null) { // FIXME: Warning! console.error("Not deduplicating message because data.messageId is null"); callback(); } else { if (seenMessages[client.socketId] == null) { seenMessages[client.socketId] = []; } let clientSeenMessages = seenMessages[client.socketId]; if (clientSeenMessages.indexOf(data.messageId) !== 1) { clientSeenMessages.push(data); if (clientSeenMessages.length > mergedOptions.historyLength) { clientSeenMessages.shift(); } callback(); } } } tryMessage.forgetClient = function forgetClient(client) { delete seenMessages[client.socketId]; } }