@openfeature/web-sdk 0.3.1-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,4 +1,34 @@
1
- type PrimitiveValue = null | boolean | string | number;
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
+ }
2
32
  declare enum ProviderEvents {
3
33
  /**
4
34
  * The provider is ready to evaluate flags.
@@ -13,28 +43,26 @@ declare enum ProviderEvents {
13
43
  */
14
44
  ConfigurationChanged = "PROVIDER_CONFIGURATION_CHANGED",
15
45
  /**
16
- * The provider is transitioning to a state of unavailability.
17
- */
18
- Shutdown = "PROVIDER_SHUTDOWN"
19
- }
20
- interface EventData {
21
- flagKeysChanged?: string[];
22
- changeMetadata?: {
23
- [key: string]: boolean | string;
24
- };
25
- }
26
- declare enum ApiEvents {
27
- ProviderChanged = "providerChanged"
28
- }
29
- interface Eventing {
30
- addHandler(notificationType: string, handler: Handler): void;
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();
31
63
  }
32
- type EventContext = {
33
- notificationType: string;
34
- [key: string]: unknown;
35
- };
36
- type Handler = (eventContext?: EventContext) => void;
37
- type EventCallbackMessage = (eventContext: EventContext) => void;
64
+
65
+ type PrimitiveValue = null | boolean | string | number;
38
66
  type JsonObject = {
39
67
  [key: string]: JsonValue;
40
68
  };
