@openfeature/web-sdk 0.3.2-experimental → 0.3.3-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
@@ -1,3 +1,67 @@
1
+ type EventMetadata = {
2
+ [key: string]: string | boolean | number;
3
+ };
4
+ type EventDetails = {
5
+ clientName?: string;
6
+ message?: string;
7
+ flagsChanged?: string[];
8
+ metadata?: EventMetadata;
9
+ };
10
+ type EventHandler = (eventDetails?: EventDetails) => Promise<unknown> | unknown;
11
+ interface Eventing {
12
+ /**
13
+ * Adds a handler for the given provider event type.
14
+ * The handlers are called in the order they have been added.
15
+ * @param {ProviderEvents} eventType The provider event type to listen to
16
+ * @param {EventHandler} handler The handler to run on occurrence of the event type
17
+ */
18
+ addHandler(eventType: ProviderEvents, handler: EventHandler): void;
19
+ /**
20
+ * Removes a handler for the given provider event type.
21
+ * @param {ProviderEvents} eventType The provider event type to remove the listener for
22
+ * @param {EventHandler} handler The handler to remove for the provider event type
23
+ */
24
+ removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
25
+ /**
26
+ * Gets the current handlers for the given provider event type.
27
+ * @param {ProviderEvents} eventType The provider event type to get the current handlers for
28
+ * @returns {EventHandler[]} The handlers currently attached to the given provider event type
29
+ */
30
+ getHandlers(eventType: ProviderEvents): EventHandler[];
31
+ }
32
+ declare enum ProviderEvents {
33
+ /**
34
+ * The provider is ready to evaluate flags.
35
+ */
36
+ Ready = "PROVIDER_READY",
37
+ /**
38
+ * The provider is in an error state.
39
+ */
40
+ Error = "PROVIDER_ERROR",
41
+ /**
42
+ * The flag configuration in the source-of-truth has changed.
43
+ */
44
+ ConfigurationChanged = "PROVIDER_CONFIGURATION_CHANGED",
45
+ /**
46
+ * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.
47
+ */
48
+ Stale = "PROVIDER_STALE"
49
+ }
50
+ declare class OpenFeatureEventEmitter implements ManageLogger<OpenFeatureEventEmitter> {
51
+ private readonly globalLogger?;
52
+ private readonly _handlers;
53
+ private readonly eventEmitter;
54
+ private _eventLogger?;
55
+ constructor(globalLogger?: (() => Logger) | undefined);
56
+ emit(eventType: ProviderEvents, context?: EventDetails): void;
57
+ addHandler(eventType: ProviderEvents, handler: EventHandler): void;
58
+ removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
59
+ removeAllHandlers(eventType?: ProviderEvents): void;
60
+ getHandlers(eventType: ProviderEvents): EventHandler[];
61
+ setLogger(logger: Logger): this;
62
+ private get _logger();
63
+ }
64
+
1
65
  type PrimitiveValue = null | boolean | string | number;
