# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [14.41.0] - 2026-06-22
### Added
- Support for injecting socket config by native driver instead of managing by front-display

## [14.40.0] - 2026-06-10
### Added
- Device action: Clear package data

### Fixed
- P2P sync: make `WaitService` resilient to dropped messages and timing races — re-send wait state every 5 s and on `MemberJoined`, credit recent (≤ 10 s) matching peer waits at the start of a new wait, and resolve with own data after 60 s so the applet keeps playing instead of hanging on a black screen

## [14.39.1] - 2026-06-02
### Fixed
- Muted overlay (proprietary timer OFF window with `keepAppletRunning`) now blurs the running applet on WebOS by applying a CSS `filter` to the content elements instead of `backdrop-filter`, which WebOS' Chromium reports as supported but never paints
- Power off the display panel when a proprietary timer enters its OFF window with `keepAppletRunning=true`, so the applet keeps running while the panel turns off instead of staying lit on the muted overlay

## [14.39.0] - 2026-05-29
### Added
- JS API: Clear package data
- Show a translucent blurred overlay over the running applet when a proprietary timer enters its OFF window with `keepAppletRunning=true`, signalling that the display is scheduled off while content keeps running
- `sendUdp` support in network management driver interface and message handler
- Shared `sendUdpPacket` dgram utility for platform drivers

### Fixed
- Periodic telemetry cache invalidation now persists its target time, re-checks it on every startup and also fires from an in-process timer so long-running devices invalidate without needing a reboot or reconnect 

## [14.38.0] - 2026-05-15
### Added
- Node.js custom script bootstrap and hug message dispatcher for `nodejs` runtime

### Fixed
- Route custom scripts `nodejs` runtime through `managementDriver.scripts.execute()` instead of the iframe-based BrowserRuntime. 


## [14.37.3] - 2026-04-29
### Fixed
- HTMLVideo prepare promise now rejects immediately on native video error, preventing video player slots from being permanently locked when playback fails

## [14.37.2] - 2026-04-26
### Fixed
- Supra Mode telemetry works correctly as a `front` socket telemetry instead of `management` socket

## [14.37.1] - 2026-04-24
### Fixed
- Fix race condition where supra mode was not activated on first device boot due to config arriving after applet initialization
- Fix race condition in loading service worker for emulator and chrome native code apps

## [14.37.0] - 2026-04-24
### Added
- Added `lowLatency` option to `IStreamOptions` and `IPrepareOptions` for low-latency stream playback

## [14.36.0] - 2026-04-15
### Added
- Add `telemetryInvalidatedAt` config field to purge cached telemetry and trigger sequential re-reporting

### Fixed
- Report display power on telemetry when proprietary timers trigger display on/off
- Fix policy check incorrectly reporting `ApplyPolicyFailed` when policy is already applied on device

## [14.35.1] - 2026-04-12
### Fixed
- Root path for es6/ imports

## [14.35.0] - 2026-04-12
### Added
- Add SUPRA telemetry saga for Supra Mode client device connection status reporting

## [14.34.1] - 2026-04-10
### Fixed
- Allow parametrize socketName with an option
- Restore `sos.config` for archive custom scripts — `addConfigToSos()` was missing from the archive execution, causing `sos.config` to be `undefined` for all CLI-pushed scripts
- Handle `hug.ping` messages in custom script message handler to prevent `DataCloneError` when front-applet sends periodic ping messages

## [14.34.0] - 2026-04-09
### Added
- Supra Mode rendering support (client side rendering of applets)

## [14.33.0] - 2026-04-01
### Added
- Allow slave devices to broadcast values to all devices in a sync group via `allowSlaveBroadcast` option in `SynchronizerConfig`

## [14.32.0] - 2026-03-19
### Added
- Fetch `sos.config.local.json` overrides from SDK dev server when device is connected via `sos device connect`
- Show next power-on time, added eye-closed icon on the timer-muted screen

### Fixed
- Method `sos.management.network.importCertificate()` is now matching types for EAP auth type with `sos.management.wifi.connect()`.

## [14.31.0] - 2026-02-13
### Added
- Add methods for computing aHash from HTML canvas - `calculateAHash()` and `calculateAHashFromBase64()`
- Reporting telemetry `INSTALLED_PACKAGES`
- Allow overriding model, serial number and OS version from local storage in WebBrowser emulator. This is useful for testing and development purposes.
- New options for Wi-Fi Enterprise from JS API

### Fixed
- Issue with spamming errors when ChromeOS is connected to unsupported display type
- Retrieving current location and tags in sos JS API when device is not connected on startup
- Reporting current time and timezone also when device is not connected on startup
- Issue with reporting telemetries after executing custom script

## [14.30.0] - 2026-01-13
### Added
- New management driver method `onDeviceDeprovisioned` that's called when device is deprovisioned
- support for new configuration endpoints

### Fixed
- Stop sending actions `SaveOfflineActionsFile` - those files are now handled directly on upload and sending an additional action is not needed anymore
- Function `sos.managamenent.screen.resize()` now allows to properly resize screen with custom aspect ratio on devices that support it

## [14.29.0] - 2025-12-10
### Added
- Getting all management capabilities via JS API `sos.management.getCapabilities()` or all front capabilities via `sos.device.getCapabilities()`
- Support for nativeCommands NMC `sos.native.nmc.sendOne()`

### Fixed
- Issue when file system wipeout acton is called from JS API, it now correctly clears cache and cookies
- Issue with configuration checking and applying new configuration on device

## [14.28.0] - 2025-11-28
### Added
- Organization parent tags and location tags can now be retrieved via JS API
- Added default falsy feature flags to not to send CPU and MEMORY telemetries unles truthy 
- Support for periodic telemetry invalidation
- Support for policy enforcement power action `REAPPLY_POLICY`
- Plugins, Runners, CustomScripts feature flags

### Fixed
- Revert new configuration endpoint changes
- Issue with reporting capabilities FRONT

## [14.27.1] - 2025-11-21
### Fixed
- Issue with fetching default configuration

## [14.27.0] - 2025-11-18
### Added
- telemetries `CPU_USAGE` and `MEMORY_USAGE` are now reported
- `CPU_USAGE` and `MEMORY_USAGE` telemetries, which now require returning the current % usage
- new configuration endpoints and fallback logic for cases when the new endpoints are blocked

