SOWA Privacy til udviklere

Installer fra kildekoden

SOWA Privacy leveres via Chrome Web Store som et binært program, men kildekoden er åben for inspektion og personlig brug under Source-Available-licensen i LICENSE. Sådan bygger og indlæser du den lokalt:

git clone https://github.com/Sowa-Privacy/sowa-privacy-chrome-extension.git
cd sowa-privacy-chrome-extension
npm install
npm run build

Åbn derefter chrome://extensions/, aktiver Udviklertilstand, og klik på Indlæs udpakket for mappen dist/.

Tre tunge vendor-bundler

Bygget én gang med esbuild, før Vite kører, så produktionsbuildet er fuldt selvindeholdt:

  • web-llm.bundle.js – ~5,4 MB – lokal LLM-inferens (valgfri, opt-in).
  • transformers.bundle.js + onnx-wasm/* – ~32 MB – NER-pipeline-runtime (valgfri, opt-in).
  • file-parsers.bundle.js + pdf.worker.min.mjs + xlsx-worker.bundle.js – ~2 MB – PDF-, DOCX- og XLSX-parsing til filupload-interceptoren.

Hvad der er indeni

manifest.json                 Chrome MV3-manifest (eneste sandhedskilde for version)
contentScript.js              MV3-indholdsscript-indgangspunkt
service_worker.js             MV3-service worker (tilstandsløs)
offscreen.js                  Offscreen-dokument til NER-inferens

lib/
  constants.js                DEF_CONFIG, PRESET_PATTERNS, NER_MODELS,
                              WEBLLM_MODELS, INDUSTRY_BLACKLISTS
  pii-core.js                 detectPII, mergeDetectionHits, sortliste + regex-pipeline
  ner-detector.js             NER-pipeline + diagnostisk tilstandsflade
  ui-utils.js                 shouldUseRegex / NER / LLM-hjælpere, tema, debounce
  ui_i18n.js                  t() + RESOURCES (4 sprog) + applyI18n
  cs/
    owl-guardian.js           Owl-widget Shadow DOM, kontinuerlig scanning, badge-tæller
    upload-interceptor.js     Fil-drag/drop / filinput-interceptor
    host-matcher.js           contentIntegration.entries mønstertilpasning

tests/unit/                   688 enhedstests – hold grøn
scripts/                      esbuild-bundle + zip-pakning

Privatlivsgarantier

Dette er reglerne, der håndhæves i koden – ikke blot løfter i markedsføring:

  • Ingen telemetri, ingen analyse, ingen førstepartsserverkald – med én snævert afgrænset undtagelse: brugerens egen rettighedskontrol (et enkelt autoriseret POST til /api/entitlements/me, der kun returnerer brugerens planflag). Caches i en time. Ingen PII, ingen prompter.
  • NER er slået fra som standard, kun opt-in – NER-modellen er en 65 MB tredjeparts-download (HuggingFace). Den begynder aldrig at indlæse, medmindre brugeren eksplicit aktiverer knappen i Indstillinger.
  • Lokal LLM er slået fra som standard, kun opt-in – samme regel. WebLLM-modeller er store; at downloade én er brugerens beslutning.
  • Owl er websiteafgrænset – indholdsscriptet registreres på <all_urls> til lifecycle-hooks, men detektion, model-foropvarmning og owl-widget kører kun på de syv hosts i contentIntegration.entries (ChatGPT, OpenAI, Claude, Gemini, Copilot, Grok, x.ai).
  • CSP forbyder dynamisk kodeudførelse'wasm-unsafe-eval' til ONNX er tilladt; 'unsafe-eval' er ikke. Ingen Function-fra-streng, ingen eval-drevne plugins.
  • Kun Promises til chrome.*-API'er – ingen callback-form, der slører fejlhåndtering.
  • Tilstandsløs service worker – MV3 afsluttes aggressivt; persistens lever i chrome.storage, ikke i modul-globals.

Tests

Tests er den primære korrekthedsgating. Fra v1.2.5.x: 688 ud af 689 bestået i 17 suiter. Ny kode skal holde dette grønt.

npm run test:unit:nocov   # fast loop during development (~3s)
npm run test:unit          # CI gate with coverage
npm run typecheck          # tsc --noEmit
npm run lint               # eslint

Fejlrettelser følger en TDD-form: skriv den fejlende test først, ret fejlen, testen forbliver som regressionsvagt. Et reelt eksempel leveret i tests/unit/lib/ner-detector.test.js – testen "detect-counter does NOT reset on subsequent init successes" blev skrevet før den tilsvarende rettelse og afslørede et dårligt første forsøg på implementeringen.

Bidrag

Bidrag til det officielle repository er velkomne under licensbetingelserne. Åbn et issue eller indsend en pull request i overensstemmelse med tekniske standarderne i CONTRIBUTING.md:

  • Branch fra main. Én logisk ændring pr. PR.
  • Commit-beskedkonvention: type(scope): description (vX.Y.Z.W).
  • Opdater MIGRATION_LOG.md for ikke-trivielle ændringer (nye moduler, kontraktændringer, arkitekturskift).
  • Tjekliste ved indsendelse for PR'er, der berører detektion eller netværk: ingen nye fetch()-kald til en førstepartsserver, ingen ny telemetri, ingen tung komponent automatisk aktiveret, alt du gemmer noteres i migreringsloggen, enhver ny tilladelse er begrundet over for Chrome Web Store-anmelderen.

Ansvarlig videregivelse

For sikkerhedssårbarheder bedes du ikke åbne offentlige GitHub-issues. Send en detaljeret rapport til security@sowaprivacy.ai:

  • Klar beskrivelse af sårbarheden.
  • Trin til reproduktion.
  • Berørt version (version-feltet i manifest.json).
  • Konsekvensanalyse, hvis du har én.
  • Foreslået rettelse, hvis relevant.

Vi forpligter os til at bekræfte modtagelsen af din rapport inden for 72 timer, give en statusopdatering inden for 7 dage, kreditere dig i udgivelsesnoterne (medmindre du foretrækker anonymitet) og koordinere tidspunktet for offentlig videregivelse med dig.

Det offentliggjorte omfang, eksempler på, hvad vi anser for en sårbarhed, og en Hall of Fame findes i SECURITY.md i rodmappen af repository'et.