SOWA Privacy för utvecklare
Installera från källkod
SOWA Privacy distribueras via Chrome Web Store som en binärfil, men källkoden är öppen för inspektion och personligt bruk under Source-Available-licensen i LICENSE. Så här bygger och laddar du det lokalt:
git clone https://github.com/Sowa-Privacy/sowa-privacy-chrome-extension.git
cd sowa-privacy-chrome-extension
npm install
npm run build
Öppna sedan chrome://extensions/, aktivera Utvecklarläge och klicka på Läs in okomprimerat för mappen dist/.
Tre tunga leverantörspaket
Byggs en gång med esbuild innan Vite körs, vilket gör att produktionsbygget är helt fristående:
web-llm.bundle.js– ~5.4 MB – lokal LLM-inferens (valfri, opt-in).transformers.bundle.js+onnx-wasm/*– ~32 MB – NER-pipeline-körning (valfri, opt-in).file-parsers.bundle.js+pdf.worker.min.mjs+xlsx-worker.bundle.js– ~2 MB – PDF-, DOCX-, XLSX-tolkning för filuppladdningsavlyssnaren.
Vad som ingår
manifest.json Chrome MV3 manifest (single source of truth for version)
contentScript.js MV3 content script entrypoint
service_worker.js MV3 service worker (stateless)
offscreen.js Offscreen doc for NER inference
lib/
constants.js DEF_CONFIG, PRESET_PATTERNS, NER_MODELS,
WEBLLM_MODELS, INDUSTRY_BLACKLISTS
pii-core.js detectPII, mergeDetectionHits, blacklist + regex pipeline
ner-detector.js NER pipeline + diagnostic state surface
ui-utils.js shouldUseRegex / NER / LLM helpers, theme, debounce
ui_i18n.js t() + RESOURCES (4 locales) + applyI18n
cs/
owl-guardian.js Owl widget Shadow DOM, continuous scan, badge counter
upload-interceptor.js File drag/drop / file input intercept
host-matcher.js contentIntegration.entries pattern matching
tests/unit/ 688 enhetstester – håll dem gröna
scripts/ esbuild bundle + zip packaging
Integritetsgarantier
Det här är regler som tillämpas i kod, inte bara löften i marknadsföringstext:
- Ingen telemetri, ingen analys, inga egna serveranrop – med ett snävt undantag: användarens egen behörighetskontroll (en enda autentiserad POST till
/api/entitlements/mesom returnerar inget annat än användarens planflaggor). Cachelagras i en timme. Ingen PII, inga prompter. - NER är av som standard, opt-in krävs – NER-modellen är en 65 MB tredjepartsnedladdning (HuggingFace). Den börjar aldrig laddas förrän användaren aktivt kryssar i reglaget i Inställningar.
- Lokal LLM är av som standard, opt-in krävs – samma regel. WebLLM-modeller är stora; att ladda ner en är användarens beslut.
- Owl är webbplatsspecifik – innehållsskriptet registreras på
<all_urls>för livscykelkrokar, men identifiering, modell-förvärming och owl-widgeten körs endast på de sju värdarna icontentIntegration.entries(ChatGPT, OpenAI, Claude, Gemini, Copilot, Grok, x.ai). - CSP förbjuder dynamisk kodexekvering –
'wasm-unsafe-eval'för ONNX är tillåtet;'unsafe-eval'är det inte. IngenFunction-från-sträng, inga eval-drivna plugin-program. - Enbart Promises för chrome.*-API:er – ingen callback-form som döljer felhantering.
- Tillståndslös service worker – MV3 avslutas aggressivt; persistens lagras i
chrome.storage, inte i modulens globala variabler.
Tester
Tester är den primära korrekthetsbarriären. Per v1.2.5.x: 688 av 689 godkända i 17 sviter. Ny kod måste hålla detta 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
Buggfixar följer ett TDD-mönster: skriv det misslyckade testet först, åtgärda buggen, testet kvarstår som regressionsgaranti. Verkligt exempel i tests/unit/lib/ner-detector.test.js – testet "detect-counter does NOT reset on subsequent init successes" skrevs innan motsvarande fix och fångade ett misslyckat första implementationsförsök.
Bidra
Bidrag till det officiella arkivet är välkomna enligt licensvillkoren. Öppna ett ärende eller skicka in en pull request enligt de tekniska standarderna i CONTRIBUTING.md:
- Förgrena från
main. En logisk ändring per PR. - Konvention för commit-meddelanden:
typ(scope): beskrivning (vX.Y.Z.W). - Uppdatera
MIGRATION_LOG.mdför icke-triviala ändringar (nya moduler, kontraktsändringar, arkitektoniska förändringar). - Checklista inför inlämning för PR:er som rör identifiering eller nätverk: inga nya
fetch()-anrop till en egna server, ingen ny telemetri, ingen tung komponent aktiveras automatiskt, allt du lagrar dokumenteras i migrationsloggen, varje ny behörighet är motiverad för granskaren i Chrome Web Store.
Ansvarsfull avslöjning
För säkerhetsbrister ber vi dig inte öppna offentliga GitHub-ärenden. Skicka en detaljerad rapport per e-post till security@sowaprivacy.ai:
- Tydlig beskrivning av sårbarheten.
- Steg för att reproducera.
- Berörda version (fältet
versionimanifest.json). - Konsekvensbedömning om du har en.
- Föreslagen åtgärd om tillämpligt.
Vi förbinder oss att bekräfta din rapport inom 72 timmar, ge en statusuppdatering inom 7 dagar, nämna dig i versionsnoterningarna (om du inte föredrar anonymitet) och samordna tidpunkten för offentliggörande med dig.
Det publicerade omfånget, exempel på vad vi anser vara en sårbarhet och en hedersvägg finns i SECURITY.md i arkivets rot.