You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP
Socket
Sign inDemoInstall
Socket

@openfeature/js-sdk

Package Overview
Dependencies
Maintainers
2
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openfeature/js-sdk - npm Package Compare versions

Comparing version

to
1.3.2

84

dist/cjs/index.js

@@ -348,2 +348,7 @@ "use strict";

// ../shared/src/filter.ts
function isDefined(input) {
return typeof input !== "undefined" && input !== null;
}
// ../shared/src/open-feature.ts

@@ -356,2 +361,3 @@ var OpenFeatureCommonAPI = class {

this._events = new OpenFeatureEventEmitter(() => this._logger);
this._clientEventHandlers = /* @__PURE__ */ new Map();
this._clientProviders = /* @__PURE__ */ new Map();

@@ -411,15 +417,21 @@ this._clientEvents = /* @__PURE__ */ new Map();

}
const clientEmitter = this.getEventEmitterForClient(clientName);
const emitters = clientName ? [this.getAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
if (typeof provider.initialize === "function") {
(_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
var _a2;
clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
});
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
})) == null ? void 0 : _d.catch((error) => {
var _a2;
clientEmitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
});
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
});
} else {
clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
});
(_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName });

@@ -432,3 +444,3 @@ }

}
this.transferListeners(oldProvider, provider, clientName, clientEmitter);
this.transferListeners(oldProvider, provider, clientName, emitters);
if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {

@@ -446,3 +458,3 @@ (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);

}
getEventEmitterForClient(name) {
getAndCacheEventEmitterForClient(name) {
const emitter = this._clientEvents.get(name);

@@ -454,16 +466,41 @@ if (emitter) {

this._clientEvents.set(name, newEmitter);
const clientProvider = this.getProviderForClient(name);
Object.values(ProviderEvents).forEach(
(eventType) => {
var _a;
return (_a = clientProvider.events) == null ? void 0 : _a.addHandler(eventType, (details) => __async(this, null, function* () {
newEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName: name }));
}));
}
);
return newEmitter;
}
transferListeners(oldProvider, newProvider, clientName, clientEmitter) {
getUnboundEmitters() {
const namedProviders = [...this._clientProviders.keys()];
const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
return unboundEmitterNames.map((name) => this._clientEvents.get(name)).filter(isDefined);
}
transferListeners(oldProvider, newProvider, clientName, emitters) {
var _a;
(_a = oldProvider.events) == null ? void 0 : _a.removeAllHandlers();
Object.values(ProviderEvents).forEach(
(_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
var _a2;
return (_a2 = oldProvider.events) == null ? void 0 : _a2.removeHandler(...eventHandler);
});
const newClientHandlers = Object.values(ProviderEvents).map(
(eventType) => {
var _a2;
return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(eventType, (details) => __async(this, null, function* () {
clientEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
const handler = (details) => __async(this, null, function* () {
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
});
this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
}));
});
return [eventType, handler];
}
);
this._clientEventHandlers.set(clientName, newClientHandlers);
newClientHandlers.forEach((eventHandler) => {
var _a2;
return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(...eventHandler);
});
}

@@ -598,4 +635,4 @@ close() {

return new OpenFeatureClient(
() => this.getProviderForClient.bind(this)(name),
() => this.getEventEmitterForClient(name),
() => this.getProviderForClient(name),
() => this.getAndCacheEventEmitterForClient(name),
() => this._logger,

@@ -611,5 +648,5 @@ { name, version },

var OpenFeatureClient = class {
constructor(providerAccessor, events, globalLogger, options, context = {}) {
constructor(providerAccessor, emitterAccessor, globalLogger, options, context = {}) {
this.providerAccessor = providerAccessor;
this.events = events;
this.emitterAccessor = emitterAccessor;
this.globalLogger = globalLogger;

@@ -628,13 +665,18 @@ this.options = options;

addHandler(eventType, handler) {
this.events().addHandler(eventType, handler);
var _a;
this.emitterAccessor().addHandler(eventType, handler);
const providerReady = !this._provider.status || this._provider.status === "READY" /* READY */;
if (eventType === "PROVIDER_READY" /* Ready */ && providerReady) {
handler({ clientName: this.metadata.name });
try {
handler({ clientName: this.metadata.name });
} catch (err) {
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
}
}
}
removeHandler(eventType, handler) {
this.events().removeHandler(eventType, handler);
this.emitterAccessor().removeHandler(eventType, handler);
}
getHandlers(eventType) {
return this.events().getHandlers(eventType);
return this.emitterAccessor().getHandlers(eventType);
}

@@ -641,0 +683,0 @@ setLogger(logger) {

@@ -296,2 +296,7 @@ var __defProp = Object.defineProperty;

// ../shared/src/filter.ts
function isDefined(input) {
return typeof input !== "undefined" && input !== null;
}
// ../shared/src/open-feature.ts

@@ -304,2 +309,3 @@ var OpenFeatureCommonAPI = class {

this._events = new OpenFeatureEventEmitter(() => this._logger);
this._clientEventHandlers = /* @__PURE__ */ new Map();
this._clientProviders = /* @__PURE__ */ new Map();

@@ -359,15 +365,21 @@ this._clientEvents = /* @__PURE__ */ new Map();

}
const clientEmitter = this.getEventEmitterForClient(clientName);
const emitters = clientName ? [this.getAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
if (typeof provider.initialize === "function") {
(_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
var _a2;
clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
});
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
})) == null ? void 0 : _d.catch((error) => {
var _a2;
clientEmitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
});
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
});
} else {
clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
});
(_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName });

