abby-client
Version:
[](https://coveralls.io/github/GreetzNL/abby-client) [](https://tra
52 lines (43 loc) • 1.5 kB
JavaScript
;
const rp = require('request-promise-native');
const ABBY_TOGGLES_KEY = Symbol('__abbyToggles');
const ABBY_TIMEOUT_KEY = Symbol('__abbyTimeout');
const ABBY_SYNC = Symbol('__abbySync');
const UPDATE_INTERVAL = 60000 * 1; // 1 minute
const logger = require('./logger').instance();
let load = async (/**Configs*/configs) => {
try {
let tags = configs.tags.split(',').map(tag => `tag=${tag}`).join('&');
let options = {
uri: `${configs.apiEndpoint}/toggles?${tags}`,
json: true
};
let /**Array.<Experiment>*/toggles = await rp(options);
global[ABBY_TOGGLES_KEY] = toggles;
global[ABBY_SYNC] = new Date().toISOString();
return toggles;
} catch (e) {
logger.error(`abby-client cannot load toggles: ${configs.apiEndpoint}, tags: ${configs.tags}`);
return [];
} finally {
if (global[ABBY_TIMEOUT_KEY]) {
clearTimeout(global[ABBY_TIMEOUT_KEY]);
}
let interval = typeof configs.update_interval === 'number' ? configs.update_interval : UPDATE_INTERVAL;
global[ABBY_TIMEOUT_KEY] = setTimeout(() => load(configs), interval);
}
};
let sync = {
load
};
Object.defineProperty(sync, 'data', {
get: () => {
return Array.isArray(global[ABBY_TOGGLES_KEY]) ? global[ABBY_TOGGLES_KEY] : [];
}
});
Object.defineProperty(sync, 'lastSync', {
get: () => {
return global[ABBY_SYNC];
}
});
module.exports = sync;