@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/esm/index.js CHANGED
@@ -1,7 +1,11 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
5
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
7
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
5
9
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
10
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
11
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -17,6 +21,25 @@ var __spreadValues = (a, b) => {
17
21
  return a;
18
22
  };
19
23
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __commonJS = (cb, mod) => function __require() {
25
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
36
+ // If the importer is in node compatibility mode or this is not an ESM
37
+ // file that has been converted to a CommonJS file using a Babel-
38
+ // compatible transform (i.e. "__esModule" has not been set), then set
39
+ // "default" to the CommonJS "module.exports" for node compatibility.
40
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
41
+ mod
42
+ ));
20
43
  var __async = (__this, __arguments, generator) => {
21
44
  return new Promise((resolve, reject) => {
22
45
  var fulfilled = (value) => {
@@ -38,6 +61,378 @@ var __async = (__this, __arguments, generator) => {
38
61
  });
39
62
  };
40
63
 
64
+ // ../../node_modules/events/events.js
65
+ var require_events = __commonJS({
66
+ "../../node_modules/events/events.js"(exports, module) {
67
+ "use strict";
68
+ var R = typeof Reflect === "object" ? Reflect : null;
69
+ var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target, receiver, args) {
70
+ return Function.prototype.apply.call(target, receiver, args);
71
+ };
72
+ var ReflectOwnKeys;
73
+ if (R && typeof R.ownKeys === "function") {
74
+ ReflectOwnKeys = R.ownKeys;
75
+ } else if (Object.getOwnPropertySymbols) {
76
+ ReflectOwnKeys = function ReflectOwnKeys2(target) {
77
+ return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));
78
+ };
79
+ } else {
80
+ ReflectOwnKeys = function ReflectOwnKeys2(target) {
81
+ return Object.getOwnPropertyNames(target);
82
+ };
83
+ }
84
+ function ProcessEmitWarning(warning) {
85
+ if (console && console.warn)
86
+ console.warn(warning);
87
+ }
88
+ var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
89
+ return value !== value;
90
+ };
91
+ function EventEmitter2() {
92
+ EventEmitter2.init.call(this);
93
+ }
94
+ module.exports = EventEmitter2;
95
+ module.exports.once = once;
96
+ EventEmitter2.EventEmitter = EventEmitter2;
97
+ EventEmitter2.prototype._events = void 0;
98
+ EventEmitter2.prototype._eventsCount = 0;
99
+ EventEmitter2.prototype._maxListeners = void 0;
100
+ var defaultMaxListeners = 10;
101
+ function checkListener(listener) {
102
+ if (typeof listener !== "function") {
103
+ throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
104
+ }
105
+ }
106
+ Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
107
+ enumerable: true,
108
+ get: function() {
109
+ return defaultMaxListeners;
110
+ },
111
+ set: function(arg) {
112
+ if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) {
113
+ throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + ".");
114
+ }
115
+ defaultMaxListeners = arg;
116
+ }
117
+ });
118
+ EventEmitter2.init = function() {
119
+ if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
120
+ this._events = /* @__PURE__ */ Object.create(null);
121
+ this._eventsCount = 0;
122
+ }
123
+ this._maxListeners = this._maxListeners || void 0;
124
+ };
125
+ EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) {
126
+ if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
127
+ throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
128
+ }
129
+ this._maxListeners = n;
130
+ return this;
131
+ };
132
+ function _getMaxListeners(that) {
133
+ if (that._maxListeners === void 0)
134
+ return EventEmitter2.defaultMaxListeners;
135
+ return that._maxListeners;
136
+ }
137
+ EventEmitter2.prototype.getMaxListeners = function getMaxListeners() {
138
+ return _getMaxListeners(this);
139
+ };
140
+ EventEmitter2.prototype.emit = function emit(type) {
141
+ var args = [];
142
+ for (var i = 1; i < arguments.length; i++)
143
+ args.push(arguments[i]);
144
+ var doError = type === "error";
145
+ var events = this._events;
146
+ if (events !== void 0)
147
+ doError = doError && events.error === void 0;
148
+ else if (!doError)
149
+ return false;
150
+ if (doError) {
151
+ var er;
152
+ if (args.length > 0)
153
+ er = args[0];
154
+ if (er instanceof Error) {
155
+ throw er;
156
+ }
157
+ var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : ""));
158
+ err.context = er;
159
+ throw err;
160
+ }
161
+ var handler = events[type];
162
+ if (handler === void 0)
163
+ return false;
164
+ if (typeof handler === "function") {
165
+ ReflectApply(handler, this, args);
166
+ } else {
167
+ var len = handler.length;
168
+ var listeners = arrayClone(handler, len);
169
+ for (var i = 0; i < len; ++i)
170
+ ReflectApply(listeners[i], this, args);
171
+ }
172
+ return true;
173
+ };
174
+ function _addListener(target, type, listener, prepend) {
175
+ var m;
176
+ var events;
177
+ var existing;
178
+ checkListener(listener);
179
+ events = target._events;
180
+ if (events === void 0) {
181
+ events = target._events = /* @__PURE__ */ Object.create(null);
182
+ target._eventsCount = 0;
183
+ } else {
184
+ if (events.newListener !== void 0) {
185
+ target.emit(
186
+ "newListener",
187
+ type,
188
+ listener.listener ? listener.listener : listener
189
+ );
190
+ events = target._events;
191
+ }
192
+ existing = events[type];
193
+ }
194
+ if (existing === void 0) {
195
+ existing = events[type] = listener;
196
+ ++target._eventsCount;
197
+ } else {
198
+ if (typeof existing === "function") {
199
+ existing = events[type] = prepend ? [listener, existing] : [existing, listener];
200
+ } else if (prepend) {
201
+ existing.unshift(listener);
202
+ } else {
203
+ existing.push(listener);
204
+ }
205
+ m = _getMaxListeners(target);
206
+ if (m > 0 && existing.length > m && !existing.warned) {
207
+ existing.warned = true;
208
+ var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit");
209
+ w.name = "MaxListenersExceededWarning";
210
+ w.emitter = target;
211
+ w.type = type;
212
+ w.count = existing.length;
213
+ ProcessEmitWarning(w);
214
+ }
215
+ }
216
+ return target;
217
+ }
218
+ EventEmitter2.prototype.addListener = function addListener(type, listener) {
219
+ return _addListener(this, type, listener, false);
220
+ };
221
+ EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
222
+ EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
223
+ return _addListener(this, type, listener, true);
224
+ };
225
+ function onceWrapper() {
226
+ if (!this.fired) {
227
+ this.target.removeListener(this.type, this.wrapFn);
228
+ this.fired = true;
229
+ if (arguments.length === 0)
230
+ return this.listener.call(this.target);
231
+ return this.listener.apply(this.target, arguments);
232
+ }
233
+ }
234
+ function _onceWrap(target, type, listener) {
235
+ var state = { fired: false, wrapFn: void 0, target, type, listener };
236
+ var wrapped = onceWrapper.bind(state);
237
+ wrapped.listener = listener;
238
+ state.wrapFn = wrapped;
239
+ return wrapped;
240
+ }
241
+ EventEmitter2.prototype.once = function once2(type, listener) {
242
+ checkListener(listener);
243
+ this.on(type, _onceWrap(this, type, listener));
244
+ return this;
245
+ };
246
+ EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type, listener) {
247
+ checkListener(listener);
248
+ this.prependListener(type, _onceWrap(this, type, listener));
249
+ return this;
250
+ };
251
+ EventEmitter2.prototype.removeListener = function removeListener(type, listener) {
252
+ var list, events, position, i, originalListener;
253
+ checkListener(listener);
254
+ events = this._events;
255
+ if (events === void 0)
256
+ return this;
257
+ list = events[type];
258
+ if (list === void 0)
259
+ return this;
260
+ if (list === listener || list.listener === listener) {
261
+ if (--this._eventsCount === 0)
262
+ this._events = /* @__PURE__ */ Object.create(null);
263
+ else {
264
+ delete events[type];
265
+ if (events.removeListener)
266
+ this.emit("removeListener", type, list.listener || listener);
267
+ }
268
+ } else if (typeof list !== "function") {
269
+ position = -1;
270
+ for (i = list.length - 1; i >= 0; i--) {
271
+ if (list[i] === listener || list[i].listener === listener) {
272
+ originalListener = list[i].listener;
273
+ position = i;
274
+ break;
275
+ }
276
+ }
277
+ if (position < 0)
278
+ return this;
279
+ if (position === 0)
280
+ list.shift();
281
+ else {
282
+ spliceOne(list, position);
283
+ }
284
+ if (list.length === 1)
285
+ events[type] = list[0];
286
+ if (events.removeListener !== void 0)
287
+ this.emit("removeListener", type, originalListener || listener);
288
+ }
289
+ return this;
290
+ };
291
+ EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
292
+ EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type) {
293
+ var listeners, events, i;
294
+ events = this._events;
295
+ if (events === void 0)
296
+ return this;
297
+ if (events.removeListener === void 0) {
298
+ if (arguments.length === 0) {
299
+ this._events = /* @__PURE__ */ Object.create(null);
300
+ this._eventsCount = 0;
301
+ } else if (events[type] !== void 0) {
302
+ if (--this._eventsCount === 0)
303
+ this._events = /* @__PURE__ */ Object.create(null);
304
+ else
305
+ delete events[type];
306
+ }
307
+ return this;
308
+ }
309
+ if (arguments.length === 0) {
310
+ var keys = Object.keys(events);
311
+ var key;
312
+ for (i = 0; i < keys.length; ++i) {
313
+ key = keys[i];
314
+ if (key === "removeListener")
315
+ continue;
316
+ this.removeAllListeners(key);
317
+ }
318
+ this.removeAllListeners("removeListener");
319
+ this._events = /* @__PURE__ */ Object.create(null);
320
+ this._eventsCount = 0;
321
+ return this;
322
+ }
323
+ listeners = events[type];
324
+ if (typeof listeners === "function") {
325
+ this.removeListener(type, listeners);
326
+ } else if (listeners !== void 0) {
327
+ for (i = listeners.length - 1; i >= 0; i--) {
328
+ this.removeListener(type, listeners[i]);
329
+ }
330
+ }
331
+ return this;
332
+ };
333
+ function _listeners(target, type, unwrap) {
334
+ var events = target._events;
335
+ if (events === void 0)
336
+ return [];
337
+ var evlistener = events[type];
338
+ if (evlistener === void 0)
339
+ return [];
340
+ if (typeof evlistener === "function")
341
+ return unwrap ? [evlistener.listener || evlistener] : [evlistener];
342
+ return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
343
+ }
344
+ EventEmitter2.prototype.listeners = function listeners(type) {
345
+ return _listeners(this, type, true);
346
+ };
347
+ EventEmitter2.prototype.rawListeners = function rawListeners(type) {
348
+ return _listeners(this, type, false);
349
+ };
350
+ EventEmitter2.listenerCount = function(emitter, type) {
351
+ if (typeof emitter.listenerCount === "function") {
352
+ return emitter.listenerCount(type);
353
+ } else {
354
+ return listenerCount.call(emitter, type);
355
+ }
356
+ };
357
+ EventEmitter2.prototype.listenerCount = listenerCount;
358
+ function listenerCount(type) {
359
+ var events = this._events;
360
+ if (events !== void 0) {
361
+ var evlistener = events[type];
362
+ if (typeof evlistener === "function") {
363
+ return 1;
364
+ } else if (evlistener !== void 0) {
365
+ return evlistener.length;
366
+ }
367
+ }
368
+ return 0;
369
+ }
370
+ EventEmitter2.prototype.eventNames = function eventNames() {
371
+ return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
372
+ };
373
+ function arrayClone(arr, n) {
374
+ var copy = new Array(n);
375
+ for (var i = 0; i < n; ++i)
376
+ copy[i] = arr[i];
377
+ return copy;
378
+ }
379
+ function spliceOne(list, index) {
380
+ for (; index + 1 < list.length; index++)
381
+ list[index] = list[index + 1];
382
+ list.pop();
383
+ }
384
+ function unwrapListeners(arr) {
385
+ var ret = new Array(arr.length);
386
+ for (var i = 0; i < ret.length; ++i) {
387
+ ret[i] = arr[i].listener || arr[i];
388
+ }
389
+ return ret;
390
+ }
391
+ function once(emitter, name) {
392
+ return new Promise(function(resolve, reject) {
393
+ function errorListener(err) {
394
+ emitter.removeListener(name, resolver);
395
+ reject(err);
396
+ }
397
+ function resolver() {
398
+ if (typeof emitter.removeListener === "function") {
399
+ emitter.removeListener("error", errorListener);
400
+ }
401
+ resolve([].slice.call(arguments));
402
+ }
403
+ ;
404
+ eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
405
+ if (name !== "error") {
406
+ addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
407
+ }
408
+ });
409
+ }
410
+ function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
411
+ if (typeof emitter.on === "function") {
412
+ eventTargetAgnosticAddListener(emitter, "error", handler, flags);
413
+ }
414
+ }
415
+ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
416
+ if (typeof emitter.on === "function") {
417
+ if (flags.once) {
418
+ emitter.once(name, listener);
419
+ } else {
420
+ emitter.on(name, listener);
421
+ }
422
+ } else if (typeof emitter.addEventListener === "function") {
423
+ emitter.addEventListener(name, function wrapListener(arg) {
424
+ if (flags.once) {
425
+ emitter.removeEventListener(name, wrapListener);
426
+ }
427
+ listener(arg);
428
+ });
429
+ } else {
430
+ throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
431
+ }
432
+ }
433
+ }
434
+ });
435
+
41
436
  // ../shared/src/types.ts
