Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
de8bdb7
docs: fix casing for OpenFeature reference in code example
tcarrio Aug 8, 2023
6fe664c
update sdk versions
rgrassian-split Jun 3, 2025
ef841c0
update ts version
rgrassian-split Jun 3, 2025
00f804a
split sdk version in changes
rgrassian-split Jun 3, 2025
55f91c3
simplify
rgrassian-split Jun 3, 2025
2cb5842
simplify
rgrassian-split Jun 3, 2025
07ddb78
add back the lib changes
rgrassian-split Jun 3, 2025
438eaad
fix changes.txt
rgrassian-split Jun 16, 2025
69af314
update constructor in case already emitted SDK_READY event
rgrassian-split Jun 16, 2025
71b5534
Merge pull request #8 from splitio/update
ZamoraEmmanuel Aug 21, 2025
b14f29b
Merge pull request #5 from tcarrio/docs/readme-casing-fix
ZamoraEmmanuel Aug 22, 2025
b1dc5ef
Update dependencies
ZamoraEmmanuel Aug 22, 2025
4bd7af2
Merge pull request #9 from splitio/fme-9595
ZamoraEmmanuel Aug 25, 2025
139b82b
[FME-9594] fix build, add github workflow, add evaluationWithDetails
ZamoraEmmanuel Aug 25, 2025
531259b
Fix main branch name
ZamoraEmmanuel Aug 25, 2025
159dd90
Fix ci
ZamoraEmmanuel Aug 25, 2025
3655dcc
Remove ts-tests temporally
ZamoraEmmanuel Aug 25, 2025
2414bba
Remove ts-tests temporally
ZamoraEmmanuel Aug 25, 2025
3d32f10
fix ci
ZamoraEmmanuel Aug 25, 2025
cf57334
fix ci
ZamoraEmmanuel Aug 25, 2025
a1e2730
Add precomitconfig and codeowners files and update filename to test
ZamoraEmmanuel Aug 25, 2025
64e5dae
fix typo
ZamoraEmmanuel Aug 25, 2025
920ca3c
Rename job
ZamoraEmmanuel Aug 25, 2025
0922be2
Merge pull request #10 from splitio/fme-9594
ZamoraEmmanuel Aug 28, 2025
fa3a026
Add track and evaluation with details
ZamoraEmmanuel Sep 2, 2025
a4ed435
rename flagname to treatment
ZamoraEmmanuel Sep 5, 2025
cb7717d
[FME-9861] use jest for unit tests
ZamoraEmmanuel Sep 5, 2025
37751fa
Remove unused scripts
ZamoraEmmanuel Sep 5, 2025
0bcd15a
Add track tests to openfeature client suite
ZamoraEmmanuel Sep 5, 2025
fdeba09
Merge pull request #11 from splitio/fme-9851
ZamoraEmmanuel Sep 8, 2025
c45ebaa
Merge branch 'development' into fme-9861
ZamoraEmmanuel Sep 8, 2025
420c7f1
Update package.json
ZamoraEmmanuel Sep 8, 2025
5dc8432
Add lint
ZamoraEmmanuel Sep 9, 2025
9a35b81
Update README.md
ZamoraEmmanuel Sep 10, 2025
e344782
fix typo
ZamoraEmmanuel Sep 10, 2025
9084085
Merge pull request #13 from splitio/add-lint
ZamoraEmmanuel Sep 10, 2025
518e36d
Merge pull request #12 from splitio/fme-9861
ZamoraEmmanuel Sep 10, 2025
a1a8b60
[FME-10028] support async clients and add events
ZamoraEmmanuel Sep 10, 2025
a3f14d7
Add redis to ci
ZamoraEmmanuel Sep 10, 2025
e552b8f
Merge pull request #14 from splitio/fme-10028
ZamoraEmmanuel Sep 11, 2025
214c168
Add factory option to provider
ZamoraEmmanuel Sep 11, 2025
20c1417
Add provider initialization with splitFactory in readme
ZamoraEmmanuel Sep 11, 2025
159de6c
Update changes file
ZamoraEmmanuel Sep 11, 2025
083999f
Update release date
ZamoraEmmanuel Sep 11, 2025
c13cdd1
Update tests
ZamoraEmmanuel Sep 11, 2025
516b220
update release date
ZamoraEmmanuel Sep 12, 2025
0d03ee8
Add apiKey instantiation to readme
ZamoraEmmanuel Sep 12, 2025
7903d7a
Merge pull request #15 from splitio/add-factory
ZamoraEmmanuel Sep 12, 2025
86ac6f9
fix version
ZamoraEmmanuel Sep 12, 2025
c579174
Merge pull request #17 from splitio/fix-version
ZamoraEmmanuel Sep 12, 2025
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
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @splitio/sdk
40 changes: 40 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: test
on:
pull_request:
branches:
- '*'

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
build:
name: Run tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Install Redis
run: |
sudo add-apt-repository ppa:redislabs/redis
sudo apt-get install -y redis-tools redis-server

