The onStoreDocument hook is called after the document has been changed (after the onChange hook) and can be used to store the changed document to a persistent storage. Calls to onStoreDocument are debounced by default (see debounce and maxDebounce configuration options).

The easiest way to implement this functionality is by extending the extension extension-database and implementing fetch() and store() methods, as we did that in extension-sqlite. You can implement the onStoreDocument yourself with the hook directly, just make sure to apply / encode the states of the yDoc as we did in extension-database.

Hook payload

The data passed to the onStoreDocument hook has the following attributes:

import { IncomingHttpHeaders } from 'http'
import { URLSearchParams } from 'url'
import { Doc } from 'yjs'

const data = {
  clientsCount: number,
  context: any,
  document: Doc,
  documentName: string,
  instance: Hocuspocus,
  requestHeaders: IncomingHttpHeaders,
  requestParameters: URLSearchParams,
  socketId: string,