### Fixed
- include hash type in cache key to prevent colision between CRC32 and md5


## [14.26.0] - 2025-10-30
### Added
- JS API: Support headers in screenshot upload requests

## [14.25.0] - 2025-10-15
### Added
- Support for EAP properties in Wi-Fi connect function
- Importing EAP certificates on device via `sos.management.network.importCertificate()`

### Fixed
- Issue with custom telemetry after runner assignment

## [14.24.0] - 2025-10-09
### Added
- Removed old dependency `circular-json` which broke the returned values from functions like `getStorageUnits()` or `getListFiles()`. Returned JSON values linked to themselves which lead to errors in testing and telemetry values.

## [14.23.0] - 2025-10-09
### Fixed
- Issues with updating timezone on default screen

### Added
- When socket connection closes, `SocketDisconnected` action will contain reason and context

## [14.22.0] - 2025-09-01
### Added
- `sos.management.package.stop` method to force stop Android package
- Initial support for PLUGINS/RUNNERS

### Fixed
- add HLS playback support into emulator
- system logging can be switched off using feature flag
- Handling getting device info from JS API `sos.deviceInfo.getDeviceName()`

## [14.21.3] - 2025-08-06
### Fixed
- If telemetry reporting fails with an error, always log the error to the console instead of only logging it as an opt-in debug log.

## [14.21.2] - 2025-07-25
### Fixed
- Using named time constants in intervals and wait
- Remove unnecessary debug logs
- Type for better screenshot metadata handling
- Improve `console.js` on-screen console (on-screen console is now rendered in iframe, add support for Date objects, add query string settings, improve indentation, prevent pollution of global scope) 

## [14.21.1] - 2025-07-17
### Fixed
- Validate application type before apply device policy with application version change
- HTTP socket implementation (shared messages for `front` and `management` socket types) - Broken in versions `11.3.0` - `14.21.0`

## [14.21.0] - 2025-06-19
### Added
- Screenshot JS API can now receive aHash information if device supports it
- File system wipeout action can now be called from JS API
- Support for encryption Wi-Fi types in connect properties

## [14.20.0] - 2025-05-27
### Added
- Scheduled reboots can now be created on device with JS API methods like `sos.management.power.setScheduledReboot()`

### Fixed
- (internal) Changed context of management driver scripts execution
- Issues with getting organization tags and location from server

## [14.19.0] - 2025-04-30
### Added
- Telemetry for APPLET

## [14.18.4] - 2025-04-11
### Fixed
- (internal) Changed custom scripts to dynamically inject front-applet

## [14.18.3] - 2025-04-09
### Fixed
- Issue when device executes custom script, telemetry isn't sent immediately

## [14.18.2] - 2025-04-04
### Fixed
- Telemetry for Extended Management URL

## [14.18.1] - 2025-04-03
### Fixed
- Issue with detecting active interface network on default device screens

## [14.18.0] - 2025-04-02
### Added
- Support for encrypted config fields in custom scripts

### Fixed
- Issue when executing custom script isn't returning result after already executing once
- Regenerating keyPair on device

## [14.17.0] - 2025-03-28
### Added
- Calculation of aHash or dHash of uploaded screen shot

### Fixed
- Issue with MD5 checksum on old devices (Blob)

## [14.16.4] - 2025-03-21
### Added
- System log for information about changing device policy items

### Fixed
- Issue with provisioning some devices after offline deprovisioning
- Added back support for legacy Custom Scripts, which was accidentally removed in 14.14.0

## [14.16.3] - 2025-03-14
### Fixed
- Opening OSD on applet start
- OSD can now be opened once per 10 seconds. This prevents multiple requests to open OSD in a short time, which may break OSD and calling JS API in OSD.

## [14.16.2] - 2025-03-10
### Fixed
- (internal) Update the StubMemoryFileSystem to match the new IFile interface

## [14.16.1] - 2025-03-07
### Fixed
- Custom Script execution failure includes error message
- Prevent hanging if extracting non-archive file

## [14.16.0] - 2025-03-03
### Added
- Add support for `sos device connect` with sending logs and errors to the local development machine

## [14.15.1] - 2025-02-28
### Fixed
- Polyfill of fetch for NodeJS environments

## [14.15.0] - 2025-02-28
### Added
- New information about the device on the default screen and on the verification screen
- Refreshed icons on the default screen
- Warning about incorrect time when the device reports that the current year is 3 years lower than actual year

### Fixed
- Issue with validating disconnected device when Wifi is available

## [14.14.0] - 2025-02-28
### Added
- Support for archive custom scripts execution

### Fixed
- Issue with taking instant and periodic screenshots

## [14.13.0] - 2025-02-20
### Fixed
- Emulator will no longer crash on old systems and will use webkit filesystem instead automatically

### Added
- Support for encrypted fields in applet configuration

## [14.12.3] - 2025-02-17
### Fixed
- Auto reconnecting (`autoReconnect: boolean`) stream edge cases and race conditions. 1) Some platforms and streams can emit events `error` and `ended` at the same time. This case was fixed. 2) Multiple streams with reconnect enabled is fixed now.

## [14.12.2] - 2025-02-13
### Fixed
- Fix polyfill compilation, it work correctly now in older browsers

## [14.12.1] - 2025-02-11
### Fixed
- Problem with WS after network change

## [14.12.0] - 2025-02-10
### Added
- Support for mdc commands in custom script

## [14.11.1] - 2025-02-10
### Fixed
- (internal) Updated to the latest version of `lib/bundler` to avoid using the current working directory

## [14.11.0] - 2025-01-30
### Added
- Support for sending MDC with subcommands on Tizen `sos.native.mdc.sendOneRaw()`
- (internal) Use the bundler and node polyfill plugin from lib/bundler
- Support for disabling hardware acceleration on the device `sos.management.setHardwareAcceleration()`

### Fixed
- Append weinre script instead of requiring it

## [14.10.0] - 2025-01-15
### Added
- Telemetry `FEATURE_FLAGS` is now reported
- Limitation for setting stream auto reconnect interval on 10,000ms. If value is lower it may break the streams and reconnection.