- name: Check Redis
run: redis-cli ping

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'

- name: npm ci
run: npm ci

- name: npm check
run: npm run check

- name: npm test
run: npm run test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
dump.rdb

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
Expand Down
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: check-added-large-files
- id: check-json
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
38 changes: 25 additions & 13 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
1.0.0
- First release. Up to date with spec 0.4.0, and @openfeature/nodejs-sdk v0.2.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
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
1.0.3
- Adds types definitions for TypeScript
- Up to date with spec 0.4.0 and @openfeature/js-sdk 0.4.0
1.1.0 (September 12, 2025)
- Updated @openfeature/server-sdk to 1.19.0
- Updated @splitsoftware/splitio to 11.4.1
- Added support for tracking feature
- Added support for evaluate with details feature
- Added support for provider initialization using splitFactory and apiKey
- Replace @openfeature/js-sdk with @openfeature/server-sdk

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

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

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

1.0.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
86 changes: 74 additions & 12 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 All @@ -19,19 +20,41 @@ npm install @splitsoftware/openfeature-js-split-provider
### Confirm peer dependencies are installed
```sh
npm install @splitsoftware/splitio
npm install @openfeature/js-sdk
npm install @openfeature/server-sdk
```

### Register the Split provider with OpenFeature
### Register the Split provider with OpenFeature using sdk apiKey
```js
const OpenFeature = require('@openfeature/js-sdk').OpenFeature;
const OpenFeature = require('@openfeature/server-sdk').OpenFeature;
const OpenFeatureSplitProvider = require('@splitsoftware/openfeature-js-split-provider').OpenFeatureSplitProvider;

const authorizationKey = 'your auth key'
const provider = new OpenFeatureSplitProvider(authorizationKey);
OpenFeature.setProvider(provider);
```

### Register the Split provider with OpenFeature using splitFactory
```js
const OpenFeature = require('@openfeature/server-sdk').OpenFeature;
const SplitFactory = require('@splitsoftware/splitio').SplitFactory;
const OpenFeatureSplitProvider = require('@splitsoftware/openfeature-js-split-provider').OpenFeatureSplitProvider;

const authorizationKey = 'your auth key'
const splitFactory = SplitFactory({core: {authorizationKey}});
const provider = new OpenFeatureSplitProvider(splitFactory);
OpenFeature.setProvider(provider);
```

### Register the Split provider with OpenFeature using splitClient
```js
const OpenFeature = require('@openfeature/server-sdk').OpenFeature;
const SplitFactory = require('@splitsoftware/splitio').SplitFactory;
const OpenFeatureSplitProvider = require('@splitsoftware/openfeature-js-split-provider').OpenFeatureSplitProvider;

const authorizationKey = 'your auth key'
const splitClient = SplitFactory({core: {authorizationKey}}).client();
const provider = new OpenFeatureSplitProvider({splitClient});
openFeature.setProvider(provider);
OpenFeature.setProvider(provider);
```

## Use of OpenFeature with Split
Expand Down Expand Up @@ -59,9 +82,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 +134,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