node-red-contrib-oauth2
Version:
The node-red-contrib-oauth2 is a Node-RED node that provides an OAuth2 authentication flow. This node uses the OAuth2 protocol to obtain an access token, which can be used to make authenticated API requests.
115 lines (106 loc) • 3.94 kB
JavaScript
const loggerStatusActive = { fill: 'yellow', shape: 'ring', text: 'Logging' };
const loggerStatusOff = { fill: 'green', shape: 'ring', text: '' };
const { inspect } = require('util');
function Logger(label = '***', active = true, count = null, msg) {
this.consoleFunction = console.log;
this.sendFunction = this.sendConsole;
this.type = 'debug';
if (label instanceof Object) Object.assign(this, label);
else this.label = label;
if (this.active == undefined) this.active = active;
if (this.count == undefined) this.count = count;
this.set(this.active, this.count);
return msg ? this.sendInfo(msg) : this;
}
Logger.prototype.objectDump = function (o) {
if (typeof o !== 'object' || o === null) {
this.send('Invalid object', 'error');
return this;
}
this.send(inspect(o, { showHidden: true, depth: null }), 'info');
return this;
};
Logger.prototype.send = function (message, type, node, sendFunction = this.sendFunction) {
if (!this.active || !type || message == null) return this;
const sendMessage = (msg) => {
try {
sendFunction.call(this, msg instanceof Object ? JSON.stringify(msg) : msg, type, node);
} catch (ex) {
sendFunction.call(this, ex.message, type, node);
}
};
if (!this.count) {
sendMessage(message);
}
if (this.count > 0) {
sendMessage(message);
if (--this.count === 0) {
this.setOff();
}
}
return this;
};
Logger.prototype.sendConsole = function (message, type = this.type, consoleFunction = this.consoleFunction) {
const ts = new Date().toString().split(' ');
consoleFunction.apply(this, [[parseInt(ts[2], 10), ts[1], ts[4]].join(' ') + ' - [' + type + '] ' + this.label + ' ' + message]);
return this;
};
Logger.prototype.sendDebug = function (message, values) {
if (values) return this.send(Object.assign({}, { label: message }, values), 'debug');
return this.send(message, 'debug');
};
Logger.prototype.debug = Logger.prototype.sendDebug;
Logger.prototype.sendError = function (message) {
return this.send(message, 'error');
};
Logger.prototype.error = Logger.prototype.sendError;
Logger.prototype.sendErrorAndDump = function (message, o, ex) {
return this.sendError(message).objectDump(o).stackDump(ex);
};
Logger.prototype.sendErrorAndStackDump = function (message, ex) {
return this.sendError(message).stackDump(ex);
};
Logger.prototype.sendInfo = function (message) {
return this.send(message, 'info');
};
Logger.prototype.info = Logger.prototype.sendInfo;
Logger.prototype.sendNode = function (message, node = this.node, type = this.noderedLogType) {
return node[type](message);
};
Logger.prototype.sendWarn = function (message) {
return this.send(message, 'warn');
};
Logger.prototype.sendWarning = Logger.prototype.sendWarn;
Logger.prototype.warn = Logger.prototype.sendWarn;
Logger.prototype.warning = Logger.prototype.sendWarn;
Logger.prototype.setNodeStatus = function (node) {
if (node) this.node = node;
if (this.node == null) throw Error('No node set');
this.showNodeStatus();
return this;
};
Logger.prototype.set = function (active, count) {
if (count !== undefined) {
this.count = count;
this.countDefault = count;
}
if (active !== undefined) this.active = active;
this.showNodeStatus();
// this.sendConsole('logging turning ' + (this.active ? 'on logging next ' + this.count + ' log points' : 'off'));
return this;
};
Logger.prototype.setOff = function () {
return this.set(false);
};
Logger.prototype.setOn = function (count = this.countDefault) {
return this.set(true, count);
};
Logger.prototype.showNodeStatus = function () {
if (this.node) this.node.status(this.active ? loggerStatusActive : loggerStatusOff);
};
Logger.prototype.stackDump = function (ex) {
if (ex) console.log(ex.stack);
else console.trace();
return this;
};
module.exports = Logger;