@openfeature/web-sdk 0.3.7-experimental → 0.3.8-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/types.d.ts CHANGED
@@ -20,13 +20,28 @@ declare enum ProviderEvents {
20
20
  type EventMetadata = {
21
21
  [key: string]: string | boolean | number;
22
22
  };
23
- type EventDetails = {
23
+ type CommonEventDetails = {
24
24
  clientName?: string;
25
+ };
26
+ type CommonEventProps = {
25
27
  message?: string;
26
- flagsChanged?: string[];
27
28
  metadata?: EventMetadata;
28
29
  };
29
- type EventHandler = (eventDetails?: EventDetails) => Promise<unknown> | unknown;
30
+ type ReadyEvent = CommonEventProps;
31
+ type ErrorEvent = CommonEventProps;
32
+ type StaleEvent = CommonEventProps;
33
+ type ConfigChangeEvent = CommonEventProps & {
34
+ flagsChanged?: string[];
35
+ };
36
+ type EventMap = {
37
+ [ProviderEvents.Ready]: ReadyEvent;
38
+ [ProviderEvents.Error]: ErrorEvent;
39
+ [ProviderEvents.Stale]: StaleEvent;
40
+ [ProviderEvents.ConfigurationChanged]: ConfigChangeEvent;
41
+ };
42
+ type EventContext<T extends ProviderEvents, U extends Record<string, unknown> = Record<string, unknown>> = EventMap[T] & U;
43
+ type EventDetails<T extends ProviderEvents> = EventContext<T> & CommonEventDetails;
44
+ type EventHandler<T extends ProviderEvents> = (eventDetails?: EventDetails<T>) => Promise<unknown> | unknown;
30
45
  interface Eventing {
31
46
  /**
32
47
  * Adds a handler for the given provider event type.
@@ -34,19 +49,19 @@ interface Eventing {
34
49
  * @param {ProviderEvents} eventType The provider event type to listen to
35
50
  * @param {EventHandler} handler The handler to run on occurrence of the event type
36
51
  */
37
- addHandler(eventType: ProviderEvents, handler: EventHandler): void;
52
+ addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
38
53
  /**
39
54
  * Removes a handler for the given provider event type.
40
55
  * @param {ProviderEvents} eventType The provider event type to remove the listener for
41
56
  * @param {EventHandler} handler The handler to remove for the provider event type
42
57
  */
43
- removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
58
+ removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
44
59
  /**
45
60
  * Gets the current handlers for the given provider event type.
46
61
  * @param {ProviderEvents} eventType The provider event type to get the current handlers for
47
62
  * @returns {EventHandler[]} The handlers currently attached to the given provider event type
48
63
  */
49
- getHandlers(eventType: ProviderEvents): EventHandler[];
64
+ getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
50
65
  }
51
66
 
52
67
  interface Logger {
@@ -87,20 +102,36 @@ declare class SafeLogger implements Logger {
87
102
  private log;
88
103
  }
89
104
 
90
- declare class OpenFeatureEventEmitter implements ManageLogger<OpenFeatureEventEmitter> {
105
+ declare abstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>> implements ManageLogger<GenericEventEmitter<AdditionalContext>> {
91
106
  private readonly globalLogger?;
92
107
  private readonly _handlers;
93
108
  private readonly eventEmitter;
94
109
  private _eventLogger?;
95
110
  constructor(globalLogger?: (() => Logger) | undefined);
96
- emit(eventType: ProviderEvents, context?: EventDetails): void;
97
- addHandler(eventType: ProviderEvents, handler: EventHandler): void;
98
- removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
111
+ emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void;
112
+ addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
113
+ removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
99
114
  removeAllHandlers(eventType?: ProviderEvents): void;
100
- getHandlers(eventType: ProviderEvents): EventHandler[];
115
+ getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
101
116
  setLogger(logger: Logger): this;
102
117
  private get _logger();
103
118
  }
119
+ /**
120
+ * The OpenFeatureEventEmitter can be used by provider developers to emit
121
+ * events at various parts of the provider lifecycle.
122
+ *
123
+ * NOTE: Ready and error events are automatically emitted by the SDK based on
124
+ * the result of the initialize method.
125
+ */
126
+ declare class OpenFeatureEventEmitter extends GenericEventEmitter {
127
+ }
128
+ /**
129
+ * The InternalEventEmitter should only be used within the SDK. It extends the
130
+ * OpenFeatureEventEmitter to include additional properties that can be included
131
+ * in the event details.
132
+ */
133
+ declare class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {
134
+ }
104
135
 
105
136
  interface Metadata {
106
137
  }
@@ -460,7 +491,7 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
460
491
  private readonly _events;
461
492
  private readonly _clientEventHandlers;
462
493
  protected _clientProviders: Map<string, P>;
463
- protected _clientEvents: Map<string | undefined, OpenFeatureEventEmitter>;
494
+ protected _clientEvents: Map<string | undefined, InternalEventEmitter>;
464
495
  addHooks(...hooks: Hook<FlagValue>[]): this;
465
496
  getHooks(): Hook<FlagValue>[];
466
497
  clearHooks(): this;
@@ -477,19 +508,19 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
477
508
  * @param {ProviderEvents} eventType The provider event type to listen to
478
509
  * @param {EventHandler} handler The handler to run on occurrence of the event type
479
510
  */
480
- addHandler(eventType: ProviderEvents, handler: EventHandler): void;
511
+ addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
481
512
  /**
482
513
  * Removes a handler for the given provider event type.
483
514
  * @param {ProviderEvents} eventType The provider event type to remove the listener for
484
515
  * @param {EventHandler} handler The handler to remove for the provider event type
485
516
  */
486
- removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
517
+ removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
487
518
  /**
488
519
  * Gets the current handlers for the given provider event type.
489
520
  * @param {ProviderEvents} eventType The provider event type to get the current handlers for
490
521
  * @returns {EventHandler[]} The handlers currently attached to the given provider event type
491
522
  */
492
- getHandlers(eventType: ProviderEvents): EventHandler[];
523
+ getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
493
524
  /**
494
525
  * Sets the default provider for flag evaluations.
495
526
  * This provider will be used by unnamed clients and named clients to which no provider is bound.
@@ -509,8 +540,9 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
509
540
  */
510
541
  setProvider(clientName: string, provider: P): this;
511
542
  protected getProviderForClient(name?: string): P;
512
- protected getAndCacheEventEmitterForClient(name?: string): OpenFeatureEventEmitter;
543
+ protected buildAndCacheEventEmitterForClient(name?: string): InternalEventEmitter;
513
544
  private getUnboundEmitters;
545
+ private getAssociatedEventEmitters;
514
546
  private transferListeners;
515
547
  close(): Promise<void>;
516
548
  private handleShutdownError;
@@ -674,13 +706,13 @@ declare class OpenFeatureClient implements Client {
674
706
  private _clientLogger?;
675
707
  constructor(providerAccessor: () => Provider, emitterAccessor: () => OpenFeatureEventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions);
676
708
  get metadata(): ClientMetadata;
677
- addHandler(eventType: ProviderEvents, handler: EventHandler): void;
678
- removeHandler(notificationType: ProviderEvents, handler: EventHandler): void;
679
- getHandlers(eventType: ProviderEvents): EventHandler[];
680
- setLogger(logger: Logger): OpenFeatureClient;
681
- addHooks(...hooks: Hook<FlagValue>[]): OpenFeatureClient;
709
+ addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
710
+ removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): void;
711
+ getHandlers(eventType: ProviderEvents): EventHandler<ProviderEvents>[];
712
+ setLogger(logger: Logger): this;
713
+ addHooks(...hooks: Hook<FlagValue>[]): this;
682
714
  getHooks(): Hook<FlagValue>[];
683
- clearHooks(): OpenFeatureClient;
715
+ clearHooks(): this;
684
716
  getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean;
685
717
  getBooleanDetails(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): EvaluationDetails<boolean>;
686
718
  getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
@@ -728,4 +760,4 @@ declare class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider> implements M
728
760
  */
729
761
  declare const OpenFeature: OpenFeatureAPI;
730
762
 
731
- export { BeforeHookContext, Client, ClientMetadata, CommonProvider, DefaultLogger, ErrorCode, EvaluationContext, EvaluationContextValue, EvaluationDetails, EvaluationLifeCycle, EventDetails, EventHandler, EventMetadata, Eventing, Features, FlagEvaluationOptions, FlagMetadata, FlagNotFoundError, FlagValue, FlagValueType, GeneralError, Hook, HookContext, HookHints, InvalidContextError, JsonArray, JsonObject, JsonValue, LOG_LEVELS, Logger, ManageContext, ManageLogger, ManageTransactionContextPropagator, Metadata, NOOP_PROVIDER, NOOP_TRANSACTION_CONTEXT_PROPAGATOR, OpenFeature, OpenFeatureAPI, OpenFeatureClient, OpenFeatureCommonAPI, OpenFeatureError, OpenFeatureEventEmitter, ParseError, PrimitiveValue, Provider, ProviderEvents, ProviderMetadata, ProviderStatus, ResolutionDetails, ResolutionReason, SafeLogger, StandardResolutionReasons, TargetingKeyMissingError, TransactionContext, TransactionContextPropagator, TypeMismatchError, isObject, isString, objectOrUndefined, stringOrUndefined };
763
+ export { BeforeHookContext, Client, ClientMetadata, CommonEventDetails, CommonProvider, ConfigChangeEvent, DefaultLogger, ErrorCode, ErrorEvent, EvaluationContext, EvaluationContextValue, EvaluationDetails, EvaluationLifeCycle, EventContext, EventDetails, EventHandler, EventMetadata, Eventing, Features, FlagEvaluationOptions, FlagMetadata, FlagNotFoundError, FlagValue, FlagValueType, GeneralError, Hook, HookContext, HookHints, InternalEventEmitter, InvalidContextError, JsonArray, JsonObject, JsonValue, LOG_LEVELS, Logger, ManageContext, ManageLogger, ManageTransactionContextPropagator, Metadata, NOOP_PROVIDER, NOOP_TRANSACTION_CONTEXT_PROPAGATOR, OpenFeature, OpenFeatureAPI, OpenFeatureClient, OpenFeatureCommonAPI, OpenFeatureError, OpenFeatureEventEmitter, ParseError, PrimitiveValue, Provider, ProviderEvents, ProviderMetadata, ProviderStatus, ReadyEvent, ResolutionDetails, ResolutionReason, SafeLogger, StaleEvent, StandardResolutionReasons, TargetingKeyMissingError, TransactionContext, TransactionContextPropagator, TypeMismatchError, isObject, isString, objectOrUndefined, stringOrUndefined };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfeature/web-sdk",
3
- "version": "0.3.7-experimental",
3
+ "version": "0.3.8-experimental",
4
4
  "description": "OpenFeature SDK for Web",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "files": [