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