npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

redaction-research

v0.1.1

Published

Local web app for detecting and reviewing potentially incomplete PDF redactions

Downloads

307

Readme

RedactionResearch – lokale Web-App

RedactionResearch

RedactionResearch prüft PDF-Dokumente darauf, ob geschwärzte Informationen technisch noch vorhanden und auslesbar sind. Die lokale Web-App erkennt mögliche Schwachstellen, zeigt den Text hinter verdächtigen Schwärzungen und lässt jeden Fund anschließend von einem Menschen bestätigen oder überspringen.

Alle PDFs, Analyseergebnisse und Review-Entscheidungen bleiben lokal auf dem Computer.

Voraussetzungen

  • Node.js 22.5 oder neuer
  • Ein lokaler Ordner mit PDF-Dateien

Installation und Start mit npm

npm install --global redaction-research
RedactionResearch

Danach im Browser öffnen:

http://127.0.0.1:3003/

Einen anderen Port festlegen:

RedactionResearch --port 4000

RedactionResearch --help zeigt alle verfügbaren Optionen.

Installation und Start mit Homebrew

brew install oliverjessner/tap/redaction-research
RedactionResearch

Für die Entwicklung direkt aus dem Repository:

npm install
npm start

Nach Änderungen an der App muss der Server neu gestartet und die Seite neu geladen werden.

Repository-Struktur

server.js       Lokaler Webserver und API
forensic.mjs    PDF-Scanner
public/         Benutzeroberfläche
lib/            Gemeinsame SQLite- und PDF-Funktionen
test/           Automatisierte Tests
package.json    Installation und alle Befehle

Projekt anlegen

Die App startet in der Ansicht Projekte.

  1. Einen eindeutigen Projektnamen eingeben.
  2. Optional die Organisation oder Quelle angeben.
  3. Ordner auswählen anklicken und den lokalen Ordner mit den PDFs auswählen.
  4. Anlegen & importieren anklicken.

Die App berücksichtigt ausschließlich PDF-Dateien und importiert sie in einen eigenen Projektordner:

output/download/pdfs/<project_id>/

Gleichnamige, aber unterschiedliche PDFs werden nicht überschrieben. Bereits vorhandene identische Dateien werden übersprungen.

Über PDFs hinzufügen können später weitere PDFs in ein bestehendes Projekt importiert werden.

Über Projekt löschen wird das Projekt nach einer Bestätigung aus SQLite entfernt. Dabei werden auch alle zugehörigen Dokumenteinträge, Findings, Review-Entscheidungen, Scan-Zustände und Job-Verläufe gelöscht. Die PDF-Dateien auf der Festplatte bleiben erhalten. Projekte mit einem laufenden Import oder Scan können nicht gelöscht werden.

Forensic-Run

Forensic-Run startet die technische Untersuchung aller noch nicht erfolgreich gescannten PDFs des Projekts.

Erkannte mögliche Schwachstellen

  • REDACTION_ANNOTATION_WITH_LIVE_TEXT: Eine echte PDF-Redaction-Annotation liegt über weiterhin maschinenlesbarem Text.
  • DARK_ANNOTATION_OVER_LIVE_TEXT: Eine dunkle Square-, Stamp-, FreeText- oder Ink-Annotation überdeckt weiterhin vorhandenen Text.
  • ANNOTATION_OVERLAY_HIDES_LIVE_TEXT: Ein Annotation-Overlay verdeckt Text; beim Rendern ohne Annotationen verschwindet die dunkle Fläche.
  • DARK_PAGE_CONTENT_HIDES_LIVE_TEXT: Ein schwarzes Seitenobjekt, Rechteck oder Bild liegt über weiterhin vorhandenem Text.
  • LIVE_TEXT_NOT_VISIBLE_ON_WHITE_REGION: Text ist technisch vorhanden, wird aber auf einer nahezu weißen Fläche nicht sichtbar dargestellt.
  • FORM_FIELD_VALUES_REMAIN_MACHINE_READABLE: Ausgefüllte Formularfelder enthalten weiterhin auslesbare Werte.
  • SENSITIVE_PATTERN_IN_PDF_METADATA: PDF- oder XMP-Metadaten enthalten ein erkanntes Muster für eine E-Mail-Adresse, IBAN oder österreichische beziehungsweise deutsche Telefonnummer.
  • SENSITIVE_PATTERN_IN_BOOKMARK_OUTLINE: Titel in der Lesezeichenstruktur enthalten eines dieser sensiblen Muster.
  • SUSPICIOUS_EMBEDDED_ATTACHMENT: Ein eingebetteter Anhang besitzt einen verdächtigen Namen wie „ungeschwärzt“, „unredacted“, „original“, „raw“, „source“ oder „backup“.
  • INCREMENTAL_PDF_REVISIONS_PRESENT: Das PDF enthält frühere inkrementelle Revisionen, in denen alte Inhalte fortbestehen könnten. Revisionen allein sind noch kein Beweis für ein Datenleck.

