Store

by Hw

19
Raw
const store = {
  contacts: new Map(),
  chats: new Map(),
  messages: new Map(),
  saveMessage(jid, id, message, expireMs = 1200000) {
    if (!jid || !id || !message) return false;
    if (!this.messages.has(jid)) this.messages.set(jid, new Map());
    const msgs = this.messages.get(jid);
    if (msgs.has(id)) clearTimeout(msgs.get(id).timer);
    msgs.set(id, {
      data: message,
      timer: setTimeout(() => {
        msgs.delete(id);
        if (!msgs.size) this.messages.delete(jid);
      }, expireMs),
      savedAt: Date.now()
    });
    return true;
  },
  loadMessage(jid, id) {
    return this.messages.get(jid)?.get(id)?.data;
  },
  hasMessage(jid, id) {
    return !!this.messages.get(jid)?.has(id);
  },
  deleteMessage(jid, id) {
    const msgs = this.messages.get(jid);
    if (!msgs?.has(id)) return false;
    clearTimeout(msgs.get(id).timer);
    msgs.delete(id);
    if (!msgs.size) this.messages.delete(jid);
    return true;
  },
  flushMessages() {
    this.messages.forEach(msgs => msgs.forEach(m => clearTimeout(m.timer)));
    this.messages.clear();
  }
};