UNPKG

featurehub-javascript-node-sdk

Version:
149 lines 6.29 kB
"use strict"; 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