From 2856d0989a2499fefd93db6bd2ca4bb5432417b9 Mon Sep 17 00:00:00 2001 From: Jonas Date: Wed, 21 Jun 2023 15:50:39 +0200 Subject: [PATCH] Add y.js helpers to decode awareness messages Signed-off-by: Jonas --- src/helpers/yjs.js | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/helpers/yjs.js b/src/helpers/yjs.js index bc83c1e30a5..d843bc0b7e0 100644 --- a/src/helpers/yjs.js +++ b/src/helpers/yjs.js @@ -20,8 +20,21 @@ * */ -import { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js' +import { encodeArrayBuffer, decodeArrayBuffer } from './base64.js' import { Doc, encodeStateAsUpdate, applyUpdate } from 'yjs' +import * as decoding from 'lib0/decoding.js' + +export const yjsMessageTypes = { + sync: 0, + awareness: 1, + awarenessQuery: 3, +} + +export const yjsMessageSyncTypes = { + step1: 0, + step2: 1, + update: 3, +} /** * @@ -42,3 +55,29 @@ export function applyDocumentState(ydoc, documentState, origin) { const update = decodeArrayBuffer(documentState) applyUpdate(ydoc, update, origin) } + +/** + * @param {string} update - base64 encoded Y.js message + */ +export function getMessageType(update) { + const decoder = decoding.createDecoder(update) + return decoding.readVarUint(decoder) +} + +/** + * @param {string} update - base64 encoded Y.js message + */ +export function getAwarenessMessageClientIds(update) { + const decoder = decoding.createDecoder(update) + const type = decoding.readVarUint(decoder) + if (type !== yjsMessageTypes.awareness) { + return [] + } + + const len = decoding.readVarUint(decoder) + const clientIds = [] + for (let i = 0; i < len; i++) { + clientIds.push(decoding.readVarUint(decoder)) + } + return clientIds +}