@openfeature/web-sdk 0.0.2-experimental → 0.2.0-experimental
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +446 -34
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +456 -34
- package/dist/esm/index.js.map +4 -4
- package/dist/types.d.ts +52 -37
- package/package.json +2 -2
package/dist/esm/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../shared/src/types.ts", "../../../shared/src/errors/open-feature-error-abstract.ts", "../../../shared/src/errors/general-error.ts", "../../../shared/src/errors/flag-not-found-error.ts", "../../../shared/src/errors/parse-error.ts", "../../../shared/src/errors/type-mismatch-error.ts", "../../../shared/src/errors/targeting-key-missing-error.ts", "../../../shared/src/errors/invalid-context-error.ts", "../../../shared/src/logger.ts", "../../../shared/src/no-op-transaction-context-propagator.ts", "../../../shared/src/open-feature.ts", "../../src/
|
|
4
|
-
"sourcesContent": ["export type PrimitiveValue = null | boolean | string | number;\n\nexport enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n \n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n \n /**\n * The provider is transitioning to a state of unavailability.\n */\n Shutdown = 'PROVIDER_SHUTDOWN',\n};\n\nexport interface EventData {\n flagKeysChanged?: string[],\n changeMetadata?: { [key: string]: boolean | string } // similar to flag metadata\n}\n\nexport enum ApiEvents {\n ProviderChanged = 'providerChanged',\n}\n\nexport interface Eventing {\n addHandler(notificationType: string, handler: Handler): void\n}\n\nexport type EventContext = {\n notificationType: string;\n [key: string]: unknown;\n}\n\nexport type Handler = (eventContext?: EventContext) => void\n\nexport type EventCallbackMessage = (eventContext: EventContext) => void\n\nexport type JsonObject = { [key: string]: JsonValue };\n\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type EvaluationContextValue =\n | PrimitiveValue\n | Date\n | { [key: string]: EvaluationContextValue }\n | EvaluationContextValue[];\n\n/**\n * A container for arbitrary contextual data that can be used as a basis for dynamic evaluation\n */\nexport type EvaluationContext = {\n /**\n * A string uniquely identifying the subject (end-user, or client service) of a flag evaluation.\n * Providers may require this field for fractional flag evaluation, rules, or overrides targeting specific users.\n * Such providers may behave unpredictably if a targeting key is not specified at flag resolution.\n */\n targetingKey?: string;\n} & Record<string, EvaluationContextValue>;\n\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\n\nexport interface Logger {\n error(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n info(...args: unknown[]): void;\n debug(...args: unknown[]): void;\n}\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * \tThe resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n \n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n \n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n} & ResolutionDetails<T>;\n\nexport interface ManageContext<T> {\n /**\n * Access the evaluation context set on the receiver.\n *\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n\n /**\n * Sets evaluation context that will be used during flag evaluations\n * on this receiver.\n *\n * @template T The type of the receiver\n * @param {EvaluationContext} context Evaluation context\n * @returns {T} The receiver (this object)\n */\n setContext(context: EvaluationContext): T;\n}\n\nexport interface ManageLogger<T> {\n /**\n * Sets a logger on this receiver. This logger supersedes to the global logger\n * and is passed to various components in the SDK.\n * The logger configured on the global API object will be used for all evaluations,\n * unless overridden in a particular client.\n *\n * @template T The type of the receiver\n * @param {Logger} logger The logger to be used\n * @returns {T} The receiver (this object)\n */\n setLogger(logger: Logger): T;\n}\n\nexport type HookHints = Readonly<Record<string, unknown>>;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface Metadata {}\n\nexport interface ClientMetadata extends Metadata {\n readonly version?: string;\n readonly name?: string;\n}\n\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface HookContext<T extends FlagValue = FlagValue> {\n readonly flagKey: string;\n readonly defaultValue: T;\n readonly flagValueType: FlagValueType;\n readonly context: Readonly<EvaluationContext>;\n readonly clientMetadata: ClientMetadata;\n readonly providerMetadata: ProviderMetadata;\n readonly logger: Logger;\n}\n\nexport interface BeforeHookContext extends HookContext {\n context: EvaluationContext;\n}\n\n/**\n * Transaction context is a mechanism for adding transaction specific context that\n * is merged with evaluation context prior to flag evaluation. Examples of potential\n * transaction specific context include: a user id, user agent, or request path.\n */\nexport type TransactionContext = EvaluationContext;\n\nexport interface ManageTransactionContextPropagator<T> extends TransactionContextPropagator {\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Sets a transaction context propagator on this receiver. The transaction context\n * propagator is responsible for persisting context for the duration of a single\n * transaction.\n *\n * @experimental\n * @template T The type of the receiver\n * @param {TransactionContextPropagator} transactionContextPropagator The context propagator to be used\n * @returns {T} The receiver (this object)\n */\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): T;\n}\n\nexport interface TransactionContextPropagator {\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Returns the currently defined transaction context using the registered transaction\n * context propagator.\n *\n * @experimental\n * @returns {TransactionContext} The current transaction context\n */\n getTransactionContext(): TransactionContext;\n\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Sets the transaction context using the registered transaction context propagator.\n *\n * @experimental\n * @template R The return value of the callback\n * @param {TransactionContext} transactionContext The transaction specific context\n * @param {(...args: unknown[]) => R} callback Callback function used to set the transaction context on the stack\n * @param {...unknown[]} args Optional arguments that are passed to the callback function\n */\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n // TODO: move close from client Provider here once we want it in server\n}", "import { ErrorCode } from '../types';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Logger } from './types';\n\nconst LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n info(): void {}\n debug(): void {}\n}\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { EvaluationContext, TransactionContextPropagator } from './types';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "import { DefaultLogger } from './logger';\nimport { NOOP_TRANSACTION_CONTEXT_PROPAGATOR } from './no-op-transaction-context-propagator';\nimport { EvaluationContext, Logger, TransactionContext, TransactionContextPropagator } from './types';\n\nexport abstract class OpenFeatureCommonAPI {\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n // TODO: move close from client to new abstract here when we want close in server.\n abstract clearHooks(): this\n abstract setLogger(logger: Logger): this;\n\n getContext(): EvaluationContext {\n return this._context;\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}", "import { ResolutionDetails, JsonValue } from '@openfeature/shared';\nimport { Provider } from './types';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import { NOOP_PROVIDER } from './no-op-provider';\nimport { Logger, OpenFeatureCommonAPI, SafeLogger } from '@openfeature/shared';\nimport { ApiEvents, EvaluationContext, FlagValue, ProviderMetadata } from '@openfeature/shared';\nimport { OpenFeatureClient } from './client';\nimport { Client, Hook, Provider } from './types';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/js.api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI {\n\n protected _hooks: Hook[] = [];\n protected _provider: Provider = NOOP_PROVIDER;\n\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n *\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Get metadata about registered provider.\n *\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._provider.metadata;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n await this._provider?.onContextChange?.(oldContext, context);\n }\n\n setProvider(provider: Provider): OpenFeatureCommonAPI {\n // ignore no-ops\n if (this._provider !== provider) {\n const oldProvider = this._provider;\n this._provider = provider;\n window.dispatchEvent(new CustomEvent(ApiEvents.ProviderChanged));\n oldProvider?.onClose?.();\n }\n return this;\n }\n\n async close(): Promise<void> {\n await this?._provider?.onClose?.();\n }\n\n getClient(name?: string, version?: string, context?: EvaluationContext): Client {\n return new OpenFeatureClient(\n () => this._provider,\n () => this._logger,\n { name, version },\n context\n );\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n *\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { OpenFeatureError } from '@openfeature/shared';\nimport { SafeLogger } from '@openfeature/shared';\nimport {\n ApiEvents,\n ClientMetadata,\n ErrorCode, EvaluationContext,\n EvaluationDetails,\n FlagValue,\n FlagValueType,\n Handler,\n HookContext,\n JsonValue,\n Logger,\n ProviderEvents,\n ResolutionDetails,\n StandardResolutionReasons\n} from '@openfeature/shared';\nimport { OpenFeature } from './open-feature';\nimport { Client, EventProvider, FlagEvaluationOptions, Hook, Provider } from './types';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\ntype HandlerWrapper = {\n eventType: string;\n handler: Handler;\n}\n\nexport class OpenFeatureClient implements Client {\n readonly metadata: ClientMetadata;\n private _context: EvaluationContext;\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n private _handlerWrappers: HandlerWrapper[] = [];\n\n constructor(\n // we always want the client to use the current provider,\n // so pass a function to always access the currently registered one.\n private readonly providerAccessor: () => Provider & Partial<EventProvider>,\n private readonly globalLogger: () => Logger,\n options: OpenFeatureClientOptions,\n context: EvaluationContext = {}\n ) {\n this.metadata = {\n name: options.name,\n version: options.version,\n } as const;\n this._context = context;\n\n this.attachListeners();\n window.dispatchEvent(new CustomEvent(ApiEvents.ProviderChanged));\n }\n\n addHandler(eventType: ProviderEvents, handler: Handler): void {\n this._handlerWrappers.push({eventType, handler});\n if (eventType === ProviderEvents.Ready && this.providerAccessor().ready) {\n // run immediately, we're ready.\n handler();\n }\n }\n\n setLogger(logger: Logger): OpenFeatureClient {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook<FlagValue>[]): OpenFeatureClient {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): OpenFeatureClient {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, context, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(\n flagKey,\n this._provider.resolveBooleanEvaluation,\n defaultValue,\n 'boolean',\n context,\n options\n );\n }\n\n getStringValue<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): T {\n return this.getStringDetails<T>(flagKey, defaultValue, context, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n context,\n options\n );\n }\n\n getNumberValue<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): T {\n return this.getNumberDetails(flagKey, defaultValue, context, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n context,\n options\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, context, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', context, options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (\n flagKey: string,\n defaultValue: T,\n context: EvaluationContext,\n logger: Logger\n ) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n invocationContext: EvaluationContext = {},\n options: FlagEvaluationOptions = {}\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n // merge global and client contexts\n const mergedContext = {\n ...OpenFeature.getContext(),\n ...OpenFeature.getTransactionContext(),\n ...this._context,\n ...invocationContext,\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context: mergedContext,\n logger: this._logger,\n };\n\n try {\n const frozenContext = this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, frozenContext, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider & Partial<EventProvider> {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n\n private attachListeners() {\n // iterate over the event types\n Object.values(ProviderEvents)\n .forEach(eventType => window.addEventListener(eventType, () => {\n // on each event type, fire the associated handlers\n this._handlerWrappers\n .filter(wrapper => wrapper.eventType === eventType)\n .forEach(wrapper => wrapper.handler());\n }));\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ProviderEvents", "ApiEvents", "ErrorCode", "err"]
|
|
3
|
+
"sources": ["../../../../node_modules/events/events.js", "../../../shared/src/types.ts", "../../../shared/src/errors/open-feature-error-abstract.ts", "../../../shared/src/errors/general-error.ts", "../../../shared/src/errors/flag-not-found-error.ts", "../../../shared/src/errors/parse-error.ts", "../../../shared/src/errors/type-mismatch-error.ts", "../../../shared/src/errors/targeting-key-missing-error.ts", "../../../shared/src/errors/invalid-context-error.ts", "../../../shared/src/logger.ts", "../../../shared/src/no-op-transaction-context-propagator.ts", "../../../shared/src/open-feature.ts", "../../src/open-feature.ts", "../../src/no-op-provider.ts", "../../src/client.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "export type PrimitiveValue = null | boolean | string | number;\n\nexport enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n \n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n \n /**\n * The provider is transitioning to a state of unavailability.\n */\n Shutdown = 'PROVIDER_SHUTDOWN',\n};\n\nexport interface EventData {\n flagKeysChanged?: string[],\n changeMetadata?: { [key: string]: boolean | string } // similar to flag metadata\n}\n\nexport enum ApiEvents {\n ProviderChanged = 'providerChanged',\n}\n\nexport interface Eventing {\n addHandler(notificationType: string, handler: Handler): void\n}\n\nexport type EventContext = {\n notificationType: string;\n [key: string]: unknown;\n}\n\nexport type Handler = (eventContext?: EventContext) => void\n\nexport type EventCallbackMessage = (eventContext: EventContext) => void\n\nexport type JsonObject = { [key: string]: JsonValue };\n\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type EvaluationContextValue =\n | PrimitiveValue\n | Date\n | { [key: string]: EvaluationContextValue }\n | EvaluationContextValue[];\n\n/**\n * A container for arbitrary contextual data that can be used as a basis for dynamic evaluation\n */\nexport type EvaluationContext = {\n /**\n * A string uniquely identifying the subject (end-user, or client service) of a flag evaluation.\n * Providers may require this field for fractional flag evaluation, rules, or overrides targeting specific users.\n * Such providers may behave unpredictably if a targeting key is not specified at flag resolution.\n */\n targetingKey?: string;\n} & Record<string, EvaluationContextValue>;\n\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\n\nexport interface Logger {\n error(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n info(...args: unknown[]): void;\n debug(...args: unknown[]): void;\n}\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * \tThe resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n \n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n \n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n} & ResolutionDetails<T>;\n\nexport interface ManageContext<T> {\n /**\n * Access the evaluation context set on the receiver.\n *\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n\n /**\n * Sets evaluation context that will be used during flag evaluations\n * on this receiver.\n *\n * @template T The type of the receiver\n * @param {EvaluationContext} context Evaluation context\n * @returns {T} The receiver (this object)\n */\n setContext(context: EvaluationContext): T;\n}\n\nexport interface ManageLogger<T> {\n /**\n * Sets a logger on this receiver. This logger supersedes to the global logger\n * and is passed to various components in the SDK.\n * The logger configured on the global API object will be used for all evaluations,\n * unless overridden in a particular client.\n *\n * @template T The type of the receiver\n * @param {Logger} logger The logger to be used\n * @returns {T} The receiver (this object)\n */\n setLogger(logger: Logger): T;\n}\n\nexport type HookHints = Readonly<Record<string, unknown>>;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface Metadata {}\n\nexport interface ClientMetadata extends Metadata {\n readonly version?: string;\n readonly name?: string;\n}\n\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface HookContext<T extends FlagValue = FlagValue> {\n readonly flagKey: string;\n readonly defaultValue: T;\n readonly flagValueType: FlagValueType;\n readonly context: Readonly<EvaluationContext>;\n readonly clientMetadata: ClientMetadata;\n readonly providerMetadata: ProviderMetadata;\n readonly logger: Logger;\n}\n\nexport interface BeforeHookContext extends HookContext {\n context: EvaluationContext;\n}\n\n/**\n * Transaction context is a mechanism for adding transaction specific context that\n * is merged with evaluation context prior to flag evaluation. Examples of potential\n * transaction specific context include: a user id, user agent, or request path.\n */\nexport type TransactionContext = EvaluationContext;\n\nexport interface ManageTransactionContextPropagator<T> extends TransactionContextPropagator {\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Sets a transaction context propagator on this receiver. The transaction context\n * propagator is responsible for persisting context for the duration of a single\n * transaction.\n *\n * @experimental\n * @template T The type of the receiver\n * @param {TransactionContextPropagator} transactionContextPropagator The context propagator to be used\n * @returns {T} The receiver (this object)\n */\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): T;\n}\n\nexport interface TransactionContextPropagator {\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Returns the currently defined transaction context using the registered transaction\n * context propagator.\n *\n * @experimental\n * @returns {TransactionContext} The current transaction context\n */\n getTransactionContext(): TransactionContext;\n\n /**\n * EXPERIMENTAL: Transaction context propagation is experimental and subject to change.\n * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).\n *\n * Sets the transaction context using the registered transaction context propagator.\n *\n * @experimental\n * @template R The return value of the callback\n * @param {TransactionContext} transactionContext The transaction specific context\n * @param {(...args: unknown[]) => R} callback Callback function used to set the transaction context on the stack\n * @param {...unknown[]} args Optional arguments that are passed to the callback function\n */\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n // TODO: move close from client Provider here once we want it in server\n}", "import { ErrorCode } from '../types';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { ErrorCode } from '../types';\nimport { OpenFeatureError } from './open-feature-error-abstract';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Logger } from './types';\n\nconst LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n info(): void {}\n debug(): void {}\n}\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { EvaluationContext, TransactionContextPropagator } from './types';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "import { DefaultLogger } from './logger';\nimport { NOOP_TRANSACTION_CONTEXT_PROPAGATOR } from './no-op-transaction-context-propagator';\nimport { EvaluationContext, Logger, TransactionContext, TransactionContextPropagator } from './types';\n\nexport abstract class OpenFeatureCommonAPI {\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n // TODO: move close from client to new abstract here when we want close in server.\n abstract clearHooks(): this\n abstract setLogger(logger: Logger): this;\n\n getContext(): EvaluationContext {\n return this._context;\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}", "import { ApiEvents, EvaluationContext, FlagValue, Logger, OpenFeatureCommonAPI, ProviderEvents, ProviderMetadata, SafeLogger } from '@openfeature/shared';\nimport { EventEmitter } from 'events';\nimport { OpenFeatureClient } from './client';\nimport { NOOP_PROVIDER } from './no-op-provider';\nimport { Client, Hook, Provider } from './types';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/js.api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI {\n\n private _apiEvents = new EventEmitter();\n private _providerReady = false;\n protected _hooks: Hook[] = [];\n protected _provider: Provider = NOOP_PROVIDER;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n *\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Get metadata about registered provider.\n *\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._provider.metadata;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n await this._provider?.onContextChange?.(oldContext, context);\n }\n\n setProvider(provider: Provider): OpenFeatureCommonAPI {\n // ignore no-ops\n if (this._provider !== provider) {\n const oldProvider = this._provider;\n this._provider = provider;\n this._providerReady = false;\n\n if (!this._provider.events) {\n this._provider.events = new EventEmitter();\n }\n\n if (typeof this._provider?.initialize === 'function') {\n this._provider.initialize?.(this._context)?.then(() => {\n this._providerReady = true;\n this._provider.events?.emit(ProviderEvents.Ready);\n })?.catch(() => {\n this._provider.events?.emit(ProviderEvents.Error);\n });\n } else {\n this._providerReady = true;\n this._provider.events?.emit(ProviderEvents.Ready);\n }\n this._apiEvents.emit(ApiEvents.ProviderChanged);\n oldProvider?.onClose?.();\n }\n return this;\n }\n\n async close(): Promise<void> {\n await this?._provider?.onClose?.();\n }\n\n getClient(name?: string, version?: string): Client {\n return new OpenFeatureClient(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class. \n () => this._provider,\n () => this._providerReady,\n () => this._apiEvents,\n () => this._logger,\n { name, version },\n );\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n *\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { ResolutionDetails, JsonValue } from '@openfeature/shared';\nimport { Provider } from './types';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import { EvaluationContext, OpenFeatureError } from '@openfeature/shared';\nimport { SafeLogger } from '@openfeature/shared';\nimport {\n ApiEvents,\n ClientMetadata,\n ErrorCode,\n EvaluationDetails,\n FlagValue,\n FlagValueType,\n Handler,\n HookContext,\n JsonValue,\n Logger,\n ProviderEvents,\n ResolutionDetails,\n StandardResolutionReasons\n} from '@openfeature/shared';\nimport { EventEmitter } from 'events';\nimport { OpenFeature } from './open-feature';\nimport { Client, FlagEvaluationOptions, Hook, Provider } from './types';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\ntype HandlerWrapper = {\n eventType: string;\n handler: Handler;\n}\n\nexport class OpenFeatureClient implements Client {\n readonly metadata: ClientMetadata;\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n private _handlerWrappers: HandlerWrapper[] = [];\n\n constructor(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class. \n private readonly providerAccessor: () => Provider,\n private readonly providerReady: () => boolean,\n apiEvents: () => EventEmitter,\n private readonly globalLogger: () => Logger,\n options: OpenFeatureClientOptions,\n ) {\n this.metadata = {\n name: options.name,\n version: options.version,\n } as const;\n\n this.attachListeners();\n apiEvents().on(ApiEvents.ProviderChanged, () => {\n this.attachListeners(); \n });\n }\n\n addHandler(eventType: ProviderEvents, handler: Handler): void {\n this._handlerWrappers.push({eventType, handler});\n if (eventType === ProviderEvents.Ready && this.providerReady()) {\n // run immediately, we're ready.\n handler();\n }\n }\n\n setLogger(logger: Logger): OpenFeatureClient {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook<FlagValue>[]): OpenFeatureClient {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): OpenFeatureClient {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions\n ): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(\n flagKey,\n this._provider.resolveBooleanEvaluation,\n defaultValue,\n 'boolean',\n options\n );\n }\n\n getStringValue<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): T {\n return this.getStringDetails<T>(flagKey, defaultValue, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n options\n );\n }\n\n getNumberValue<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): T {\n return this.getNumberDetails(flagKey, defaultValue, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n options\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (\n flagKey: string,\n defaultValue: T,\n context: EvaluationContext,\n logger: Logger\n ) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n options: FlagEvaluationOptions = {}\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n const context = {\n ...OpenFeature.getContext(),\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context,\n logger: this._logger,\n };\n\n try {\n this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n\n private attachListeners() {\n // iterate over the event types\n Object.values(ProviderEvents)\n .forEach(eventType => this._provider.events?.on(eventType, () => {\n // on each event type, fire the associated handlers\n this._handlerWrappers\n .filter(wrapper => wrapper.eventType === eventType)\n .forEach(wrapper => wrapper.handler());\n }));\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "ProviderEvents", "ApiEvents", "ErrorCode", "_a", "err"]
|
|
7
7
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import EventEmitter, { EventEmitter as EventEmitter$1 } from 'events';
|
|
2
|
+
|
|
1
3
|
type PrimitiveValue = null | boolean | string | number;
|
|
2
4
|
declare enum ProviderEvents {
|
|
3
5
|
/**
|
|
@@ -333,8 +335,30 @@ interface Provider extends CommonProvider {
|
|
|
333
335
|
* provider. Provider hooks are not configured or controlled by the application author.
|
|
334
336
|
*/
|
|
335
337
|
readonly hooks?: Hook[];
|
|
338
|
+
/**
|
|
339
|
+
* An event emitter for ProviderEvents.
|
|
340
|
+
* @see ProviderEvents
|
|
341
|
+
*/
|
|
342
|
+
events?: EventEmitter;
|
|
343
|
+
/**
|
|
344
|
+
* A handler function to reconcile changes when the static context.
|
|
345
|
+
* Called by the SDK when the context is changed.
|
|
346
|
+
*
|
|
347
|
+
* @param oldContext
|
|
348
|
+
* @param newContext
|
|
349
|
+
*/
|
|
336
350
|
onContextChange?(oldContext: EvaluationContext, newContext: EvaluationContext): Promise<void>;
|
|
337
351
|
onClose?(): Promise<void>;
|
|
352
|
+
/**
|
|
353
|
+
* A handler function used to setup the provider.
|
|
354
|
+
* Called by the SDK after the provider is set.
|
|
355
|
+
* When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.
|
|
356
|
+
* If the returned promise rejects, the SDK fires the ProviderEvents.Error event.
|
|
357
|
+
* Use this function to perform any context-dependent setup within the provider.
|
|
358
|
+
*
|
|
359
|
+
* @param context
|
|
360
|
+
*/
|
|
361
|
+
initialize?(context: EvaluationContext): Promise<void>;
|
|
338
362
|
/**
|
|
339
363
|
* Resolve a boolean flag and its evaluation details.
|
|
340
364
|
*/
|
|
@@ -423,93 +447,85 @@ interface Features {
|
|
|
423
447
|
*
|
|
424
448
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
425
449
|
* @param {boolean} defaultValue The value returned if an error occurs
|
|
426
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
427
450
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
428
451
|
* @returns {boolean} Flag evaluation response
|
|
429
452
|
*/
|
|
430
|
-
getBooleanValue(flagKey: string, defaultValue: boolean,
|
|
453
|
+
getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean;
|
|
431
454
|
/**
|
|
432
455
|
* Performs a flag evaluation that a returns an evaluation details object.
|
|
433
456
|
*
|
|
434
457
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
435
458
|
* @param {boolean} defaultValue The value returned if an error occurs
|
|
436
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
437
459
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
438
460
|
* @returns {EvaluationDetails<boolean>} Flag evaluation details response
|
|
439
461
|
*/
|
|
440
|
-
getBooleanDetails(flagKey: string, defaultValue: boolean,
|
|
462
|
+
getBooleanDetails(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): EvaluationDetails<boolean>;
|
|
441
463
|
/**
|
|
442
464
|
* Performs a flag evaluation that returns a string.
|
|
443
465
|
*
|
|
444
466
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
445
467
|
* @template {string} T A optional generic argument constraining the string
|
|
446
468
|
* @param {T} defaultValue The value returned if an error occurs
|
|
447
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
448
469
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
449
470
|
* @returns {T} Flag evaluation response
|
|
450
471
|
*/
|
|
451
|
-
getStringValue(flagKey: string, defaultValue: string,
|
|
452
|
-
getStringValue<T extends string = string>(flagKey: string, defaultValue: T,
|
|
472
|
+
getStringValue(flagKey: string, defaultValue: string, options?: FlagEvaluationOptions): string;
|
|
473
|
+
getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
453
474
|
/**
|
|
454
475
|
* Performs a flag evaluation that a returns an evaluation details object.
|
|
455
476
|
*
|
|
456
477
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
457
478
|
* @template {string} T A optional generic argument constraining the string
|
|
458
479
|
* @param {T} defaultValue The value returned if an error occurs
|
|
459
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
460
480
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
461
481
|
* @returns {EvaluationDetails<T>} Flag evaluation details response
|
|
462
482
|
*/
|
|
463
|
-
getStringDetails(flagKey: string, defaultValue: string,
|
|
464
|
-
getStringDetails<T extends string = string>(flagKey: string, defaultValue: T,
|
|
483
|
+
getStringDetails(flagKey: string, defaultValue: string, options?: FlagEvaluationOptions): EvaluationDetails<string>;
|
|
484
|
+
getStringDetails<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
465
485
|
/**
|
|
466
486
|
* Performs a flag evaluation that returns a number.
|
|
467
487
|
*
|
|
468
488
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
469
489
|
* @template {number} T A optional generic argument constraining the number
|
|
470
490
|
* @param {T} defaultValue The value returned if an error occurs
|
|
471
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
472
491
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
473
492
|
* @returns {T} Flag evaluation response
|
|
474
493
|
*/
|
|
475
|
-
getNumberValue(flagKey: string, defaultValue: number,
|
|
476
|
-
getNumberValue<T extends number = number>(flagKey: string, defaultValue: T,
|
|
494
|
+
getNumberValue(flagKey: string, defaultValue: number, options?: FlagEvaluationOptions): number;
|
|
495
|
+
getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
477
496
|
/**
|
|
478
497
|
* Performs a flag evaluation that a returns an evaluation details object.
|
|
479
498
|
*
|
|
480
499
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
481
500
|
* @template {number} T A optional generic argument constraining the number
|
|
482
501
|
* @param {T} defaultValue The value returned if an error occurs
|
|
483
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
484
502
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
485
503
|
* @returns {Promise<EvaluationDetails<T>>} Flag evaluation details response
|
|
486
504
|
*/
|
|
487
|
-
getNumberDetails(flagKey: string, defaultValue: number,
|
|
488
|
-
getNumberDetails<T extends number = number>(flagKey: string, defaultValue: T,
|
|
505
|
+
getNumberDetails(flagKey: string, defaultValue: number, options?: FlagEvaluationOptions): EvaluationDetails<number>;
|
|
506
|
+
getNumberDetails<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
489
507
|
/**
|
|
490
508
|
* Performs a flag evaluation that returns an object.
|
|
491
509
|
*
|
|
492
510
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
493
511
|
* @template {JsonValue} T A optional generic argument describing the structure
|
|
494
512
|
* @param {T} defaultValue The value returned if an error occurs
|
|
495
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
496
513
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
497
514
|
* @returns {Promise<T>} Flag evaluation response
|
|
498
515
|
*/
|
|
499
|
-
getObjectValue(flagKey: string, defaultValue: JsonValue,
|
|
500
|
-
getObjectValue<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T,
|
|
516
|
+
getObjectValue(flagKey: string, defaultValue: JsonValue, options?: FlagEvaluationOptions): JsonValue;
|
|
517
|
+
getObjectValue<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
501
518
|
/**
|
|
502
519
|
* Performs a flag evaluation that a returns an evaluation details object.
|
|
503
520
|
*
|
|
504
521
|
* @param {string} flagKey The flag key uniquely identifies a particular flag
|
|
505
522
|
* @template {JsonValue} T A optional generic argument describing the structure
|
|
506
523
|
* @param {T} defaultValue The value returned if an error occurs
|
|
507
|
-
* @param {EvaluationContext} context The evaluation context used on an individual flag evaluation
|
|
508
524
|
* @param {FlagEvaluationOptions} options Additional flag evaluation options
|
|
509
525
|
* @returns {Promise<EvaluationDetails<T>>} Flag evaluation details response
|
|
510
526
|
*/
|
|
511
|
-
getObjectDetails(flagKey: string, defaultValue: JsonValue,
|
|
512
|
-
getObjectDetails<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T,
|
|
527
|
+
getObjectDetails(flagKey: string, defaultValue: JsonValue, options?: FlagEvaluationOptions): EvaluationDetails<JsonValue>;
|
|
528
|
+
getObjectDetails<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
513
529
|
}
|
|
514
530
|
interface Client extends EvaluationLifeCycle<Client>, Features, ManageLogger<Client>, Eventing {
|
|
515
531
|
readonly metadata: ClientMetadata;
|
|
@@ -536,9 +552,6 @@ interface GlobalApi extends EvaluationLifeCycle<GlobalApi>, ManageContext<Global
|
|
|
536
552
|
*/
|
|
537
553
|
setProvider(provider: Provider): GlobalApi;
|
|
538
554
|
}
|
|
539
|
-
interface EventProvider {
|
|
540
|
-
readonly ready: boolean;
|
|
541
|
-
}
|
|
542
555
|
|
|
543
556
|
type OpenFeatureClientOptions = {
|
|
544
557
|
name?: string;
|
|
@@ -546,26 +559,26 @@ type OpenFeatureClientOptions = {
|
|
|
546
559
|
};
|
|
547
560
|
declare class OpenFeatureClient implements Client {
|
|
548
561
|
private readonly providerAccessor;
|
|
562
|
+
private readonly providerReady;
|
|
549
563
|
private readonly globalLogger;
|
|
550
564
|
readonly metadata: ClientMetadata;
|
|
551
|
-
private _context;
|
|
552
565
|
private _hooks;
|
|
553
566
|
private _clientLogger?;
|
|
554
567
|
private _handlerWrappers;
|
|
555
|
-
constructor(providerAccessor: () => Provider
|
|
568
|
+
constructor(providerAccessor: () => Provider, providerReady: () => boolean, apiEvents: () => EventEmitter$1, globalLogger: () => Logger, options: OpenFeatureClientOptions);
|
|
556
569
|
addHandler(eventType: ProviderEvents, handler: Handler): void;
|
|
557
570
|
setLogger(logger: Logger): OpenFeatureClient;
|
|
558
571
|
addHooks(...hooks: Hook<FlagValue>[]): OpenFeatureClient;
|
|
559
572
|
getHooks(): Hook<FlagValue>[];
|
|
560
573
|
clearHooks(): OpenFeatureClient;
|
|
561
|
-
getBooleanValue(flagKey: string, defaultValue: boolean,
|
|
562
|
-
getBooleanDetails(flagKey: string, defaultValue: boolean,
|
|
563
|
-
getStringValue<T extends string = string>(flagKey: string, defaultValue: T,
|
|
564
|
-
getStringDetails<T extends string = string>(flagKey: string, defaultValue: T,
|
|
565
|
-
getNumberValue<T extends number = number>(flagKey: string, defaultValue: T,
|
|
566
|
-
getNumberDetails<T extends number = number>(flagKey: string, defaultValue: T,
|
|
567
|
-
getObjectValue<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T,
|
|
568
|
-
getObjectDetails<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T,
|
|
574
|
+
getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean;
|
|
575
|
+
getBooleanDetails(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): EvaluationDetails<boolean>;
|
|
576
|
+
getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
577
|
+
getStringDetails<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
578
|
+
getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
579
|
+
getNumberDetails<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
580
|
+
getObjectValue<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
|
|
581
|
+
getObjectDetails<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
|
|
569
582
|
private evaluate;
|
|
570
583
|
private beforeHooks;
|
|
571
584
|
private afterHooks;
|
|
@@ -592,6 +605,8 @@ declare class NoopFeatureProvider implements Provider {
|
|
|
592
605
|
declare const NOOP_PROVIDER: NoopFeatureProvider;
|
|
593
606
|
|
|
594
607
|
declare class OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
608
|
+
private _apiEvents;
|
|
609
|
+
private _providerReady;
|
|
595
610
|
protected _hooks: Hook[];
|
|
596
611
|
protected _provider: Provider;
|
|
597
612
|
private constructor();
|
|
@@ -615,7 +630,7 @@ declare class OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
615
630
|
setContext(context: EvaluationContext): Promise<void>;
|
|
616
631
|
setProvider(provider: Provider): OpenFeatureCommonAPI;
|
|
617
632
|
close(): Promise<void>;
|
|
618
|
-
getClient(name?: string, version?: string
|
|
633
|
+
getClient(name?: string, version?: string): Client;
|
|
619
634
|
}
|
|
620
635
|
/**
|
|
621
636
|
* A singleton instance of the OpenFeature API.
|
|
@@ -624,4 +639,4 @@ declare class OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
624
639
|
*/
|
|
625
640
|
declare const OpenFeature: OpenFeatureAPI;
|
|
626
641
|
|
|
627
|
-
export { ApiEvents, BeforeHookContext, Client, ClientMetadata, CommonProvider, DefaultLogger, ErrorCode, EvaluationContext, EvaluationContextValue, EvaluationDetails, EventCallbackMessage, EventContext, EventData,
|
|
642
|
+
export { ApiEvents, BeforeHookContext, Client, ClientMetadata, CommonProvider, DefaultLogger, ErrorCode, EvaluationContext, EvaluationContextValue, EvaluationDetails, EventCallbackMessage, EventContext, EventData, Eventing, Features, FlagEvaluationOptions, FlagNotFoundError, FlagValue, FlagValueType, GeneralError, GlobalApi, Handler, Hook, HookContext, HookHints, InvalidContextError, JsonArray, JsonObject, JsonValue, Logger, ManageContext, ManageLogger, ManageTransactionContextPropagator, NOOP_PROVIDER, NOOP_TRANSACTION_CONTEXT_PROPAGATOR, OpenFeature, OpenFeatureAPI, OpenFeatureClient, OpenFeatureCommonAPI, OpenFeatureError, ParseError, PrimitiveValue, Provider, ProviderEvents, ProviderMetadata, ResolutionDetails, ResolutionReason, SafeLogger, StandardResolutionReasons, TargetingKeyMissingError, TransactionContext, TransactionContextPropagator, TypeMismatchError };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openfeature/web-sdk",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0-experimental",
|
|
4
4
|
"description": "OpenFeature SDK for Web",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"files": [
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"postbuild": "shx cp ./../../package.esm.json ./dist/esm/package.json",
|
|
25
25
|
"current-version": "echo $npm_package_version",
|
|
26
26
|
"prepack": "shx cp ./../../LICENSE ./LICENSE",
|
|
27
|
-
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public
|
|
27
|
+
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
|
|
28
28
|
"docs": "typedoc"
|
|
29
29
|
},
|
|
30
30
|
"repository": {
|