Skip to main content

v7

UCS Operator - changelog

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

[7.4.0] - 2025-05-23​

πŸš€ Features​

  • (call) Add call recorder icon next to call duration in dial bar

πŸ› Bug Fixes​

  • (speeddial) Disable dialing of second call if device is uphone
  • Fix lint issues
  • (uphone) Uphone is correctly started after clicking 'Continue with ...' when selecting device
  • (pairing) Unpair paired device if user selects working without phone

🚜 Refactor​

  • (device-confirm) Focus device confirm button via ref instead of useEffect
  • (menu) Use selector instead of direct store digging to enhance code readability
  • (lookup) Remove unused code
  • Remounting is no longer needed

βš™οΈ Miscellaneous Tasks​

  • Bump zod to allow migration to v4
  • Migrate zod parser of lookups to v4
  • (task) Migrate task form parser to zod4
  • Migrate zod to v4
  • Bump zod

[7.3.0] - 2025-05-16​

πŸš€ Features​

  • (uphone) Rewrite WebRtc connection and add statistics that are available during call under headphones icon
  • (uphone) Load audio devices for in/output settings via react query to handle errors
  • (uphone) Enhance error handling of uphone call
  • (queue) Add 'deleted' attribute to queues which indicates if queue should be considered archived

πŸ› Bug Fixes​

  • (osl-integration) Format AvgWaiting value to hh:mm:ss (mm:ss)
  • (director) Display pawn instaed of king in bottom menu if app is not main
  • (keyboard) Center keyboard
  • (customization) Include sk break time alternative

🚜 Refactor​

  • [breaking] Support only 1 softphone session to make simpler error handling

βš™οΈ Miscellaneous Tasks​

  • Bump rspack and lingui swc plugin

[7.2.0] - 2025-05-12​

πŸš€ Features​

  • (uphone) Prototype uphone client
  • (uphone) Enhance call recovery
  • (uphone) Make calling work
  • (uphone) Ring in the browser when the call is incoming
  • (uphone) Enable keypad
  • (uphone) Enable device options
  • (uphone) Add icon indicating uPhone state to top menu
  • (main-app-sync) Add main app indicator to bottom menu
  • (report) Replace daily time ringe inputs with more friendly element
  • (integration) Allow informing Operator app about host application via query parameter
  • (widget) Add new widget Outbound queueu (compact) whihc displays number of leads in queue and allows user dial next lead

πŸ› Bug Fixes​

  • Handle report timeout and inform about it user with friendly message
  • Make sure that there won't be accessed non existing value when adding grid widget, log readable warning if yes
  • (uphone) Ring only on incoming calls
  • (uphone) Removed stats that caused delay in audio (maybe)
  • (uphone) Replace fetch with context api instance
  • (uphone) Replace getElementById with react ref
  • (uphone) Only mount uphone it's paired
  • (operator-api) Inform 3rd party apps about device changes while using uphone
  • (uphone) Only run uphone client if the operator instance is main
  • (uphone) Configure stun server from device data instead of hardcoded url
  • (docs-link) Open docs with noreferrer, noopener
  • (reports) Add locales
  • (call-history) Do not show error modal when date range is too broad
  • (bottom-menu) Add titles describing icons in bottom menu (websocket and main app)
  • (localization) Add Outbound queue compact localization

🚜 Refactor​

  • Remove unused widget settings proptypes
  • (uphone) Add types and fix eslint issues
  • Inline RTCIceCandidate type instead of redundant alias
  • Remove redundant types that would be inferred
  • Select active call state from active call instead of selecitng it directly from state
  • Remove dead code
  • (uphone) Replace single-line early return with multi-line for readability
  • (uphone) Remove optional mark from start parameters as they are not optional
  • (uphone) Select device ids in uphone hook instead of parent component
  • (uphone) Inline remote description to let type inference do the job instead of manual typing
  • (typing) Fix typing error in DateTimePicker
  • Remove dead code
  • Remove unused prop from outbound queue widget

⚑ Performance​

  • (uphone) Move isOutgoingCall out of component scope to prevent recreating the function every render causing redundant rerenders
  • (uphone) Inline uphone start/stop manager to avoid creating callback
  • (uphone) Remove values from hook return value as they were unused
  • (uphone) Memoize uphone start/stop to avoid object unstability
  • (uphone) Use ref for localStream instead of state as it does not require reactivity and move setupLocalStream out of component context

🎨 Styling​

  • Prettify
  • Reformat code

βš™οΈ Miscellaneous Tasks​

  • Sanitize possibly non-existing row in grid because typescript cannot assure that the row is there
  • Install knip
  • (uphone) Debug info call
  • Add warning about non existent remote audio element

[7.1.1] - 2025-04-25​

