Sync Protocol Using Only Encoded State

Would the following code fulfill a y-protocol compatible sync protocol that does not use a Y.Doc (instead using encoded state):

/**
 * Create a sync step 1 message based on the state of the current shared document.
 *
 * Original code:
 *
 *  export const writeSyncStep1 = (encoder, doc) => {
 *       encoding.writeVarUint(encoder, messageYjsSyncStep1)
 *       const sv = Y.encodeStateVector(doc)
 *       encoding.writeVarUint8Array(encoder, sv)
 *  }
 *
 * @param encoder: A YJS encoder
 * @param encodedstate: A Y.Doc that has been encoded to bytes
 */
export const writeSyncStep1 = (encoder: encoding.Encoder, encodedstate: Uint8Array) => {
  encoding.writeVarUint(encoder, messageYjsSyncStep1);
  encoding.writeVarUint8Array(encoder, Y.encodeStateVectorFromUpdate(encodedstate));
};

/**
 * Create a sync step 2 message based on the state of the current shared document.
 *
 * Original code:
 *
 * export const writeSyncStep2 = (encoder, doc, encodedStateVector) => {
 *     encoding.writeVarUint(encoder, messageYjsSyncStep2)
 *     encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))
 *  }
 *
 * @param encoder: A YJS encoder
 * @param encodedstate: A Y.Doc that has been encoded to bytes
 * @param encodedStateVectory: A client document state vector
 */
export const writeSyncStep2 = (encoder: encoding.Encoder, encodedstate: Uint8Array, encodedStateVector: Uint8Array) => {
  encoding.writeVarUint(encoder, messageYjsSyncStep2);
  encoding.writeVarUint8Array(encoder, Y.diffUpdate(encodedstate, encodedStateVector));
};

/**
 * Read SyncStep1 message and reply with SyncStep2.
 *
 * Original code:
 *
 * export const readSyncStep1 = (decoder, encoder, doc) =>
 *   writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))
 *
 * @param decoder The reply to the received message
 * @param encoder The received message
 * @param encodedstate:  A Y.Doc that has been encoded to bytes
 */
export const readSyncStep1 = (decoder: decoding.Decoder, encoder: encoding.Encoder, encodedstate: Uint8Array) =>
  writeSyncStep2(encoder, encodedstate, decoding.readVarUint8Array(decoder));

That’s OK.

If you use y-websocket provider, you’ll find it compatible.