syslog-appender-pro
Version:
Syslog Appender for TCP/TLS/UDP connections
517 lines (472 loc) • 16.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.syslog = exports.rfc6587 = exports.rfc5426 = exports.rfc5425 = exports.rfc5424 = exports.SEVERITIES = exports.FACILITIES = void 0;
var _os = require("os");
var _net = require("net");
var _tls = require("tls");
var _dgram = require("dgram");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
// REFERENCES
// https://tools.ietf.org/html/rfc5424
// https://tools.ietf.org/html/rfc5425
// https://tools.ietf.org/html/rfc5426
// https://tools.ietf.org/html/rfc6587
var FACILITIES = {
LOCAL0: 16,
LOCAL1: 17,
LOCAL2: 18,
LOCAL3: 19,
LOCAL4: 20,
LOCAL5: 21,
LOCAL6: 22,
LOCAL7: 23
};
exports.FACILITIES = FACILITIES;
var SEVERITIES = {
ALERT: 1,
CRITICAL: 2,
DEBUG: 7,
EMERGENCY: 0,
ERROR: 3,
INFORMATIONAL: 6,
NOTICE: 5,
WARNING: 4
};
exports.SEVERITIES = SEVERITIES;
var isObject = function isObject(value) {
return _typeof(value) === 'object' && Array.isArray(value) === false;
};
var parseStructuredData = function parseStructuredData(structuredData) {
var result = '';
for (var id in structuredData) {
if (isObject(structuredData[id]) === true) {
result += "[".concat(id);
for (var param in structuredData[id]) {
result += " ".concat(param, "=\"").concat(structuredData[id][param], "\"");
}
result += ']';
}
}
return result.length === 0 ? '-' : result;
};
var rfc5424 = function rfc5424(_ref) {
var appName = _ref.appName,
eol = _ref.eol,
facility = _ref.facility,
hostname = _ref.hostname,
message = _ref.message,
msgId = _ref.msgId,
procId = _ref.procId,
severity = _ref.severity,
structuredData = _ref.structuredData,
timestamp = _ref.timestamp;
if (typeof facility === 'string') {
var _FACILITIES$facility$;
facility = (_FACILITIES$facility$ = FACILITIES[facility.toUpperCase()]) !== null && _FACILITIES$facility$ !== void 0 ? _FACILITIES$facility$ : FACILITIES.LOCAL0;
}
if (typeof severity === 'string') {
var _SEVERITIES$severity$;
severity = (_SEVERITIES$severity$ = SEVERITIES[severity.toUpperCase()]) !== null && _SEVERITIES$severity$ !== void 0 ? _SEVERITIES$severity$ : SEVERITIES.DEBUG;
}
if (isObject(structuredData) === true) {
structuredData = parseStructuredData(structuredData);
}
var priority = Math.imul(facility, 8) + severity;
return Buffer.from("<".concat(priority, ">1 ").concat(timestamp, " ").concat(hostname, " ").concat(appName, " ").concat(procId, " ").concat(msgId, " ").concat(structuredData, " ").concat(message).concat(eol));
}; // sync -> async
exports.rfc5424 = rfc5424;
var rfc5425 = function rfc5425(_ref2) {
var defaultAppName = _ref2.defaultAppName,
defaultEol = _ref2.defaultEol,
defaultFacility = _ref2.defaultFacility,
defaultHostname = _ref2.defaultHostname,
defaultMsgId = _ref2.defaultMsgId,
defaultProcId = _ref2.defaultProcId,
defaultSeverity = _ref2.defaultSeverity,
defaultStructuredData = _ref2.defaultStructuredData,
ca = _ref2.ca,
cert = _ref2.cert,
checkServerIdentity = _ref2.checkServerIdentity,
family = _ref2.family,
host = _ref2.host,
key = _ref2.key,
port = _ref2.port;
return function (_ref3) {
var _ref3$appName = _ref3.appName,
appName = _ref3$appName === void 0 ? defaultAppName : _ref3$appName,
_ref3$eol = _ref3.eol,
eol = _ref3$eol === void 0 ? defaultEol : _ref3$eol,
_ref3$facility = _ref3.facility,
facility = _ref3$facility === void 0 ? defaultFacility : _ref3$facility,
_ref3$hostname = _ref3.hostname,
hostname = _ref3$hostname === void 0 ? defaultHostname : _ref3$hostname,
message = _ref3.message,
_ref3$msgId = _ref3.msgId,
msgId = _ref3$msgId === void 0 ? defaultMsgId : _ref3$msgId,
_ref3$procId = _ref3.procId,
procId = _ref3$procId === void 0 ? defaultProcId : _ref3$procId,
_ref3$severity = _ref3.severity,
severity = _ref3$severity === void 0 ? defaultSeverity : _ref3$severity,
_ref3$structuredData = _ref3.structuredData,
structuredData = _ref3$structuredData === void 0 ? defaultStructuredData : _ref3$structuredData,
_ref3$timestamp = _ref3.timestamp,
timestamp = _ref3$timestamp === void 0 ? new Date().toISOString() : _ref3$timestamp;
return new Promise(function (resolve, reject) {
var options = {
ca: ca,
cert: cert,
family: family,
host: host,
key: key,
port: port
};
if (typeof checkServerIdentity === 'function') {
options.checkServerIdentity = checkServerIdentity;
}
var socket = (0, _tls.connect)(options);
socket.once('error', reject);
socket.once('end', resolve);
socket.once('connect', function () {
socket.end(rfc5424({
appName: appName,
eol: eol,
facility: facility,
hostname: hostname,
message: message,
msgId: msgId,
procId: procId,
severity: severity,
structuredData: structuredData,
timestamp: timestamp
}));
});
});
};
}; // async -> sync
exports.rfc5425 = rfc5425;
var rfc5426 = function rfc5426(_ref4) {
var defaultAppName = _ref4.defaultAppName,
defaultEol = _ref4.defaultEol,
defaultFacility = _ref4.defaultFacility,
defaultHostname = _ref4.defaultHostname,
defaultMsgId = _ref4.defaultMsgId,
defaultProcId = _ref4.defaultProcId,
defaultSeverity = _ref4.defaultSeverity,
defaultStructuredData = _ref4.defaultStructuredData,
family = _ref4.family,
host = _ref4.host,
port = _ref4.port;
return new Promise(function (resolve, reject) {
var options = {
0: {
type: 'udp6'
},
4: {
type: 'udp4'
},
6: {
ipv6Only: true,
type: 'udp6'
}
};
var socket = (0, _dgram.createSocket)(options[family]);
socket.connect(port, host);
socket.once('error', reject);
socket.once('connect', function () {
resolve(function (_ref5) {
var _ref5$appName = _ref5.appName,
appName = _ref5$appName === void 0 ? defaultAppName : _ref5$appName,
_ref5$eol = _ref5.eol,
eol = _ref5$eol === void 0 ? defaultEol : _ref5$eol,
_ref5$facility = _ref5.facility,
facility = _ref5$facility === void 0 ? defaultFacility : _ref5$facility,
_ref5$hostname = _ref5.hostname,
hostname = _ref5$hostname === void 0 ? defaultHostname : _ref5$hostname,
message = _ref5.message,
_ref5$msgId = _ref5.msgId,
msgId = _ref5$msgId === void 0 ? defaultMsgId : _ref5$msgId,
_ref5$procId = _ref5.procId,
procId = _ref5$procId === void 0 ? defaultProcId : _ref5$procId,
_ref5$severity = _ref5.severity,
severity = _ref5$severity === void 0 ? defaultSeverity : _ref5$severity,
_ref5$structuredData = _ref5.structuredData,
structuredData = _ref5$structuredData === void 0 ? defaultStructuredData : _ref5$structuredData,
_ref5$timestamp = _ref5.timestamp,
timestamp = _ref5$timestamp === void 0 ? new Date().toISOString() : _ref5$timestamp;
socket.send(rfc5424({
appName: appName,
eol: eol,
facility: facility,
hostname: hostname,
message: message,
msgId: msgId,
procId: procId,
severity: severity,
structuredData: structuredData,
timestamp: timestamp
}));
});
});
});
}; // sync -> async
exports.rfc5426 = rfc5426;
var rfc6587 = function rfc6587(_ref6) {
var defaultAppName = _ref6.defaultAppName,
defaultEol = _ref6.defaultEol,
defaultFacility = _ref6.defaultFacility,
defaultHostname = _ref6.defaultHostname,
defaultMsgId = _ref6.defaultMsgId,
defaultProcId = _ref6.defaultProcId,
defaultSeverity = _ref6.defaultSeverity,
defaultStructuredData = _ref6.defaultStructuredData,
family = _ref6.family,
host = _ref6.host,
port = _ref6.port;
return function (_ref7) {
var _ref7$appName = _ref7.appName,
appName = _ref7$appName === void 0 ? defaultAppName : _ref7$appName,
_ref7$eol = _ref7.eol,
eol = _ref7$eol === void 0 ? defaultEol : _ref7$eol,
_ref7$facility = _ref7.facility,
facility = _ref7$facility === void 0 ? defaultFacility : _ref7$facility,
_ref7$hostname = _ref7.hostname,
hostname = _ref7$hostname === void 0 ? defaultHostname : _ref7$hostname,
message = _ref7.message,
_ref7$msgId = _ref7.msgId,
msgId = _ref7$msgId === void 0 ? defaultMsgId : _ref7$msgId,
_ref7$procId = _ref7.procId,
procId = _ref7$procId === void 0 ? defaultProcId : _ref7$procId,
_ref7$severity = _ref7.severity,
severity = _ref7$severity === void 0 ? defaultSeverity : _ref7$severity,
_ref7$structuredData = _ref7.structuredData,
structuredData = _ref7$structuredData === void 0 ? defaultStructuredData : _ref7$structuredData,
_ref7$timestamp = _ref7.timestamp,
timestamp = _ref7$timestamp === void 0 ? new Date().toISOString() : _ref7$timestamp;
return new Promise(function (resolve, reject) {
var socket = (0, _net.createConnection)({
family: family,
host: host,
port: port
});
socket.once('error', reject);
socket.once('end', resolve);
socket.once('connect', function () {
socket.end(rfc5424({
appName: appName,
eol: eol,
facility: facility,
hostname: hostname,
message: message,
msgId: msgId,
procId: procId,
severity: severity,
structuredData: structuredData,
timestamp: timestamp
}));
});
});
};
};
exports.rfc6587 = rfc6587;
var syslog = function syslog(_ref8) {
var ca = _ref8.ca,
cert = _ref8.cert,
checkServerIdentity = _ref8.checkServerIdentity,
_ref8$defaultAppName = _ref8.defaultAppName,
defaultAppName = _ref8$defaultAppName === void 0 ? process.argv[process.argv.length - 1] : _ref8$defaultAppName,
_ref8$defaultEol = _ref8.defaultEol,
defaultEol = _ref8$defaultEol === void 0 ? '\0' : _ref8$defaultEol,
_ref8$defaultFacility = _ref8.defaultFacility,
defaultFacility = _ref8$defaultFacility === void 0 ? FACILITIES.LOCAL0 : _ref8$defaultFacility,
_ref8$defaultHostname = _ref8.defaultHostname,
defaultHostname = _ref8$defaultHostname === void 0 ? (0, _os.hostname)() : _ref8$defaultHostname,
_ref8$defaultMsgId = _ref8.defaultMsgId,
defaultMsgId = _ref8$defaultMsgId === void 0 ? '-' : _ref8$defaultMsgId,
_ref8$defaultProcId = _ref8.defaultProcId,
defaultProcId = _ref8$defaultProcId === void 0 ? process.pid : _ref8$defaultProcId,
_ref8$defaultSeverity = _ref8.defaultSeverity,
defaultSeverity = _ref8$defaultSeverity === void 0 ? SEVERITIES.DEBUG : _ref8$defaultSeverity,
_ref8$defaultStructur = _ref8.defaultStructuredData,
defaultStructuredData = _ref8$defaultStructur === void 0 ? '-' : _ref8$defaultStructur,
_ref8$host = _ref8.host,
host = _ref8$host === void 0 ? 'localhost' : _ref8$host,
_ref8$port = _ref8.port,
port = _ref8$port === void 0 ? 514 : _ref8$port,
key = _ref8.key,
_ref8$protocol = _ref8.protocol,
protocol = _ref8$protocol === void 0 ? 'tcp' : _ref8$protocol;
switch (protocol) {
case 'tls':
{
return rfc5425({
ca: ca,
cert: cert,
checkServerIdentity: checkServerIdentity,
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 0,
host: host,
hostname: _os.hostname,
key: key,
port: port
});
}
case 'tls4':
{
return rfc5425({
ca: ca,
cert: cert,
checkServerIdentity: checkServerIdentity,
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 4,
host: host,
hostname: _os.hostname,
key: key,
port: port
});
}
case 'tls6':
{
return rfc5425({
ca: ca,
cert: cert,
checkServerIdentity: checkServerIdentity,
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 6,
host: host,
hostname: _os.hostname,
key: key,
port: port
});
}
case 'tcp':
{
return rfc6587({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 0,
host: host,
hostname: _os.hostname,
port: port
});
}
case 'tcp4':
{
return rfc6587({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 4,
host: host,
hostname: _os.hostname,
port: port
});
}
case 'tcp6':
{
return rfc6587({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 6,
host: host,
hostname: _os.hostname,
port: port
});
}
case 'udp':
{
return rfc5426({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 0,
host: host,
hostname: _os.hostname,
port: port
});
}
case 'udp4':
{
return rfc5426({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 4,
host: host,
hostname: _os.hostname,
port: port
});
}
case 'udp6':
{
return rfc5426({
defaultAppName: defaultAppName,
defaultEol: defaultEol,
defaultFacility: defaultFacility,
defaultHostname: defaultHostname,
defaultMsgId: defaultMsgId,
defaultProcId: defaultProcId,
defaultSeverity: defaultSeverity,
defaultStructuredData: defaultStructuredData,
family: 6,
host: host,
hostname: _os.hostname,
port: port
});
}
default:
{
throw Error('Unsupported protocol');
}
}
};
exports.syslog = syslog;