@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 CHANGED
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __defProps = Object.defineProperties;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
8
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
8
10
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
11
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
12
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -20,6 +22,9 @@ var __spreadValues = (a, b) => {
20
22
  return a;
21
23
  };
22
24
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __commonJS = (cb, mod) => function __require() {
26
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
27
+ };
23
28
  var __export = (target, all) => {
24
29
  for (var name in all)
25
30
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -32,6 +37,14 @@ var __copyProps = (to, from, except, desc) => {
32
37
  }
33
38
  return to;
34
39
  };
40
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
41
+ // If the importer is in node compatibility mode or this is not an ESM
42
+ // file that has been converted to a CommonJS file using a Babel-
43
+ // compatible transform (i.e. "__esModule" has not been set), then set
44
+ // "default" to the CommonJS "module.exports" for node compatibility.
45
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
46
+ mod
47
+ ));
35
48
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
49
  var __async = (__this, __arguments, generator) => {
37
50
  return new Promise((resolve, reject) => {
@@ -54,6 +67,378 @@ var __async = (__this, __arguments, generator) => {
54
67
  });
55
68
  };
56
69
 
70
+ // ../../node_modules/events/events.js
71
+ var require_events = __commonJS({
72
+ "../../node_modules/events/events.js"(exports, module2) {
73
+ "use strict";
74
+ var R = typeof Reflect === "object" ? Reflect : null;
75
+ var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) {
76
+ return Function.prototype.apply.call(target, receiver, args);
77
+ };
78
+ var ReflectOwnKeys;
79
+ if (R && typeof R.ownKeys === "function") {
80
+ ReflectOwnKeys = R.ownKeys;
81
+ } else if (Object.getOwnPropertySymbols) {
82
+ ReflectOwnKeys = function ReflectOwnKeys2(target) {
83
+ return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
84
+ };
85
+ } else {
86
+ ReflectOwnKeys = function ReflectOwnKeys2(target) {
87
+ return Object.getOwnPropertyNames(target);
88
+ };
89
+ }
90
+ function ProcessEmitWarning(warning) {
91
+ if (console && console.warn)
92
+ console.warn(warning);
93
+ }
94
+ var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
95
+ return value !== value;
96
+ };
97
+ function EventEmitter2() {
98
+ EventEmitter2.init.call(this);
99
+ }
100
+ module2.exports = EventEmitter2;
101
+ module2.exports.once = once;
102
+ EventEmitter2.EventEmitter = EventEmitter2;
103
+ EventEmitter2.prototype._events = void 0;
104
+ EventEmitter2.prototype._eventsCount = 0;
105
+ EventEmitter2.prototype._maxListeners = void 0;
106
+ var defaultMaxListeners = 10;
107
+ function checkListener(listener) {
108
+ if (typeof listener !== "function") {
109
+ throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
110
+ }
111
+ }
112
+ Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
113
+ enumerable: true,
114
+ get: function() {
115
+ return defaultMaxListeners;
116
+ },
117
+ set: function(arg) {
118
+ if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) {
119
+ throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + ".");
120
+ }
121
+ defaultMaxListeners = arg;
122
+ }
123
+ });
124
+ EventEmitter2.init = function() {
125
+ if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
126
+ this._events = /* @__PURE__ */ Object.create(null);
127
+ this._eventsCount = 0;
128
+ }
129
+ this._maxListeners = this._maxListeners || void 0;
130
+ };
131
+ EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) {
132
+ if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
133
+ throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
134
+ }
135
+ this._maxListeners = n;
136
+ return this;
137
+ };
138
+ function _getMaxListeners(that) {
139
+ if (that._maxListeners === void 0)
140
+ return EventEmitter2.defaultMaxListeners;
141
+ return that._maxListeners;
142
+ }
143
+ EventEmitter2.prototype.getMaxListeners = function getMaxListeners() {
144
+ return _getMaxListeners(this);
145
+ };
146
+ EventEmitter2.prototype.emit = function emit(type) {
147
+ var args = [];
148
+ for (var i = 1; i < arguments.length; i++)
149
+ args.push(arguments[i]);
150
+ var doError = type === "error";
151
+ var events = this._events;
152
+ if (events !== void 0)
153
+ doError = doError && events.error === void 0;
154
+ else if (!doError)
155
+ return false;
156
+ if (doError) {
157
+ var er;
158
+ if (args.length > 0)
159
+ er = args[0];
160
+ if (er instanceof Error) {
161
+ throw er;
162
+ }
163
+ var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : ""));
164
+ err.context = er;
165
+ throw err;
166
+ }
167
+ var handler = events[type];
168
+ if (handler === void 0)
169
+ return false;
170
+ if (typeof handler === "function") {
171
+ ReflectApply(handler, this, args);
172
+ } else {
173
+ var len = handler.length;
174
+ var listeners = arrayClone(handler, len);
175
+ for (var i = 0; i < len; ++i)
176
+ ReflectApply(listeners[i], this, args);
177
+ }
178
+ return true;
179
+ };
180
+ function _addListener(target, type, listener, prepend) {
181
+ var m;
182
+ var events;
183
+ var existing;
184
+ checkListener(listener);
185
+ events = target._events;
186
+ if (events === void 0) {
187
+ events = target._events = /* @__PURE__ */ Object.create(null);
188
+ target._eventsCount = 0;
189
+ } else {
190
+ if (events.newListener !== void 0) {
191
+ target.emit(
192
+ "newListener",
193
+ type,
194
+ listener.listener ? listener.listener : listener
195
+ );
196
+ events = target._events;
197
+ }
198
+ existing = events[type];
199
+ }
200
+ if (existing === void 0) {
201
+ existing = events[type] = listener;
202
+ ++target._eventsCount;
203
+ } else {
204
+ if (typeof existing === "function") {
205
+ existing = events[type] = prepend ? [listener, existing] : [existing, listener];
206
+ } else if (prepend) {
207
+ existing.unshift(listener);
208
+ } else {
209
+ existing.push(listener);
210
+ }
211
+ m = _getMaxListeners(target);
212
+ if (m > 0 && existing.length > m && !existing.warned) {
213
+ existing.warned = true;
214
+ var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit");
215
+ w.name = "MaxListenersExceededWarning";
216
+ w.emitter = target;
217
+ w.type = type;
218
+ w.count = existing.length;
219
+ ProcessEmitWarning(w);
220
+ }
221
+ }
222
+ return target;
223
+ }
224
+ EventEmitter2.prototype.addListener = function addListener(type, listener) {
225
+ return _addListener(this, type, listener, false);
226
+ };
227
+ EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
228
+ EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
229
+ return _addListener(this, type, listener, true);
230
+ };
231
+ function onceWrapper() {
232
+ if (!this.fired) {
233
+ this.target.removeListener(this.type, this.wrapFn);
234
+ this.fired = true;
235
+ if (arguments.length === 0)
236
+ return this.listener.call(this.target);
237
+ return this.listener.apply(this.target, arguments);
238
+ }
239
+ }
240
+ function _onceWrap(target, type, listener) {
241
+ var state = { fired: false, wrapFn: void 0, target, type, listener };
242
+ var wrapped = onceWrapper.bind(state);
243
+ wrapped.listener = listener;
244
+ state.wrapFn = wrapped;
245
+ return wrapped;
246
+ }
247
+ EventEmitter2.prototype.once = function once2(type, listener) {
248
+ checkListener(listener);
249
+ this.on(type, _onceWrap(this, type, listener));
250
+ return this;
251
+ };
252
+ EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type, listener) {
253
+ checkListener(listener);
254
+ this.prependListener(type, _onceWrap(this, type, listener));
255
+ return this;
256
+ };
257
+ EventEmitter2.prototype.removeListener = function removeListener(type, listener) {
258
+ var list, events, position, i, originalListener;
259
+ checkListener(listener);
260
+ events = this._events;
261
+ if (events === void 0)
262
+ return this;
263
+ list = events[type];
264
+ if (list === void 0)
265
+ return this;
266
+ if (list === listener || list.listener === listener) {
267
+ if (--this._eventsCount === 0)
268
+ this._events = /* @__PURE__ */ Object.create(null);
269
+ else {
270
+ delete events[type];
271
+ if (events.removeListener)
272
+ this.emit("removeListener", type, list.listener || listener);
273
+ }
274
+ } else if (typeof list !== "function") {
275
+ position = -1;
276
+ for (i = list.length - 1; i >= 0; i--) {
277
+ if (list[i] === listener || list[i].listener === listener) {
278
+ originalListener = list[i].listener;
279
+ position = i;
280
+ break;
281
+ }
282
+ }
283
+ if (position < 0)
284
+ return this;
285
+ if (position === 0)
286
+ list.shift();
287
+ else {
288
+ spliceOne(list, position);
289
+ }
290
+ if (list.length === 1)
291
+ events[type] = list[0];
292
+ if (events.removeListener !== void 0)
293
+ this.emit("removeListener", type, originalListener || listener);
294
+ }
295
+ return this;
296
+ };
297
+ EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
298
+ EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type) {
299
+ var listeners, events, i;
300
+ events = this._events;
301
+ if (events === void 0)
302
+ return this;
303
+ if (events.removeListener === void 0) {
304
+ if (arguments.length === 0) {
305
+ this._events = /* @__PURE__ */ Object.create(null);
306
+ this._eventsCount = 0;
307
+ } else if (events[type] !== void 0) {
308
+ if (--this._eventsCount === 0)
309
+ this._events = /* @__PURE__ */ Object.create(null);
310
+ else
311
+ delete events[type];
312
+ }
313
+ return this;
314
+ }
315
+ if (arguments.length === 0) {
316
+ var keys = Object.keys(events);
317
+ var key;
318
+ for (i = 0; i < keys.length; ++i) {
319
+ key = keys[i];
320
+ if (key === "removeListener")
321
+ continue;
322
+ this.removeAllListeners(key);
323
+ }
324
+ this.removeAllListeners("removeListener");
325
+ this._events = /* @__PURE__ */ Object.create(null);
326
+ this._eventsCount = 0;
327
+ return this;
328
+ }
329
+ listeners = events[type];
330
+ if (typeof listeners === "function") {
331
+ this.removeListener(type, listeners);
332
+ } else if (listeners !== void 0) {
333
+ for (i = listeners.length - 1; i >= 0; i--) {
334
+ this.removeListener(type, listeners[i]);
335
+ }
336
+ }
337
+ return this;
338
+ };
339
+ function _listeners(target, type, unwrap) {
340
+ var events = target._events;
341
+ if (events === void 0)
342
+ return [];
343
+ var evlistener = events[type];
344
+ if (evlistener === void 0)
345
+ return [];
346
+ if (typeof evlistener === "function")
347
+ return unwrap ? [evlistener.listener || evlistener] : [evlistener];
348
+ return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
349
+ }
350
+ EventEmitter2.prototype.listeners = function listeners(type) {
351
+ return _listeners(this, type, true);
352
+ };
353
+ EventEmitter2.prototype.rawListeners = function rawListeners(type) {
354
+ return _listeners(this, type, false);
355
+ };
356
+ EventEmitter2.listenerCount = function(emitter, type) {
357
+ if (typeof emitter.listenerCount === "function") {
358
+ return emitter.listenerCount(type);
359
+ } else {
360
+ return listenerCount.call(emitter, type);
361
+ }
362
+ };
363
+ EventEmitter2.prototype.listenerCount = listenerCount;
364
+ function listenerCount(type) {
365
+ var events = this._events;
366
+ if (events !== void 0) {
367
+ var evlistener = events[type];
368
+ if (typeof evlistener === "function") {
369
+ return 1;
370
+ } else if (evlistener !== void 0) {
371
+ return evlistener.length;
372
+ }
373
+ }
374
+ return 0;
375
+ }
376
+ EventEmitter2.prototype.eventNames = function eventNames() {
377
+ return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
378
+ };
379
+ function arrayClone(arr, n) {
380
+ var copy = new Array(n);
381
+ for (var i = 0; i < n; ++i)
382
+ copy[i] = arr[i];
383
+ return copy;
384
+ }
385
+ function spliceOne(list, index) {
386
+ for (; index + 1 < list.length; index++)
387
+ list[index] = list[index + 1];
388
+ list.pop();
389
+ }
390
+ function unwrapListeners(arr) {
391
+ var ret = new Array(arr.length);
392
+ for (var i = 0; i < ret.length; ++i) {
393
+ ret[i] = arr[i].listener || arr[i];
394
+ }
395
+ return ret;
396
+ }
397
+ function once(emitter, name) {
398
+ return new Promise(function(resolve, reject) {
399
+ function errorListener(err) {
400
+ emitter.removeListener(name, resolver);
401
+ reject(err);
402
+ }
403
+ function resolver() {
404
+ if (typeof emitter.removeListener === "function") {
405
+ emitter.removeListener("error", errorListener);
406
+ }
407
+ resolve([].slice.call(arguments));
408
+ }
409
+ ;
410
+ eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
411
+ if (name !== "error") {
412
+ addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
413
+ }
414
+ });
415
+ }
416
+ function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
417
+ if (typeof emitter.on === "function") {
418
+ eventTargetAgnosticAddListener(emitter, "error", handler, flags);
419
+ }
420
+ }
421
+ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
422
+ if (typeof emitter.on === "function") {
423
+ if (flags.once) {
424
+ emitter.once(name, listener);
425
+ } else {
426
+ emitter.on(name, listener);
427
+ }
428
+ } else if (typeof emitter.addEventListener === "function") {
429
+ emitter.addEventListener(name, function wrapListener(arg) {
430
+ if (flags.once) {
431
+ emitter.removeEventListener(name, wrapListener);
432
+ }
433
+ listener(arg);
434
+ });
435
+ } else {
436
+ throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
437
+ }
438
+ }
439
+ }
440
+ });
441
+
57
442
  // src/index.ts
