Files
MindSift/frontend/src/lib/docSync/oneoff.ts
T
sandrodachandClaude Opus 5.5 aea4324c20
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m14s
refactor(notes): remove legacy whole-document saves; all block changes go through sync
Phase 5 of the collaboration plan:
- Remove PATCH /documents/{id}/blocks, PatchDocumentBlocks, the
  DOC_BLOCKS_PATCHED event and its types, FlushDocumentState and
  LoadDocumentState. PUT /documents/{id} rejects blocks (400) and only
  changes title, icon, folder and pin; editors may now change title/icon.
- The to-do overview ticks via a single operation on /docs/{id}/sync
  (new skipLog flag). Task links set the block tick with a targeted
  operation and notify open editors; creating a linked task needs edit
  rights.
- Keep the three share tables: DocRole already decides centrally, and
  rewriting the visibility queries would only add risk (documented in plan).
- Tests adapted to the new paths; share e2e test now also ticks a to-do in
  the overview.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 14:35:59 +01:00

19 lines
793 B
TypeScript

// Sends a few operations for a note that is not open in an editor (e.g. ticking a to-do in the overview).
// Goes through the same sync endpoint and rules as the editor, so the change is logged and pushed to
// everyone who has the note open.
import type { Op, Result } from './model';
import { httpTransport } from './transport';
export async function sendDocOps(docId: string, ops: Omit<Op, 'opId'>[]): Promise<Result[]> {
const bytes = new Uint8Array(8);
crypto.getRandomValues(bytes);
const clientId = `once_${Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('')}`;
const res = await httpTransport.sync(docId, {
clientId,
lastSeq: 0,
ops: ops.map((op, i) => ({ ...op, opId: `${clientId}.${i}` }) as Op),
skipLog: true,
});
return res.results;
}