import { Injectable, Logger } from '@nestjs/common'; import { Hocuspocus, Document } from '@hocuspocus/server'; export type CollabEventHandlers = ReturnType< CollaborationHandler['getHandlers'] >; @Injectable() export class CollaborationHandler { private readonly logger = new Logger(CollaborationHandler.name); constructor() {} getHandlers(hocuspocus: Hocuspocus) { return { alterState: async (documentName: string, payload: { pageId: string }) => { // dummy // this.logger.log('Processing', documentName, payload); // await this.withYdocConnection(hocuspocus, documentName, {}, (doc) => { // const fragment = doc.getXmlFragment('default'); //}); }, }; } async withYdocConnection( hocuspocus: Hocuspocus, documentName: string, context: any = {}, fn: (doc: Document) => void, ): Promise { const connection = await hocuspocus.openDirectConnection( documentName, context, ); try { await connection.transact(fn); } finally { await connection.disconnect(); } } }