UNPKG

@hypertune/openfeature-server-provider

Version:

OpenFeature provider for Hypertune.

73 lines (65 loc) 1.95 kB
import { EvaluationContext, JsonValue, OpenFeatureEventEmitter, Provider, ProviderEvents, ResolutionDetails, } from "@openfeature/server-sdk"; import { HypertuneProviderBase } from "@hypertune/openfeature-base-provider"; export class HypertuneProvider extends HypertuneProviderBase implements Provider { readonly metadata = { name: HypertuneProvider.name, } as const; events = new OpenFeatureEventEmitter(); hooks = []; readonly runsOn = "server"; protected postCreate(): void { this._source.addUpdateListener((_, { becameReady }) => { if (!becameReady) { this.events.emit(ProviderEvents.ConfigurationChanged); } }); } resolveBooleanEvaluation( flagKey: string, defaultValue: boolean, context?: EvaluationContext ): Promise<ResolutionDetails<boolean>> { return this.resolveValueAsync(flagKey, defaultValue, context, "boolean"); } resolveStringEvaluation( flagKey: string, defaultValue: string, context?: EvaluationContext ): Promise<ResolutionDetails<string>> { return this.resolveValueAsync(flagKey, defaultValue, context, "string"); } resolveNumberEvaluation( flagKey: string, defaultValue: number, context?: EvaluationContext ): Promise<ResolutionDetails<number>> { return this.resolveValueAsync(flagKey, defaultValue, context, "number"); } resolveObjectEvaluation<U extends JsonValue>( flagKey: string, defaultValue: U, context?: EvaluationContext ): Promise<ResolutionDetails<U>> { return this.resolveValueAsync(flagKey, defaultValue, context, "any"); } private resolveValueAsync<T>( flagKey: string, defaultValue: T, context: EvaluationContext | undefined, expectedValueType: "boolean" | "string" | "number" | "any" ): Promise<ResolutionDetails<T>> { return Promise.resolve( this.resolveValue(flagKey, defaultValue, context, expectedValueType) ); } }