42
437
  var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
43
438
  ProviderEvents2["Ready"] = "PROVIDER_READY";
@@ -264,6 +659,9 @@ var OpenFeatureCommonAPI = class {
264
659
  }
265
660
  };
266
661
 
662
+ // src/open-feature.ts
663
+ var import_events = __toESM(require_events());
664
+
267
665
  // src/no-op-provider.ts
268
666
  var REASON_NO_OP = "No-op";
269
667
  var NoopFeatureProvider = class {
@@ -300,6 +698,8 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
300
698
  // eslint-disable-next-line @typescript-eslint/no-empty-function
301
699
  constructor() {
302
700
  super();
701
+ this._apiEvents = new import_events.EventEmitter();
702
+ this._providerReady = false;
303
703
  this._hooks = [];
304
704
  this._provider = NOOP_PROVIDER;
305
705
  }
@@ -350,12 +750,29 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
350
750
  });
351
751
  }
352
752
  setProvider(provider) {
353
- var _a;
753
+ var _a, _b, _c, _d, _e, _f, _g;
354
754
  if (this._provider !== provider) {
355
755
  const oldProvider = this._provider;
356
756
  this._provider = provider;
357
- window.dispatchEvent(new CustomEvent("providerChanged" /* ProviderChanged */));
358
- (_a = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _a.call(oldProvider);
757
+ this._providerReady = false;
758
+ if (!this._provider.events) {
759
+ this._provider.events = new import_events.EventEmitter();
760
+ }
761
+ if (typeof ((_a = this._provider) == null ? void 0 : _a.initialize) === "function") {
762
+ (_e = (_d = (_c = (_b = this._provider).initialize) == null ? void 0 : _c.call(_b, this._context)) == null ? void 0 : _d.then(() => {
763
+ var _a2;
764
+ this._providerReady = true;
765
+ (_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */);
766
+ })) == null ? void 0 : _e.catch(() => {
767
+ var _a2;
768
+ (_a2 = this._provider.events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */);
769
+ });
770
+ } else {
771
+ this._providerReady = true;
772
+ (_f = this._provider.events) == null ? void 0 : _f.emit("PROVIDER_READY" /* Ready */);
773
+ }
774
+ this._apiEvents.emit("providerChanged" /* ProviderChanged */);
775
+ (_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider);
359
776
  }
360
777
  return this;
361
778
  }
@@ -365,12 +782,15 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
365
782
  yield (_b = (_a = this == null ? void 0 : this._provider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
366
783
  });
367
784
  }
