@openfeature/web-sdk 0.4.8 → 0.4.9

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
@@ -130,7 +130,10 @@ interface ManageContext<T> {
130
130
  setContext(context: EvaluationContext): T;
131
131
  }
132
132
 
133
- declare enum ProviderEvents {
133
+ /**
134
+ * An enumeration of possible events for server-sdk providers.
135
+ */
136
+ declare enum ServerProviderEvents {
134
137
  /**
135
138
  * The provider is ready to evaluate flags.
136
139
  */
@@ -148,15 +151,46 @@ declare enum ProviderEvents {
148
151
  */
149
152
  Stale = "PROVIDER_STALE"
150
153
  }
154
+ /**
155
+ * An enumeration of possible events for web-sdk providers.
156
+ */
157
+ declare enum ClientProviderEvents {
158
+ /**
159
+ * The provider is ready to evaluate flags.
160
+ */
161
+ Ready = "PROVIDER_READY",
162
+ /**
163
+ * The provider is in an error state.
164
+ */
165
+ Error = "PROVIDER_ERROR",
166
+ /**
167
+ * The flag configuration in the source-of-truth has changed.
168
+ */
169
+ ConfigurationChanged = "PROVIDER_CONFIGURATION_CHANGED",
170
+ /**
171
+ * The context associated with the provider has changed, and the provider has reconciled it's associated state.
172
+ */
173
+ ContextChanged = "PROVIDER_CONTEXT_CHANGED",
174
+ /**
175
+ * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.
176
+ */
177
+ Stale = "PROVIDER_STALE"
178
+ }
179
+
180
+ /**
181
+ * A type representing any possible ProviderEvent (server or client side).
182
+ * If you are implementing a hook or provider, you probably want to import `ProviderEvents` from the respective SDK.
183
+ */
184
+ type AnyProviderEvent = ServerProviderEvents | ClientProviderEvents;
151
185
 
152
186
  /**
153
187
  * Returns true if the provider's status corresponds to the event.
154
188
  * If the provider's status is not defined, it matches READY.
155
- * @param {ProviderEvents} event event to match
189
+ * @param {AnyProviderEvent} event event to match
156
190
  * @param {ProviderStatus} status status of provider
157
191
  * @returns {boolean} boolean indicating if the provider status corresponds to the event.
158
192
  */
159
- declare const statusMatchesEvent: (event: ProviderEvents, status?: ProviderStatus) => boolean;
193
+ declare const statusMatchesEvent: <T extends AnyProviderEvent>(event: T, status?: ProviderStatus) => boolean;
160
194
 
161
195
  type EventMetadata = {
162
196
  [key: string]: string | boolean | number;
@@ -176,34 +210,35 @@ type ConfigChangeEvent = CommonEventProps & {
176
210
  flagsChanged?: string[];
177
211
  };
178
212
  type EventMap = {
179
- [ProviderEvents.Ready]: ReadyEvent;
180
- [ProviderEvents.Error]: ErrorEvent;
181
- [ProviderEvents.Stale]: StaleEvent;
182
- [ProviderEvents.ConfigurationChanged]: ConfigChangeEvent;
213
+ [ClientProviderEvents.Ready]: ReadyEvent;
214
+ [ClientProviderEvents.Error]: ErrorEvent;
215
+ [ClientProviderEvents.Stale]: StaleEvent;
216
+ [ClientProviderEvents.ContextChanged]: CommonEventProps;
217
+ [ClientProviderEvents.ConfigurationChanged]: ConfigChangeEvent;
183
218
  };
184
- type EventContext<T extends ProviderEvents, U extends Record<string, unknown> = Record<string, unknown>> = EventMap[T] & U;
185
- type EventDetails<T extends ProviderEvents> = EventContext<T> & CommonEventDetails;
186
- type EventHandler<T extends ProviderEvents> = (eventDetails?: EventDetails<T>) => Promise<unknown> | unknown;
219
+ type EventContext<U extends Record<string, unknown> = Record<string, unknown>> = EventMap[ClientProviderEvents] & U;
220
+ type EventDetails = EventContext & CommonEventDetails;
221
+ type EventHandler = (eventDetails?: EventDetails) => Promise<unknown> | unknown;
187
222
  interface Eventing {
188
223
  /**
189
224
  * Adds a handler for the given provider event type.
190
225
  * The handlers are called in the order they have been added.
191
- * @param {ProviderEvents} eventType The provider event type to listen to
226
+ * @param {AnyProviderEvent} eventType The provider event type to listen to
192
227
  * @param {EventHandler} handler The handler to run on occurrence of the event type
193
228
  */
194
- addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
229
+ addHandler(eventType: AnyProviderEvent, handler: EventHandler): void;
195
230
  /**
196
231
  * Removes a handler for the given provider event type.
197
- * @param {ProviderEvents} eventType The provider event type to remove the listener for
232
+ * @param {AnyProviderEvent} eventType The provider event type to remove the listener for
198
233
  * @param {EventHandler} handler The handler to remove for the provider event type
199
234
  */
200
- removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
235
+ removeHandler(eventType: AnyProviderEvent, handler: EventHandler): void;
201
236
  /**
202
237
  * Gets the current handlers for the given provider event type.
203
- * @param {ProviderEvents} eventType The provider event type to get the current handlers for
238
+ * @param {AnyProviderEvent} eventType The provider event type to get the current handlers for
204
239
  * @returns {EventHandler[]} The handlers currently attached to the given provider event type
205
240
  */
206
- getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
241
+ getHandlers(eventType: AnyProviderEvent): EventHandler[];
207
242
  }
208
243
 
209
244
  interface Logger {
@@ -248,17 +283,17 @@ declare class SafeLogger implements Logger {
248
283
  * The GenericEventEmitter should only be used within the SDK. It supports additional properties that can be included
249
284
  * in the event details.
250
285
  */
251
- declare abstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>> implements ManageLogger<GenericEventEmitter<AdditionalContext>> {
286
+ declare abstract class GenericEventEmitter<E extends AnyProviderEvent, AdditionalContext extends Record<string, unknown> = Record<string, unknown>> implements ManageLogger<GenericEventEmitter<E, AdditionalContext>> {
252
287
  private readonly globalLogger?;
253
288
  protected abstract readonly eventEmitter: PlatformEventEmitter;
254
289
  private readonly _handlers;
255
290
  private _eventLogger?;
256
291
  constructor(globalLogger?: (() => Logger) | undefined);
257
- emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void;
258
- addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
259
- removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
260
- removeAllHandlers(eventType?: ProviderEvents): void;
261
- getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
292
+ emit(eventType: E, context?: EventContext): void;
293
+ addHandler(eventType: AnyProviderEvent, handler: EventHandler): void;
294
+ removeHandler(eventType: AnyProviderEvent, handler: EventHandler): void;
295
+ removeAllHandlers(eventType?: AnyProviderEvent): void;
296
+ getHandlers(eventType: AnyProviderEvent): EventHandler[];
262
297
  setLogger(logger: Logger): this;
263
298
  protected get _logger(): Logger | undefined;
264
299
  }
@@ -341,7 +376,7 @@ interface CommonProvider {
341
376
  * An event emitter for ProviderEvents.
342
377
  * @see ProviderEvents
343
378
  */
344
- events?: GenericEventEmitter;
379
+ events?: GenericEventEmitter<AnyProviderEvent>;
345
380
  /**
346
381
  * A function used to shut down the provider.
347
382
  * Called when this provider is replaced with a new one, or when the OpenFeature is shut down.
@@ -500,15 +535,15 @@ declare function isObject<T extends object>(value: unknown): value is T;
500
535
  declare function objectOrUndefined<T extends object>(value: unknown): T | undefined;
501
536
 
502
537
  declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider, H extends BaseHook = BaseHook> implements Eventing, EvaluationLifeCycle<OpenFeatureCommonAPI<P>>, ManageLogger<OpenFeatureCommonAPI<P>> {
503
- protected abstract _createEventEmitter(): GenericEventEmitter;
538
+ protected abstract _createEventEmitter(): GenericEventEmitter<AnyProviderEvent>;
504
539
  protected abstract _defaultProvider: P;
505
- protected abstract readonly _events: GenericEventEmitter;
540
+ protected abstract readonly _events: GenericEventEmitter<AnyProviderEvent>;
506
541
  protected _hooks: H[];
507
542
  protected _context: EvaluationContext;
508
543
  protected _logger: Logger;
509
544
  private readonly _clientEventHandlers;
510
545
  protected _clientProviders: Map<string, P>;
511
- protected _clientEvents: Map<string | undefined, GenericEventEmitter>;
546
+ protected _clientEvents: Map<string | undefined, GenericEventEmitter<AnyProviderEvent>>;
512
547
  protected _runsOn: Paradigm;
513
548
  constructor(category: Paradigm);
514
549
  addHooks(...hooks: H[]): this;
@@ -516,30 +551,37 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
516
551
  clearHooks(): this;
517
552
  setLogger(logger: Logger): this;
518
553
  /**
519
- * Get metadata about registered provider.
554
+ * Get metadata about the default provider.
520
555
  * @returns {ProviderMetadata} Provider Metadata
521
556
  */
522
557
  get providerMetadata(): ProviderMetadata;
558
+ /**
559
+ * Get metadata about a registered provider using the client name.
560
+ * An unbound or empty client name will return metadata from the default provider.
561
+ * @param {string} [clientName] The name to identify the client
562
+ * @returns {ProviderMetadata} Provider Metadata
563
+ */
564
+ getProviderMetadata(clientName?: string): ProviderMetadata;
523
565
  /**
524
566
  * Adds a handler for the given provider event type.
525
567
  * The handlers are called in the order they have been added.
526
568
  * API (global) events run for all providers.
527
- * @param {ProviderEvents} eventType The provider event type to listen to
569
+ * @param {AnyProviderEvent} eventType The provider event type to listen to
528
570
  * @param {EventHandler} handler The handler to run on occurrence of the event type
529
571
  */
530
- addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
572
+ addHandler<T extends AnyProviderEvent>(eventType: T, handler: EventHandler): void;
531
573
  /**
532
574
  * Removes a handler for the given provider event type.
533
- * @param {ProviderEvents} eventType The provider event type to remove the listener for
575
+ * @param {AnyProviderEvent} eventType The provider event type to remove the listener for
534
576
  * @param {EventHandler} handler The handler to remove for the provider event type
535
577
  */
536
- removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
578
+ removeHandler<T extends AnyProviderEvent>(eventType: T, handler: EventHandler): void;
537
579
  /**
538
580
  * Gets the current handlers for the given provider event type.
539
- * @param {ProviderEvents} eventType The provider event type to get the current handlers for
581
+ * @param {AnyProviderEvent} eventType The provider event type to get the current handlers for
540
582
  * @returns {EventHandler[]} The handlers currently attached to the given provider event type
541
583
  */
542
- getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[];
584
+ getHandlers<T extends AnyProviderEvent>(eventType: T): EventHandler[];
543
585
  /**
544
586
  * Sets the default provider for flag evaluations and returns a promise that resolves when the provider is ready.
545
587
  * This provider will be used by unnamed clients and named clients to which no provider is bound.
@@ -581,9 +623,9 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
581
623
  setProvider(clientName: string, provider: P): this;
582
624
  private setAwaitableProvider;
583
625
  protected getProviderForClient(name?: string): P;
584
- protected buildAndCacheEventEmitterForClient(name?: string): GenericEventEmitter;
626
+ protected buildAndCacheEventEmitterForClient(name?: string): GenericEventEmitter<AnyProviderEvent>;
585
627
  private getUnboundEmitters;
586
- private getAssociatedEventEmitters;
628
+ protected getAssociatedEventEmitters(clientName: string | undefined): GenericEventEmitter<AnyProviderEvent, Record<string, unknown>>[];
587
629
  private transferListeners;
588
630
  close(): Promise<void>;
589
631
  protected clearProvidersAndSetDefault(defaultProvider: P): Promise<void>;
@@ -681,12 +723,29 @@ interface Client extends EvaluationLifeCycle<Client>, Features, ManageLogger<Cli
681
723
  readonly providerStatus: ProviderStatus;
682
724
  }
683
725
 
726
+ /**
727
+ * A subset of events that can be directly emitted by providers.
728
+ */
729
+ type ProviderEmittableEvents = Exclude<ClientProviderEvents, ClientProviderEvents.ContextChanged>;
730
+
731
+ /**
732
+ * The OpenFeatureEventEmitter can be used by provider developers to emit
733
+ * events at various parts of the provider lifecycle.
734
+ *
735
+ * NOTE: Ready and error events are automatically emitted by the SDK based on
736
+ * the result of the initialize method.
737
+ */
738
+ declare class OpenFeatureEventEmitter extends GenericEventEmitter<ProviderEmittableEvents> {
739
+ protected readonly eventEmitter: EventEmitter;
740
+ constructor();
741
+ }
742
+
684
743
  /**
685
744
  * The InternalEventEmitter is not exported publicly and should only be used within the SDK. It extends the
686
745
  * OpenFeatureEventEmitter to include additional properties that can be included
687
746
  * in the event details.
688
747
  */
689
- declare abstract class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {
748
+ declare abstract class InternalEventEmitter extends GenericEventEmitter<ClientProviderEvents, CommonEventDetails> {
690
749
  }
691
750
 
692
751
  type Hook = BaseHook<FlagValue, void, void>;
@@ -746,18 +805,6 @@ declare class NoopFeatureProvider implements Provider {
746
805
  }
747
806
  declare const NOOP_PROVIDER: NoopFeatureProvider;
748
807
 
749
- /**
750
- * The OpenFeatureEventEmitter can be used by provider developers to emit
751
- * events at various parts of the provider lifecycle.
752
- *
753
- * NOTE: Ready and error events are automatically emitted by the SDK based on
754
- * the result of the initialize method.
755
- */
756
- declare class OpenFeatureEventEmitter extends GenericEventEmitter {
757
- protected readonly eventEmitter: EventEmitter;
758
- constructor();
759
- }
760
-
761
808
  /**
762
809
  * Don't export types from this file publicly.
763
810
  * It might cause confusion since these types are not a part of the general API,
@@ -834,9 +881,9 @@ declare class OpenFeatureClient implements Client {
834
881
  constructor(providerAccessor: () => Provider, emitterAccessor: () => InternalEventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions);
835
882
  get metadata(): ClientMetadata;
836
883
  get providerStatus(): ProviderStatus;
837
- addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void;
838
- removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): void;
839
- getHandlers(eventType: ProviderEvents): EventHandler<ProviderEvents>[];
884
+ addHandler(eventType: ClientProviderEvents, handler: EventHandler): void;
885
+ removeHandler(notificationType: ClientProviderEvents, handler: EventHandler): void;
886
+ getHandlers(eventType: ClientProviderEvents): EventHandler[];
840
887
  setLogger(logger: Logger): this;
841
888
  addHooks(...hooks: Hook[]): this;
842
889
  getHooks(): Hook[];
@@ -859,7 +906,7 @@ declare class OpenFeatureClient implements Client {
859
906
  }
860
907
 
861
908
  declare class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implements ManageContext<Promise<void>> {
862
- protected _events: OpenFeatureEventEmitter;
909
+ protected _events: GenericEventEmitter<ClientProviderEvents>;
863
910
  protected _defaultProvider: Provider;
864
911
  protected _createEventEmitter: () => OpenFeatureEventEmitter;
865
912
  protected _namedProviderContext: Map<string, EvaluationContext>;
@@ -940,4 +987,4 @@ declare class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implem
940
987
  */
941
988
  declare const OpenFeature: OpenFeatureAPI;
942
989
 
943
- export { BaseHook, 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, GenericEventEmitter, Hook, HookContext, HookHints, InMemoryProvider, InvalidContextError, JsonArray, JsonObject, JsonValue, LOG_LEVELS, Logger, ManageContext, ManageLogger, Metadata, NOOP_PROVIDER, OpenFeature, OpenFeatureAPI, OpenFeatureClient, OpenFeatureCommonAPI, OpenFeatureError, OpenFeatureEventEmitter, Paradigm, ParseError, PrimitiveValue, Provider, ProviderEvents, ProviderMetadata, ProviderNotReadyError, ProviderStatus, ReadyEvent, ResolutionDetails, ResolutionReason, SafeLogger, StaleEvent, StandardResolutionReasons, TargetingKeyMissingError, TypeMismatchError, isObject, isString, objectOrUndefined, statusMatchesEvent, stringOrUndefined };
990
+ export { ClientProviderEvents as AllProviderEvents, AnyProviderEvent, BaseHook, BeforeHookContext, Client, ClientMetadata, ClientProviderEvents, CommonEventDetails, CommonProvider, ConfigChangeEvent, DefaultLogger, ErrorCode, ErrorEvent, EvaluationContext, EvaluationContextValue, EvaluationDetails, EvaluationLifeCycle, EventContext, EventDetails, EventHandler, EventMetadata, Eventing, Features, FlagEvaluationOptions, FlagMetadata, FlagNotFoundError, FlagValue, FlagValueType, GeneralError, GenericEventEmitter, Hook, HookContext, HookHints, InMemoryProvider, InvalidContextError, JsonArray, JsonObject, JsonValue, LOG_LEVELS, Logger, ManageContext, ManageLogger, Metadata, NOOP_PROVIDER, OpenFeature, OpenFeatureAPI, OpenFeatureClient, OpenFeatureCommonAPI, OpenFeatureError, OpenFeatureEventEmitter, Paradigm, ParseError, PrimitiveValue, Provider, ProviderEmittableEvents, ClientProviderEvents as ProviderEvents, ProviderMetadata, ProviderNotReadyError, ProviderStatus, ReadyEvent, ResolutionDetails, ResolutionReason, SafeLogger, ServerProviderEvents, StaleEvent, StandardResolutionReasons, TargetingKeyMissingError, TypeMismatchError, isObject, isString, objectOrUndefined, statusMatchesEvent, stringOrUndefined };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfeature/web-sdk",
3
- "version": "0.4.8",
3
+ "version": "0.4.9",
4
4
  "description": "OpenFeature SDK for Web",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "files": [
@@ -46,9 +46,9 @@
46
46
  },
47
47
  "homepage": "https://github.com/open-feature/js-sdk#readme",
48
48
  "peerDependencies": {
49
- "@openfeature/core": "0.0.20"
49
+ "@openfeature/core": "0.0.22"
50
50
  },
51
51
  "devDependencies": {
52
- "@openfeature/core": "0.0.20"
52
+ "@openfeature/core": "0.0.22"
53
53
  }
54
54
  }