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
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ jobs:

- name: npm check
run: npm run check

- name: npm test
run: npm run test
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
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
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright © 2022 Split Software, Inc.
Copyright © 2025 Split Software, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
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 hello@split.io, 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,
]);
18 changes: 12 additions & 6 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
module.exports = {
displayName: 'js-split-provider',
preset: '../../jest.preset.js',
globals: {
'ts-jest': {
tsconfig: '<rootDir>/tsconfig.spec.json',
},
},
preset: 'ts-jest',

// Test files are .js and .ts files inside of __tests__ folders and with a suffix of .test or .spec
testMatch: ['<rootDir>/src/**/__tests__/**/?(*.)+(spec|test).[jt]s'],

// Included files for test coverage (npm run test:coverage)
collectCoverageFrom: [
'src/**/*.{js,ts}',
'!src/**/__tests__/**',
'!src/**/*.d.ts'
],

transform: {
'^.+\\.[tj]s$': 'ts-jest',
},
Expand Down
Loading