featurehub-javascript-node-sdk
Version:
FeatureHub NodeJS SDK
149 lines • 6.29 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NodejsFeaturePostUpdater = exports.NodejsPollingService = void 0;
const featurehub_javascript_client_sdk_1 = require("featurehub-javascript-client-sdk");
const url_1 = require("url");
const ES = require('eventsource');
__exportStar(require("featurehub-javascript-client-sdk"), exports);
featurehub_javascript_client_sdk_1.FeatureHubEventSourceClient.eventSourceProvider = (url, dict) => {
return new ES(url, dict);
};
class NodejsPollingService extends featurehub_javascript_client_sdk_1.PollingBase {
constructor(options, url, frequency, _callback) {
super(url, frequency, _callback);
this._options = options;
this.uri = new url_1.URL(this.url);
}
poll() {
if (this._busy) {
return new Promise((resolve, reject) => {
this._outstandingPromises.push({ resolve: resolve, reject: reject });
});
}
if (this._stopped) {
return new Promise((resolve) => resolve());
}
this._busy = true;
return new Promise(((resolve, reject) => {
const http = this.uri.protocol === 'http:' ? require('http') : require('https');
let data = '';
const headers = this._header === undefined ? {} : {
'x-featurehub': this._header
};
if (this._etag) {
headers['if-none-match'] = this._etag;
}
const reqOptions = {
protocol: this.uri.protocol,
host: this.uri.host,
hostname: this.uri.hostname,
port: this.uri.port,
method: 'GET',
path: this.uri.pathname + this.uri.search + `&contextSha=${this._shaHeader}`,
headers: headers,
timeout: this._options.timeout || 8000
};
if (this.modifyRequestFunction) {
this.modifyRequestFunction(reqOptions);
}
const req = http.request(reqOptions, (res) => {
res.on('data', (chunk) => data += chunk);
res.on('end', () => {
this.parseCacheControl(res.headers['cache-control']);
if (res.statusCode === 200 || res.statusCode === 236) {
this._etag = res.headers.etag;
this._callback(JSON.parse(data));
this._stopped = (res.statusCode === 236);
this._busy = false;
this.resolveOutstanding();
resolve();
}
else if (res.statusCode == 304) {
this._busy = false;
this.resolveOutstanding();
resolve();
}
else {
this._busy = false;
this.rejectOutstanding(req.status);
reject(res.statusCode);
}
});
});
req.end();
}));
}
}
exports.NodejsPollingService = NodejsPollingService;
featurehub_javascript_client_sdk_1.FeatureHubPollingClient.pollingClientProvider = (opt, url, freq, callback) => new NodejsPollingService(opt, url, freq, callback);
class NodejsFeaturePostUpdater {
post(url, update) {
const loc = new url_1.URL(url);
const cra = {
protocol: loc.protocol,
path: loc.pathname,
host: loc.hostname,
method: 'PUT',
port: loc.port,
timeout: 3000,
headers: {
'content-type': 'application/json'
}
};
if (this.modifyRequestFunction) {
this.modifyRequestFunction(cra);
}
const http = cra.protocol === 'http:' ? require('http') : require('https');
return new Promise((resolve) => {
try {
const req = http.request(cra, (res) => {
featurehub_javascript_client_sdk_1.fhLog.trace('update result -> ', res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(true);
}
else {
resolve(false);
}
});
req.on('error', () => {
featurehub_javascript_client_sdk_1.fhLog.trace('update result -> error');
resolve(false);
});
featurehub_javascript_client_sdk_1.FHLog.fhLog.trace('FeatureUpdater', cra, update);
req.write(JSON.stringify(update));
req.end();
}
catch (e) {
resolve(false);
}
});
}
}
exports.NodejsFeaturePostUpdater = NodejsFeaturePostUpdater;
featurehub_javascript_client_sdk_1.FeatureUpdater.featureUpdaterProvider = () => new NodejsFeaturePostUpdater();
class NodejsGoogleAnalyticsApiClient {
cid(other) {
return other.get('cid') || process.env.GA_CID || '';
}
postBatchUpdate(batchData) {
const req = require('https').request({
host: 'www.google-analytics.com',
path: 'batch'
});
req.write(batchData);
req.end();
}
}
featurehub_javascript_client_sdk_1.GoogleAnalyticsCollector.googleAnalyticsClientProvider = () => new NodejsGoogleAnalyticsApiClient();
featurehub_javascript_client_sdk_1.EdgeFeatureHubConfig.defaultEdgeServiceSupplier = (repository, config) => new featurehub_javascript_client_sdk_1.FeatureHubEventSourceClient(config, repository);
//# sourceMappingURL=index.js.map
;