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/me som 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 i contentIntegration.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. Ingen Function-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.md fö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 version i manifest.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.