@@ -82,7 +110,7 @@ declare const StandardResolutionReasons: {
82
110
  */
83
111
  readonly DISABLED: "DISABLED";
84
112
  /**
85
- * 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.
86
114
  */
87
115
  readonly DEFAULT: "DEFAULT";
88
116
  /**
@@ -135,27 +163,33 @@ declare enum ErrorCode {
135
163
  GENERAL = "GENERAL"
136
164
  }
137
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>;
138
172
  type ResolutionDetails<U> = {
139
173
  value: U;
140
174
  variant?: string;
175
+ flagMetadata?: FlagMetadata;
141
176
  reason?: ResolutionReason;
142
177
  errorCode?: ErrorCode;
143
178
  errorMessage?: string;
144
179
  };
145
180
  type EvaluationDetails<T extends FlagValue> = {
146
181
  flagKey: string;
182
+ flagMetadata: Readonly<FlagMetadata>;
147
183
  } & ResolutionDetails<T>;
148
184
  interface ManageContext<T> {
149
185
  /**
150
186
  * Access the evaluation context set on the receiver.
151
- *
152
187
  * @returns {EvaluationContext} Evaluation context
153
188
  */
154
189
  getContext(): EvaluationContext;
155
190
  /**
156
191
  * Sets evaluation context that will be used during flag evaluations
157
192
  * on this receiver.
158
- *
159
193
  * @template T The type of the receiver
160
194
  * @param {EvaluationContext} context Evaluation context
161
195
  * @returns {T} The receiver (this object)
@@ -168,7 +202,6 @@ interface ManageLogger<T> {
168
202
  * and is passed to various components in the SDK.
169
203
  * The logger configured on the global API object will be used for all evaluations,
170
204
  * unless overridden in a particular client.
171
- *
172
205
  * @template T The type of the receiver
173
206
  * @param {Logger} logger The logger to be used
174
207
  * @returns {T} The receiver (this object)
@@ -181,6 +214,7 @@ interface Metadata {
181
214
  interface ClientMetadata extends Metadata {
182
215
  readonly version?: string;
183
216
  readonly name?: string;
217
+ readonly providerMetadata: ProviderMetadata;
184
218
  }
185
219
  interface ProviderMetadata extends Metadata {
186
220
  readonly name: string;
@@ -211,7 +245,6 @@ interface ManageTransactionContextPropagator<T> extends TransactionContextPropag
211
245
  * Sets a transaction context propagator on this receiver. The transaction context
212
246
  * propagator is responsible for persisting context for the duration of a single
213
247
  * transaction.
214
- *
215
248
  * @experimental
216
249
  * @template T The type of the receiver
217
250
  * @param {TransactionContextPropagator} transactionContextPropagator The context propagator to be used
@@ -226,7 +259,6 @@ interface TransactionContextPropagator {
226
259
  *
227
260
  * Returns the currently defined transaction context using the registered transaction
228
261
  * context propagator.
229
- *
230
262
  * @experimental
231
263
  * @returns {TransactionContext} The current transaction context
232
264
  */
@@ -236,7 +268,6 @@ interface TransactionContextPropagator {
236
268
  * The OpenFeature Enhancement Proposal regarding transaction context can be found [here](https://github.com/open-feature/ofep/pull/32).
237
269
  *
238
270
  * Sets the transaction context using the registered transaction context propagator.
239
- *
240
271
  * @experimental
241
272
  * @template R The return value of the callback
242
273
  * @param {TransactionContext} transactionContext The transaction specific context
@@ -245,8 +276,29 @@ interface TransactionContextPropagator {
245
276
  */
246
277
  setTransactionContext<R>(transactionContext: TransactionContext, callback: (...args: unknown[]) => R, ...args: unknown[]): void;
247
278
  }
279
+ declare enum ProviderStatus {
280
+ NOT_READY = "NOT_READY",
281
+ READY = "READY",
282
+ ERROR = "ERROR"
283
+ }
248
284
  interface CommonProvider {
249
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>;
250
302
  }
251
303
 
252
304
  declare abstract class OpenFeatureError extends Error {
@@ -307,47 +359,70 @@ declare class NoopTransactionContextPropagator implements TransactionContextProp
307
359
  }
308
360
  declare const NOOP_TRANSACTION_CONTEXT_PROPAGATOR: NoopTransactionContextPropagator;
309
361
 
310
- declare abstract class OpenFeatureCommonAPI {
362
+ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider> implements Eventing {
311
363
  protected _transactionContextPropagator: TransactionContextPropagator;
312
364
  protected _context: EvaluationContext;
313
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>;
314
370
  abstract clearHooks(): this;
315
- 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;
316
377
  getContext(): EvaluationContext;
317
- setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI;
378
+ /**
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
384
+ */
385
+ addHandler(eventType: ProviderEvents, handler: EventHandler): void;
386
+ /**
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
390
+ */
391
+ removeHandler(eventType: ProviderEvents, handler: EventHandler): void;
392
+ /**
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
396
+ */
397
+ getHandlers(eventType: ProviderEvents): EventHandler[];
398
+ /**
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
405
+ */
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>;
318
422
  setTransactionContext<R>(transactionContext: TransactionContext, callback: (...args: unknown[]) => R, ...args: unknown[]): void;
319
423
  getTransactionContext(): TransactionContext;
320
424
  }
321
425
 
322
- // Type definitions for events 3.0
323
- // Project: https://github.com/Gozala/events
324
- // Definitions by: Yasunori Ohoka <https://github.com/yasupeke>
325
- // Shenwei Wang <https://github.com/weareoutman>
326
- // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
327
-
328
- type Listener = (...args: any[]) => void;
329
-
330
- declare class EventEmitter {
331
- static listenerCount(emitter: EventEmitter, type: string | number): number;
332
- static defaultMaxListeners: number;
333
-
334
- eventNames(): Array<string | number>;
335
- setMaxListeners(n: number): this;
336
- getMaxListeners(): number;
337
- emit(type: string | number, ...args: any[]): boolean;
338
- addListener(type: string | number, listener: Listener): this;
339
- on(type: string | number, listener: Listener): this;
340
- once(type: string | number, listener: Listener): this;
341
- prependListener(type: string | number, listener: Listener): this;
342
- prependOnceListener(type: string | number, listener: Listener): this;
343
- removeListener(type: string | number, listener: Listener): this;
344
- off(type: string | number, listener: Listener): this;
345
- removeAllListeners(type?: string | number): this;
346
- listeners(type: string | number): Listener[];
347
- listenerCount(type: string | number): number;
348
- rawListeners(type: string | number): Listener[];
349
- }
350
-
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.1-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.2"
49
+ "@openfeature/shared": "*"
50
50
  },
51
51
  "typedoc": {
52
52
  "displayName": "OpenFeature Web SDK",