From fc0ea36cf32fbd52b87e94813c6022d015074f40 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 29 Dec 2025 14:06:59 +0200 Subject: [PATCH] chore(pdfjs): first attempt at intercepting store --- packages/pdfjs-viewer/src/custom.ts | 24 +++++++++++++++++++++--- packages/pdfjs-viewer/src/typings.d.ts | 14 ++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/packages/pdfjs-viewer/src/custom.ts b/packages/pdfjs-viewer/src/custom.ts index 060ed0c1c..96b8986c9 100644 --- a/packages/pdfjs-viewer/src/custom.ts +++ b/packages/pdfjs-viewer/src/custom.ts @@ -1,4 +1,4 @@ -const LOG_EVENT_BUS = true; +const LOG_EVENT_BUS = false; async function main() { // Wait for the PDF viewer application to be available. @@ -11,12 +11,14 @@ async function main() { patchEventBus(); } app.eventBus.on("documentloaded", () => { - manageSave(app); + interceptViewHistory(); + manageSave(); }); await app.initializedPromise; }; -function manageSave(app: typeof window.PDFViewerApplication) { +function manageSave() { + const app = window.PDFViewerApplication; const storage = app.pdfDocument.annotationStorage; let timeout = null; @@ -49,6 +51,22 @@ function manageSave(app: typeof window.PDFViewerApplication) { }); } +function interceptViewHistory() { + const app = window.PDFViewerApplication; + let activeFingerprint: string = app.pdfDocument.fingerprints[0]; + + const store = app.store; + store._writeToStorage = async function() { + const fileEntry = store.database.files?.find(f => f.fingerprint === activeFingerprint); + const databaseStr = JSON.stringify(fileEntry); + console.log("Write attempt.", databaseStr); + } + store._readFromStorage = async function() { + console.log("Read attempt", activeFingerprint); + return "{}"; + } +} + function patchEventBus() { const eventBus = window.PDFViewerApplication.eventBus; const originalDispatch = eventBus.dispatch.bind(eventBus); diff --git a/packages/pdfjs-viewer/src/typings.d.ts b/packages/pdfjs-viewer/src/typings.d.ts index 040300890..9370df20a 100644 --- a/packages/pdfjs-viewer/src/typings.d.ts +++ b/packages/pdfjs-viewer/src/typings.d.ts @@ -1,6 +1,19 @@ import type { PDFDocumentProxy } from "pdfjs-dist"; declare global { + /** + * @source https://github.com/mozilla/pdf.js/blob/master/web/view_history.js + */ + interface ViewHistory { + database: { + files?: { + fingerprint: string; + }[]; + }, + _writeToStorage: () => Promise; + _readFromStorage: () => Promise; + } + interface Window { PDFViewerApplication?: { initializedPromise: Promise; @@ -9,6 +22,7 @@ declare global { on(event: string, listener: (...args: any[]) => void): void; dispatch(event: string, data?: any): void; }; + store: ViewHistory; }; } }