События cb.system на стороне сервера.

ready
Система онлайн, все переменные доступны.
cb.system.addListener('ready', callback)
'wss:' + location.path
Событие соединения веб сокета
cb.system.addListener('wss:/myevent', (client, req) => {})
rendernode
Событие рендера для каждого элемента. Если в переменную detail.html вы запишите какую либо разметку, то результат рендера будет переопределен на эту разметку.
cb.system.on('rendernode', detail => { const {elem, LANG, getVideo, className, calmAttr, posterAttr} = detail const {_item} = elem if (_item === 'video') { const {value, posters, duration, width, height, optimizedPoster, optimizedVideo} = getVideo(elem.video, LANG) const {title} = elem let html = `<section ${className(elem)}> <video ${calmAttr(elem)} preload="none"> <source src="${value[0]}" ${posterAttr(posters[0])} width="${width[0]}" height="${height[0]}" media="(min-width: 481px)">` if (optimizedVideo[0].name) { const aspect = width[0] / height[0] const height_m = 480 / aspect html += `<source src="${optimizedVideo[0].name}" ${posterAttr(optimizedPoster[0].name)} width="480" height="${height_m}" media="(max-width: 480px)">` } html += `</video> </section> ` detail.html = html } })
pageprivacychange
Событие изменения приватности страницы.
cb.system.on('pageprivacychange', (access, req) => { console.log(access, req) })
sendEmail
Событие отправки эл. почты. В событии отправки письма переменная mode подключает одну из четырех папок: first-time, enter-by-code, password-restoration, security. Сам файл custom/emails/index.js подключается в init.js.
cb.system.on('sendEmail', async data => { const {mode, email, lang, userAgent} = data const folder = ROOT_CUSTOM + `/emails/auth/${mode}` data.text = cb.system.textTolanguage(require(folder + '/text.json'), data.lang) data.style = fs.readFileSync(folder + '/style.css') data.emailkit = fs.readFileSync(ROOT_CUSTOM + '/emails/emailkit.css') const html = await ejs.renderFile(folder + '/index.ejs', data, {async: true}) // Для теста закомментируйте строчки ниже и включите последние строчки const {from, subject} = data.TEXT const mailStatus = await cb.UserManager.sendMail({email, from, subject, html, attachments: []}) if (mailStatus !== 'ok') await cb.UserManager.deleteByEmail(email) data.mailStatus = mailStatus // Для теста mailStatus может принимать значения: ok, email_not_exists, auth_error // data.mailStatus = 'ok' // fs.writeFileSync(ROOT + '/test.html', html) })

События клиента (браузера)

clientOnline
Клиент подключился. В объекте data параметры браузера.
cb.system.on('clientOnline', (req, data) => { console.log(data) })
clientOffline
Клиент отключился. В объекте data параметры браузера.
cb.system.on('clientOffline', (req, data) => { console.log(data) })

События пользователя

userOnline
Авторизованный пользователь подключился.
cb.system.on('userOnline', (req, userId) => { console.log(userId) })
userOffline
Авторизованный пользователь отключился.
cb.system.on('userOffline', (req, userId) => { console.log(userId) })
logIn
Пользователь авторизовался
cb.system.on('logIn', (user) => { console.log(user) })
logOut
Пользователь вышел из учетной записи
cb.system.on('logOut', (email) => { console.log(email) })
beforeCreateUser
Событие срабатывает когда пользователь создается в системе до его записи в базу данных. Пример как добавить пользователя в группу, зная его эл. почту.
const adminGroup = ['savoon@yandex.ru', 'savoon@mail.ru'] cb.system.on('beforeCreateUser', doc => { if (adminGroup.includes(doc.email) && doc._system.groups.indexOf('admin') === -1) { doc._system.groups.push('admin') } })
afterCreateUser
Событие срабатывает сразу после записи пользователя в базу данных.
cb.system.on('afterCreateUser', doc => { console.log(doc._id) })
addGroup
Событие добавления пользователя в группу
cb.system.on('addGroup', user => { console.log(user) })
removeGroup
Событие выхода пользователя из группы
cb.system.on('removeGroup', user => { console.log(user) })
updatePassword
Событие обновления пароля
cb.system.on('updatePassword', (email, userAgent) => { console.log(email, userAgent) })
unsuccessLogin
Событие неуспешной попытки авторизовать пользователя
cb.system.on('unsuccessLogin', (email, userAgent, options) => { const {requestLimitFail, passwordCheckFail} = options console.log(email, userAgent, requestLimitFail, passwordCheckFail) })

События сервисов

CMSProvideServices
Событие регистрации нового сервиса
cb.system.on('CMSProvideServices', (services, req) => { if (cb.UserManager.hasAccessToService(req, 'chat')) { services.push({ name: { ru: 'Чат', en: 'Chat', zh: '聊天', }, link: '/chat', color: '#583f8a', icon: '<svg viewBox="0 0 24 24">..</svg>', }) } })
beforeCreateChat
Событие создания чата перед записью в базу данных
cb.system.on('beforeCreateChat', (doc) => { console.log(doc) })
afterCreateChat
Событие создания чата после записи в базу данных
cb.system.on('afterCreateChat', (doc) => { console.log(doc._id) })