From faba42ede1f14236e2b0e182fa3433c7523d6aae Mon Sep 17 00:00:00 2001 From: Md Junaed Hossain <169046794+junaed-optimizely@users.noreply.github.com> Date: Wed, 4 Nov 2026 00:13:49 +0600 Subject: [PATCH] [FSSDK-13378] release PR Bump version to 4.3.0 and upgrade @optimizely/optimizely-sdk to ^6.7.0. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 15 +++++++++++++++ package-lock.json | 22 +++++++++++----------- package.json | 4 ++-- src/client/createInstance.ts | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e324719..284d11f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [4.3.0] - November 4, 2026 + +### Changed + +**Local Holdouts: rule evaluation continues after a holdout hit**: +When a user matches a local holdout on a rule, the SDK now excludes the user from that rule only +and continues evaluating the remaining rules, instead of returning the holdout variation and skipping +the rest of the flag. Each local holdout hit sends its own holdout impression event (using the +existing event format), regardless of `sendFlagDecisions`. Global holdouts are unchanged. + +- Continue rule evaluation after local holdout hit +- Skip the default browser event store when localStorage is unavailable +- Make React Native polyfills optional and isolate optional requires +- Support AsyncStorage v3 in React Native + ## [4.2.1] - September 18, 2026 ### Bug Fixes diff --git a/package-lock.json b/package-lock.json index f08a178..6c2d065 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@optimizely/react-sdk", - "version": "4.2.1", + "version": "4.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@optimizely/react-sdk", - "version": "4.2.1", + "version": "4.3.0", "license": "Apache-2.0", "dependencies": { - "@optimizely/optimizely-sdk": "^6.6.1", + "@optimizely/optimizely-sdk": "^6.7.0", "tslib": "^2.8.1", "use-sync-external-store": "^1.6.0" }, @@ -761,9 +761,9 @@ } }, "node_modules/@optimizely/optimizely-sdk": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/@optimizely/optimizely-sdk/-/optimizely-sdk-6.6.1.tgz", - "integrity": "sha512-kHlASCHnoyFL+kjCENEJV2kPxYnzk6w1/GbSmKhyeBrnw6/Me3CjRRwk/dlq7c50Wc51IXSKl9aGWrT2caKqEA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@optimizely/optimizely-sdk/-/optimizely-sdk-6.7.0.tgz", + "integrity": "sha512-iImR4SS8sXzTrHqQGGVgNFC/3aJEaAk5wOH8+iPzOrv1AH7rsXJNpKa82RykunJe6YBq1BsEliT38ZTe830k4A==", "license": "Apache-2.0", "dependencies": { "decompress-response": "^7.0.0", @@ -775,11 +775,11 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@react-native-async-storage/async-storage": ">=1.0.0 <3.0.0", - "@react-native-community/netinfo": ">=5.0.0 <12.0.0", - "fast-text-encoding": "^1.0.6", - "react-native-get-random-values": "^1.11.0", - "ua-parser-js": "^1.0.38" + "@react-native-async-storage/async-storage": ">=1.0.0 <4.0.0", + "@react-native-community/netinfo": ">=5.0.0 <13.0.0", + "fast-text-encoding": ">=1.0.6 <2.0.0", + "react-native-get-random-values": ">=1.11.0 <3.0.0", + "ua-parser-js": ">=1.0.38 <2.0.0" }, "peerDependenciesMeta": { "@react-native-async-storage/async-storage": { diff --git a/package.json b/package.json index fbc9314..e5974fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@optimizely/react-sdk", - "version": "4.2.1", + "version": "4.3.0", "description": "React SDK for Optimizely Feature Experimentation, Optimizely Full Stack (legacy), and Optimizely Rollouts", "homepage": "https://github.com/optimizely/react-sdk", "repository": "https://github.com/optimizely/react-sdk", @@ -48,7 +48,7 @@ "src/**/*.{js,ts,tsx}": "eslint --fix" }, "dependencies": { - "@optimizely/optimizely-sdk": "^6.6.1", + "@optimizely/optimizely-sdk": "^6.7.0", "tslib": "^2.8.1", "use-sync-external-store": "^1.6.0" }, diff --git a/src/client/createInstance.ts b/src/client/createInstance.ts index 6772b29..d76b86b 100644 --- a/src/client/createInstance.ts +++ b/src/client/createInstance.ts @@ -20,7 +20,7 @@ import { REACT_LOGGER } from '../logger/createLogger'; import type { ReactLogger } from '../logger/ReactLogger'; export const CLIENT_ENGINE = 'react-sdk'; -export const CLIENT_VERSION = '4.2.1'; +export const CLIENT_VERSION = '4.3.0'; export const REACT_CLIENT_META = Symbol('react-client-meta');