если мы обновляем страницу (не всегда), когда только один экземпляр пользователя редактирует документ, расширение базы данных не устанавливает уже отредактированный контент. Насколько я знаю, расширение базы данных должно фиксировать начальный редактируемый контент, даже если страница обновляется. Пожалуйста, поправьте, если я ошибаюсь. Код server.js выглядит следующим образом (с MySQL. Я уже пробовал с FireBase, SQLite как с памятью, так и с записью на диск и RethinkDB):

import * as dotenv from "dotenv";
dotenv.config();

import { Server } from "@hocuspocus/server";
import { Database } from "@hocuspocus/extension-database";
import mysql from "mysql2";
/* 

Should we convert it to Uint8Array or the DB extension doesit by default?

*/

//import { toUint8Array, fromUint8Array } from "js-base64";
import { Throttle } from "@hocuspocus/extension-throttle";

const pool = mysql.createPool({
    connectionLimit: 100,
    host: process.env.DB_HOST,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    port: process.env.DB_PORT,
    debug: false,
});

const server = Server.configure({
    port: process.env.HOCUSPOCUS_PORT,
    extensions: [
        new Throttle({
            throttle: 200,
            banTime: 1,
        }),

        new Database({
            fetch: async ({ documentName }) => {
                return new Promise((resolve, reject) => {
                    console.log("Trying to fetch");
                    pool?.query(
                        "SELECT data FROM ydocuments WHERE name = ? ORDER BY id DESC",
                        [documentName],
                        (error, row) => {
                            if (error) {
                                reject(error);
                            }
                            console.log("data: " + JSON.stringify(row));
                            if (row && row.data) {
                                resolve(row.data);
                            } else {
                                resolve(null);
                            }
                        },
                    );
                });
            },

            store: async ({ documentName, state }) => {
                pool?.query(
                    "INSERT INTO ydocuments (name, data) VALUES (?, ?) ON DUPLICATE KEY UPDATE data = ?",
                    [documentName, state, state],
                    (error, result) => {
                        if (error) {
                            throw error;
                        }
                        console.log(`inserted/updated ${result.affectedRows}`);
                    },
                );
            },
        }),
    ],
});

server.listen();

Кроме того, должны ли мы преобразовать его в Uint8Array или расширение БД делает это по умолчанию, как указано в коде?

Эта проблема была решена с помощью следующих рекомендаций по ссылкам на github.

https://github.com/ueberdosis/hocuspocus/issues/540