| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /* eslint-disable
- max-len,
- no-unused-vars,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS101: Remove unnecessary use of Array.from
- * DS102: Remove unnecessary code created because of implicit returns
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- import Settings from '@overleaf/settings'
- import Metrics from '@overleaf/metrics'
- import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
- import os from 'node:os'
- import crypto from 'node:crypto'
- let EditorRealTimeController
- const rclient = RedisWrapper.client('pubsub')
- const HOST = os.hostname()
- const RND = crypto.randomBytes(4).toString('hex') // generate a random key for this process
- let COUNT = 0
- export default EditorRealTimeController = {
- emitToRoom(roomId, message, ...payload) {
- // create a unique message id using a counter
- const messageId = `web:${HOST}:${RND}-${COUNT++}`
- let channel
- if (roomId === 'all' || !Settings.publishOnIndividualChannels) {
- channel = 'editor-events'
- } else {
- channel = `editor-events:${roomId}`
- }
- const blob = JSON.stringify({
- room_id: roomId,
- message,
- payload,
- _id: messageId,
- })
- Metrics.summary('redis.publish.editor-events', blob.length, {
- status: message,
- })
- return rclient.publish(channel, blob)
- },
- emitToAll(message, ...payload) {
- return this.emitToRoom('all', message, ...Array.from(payload))
- },
- }
|