* feat: Add sensitive data masking to packet logging by introducing a sanitization function and a list of sensitive keys.
* test: mock console methods in logger tests and restore after each test
* refactor: remove redundant sensitive data masking functions and integrate safeStringifyPacket utility for improved logging
* fix: run format:write
* test: enhance logger tests with error handling for directory setup and cleanup
* refactor: optimize sensitive data masking logic by checking for exact matches in sensitive keys
* refactor: enhance sensitive data masking to handle circular references and improve sanitization logic
* refactor: update sensitive data masking comments and test descriptions to improve clarity and consistency
* test: enhance logger tests with dynamic log directory creation and cleanup after tests
* test: add unit tests for handling malformed JSON strings in sensitive data masking
- Trigger immediate quota poll when main window gains focus.
- Add 10s debounce to prevent API spam on frequent window switching.
- Add concurrency guard to prevent overlapping poll requests.
- Reset background polling interval after manual refresh.
- Add unit tests for polling, debounce, and concurrency logic.
Summary
- Replace hard keytar dependency with a multi-strategy key storage:
1) safeStorage (Electron built-in) — preferred
2) keytar (system keychain) — fallback
3) file-based encryption — last resort
- Dynamically import keytar to avoid asar load failures
- Refactor cloudHandler to use const (clean code)
- Fix “Failed to load cloud accounts” in packaged app
Rationale
The keytar native module can fail to load from asar archives in production builds. This ensures the app works even when system keychain access is unavailable.
Additional changes
- Replace sync file ops with async (fs/promises)
- Add atomic file writes to prevent data races
- Implement concurrency lock for key generation
- Add security error codes for better diagnostics
- Add warnings for file-based fallback mode
- Align error handling after merge
- Migrate legacy encrypted account data
References
- Issue: #38
- Commit: 92dc2f6