Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,8 @@ jobs:
- name: npm ci
run: npm ci

- name: npm check
run: npm run check

- name: npm test
run: npm run test
34 changes: 22 additions & 12 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
1.2.0 (September 9, 2025)
- Up to date with @openfeature/server-sdk 1.19.0
- Added tracking support
- Added “evaluate with details” support

1.1.0 (June 16, 2025)
- Uses renamed @openfeature/js-sdk to @openfeature/server-sdk
- Up to date with spec 0.8.0 and @openfeature/server-sdk 1.18.0
- Uses split sdk 11.4.0
- Uses renamed @openfeature/js-sdk to @openfeature/server-sdk
- Up to date with spec 0.8.0 and @openfeature/server-sdk 1.18.0
- Uses split sdk 11.4.0

1.0.4
- Fixes issue with TS build
- Up to date with spec 0.5.0 and @openfeature/js-sdk 0.5.0
- Fixes issue with TS build
- Up to date with spec 0.5.0 and @openfeature/js-sdk 0.5.0

1.0.3
- Adds types definitions for TypeScript
- Up to date with spec 0.4.0 and @openfeature/js-sdk 0.4.0
- Adds types definitions for TypeScript
- Up to date with spec 0.4.0 and @openfeature/js-sdk 0.4.0

1.0.2
- Changes name from Node-specific implementation to generic JSON
- Up to date with spec 0.4.0 and @openfeature/js-sdk 0.4.0
- Changes name from Node-specific implementation to generic JSON
- Up to date with spec 0.4.0 and @openfeature/js-sdk 0.4.0

1.0.1
- Fixes issues with flag details and error codes in negative cases, adds unit tests
- Up to date with spec 0.4.0 and @openfeature/nodejs-sdk v0.3.2
- Fixes issues with flag details and error codes in negative cases, adds unit tests
- Up to date with spec 0.4.0 and @openfeature/nodejs-sdk v0.3.2

1.0.0
- First release. Up to date with spec 0.4.0, and @openfeature/nodejs-sdk v0.2.0
- First release. Up to date with spec 0.4.0, and @openfeature/nodejs-sdk v0.2.0
56 changes: 48 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
This Provider is designed to allow the use of OpenFeature with Split, the platform for controlled rollouts, serving features to your users via the Split feature flag to manage your complete customer experience.

## Compatibility
It supports **Node.js version 14.x or later**.


## Getting started
Expand Down Expand Up @@ -59,9 +60,40 @@ const context: EvaluationContext = {
targetingKey: 'TARGETING_KEY',
};
OpenFeatureAPI.getInstance().setCtx(context)
````
```
If the context was set at the client or api level, it is not required to provide it during flag evaluation.

## Evaluate with details
Use the get*Details(...) APIs to get the value and rich context (variant, reason, error code, metadata). This provider includes the Split treatment config as a raw JSON string under flagMetadata["config"]

```js
const booleanTreatment = await client.getBooleanDetails('boolFlag', false, context);

const config = booleanTreatment.flagMetadata.config
```

## Tracking

To use track(eventName, context, details) you must provide:

- A non-blank `eventName`.
- A context with:
- `targetingKey` (non-blank).
- `trafficType` (string, e.g. "user" or "account").

Optional:

- details with:
- `value`: numeric event value (defaults to 0).
- `properties`: map of attributes (prefer primitives: string/number/boolean/null).

Example:
```js
const context = { targetingKey: 'user-123', trafficType: 'account' }
const details = { value: 19.99, plan: 'pro', coupon: 'WELCOME10' }