58
443
  var src_exports = {};
59
444
  __export(src_exports, {
@@ -305,6 +690,9 @@ var OpenFeatureCommonAPI = class {
305
690
  }
306
691
  };
307
692
 
693
+ // src/open-feature.ts
694
+ var import_events = __toESM(require_events());
695
+
308
696
  // src/no-op-provider.ts
309
697
  var REASON_NO_OP = "No-op";
310
698
  var NoopFeatureProvider = class {
@@ -341,6 +729,8 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
341
729
  // eslint-disable-next-line @typescript-eslint/no-empty-function
342
730
  constructor() {
343
731
  super();
732
+ this._apiEvents = new import_events.EventEmitter();
733
+ this._providerReady = false;
344
734
  this._hooks = [];
345
735
  this._provider = NOOP_PROVIDER;
346
736
  }
@@ -391,12 +781,29 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
391
781
  });
392
782
  }
393
783
  setProvider(provider) {
394
- var _a;
784
+ var _a, _b, _c, _d, _e, _f, _g;
395
785
  if (this._provider !== provider) {
396
786
  const oldProvider = this._provider;
397
787
  this._provider = provider;
398
- window.dispatchEvent(new CustomEvent("providerChanged" /* ProviderChanged */));
399
- (_a = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _a.call(oldProvider);
788
+ this._providerReady = false;
789
+ if (!this._provider.events) {
790
+ this._provider.events = new import_events.EventEmitter();
791
+ }
792
+ if (typeof ((_a = this._provider) == null ? void 0 : _a.initialize) === "function") {
793
+ (_e = (_d = (_c = (_b = this._provider).initialize) == null ? void 0 : _c.call(_b, this._context)) == null ? void 0 : _d.then(() => {
794
+ var _a2;
795
+ this._providerReady = true;
796
+ (_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */);
797
+ })) == null ? void 0 : _e.catch(() => {
798
+ var _a2;
799
+ (_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */);
800
+ });
801
+ } else {
802
+ this._providerReady = true;
803
+ (_f = this._provider.events) == null ? void 0 : _f.emit("PROVIDER_READY" /* Ready */);
804
+ }
805
+ this._apiEvents.emit("providerChanged" /* ProviderChanged */);
806
+ (_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider);
400
807
  }
401
808
  return this;
402
809
  }
@@ -406,12 +813,15 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
406
813
  yield (_b = (_a = this == null ? void 0 : this._provider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
407
814
  });
408
815
  }
