UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

108 lines 3.58 kB
import { Log } from "../Log"; import { LoggerOptions } from "../LoggerOptions"; import { LogLevel, LogLevelLabels } from "../LogLevel"; import log from "loglevel"; import { DefaultHttpClient } from "../../util/HttpClient"; export class DefaultLogger { constructor(token, options = new LoggerOptions(), apiUrl = "api.infobip.com", logLevel = LogLevel.ERROR, headersProvider) { this.token = token; this.options = options; this.apiUrl = apiUrl; this.logLevel = logLevel; this.headersProvider = headersProvider; this.logs = []; this.interval = this.createInterval(options.period); if (!this.headersProvider) { this.headersProvider = () => null; } this.httpClient = new DefaultHttpClient(`https://${apiUrl}`, { 'Authorization': `Bearer ${this.token}`, 'Content-Type': 'application/json' }); } static ifNotForbidden(apiResponse) { return apiResponse.statusCode !== DefaultLogger.FORBIDDEN_STATUS_CODE; } log(log) { this.logs.push(log); } debug(message, callId) { this.logMessage(LogLevel.DEBUG, message, callId); } info(message, callId) { this.logMessage(LogLevel.INFO, message, callId); } warn(message, callId) { this.logMessage(LogLevel.WARNING, message, callId); } error(message, callId) { this.logMessage(LogLevel.ERROR, message, callId); } stop() { clearInterval(this.interval); this.sendLogs(); } setOptions(options) { if (options.period) { clearInterval(this.interval); this.createInterval(options.period); } } setApiUrl(apiUrl) { if (apiUrl && apiUrl !== this.apiUrl) { this.apiUrl = apiUrl; this.httpClient = new DefaultHttpClient(`https://${apiUrl}`, { 'Authorization': `Bearer ${this.token}`, 'Content-Type': 'application/json' }); } } setLogLevel(logLevel) { if (LogLevel[logLevel]) { this.logLevel = LogLevel[logLevel]; } } logMessage(logLevel, message, callId = null) { switch (logLevel) { case LogLevel.DEBUG: log.debug(message); break; case LogLevel.INFO: log.info(message); break; case LogLevel.WARNING: log.warn(message); break; case LogLevel.ERROR: log.error(message); break; } if (logLevel >= this.logLevel) { this.log(new Log(LogLevelLabels.get(logLevel), callId, { message: message })); } } sendLogs() { if (this.logs.length === 0) { return; } let tempLogs = this.logs; this.logs = []; this.httpClient.post('/webrtc/1/log', { logEvents: tempLogs }, this.headersProvider()) .then(apiResponse => { if (!apiResponse.ok && DefaultLogger.ifNotForbidden(apiResponse)) { this.logs = this.logs.concat(tempLogs); } }) .catch(error => { log.error(`Failed to submit logs: ${error.message}`); }); } createInterval(period) { return setInterval(() => { this.sendLogs(); }, period || DefaultLogger.DEFAULT_PERIOD); } } DefaultLogger.DEFAULT_PERIOD = 5000; DefaultLogger.FORBIDDEN_STATUS_CODE = 403; //# sourceMappingURL=DefaultLogger.js.map