### Fixed
- P2p sync on Tizen 4.0
- Storage checking interval when saving offline actions
- Duplication issues with `connected` event on streams, it's now called only when the device truly plays the stream

## [14.9.1] - 2024-12-02
### Fixed
- `sos.sync.connect` doesn't fail for p2p-local if called without network
- Fixed a potential catastrophic failure when driver throws an error during telemetry gathering

## [14.9.0] - 2024-11-20
### Added
- Remote desktop session could be replaced by another SetRemoteDesktopSettings action call
- `sos.sync.isMaster` method to check if the device is the master of a sync group
- `sos.sync.onStatus` events contain field `isMaster` that indicates if the device is the master of that sync group

### Fixed
- `sos.osd.showOSD`

## [14.8.0] - 2024-11-08
### Added
- Support for disabling screenshot capturing using DeviceFeatureFlags
- Randomization of initial and second telemetry delay to reduce peak load on the server (including screenshots)

### Fixed
- Improved P2P sync resilience against network issues. Reliability of P2P synchronization heavily depends on being able to deliver all message to all devices in the group, because each device has to hold the state of the entire network and constantly update it. If a device misses a message, it will have an inconsistent state and will not be able to recover from it. This change improves the reliability of the P2P synchronization by adding a mechanism that ensures that all messages are delivered to all devices in the group.

## [14.7.0] - 2024-10-21
### Added
- Acceptance tests now supports timeout for each test

### Fixed
- Computing file hashes in older browsers
- Function `getArchiveInfo` is now correctly invalidated in cache

## [14.6.0] - 2024-09-30
### Added
- Support for display manager, which is used on ChromeOS to control the connected display
- Telemetry `APP_MODULES` is now reported on every app start

### Fixed
- Missing `APP_MODULES` in Device.Settings.Report.Cache

## [14.5.0] - 2024-09-30
### Added
- Support for custom scripts execution on SoC devices as HTML with embedded JS

## [14.4.1] - 2024-09-19
### Fixed
- Longer time for periodical checking timeDiff and networkChanges

## [14.4.0] - 2024-09-13
### Added
- Remote Desktop is no longer experimental
- (internal) Remote desktop no longer responds to experimental action
- Support for new telemetry `APP_MODULES`

### Fixed
- Prevent concurrent Remote Desktop connections
- (internal) Management: Condition backup restart on `Responsibility.POWER`

## [14.3.0] - 2024-09-02
### Added
- Add `IFrontManagementDriver` interface
- Add battery status support for emulator

## [14.2.5] - 2024-08-26
### Fixed
- (internal) Move types and dependencies to the devDependencies

## [14.2.4] - 2024-08-06
### Fixed
- (internal) Fix Gitlab CI jobs disk going out of space because of bug in downloaded dependencies (@swc/core)

## [14.2.3] - 2024-07-30
### Fixed
- `sos.sync.wait` sometimes entered a deadlock, when using `sync-server` engine due to an internal race condition
- Synchronization engine `sync-server` fixed after breaking in 14.0.0

## [14.2.2] - 2024-07-22
### Fixed
- For `remote-desktop` is used different screenshot upload address

## [14.2.1] - 2024-07-09
### Fixed
- Upgraded remote-desktop and events that are allowed to be processed
- Fix "Should get network info" acceptance test

## [14.2.0] - 2024-07-04
### Added
- add extendWindowSosSnippet

## [14.1.3] - 2024-07-04
### Fixed
- remove references to window object

## [14.1.1] - 2024-06-25
### Fixed
- `NotImplementedBrowser` no longer prevents the app from working
- No longer use icanhazip.com

## [14.1.0] - 2024-06-07
### Added
- Support for a new DISPLAY_POWER_ON telemetry event

## [14.0.0] - 2024-04-30
### Changed
- Build emulator with esbuild
### Added
- Custom Scripts management API implementation

### Fixed
- iFrame-based Browser (`sos.browser.open()`) has no longer a random border on some platforms, strictly setting iframe borders to `0` to always fit the screen region properly

## [13.8.0] - 2024-04-17
### Added
- Support for the `rtscts` option for the serial port configuration. This option is used when opening a serial port and determines whether to enable or disable RTS/CTS handshaking.
### Fixed
- Weinre URL customization
- Devices sends a network interfaces information whenever there were any changes

## [13.7.0] - 2024-04-08
### Added
- Support for Native MDC Commands
- Replaced INetworkInterface with NetworkInterfaces from common-types

## [13.6.4] - 2024-04-03
### Fixed
- Improved local applet connecting

## [13.6.3] - 2024-03-18
### Fixed
- Missing implementations of `copyFile`, `moveFile`, `link` for `StubFileSystem` for a testing purposes

## [13.6.2] - 2024-03-14
### Fixed
- Proprietary timer managers no longer start observing storage without `Responsibility.TIMERS`
- Honor `Responsibility.REMOTE_DESKTOP` and `ManagementCapability.REMOTE_DESKTOP`

## [13.6.1] - 2024-03-04
### Fixed
- P2P Synchronizer Factory defaults to `0.0.0.0` IP address if the device is disconnected

## [13.6.0] - 2024-03-04
### Added
- Proprietary timer storage property to `IManagementDriver` & `IFrontDriver`
- `frontSagas` & `managementSagas` now use native driver to initialize proprietary timers storage and resolvers

### Fixed
- ChromeDriver and ChromeHelper removed from the project

## [13.5.0] - 2024-02-22
### Added
- Support for setting extendedManagementUrl through applet API
- Support for setting extendedManagementUrl through device settings
- Support for setting extendedManagementUrl through device policy

## [13.4.0] - 2024-02-08
### Added
- Support for Virtual Private Network

## [13.3.1] - 2024-01-25
### Fixed
- Refactor telemetry to be not dependent on bundledApplet dependency
- Device should send only initial telemetry if telemetry is set to zero
- Never resolving `showOSD()` function called from applet

## [13.3.0] - 2024-01-24
### Added
- Handling of JS SDK's new sos.stream.pause and sos.stream.resume actions

## [13.2.0] - 2024-01-10
### Added
- Add support for keepAppletRunning prop on proprietary timers
- Stream protocol type can be now string too