client.track('checkout.completed', context, details)
```
## Submitting issues

The Split team monitors all issues submitted to this [issue tracker](https://github.com/splitio/split-openfeature-provider-nodejs/issues). We encourage you to use this issue tracker to submit any bug reports, feedback, and feature enhancements. We'll do our best to respond in a timely manner.
Expand All @@ -80,16 +112,24 @@ To learn more about Split, contact [email protected], or get started with feature f

Split has built and maintains SDKs for:

* Java [Github](https://github.com/splitio/java-client) [Docs](https://help.split.io/hc/en-us/articles/360020405151-Java-SDK)
* Javascript [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020448791-JavaScript-SDK)
* Node [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020564931-Node-js-SDK)
* .NET [Github](https://github.com/splitio/dotnet-client) [Docs](https://help.split.io/hc/en-us/articles/360020240172--NET-SDK)
* Ruby [Github](https://github.com/splitio/ruby-client) [Docs](https://help.split.io/hc/en-us/articles/360020673251-Ruby-SDK)
* PHP [Github](https://github.com/splitio/php-client) [Docs](https://help.split.io/hc/en-us/articles/360020350372-PHP-SDK)
* Python [Github](https://github.com/splitio/python-client) [Docs](https://help.split.io/hc/en-us/articles/360020359652-Python-SDK)
* GO [Github](https://github.com/splitio/go-client) [Docs](https://help.split.io/hc/en-us/articles/360020093652-Go-SDK)
* Android [Github](https://github.com/splitio/android-client) [Docs](https://help.split.io/hc/en-us/articles/360020343291-Android-SDK)
* Angular [Github](https://github.com/splitio/angular-sdk-plugin) [Docs](https://help.split.io/hc/en-us/articles/6495326064397-Angular-utilities)
* Elixir thin-client [Github](https://github.com/splitio/elixir-thin-client) [Docs](https://help.split.io/hc/en-us/articles/26988707417869-Elixir-Thin-Client-SDK)
* Flutter [Github](https://github.com/splitio/flutter-sdk-plugin) [Docs](https://help.split.io/hc/en-us/articles/8096158017165-Flutter-plugin)
* GO [Github](https://github.com/splitio/go-client) [Docs](https://help.split.io/hc/en-us/articles/360020093652-Go-SDK)
* iOS [Github](https://github.com/splitio/ios-client) [Docs](https://help.split.io/hc/en-us/articles/360020401491-iOS-SDK)
* Java [Github](https://github.com/splitio/java-client) [Docs](https://help.split.io/hc/en-us/articles/360020405151-Java-SDK)
* JavaScript [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020448791-JavaScript-SDK)
* JavaScript for Browser [Github](https://github.com/splitio/javascript-browser-client) [Docs](https://help.split.io/hc/en-us/articles/360058730852-Browser-SDK)
* Node.js [Github](https://github.com/splitio/javascript-client) [Docs](https://help.split.io/hc/en-us/articles/360020564931-Node-js-SDK)
* PHP [Github](https://github.com/splitio/php-client) [Docs](https://help.split.io/hc/en-us/articles/360020350372-PHP-SDK)
* PHP thin-client [Github](https://github.com/splitio/php-thin-client) [Docs](https://help.split.io/hc/en-us/articles/18305128673933-PHP-Thin-Client-SDK)
* Python [Github](https://github.com/splitio/python-client) [Docs](https://help.split.io/hc/en-us/articles/360020359652-Python-SDK)
* React [Github](https://github.com/splitio/react-client) [Docs](https://help.split.io/hc/en-us/articles/360038825091-React-SDK)
* React Native [Github](https://github.com/splitio/react-native-client) [Docs](https://help.split.io/hc/en-us/articles/4406066357901-React-Native-SDK)
* Redux [Github](https://github.com/splitio/redux-client) [Docs](https://help.split.io/hc/en-us/articles/360038851551-Redux-SDK)
* Ruby [Github](https://github.com/splitio/ruby-client) [Docs](https://help.split.io/hc/en-us/articles/360020673251-Ruby-SDK)

For a comprehensive list of open source projects visit our [Github page](https://github.com/splitio?utf8=%E2%9C%93&query=%20only%3Apublic%20).

Expand Down
30 changes: 30 additions & 0 deletions eslint.config.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import { defineConfig } from "eslint/config";
import jestPlugin from 'eslint-plugin-jest';


export default defineConfig([
{
files: ["**/*.{js,ts}"],
plugins: { js },
extends: ["js/recommended"],
languageOptions: {
globals: globals.browser
}
},
{
files: ['**/*.{test,spec}.{js,ts,jsx,tsx}', '**/__tests__/**/*.{js,ts,jsx,tsx}'],
plugins: { jest: jestPlugin },
rules: {
...jestPlugin.configs.recommended.rules,
},
languageOptions: {
globals: {
...globals.jest,
},
},
},
tseslint.configs.recommended,
]);
Loading