advanced-logger
Version:
Advanced logger module extendable with plugins. Works in nodejs and browsers
803 lines (717 loc) • 28.6 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/index.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/AdvancedLogger.ts":
/*!*******************************!*\
!*** ./src/AdvancedLogger.ts ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var LogStore_1 = __webpack_require__(/*! ./LogStore */ "./src/LogStore.ts");
/**
* Uses different strategies to submit logs to log server via Service facade.
*/
var AdvancedLogger = /** @class */ (function () {
function AdvancedLogger(configuration) {
this.configuration = configuration;
this.logStore = new LogStore_1.default({ transformations: configuration.transformations });
this.strategy = this.configuration.strategy;
this.service = this.configuration.service;
// todo Where is it better to subscribe?
this.logStore.eventEmitter.on("add", this.onAdd.bind(this));
this.logStore.eventEmitter.on("clear", this.onClear.bind(this));
this.logStore.eventEmitter.on("error", this.onStoreError.bind(this));
this.strategy.eventEmitter.on("send", this.onSend.bind(this));
this.strategy.eventEmitter.on("error", this.onStrategyError.bind(this));
}
AdvancedLogger.prototype.log = function (log) {
this.logStore.add(log);
};
/**
* Forces strategy to initiate logs sending
*/
AdvancedLogger.prototype.sendAllLogs = function () {
this.strategy.sendAll();
};
AdvancedLogger.prototype.destroy = function () {
this.logStore.destroy();
this.logStore = null;
this.strategy.destroy();
this.strategy = null;
this.service.destroy();
this.service = null;
this.configuration = null;
};
AdvancedLogger.prototype.onStoreError = function (error) {
console.error(error);
};
AdvancedLogger.prototype.onAdd = function (info) {
this.strategy.onAdd(info);
};
AdvancedLogger.prototype.onClear = function (info) {
this.strategy.onClear();
};
AdvancedLogger.prototype.onStrategyError = function (error) {
console.error(error);
};
AdvancedLogger.prototype.onSend = function () {
if (this.logStore.size() > 0) {
var logs = this.logStore.getAll();
// We need to clear store as soon as we received request to send all logs
this.logStore.clear();
this.service
.sendAllLogs(logs)
.catch(function (error) {
console.log(error);
// todo Retry sending logs here or in the service
});
}
};
return AdvancedLogger;
}());
exports.default = AdvancedLogger;
/***/ }),
/***/ "./src/LogStore.ts":
/*!*************************!*\
!*** ./src/LogStore.ts ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = __webpack_require__(/*! events */ "events");
var throttle = __webpack_require__(/*! lodash/throttle */ "lodash/throttle");
var TransformationEnum_1 = __webpack_require__(/*! ./enums/TransformationEnum */ "./src/enums/TransformationEnum.ts");
var LogUtils_1 = __webpack_require__(/*! ./util/LogUtils */ "./src/util/LogUtils.ts");
var LogStore = /** @class */ (function () {
function LogStore(config) {
this.groupLeftIndex = -1;
this.logs = [];
this.eventEmitter = new events_1.EventEmitter();
this.config = config;
this.initTransformations();
}
LogStore.prototype.add = function (log) {
//todo If has a grouping transformation
if (this.identityMap) {
var id = LogUtils_1.default.getLogIdByFields(log, this.groupableConfig.configuration.groupIdentityFields);
if (!this.identityMap.has(id)) {
this.logs.push(log);
}
this.onAddToGroup(log);
}
else {
this.logs.push(log);
}
this.eventEmitter.emit("add", {
logCount: this.size()
});
};
LogStore.prototype.clear = function () {
this.logs.length = 0;
this.eventEmitter.emit("clear", null);
};
LogStore.prototype.getAll = function () {
if (this.throttledOnGroupFinalize) {
this.throttledOnGroupFinalize.flush();
}
return this.logs.slice();
};
LogStore.prototype.size = function () {
return this.logs.length;
};
/*public getRealLogCount(): number {
// todo Take into account the "grouped" counter. Optimize calculation speed using caching in add method
return this.logs.length;
}*/
LogStore.prototype.destroy = function () {
if (this.throttledOnGroupFinalize) {
this.throttledOnGroupFinalize.cancel();
}
this.logs.length = 0;
this.eventEmitter.removeAllListeners();
this.eventEmitter = null;
};
//todo Should it be moved to a separate class? Come up with a nicer design
LogStore.prototype.initTransformations = function () {
if (this.config && this.config.transformations) {
var groupableConfig = this.config.transformations
.find(function (value) { return value.type === TransformationEnum_1.TransformationEnum.RAPID_FIRE_GROUPING; });
if (groupableConfig) {
this.groupableConfig = groupableConfig;
this.identityMap = new Map();
this.throttledOnGroupFinalize = throttle(this.onGroupFinalize.bind(this), this.groupableConfig.configuration.interval, { trailing: true, leading: false });
//todo Maybe, move to add method
this.eventEmitter.on("add", this.throttledOnGroupFinalize);
}
}
};
LogStore.prototype.onAddToGroup = function (log) {
var logId = LogUtils_1.default.getLogIdByFields(log, this.groupableConfig.configuration.groupIdentityFields);
if (this.identityMap.has(logId)) {
var savedCounter = this.identityMap.get(logId);
this.identityMap.set(logId, savedCounter + 1);
}
else {
this.identityMap.set(logId, 1);
}
};
LogStore.prototype.onGroupFinalize = function () {
// Apply grouping counters from Map to logs range from left index to the last
var len = this.logs.length;
if (len > 0) {
var groupConfig = this.groupableConfig.configuration;
for (var i = this.groupLeftIndex !== -1 ? this.groupLeftIndex : 0; i < len; i++) {
var log = this.logs[i];
var id = LogUtils_1.default.getLogIdByFields(log, groupConfig.groupIdentityFields);
log[groupConfig.groupFieldName] = this.identityMap.has(id) ? this.identityMap.get(id) : 1;
}
}
this.groupLeftIndex = len > 0 ? len - 1 : -1;
this.identityMap.clear();
};
return LogStore;
}());
exports.default = LogStore;
/***/ }),
/***/ "./src/enums/TransformationEnum.ts":
/*!*****************************************!*\
!*** ./src/enums/TransformationEnum.ts ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var TransformationEnum;
(function (TransformationEnum) {
TransformationEnum[TransformationEnum["RAPID_FIRE_GROUPING"] = 0] = "RAPID_FIRE_GROUPING";
})(TransformationEnum = exports.TransformationEnum || (exports.TransformationEnum = {}));
/***/ }),
/***/ "./src/index.ts":
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var AdvancedLogger_1 = __webpack_require__(/*! ./AdvancedLogger */ "./src/AdvancedLogger.ts");
exports.AdvancedLogger = AdvancedLogger_1.default;
var TransformationEnum_1 = __webpack_require__(/*! ./enums/TransformationEnum */ "./src/enums/TransformationEnum.ts");
exports.TransformationEnum = TransformationEnum_1.TransformationEnum;
var ConsoleService_1 = __webpack_require__(/*! ./service/ConsoleService */ "./src/service/ConsoleService.ts");
var LogglyService_1 = __webpack_require__(/*! ./service/LogglyService */ "./src/service/LogglyService.ts");
var SumologicService_1 = __webpack_require__(/*! ./service/SumologicService */ "./src/service/SumologicService.ts");
var InstantStrategy_1 = __webpack_require__(/*! ./strategy/InstantStrategy */ "./src/strategy/InstantStrategy.ts");
var OnBundleSizeStrategy_1 = __webpack_require__(/*! ./strategy/OnBundleSizeStrategy */ "./src/strategy/OnBundleSizeStrategy.ts");
var OnIntervalStrategy_1 = __webpack_require__(/*! ./strategy/OnIntervalStrategy */ "./src/strategy/OnIntervalStrategy.ts");
var OnRequestStrategy_1 = __webpack_require__(/*! ./strategy/OnRequestStrategy */ "./src/strategy/OnRequestStrategy.ts");
var strategy = {
InstantStrategy: InstantStrategy_1.default,
OnBundleSizeStrategy: OnBundleSizeStrategy_1.default,
OnRequestStrategy: OnRequestStrategy_1.default,
OnIntervalStrategy: OnIntervalStrategy_1.default
};
exports.strategy = strategy;
var service = {
SumologicService: SumologicService_1.default,
LogglyService: LogglyService_1.default,
ConsoleService: ConsoleService_1.default
};
exports.service = service;
/***/ }),
/***/ "./src/service/BaseRemoteService.ts":
/*!******************************************!*\
!*** ./src/service/BaseRemoteService.ts ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var fast_safe_stringify_1 = __webpack_require__(/*! fast-safe-stringify */ "fast-safe-stringify");
var http_1 = __webpack_require__(/*! ../util/http */ "./src/util/http.ts");
var LogUtils_1 = __webpack_require__(/*! ../util/LogUtils */ "./src/util/LogUtils.ts");
var BaseRemoteService = /** @class */ (function () {
function BaseRemoteService(config) {
this.serviceConfig = config.serviceConfig;
this.defaultLogConfig = config.defaultLogConfig || {};
}
BaseRemoteService.prototype.sendAllLogs = function (logs) {
var _this = this;
return this.preparePayload(logs)
.then(function (payload) {
var headers = _this.getHeaders();
if (_this.serviceConfig.retryAttempts && _this.serviceConfig.retryAttempts > 0) {
return http_1.default.postRequest(_this.serviceConfig, headers, payload)
.catch(function () { return http_1.default.delayedRetry(_this.serviceConfig.retryAttempts, _this.serviceConfig.retryInterval, http_1.default.postRequest.bind(_this, _this.serviceConfig, headers, payload)); });
}
else {
return http_1.default.postRequest(_this.serviceConfig, headers, payload);
}
});
};
BaseRemoteService.prototype.preparePayload = function (logs) {
var _this = this;
var resultList = logs.map(function (log) {
var preparedLog = Object.assign({}, _this.defaultLogConfig, log);
return LogUtils_1.default.tryJSONStringify(preparedLog) || fast_safe_stringify_1.default(preparedLog);
});
return Promise.resolve(resultList.join("\n"));
};
BaseRemoteService.prototype.destroy = function () {
this.serviceConfig = null;
this.defaultLogConfig = null;
};
/**
* Returns object for headers config
* @example
* {"Content-Type": "text/plain"}
*/
BaseRemoteService.prototype.getHeaders = function () {
return {};
};
return BaseRemoteService;
}());
exports.default = BaseRemoteService;
/***/ }),
/***/ "./src/service/ConsoleService.ts":
/*!***************************************!*\
!*** ./src/service/ConsoleService.ts ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Console reporting service for debugging purposes
*/
var ConsoleService = /** @class */ (function () {
function ConsoleService() {
}
ConsoleService.prototype.preparePayload = function (logs) {
return Promise.resolve(logs);
};
ConsoleService.prototype.sendAllLogs = function (logs) {
console.log(logs);
return Promise.resolve();
};
ConsoleService.prototype.destroy = function () {
//nothing to do here
};
return ConsoleService;
}());
exports.default = ConsoleService;
/***/ }),
/***/ "./src/service/LogglyService.ts":
/*!**************************************!*\
!*** ./src/service/LogglyService.ts ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
}
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var BaseRemoteService_1 = __webpack_require__(/*! ./BaseRemoteService */ "./src/service/BaseRemoteService.ts");
var LogglyService = /** @class */ (function (_super) {
__extends(LogglyService, _super);
function LogglyService(config) {
return _super.call(this, config) || this;
}
LogglyService.prototype.getHeaders = function () {
return {
"Content-Type": "text/plain"
};
};
return LogglyService;
}(BaseRemoteService_1.default));
exports.default = LogglyService;
/***/ }),
/***/ "./src/service/SumologicService.ts":
/*!*****************************************!*\
!*** ./src/service/SumologicService.ts ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
}
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var BaseRemoteService_1 = __webpack_require__(/*! ./BaseRemoteService */ "./src/service/BaseRemoteService.ts");
var SumologicService = /** @class */ (function (_super) {
__extends(SumologicService, _super);
function SumologicService(config) {
return _super.call(this, config) || this;
}
SumologicService.prototype.getHeaders = function () {
var serviceConfig = this.serviceConfig;
return {
"Content-Type": "application/json",
//todo Optional?
"X-Sumo-Category": serviceConfig.sourceCategory,
//todo Optional?
"X-Sumo-Host": serviceConfig.host,
//todo Optional?
"X-Sumo-Name": serviceConfig.sourceName
};
};
return SumologicService;
}(BaseRemoteService_1.default));
exports.default = SumologicService;
/***/ }),
/***/ "./src/strategy/InstantStrategy.ts":
/*!*****************************************!*\
!*** ./src/strategy/InstantStrategy.ts ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = __webpack_require__(/*! events */ "events");
var InstantStrategy = /** @class */ (function () {
function InstantStrategy() {
this.eventEmitter = new events_1.EventEmitter();
}
InstantStrategy.prototype.onAdd = function (info) {
this.eventEmitter.emit("send");
//console.log("InstantStrategy#sent");
};
InstantStrategy.prototype.onClear = function () {
// Ignore log list change
//console.log("InstantStrategy#cleared");
};
InstantStrategy.prototype.sendAll = function (info) {
// This strategy sends all logs separately
};
InstantStrategy.prototype.destroy = function () {
this.eventEmitter.removeAllListeners();
this.eventEmitter = null;
};
return InstantStrategy;
}());
exports.default = InstantStrategy;
/***/ }),
/***/ "./src/strategy/OnBundleSizeStrategy.ts":
/*!**********************************************!*\
!*** ./src/strategy/OnBundleSizeStrategy.ts ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = __webpack_require__(/*! events */ "events");
var OnBundleSizeStrategy = /** @class */ (function () {
function OnBundleSizeStrategy(config) {
/**
* @type {number}
*/
this.MAX_BUNDLE_SIZE = 100;
this.eventEmitter = new events_1.EventEmitter();
if (config.maxBundle) {
this.MAX_BUNDLE_SIZE = config.maxBundle;
}
}
OnBundleSizeStrategy.prototype.onAdd = function (info) {
if (info && info.logCount >= this.MAX_BUNDLE_SIZE) {
this.eventEmitter.emit("send");
}
else {
//console.log("Not enough logs so far");
}
};
OnBundleSizeStrategy.prototype.onClear = function () {
// Ignore log list change
//console.log("OnBundleSizeStrategy#cleared");
};
OnBundleSizeStrategy.prototype.sendAll = function (info) {
this.eventEmitter.emit("send");
};
OnBundleSizeStrategy.prototype.destroy = function () {
this.eventEmitter.removeAllListeners();
this.eventEmitter = null;
};
return OnBundleSizeStrategy;
}());
exports.default = OnBundleSizeStrategy;
/***/ }),
/***/ "./src/strategy/OnIntervalStrategy.ts":
/*!********************************************!*\
!*** ./src/strategy/OnIntervalStrategy.ts ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = __webpack_require__(/*! events */ "events");
var debounce = __webpack_require__(/*! lodash/debounce */ "lodash/debounce");
var OnIntervalStrategy = /** @class */ (function () {
function OnIntervalStrategy(config) {
/**
* @type {number}
*/
this.SEND_INTERVAL = 15000;
this.eventEmitter = new events_1.EventEmitter();
if (config.interval) {
this.SEND_INTERVAL = config.interval;
}
this.debouncedSend = debounce(this.send.bind(this), this.SEND_INTERVAL);
}
OnIntervalStrategy.prototype.onAdd = function (info) {
if (info && info.logCount > 0) {
this.debouncedSend();
}
};
OnIntervalStrategy.prototype.onClear = function () {
// Ignore log list change
//console.log("OnIntervalStrategy#cleared");
};
OnIntervalStrategy.prototype.sendAll = function (info) {
this.eventEmitter.emit("send");
};
OnIntervalStrategy.prototype.destroy = function () {
this.eventEmitter.removeAllListeners();
this.eventEmitter = null;
};
OnIntervalStrategy.prototype.send = function () {
this.eventEmitter.emit("send");
};
return OnIntervalStrategy;
}());
exports.default = OnIntervalStrategy;
/***/ }),
/***/ "./src/strategy/OnRequestStrategy.ts":
/*!*******************************************!*\
!*** ./src/strategy/OnRequestStrategy.ts ***!
\*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var events_1 = __webpack_require__(/*! events */ "events");
var OnRequestStrategy = /** @class */ (function () {
function OnRequestStrategy() {
this.eventEmitter = new events_1.EventEmitter();
}
OnRequestStrategy.prototype.onAdd = function (info) {
// Ignore log list change
};
OnRequestStrategy.prototype.onClear = function () {
// Ignore log list change
//console.log("OnRequestStrategy#cleared");
};
OnRequestStrategy.prototype.sendAll = function (info) {
this.eventEmitter.emit("send");
};
OnRequestStrategy.prototype.destroy = function () {
this.eventEmitter.removeAllListeners();
this.eventEmitter = null;
};
return OnRequestStrategy;
}());
exports.default = OnRequestStrategy;
/***/ }),
/***/ "./src/util/LogUtils.ts":
/*!******************************!*\
!*** ./src/util/LogUtils.ts ***!
\******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var DELIMETER = "-";
exports.default = {
getLogIdByFields: function (log, fields) {
return fields.map(function (field) { return "" + field + DELIMETER + log[field]; }).join(DELIMETER);
},
/**
* It is necessary to convert objects safely, otherwise we can lost the whole log bundle
*/
tryJSONStringify: function (obj) {
try {
return JSON.stringify(obj);
}
catch (_) {
//ignore the error
return "";
}
}
};
/***/ }),
/***/ "./src/util/http.ts":
/*!**************************!*\
!*** ./src/util/http.ts ***!
\**************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
;
Object.defineProperty(exports, "__esModule", { value: true });
var fetch = __webpack_require__(/*! node-fetch */ "node-fetch");
var http = {
postRequest: function (serviceConfig, headers, payload) {
return fetch(serviceConfig.url, {
method: serviceConfig.method,
body: payload,
headers: headers
});
},
delayedRetry: function (retries, delay, fn) {
if (delay === void 0) { delay = 0; }
return new Promise(function (resolve, reject) {
setTimeout(function () { return fn().then(resolve).catch(reject); }, delay);
})
.catch(function (error) { return retries > 1 ? http.delayedRetry(retries - 1, delay, fn) : Promise.reject(error); });
}
};
exports.default = http;
/***/ }),
/***/ "events":
/*!*************************!*\
!*** external "events" ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require("events");
/***/ }),
/***/ "fast-safe-stringify":
/*!**************************************!*\
!*** external "fast-safe-stringify" ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require("fast-safe-stringify");
/***/ }),
/***/ "lodash/debounce":
/*!**********************************!*\
!*** external "lodash/debounce" ***!
\**********************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require("lodash/debounce");
/***/ }),
/***/ "lodash/throttle":
/*!**********************************!*\
!*** external "lodash/throttle" ***!
\**********************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require("lodash/throttle");
/***/ }),
/***/ "node-fetch":
/*!*****************************!*\
!*** external "node-fetch" ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = require("node-fetch");
/***/ })
/******/ });
//# sourceMappingURL=advanced-logger.node.js.map