### Fixed
- Fix leaking tests
- Use proper types from `@signageos/lib` and `@signageos/common-types` for timers and weekdays
- ReconnectStreamPlayer now properly detect tracks_changed event
- IndexedDB FileSystem extracting zip race condition when creating folders

## [13.1.0] - 2023-11-13
### Added
- Support for stream subtitles and audio channels

### Fixed
- Starting applet in offline (when was already downloaded earlier)
- Typo in stream prepare options: `autoReconnectInternal` -> `autoReconnectInterval`

## [13.0.1] - 2023-11-03
### Fixed
- Issues with remote-desktop on some platforms

## [13.0.0] - 2023-10-04
### Changed
- Added `getExtendedManagementUrl` to `IManagementDriver`

### Added
- Extended Management telemetry
- Extended Management policy
- updateExtendedManagementUrl can be disabled with responsibility
- Throttling offline actions, when rate is beyond limit is ignored

## [12.4.1] - 2023-09-11
### Fixed
- Unset proprietary timer using cloud control

### Changed
- Configuration field extendedManagementUrl no longer updates devices management url

## [12.4.0] - 2023-08-24
### Added
- Remote Desktop support (Over management capability)
- Code coverage reporting
- FS mock moved from test directory for use in other projects
- Stream `autoReconnect`, `autoReconnectInterval` options on `prepare()` and `play()` functions
- Moved stream protocol type into options object on `prepare()` and `play()` functions
- Support for capability `FILE_SYSTEM_ARCHIVE_EXTRACT_INFO`

### Fixed
- WiFi strength not throwing error when not connected
- Unable to connect text is replaced by Conncting to server to better reflect the actual state
- Increase server time checker period from 30 seconds to 1 week

## [12.3.0] - 2023-08-01
### Fixed
- Randomly failing download of applet binaries after restart
- Emulator system info OS version works for Firefox
- Emulator screenshots works even for applets (in iframe)
- Emulator screen size returns real inner window size
### Added
- Add hosting operation system to system info

## [12.2.1] - 2023-07-18
### Fixed
- PeerNetwork will timeout broadcasting value to a peer after 10s

## [12.2.0] - 2023-07-17
### Added
- Get and set Auto recovery from FA
- P2P Synchronizer uses TCP instead of UDP (except for network discovery)
- Synchronizer method `cancelWait()`
- Synchronizer emits event `closed`
- Synchronizer type `p2p-local` which replaces deprecated `udp`
- Stream `prepare()` function now supports options
- New file system method `createArchive` for creating zip archive from files

### Fixed
- Unified Peer recovery configuration & telemetry
- Unified Auto recovery configuration & telemetry
- Improved stability of P2P Synchronizer
- Recognize more keys found on Android TV remotes
- Renamed `clearInternalFileSystem()` to `wipeout()` and moved from IManagementDriver to FileSystem for better integration on device with file system

### Deprecated
- Synchronizer type `udp`

## [12.1.2] - 2023-06-01
### Fixed
- Device policy, broken from 11.3.0 - powerActionTimer passed to policy as dependency
- Input issues on some platforms with keyUp listener

## [12.1.1] - 2023-05-05
### Fixed
- New alternative bridge function for delete proprietary timer (keep old one for backward compatibility)

## [12.1.0] - 2023-04-19
### Added
- IPv4 address to Peer info at Peer discovery service
- Applet Management API support for `setProprietaryTimer()` and `getProprietaryTimers()`

### Fixed
- Base URL for `/time` endpoint to configuration server (instead of platform server)
- Calling `close()` on PolymorphicSynchronizer (e.g. during applet refresh) sometimes broke its internal state and caused it to stop working until application restart or reboot.
- Hardware barcode scanner start (propage `scannerId` to native API)
- Remove unused `volume` from proprietary timers management, policy and telemetry
- P2PSynchronizer `joinGroup()` would sometimes not register 1 or 2 devices that are already in the group due to a race condition

## [12.0.1] - 2023-04-03
### Fixed
- Upgrade lib - `locked` decorator works in Node 6 >=
- IndexedDB File System Service Worker caches only related paths

## [12.0.0] - 2023-03-31
### Changed
- Renamed ISynchronizer method `init` to `joinGroup` and changed it to named args
- Renamed ISynchronizer method `setValue` to `broadcastValue`  and changed it to named args

### Added
- Production config
- Minor update only for development purposes
- P2PSynchronizer support of broadcastValue
- Polymorphic synchronizer that can be used for both P2P and server synchronizer

### Fixed
- P2PSynchronizer support of broadcastValue

## [11.4.0] - 2023-03-22
### Added
- Handler for sending info about remote debug to FA
- Handler for refreshing applet from FA

## [11.3.2] - 2023-03-15
### Fixed
- The regex for index_db is compatible with ES5 and works on displays*

## [11.3.1] - 2023-03-14
### Fixed
- Cache related issues with switching versions in emulator
- Downloading files if server blocks HEAD requests
- Emulator prefer IndexedDB File System implementation over Proprietary (webkit FS)

## [11.3.0] - 2023-02-16
### Added
- Missing implementations for device brand info
- Dummy Wifi class implementation

### Fixed
- Time correction is correctly parsed from response
- Succeed actions for PowerActions are send before restarting

## [11.2.0] - 2023-01-24
### Added
- Switchable check that compares device and server time and when differ a lot it prevents socket from connection
- `device` key for opening serial port is not required now

### Fixed
- Correct telemetry and settings types split

## [11.1.0] - 2022-11-29
### Added
- P2PSynchronizer for synchronizing devices peer-to-peer over UDP in local network

## [11.0.0] - 2022-11-25
### Added
- IndexedDB FileSystem implementation for Emulator under query param `?fileSystem=indexed_db` (support all modern browsers)
- Service Worker support for caching resources and IndexedDB FileSystem

### Removed
- AppCache feature from emulator

## [10.0.0] - 2022-11-22
### Added
- Internal event emitter as Redux middleware
- Allow to open OSD with JS-API

### Changed
- Different methods in IManagementDriver replaced by nested ITimeManager
- `FileSystemWithReservedSpace` now correctly works with `IStorageUnit` properties.

