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 }