@@ -380,3 +392,3 @@ }

}
this.transferListeners(oldProvider, provider, clientName, clientEmitter);
this.transferListeners(oldProvider, provider, clientName, emitters);
if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {

@@ -394,3 +406,3 @@ (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);

}
getEventEmitterForClient(name) {
getAndCacheEventEmitterForClient(name) {
const emitter = this._clientEvents.get(name);

@@ -402,16 +414,41 @@ if (emitter) {

this._clientEvents.set(name, newEmitter);
const clientProvider = this.getProviderForClient(name);
Object.values(ProviderEvents).forEach(
(eventType) => {
var _a;
return (_a = clientProvider.events) == null ? void 0 : _a.addHandler(eventType, (details) => __async(this, null, function* () {
newEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName: name }));
}));
}
);
return newEmitter;
}
transferListeners(oldProvider, newProvider, clientName, clientEmitter) {
getUnboundEmitters() {
const namedProviders = [...this._clientProviders.keys()];
const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
return unboundEmitterNames.map((name) => this._clientEvents.get(name)).filter(isDefined);
}
transferListeners(oldProvider, newProvider, clientName, emitters) {
var _a;
(_a = oldProvider.events) == null ? void 0 : _a.removeAllHandlers();
Object.values(ProviderEvents).forEach(
(_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
var _a2;
return (_a2 = oldProvider.events) == null ? void 0 : _a2.removeHandler(...eventHandler);
});
const newClientHandlers = Object.values(ProviderEvents).map(
(eventType) => {
var _a2;
return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(eventType, (details) => __async(this, null, function* () {
clientEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
const handler = (details) => __async(this, null, function* () {
emitters.forEach((emitter) => {
emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
});
this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
}));
});
return [eventType, handler];
}
);
this._clientEventHandlers.set(clientName, newClientHandlers);
newClientHandlers.forEach((eventHandler) => {
var _a2;
return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(...eventHandler);
});
}

@@ -546,4 +583,4 @@ close() {

return new OpenFeatureClient(
() => this.getProviderForClient.bind(this)(name),
() => this.getEventEmitterForClient(name),
() => this.getProviderForClient(name),
() => this.getAndCacheEventEmitterForClient(name),
() => this._logger,

@@ -559,5 +596,5 @@ { name, version },

var OpenFeatureClient = class {
constructor(providerAccessor, events, globalLogger, options, context = {}) {
constructor(providerAccessor, emitterAccessor, globalLogger, options, context = {}) {
this.providerAccessor = providerAccessor;
this.events = events;
this.emitterAccessor = emitterAccessor;
this.globalLogger = globalLogger;

@@ -576,13 +613,18 @@ this.options = options;

addHandler(eventType, handler) {
this.events().addHandler(eventType, handler);
var _a;
this.emitterAccessor().addHandler(eventType, handler);
const providerReady = !this._provider.status || this._provider.status === "READY" /* READY */;
if (eventType === "PROVIDER_READY" /* Ready */ && providerReady) {
handler({ clientName: this.metadata.name });
try {
handler({ clientName: this.metadata.name });
} catch (err) {
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
}
}
}
removeHandler(eventType, handler) {
this.events().removeHandler(eventType, handler);
this.emitterAccessor().removeHandler(eventType, handler);
}
getHandlers(eventType) {
return this.events().getHandlers(eventType);
return this.emitterAccessor().getHandlers(eventType);
}

@@ -589,0 +631,0 @@ setLogger(logger) {

@@ -368,2 +368,3 @@ type EventMetadata = {

private readonly _events;
private readonly _clientEventHandlers;
protected _clientProviders: Map<string, P>;

@@ -418,3 +419,4 @@ protected _clientEvents: Map<string | undefined, OpenFeatureEventEmitter>;

protected getProviderForClient(name?: string): P;
protected getEventEmitterForClient(name?: string): OpenFeatureEventEmitter;
protected getAndCacheEventEmitterForClient(name?: string): OpenFeatureEventEmitter;
private getUnboundEmitters;
private transferListeners;

@@ -672,3 +674,3 @@ close(): Promise<void>;

private readonly providerAccessor;
private readonly events;
private readonly emitterAccessor;
private readonly globalLogger;

@@ -679,3 +681,3 @@ private readonly options;

private _clientLogger?;
constructor(providerAccessor: () => Provider, events: () => OpenFeatureEventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions, context?: EvaluationContext);
constructor(providerAccessor: () => Provider, emitterAccessor: () => OpenFeatureEventEmitter, globalLogger: () => Logger, options: OpenFeatureClientOptions, context?: EvaluationContext);
get metadata(): ClientMetadata;

@@ -682,0 +684,0 @@ addHandler(eventType: ProviderEvents, handler: EventHandler): void;

{
"name": "@openfeature/js-sdk",
"version": "1.3.1",
"version": "1.3.2",
"description": "OpenFeature SDK for JavaScript",

@@ -5,0 +5,0 @@ "main": "./dist/cjs/index.js",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet