Skip to content

Commit

Permalink
Merge branch 'main' into bulk-eval-support
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
  • Loading branch information
beeme1mr authored Sep 20, 2024
2 parents 053e334 + 7e1dd72 commit 4096323
Show file tree
Hide file tree
Showing 69 changed files with 2,042 additions and 559 deletions.
4 changes: 4 additions & 0 deletions .github/component_owners.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ components:
- toddbaert
libs/providers/config-cat:
- lukas-reining
- adams85
libs/providers/config-cat-web:
- lukas-reining
- adams85
libs/providers/env-var:
- beeme1mr
- toddbaert
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/component-owners.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
name: Auto Assign Owners
steps:
- uses: dyladan/component-owners@a0a1a67d6955b6efe190e9646e0ba536f882414a
- uses: dyladan/component-owners@58bd86e9814d23f1525d0a970682cead459fa783
with:
config-file: .github/component_owners.yml
repo-token: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
fetch-depth: 0
submodules: recursive

- uses: bufbuild/buf-setup-action@v1.32.0
- uses: bufbuild/buf-setup-action@v1.35.0
with:
github_token: ${{ github.token }}
- name: Setup Node
Expand Down
14 changes: 8 additions & 6 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@
"libs/providers/flagd": "0.13.1",
"libs/providers/flagd-web": "0.7.2",
"libs/providers/env-var": "0.3.1",
"libs/providers/config-cat": "0.6.1",
"libs/providers/config-cat": "0.7.1",
"libs/providers/launchdarkly-client": "0.3.0",
"libs/providers/go-feature-flag-web": "0.2.0",
"libs/shared/flagd-core": "0.2.3",
"libs/providers/go-feature-flag-web": "0.2.1",
"libs/shared/flagd-core": "0.2.5",
"libs/shared/ofrep-core": "0.2.0",
"libs/providers/ofrep": "0.2.0",
"libs/providers/ofrep-web": "0.3.0",
"libs/providers/flipt": "0.1.0",
"libs/providers/ofrep-web": "0.3.1",
"libs/providers/flipt": "0.1.1",
"libs/providers/flagsmith-client": "0.1.2",
"libs/providers/flipt-web": "0.1.0",
"libs/providers/multi-provider": "0.1.1",
"libs/providers/multi-provider-web": "0.0.2",
"libs/providers/growthbook-client": "0.1.1"
"libs/providers/growthbook-client": "0.1.1",
"libs/providers/config-cat-web": "0.1.2",
"libs/shared/config-cat-core": "0.1.0"
}
18 changes: 18 additions & 0 deletions libs/providers/config-cat-web/.eslintrc.json
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": {}
}
]
}
26 changes: 26 additions & 0 deletions libs/providers/config-cat-web/CHANGELOG.md
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))
160 changes: 160 additions & 0 deletions libs/providers/config-cat-web/README.md
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).
3 changes: 3 additions & 0 deletions libs/providers/config-cat-web/babel.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": [["minify", { "builtIns": false }]]
}
10 changes: 10 additions & 0 deletions libs/providers/config-cat-web/jest.config.ts
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',
};
Loading

0 comments on commit 4096323

Please sign in to comment.