Skip to content

Releases: Sentinel-Mexico/WhatsNexus-Dekstop

v2.3.2

Choose a tag to compare

@github-actions github-actions released this 10 Sep 19:00

Registro de Cambios - v2.3.2

Performance & Optimization

  • Chromium Efficiency Switches & Tab Throttling:
    • Configured switches before app.whenReady() in src/main.js: enabled background timer throttling (disable-background-timer-throttling=false) and activated performance feature flags CalculateNativeWinOcclusion, IntensiveWakeUpThrottling, and ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes to allow Chromium to freeze timers and throttle background tasks in non-visible contexts.
    • Implemented background tab throttling and visibility toggling upon account switching in src/renderer/renderer.js: inactive <webview> tags are marked visibility: hidden and dispatched a set-tab-active: false signal, reducing background rendering overhead. Active accounts receive visibility: visible and set-tab-active: true.
  • Clean Memory Management & Explicit WebContents Destruction:
    • Added explicit webContents.stop() and webContents.destroy() invocations in src/main.js for all partition-bound WebContents during account deletion (delete-account-data) and added a new IPC channel destroy-webview-contents.
    • Updated hibernateWebview(id) and executeDeleteAccount(id) in src/renderer/renderer.js to call webview.stop() and invoke electronAPI.destroyWebviewContents(partition) before DOM removal, eliminating dangling Chromium renderer processes.
    • Exposed destroyWebviewContents in src/preload-main.js under window.electronAPI.
  • Adaptive Network Polling (Smart Polling) & Power-Saving Pausing:
    • Replaced linear interval polling in startOfflinePolling() with an adaptive stepped schedule ([5000, 10000, 30000, 60000] ms) that backs off gracefully during extended outages.
    • Paused offline polling probes and duration timer DOM ticks when the application window is minimized or hidden (document.hidden). Automatically resumes polling and synchronizes duration on window visibilitychange and focus.
  • DinoGame & Overlay Dormancy:
    • Added visibilitychange and blur event listeners to DinoGame in src/renderer/dino-game.js to cancel active requestAnimationFrame render loops via pausar() when the window loses focus or visibility.
    • Updated destruir() to cleanly deregister all event listeners (blur, visibilitychange, resize, keydown, keyup, click).
  • Guest Preload DOM Observer Optimization:
    • In src/preload.js, bound set-tab-active IPC listener to track tab focus state; bypassed DOM scanning and interval execution when tab is inactive.
    • Narrowed MutationObserver scope from unbounded document.body to #app / #side containers, increased debounce interval to 2500ms, and implemented a hard 60-second self-termination timer to free observer resources once profile data is acquired.

v2.2.8

Choose a tag to compare

@github-actions github-actions released this 06 Sep 18:45

[2.2.8] - 2026-09-06

