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

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

## 2.3.0 - 2022-01-20

### Added
- Support for the Jabra Engage 50 II in all configs
- API to query local SDK version

### Changed
- Use of this SDK in a VDI eLux environment will now use WebHID by default if Kandy Distant Driver for VDI version 1.6.0 or higher is present. This removes the need for the `Kandy HID Driver for VDI` to be present on the Thin Client. However, in order to allow this SDK to interwork with older software levels on the Thin Client, a software flag has been added. **Application changes are required to force this SDK to communicate with the HID Driver rather than WebHID**. See details in the Backwards Compatiblity section of the README.
- Logs generated by this SDK in both main and renderer processes will not be visible by default. New alternatives for making logs visible are added. See the `Logging` section of the README for details.
- Delivery of local and remote webpack bundles for use in Electron

### Fixed
- An issue causing the SDK to get into an infinite loop, causing the controlling app to hang (KAJ-1442)
- Enhances the check to validate application requests before queueing or processing (KAJ-294)

## 2.2.0 - 2022-11-25
Released for use in browser only.

### Added
- Support for the use of this SDK in a local browser (non-VDI)
- Support for the Jabra Engage 50 II in a local browser (non-VDI)
- Delivery as a webpack bundle for use in browser
- Publishing of browser releases in NPM
- Device selection and device management events

## 1.6.2 - 2022-10-17

### Fixed
- An unnecessarily restrictive peerDependency that prevented use with @distant/vchannel version 1.1.0 (KAJ-1492)

## 1.6.1 - 2022-09-30

### Fixed
- An issue causing the SDK to get into an infinite loop, causing the controlling app to hang (KAJ-1442)

## 2.1.0 - 2021-10-08

### Changed
- Use of this SDK in a VDI Windows environment now uses WebHID, removing the need for USB Composite device redirection if Kandy Distant VDI for Windows version 1.1.0 or higher is used. If Kandy Distant VDI Driver for Windows is less than version 1.1.0, USB composite device redirection is still required. See instructions in [previous versions of the README](https://github.com/Kandy-IO/kandy-hid-sdk/blob/v2.0.0/README.md#windows-vdi).

### Fixed
- Known Issue preventing use of the Jabra Speak 750 on Mac Desktop and VDI Mac; vendor ticket 299

### Added
- Support for the Jabra Speak 750 in Mac desktop environment
- Support for the Jabra Speak 750 in VDI Mac environment
- Support for use in apps where Electron context-isolation is used. See `Electron Security` in the README

## 2.0.0 - 2021-07-30

### Changed
- Updates the interface for use in Electron's Renderer process, rather than the Main process

### Added
- Support for VDI Mac configuration
- Support for the Jabra Evolve2 40
- Support for the Jabra Speak 750

### Removed
- Support for the Jabra PRO 9450
- Support for the Jabra Speak 710
- `readyToExit` and `prepareToExit` APIs
- exported constants

### Fixed
- An issue affecting Hold/Resume functionality on the Jabra PRO 9450 (KAJ-588)
- A backwards-compatibility issue that will allow hold/resume to function normally if the app developer does not implement "calls_on_hold". See details in [previous versions of the README](https://github.com/Kandy-IO/kandy-hid-sdk/tree/v1.6.0_jan2021#known-issues--limitations) (KAJ-412). It should be noted that if the app developer chooses not to implement "calls_on_hold", depending on how the app is written, it may not be possible for devices to be able to signal a call swap or answer a call while on a call.

## 1.6.0 - 2021-01-29

### Removed
- The `updateSupportedDevices()` API, which was deprecated in version 1.3.1

### Added
- Ability to use the SDK in a Citrix VDI Windows environment
- Formal support for the Jabra Speak 750 in a VDI Windows environment

## 1.5.0 - 2020-05-15

### Added
- The ability to answer a call from a HID device while it is already active on a call
- The ability to swap between an active and held call from a HID device

### Fixed
- In Desktop (non-Citrix/VDI), device loss (disconnect / power loss) detection and handling has been improved

## 1.4.0 - 2020-03-20

### Added
- More robust messaging protocol between the Kandy HID Driver and Kandy HID SDK
- When used in Citrix VDI, the Kandy HID SDK is backwards compatible with certain previous versions of Kandy HID Driver for VDI see Backwards Compatibility in [README](./README.md)

## 1.3.1 - 2020-01-31

### Added
- In Citrix VDI, filtering of known / supported devices has been removed, meaning that kandy-hid will attempt to manage any HID-compatible device selected by the user <sup>1</sup>
- In Desktop, the ability to use the Jabra Evolve 80 and Jabra Speak 750 has been added <sup>1</sup>
- The ability to hold/resume an active call from a HID device is added for VDI mode (it was previously supported only for Desktop) <sup>2</sup>
- The ability to reject an incoming call from a HID device while on an active call is added <sup>2</sup>
- A new API is introduced - `isSupportedDevice()`; see usage details in [README](./README.md)

1- **NOTE that formal support is limited to the devices listed in the table in the [README](./README.md)**. Other devices (including the Speak 750 and Evolve 80) should be considered unsupported and used on a trial / evaluation basis only.<br>
2- The way that these features are invoked by the user aligns to each Jabra device's User Manual. See Use Cases in the README for details<br>

### Changed
- after rejecting a call, the device is returned to its previous state, e.g. on another call, on hold, muted, etc. Previously the device would return to idle state after rejecting a call regardless of its previous state
- KandyHID is renamed kandy-hid
- kandy-hid is now delivered as a .tgz file within the Distant set of tools and utilities
- This requires changes to how kandy-hid is added to your app packaging:
  - it should now be added to your package.json as<br>`file:<path_to_file>/distant-kandy-hid-v1.0.0.tgz`
  - it should be imported or required within the app as<br>`@distant/kandy-hid`

### Removed
- the SUPPORTED_DEVICE_LABELS object is no longer exported as a constant

### Deprecated
- it's no longer necessary to call `updateSupportedDevices()` from the app; it's called as necessary during device selection. There is no adverse effect to calling it, it's simply no longer necessary. The API should be considered as deprecated and will likely be removed in a future version

## 1.2.1 - 2020-01-10

### Added
- Support for Jabra Engage 65 firmware 3.4.1

## 1.2.0 - 2019-11-04

### Added
- One of each supported type of HID device may now be connected to a Thin Client simultaneously; the limitation that the same device must be selected for microphone, speakers and alert speakers remains
- Support is added for Jabra Speak 710 and Engage 50 in Desktop (non-VDI) mode
- The setLogger() API is introduced to allow a custom logger to be passed in for use

### Fixed
- An intermittent issue relating to the PRO 9450 mute state not being properly reflected in the app in Desktop mode is resolved

## 1.1.0 - 2019-08-16

### Added
- Support for the Jabra Speak 710 in VDI mode

### Changed
- When DEVICE_ERROR is received by your app for a device power loss or physical disconnection, it is no longer necessary to send a 'device_close' request to kandy-hid; kandy-hid will automatically close the device on error.
- `electron-log` dependency is removed. All logs are regular `console.log` or `console.error`.
- CHANNEL_ERROR will be raised on the `HIDFunctionRequest` event in case of a communication error over the virtual channel
- KANDYHID_ACTIONS are defined as constants and available for use in your app
- An intermittent issue relating to Engage 50 mute state not being properly reflected in the app is resolved

<!-- changelog possible fields:
### Added
### Changed
### Removed
### Deprecated
### Fixed
### Security
