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
8 changes: 8 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
"@typescript-eslint/consistent-type-imports": [
"error",
{
"disallowTypeAnnotations": true,
"fixStyle": "separate-type-imports",
"prefer": "type-imports"
}
],
"@nx/enforce-module-boundaries": [
"error",
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { BeforeHookContext, EvaluationDetails, HookContext, StandardResolutionReasons } from '@openfeature/server-sdk';
import type { BeforeHookContext, EvaluationDetails, HookContext } from '@openfeature/server-sdk';
import { StandardResolutionReasons } from '@openfeature/server-sdk';
import opentelemetry from '@opentelemetry/api';
import { DataPoint, MeterProvider, MetricReader, ScopeMetrics } from '@opentelemetry/sdk-metrics';
import type { DataPoint, ScopeMetrics } from '@opentelemetry/sdk-metrics';
import { MeterProvider, MetricReader } from '@opentelemetry/sdk-metrics';
import {
ACTIVE_COUNT_NAME,
ERROR_TOTAL_NAME,
Expand All @@ -12,7 +14,7 @@ import {
VARIANT_ATTR,
} from '../conventions';
import { MetricsHook } from './metrics-hook';
import { AttributeMapper } from '../otel-hook';
import type { AttributeMapper } from '../otel-hook';

// no-op "in-memory" reader
class InMemoryMetricReader extends MetricReader {
Expand Down
12 changes: 6 additions & 6 deletions libs/hooks/open-telemetry/src/lib/metrics/metrics-hook.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import type { BeforeHookContext, Logger } from '@openfeature/server-sdk';
import {
BeforeHookContext,
Logger,
StandardResolutionReasons,
type EvaluationDetails,
type FlagValue,
type Hook,
type HookContext,
} from '@openfeature/server-sdk';
import { Attributes, Counter, UpDownCounter, ValueType, metrics } from '@opentelemetry/api';
import type { Attributes, Counter, UpDownCounter } from '@opentelemetry/api';
import { ValueType, metrics } from '@opentelemetry/api';
import type { EvaluationAttributes, ExceptionAttributes } from '../conventions';
import {
ACTIVE_COUNT_NAME,
ERROR_TOTAL_NAME,
EXCEPTION_ATTR,
EvaluationAttributes,
ExceptionAttributes,
KEY_ATTR,
PROVIDER_NAME_ATTR,
REASON_ATTR,
REQUESTS_TOTAL_NAME,
SUCCESS_TOTAL_NAME,
VARIANT_ATTR,
} from '../conventions';
import { OpenTelemetryHook, OpenTelemetryHookOptions } from '../otel-hook';
import type { OpenTelemetryHookOptions } from '../otel-hook';
import { OpenTelemetryHook } from '../otel-hook';

type ErrorEvaluationAttributes = EvaluationAttributes & ExceptionAttributes;

Expand Down
4 changes: 2 additions & 2 deletions libs/hooks/open-telemetry/src/lib/otel-hook.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { FlagMetadata, Logger } from '@openfeature/server-sdk';
import { Attributes } from '@opentelemetry/api';
import type { FlagMetadata, Logger } from '@openfeature/server-sdk';
import type { Attributes } from '@opentelemetry/api';

export type AttributeMapper = (flagMetadata: FlagMetadata) => Attributes;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { EvaluationDetails, HookContext } from '@openfeature/server-sdk';
import type { EvaluationDetails, HookContext } from '@openfeature/server-sdk';

const addEvent = jest.fn();
const recordException = jest.fn();
Expand Down
5 changes: 3 additions & 2 deletions libs/hooks/open-telemetry/src/lib/traces/tracing-hook.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { Hook, HookContext, EvaluationDetails, FlagValue, Logger } from '@openfeature/server-sdk';
import type { Hook, HookContext, EvaluationDetails, FlagValue, Logger } from '@openfeature/server-sdk';
import { trace } from '@opentelemetry/api';
import { FEATURE_FLAG, KEY_ATTR, PROVIDER_NAME_ATTR, VARIANT_ATTR } from '../conventions';
import { OpenTelemetryHook, OpenTelemetryHookOptions } from '../otel-hook';
import type { OpenTelemetryHookOptions } from '../otel-hook';
import { OpenTelemetryHook } from '../otel-hook';

export type TracingHookOptions = OpenTelemetryHookOptions;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { OpenFeature } from '@openfeature/server-sdk';
import { AwsSsmProvider } from '../lib/aws-ssm-provider';
import { GetParameterCommand, GetParameterCommandOutput, SSMClient } from '@aws-sdk/client-ssm';
import type { GetParameterCommandOutput } from '@aws-sdk/client-ssm';
import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
import { mockClient } from 'aws-sdk-client-mock';

const ssmMock = mockClient(SSMClient);
Expand Down
2 changes: 1 addition & 1 deletion libs/providers/aws-ssm/src/lib/aws-ssm-provider.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { SSMClientConfig } from '@aws-sdk/client-ssm';
import type { SSMClientConfig } from '@aws-sdk/client-ssm';
import { AwsSsmProvider } from './aws-ssm-provider';
import { ErrorCode, StandardResolutionReasons } from '@openfeature/core';

Expand Down
12 changes: 3 additions & 9 deletions libs/providers/aws-ssm/src/lib/aws-ssm-provider.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
import {
EvaluationContext,
Provider,
JsonValue,
ResolutionDetails,
StandardResolutionReasons,
ErrorCode,
} from '@openfeature/server-sdk';
import type { EvaluationContext, Provider, JsonValue, ResolutionDetails } from '@openfeature/server-sdk';
import { StandardResolutionReasons, ErrorCode } from '@openfeature/server-sdk';
import { InternalServerError } from '@aws-sdk/client-ssm';
import { AwsSsmProviderConfig } from './types';
import type { AwsSsmProviderConfig } from './types';
import { SSMService } from './ssm-service';
import { Cache } from './cache';

Expand Down
4 changes: 2 additions & 2 deletions libs/providers/aws-ssm/src/lib/cache.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ResolutionDetails } from '@openfeature/core';
import { LRUCacheConfig } from './types';
import type { ResolutionDetails } from '@openfeature/core';
import type { LRUCacheConfig } from './types';
import { LRUCache } from 'lru-cache';

export class Cache {
Expand Down
21 changes: 5 additions & 16 deletions libs/providers/aws-ssm/src/lib/ssm-service.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,8 @@
import {
GetParameterCommand,
SSMClient,
SSMClientConfig,
GetParameterCommandInput,
DescribeParametersCommand,
} from '@aws-sdk/client-ssm';
import { ResponseMetadata } from '@smithy/types';
import {
FlagNotFoundError,
TypeMismatchError,
JsonValue,
ParseError,
ResolutionDetails,
StandardResolutionReasons,
} from '@openfeature/core';
import type { SSMClientConfig, GetParameterCommandInput } from '@aws-sdk/client-ssm';
import { GetParameterCommand, SSMClient, DescribeParametersCommand } from '@aws-sdk/client-ssm';
import type { ResponseMetadata } from '@smithy/types';
import type { JsonValue, ResolutionDetails } from '@openfeature/core';
import { FlagNotFoundError, TypeMismatchError, ParseError, StandardResolutionReasons } from '@openfeature/core';

export class SSMService {
client: SSMClient;
Expand Down
2 changes: 1 addition & 1 deletion libs/providers/aws-ssm/src/lib/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { SSMClientConfig } from '@aws-sdk/client-ssm';
import type { SSMClientConfig } from '@aws-sdk/client-ssm';

export type AwsSsmProviderConfig = {
ssmClientConfig: SSMClientConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
import { ConfigCatWebProvider } from './config-cat-web-provider';
import {
createConsoleLogger,
createFlagOverridesFromMap,
HookEvents,
IConfigCatCache,
ISettingUnion,
LogLevel,
OverrideBehaviour,
} from 'configcat-js-ssr';
import { EventEmitter } from 'events';
import type { HookEvents, IConfigCatCache, ISettingUnion } from 'configcat-js-ssr';
import { createConsoleLogger, createFlagOverridesFromMap, LogLevel, OverrideBehaviour } from 'configcat-js-ssr';
import type { EventEmitter } from 'events';
import { ProviderEvents, ParseError, FlagNotFoundError, TypeMismatchError } from '@openfeature/web-sdk';

describe('ConfigCatWebProvider', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,15 @@
import type { EvaluationContext, JsonValue, Paradigm, Provider, ResolutionDetails } from '@openfeature/web-sdk';
import {
EvaluationContext,
JsonValue,
OpenFeatureEventEmitter,
Paradigm,
ParseError,
Provider,
ProviderEvents,
ProviderNotReadyError,
ResolutionDetails,
TypeMismatchError,
} from '@openfeature/web-sdk';
import {
isType,
parseError,
PrimitiveType,
PrimitiveTypeName,
toResolutionDetails,
transformContext,
} from '@openfeature/config-cat-core';
import {
ClientCacheState,
getClient,
IConfig,
IConfigCatClient,
OptionsForPollingMode,
PollingMode,
SettingValue,
} from 'configcat-js-ssr';
import type { PrimitiveType, PrimitiveTypeName } from '@openfeature/config-cat-core';
import { isType, parseError, toResolutionDetails, transformContext } from '@openfeature/config-cat-core';
import type { IConfig, IConfigCatClient, OptionsForPollingMode, SettingValue } from 'configcat-js-ssr';
import { ClientCacheState, getClient, PollingMode } from 'configcat-js-ssr';

export class ConfigCatWebProvider implements Provider {
public readonly events = new OpenFeatureEventEmitter();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { ConfigCatProvider } from './config-cat-provider';
import { ProviderEvents, ParseError, FlagNotFoundError, TypeMismatchError } from '@openfeature/web-sdk';
import type { HookEvents, IConfigCatCache, ISettingUnion } from 'configcat-js-ssr';
import {
createConsoleLogger,
createFlagOverridesFromMap,
HookEvents,
IConfigCatCache,
ISettingUnion,
LogLevel,
OverrideBehaviour,
PollingMode,
} from 'configcat-js-ssr';
import { EventEmitter } from 'events';
import type { EventEmitter } from 'events';

describe('ConfigCatProvider', () => {
const targetingKey = 'abc';
Expand Down
22 changes: 7 additions & 15 deletions libs/providers/config-cat/src/lib/config-cat-provider.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
import type { EvaluationContext, JsonValue, Provider, ResolutionDetails, Paradigm } from '@openfeature/server-sdk';
import {
EvaluationContext,
JsonValue,
OpenFeatureEventEmitter,
Provider,
ProviderEvents,
ResolutionDetails,
Paradigm,
ProviderNotReadyError,
TypeMismatchError,
ParseError,
} from '@openfeature/server-sdk';
import {
isType,
parseError,
PrimitiveType,
PrimitiveTypeName,
toResolutionDetails,
transformContext,
} from '@openfeature/config-cat-core';
import { ClientCacheState, PollingMode, SettingValue } from 'configcat-common';
import { IConfigCatClient, getClient, IConfig, OptionsForPollingMode } from 'configcat-node';
import type { PrimitiveType, PrimitiveTypeName } from '@openfeature/config-cat-core';
import { isType, parseError, toResolutionDetails, transformContext } from '@openfeature/config-cat-core';
import type { SettingValue } from 'configcat-common';
import { ClientCacheState, PollingMode } from 'configcat-common';
import type { IConfigCatClient, IConfig, OptionsForPollingMode } from 'configcat-node';
import { getClient } from 'configcat-node';

export class ConfigCatProvider implements Provider {
public readonly events = new OpenFeatureEventEmitter();
Expand Down
10 changes: 2 additions & 8 deletions libs/providers/env-var/src/lib/env-var-provider.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
import {
FlagNotFoundError,
JsonValue,
ParseError,
Provider,
ResolutionDetails,
StandardResolutionReasons,
} from '@openfeature/server-sdk';
import type { JsonValue, Provider, ResolutionDetails } from '@openfeature/server-sdk';
import { FlagNotFoundError, ParseError, StandardResolutionReasons } from '@openfeature/server-sdk';
import { constantCase } from './constant-case';

export type Config = {
Expand Down
12 changes: 3 additions & 9 deletions libs/providers/flagd-web/src/e2e/step-definitions/flag.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import { StepDefinitions } from 'jest-cucumber';
import {
EvaluationDetails,
FlagValue,
JsonObject,
OpenFeature,
ProviderEvents,
StandardResolutionReasons,
} from '@openfeature/web-sdk';
import type { StepDefinitions } from 'jest-cucumber';
import type { EvaluationDetails, FlagValue, JsonObject } from '@openfeature/web-sdk';
import { OpenFeature, ProviderEvents, StandardResolutionReasons } from '@openfeature/web-sdk';
import { E2E_CLIENT_NAME } from '@openfeature/flagd-core';

export const flagStepDefinitions: StepDefinitions = ({ given, and, when, then }) => {
Expand Down
3 changes: 2 additions & 1 deletion libs/providers/flagd-web/src/e2e/tests/provider.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import assert from 'assert';
import { OpenFeature } from '@openfeature/web-sdk';
import { GenericContainer, StartedTestContainer } from 'testcontainers';
import type { StartedTestContainer } from 'testcontainers';
import { GenericContainer } from 'testcontainers';
import { FlagdWebProvider } from '../../lib/flagd-web-provider';
import { autoBindSteps, loadFeature } from 'jest-cucumber';
import { FLAGD_NAME, GHERKIN_EVALUATION_FEATURE } from '../constants';
Expand Down
17 changes: 6 additions & 11 deletions libs/providers/flagd-web/src/lib/flagd-web-provider.spec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
import { CallbackClient, Code, ConnectError, PromiseClient } from '@connectrpc/connect';
import type { CallbackClient, ConnectError, PromiseClient } from '@connectrpc/connect';
import { Code } from '@connectrpc/connect';
import { Struct } from '@bufbuild/protobuf';
import {
Client,
ErrorCode,
JsonValue,
OpenFeature,
ProviderEvents,
StandardResolutionReasons,
} from '@openfeature/web-sdk';
import type { Client, JsonValue } from '@openfeature/web-sdk';
import { ErrorCode, OpenFeature, ProviderEvents, StandardResolutionReasons } from '@openfeature/web-sdk';
import fetchMock from 'jest-fetch-mock';
import { Service } from '../proto/ts/flagd/evaluation/v1/evaluation_connect';
import { AnyFlag, EventStreamResponse, ResolveAllResponse } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
import type { Service } from '../proto/ts/flagd/evaluation/v1/evaluation_connect';
import type { AnyFlag, EventStreamResponse, ResolveAllResponse } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
import { FlagdWebProvider } from './flagd-web-provider';

const EVENT_CONFIGURATION_CHANGE = 'configuration_change';
Expand Down
18 changes: 11 additions & 7 deletions libs/providers/flagd-web/src/lib/flagd-web-provider.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
import { CallbackClient, createCallbackClient, createPromiseClient, PromiseClient } from '@connectrpc/connect';
import type { CallbackClient, PromiseClient } from '@connectrpc/connect';
import { createCallbackClient, createPromiseClient } from '@connectrpc/connect';
import { createConnectTransport } from '@connectrpc/connect-web';
import { Struct } from '@bufbuild/protobuf';
import {
import type {
EvaluationContext,
FlagNotFoundError,
FlagValue,
JsonValue,
Logger,
Provider,
ResolutionDetails,
} from '@openfeature/web-sdk';
import {
FlagNotFoundError,
OpenFeature,
OpenFeatureEventEmitter,
Provider,
ProviderEvents,
ResolutionDetails,
StandardResolutionReasons,
TypeMismatchError,
} from '@openfeature/web-sdk';
import { Service } from '../proto/ts/flagd/evaluation/v1/evaluation_connect';
import { AnyFlag } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
import { FlagdProviderOptions, getOptions } from './options';
import type { AnyFlag } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
import type { FlagdProviderOptions } from './options';
import { getOptions } from './options';

export const ERROR_DISABLED = 'DISABLED';

Expand Down
13 changes: 3 additions & 10 deletions libs/providers/flagd/src/e2e/step-definitions/flag.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import { StepDefinitions } from 'jest-cucumber';
import {
EvaluationContext,
EvaluationDetails,
FlagValue,
JsonObject,
OpenFeature,
ProviderEvents,
StandardResolutionReasons,
} from '@openfeature/server-sdk';
import type { StepDefinitions } from 'jest-cucumber';
import type { EvaluationContext, EvaluationDetails, FlagValue, JsonObject } from '@openfeature/server-sdk';
import { OpenFeature, ProviderEvents, StandardResolutionReasons } from '@openfeature/server-sdk';
import { E2E_CLIENT_NAME } from '@openfeature/flagd-core';

export const flagStepDefinitions: StepDefinitions = ({ given, and, when, then }) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { StepDefinitions } from 'jest-cucumber';
import type { StepDefinitions } from 'jest-cucumber';
import { OpenFeature, ProviderEvents } from '@openfeature/server-sdk';
import { UNAVAILABLE_CLIENT_NAME, UNSTABLE_CLIENT_NAME } from '../constants';

Expand Down
Loading