### Removed
- `IFileSystem.initialize` is once again implementation specific.
- `IStorageUnit.reservedSpace` is no longer public. See `IStorageUnit.usableSpace`.

### Fixed
- Documented `IStorageUnit` properties.
- `FileSystemWithReservedSpace` now allows ops that would leave no free space.

## [9.23.0] - 2022-10-07
### Added
- Device reports OS version
- Device auto recovery support in native driver, action & telemetry
- New File System with reserved space
- File System method getArchiveSize for returning size of extracted files

### Fixed
- Remove emulator fix for chrome 104+ (because it breaks loading of relative files to index.html of the applet)

## [9.22.0] - 2022-09-14
### Added
- Device reports manufacturer brand

## [9.21.2] - 2022-09-01
### Fixed
- Duplicate functions for getting iframe src for emulator

## [9.21.1] - 2022-09-01
### Fixed
- Emulator issues with iframe and file system on Chrome 104+

## [9.21.0] - 2022-08-26
### Added
- NotImplementedProxy class

## [9.20.0] - 2022-07-20
### Added
- Emulator support for timed peer recovery

## [9.19.0] - 2022-07-14
### Added
- File System Wipeout power action
- In telemetry reports device capabilities FRONT and MANAGEMENT
- Front capability for Front-OSD
- Front-OSD in Applets

## [9.18.0] - 2022-06-22
### Added
- Telemetry for Wifi strength & proxy
- Device peer recovery methods and telemetry for that.

## [9.17.1] - 2022-06-20
### Fixed
- DeviceInfo when wifi is not supported
- Show verification hash when serial number isn't needed to generate device UID
- Unsubscribe internal video events once video stops for any reason, fixing memory leak
- Add CPU, Memory & Proxy applet messages

## [9.17.0] - 2022-05-24
### Added
- Wifi SSID & strength values
- CPU & Memory monitoring methods
- Proxy monitoring methods

### Fixed
- Tizen verification process doesn't stop under certain circumstances

## [9.16.2] - 2022-04-29
### Fixed
- Only Tizen without serial number is not registered to Box

## [9.16.1] - 2022-04-28
### Fixed
- Device without serial number is not registered
- Bundled servlet options

## [9.16.0] - 2022-04-20
### Added
- Polymorphic browser
- Option to disable offline actions logging

### Fixed
- Weinre debug of applet after applet refresh/reload

## [9.15.0] - 2022-03-24
### Added
- Device location and organization tags can be requested from server, saved in property storage and send to applet when requested
- OS Version information (Windows 11 -> 11, WebOS 3.2 -> 3.2, etc)

### Fixed
- (internal) Upgrade typescript to version 4.6

## [9.14.1] - 2022-03-18
### Fixed
- User defined applet preferred over bundled applet when both are set at the same time

## [9.14.0] - 2022-03-08
### Added
- AppletPings, DeviceAlive and actions about rebooting device are logged online/offline
- RemoteControlSetEnabled drivers method can return optional callback
- onStatus method in AppletSyn pass data about connected devices in group to FA

### Fixed
- (internal) Stability improvement

## [9.13.2] - 2022-02-03
### Fixed
- Checking offline action files before uploading
- Telemetry is forced to sent after scheduled reboots are removed

## [9.13.1] - 2022-01-26
### Added
- Saving applet actions to local file, when device is offline and uploading after connection is fixed

## [9.13.0] - 2022-01-12
### Added
- Telemetry data update after succeeded actions or telemetry set

## [9.12.2] - 2021-12-15
### Added
- Test for CRC 32 with problematic files
- Bundled applet to telemetry
- Accept manual time as object from applet

## [9.12.1] - 2021-12-03
### Fixed
- appendFile FS feature tests

## [9.12.0] - 2021-12-02
### Fixed
- Missing detailed error messages for sos js API
### Added
- Connect to a hidden Wi-Fi

## [9.11.1] - 2021-11-30
### Fixed
- Don't require working connection to signageOS server for app upgrade from direct URL

## [9.11.0] - 2021-11-26
### Added
- Management Network disableInterface

### Fixed
- Don't require working connection to signageOS server for firmware upgrade from direct URL

## [9.10.0] - 2021-11-23
### Added
- Allow parametrize bundled applet with configuration

## [9.9.0] - 2021-11-18
### Fixed
- Correctly check PIN before showing OSD

### Added
- File System appendFile method
- Emulator support for crc32 file system checksum

## [9.8.2] - 2021-11-12
### Fixed
- Version 9.8.0 build fix

## [9.8.1] - 2021-11-12
### Fixed
- Iframe browser API for older devices (with webkit)

## [9.8.0] - 2021-11-12
### Added
- Support for CRC32 hashing algorithm
- Building bundled applet with prebuilt subscriptionType

### Fixed
- Bundled servlets not running when the device doesn't have internet

## [9.7.0] - 2021-11-04
### Added
- Headless Browser API
- Renamed ProprietaryBrowser to IframeBrowser
- Added WindowBrowser as a new implementation of Browser API that opens the URL in a new window

### Fixed
- Firmware upgrade

## [9.6.3] - 2021-09-24
### Fixed
- Bind VerificationSucceeded for Open devices - This fix device provision stuck on hash.

## [9.6.2] - 2021-09-09
### Fixed
- Upgrade firmware version

## [9.6.1] - 2021-08-30
### Fixed
- Fixed display off/on behavior when timers are not set

## [9.6.0] - 2021-08-25
### Added
- Optionally frame rate can be set along with resolution if certain platform supports it

### Fixed
- Waiting for staticBaseUrl dependency doesn't block handling messages from iframes
- Correctly report active network interface
- Server is adjusting telemetry intervals in `/configuration/*` API

## [9.5.1] - 2021-07-23
### Fixed
- Actions are internally bound regardless subscription type dependency

## [9.5.0] - 2021-07-22
### Added
- Not implemented barcode class to ease the front display update

### Fixed
- Refactor proprietary timers handling, fixed work with applet when timer is ON and OF correctly enable/disable running applet and handle the display behavior
- Race condition inside reconnect stream which caused it to reconnect even when stream was already stopped
- Sagas losing this when using withCapability

