js-sdk-contrib/libs/providers/ofrep
Todd Baert 4dbcbf1870
chore: add "type" import enforcement lint rule and apply (#1292)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-05-30 13:06:18 -04:00
..
src chore: add "type" import enforcement lint rule and apply (#1292) 2025-05-30 13:06:18 -04:00
.eslintrc.json feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
CHANGELOG.md chore(main): release ofrep-provider 0.2.1 (#1176) 2025-02-13 15:31:58 -05:00
README.md feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
babel.config.json feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
jest.config.ts feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
package.json chore(main): release ofrep-provider 0.2.1 (#1176) 2025-02-13 15:31:58 -05:00
project.json chore: update nx packages (#1147) 2025-01-10 11:36:17 -05:00
tsconfig.json feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
tsconfig.lib.json feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00
tsconfig.spec.json feat: implement OFREP server provider (#817) 2024-04-05 16:10:56 +02:00

README.md

Server-Side OFREP Provider

This provider is designed to use the OpenFeature Remote Evaluation Protocol (OFREP).

Installation

npm

npm install @openfeature/ofrep-provider

yarn

yarn add @openfeature/ofrep-provider @openfeature/ofrep-core @openfeature/server-sdk

[!NOTE] yarn requires manual installation of peer dependencies

Configurations and Usage

The provider needs the base url of the OFREP server for instantiation.

import { OFREPProvider } from '@openfeature/ofrep-provider';

OpenFeature.setProvider(new OFREPProvider({ baseUrl: 'https://localhost:8080' }));

HTTP headers

The provider can use headers from either a static header map or a custom header factory.

Static Headers

Headers can be given as a list of tuples or as a map of headers.

import { OFREPProvider } from '@openfeature/ofrep-provider';

OpenFeature.setProvider(
  new OFREPProvider({
    baseUrl: 'https://localhost:8080',
    headers: [
      ['Authorization', `my-api-key`],
      ['X-My-Header', `CustomHeaderValue`],
    ],
  }),
);
import { OFREPProvider } from '@openfeature/ofrep-provider';

OpenFeature.setProvider(
  new OFREPProvider({
    baseUrl: 'https://localhost:8080',
    headers: { Authorization: `my-api-key`, 'X-My-Header': `CustomHeaderValue` },
  }),
);

Header Factory

The header factory is evaluated before every flag evaluation which makes it possible to use dynamic values for the headers.

The following shows an example of loading a token and using it as bearer token.

import { OFREPProvider } from '@openfeature/ofrep-provider';

OpenFeature.setProvider(
  new OFREPProvider({
    baseUrl: 'https://localhost:8080',
    headersFactory: () => {
      const token: string = loadDynamicToken();
      return [['Authorization', `Bearer ${token}`]];
    },
  }),
);

Fetch implementation

If needed, a custom fetch implementation can be injected, if e.g. the platform does not have fetch built in.

import { OFREPProvider } from '@openfeature/ofrep-provider';
import { fetchPolyfill } from 'some-fetch-polyfill';

OpenFeature.setProvider(
  new OFREPProvider({
    baseUrl: 'https://localhost:8080',
    fetchImplementation: fetchPolyfill,
  }),
);

Building

Run nx package providers-ofrep to build the library.

Running unit tests

Run nx test providers-ofrep to execute the unit tests via Jest.