368
- getClient(name, version, context) {
785
+ getClient(name, version) {
369
786
  return new OpenFeatureClient(
787
+ // functions are passed here to make sure that these values are always up to date,
788
+ // and so we don't have to make these public properties on the API class.
370
789
  () => this._provider,
790
+ () => this._providerReady,
791
+ () => this._apiEvents,
371
792
  () => this._logger,
372
- { name, version },
373
- context
793
+ { name, version }
374
794
  );
375
795
  }
376
796
  };
@@ -378,8 +798,9 @@ var OpenFeature = OpenFeatureAPI.getInstance();
378
798
 
379
799
  // src/client.ts
380
800
  var OpenFeatureClient = class {
381
- constructor(providerAccessor, globalLogger, options, context = {}) {
801
+ constructor(providerAccessor, providerReady, apiEvents, globalLogger, options) {
382
802
  this.providerAccessor = providerAccessor;
803
+ this.providerReady = providerReady;
383
804
  this.globalLogger = globalLogger;
384
805
  this._hooks = [];
385
806
  this._handlerWrappers = [];
@@ -387,13 +808,14 @@ var OpenFeatureClient = class {
387
808
  name: options.name,
388
809
  version: options.version
389
810
  };
390
- this._context = context;
391
811
  this.attachListeners();
392
- window.dispatchEvent(new CustomEvent("providerChanged" /* ProviderChanged */));
812
+ apiEvents().on("providerChanged" /* ProviderChanged */, () => {
813
+ this.attachListeners();
814
+ });
393
815
  }
394
816
  addHandler(eventType, handler) {
395
817
  this._handlerWrappers.push({ eventType, handler });
396
- if (eventType === "PROVIDER_READY" /* Ready */ && this.providerAccessor().ready) {
818
+ if (eventType === "PROVIDER_READY" /* Ready */ && this.providerReady()) {
397
819
  handler();
398
820
  }
399
821
  }
@@ -412,54 +834,51 @@ var OpenFeatureClient = class {
412
834
  this._hooks = [];
413
835
  return this;
414
836
  }
415
- getBooleanValue(flagKey, defaultValue, context, options) {
416
- return this.getBooleanDetails(flagKey, defaultValue, context, options).value;
837
+ getBooleanValue(flagKey, defaultValue, options) {
838
+ return this.getBooleanDetails(flagKey, defaultValue, options).value;
417
839
  }
418
- getBooleanDetails(flagKey, defaultValue, context, options) {
840
+ getBooleanDetails(flagKey, defaultValue, options) {
419
841
  return this.evaluate(
420
842
  flagKey,
421
843
  this._provider.resolveBooleanEvaluation,
422
844
  defaultValue,
423
845
  "boolean",
424
- context,
425
846
  options
426
847
  );
427
848
  }
428
- getStringValue(flagKey, defaultValue, context, options) {
429
- return this.getStringDetails(flagKey, defaultValue, context, options).value;
849
+ getStringValue(flagKey, defaultValue, options) {
850
+ return this.getStringDetails(flagKey, defaultValue, options).value;
430
851
  }
431
- getStringDetails(flagKey, defaultValue, context, options) {
852
+ getStringDetails(flagKey, defaultValue, options) {
432
853
  return this.evaluate(
433
854
  flagKey,
434
855
  // this isolates providers from our restricted string generic argument.
435
856
  this._provider.resolveStringEvaluation,
436
857
  defaultValue,
437
858
  "string",
438
- context,
439
859
  options
440
860
  );
441
861
  }
442
- getNumberValue(flagKey, defaultValue, context, options) {
443
- return this.getNumberDetails(flagKey, defaultValue, context, options).value;
862
+ getNumberValue(flagKey, defaultValue, options) {
863
+ return this.getNumberDetails(flagKey, defaultValue, options).value;
444
864
  }
445
- getNumberDetails(flagKey, defaultValue, context, options) {
865
+ getNumberDetails(flagKey, defaultValue, options) {
446
866
  return this.evaluate(
447
867
  flagKey,
448
868
  // this isolates providers from our restricted number generic argument.
449
869
  this._provider.resolveNumberEvaluation,
450
870
  defaultValue,
451
871
  "number",
452
- context,
453
872
  options
454
873
  );
455
874
  }
456
- getObjectValue(flagKey, defaultValue, context, options) {
457
- return this.getObjectDetails(flagKey, defaultValue, context, options).value;
875
+ getObjectValue(flagKey, defaultValue, options) {
876
+ return this.getObjectDetails(flagKey, defaultValue, options).value;
458
877
  }
459
- getObjectDetails(flagKey, defaultValue, context, options) {
460
- return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", context, options);
878
+ getObjectDetails(flagKey, defaultValue, options) {
879
+ return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", options);
461
880
  }
462
- evaluate(flagKey, resolver, defaultValue, flagType, invocationContext = {}, options = {}) {
881
+ evaluate(flagKey, resolver, defaultValue, flagType, options = {}) {
463
882
  const allHooks = [
464
883
  ...OpenFeature.getHooks(),
465
884
  ...this.getHooks(),
@@ -467,19 +886,19 @@ var OpenFeatureClient = class {
467
886
  ...this._provider.hooks || []
468
887
  ];
469
888
  const allHooksReversed = [...allHooks].reverse();
470
- const mergedContext = __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, OpenFeature.getContext()), OpenFeature.getTransactionContext()), this._context), invocationContext);
889
+ const context = __spreadValues({}, OpenFeature.getContext());
471
890
  const hookContext = {
472
891
  flagKey,
473
892
  defaultValue,
474
893
  flagValueType: flagType,
475
894
  clientMetadata: this.metadata,
476
895
  providerMetadata: OpenFeature.providerMetadata,
477
- context: mergedContext,
896
+ context,
478
897
  logger: this._logger
479
898
  };
480
899
  try {
481
- const frozenContext = this.beforeHooks(allHooks, hookContext, options);
482
- const resolution = resolver.call(this._provider, flagKey, defaultValue, frozenContext, this._logger);
900
+ this.beforeHooks(allHooks, hookContext, options);
901
+ const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);
483
902
  const evaluationDetails = __spreadProps(__spreadValues({}, resolution), {
484
903
  flagKey
485
904
  });
@@ -549,9 +968,12 @@ var OpenFeatureClient = class {
549
968
  return this._clientLogger || this.globalLogger();
550
969
  }
551
970
  attachListeners() {
552
- Object.values(ProviderEvents).forEach((eventType) => window.addEventListener(eventType, () => {
553
- this._handlerWrappers.filter((wrapper) => wrapper.eventType === eventType).forEach((wrapper) => wrapper.handler());
554
- }));
971
+ Object.values(ProviderEvents).forEach((eventType) => {
972
+ var _a;
973
+ return (_a = this._provider.events) == null ? void 0 : _a.on(eventType, () => {
974
+ this._handlerWrappers.filter((wrapper) => wrapper.eventType === eventType).forEach((wrapper) => wrapper.handler());
975
+ });
976
+ });
555
977
  }
556
978
  };
557
979
  export {