Fixed

  • Global Scope Syntax Error Elimination & Script Execution Restoration:
    • Removed conflicting top-level const electronAPI = window.electronAPI; declaration in renderer.js that caused V8 to throw Uncaught SyntaxError: Identifier 'electronAPI' has already been declared upon script parsing due to contextBridge.exposeInMainWorld('electronAPI', ...) defining a non-configurable global accessor on window.
    • Restored full execution and event registration across all renderer subsystems, resolving total interface freeze where sidebar navigation buttons and account tabs were non-responsive.
  • Centralized & Early Navigation Listener Binding (setupSidebarListeners):
    • Unified all bottom sidebar action handlers (#add-account-btn, #settings-btn, #donate-btn, #report-bug-btn, #doom-btn) inside an idempotent setupSidebarListeners() function protected by dataset.bound flags against listener duplication.
    • Executed setupSidebarListeners() immediately upon script evaluation, at the beginning of init(), and inside DOMContentLoaded to guarantee immediate interactivity regardless of asynchronous initialization tasks.
    • Defensively chained asynchronous IPC calls (setSpellcheckerLanguages, saveAccounts) with .catch(() => {}) to eliminate unhandled promise rejections during cold boot.
  • Ghost Layer Suppression & CSS Pointer-Events Hardening:
    • Enforced display: none !important; pointer-events: none !important; z-index: -1 !important; on .app-modal-backdrop.hidden, .offline-overlay.hidden, and .hibernation-overlay.hidden to eliminate phantom click interception and transparent backdrop hit-testing blocking.
    • Hardened .sidebar with position: relative; z-index: 50; pointer-events: auto; guaranteeing the navigation rail remains strictly stacked above any guest webview surface or internal container overlays.

v2.2.6

Choose a tag to compare

@github-actions github-actions released this 06 Sep 08:26

Registro de Cambios - v2.2.6

Fixes

  • Microphone and Device Permission Handlers & Voice Message Capture Resolution:
    • Resolved structural failure in Chromium session permission checks where PermissionCheckDetails.mediaType (singular string) was not evaluated, causing setPermissionCheckHandler and setPermissionRequestHandler to reject microphone requests and trigger WhatsApp Web's blocking "Permitir micrófono" dialog.
    • Implemented checkMediaPermission in the main process to comprehensively support direct permission names ('microphone', 'camera', 'audio', 'video') and 'media' requests with both singular mediaType and plural mediaTypes payloads.
    • Implemented checkDisplayCapturePermission supporting both mediaType and mediaTypes for screen sharing.
    • Added real-time reactive permission synchronization:
      • Broadcasts permissions:updated and notifications:updated across all active webContents and <webview> instances via broadcastPermissionsToAllWebContents.
      • Enhanced webview preload.js with appPermissions state, dynamically updating upon permission changes without requiring application restarts.
      • Extended navigator.permissions.query interception to support 'microphone', 'camera', and 'geolocation' alongside 'notifications', returning { state: 'granted' } (or 'denied') based on reactive settings.
      • Guarded navigator.mediaDevices.getUserMedia and legacy navigator.getUserMedia in webviews to cleanly reflect active user device permissions and prevent hangs.

v2.2.4

Choose a tag to compare

@github-actions github-actions released this 06 Sep 05:19

Registro de Cambios - v2.2.4

Fixes

  • Cold Start Offline Black Screen Bug Resolution (Escenario B):
    • Identified and eliminated premature overlay dismissal caused by partition disk cache (persist:acc_*) firing dom-ready and did-finish-load events during offline cold starts. Webview lifecycle listeners now strictly guard against hiding the overlay when an offline scenario is active.
    • Implemented checkInitialNetworkState() as an agnostic, imperative startup verification function that runs on every cold start, independently verifying real network connectivity before webview activation without relying on cached flags or localStorage. Infallibly enforces Escenario B upon detecting lack of connectivity.
    • Hardened did-fail-load event handling to intercept all critical network failures (ERR_INTERNET_DISCONNECTED, ERR_NAME_NOT_RESOLVED, ERR_CONNECTION_REFUSED, etc.) and route them directly to Escenario B.
  • Interactive Rescan Button Animation & Validation (Escenario B):
    • Configured #offline-rescan-btn with immediate click lock (disabled = true, pointer-events: none, opacity: 0.7, and .loading class) preventing duplicate triggers.
    • Integrated animated circular loading spinner (fa-spinner fa-spin btn-spinner) and localized connecting text (status_connecting).
    • Implemented connectivity verification against https://web.whatsapp.com requiring HTTP 200–299 responses via backend IPC check-internet (utilizing Electron's net.isOnline()) and frontend fetch fallback. On success, reloads all active account webviews and dismisses the overlay; on failure or non-2xx status, halts the spinner and gracefully reactivates the button in idle state.

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 06 Sep 00:47

Registro de Cambios - v2.0.2

Fixed

  • Explicit Window Icon Assignment & Cross-Platform Taskbar Identity:
    • Resolved generic framework fallback icon issue on the startup splash screen and secondary windows across Windows, macOS, and Linux desktop environments.
    • Added explicit icon: APP_ICON_PATH to all BrowserWindow instances (createSplashWindow and createWindow) in src/main.js.
    • Regenerated src/assets/icon.png at high-resolution 512x512 RGBA directly from the official vector source (src/assets/whatsnexus-logo.svg) to ensure optimal runtime scaling on high-DPI displays.
    • Configured app.setAppUserModelId('com.sentinelstudio.whatsnexus') for Windows, preventing window ungrouping and ensuring notifications and taskbar instances correctly attribute to WhatsNexus.
    • Configured dynamic runtime macOS dock icon assignment via app.dock.setIcon(APP_ICON_PATH) within app.whenReady().
    • Explicitly declared "icon": "src/assets/icon.png" and included "src/assets/**/*" in build.files inside package.json for electron-builder production packaging.

Changed

  • Version Quartet Synchronization:
    • Bumped patch version to 2.0.2 across package.json, package-lock.json, README.md, docs/README.md, and changelog-dev.md.

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 00:25

Registro de Cambios - v2.0.1

Fixed

  • Production Theme Packaging & Dynamic Theme Scanner:
    • Resolved a critical bug where production builds generated via electron-builder failed to locate modular theme schemas in src/themes/, causing the palette dropdown to only display the "Personalizado" option.
    • Explicitly configured "files" in package.json under build ("src/**/*", "src/themes/**/*", "package.json") ensuring all 16 JSON theme schemas are fully packaged into app.asar.
    • Refactored src/main.js load-themes IPC handler with defensive path resolution across development, app.asar (path.join(app.getAppPath(), 'src', 'themes')), and unpacked distribution paths.
    • Eliminated fs.promises.access validation that threw on virtual directory descriptors within app.asar, adding synchronous and asynchronous I/O fallbacks.
    • Implemented dual-layer fail-safe fallback (FALLBACK_BASE_THEME) in both backend (src/main.js) and frontend (src/renderer/renderer.js) to guarantee that the primary "WhatsNexus" theme is always available in the UI even under severe filesystem degradation.

Changed

  • Version Quartet Synchronization:
    • Bumped patch version to 2.0.1 across package.json, package-lock.json, README.md, docs/README.md, and changelog-dev.md.

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 00:08

Registro de Cambios - v2.0.0

Changed

  • Major Runtime Upgrade to Electron 43 & Dependency Alignment:
    • Upgraded core desktop runtime from Electron 29 (^29.1.4) to Electron 43 (^43.6.0), bringing modern Chromium sandbox improvements and V8 runtime performance optimizations.
    • Upgraded electron-builder to ^26.15.3 ensuring compatibility with modern distribution targets across Linux (AppImage, deb, rpm), Windows (NSIS, portable), and macOS.
    • Verified and aligned CI/CD pipeline (.github/workflows/build.yml) to leverage pure npm ci build resolution without legacy version pinning.
    • Executed strict clean-room environment sanitation (rm -rf node_modules dist out && npm cache clean --force) to purge obsolete Electron 29 C++ binaries and build artifacts.
  • Universal Custom Dropdown Engine & Clean Code Refactor:
    • Enhanced initCustomDropdown(selectId, options) in src/renderer/renderer.js with extensible renderOption(opt, targetEl) callback support.
    • Extracted clean renderLanguageOption() providing specialized typography rendering for constructed languages (Elvish Tengwar and Klingon pIqaD) alongside native ISO language displays.
    • Refactored populateLanguageSelect() to eliminate over 90 lines of duplicated DOM construction, manual .selected class manipulation, and custom click bindings, delegating visual lifecycle management to refreshCustomDropdown('language-select').
    • Removed obsolete manual event handlers on #language-select-trigger, unifying all dropdowns under centralized state and outside-click listeners.
  • Version Quartet Synchronization:
    • Bumped major version to 2.0.0 across package.json, package-lock.json, README.md, docs/README.md, and changelog-dev.md.
    • Upheld repository governance rules by maintaining changelog.md strictly untouched on branch Dev.

v1.6.1

Choose a tag to compare

@github-actions github-actions released this 05 Sep 22:25

Registro de Cambios - v1.6.1

Changed

  • Standardized Packaging Artifact Naming Convention (artifactName):
    • Configured build.artifactName in package.json to enforce whatsnexus-${version}-${os}-${arch}.${ext} across all platform distributions (AppImage, deb, nsis/exe, dmg).
    • Ensured consistent and automated binary artifact naming for Windows, macOS, and Linux runners in GitHub Actions CI/CD workflows.
  • Documentation Cleanup & Governance:
    • Removed obsolete Freedoom references from root README.md.
    • Reverted 1.6.0 entry from changelog.md to adhere to repository branching conventions (changelog.md reserved strictly for stable promotions to main).

1.5.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 21:45

[1.5.0] - 2026-09-05

Added

  • Curated Theme Engine Expansion (16 Palettes across 4 Structured Tiers):
    • Integrated 6 new color palettes with complete light and dark design tokens:
      • Tier 2 (Custom / Original): Cyber-Nexus (Chrome Core / Neural Net), Dracula (Alucard / Dracula Official), Nord (Snow Storm / Nord Official).
      • Tier 4 (Pop Culture): Doom (Phobos Base / Hellscape), Star Trek (Federation Day / LCARS Terminal), Vóxel (Overworld / Obsidian & The End).
    • Implemented dynamic theme switch labels for specialized palettes (e.g., "Overworld" / "Nether/End" for Vóxel, "Jedi" / "Sith" for Star Wars, "Día" / "Noche" for High Contrast).
    • Enforced strict 4-tier visual hierarchy with internal alphabetical ordering across all palette selections.
  • Global Internationalization (i18n) Expansion & Parity:
    • Expanded locale support to 55 global languages with 100% symmetric key parity (318 keys per language) and zero English fallback.
    • Full authentic transliteration and native font rendering for constructed languages (Elvish Tengwar using Tengwar Telcontar and Klingon using authentic CSUR pIqaD).
  • Asynchronous Locale Provisioning & In-Memory Caching:
    • Migrated the load-locale IPC channel to asynchronous non-blocking file I/O (fs.promises.readFile) paired with an in-memory Map cache, eliminating disk thrashing when switching languages.

Fixed

  • Settings Navigation Default Tab Enforcement:
    • Deactivated sticky tab memory behavior in Settings; opening the settings view now reliably resets to the default "Gestión de cuentas" tab (#tab-accounts).
  • Language Selector Conlang Rendering & Deduplication:
    • Eliminated duplicate entries for Klingon in the language dropdown and normalized flexbox inline alignment to remove unwanted spacing around parenthesized native script names.
  • Security & External URL Sanitization:
    • Hardened external URL dispatchers (open-external-url) with protocol whitelist (http:, https:) and validation blocking loopback IP addresses, private subnets, and embedded credentials.