122 lines
3.8 KiB
JavaScript
122 lines
3.8 KiB
JavaScript
import _ from "lodash";
|
|
|
|
const MASK = "[REDACTED]";
|
|
|
|
const redactString = (value) => {
|
|
if (typeof value !== "string") return value;
|
|
|
|
return value
|
|
.replace(
|
|
/([a-zA-Z0-9._%+-]{1,})@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/g,
|
|
`${MASK}@${MASK}`
|
|
)
|
|
.replace(/Bearer\s+[A-Za-z0-9._\-]+/gi, `Bearer ${MASK}`)
|
|
.replace(/("client_secret"\s*:\s*")[^"]+("?)/gi, `$1${MASK}$2`)
|
|
.replace(/("access_token"\s*:\s*")[^"]+("?)/gi, `$1${MASK}$2`);
|
|
};
|
|
|
|
export const redactSensitive = (value) => {
|
|
if (value == null) return value;
|
|
|
|
if (typeof value === "string") {
|
|
return redactString(value);
|
|
}
|
|
|
|
try {
|
|
const json = JSON.stringify(value);
|
|
return redactString(json);
|
|
} catch (_error) {
|
|
return MASK;
|
|
}
|
|
};
|
|
|
|
export const getIP = (req) => {
|
|
const forwarded = req.headers["x-forwarded-for"];
|
|
|
|
const ip =
|
|
typeof forwarded === "string"
|
|
? forwarded.split(/, /)[0]
|
|
: req.socket.remoteAddress;
|
|
|
|
console.info(
|
|
"\n====================\n Client IP address: " + ip,
|
|
"\n=====================\n"
|
|
);
|
|
};
|
|
|
|
export const consoleLogger = (err) => {
|
|
console.log(
|
|
"\n\n/////////////////////////////////////////////////\nRaw Error " +
|
|
redactSensitive(err) +
|
|
"\n\n/////////////////////////////////////////////////\n"
|
|
);
|
|
var errStr =
|
|
"\n\n/////////////////////////////////////////////////\nServer Error " +
|
|
"\n" +
|
|
(_.has(err, "name") ? "Name: " + err.name + "\n" : "") +
|
|
(_.has(err, "code") ? "Code: " + err.code + "\n" : "") +
|
|
(_.has(err, "query") ? "Query: " + err.query + "\n" : "") +
|
|
(_.has(err, "message") ? "Message: " + err.message + "\n" : "") +
|
|
(_.has(err, "request.url")
|
|
? "request.url: " + err.request.url + "\n"
|
|
: "") +
|
|
(_.has(err, "response.status") ? "Status: " + err.code + "\n" : "") +
|
|
(_.has(err, "response.statusText")
|
|
? "\nStatusText: " + err.response.status + "\n"
|
|
: "") +
|
|
(_.has(err, "response.request.socket.remoteAddress")
|
|
? "\nRequest IP: " +
|
|
err.response.request.socket.remoteAddress +
|
|
"\n"
|
|
: "") +
|
|
(_.has(err, "response.data.error.message")
|
|
? "\nMessage: " +
|
|
redactSensitive(err.response.data.error.message) +
|
|
"\n"
|
|
: "") +
|
|
(_.has(err, "response.config.url")
|
|
? "\nRequest URL: " + redactSensitive(err.config.url) + "\n"
|
|
: "") +
|
|
(_.has(err, "response.headers.date")
|
|
? "\nRequest Time: " + err.response.headers.date + "\n"
|
|
: "") +
|
|
(_.has(err, "config.url")
|
|
? "\nAxios config url: " + redactSensitive(err.config.url) + "\n"
|
|
: "") +
|
|
(_.has(err, "config.url")
|
|
? "\nAxios message url: " + redactSensitive(err.message) + "\n"
|
|
: "") +
|
|
(_.has(err, "config.data")
|
|
? "\nRequest payload: " + redactSensitive(err.config.data) + "\n"
|
|
: "") +
|
|
"\n/////////////////////////////////////////////////\n";
|
|
|
|
console.log(errStr);
|
|
};
|
|
|
|
export const conLog = (err) => {
|
|
var errStr =
|
|
"\n\n/////////////////////////////////////////////////\nResponse: " +
|
|
"\n" +
|
|
err +
|
|
"\n/////////////////////////////////////////////////\n\n";
|
|
|
|
console.log(errStr);
|
|
return errStr;
|
|
};
|
|
|
|
export const logInfo = (event, data = {}) => {
|
|
try {
|
|
console.info(
|
|
JSON.stringify({
|
|
level: "info",
|
|
event,
|
|
data: redactSensitive(data),
|
|
ts: new Date().toISOString()
|
|
})
|
|
);
|
|
} catch (_error) {
|
|
console.info(`[info] ${event}`);
|
|
}
|
|
};
|