-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into bulk-eval-support
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
- Loading branch information
Showing
69 changed files
with
2,042 additions
and
559 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
{ | ||
"extends": ["../../../.eslintrc.json"], | ||
"ignorePatterns": ["!**/*"], | ||
"overrides": [ | ||
{ | ||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"], | ||
"rules": {} | ||
}, | ||
{ | ||
"files": ["*.ts", "*.tsx"], | ||
"rules": {} | ||
}, | ||
{ | ||
"files": ["*.js", "*.jsx"], | ||
"rules": {} | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Changelog | ||
|
||
## [0.1.2](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.1...config-cat-web-provider-v0.1.2) (2024-08-22) | ||
|
||
|
||
### 🐛 Bug Fixes | ||
|
||
* **config-cat-web:** Update dependency configcat-js-ssr to v8.4.2 ([#1041](https://github.com/open-feature/js-sdk-contrib/issues/1041)) ([55e554d](https://github.com/open-feature/js-sdk-contrib/commit/55e554d9fc9966d7d2b364da4776c478a2ba9bb1)) | ||
|
||
## [0.1.1](https://github.com/open-feature/js-sdk-contrib/compare/config-cat-web-provider-v0.1.0...config-cat-web-provider-v0.1.1) (2024-07-28) | ||
|
||
|
||
### 📚 Documentation | ||
|
||
* A few corrections to ConfigCat providers' README.md ([#1014](https://github.com/open-feature/js-sdk-contrib/issues/1014)) ([3b24653](https://github.com/open-feature/js-sdk-contrib/commit/3b24653854643c827bddccb12aeb59e61204202d)) | ||
|
||
## 0.1.0 (2024-07-21) | ||
|
||
|
||
### ⚠ BREAKING CHANGES | ||
|
||
* implement config cat web provider ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918)) | ||
|
||
### ✨ New Features | ||
|
||
* implement config cat web provider ([#918](https://github.com/open-feature/js-sdk-contrib/issues/918)) ([e280014](https://github.com/open-feature/js-sdk-contrib/commit/e280014f8998dd2e5f2b7700f0d24842eeafab5f)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
# ConfigCat Web Provider | ||
|
||
This is an OpenFeature provider implementation for using [ConfigCat](https://configcat.com), a managed feature flag service in JavaScript frontend applications. | ||
|
||
## Installation | ||
|
||
``` | ||
$ npm install @openfeature/config-cat-web-provider | ||
``` | ||
|
||
#### Required peer dependencies | ||
|
||
The OpenFeature SDK is required as peer dependency. | ||
|
||
The minimum required version of `@openfeature/web-sdk` currently is `1.0.0`. | ||
|
||
The minimum required version of `configcat-js-ssr` currently is `8.4.3`. | ||
|
||
``` | ||
$ npm install @openfeature/web-sdk configcat-js-ssr | ||
``` | ||
|
||
## Usage | ||
|
||
The ConfigCat provider uses the [ConfigCat JavaScript SSR SDK](https://configcat.com/docs/sdk-reference/js-ssr/). | ||
|
||
It can be created by passing the ConfigCat SDK options to ```ConfigCatWebProvider.create```. | ||
The available options can be found in the [ConfigCat JavaScript SSR SDK](https://configcat.com/docs/sdk-reference/js-ssr/#creating-the-configcat-client). | ||
|
||
The ConfigCat Web Provider only supports the `AutoPolling` mode because it caches all evaluation data to support synchronous evaluation of feature flags. | ||
|
||
### Example using the default configuration | ||
|
||
```javascript | ||
import { OpenFeature } from "@openfeature/web-sdk"; | ||
import { ConfigCatWebProvider } from '@openfeature/config-cat-web-provider'; | ||
|
||
// Create and set the provider. | ||
const provider = ConfigCatWebProvider.create('<sdk_key>'); | ||
await OpenFeature.setProviderAndWait(provider); | ||
|
||
// Create a client instance to evaluate feature flags. | ||
const client = OpenFeature.getClient(); | ||
|
||
const value = await client.getBooleanValue('isAwesomeFeatureEnabled', false); | ||
console.log(`isAwesomeFeatureEnabled: ${value}`); | ||
|
||
// On application shutdown, clean up the OpenFeature provider and the underlying ConfigCat client. | ||
await OpenFeature.clearProviders(); | ||
``` | ||
|
||
### Example using custom configuration | ||
|
||
```javascript | ||
import { OpenFeature } from "@openfeature/web-sdk"; | ||
import { ConfigCatWebProvider } from '@openfeature/config-cat-web-provider'; | ||
import { createConsoleLogger, LogLevel } from 'configcat-js-ssr'; | ||
|
||
// Create and set the provider. | ||
const provider = ConfigCatWebProvider.create('<sdk_key>', { | ||
logger: createConsoleLogger(LogLevel.Info), | ||
setupHooks: (hooks) => hooks.on('clientReady', () => console.log('Client is ready!')), | ||
}); | ||
await OpenFeature.setProviderAndWait(provider); | ||
|
||
// ... | ||
``` | ||
|
||
## Evaluation Context | ||
|
||
The OpenFeature Evaluation Context is mapped to the [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/). | ||
|
||
The [ConfigCat User Object](https://configcat.com/docs/advanced/user-object/) has three predefined attributes, | ||
and allows for additional attributes. | ||
The following shows how the attributes are mapped: | ||
|
||
| OpenFeature EvaluationContext Field | ConfigCat User Field | Required | | ||
|-------------------------------------|----------------------|----------| | ||
| targetingKey | identifier | yes | | ||
| email | email | no | | ||
| country | country | no | | ||
| _Any Other_ | custom | no | | ||
|
||
The custom types are mapped the following way: | ||
|
||
| OpenFeature EvaluationContext Field Type | ConfigCat User Field Type | | ||
|------------------------------------------|---------------------------| | ||
| string | string | | ||
| number | number | | ||
| boolean | string | | ||
| Array<string> | Array<string> | | ||
| Array | Array | | ||
| object | string | | ||
|
||
The following example shows the conversion between an OpenFeature Evaluation Context and the corresponding ConfigCat | ||
User: | ||
|
||
#### OpenFeature | ||
|
||
```json | ||
{ | ||
"targetingKey": "test", | ||
"email": "email", | ||
"country": "country", | ||
"customString": "customString", | ||
"customNumber": 1, | ||
"customBoolean": true, | ||
"customObject": { | ||
"prop1": "1", | ||
"prop2": 2 | ||
}, | ||
"customStringArray": [ | ||
"one", | ||
"two" | ||
], | ||
"customArray": [ | ||
1, | ||
"2", | ||
false | ||
] | ||
} | ||
``` | ||
|
||
#### ConfigCat | ||
|
||
```json | ||
{ | ||
"identifier": "test", | ||
"email": "email", | ||
"country": "country", | ||
"custom": { | ||
"customString": "customString", | ||
"customBoolean": "true", | ||
"customNumber": 1, | ||
"customObject": "{\"prop1\":\"1\",\"prop2\":2}", | ||
"customStringArray": [ | ||
"one", | ||
"two" | ||
], | ||
"customArray": "[1,\"2\",false]" | ||
} | ||
} | ||
``` | ||
|
||
## Events | ||
|
||
The ConfigCat provider emits the | ||
following [OpenFeature events](https://openfeature.dev/specification/types#provider-events): | ||
|
||
- PROVIDER_READY | ||
- PROVIDER_ERROR | ||
- PROVIDER_CONFIGURATION_CHANGED | ||
|
||
## Building | ||
|
||
Run `nx package providers-config-cat-web` to build the library. | ||
|
||
## Running unit tests | ||
|
||
Run `nx test providers-config-cat-web` to execute the unit tests via [Jest](https://jestjs.io). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"presets": [["minify", { "builtIns": false }]] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/* eslint-disable */ | ||
export default { | ||
displayName: 'providers-config-cat-web', | ||
preset: '../../../jest.preset.js', | ||
transform: { | ||
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }], | ||
}, | ||
moduleFileExtensions: ['ts', 'js', 'html'], | ||
coverageDirectory: '../../../coverage/libs/providers/config-cat', | ||
}; |
Oops, something went wrong.