50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
// -----------------------------------------------------------------------------
|
|
// Thin wrapper around the shared logger + a socket emitter,
|
|
// mirroring the Fortellis logger shape for parity.
|
|
//
|
|
// Emits: "rr-log-event" { level, message, txnDetails }
|
|
//
|
|
// NOTE: Keep this lightweight and side-effect free—downstream flows rely on it
|
|
// for both developer troubleshooting and UI progress messages.
|
|
// -----------------------------------------------------------------------------
|
|
|
|
const logger = require("../utils/logger");
|
|
|
|
/**
|
|
* Emit a structured RR log event to both the central logger and (if present)
|
|
* over the current socket connection for real-time UI visibility.
|
|
*
|
|
* @param {Object} socket - A Socket.IO socket OR an Express req (when reused in REST).
|
|
* Expected fields if present:
|
|
* - socket.user?.email (used as the "actor" for audit trails)
|
|
* - socket.emit(...) method in live socket contexts
|
|
* @param {"SILLY"|"DEBUG"|"INFO"|"WARN"|"ERROR"} level - Log severity
|
|
* @param {string} message - Human readable message
|
|
* @param {Object} [txnDetails] - Optional structured metadata (ids, payload snippets, timings)
|
|
*/
|
|
function CreateRRLogEvent(socket, level, message, txnDetails) {
|
|
const userEmail = socket?.user?.email || "unknown";
|
|
|
|
// 1) Centralized app logger (goes to your sinks: console, Datadog, etc.)
|
|
// Namespace: "rr-log-event" to keep provider logs grouped.
|
|
try {
|
|
logger.log("rr-log-event", level, userEmail, null, {
|
|
wsmessage: message,
|
|
txnDetails
|
|
});
|
|
} catch {
|
|
// Best-effort: never throw from logging
|
|
}
|
|
|
|
// 2) Realtime push to the UI if we're in a socket context
|
|
try {
|
|
if (typeof socket?.emit === "function") {
|
|
socket.emit("rr-log-event", { level, message, txnDetails });
|
|
}
|
|
} catch {
|
|
// Best-effort: never throw from logging
|
|
}
|
|
}
|
|
|
|
module.exports = CreateRRLogEvent;
|