CloudBees Feature Management - JavaScript changelog

CloudBees Feature Management is an advanced feature flagging solution that lets your development teams quickly build and deploy applications without compromising on safety. By providing a gradual release mechanism and a simple way to define target audiences, CloudBees Feature Management allows developers and product managers to optimize feature releases and customize the user experience. CloudBees Feature Management gives teams control over features that are in staging, production, or any environment in the deployment pipeline.

December 14, 2023: V5.4.9

  • Updated Axios library to address security vulnerabilities.

September 10, 2023: V5.4.8

  • Fixing unhandled error on signature verification.

June 28, 2023: V5.4.6

  • Workaround for "'n' is read-only" runtime error in some browser applications built using Babel.

May 15, 2023: V5.4.4

  • Added support for CloudBees platform app keys (UUID).

August 17, 2022: V5.4.2

  • "Reduced dependencies" version of rox-serverless.

August 9, 2022: V5.4.1

  • Support for Chrome extensions using V3 Manifest (window element no longer accessible).

July 18, 2022: V5.4.0

  • Switched async storage to @react-native-async-storage/async-storage, as @react-native-community/async-storage is no longer supported.

  • Added rox-serverless SDK to support serverless applications.

  • Updated a number of dependencies.

May 20, 2022

  • European Union (EU) hosting has been removed.

March 17, 2022: V5.2.0

  • Refactored internal compilation processes

  • Reduced rox-browser build size

2021-11-25: V5.1.2

  • Update to Axios dependency: internal build changes

2021-11-24: V5.1.1

  • Update to Axios dependency: internal build changes

2021-08-09: V5.1.0

Proxy capability

  • Added a proxy that supports servers or clients using CloudBees Feature Management SDKs with the following connection issues:

    • No internet access

    • Trouble connecting to CloudBees Feature Management services

    • Blocked by a firewall

    • Client does not have CORS permissions

    • Needing full control over network requests

      For more information, refer to A proxy for CloudBees Feature Management.

EU hosting capability

  • CloudBees Feature Management customers now have the option to host data on CloudBees servers located in Ireland. By providing both EU and US servers, this capability can increase speed, reliability, security, and privacy, as well as support regulatory and business compliance requirements designated to the respective user locations.

    With EU hosting enabled, the following data related to CloudBees Feature Management is stored on EU servers:

    • Applications

    • Environments

    • Flags

    • Target groups

    • Audit logs

2021-4-21: V5.0.1

  • Update to Axios dependency: internal build changes

2020-11-20: V5.0.0

Breaking changes:

  • Configurations were eliminated, please use flags instead:

    • new Configuration("string") ⇒ new RoxString("string")

    • new Configuration(number) ⇒ new RoxNumber(number)

    • new Configuration(false/true) ⇒ new Flag(false/true)

  • Variant changed to RoxString

    • new Variant("defaultStr", ["str1", "str2"]) ⇒ new RoxString("defaultStr", ["str1", "str2"])

  • rox-browser size reduced

    • The rox-browser SDK size was minimized by removing pollyfill and some cleanups To give you more control, axios and eventsource were also removed from the bundle. axios will have to be added as a dependency if you currently don’t have it. eventsource is used for push notification. This SDK feature won’t work if it is missing; to enable it add it as a dependency.

  • Default Freeze level was changed to 'none'

    • In order to maintain the old behavior please add to your setup options object { freeze: 'untilLaunch' }. If there’s no options object currently, add it to your setup call: Rox.setup(<app_key>, { freeze: 'untilLaunch'})

  • Rox.dynamicPropertyRuleHandler moved to options

    • In order to maintain the old behavior please remove Rox.dynamicPropertyRuleHandler and instead, add it to your setup options object { dynamicPropertyRuleHandler: <handler>} If there’s no options object currently, add it to your setup call: Rox.setup(<app_key>, { dynamicPropertyRuleHandler: <handler> })

  • functions input validations

    • some trivial parameters (mostly type) validations were added to dynamicApi and flags constructions. For example: new RoxString(false) will raise an Error of wrong default type (default value of RoxString should be a string). Rox.dynamicApi.value(0, 'defaultStr', ['str2', 'str3']) will raise an Error of wrong flag name (name should always be a string)

  • Can use register without a namespace:

    • register(container) will register the container under an empty string namespace (multiple register calls with the same namespaces are still not allowed)

Fixes and Additions:

  • Added a User Space Error handling

    • It is recommended to wrap all handlers used in Rox platform (setCustomProperty, impressionHandler, ConfigurationFetchedHandler, dynamicPropertyRuleHandler) with try-catch in order to be in the right context. In case there will be an uncaught Error, it will reach the Rox.setUserspaceUnhandledErrorHandler handler. You can use this handler for debugging, or for further error handling. An Error thrown within this handler will be written to log. If no setUserspaceUnhandledErrorHandler was set errors will be written to the log.

  • analytics / impressions

    • Starting with SDK 5, flags will always send impressions after setup (not only when targeting is enabled on the dashboard)

  • impression handler parameters change

    • As experiments were removed, impressions handler signature was changed from (reportingValue, experiment, context) to (reportingValue, context). reportingValue now also has a targeting (boolean) property, indicating the flag was evaluated by using the dashboard configurations.

  • dynamicApi uses freeze like staticApi

    • Starting with SDK 5 dynamicApi calls freeze flags even if no dashboard configurations were set (prior to SDK 5, local default values didn’t trigger a freeze, only dashboard configurations did).