2
66
  type JsonObject = {
3
67
  [key: string]: JsonValue;
@@ -46,7 +110,7 @@ declare const StandardResolutionReasons: {
46
110
  */
47
111
  readonly DISABLED: "DISABLED";
48
112
  /**
49
- * The resolved value was configured statically, or otherwise fell back to a pre-configured value.
113
+ * The resolved value was configured statically, or otherwise fell back to a pre-configured value.
50
114
  */
51
115
  readonly DEFAULT: "DEFAULT";
52
116
  /**
@@ -99,27 +163,33 @@ declare enum ErrorCode {
99
163
  GENERAL = "GENERAL"
100
164
  }
101
165
  type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);
166
+ /**
167
+ * A structure which supports definition of arbitrary properties, with keys of type string, and values of type boolean, string, or number.
168
+ *
169
+ * This structure is populated by a provider for use by an Application Author (via the Evaluation API) or an Application Integrator (via hooks).
170
+ */
171
+ type FlagMetadata = Record<string, string | number | boolean>;
102
172
  type ResolutionDetails<U> = {
103
173
  value: U;
104
174
  variant?: string;
175
+ flagMetadata?: FlagMetadata;
105
176
  reason?: ResolutionReason;
106
177
  errorCode?: ErrorCode;
107
178
  errorMessage?: string;
108
179
  };
109
180
  type EvaluationDetails<T extends FlagValue> = {
110
181
  flagKey: string;
182
+ flagMetadata: Readonly<FlagMetadata>;
111
183
  } & ResolutionDetails<T>;
112
184
  interface ManageContext<T> {
113
185
  /**
114
186
  * Access the evaluation context set on the receiver.
115
- *
116
187
  * @returns {EvaluationContext} Evaluation context
117
188
  */
118
189
  getContext(): EvaluationContext;
119
190
  /**
120
191
  * Sets evaluation context that will be used during flag evaluations
121
192
  * on this receiver.
122
- *
123
193
  * @template T The type of the receiver
124
194
  * @param {EvaluationContext} context Evaluation context
125
195
  * @returns {T} The receiver (this object)
@@ -132,7 +202,6 @@ interface ManageLogger<T> {
132
202
  * and is passed to various components in the SDK.
133
203
  * The logger configured on the global API object will be used for all evaluations,
134
204
  * unless overridden in a particular client.
135
- *
136
205
  * @template T The type of the receiver
137
206
  * @param {Logger} logger The logger to be used
138
207
  * @returns {T} The receiver (this object)
@@ -145,6 +214,7 @@ interface Metadata {
145
214
  interface ClientMetadata extends Metadata {
146
215
  readonly version?: string;
147
216
  readonly name?: string;
217
+ readonly providerMetadata: ProviderMetadata;
148
218
  }
149
219
  interface ProviderMetadata extends Metadata {
150
220
  readonly name: string;
@@ -175,7 +245,6 @@ interface ManageTransactionContextPropagator<T> extends TransactionContextPropag
175
245
  * Sets a transaction context propagator on this receiver. The transaction context
176
246
  * propagator is responsible for persisting context for the duration of a single
177
247
  * transaction.
178
- *
179
248
  * @experimental
180
249
  * @template T The type of the receiver
181
250
  * @param {TransactionContextPropagator} transactionContextPropagator The context propagator to be used
@@ -190,7 +259,6 @@ interface TransactionContextPropagator {
190
259
  *
191
260
  * Returns the currently defined transaction context using the registered transaction
192
261
  * context propagator.
193
- *
194
262
  * @experimental
195
263
  * @returns {TransactionContext} The current transaction context
196
264
  */
@@ -200,7 +268,6 @@ interface TransactionContextPropagator {
200
268
  * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).
201
269
  *
202
270
  * Sets the transaction context using the registered transaction context propagator.
203
- *
204
271
  * @experimental
205
272
  * @template R The return value of the callback
206
273
  * @param {TransactionContext} transactionContext The transaction specific context
@@ -209,8 +276,29 @@ interface TransactionContextPropagator {
209
276
  */
210
277
  setTransactionContext<R>(transactionContext: TransactionContext, callback: (...args: unknown[]) => R, ...args: unknown[]): void;
211
278
  }
279
+ declare enum ProviderStatus {
280
+ NOT_READY = "NOT_READY",
281
+ READY = "READY",
282
+ ERROR = "ERROR"
283
+ }
212
284
  interface CommonProvider {
213
285
  readonly metadata: ProviderMetadata;
286
+ readonly status?: ProviderStatus;
287
+ /**
288
+ * An event emitter for ProviderEvents.
289
+ * @see ProviderEvents
290
+ */
291
+ events?: OpenFeatureEventEmitter;
292
+ onClose?(): Promise<void>;
293
+ /**
294
+ * A handler function used to setup the provider.
295
+ * Called by the SDK after the provider is set.
296
+ * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.
297
+ * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.
298
+ * Use this function to perform any context-dependent setup within the provider.
299
+ * @param context
300
+ */
301
+ initialize?(context?: EvaluationContext): Promise<void>;
214
302
  }
215
303
 
216
304
  declare abstract class OpenFeatureError extends Error {
@@ -271,83 +359,70 @@ declare class NoopTransactionContextPropagator implements TransactionContextProp
271
359
  }
272
360
  declare const NOOP_TRANSACTION_CONTEXT_PROPAGATOR: NoopTransactionContextPropagator;
273
361
 
274
- declare abstract class OpenFeatureCommonAPI {
362
+ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider> implements Eventing {
275
363
  protected _transactionContextPropagator: TransactionContextPropagator;
276
364
  protected _context: EvaluationContext;
277
365
  protected _logger: Logger;
366
+ protected abstract _defaultProvider: P;
367
+ private readonly _events;
368
+ protected _clientProviders: Map<string, P>;
369
+ protected _clientEvents: Map<string | undefined, OpenFeatureEventEmitter>;
278
370
  abstract clearHooks(): this;
279
- abstract setLogger(logger: Logger): this;
371
+ setLogger(logger: Logger): this;
372
+ /**
373
+ * Get metadata about registered provider.
374
+ * @returns {ProviderMetadata} Provider Metadata
375
+ */
376
+ get providerMetadata(): ProviderMetadata;
280
377
  getContext(): EvaluationContext;
281
- setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI;
282
- setTransactionContext<R>(transactionContext: TransactionContext, callback: (...args: unknown[]) => R, ...args: unknown[]): void;
283
- getTransactionContext(): TransactionContext;
284
- }
285
-
286
- // Type definitions for events 3.0
287
- // Project: https://github.com/Gozala/events
288
- // Definitions by: Yasunori Ohoka <https://github.com/yasupeke>
289
- // Shenwei Wang <https://github.com/weareoutman>
290
- // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
291
-
292
- type Listener = (...args: any[]) => void;
293
-
294
- declare class EventEmitter {
295
- static listenerCount(emitter: EventEmitter, type: string | number): number;
296
- static defaultMaxListeners: number;
297
-
298
- eventNames(): Array<string | number>;
299
- setMaxListeners(n: number): this;
300
- getMaxListeners(): number;
301
- emit(type: string | number, ...args: any[]): boolean;
302
- addListener(type: string | number, listener: Listener): this;
303
- on(type: string | number, listener: Listener): this;
304
- once(type: string | number, listener: Listener): this;
305
- prependListener(type: string | number, listener: Listener): this;
306
- prependOnceListener(type: string | number, listener: Listener): this;
307
- removeListener(type: string | number, listener: Listener): this;
308
- off(type: string | number, listener: Listener): this;
309
- removeAllListeners(type?: string | number): this;
310
- listeners(type: string | number): Listener[];
311
- listenerCount(type: string | number): number;
312
- rawListeners(type: string | number): Listener[];
313
- }
314
-
315
- declare enum ProviderEvents {
316
378
  /**
317
- * The provider is ready to evaluate flags.
379
+ * Adds a handler for the given provider event type.
380
+ * The handlers are called in the order they have been added.
381
+ * When changing the provider, the currently attached handlers will listen to the events of the new provider.
382
+ * @param {ProviderEvents} eventType The provider event type to listen to
383
+ * @param {EventHandler} handler The handler to run on occurrence of the event type
318
384
  */
319
- Ready = "PROVIDER_READY",
385
+ addHandler(eventType: ProviderEvents, handler: EventHandler): void;
320
386
  /**
321
- * The provider is in an error state.
387
+ * Removes a handler for the given provider event type.
388
+ * @param {ProviderEvents} eventType The provider event type to remove the listener for
389
+ * @param {EventHandler} handler The handler to remove for the provider event type
322
390
  */
323
- Error = "PROVIDER_ERROR",
391
+ removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
324
392
  /**
325
- * The flag configuration in the source-of-truth has changed.
393
+ * Gets the current handlers for the given provider event type.
394
+ * @param {ProviderEvents} eventType The provider event type to get the current handlers for
395
+ * @returns {EventHandler[]} The handlers currently attached to the given provider event type
326
396
  */
327
- ConfigurationChanged = "PROVIDER_CONFIGURATION_CHANGED",
397
+ getHandlers(eventType: ProviderEvents): EventHandler[];
328
398
  /**
329
- * The provider's cached state is not longer valid and may not be up-to-date with the source of truth.
399
+ * Sets the default provider for flag evaluations.
400
+ * This provider will be used by unnamed clients and named clients to which no provider is bound.
401
+ * Setting a provider supersedes the current provider used in new and existing clients without a name.
402
+ * @template P
403
+ * @param {P} provider The provider responsible for flag evaluations.
404
+ * @returns {OpenFeatureCommonAPI} OpenFeature API
330
405
  */
331
- Stale = "PROVIDER_STALE"
332
- }
333
- interface EventData {
334
- flagKeysChanged?: string[];
335
- changeMetadata?: {
336
- [key: string]: boolean | string;
337
- };
338
- }
339
- declare enum ApiEvents {
340
- ProviderChanged = "providerChanged"
341
- }
342
- interface Eventing {
343
- addHandler(notificationType: string, handler: Handler): void;
406
+ setProvider(provider: P): this;
407
+ /**
408
+ * Sets the provider that OpenFeature will use for flag evaluations of providers with the given name.
409
+ * Setting a provider supersedes the current provider used in new and existing clients with that name.
410
+ * @template P
411
+ * @param {string} clientName The name to identify the client
412
+ * @param {P} provider The provider responsible for flag evaluations.
413
+ * @returns {this} OpenFeature API
414
+ */
415
+ setProvider(clientName: string, provider: P): this;
416
+ protected getProviderForClient(name?: string): P;
417
+ protected getEventEmitterForClient(name?: string): OpenFeatureEventEmitter;
418
+ private transferListeners;
419
+ close(): Promise<void>;
420
+ private handleShutdownError;
421
+ setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI<P>;
422
+ setTransactionContext<R>(transactionContext: TransactionContext, callback: (...args: unknown[]) => R, ...args: unknown[]): void;
423
+ getTransactionContext(): TransactionContext;
344
424
  }
345
- type EventContext = {
346
- notificationType: string;
347
- [key: string]: unknown;
348
- };
349
- type Handler = (eventContext?: EventContext) => void;
350
- type EventCallbackMessage = (eventContext: EventContext) => void;
425
+
351
426
  /**
352
427
  * Interface that providers must implement to resolve flag values for their particular
353
428
  * backend or vendor.
@@ -362,31 +437,13 @@ interface Provider extends CommonProvider {
362
437
  * provider. Provider hooks are not configured or controlled by the application author.
363
438
  */
364
439
  readonly hooks?: Hook[];
365
- /**
366
- * An event emitter for ProviderEvents.
367
- *
368
- * @see ProviderEvents
369
- */
370
- events?: EventEmitter;
371
440
  /**
372
441
  * A handler function to reconcile changes when the static context.
373
442
  * Called by the SDK when the context is changed.
374
- *
375
443
  * @param oldContext
376
444
  * @param newContext
377
445
  */
378
446
  onContextChange?(oldContext: EvaluationContext, newContext: EvaluationContext): Promise<void>;
379
- onClose?(): Promise<void>;
380
- /**
381
- * A handler function used to setup the provider.
382
- * Called by the SDK after the provider is set.
383
- * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.
384
- * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.
385
- * Use this function to perform any context-dependent setup within the provider.
386
- *
387
- * @param context
388
- */
389
- initialize?(context: EvaluationContext): Promise<void>;
390
447
  /**
391
448
  * Resolve a boolean flag and its evaluation details.
392
449
  */
@@ -408,14 +465,12 @@ interface Hook<T extends FlagValue = FlagValue> {
408
465
  /**
409
466
  * Runs before flag values are resolved from the provider.
410
467
  * If an EvaluationContext is returned, it will be merged with the pre-existing EvaluationContext.
411
- *
412
468
  * @param hookContext
413
469
  * @param hookHints
414
470
  */
415
471
  before?(hookContext: BeforeHookContext, hookHints?: HookHints): EvaluationContext | void;
416
472
  /**
417
473
  * Runs after flag values are successfully resolved from the provider.
418
- *
419
474
  * @param hookContext
420
475
  * @param evaluationDetails
421
476
  * @param hookHints
@@ -423,7 +478,6 @@ interface Hook<T extends FlagValue = FlagValue> {
423
478
  after?(hookContext: Readonly<HookContext<T>>, evaluationDetails: EvaluationDetails<T>, hookHints?: HookHints): void;
424
479
  /**
425
480
  * Runs in the event of an unhandled error or promise rejection during flag resolution, or any attached hooks.
426
- *
427
481
  * @param hookContext
428
482
  * @param error
429
483
  * @param hookHints
@@ -432,7 +486,6 @@ interface Hook<T extends FlagValue = FlagValue> {
432
486
  /**
433
487
  * Runs after all other hook stages, regardless of success or error.
434
488
  * Errors thrown here are unhandled by the client and will surface in application code.
435
- *
436
489
  * @param hookContext
437
490
  * @param hookHints
438
491
  */
@@ -445,7 +498,6 @@ interface EvaluationLifeCycle<T> {
445
498
  * will not remove existing hooks.
446
499
  * Hooks registered on the global API object run with all evaluations.
447
500
  * Hooks registered on the client run with all evaluations on that client.
448
- *
449
501
  * @template T The type of the receiver
450
502
  * @param {Hook<FlagValue>[]} hooks A list of hooks that should always run
451
503
  * @returns {T} The receiver (this object)
@@ -453,13 +505,11 @@ interface EvaluationLifeCycle<T> {
453
505
  addHooks(...hooks: Hook[]): T;
454
506
  /**
455
507
  * Access all the hooks that are registered on this receiver.
456
- *
457
508
  * @returns {Hook<FlagValue>[]} A list of the client hooks
458
509
  */
459
510
  getHooks(): Hook[];
460
511
  /**
461
512
  * Clears all the hooks that are registered on this receiver.
462
- *
463
513
  * @template T The type of the receiver
464
514
  * @returns {T} The receiver (this object)
465
515
  */
@@ -472,7 +522,6 @@ interface FlagEvaluationOptions {
472
522
  interface Features {
473
523
  /**
474
524
  * Performs a flag evaluation that returns a boolean.
475
- *
476
525
  * @param {string} flagKey The flag key uniquely identifies a particular flag
477
526
  * @param {boolean} defaultValue The value returned if an error occurs
478
527
  * @param {FlagEvaluationOptions} options Additional flag evaluation options
@@ -481,7 +530,6 @@ interface Features {
481
530
  getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean;
482
531
  /**
483
532
  * Performs a flag evaluation that a returns an evaluation details object.
484
- *
485
533
  * @param {string} flagKey The flag key uniquely identifies a particular flag
486
534
  * @param {boolean} defaultValue The value returned if an error occurs
487
535
  * @param {FlagEvaluationOptions} options Additional flag evaluation options
@@ -490,7 +538,6 @@ interface Features {
490
538
  getBooleanDetails(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): EvaluationDetails<boolean>;
491
539
  /**
492
540
  * Performs a flag evaluation that returns a string.
493
- *
494
541
  * @param {string} flagKey The flag key uniquely identifies a particular flag
495
542
  * @template {string} T A optional generic argument constraining the string
496
543
  * @param {T} defaultValue The value returned if an error occurs
@@ -501,7 +548,6 @@ interface Features {
501
548
  getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
502
549
  /**
503
550
  * Performs a flag evaluation that a returns an evaluation details object.
504
- *
505
551
  * @param {string} flagKey The flag key uniquely identifies a particular flag
506
552
  * @template {string} T A optional generic argument constraining the string
507
553
  * @param {T} defaultValue The value returned if an error occurs
@@ -512,7 +558,6 @@ interface Features {
512
558
  getStringDetails<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
513
559
  /**
514
560
  * Performs a flag evaluation that returns a number.
515
- *
516
561
  * @param {string} flagKey The flag key uniquely identifies a particular flag
517
562
  * @template {number} T A optional generic argument constraining the number
518
563
  * @param {T} defaultValue The value returned if an error occurs
@@ -523,7 +568,6 @@ interface Features {
523
568
  getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
524
569
  /**
525
570
  * Performs a flag evaluation that a returns an evaluation details object.
526
- *
527
571
  * @param {string} flagKey The flag key uniquely identifies a particular flag
528
572
  * @template {number} T A optional generic argument constraining the number
529
573
  * @param {T} defaultValue The value returned if an error occurs
@@ -534,7 +578,6 @@ interface Features {
534
578
  getNumberDetails<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): EvaluationDetails<T>;
535
579
  /**
536
580
  * Performs a flag evaluation that returns an object.
537
- *
538
581
  * @param {string} flagKey The flag key uniquely identifies a particular flag
539
582
  * @template {JsonValue} T A optional generic argument describing the structure
540
583
  * @param {T} defaultValue The value returned if an error occurs
@@ -545,7 +588,6 @@ interface Features {
545
588
  getObjectValue<T extends JsonValue = JsonValue>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T;
546
589
  /**
547
590
  * Performs a flag evaluation that a returns an evaluation details object.
548
- *
549
591
  * @param {string} flagKey The flag key uniquely identifies a particular flag
550
592
  * @template {JsonValue} T A optional generic argument describing the structure
551
593
  * @param {T} defaultValue The value returned if an error occurs
@@ -564,7 +606,6 @@ interface GlobalApi extends EvaluationLifeCycle<GlobalApi>, ManageContext<Global
564
606
  * A factory function for creating new OpenFeature clients. Clients can contain
565
607
  * their own state (e.g. logger, hook, context). Multiple clients can be used
566
608
  * to segment feature flag configuration.
567
- *
568
609
  * @param {string} name The name of the client
569
610
  * @param {string} version The version of the client
570
611
  * @param {EvaluationContext} context Evaluation context that should be set on the client to used during flag evaluations
@@ -574,7 +615,6 @@ interface GlobalApi extends EvaluationLifeCycle<GlobalApi>, ManageContext<Global
574
615
  /**
575
616
  * Sets the provider that OpenFeature will use for flag evaluations. Setting
576
617
  * a provider supersedes the current provider used in new and existing clients.
577
- *
578
618
  * @param {Provider} provider The provider responsible for flag evaluations.
579
619
  * @returns {GlobalApi} OpenFeature API
580
620
  */
@@ -587,14 +627,16 @@ type OpenFeatureClientOptions = {
587
627
  };
588
628
  declare class OpenFeatureClient implements Client {
589
629
  private readonly providerAccessor;
590
- private readonly providerReady;
630
+ private readonly events;
591
631
  private readonly globalLogger;
592
- readonly metadata: ClientMetadata;
632
+ private readonly options;
593
633
  private _hooks;
594
634
  private _clientLogger?;
595
- private _handlerWrappers;
596
- constructor(providerAccessor: () => Provider, providerReady: () => boolean, apiEvents: () => EventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions);
597
- addHandler(eventType: ProviderEvents, handler: Handler): void;
635
+ constructor(providerAccessor: () => Provider, events: () => OpenFeatureEventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions);
636
+ get metadata(): ClientMetadata;
637
+ addHandler(eventType: ProviderEvents, handler: EventHandler): void;
638
+ removeHandler(notificationType: ProviderEvents, handler: EventHandler): void;
639
+ getHandlers(eventType: ProviderEvents): EventHandler[];
598
640
  setLogger(logger: Logger): OpenFeatureClient;
599
641
  addHooks(...hooks: Hook<FlagValue>[]): OpenFeatureClient;
600
642
  getHooks(): Hook<FlagValue>[];
@@ -614,7 +656,6 @@ declare class OpenFeatureClient implements Client {
614
656
  private finallyHooks;
615
657
  private get _provider();
616
658
  private get _logger();
617
- private attachListeners;
618
659
  }
619
660
 
620
661
  /**
@@ -624,6 +665,7 @@ declare class NoopFeatureProvider implements Provider {
624
665
  readonly metadata: {
625
666
  readonly name: "No-op Provider";
626
667
  };
668
+ get status(): ProviderStatus;
627
669
  resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean>;
628
670
  resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string>;
629
671
  resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number>;
@@ -632,39 +674,38 @@ declare class NoopFeatureProvider implements Provider {
632
674
  }
633
675
  declare const NOOP_PROVIDER: NoopFeatureProvider;
634
676
 
635
- declare class OpenFeatureAPI extends OpenFeatureCommonAPI {
636
- private _apiEvents;
637
- private _providerReady;
677
+ declare class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider> {
638
678
  protected _hooks: Hook[];
639
- protected _provider: Provider;
679
+ protected _defaultProvider: Provider;
640
680
  private constructor();
641
681
  /**
642
682
  * Gets a singleton instance of the OpenFeature API.
643
- *
644
683
  * @ignore
645
684
  * @returns {OpenFeatureAPI} OpenFeature API
646
685
  */
647
686
  static getInstance(): OpenFeatureAPI;
648
- /**
649
- * Get metadata about registered provider.
650
- *
651
- * @returns {ProviderMetadata} Provider Metadata
652
- */
653
- get providerMetadata(): ProviderMetadata;
654
687
  setLogger(logger: Logger): this;
655
688
  addHooks(...hooks: Hook<FlagValue>[]): this;
656
689
  getHooks(): Hook<FlagValue>[];
657
690
  clearHooks(): this;
658
691
  setContext(context: EvaluationContext): Promise<void>;
659
- setProvider(provider: Provider): OpenFeatureCommonAPI;
660
- close(): Promise<void>;
692
+ /**
693
+ * A factory function for creating new named OpenFeature clients. Clients can contain
694
+ * their own state (e.g. logger, hook, context). Multiple clients can be used
695
+ * to segment feature flag configuration.
696
+ *
697
+ * If there is already a provider bound to this name via {@link this.setProvider setProvider}, this provider will be used.
698
+ * Otherwise, the default provider is used until a provider is assigned to that name.
699
+ * @param {string} name The name of the client
700
+ * @param {string} version The version of the client (only used for metadata)
701
+ * @returns {Client} OpenFeature Client
702
+ */
661
703
  getClient(name?: string, version?: string): Client;
662
704
  }
663
705
  /**
664
706
  * A singleton instance of the OpenFeature API.
665
- *
666
707
  * @returns {OpenFeatureAPI} OpenFeature API
667
708
  */
668
709
  declare const OpenFeature: OpenFeatureAPI;
669
710
 
670
- 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, EventEmitter as OpenFeatureEventEmitter, ParseError, PrimitiveValue, Provider, ProviderEvents, ProviderMetadata, ResolutionDetails, ResolutionReason, SafeLogger, StandardResolutionReasons, TargetingKeyMissingError, TransactionContext, TransactionContextPropagator, TypeMismatchError };
711
+ export { BeforeHookContext, Client, ClientMetadata, CommonProvider, DefaultLogger, ErrorCode, EvaluationContext, EvaluationContextValue, EvaluationDetails, EventDetails, EventHandler, EventMetadata, Eventing, Features, FlagEvaluationOptions, FlagMetadata, FlagNotFoundError, FlagValue, FlagValueType, GeneralError, GlobalApi, Hook, HookContext, HookHints, InvalidContextError, JsonArray, JsonObject, JsonValue, Logger, ManageContext, ManageLogger, ManageTransactionContextPropagator, 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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfeature/web-sdk",
3
- "version": "0.3.2-experimental",
3
+ "version": "0.3.3-experimental",
4
4
  "description": "OpenFeature SDK for Web",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "files": [
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "homepage": "https://github.com/open-feature/js-sdk#readme",
48
48
  "devDependencies": {
49
- "@openfeature/shared": "0.0.3"
49
+ "@openfeature/shared": "*"
50
50
  },
51
51
  "typedoc": {
52
52
  "displayName": "OpenFeature Web SDK",