UNPKG

abby-client

Version:

[![Coverage Status](https://coveralls.io/repos/github/GreetzNL/abby-client/badge.svg)](https://coveralls.io/github/GreetzNL/abby-client) [![Build Status](https://travis-ci.com/GreetzNL/abby-client.svg?token=n8i4tz6gpgW4zgU5pvDP&branch=master)](https://tra

52 lines (43 loc) 1.5 kB
'use strict'; 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;