OverviewFilesCommitsIssuesDocsReleasesPeers

keet-cli / keet-core-4.14.4-pretty / lib / core / contract / config.js

33 lines · javascript ref:
const e = require("./registration"),
  { addEvent: t } = require("./chat"),
  { isMemberActive: r, getMemberForDeviceKey: i } = require("./query"),
  { updateAvatar: a } = require("./avatars"),
  { KeetContractError: o } = require("./errors"),
  n = 10,
  s = ["title", "description", "avatar", "supportedLanguages", "blindPeers"],
  l = { Title: 1, Description: 2, Avatar: 3, SupportedLanguages: 4, BlindPeers: 5 }
async function u({ header: e, key: u, config: c }, { db: d, writer: g, blobs: f }) {
  const [m, p] = await Promise.all([i(d, g.key), d.get("@keet/room-config")])
  if (!r(m) || !m.status.isModerator) return
  if (0 === u || u > s.length) return
  const v = s[u - 1],
    b = { ...p, [v]: c[v] }
  if (u === l.Avatar) {
    const e = p && p[v],
      t = c[v]
    if (null !== t.small && !t.small?.pointer?.inlined) throw o.ABORT()
    const r = null !== t.small ? await a(f, e, t) : null
    b[v] = r
  }
  if (u === l.Title) {
    const r = p && p[v],
      i = c[v]
    r && r !== i && (await t(d, g, { titleChanged: { from: r, to: i } }, e.timestamp))
  }
  ;(u === l.BlindPeers && (b[v] = c[v].slice(0, n)), await d.insert("@keet/room-config", b))
}
function c(e) {
  e.add("@keet/update-room-config", u)
}
module.exports = { [e]: c, CONFIG_INDEX_TO_KEY: s, Config: l }