OverviewFilesCommitsIssuesDocsReleasesPeers

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

34 lines · javascript ref:
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 }