import type { ElementsChange } from "../change"; export type RELAY_PAYLOAD = { buffer: ArrayBuffer }; export type PULL_PAYLOAD = { lastAcknowledgedVersion: number }; export type PUSH_PAYLOAD = { type: "durable" | "ephemeral"; changes: Array; }; export type CLIENT_CHANGE = ElementsChange; export type CLIENT_MESSAGE = | { type: "relay"; payload: RELAY_PAYLOAD } | { type: "pull"; payload: PULL_PAYLOAD } | { type: "push"; payload: PUSH_PAYLOAD }; export type SERVER_CHANGE = { id: string; version: number; payload: string }; export type SERVER_MESSAGE = | { type: "relayed"; payload: { changes: Array } | RELAY_PAYLOAD; } | { type: "acknowledged"; payload: { changes: Array } } | { type: "rejected"; payload: { changes: Array; message: string }; }; export interface ChangesRepository { saveAll(changes: Array): Array; getSinceVersion(version: number): Array; getLastVersion(): number; } // CFDO: should come from the shared types package export type ExcalidrawElement = { id: string; type: any; version: number; [key: string]: any; };