UNPKG

featurehub-eventsource-sdk

Version:

FeatureHub SDK. Supports near real-time feature flag updates via eventsource (SSE) or on-demand updates via REST requests.

63 lines 2.06 kB
import { fhLog, SSEResultState } from 'featurehub-repository'; import EventSource from 'eventsource'; export class FeatureHubEventSourceClient { constructor(config, repository) { this._config = config; this._repository = repository; } init() { const options = {}; if (this._header) { options.headers = { 'x-featurehub': this._header }; } fhLog.log('listening at ', this._config.url()); this.eventSource = new EventSource(this._config.url(), options); [SSEResultState.Features, SSEResultState.Feature, SSEResultState.DeleteFeature, SSEResultState.Bye, SSEResultState.Failure, SSEResultState.Ack].forEach((name) => { const fName = name.toString(); this.eventSource.addEventListener(fName, e => { try { fhLog.log("received ", fName, JSON.stringify(e)); this._repository.notify(name, JSON.parse(e.data)); } catch (e) { fhLog.error(JSON.stringify(e)); } }); }); this.eventSource.onerror = (e) => { fhLog.error("got error", e); this._repository.notify(SSEResultState.Failure, null); }; } close() { if (this.eventSource != null) { const es = this.eventSource; this.eventSource = undefined; es.close(); } } clientEvaluated() { return this._config.clientEvaluated(); } contextChange(header) { this._header = header; if (this.eventSource !== undefined) { this.close(); } this.init(); return Promise.resolve(undefined); } poll() { if (this.eventSource == undefined) { this.init(); } return new Promise((resolve) => resolve()); } requiresReplacementOnHeaderChange() { return true; } } //# sourceMappingURL=featurehub_eventsource.js.map