## [9.4.0] - 2021-06-29
### Added
- Applet and offline cache file urls can be shorter when shortAppletFilesUrl flag enabled

### Fixed
- Native timers, when they are set from policy, method from telemetry now return correct timer type

## [9.3.0] - 2021-06-22
### Added
- Last front or management saga errors can be accessed from console, labels to differ sagas in logs

### Fixed
- Fixed potential race condition when generating initial PIN (since 9.2.0)
- Applets now download as expected (since 9.1.0)
- Changes to PIN are reported, in all situations, once again (since 9.2.0)
- Reset the counter only when policy changed
- Date time policy

## [9.2.0] - 2021-06-02
### Added
- PIN management is guarded by `Responsibility.KIOSK`, allowing native app to override FD implementation.

## [9.1.0] - 2021-06-01
### Added
- Listen for when the custom browser closes
- Policy fail counter/action

### Fixed
- Synchronization of current time to server

## [9.0.0] - 2021-05-17
### Added
- Management features are guarded by `Responsibility`, allowing native app to override FD implementations.
- Dynamically set extended management URL (e.g.: Magic Info URL) based on device configuration API

### Changed
- Native drivers must now explicitly provide a Power Action Timer implementation.
- Native drivers must now explicitly state support for volume and brightness reporting.
- Polyfill is exported from all.ts file & recommend to polyfill all (not just fetch)

### Fixed
- Device policy and telemetry action exceptions are displayed with enabled debug only
- Device Policy: Allow enforcing only NTP server *or* only timezone (or both)
- (internal) `npm run test` now works on Windows with Git Bash or similar
- (internal) File system related tests now run on Windows
- Don't enforce previously set devie policies under Open subscription
- Support `APPLET_ENABLE` and `APPLET_DISABLE` scheduled power actions
- (internal) Hotfix `runPeriodicTaskWhile*` which is depending in initial put of subscription type (500ms delay)
- When applet calls `sos.management.network.listInterfaces()`, return first active ethernet interface, not last

## [8.11.0] - 2021-04-30
### Added
- Barcode scanner API
- Added an attributes corresponding with NTP set on webOS in getCurrentTime

### Fixed
- Internal file system acceptance tests no longer require mounted external storage
- Video acceptance tests no longer report failure when playback succeeds despite unsupported capability (4K, video count)
- Set orientation via device policy
- Temporarily disable licensing algorithm due to issues
- Telemetry is limited for platform devices
- All actions are correctly bound

## [8.10.0] - 2021-04-08
### Fixed
- Scheduled power actions
- Improved HTML5 video handling to limit possibility of memory leak

### Added
- Universal Serial Port implementation

## [8.9.1] - 2021-03-29
### Fixed
- Device policy application upgrading
- takeEveryAndBindWhenPlatform blocks fibre
- Device policy scheduled power actions

## [8.9.0] - 2021-03-18
### Added
- Telemetry
- Device Policy

## [8.8.0] - 2021-03-11
### Added
- Reporting firmware type of device (e.g.: rpi, rpi4, benq_sl550 etc.)

## [8.7.0] - 2021-02-23
### Added
- HTMLVideo fallback to muted playback until interaction in window
- Licensing algorithm

### Fixed
- Emulator error massage related to getSupportedResolutions()
- video playback in emulator wont fail on video changed before prepare finished
- update link to documentation when video playback fails in emulator
- missing favicon error during development in local emulator

## [8.6.1] - 2021-02-09
### Fixed
- Prefix HTTP-only socket connection with /http-socket

## [8.6.0] - 2021-02-09
### Added
- Handle the new version of sos.management.network.setManual()
- Handle the new version of sos.management.network.setDHCP()
- Device socket connection can be optionally replaced with REST based API instead of WebSockets

## [8.5.0] - 2021-02-04
### Added
- Handle sos.management.network.listInterfaces() call from applet

## [8.4.2] - 2021-02-02
### Fixed
- network active info returned to applet correctly determines active interface based on which interface has an IP address

## [8.4.0] - 2021-01-25
### Added
- Messages about setting debug applet propagated into applet iframe
- Device notifies about its supported resolutions if this feature is supported

### Fixed
- Change conditions for selecting fetch or node-fetch

## [8.3.2] - 2021-01-19
### Fixed
- Move node-fetch dep from devDependencies to dependencies

## [8.3.1] - 2021-01-14
### Fixed
- Optimized stream play so when calling play on already prepared stream, there wouldn't be a delay and it would be truly instant

## [8.3.0] - 2021-01-13
### Added
- Get firmware type

### Fixed
- Prevent sending some actions from device to server (optimize traffic)

## [8.2.0] - 2021-01-08
### Added
- Download applet files from computer in the local network
- Current screen orientation can be obtained from front-applet
- Stream can be prepared in the background to allow gapless transitions similarly to videos

## [8.1.0] - 2020-12-17
### Added
- Wi-Fi emits "client_connect_rejected" event when a connection was attempted with invalid credentials and failed
- It's possible to provide additional acceptance tests that should run together with the standard suite of tests

## [8.0.0] - 2020-12-16
### Fixed
- Implementation of configuration checker outside the web worker
- ScreenRotationManager accepts an abstract IScreenRotationPropsProvider interface to allow different implementations on different platforms

### Added
- New ScreenRotationPixelPropsProvider which is usable for older browsers where the viewport vh/vw units are not supported

### Changed
- Arguments style using `options` instead of ordered arguments for management & front constructor

## [7.10.0] - 2020-12-03
### Added
- It's possible to query device capabilities for supported screen orientations
- ScreenRotationManager now allows to optionally pick direction of rotation

## [7.9.0] - 2020-11-24
### Added
- Video duration into HTML video tag video player implementation
- Touch events from native devices are forwarded to iFrame

## [7.8.0] - 2020-11-03
### Added
- Active applet version is sent to iFrame
- Proprietary timers decoupled for better reusability
- Added failover to http if https throws exception when configuration is downloading
- Validating self signed signature when downloading configuration

### Fixed
- MAC address of emulator has 48 bits
- Setting of device time and timezone returns success (when platform needs reboot/restart, do it after 1s)

## [7.7.0] - 2020-09-25
### Added
- Serial ports capability

## [7.6.1] - 2020-09-18
### Fixed
- Options sent to prepare were lost in same cases

## [7.6.0] - 2020-09-10
### Added
- Connect and disconnect events for native stream HTML Player
- Reconnecting Stream Player

## [7.5.2] - 2020-09-08
### Fixed
- Even longer deprovisioning timeout before reboot to give the display enough time to delete all cached data and files

## [7.5.1] - 2020-09-07
### Fixed
- Applet reload sometimes caused the applet to freeze instead of reloading it

## [7.5.0] - 2020-09-03
### Fixed
- Emulator persists in browser (Chrome) memory until cookies are deleted
- Open application refresh stuck when internet is reconnected

### Added
- Wi-Fi Access Point capability
- Emit useful Wi-Fi events to applet
- Changed method of INetwork interface getActiveInfo() into listInterfaces() for more fine grained control of network interfaces
- Video orientation LANDSCAPE_FLIPPED

## [7.4.1] - 2020-07-10
### Fixed
- Separate tests for Weinre and native debug toggle on/off into separate acceptance tests
- Separate changing native debug settings and its possible after-effects on platforms, where it triggers reboot so it can be tested in acceptance tests without triggering reboot

## [7.4.0] - 2020-07-02
### Added
- Remote management of multi-file applets (applet packages). Applets originally designed for `Open` users can be used by `Platform` users now as well.
- Browser open link method optionally accepts theme option

### Fixed
- Extracting API for ZIP files which is missing nested directories
- Fixed Video acceptance tests failing on certain platforms unexpectedly
- Possible memory leak in video player when one gapless video is playing in infinite loop

## [7.3.1] - 2020-06-10
### Fixed
- Removed dependency on navigator.onLine for websocket connections management. Navigator.onLine in certain edge cases doesn't provide accurate information if the device can access internet or not.

## [7.3.0] - 2020-05-29
### Added
- Servlet healthcheck which will result in servlet restart when servlet is not responding
- Front applet debug isEnabled API support
- Default PIN code is 0000 until device is connected to internet
- PIN code set/get support for JS management API

### Fixed
- Device registration occasionally failing during first boot
- Make longer and configurable check interval on platform configuration (30s -> 60s)
- Native debug will always do the configuration check interval 30s

## [7.2.0] - 2020-05-04
### Fixed
- Longer deprovisioning timeout before reboot to give the display enought time to delete all cached data and files
- (internal) Refactor and simplify screen rotation manager
- Use smaller resolution videos in acceptance tests that play multiple videos side by side because some platforms struggle to process more than one full HD video at a time
- Added allow-same-origin sandbox directive to the ProprietaryBrowser iframe to allow loading of websites that enforce same origin policy
- When proprietary timers are disabled while the display and content are off, the display and content will be turned on
- add white background to the proprietary browser to prevent black web
- Loading larger files in emulator, especially videos (used different fetch polyfill)
- Reboot device automatically when App or FW upgrade is performed in open management
- Socket reconnecting in offline state
- Socket autoreconnecting improved
- Fix FileSystem in emulator for larger files than 10MB

### Added
- Support for set NTP time from server
- ACL domains support for proprietary browser implementation of open link
- New OSD dark blue design
- OSD manual network settings (ethernet and wifi)

## [7.1.1] - 2020-03-03
### Fixed
- Bug when collecting temperature and battery status on startup (critical when native methods throws error after boot)

## [7.1.0] - 2020-02-28
### Added
- FILE_SYSTEM_LINK capability

### Fixed
- added sandbox to ProprietaryBrowser iframe to prevent hostile JS within iframe affecting parent document
- First start of display when the applet is bundled inside app (Open)
- Open app installed to deprovisioned device
- Video not showing in emulator in Chrome 80

## [7.0.1] - 2020-02-20
### Fixed
- HTML over video (some of the recent changes broke it)

## [7.0.0] - 2020-02-19
### Added
- simulate firmware update on the default application type (emulator)
- Video API acceptance tests
- When acceptance tests are running, mute applet so it doesn't conflict with the tests
- Video API supports video playing in the background with HTML in the foreground
- Video API supports 4K video
- getTimers method in management API
- Method to gracefully stop all running servlets
- New capability to set/get timezone and time
- Handle deprovisioning directly on device
- Emulator returns fake Serial Number
- Emulator returns fake Network informations
- Emulator simulates portrait orientation
- New capability to set/get NTP server
- New capability to listen to proximity sensor events
- New capability to reset basic settings of the device as means of recovery from breaking external changes
- New capability to get information about connected monitors
- Test Frameworks tests are now able to be skipped
- Management get application version in front-applet `sos.management.app.getVersion()`
- Management API for network set manual, set DHCP
- Browser API for opening/closing browser window and optionally specify a whitelist/blacklist of domains.
- Optional videoThumbnailUriTemplate in file properties
- New capability to perform a factory reset of the device
- File system methods copyFile and moveFile allow to optionally overwrite destination path

### Changed
- Moved `getNetworkInfo()` as `network.getActiveInfo()`

### Deprecated
- Open browser in front-applet via method `sos.browser.openLink()`. Replaced by `sos.browser.open()`.

### Fixed
- Upgraded internal libraries (react, typescript etc.)
- Casually not loading of applet after restart app
- Better user information durring register, verify process (including offline page)
- Touch/Click applet in emulator
- readFile works in every case
- (internal): upgrade build tools
- Integration with browser SSSP (problem with babel in Webpack)
- Test Framework now handles errors properly
- Refreshing of open with turned to platform
- Open applet binary html and front applet js can be absolute or url (fix missing / slash in protocol)
- Replaced moment object by Date/timestamp in methods for setting device date and time
- Ping period issue for open and platform
- Updated to most recent sOS codestyle and commands packages, fixed newly created tslint errors
- Emulator better firmware version emulating for chrome/opera/firefox
- Device Audio test fixed
- Device test framework malfunctions and misbehaving fixed
- Applet commands to device (timing commands) for Open builds

## [6.1.0] - 2019-06-10
### Added
- Possibility to manage features using capabilities (little breaking change in capabilities)
- Node.js servlets - scripts or services that can be pushed to the device from the server and run in the background, extending device's capabilities with custom logic, as long as the device supports it
- It's possible now to configure the application build to use a local applet file instead of getting applet timings from the cloud
- signageOS Open - build with an applet bundled inside the package and make the device automatically verify against the owner's organization on the server
- Always save applet and front applet binaries to internal memory to improve performance and stability
- Use proprietary timer if native is not supported

### Fixed
- Fixed removing non-exiting scheduled actions that can be deleted by factory resets
- Invocations from front-applet has much better & descriptive error messages with links to docs
- Stop binding actions on the server that are purely internal to reduce the traffic
- Add missing call of "finalize" callback after screen orientation is changed from applet management
- Switching between multiple applet timings would freeze the second applet

## [6.0.0] - 2019-02-20
### Added
- File System API supports copyFile, writeFile
- Applet DISABLE/ENABLE power actions
- WiFi driver modules
- OSD support

### Changed
- New API for starting management/front processes (containing initialize method)
- fixed name of remoteControl related methods
- change supports method to be capabilities (timers, brightness scheduling)
- renamed appReboot to systemReboot
- Asynchronous frontSupports capabilities

### Removed
- timers holydays settings in native timers

## [5.4.0] - 2019-01-28
### Fixed
- Escape would reload applet only when OSD is open
- Add mock WiFi capability to emulator
- Fixed keyCodes of input device (5.3.0 version has wrong keyCodes propagated to front-applet)

### Added
- File System API supports writeFile (text (string) value only)

## [5.3.0] - 2019-01-22
### Added
- WiFi support
- OSD

## [5.2.0] - 2019-01-16
### Added
- Low level file system support for front applet

### Fixed
- Fix sos.input.onKeyUp event binding (swapped keyCode & keyName property)

## [5.1.0] - 2018-12-28
### Fixed
- Support camera & microphone for android based devices on webview > M63
- Emulator now supports PERSISTENT file system (needs to confirm permission dialog at the first start)

### Added
- Key codes for media buttons on a remote control (play, pause, stop, backward, forward)

## [5.0.3] - 2018-12-11
### Fixed
- When there are multiple applet timings, the next applet is pre-loaded correctly and allows to preload static assets and setup the environment
- Fixed casually socket repeatable disconnecting and reconnecting in some cases of network state mainly on android devices

## [5.0.2] - 2018-11-28
### Fixed
- Various minor fixes

## [5.0.1] - 2018-11-26
### Fixed
- Extended FileSystem tests and unified errors for all platforms

## [5.0.0] - 2018-11-13
### Added
- New method getNetworkInfo which returns all device network properties
- On verification screen added device local IP Address

### Changed
- New full featured API of FileSystem

### Fixed
- When video play action throws an error in emulator in Chrome, log a warning to console with a link to a documentation page that contains tips for troubleshooting the most common errors

## [4.2.0] - 2018-10-31
### Added
- Redesign verification pages

### Fixed
- Resume video

## [4.1.0] - 2018-09-24
### Fixed
- MD5 checksum will produce correct md5 even for binary files
- Fix not reacting on some monitoring actions from server (temperature, screenshot, battery & storage status, device info)
- Firmware upgrade & screen resize can return finalize callback with reboot instead of just do it after some timeout

### Added
- Removed dependency on Browser-specific features to make it possible to implement management in NodeJS
- It's possible to provide custom implementation of web worker
- It's possible to replace web worker with fake that runs in the same thread
- Moved app upgrade to management driver
- Hash algorithm is now strongly typed and validated against a list of supported algorithms
- File system file names can contain any character except specials (same as Win FS) & can has folders separated by slash /
- ZIP decompression in file system: https://docs.signageos.io/api/sos-applet-api/#Decompress_file_ZIP

## [4.0.0] - 2018-09-12
### Changed
- Socket connections uses new API /v2/ which is not backward compatible

### Added
- Enable applets to get file/content uids
- Enable applets to delete files/contents
- Applets can receive commands from server sent through REST API (applet dispatch command to device)
- Add methods for validating and getting MD5 checksum

### Fixed
- Save applet binary in a different path to avoid collision with files saved by applet
- Device is connected immediatelly. Doesn't matter on server speed
- Weinre debugging is back compatible working with appletEnabled flag

## [3.1.0] - 2018-07-19
### Added
- Schedule power actions
### Fixed
- Switch between applet timings fast and gapless
- Fix tap/double tap touch detection 600 ms delay on every tap
- Fixed playing more videos on devices which supports only 1 video tag (1 resource)

## [3.0.0] - 2018-07-11
### Added
- New communication channel over simple WebSocket as additional for socket.io

### Changed
- Upgrade device firmware with new response API containing only request UID
### Fixed
- Registration of a new device

## [2.3.3] - 2018-06-26
### Fixed
- Downgrade socket.io to 1.7 version

## [2.3.1] - 2018-06-18
### Fixed
- Suspend videos/streams when proprietary timer is triggered

## [2.3.0] - 2018-06-14
### Added
- Option to set video orientation to a different value than the content orientation. It's a workaround for devices that have issues with playing videos in native portrait mode.

### Fixed
- Downgrade to socket.io 1

## [2.2.1] - 2018-06-08
### Fixed
- Not building ES6 source files in Gitlab CI and leaving the old version instead

## [2.2.0] - 2018-06-05
### Added
- Web workers - moved some logic that affected performance the most to web workers so it doesn't run in the same thread (applet timings checking, device configuration change checking)

### Fixed
- Optimized time period for checking of brightness and timers schedules to boost performance

## [2.1.0] - 2018-05-30
### Added
- Remote control Key UP binding

## [2.0.0] - 2018-05-24
### Removed
- Android-specific logic moved to it's own repository
- Tizen-specific logic moved to it's own repository
- SSSP-specific logic moved to it's own repository

## [1.1.1] - 2018-05-16
### Fixed
- Fixed video prepare resolving too early on WebOS, which had an impact on videowall playback
- Allow multiple videos playing simultaneously on Tizen
- Fixed videowall issues with syncing between devices during video playback on Tizen and WebOS

## [1.1.0] - 2018-05-14
### Added
- Changelog file containing all changes in current project
- Testing supported HTML5 features by fast device tests