2020-07-21: V4.9.16

  • Remove use of eval() to satisfy strict Content Security Policy (CSP)

2020-06-09: V4.9.7

  • rox-ssr: Add compatibility to server-side webpack

2020-03-10: V4.9.0

  • Upgrade to latest axios (0.19.2)

  • rox-react-native: Replace deprecated ReactNative.AsyncStorage with @react-native-community/async-storage

  • Clean-up bundles (less files are included)

2020-02-18: V4.8.10

  • Replace logger to fix issues on React Native (iOS)

2019-12-03: V4.8.6

  • Fixed potential issue when analytic server is unreachable

  • Fixed compatibility with Roxy

  • Fixed undefined error when no options passed to rox-ssr

2019-11-29: V4.8.5

  • Fixed TypeScript signatures in rox-ssr

  • Added support for es5/IE11 to rox-ssr

2019-11-22: V4.8.4

  • Adding rox-ssr SDK

2019-11-22: V4.8.3

  • Internal changes to prepare for rox-ssr

2019-09-05: V4.8.0

  • ReactNative: Adding ability to replace default storage (see AsyncStorage)

  • Browser: use the minified version in package.json

  • Improved error reporting

  • Upgraded axios version

2019-08-07: V4.7.1

  • Fixed push updates for React Native

2019-07-16: V4.7.0

  • API version 1.8.0

  • Values are base64 - fixing " and () bug

  • Changes to API calls, using Cloudfront

2019-06-06: V4.5.3

  • Remove check for signed date in signature verification

  • [Alpha] Add flag.explainLastResult to rox-browser

  • removed async func

2019-04-10: V4.5.2

  • Prevent duplicate calls to fetch configuration on Rox.setup (was caused by custom properties)

  • Removing various polyfills (including promise)

  • Make Overrides screen case insensitive

2019-01-21: V4.5.1

  • Fixed compatibility with IE (Object.assign, Array.filter)

2019-01-16: V4.5.0

  • Add an option to override the default SDK logger (see JavaScript (Browser) API - setup for documentation)

  • Analytics will use stickiness property for distinctness

2018-12-26: V4.4.0

2018-12-18: V4.3.1

  • Variants in Dynamic API is open for any value from the dashboard

  • Support for old Node version (v4.8.3)

  • Dynamic API updates dashboard on new flags

2018-12-03: V4.3.0

  • Fix for view controller when namespace doesn’t exist

  • Added Dynamic API

2018-11-12: V4.2.2

  • Security enhancement - verify the signature of local/remove feature flags configuration

  • Fixed push endpoint

2018-11-08: V4.2.1

  • fixed node js Rox.setup should resolve the promise only after configuration is fetched

2018-11-06: V4.2.0

  • Added push updates via Server-Sent Events (closed for beta customers)

2018-08-20: V4.1.4

  • Remove TTL on local storage client_data

2018-08-20: V4.1.3

  • Fixed missing dependencies on nodejs package

2018-08-20: V4.1.2

  • Shrink package size by 70%

2018-08-20: V4.1.1

  • Fixed issue with crypto on edge browser

2018-08-20: V4.1.1

  • Scheduled Released

  • Encrypted in operator - you can now use in operator and the data will be passed to the clients encrypted

  • API version 1.7.0

2018-08-09: V4.0.1

  • Adding support for old browsers (without crypto)

2018-08-06: V4.0.0

  • Impression analytics - reporting flag impression to CloudBees Feature Management servers

  • DisableNetwork - ability to disable automatic fetching of data upon Rox.setup (for SSR)

  • Support for context (for SSR)

2018-08-02: V3.2.5

  • Adding support for SSR release (Isomorphic)

2018-07-31: V3.2.4

  • Fix in react native

2018-07-29: V3.2.0

  • Adding support to get labels in impression handler

  • Adding support for SSR release (Isomorphic)

  • Support for Roxy

2018-07-04: V3.1.3

Support for Fuse-Box

2018-06-28: V3.0.0

flag dependency support

2018-05-01: V2.2.1

  • Added support for Tizen

2018-03-12: V2.1.2

  • Internal changes for better error reporting

  • Embedded Experiments support

2018-01-03: V2.0.2

  • Internal changes to support react native release

  • Flag freeze level - allow specifying the freezing level of a flag, till this version the flag value remained consistent from the time it was evaluated till the application goes into the foreground or a unfreeze was called. Now have three different freeze level:

    • .none - The flag is constantly evaluated every time it is called

      • .untilLaunch (default) - Once the flag is evaluated its value is persistent till the app is terminated You can control the value of a specific flag via its constructor or globally by using options.defaultFreezeLevel

2017-11-19: V1.2.7

  • Security enhancement - verify app key matched configured one

  • Moving from webpack to rollup

  • Redesign to overrides API

2017-10-03: V1.2.2

  • Fix - Add cache url and cache miss url to api request

2017-10-01: V1.2.1

  • Add unfreeze API

  • Remove sync method

2017-09-26: V1.2.0

  • Support for computed custom property without context

  • Fix - long query names cause disconnection with amazon s3 objects

2017-09-07: V1.0.2

  • Split node.js from browser