Zusätzliche Warnsignale

Diese Merkmale werden als Kontext gespeichert und erhöhen nicht automatisch den Status zu einem tatsächlichen Problem:

  • OPTIONAL_CONTENT_LAYERS_PRESENT: Das PDF enthält optionale oder ausblendbare Ebenen.
  • EMBEDDED_ATTACHMENTS_PRESENT: Das PDF enthält eingebettete Dateien oder Anhänge.
  • FORM_FIELDS_WITH_VALUES_PRESENT: Das PDF enthält ausgefüllte Formularfelder.
  • INCREMENTAL_PDF_REVISIONS_PRESENT: Das PDF enthält mehrere Revisionen oder Verweise auf frühere Dokumentstände. Digitale Signaturen werden dabei als möglicher legitimer Grund berücksichtigt.

Bei E-Mail-Adressen, IBANs und Telefonnummern speichert der Scanner nur die erkannte Datenkategorie, nicht den gefundenen Inhalt.

Der Fortschritt erscheint direkt auf der Projektkarte. Bereits erfolgreich gescannte PDFs werden übersprungen. Nach dem Scan rekonstruiert die App den Text in allen offenen Fundregionen. Findings, deren Regionen ausschließlich Unterstriche und Leerraum enthalten, werden automatisch als Skip markiert. Leere Regionen, andere Symbole sowie Inhalte mit mindestens einem Buchstaben oder einer Zahl bleiben zur manuellen Prüfung offen. Der Run bestätigt keine Funde automatisch.

Investigate

Über Review öffnen gelangt man zu den offenen Verdachtsfällen des Projekts.

Die Ansicht zeigt:

  • das PDF mit scrollbaren Seiten und auswählbarer Textschicht;
  • die betroffene Seite und erkannte Regionen;
  • den rekonstruierten Text hinter einer möglichen Schwärzung;
  • PDF-Metadaten mit hervorgehobenen E-Mail-Adressen;
  • Risk Score, Severity und technische Evidence;
  • alle weiteren Funde im aktuellen PDF.

Entscheidungen:

  • Accept bestätigt einen tatsächlichen problematischen Fund.
  • Skip markiert den Fund als nicht relevant.

Bereits entschiedene Funde erscheinen nach einem Neuladen nicht erneut unter Investigate. Die Anzeige Noch offen zeigt, wie viele Funde noch geprüft werden müssen.

Found

Die Ansicht Found enthält ausschließlich bestätigte Funde. Zuerst wird eine Übersicht der betroffenen Dokumente angezeigt. Von dort kann jedes Dokument mit seinen bestätigten Fundstellen geöffnet werden.

Das zugehörige Projekt wird bei jedem bestätigten Dokument angezeigt.

Skipped

Die Ansicht Skipped enthält alle manuell oder automatisch übersprungenen Funde. Wie bei Found erscheint zuerst eine Übersicht der betroffenen Dokumente. Von dort lassen sich die übersprungenen Fundstellen erneut im PDF-Viewer öffnen und vollständig untersuchen. Das bloße Ansehen verändert die gespeicherte Entscheidung nicht.

Lokale Datenspeicherung

Die Web-App speichert ihre Daten an zwei Stellen:

output/download/pdfs/<project_id>/
output/forensic/forensic.sqlite

Bei einer Installation über npm oder Homebrew speichert das CLI seine Daten im lokalen Anwendungsordner:

macOS:   ~/Library/Application Support/redaction-research/
Linux:   ~/.local/share/redaction-research/
Windows: %APPDATA%/redaction-research/

Mit REDACTION_RESEARCH_OUTPUT_DIR=/absoluter/pfad kann ein anderer Datenordner festgelegt werden. Beim Start über npm start im Repository bleibt der bisherige Projektordner output/ aktiv.

SQLite enthält unter anderem:

  • Projekte und Projektkonfigurationen;
  • gescannte Dokumente;
  • technische Findings und Scanfehler;
  • Import- und Scanfortschritt;
  • Accept- und Skip-Entscheidungen.

Der rekonstruierte Text und ausgelesene PDF-Inhalte werden nur lokal angezeigt und nicht als Review-Text gespeichert.

Bedienung

  • Mit dem Mausrad kann durch das gesamte PDF gescrollt werden.
  • Text im PDF kann markiert und kopiert werden.
  • Ein Klick auf einen Fund springt zur betroffenen PDF-Seite.
  • Koordinaten wie [51.02, 373.88, 140.66, 388.13] können im Viewer als Box eingezeichnet werden.
  • In Investigate bestätigt die Taste A den aktuellen Fund und S überspringt ihn.

Tests

Im Projektverzeichnis ausführen:

npm test