OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-core / lib / core / contract / reactions.js

31 lines · javascript ref:
const e = require("./registration"),
  { isMemberActive: t, getMemberForDeviceKey: i } = require("./query"),
  { reactionStats: r } = require("./stats"),
  { KeetContractError: a } = require("./errors")
async function o({ header: e, oplog: o, reaction: s }, { db: n, writer: c }) {
  const [d, k, u] = await Promise.all([
    i(n, c.key),
    n.get("@keet/chat-by-message-id", { oplog: o }),
    n.get("@keet/threads", { id: 0 }),
  ])
  if (!t(d) || !k || d.status.isMuted || !s) return
  if (await n.get("@keet/reactions", { id: k.id, sender: d.key, reaction: s })) throw a.ABORT()
  const l = { id: k.id, sender: d.key, clock: u.stats.chat.clock, reaction: s }
  ;(await n.insert("@keet/reactions", l), await r(n, u, l, null, e.timestamp))
}
async function s({ header: e, oplog: o, reaction: s }, { db: n, writer: c }) {
  const [d, k, u] = await Promise.all([
    i(n, c.key),
    n.get("@keet/chat-by-message-id", { oplog: o }),
    n.get("@keet/threads", { id: 0 }),
  ])
  if (!t(d) || !k || d.status.isMuted) return
  const l = await n.get("@keet/reactions", { id: k.id, sender: d.key, reaction: s })
  if (!l) throw a.ABORT()
  ;(await n.delete("@keet/reactions", l), await r(n, u, null, l, e.timestamp))
}
function n(e) {
  ;(e.add("@keet/add-reaction", o), e.add("@keet/remove-reaction", s))
}
module.exports = { [e]: n }