[Medium] quick-type activity tracking serializes full settings into metadata (privacy/size) #67

Closed
opened 2026-05-05 04:16:12 +00:00 by spikerj · 1 comment
Owner

Severity: Medium (privacy/perf)

File: spikersoft-angular/libraries/tools/src/components/quick-type/quick-type.component.ts (~734)

Problem: Obfuscation tracking sends JSON.stringify(settings) in activity metadata. This can be large and leaks user's obfuscation preferences into analytics.

Fix: Either omit detail entirely or send a hash/summary (e.g. { profileName, settingsHash }) instead of the full settings object.

Acceptance criteria:

  • Activity metadata payload doesn't contain full settings JSON
  • Sufficient signal retained for analytics (e.g. profile/preset name)
  • Bundle size of metadata field bounded
**Severity:** Medium (privacy/perf) **File:** `spikersoft-angular/libraries/tools/src/components/quick-type/quick-type.component.ts` (~734) **Problem:** Obfuscation tracking sends `JSON.stringify(settings)` in activity metadata. This can be large and leaks user's obfuscation preferences into analytics. **Fix:** Either omit detail entirely or send a hash/summary (e.g. `{ profileName, settingsHash }`) instead of the full settings object. **Acceptance criteria:** - [ ] Activity metadata payload doesn't contain full settings JSON - [ ] Sufficient signal retained for analytics (e.g. profile/preset name) - [ ] Bundle size of metadata field bounded
Author
Owner

Resolved.

Added summarizeObfuscationSettings(settings) private helper. It walks the boolean flags on the settings object and returns:

{ enabledCount: number, totalToggles: number, enabled: string[/* up to 12 names */] }

The obfuscate tracking call now passes that summary instead of JSON.stringify(settings). The full settings object never leaves the client; metadata is bounded.

File: spikersoft-angular/libraries/tools/src/components/quick-type/quick-type.component.ts.

**Resolved.** Added `summarizeObfuscationSettings(settings)` private helper. It walks the boolean flags on the settings object and returns: ``` { enabledCount: number, totalToggles: number, enabled: string[/* up to 12 names */] } ``` The obfuscate tracking call now passes that summary instead of `JSON.stringify(settings)`. The full settings object never leaves the client; metadata is bounded. File: `spikersoft-angular/libraries/tools/src/components/quick-type/quick-type.component.ts`.
Sign in to join this conversation.