πŸ› Bug Fixes​

  • (froala) Renew license key
  • Fix typo in czech translations
  • (reports) Set report timeout to 10 minutes

[7.1.0] - 2025-04-14​

πŸš€ Features​

  • (websocket) Send identification in websocket request
  • (main-app-sync) Synchronize with ucs-api to determine which operator instance is the main and should run softphone

πŸ› Bug Fixes​

  • (osl-integration) Synthetize onConnect event right after app is started to maintain previous version event order and mark it as deprecated.
  • (config) Set default notifyWaitingCallers to true to notify agents about calls in queue
  • (localization) Default to device language before fallback to english
  • (build) Remove default configuration

🚜 Refactor​

  • Wrap function body to curly brackets

βš™οΈ Miscellaneous Tasks​

  • Enable source maps in dev and test environments

[7.0.1] - 2025-04-02​

πŸ“š Documentation​

  • Fix changelog

[7.0.0] - 2025-04-02​

πŸš€ Features​

  • Create simple temporary i18n provider that respects browser language because user is not known yet
  • (login) Configure credentials autocomplete
  • (autologin) Re-implement with new auth service
  • (email) Load emails with auth cookie instead of SID
  • (report) Download report via client instance with relogin mechanism to avoid ping roundtrip
  • (login) Reimplement sso and login FE-API methods to be compatible with new auth
  • (login) Remove username and password cookie storing
  • (login) Provide ssoTokenProvider to application context
  • (logging) Identify application instance using slice of uuid instead of sid
  • (login) Parse whoami response to make sure that result was okish
  • (login) Experimentally display user displayname in topmenu from session context instead of global store
  • (websocket) Add websocket state icon to bottom menu indicating whether it's on or off
  • (api) Migrate to new UCS-API with method in path
  • (impersonate) Re-implement impersonation compatible with new auth service which enabled stoping impersonation and going back to original user
  • (impersonate) Re-impersonate user when his impersonation ticket has expired
  • (dialog-modal) Add configuration props allowing transparency,fullscreen and custom style
  • (uAuth) Integrate uAuth iframe login
  • Let user to generate strong passwowrd while adding new user
  • Add intensive wake up throttling detector which informs user
  • Add intensive wake up throttling detector which informs user
  • (auth) [breaking] Integrate uauth

πŸ› Bug Fixes​

  • (localization) Add missing czech translations
  • (login) Correctly handle login errors and display useful information about the error to an user
  • (login) Put login form to elementRoot to apply color palette
  • (login) Integrate operator with auth service logout
  • (logout) Ignore error if it's expected 401 response meaning that the token is not valid
  • (http) Handle ucs in-body errors
  • Handle no-creds exception from autologin as expected and fallback to login
  • (login) Prevent closing login dialog using escape
  • (logging) Inject username to logger
  • (login) Call onLoginError instead of onCredentials when login error ocures
  • (headless-mode) Render headless mode to not attached element to make sure that whole app actually works
  • (impersonation) Reuse custom api instance when replaying request after relogin to use defined hooks even in replayed request
  • (uAuth) Do not add sid when requesting recording
  • (uAuth) Add trailing slash to login form uri
  • (url) Add trailing slash to impersonate endpoint
  • (dialog) Remove padding
  • (url) Add trailing slash to logout endpoint
  • (url) Adjust api urls to reflect api restructualization
  • (localization) Update locales
  • (typing) Replace any with unknown
  • Theme change button won't rotate randomly

🚜 Refactor​

  • Remove unnecessary type parameter
  • Remove code replaced with new auth from connector
  • Inline relative template and email upload urls to make it api independent
  • Instantiate API in SessionManager and pass it to app via context to pass logout and relogin callbacks via constructor instead of reassigning its methods
  • Remove no longer needed app state actions (were replaced by SessionManager)
  • Move websocket open/close event handlers directly to connector constructor and remove websocket connection states
  • (app-state) Remove user state
  • Remove url adjusting when calling public methods as traefik takes care about it now
  • Remove unused import of ApiContext
  • (auth) Remove MessageChannel for communication with login iframe to simplify code and make the communication more stable using postMessage

⚑ Performance​

  • (impersonation) Re-impersonate forbidden request only once

βš™οΈ Miscellaneous Tasks​

  • Ucs-operator-deploy uses /usr/share/ucs-operator/operator.tar.gz by default
  • Move SessionManager to auth package
  • Remove report, template and email url building
  • Add cursor rules
  • Fix typo in cursor rules

WIP​

  • Redesign app state model to better bound error with error state
    • the problem with this approach is that when app state is not changed via CHANGE_APP_STATE, stateHooks.saga.ts won't catch them and inform 3rd party about app state change
  • Implement live relogin with failed request replay
  • Integrate auth-server: comment unused connector functions