409
- getClient(name, version, context) {
816
+ getClient(name, version) {
410
817
  return new OpenFeatureClient(
818
+ // functions are passed here to make sure that these values are always up to date,
819
+ // and so we don't have to make these public properties on the API class.
411
820
  () => this._provider,
821
+ () => this._providerReady,
822
+ () => this._apiEvents,
412
823
  () => this._logger,
413
- { name, version },
414
- context
824
+ { name, version }
415
825
  );
416
826
  }
417
827
  };
@@ -419,8 +829,9 @@ var OpenFeature = OpenFeatureAPI.getInstance();
419
829
 
420
830
  // src/client.ts
421
831
  var OpenFeatureClient = class {
422
- constructor(providerAccessor, globalLogger, options, context = {}) {
832
+ constructor(providerAccessor, providerReady, apiEvents, globalLogger, options) {
423
833
  this.providerAccessor = providerAccessor;
834
+ this.providerReady = providerReady;
424
835
  this.globalLogger = globalLogger;
425
836
  this._hooks = [];
426
837
  this._handlerWrappers = [];
@@ -428,13 +839,14 @@ var OpenFeatureClient = class {
428
839
  name: options.name,
429
840
  version: options.version
430
841
  };
431
- this._context = context;
432
842
  this.attachListeners();
433
- window.dispatchEvent(new CustomEvent("providerChanged" /* ProviderChanged */));
843
+ apiEvents().on("providerChanged" /* ProviderChanged */, () => {
844
+ this.attachListeners();
845
+ });
434
846
  }
435
847
  addHandler(eventType, handler) {
436
848
  this._handlerWrappers.push({ eventType, handler });
437
- if (eventType === "PROVIDER_READY" /* Ready */ && this.providerAccessor().ready) {
849
+ if (eventType === "PROVIDER_READY" /* Ready */ && this.providerReady()) {
438
850
  handler();
439
851
  }
440
852
  }
@@ -453,54 +865,51 @@ var OpenFeatureClient = class {
453
865
  this._hooks = [];
454
866
  return this;
455
867
  }
456
- getBooleanValue(flagKey, defaultValue, context, options) {
457
- return this.getBooleanDetails(flagKey, defaultValue, context, options).value;
868
+ getBooleanValue(flagKey, defaultValue, options) {
869
+ return this.getBooleanDetails(flagKey, defaultValue, options).value;
458
870
  }
459
- getBooleanDetails(flagKey, defaultValue, context, options) {
871
+ getBooleanDetails(flagKey, defaultValue, options) {
460
872
  return this.evaluate(
461
873
  flagKey,
462
874
  this._provider.resolveBooleanEvaluation,
463
875
  defaultValue,
464
876
  "boolean",
465
- context,
466
877
  options
467
878
  );
468
879
  }
469
- getStringValue(flagKey, defaultValue, context, options) {
470
- return this.getStringDetails(flagKey, defaultValue, context, options).value;
880
+ getStringValue(flagKey, defaultValue, options) {
881
+ return this.getStringDetails(flagKey, defaultValue, options).value;
471
882
  }
472
- getStringDetails(flagKey, defaultValue, context, options) {
883
+ getStringDetails(flagKey, defaultValue, options) {
473
884
  return this.evaluate(
474
885
  flagKey,
475
886
  // this isolates providers from our restricted string generic argument.
476
887
  this._provider.resolveStringEvaluation,
477
888
  defaultValue,
478
889
  "string",
479
- context,
480
890
  options
481
891
  );
482
892
  }
483
- getNumberValue(flagKey, defaultValue, context, options) {
484
- return this.getNumberDetails(flagKey, defaultValue, context, options).value;
893
+ getNumberValue(flagKey, defaultValue, options) {
894
+ return this.getNumberDetails(flagKey, defaultValue, options).value;
485
895
  }
486
- getNumberDetails(flagKey, defaultValue, context, options) {
896
+ getNumberDetails(flagKey, defaultValue, options) {
487
897
  return this.evaluate(
488
898
  flagKey,
489
899
  // this isolates providers from our restricted number generic argument.
490
900
  this._provider.resolveNumberEvaluation,
491
901
  defaultValue,
492
902
  "number",
493
- context,
494
903
  options
495
904
  );
496
905
  }
497
- getObjectValue(flagKey, defaultValue, context, options) {
498
- return this.getObjectDetails(flagKey, defaultValue, context, options).value;
906
+ getObjectValue(flagKey, defaultValue, options) {
907
+ return this.getObjectDetails(flagKey, defaultValue, options).value;
499
908
  }
500
- getObjectDetails(flagKey, defaultValue, context, options) {
501
- return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", context, options);
909
+ getObjectDetails(flagKey, defaultValue, options) {
910
+ return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", options);
502
911
  }
503
- evaluate(flagKey, resolver, defaultValue, flagType, invocationContext = {}, options = {}) {
912
+ evaluate(flagKey, resolver, defaultValue, flagType, options = {}) {
504
913
  const allHooks = [
505
914
  ...OpenFeature.getHooks(),
506
915
  ...this.getHooks(),
@@ -508,19 +917,19 @@ var OpenFeatureClient = class {
508
917
  ...this._provider.hooks || []
509
918
  ];
510
919
  const allHooksReversed = [...allHooks].reverse();
511
- const mergedContext = __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, OpenFeature.getContext()), OpenFeature.getTransactionContext()), this._context), invocationContext);
920
+ const context = __spreadValues({}, OpenFeature.getContext());
512
921
  const hookContext = {
513
922
  flagKey,
514
923
  defaultValue,
515
924
  flagValueType: flagType,
516
925
  clientMetadata: this.metadata,
517
926
  providerMetadata: OpenFeature.providerMetadata,
518
- context: mergedContext,
927
+ context,
519
928
  logger: this._logger
520
929
  };
521
930
  try {
522
- const frozenContext = this.beforeHooks(allHooks, hookContext, options);
523
- const resolution = resolver.call(this._provider, flagKey, defaultValue, frozenContext, this._logger);
931
+ this.beforeHooks(allHooks, hookContext, options);
932
+ const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);
524
933
  const evaluationDetails = __spreadProps(__spreadValues({}, resolution), {
525
934
  flagKey
526
935
  });
@@ -590,9 +999,12 @@ var OpenFeatureClient = class {
590
999
  return this._clientLogger || this.globalLogger();
591
1000
  }
592
1001
  attachListeners() {
593
- Object.values(ProviderEvents).forEach((eventType) => window.addEventListener(eventType, () => {
594
- this._handlerWrappers.filter((wrapper) => wrapper.eventType === eventType).forEach((wrapper) => wrapper.handler());
595
- }));
1002
+ Object.values(ProviderEvents).forEach((eventType) => {
1003
+ var _a;
1004
+ return (_a = this._provider.events) == null ? void 0 : _a.on(eventType, () => {
1005
+ this._handlerWrappers.filter((wrapper) => wrapper.eventType === eventType).forEach((wrapper) => wrapper.handler());
1006
+ });
1007
+ });
596
1008
  }
597
1009
  };
598
1010
  //# sourceMappingURL=index.js.map