@cgaspard/webappmcp
Version:
WebApp MCP - Model Context Protocol integration for web applications with server-side debugging tools
82 lines • 3.01 kB
JavaScript
;
// Winston transport for capturing logs
// This module is optional and only loads if Winston is available
Object.defineProperty(exports, "__esModule", { value: true });
exports.createWinstonTransport = createWinstonTransport;
exports.attachToWinston = attachToWinston;
/**
* Create a Winston transport dynamically if Winston is available
*/
function createWinstonTransport(serverLogs, serverLogLimit) {
try {
// Try to load winston-transport base class
const Transport = require('winston-transport');
// Create custom transport class
class WebAppMCPTransport extends Transport {
constructor(opts = {}) {
super(opts);
}
log(info, callback) {
setImmediate(() => {
this.emit('logged', info);
});
// Store the log entry
serverLogs.push({
level: info.level,
timestamp: info.timestamp || new Date().toISOString(),
args: [info.message],
metadata: info,
});
// Maintain circular buffer
if (serverLogs.length > serverLogLimit) {
serverLogs.shift();
}
callback();
}
}
return new WebAppMCPTransport();
}
catch (error) {
// winston-transport not available
return null;
}
}
/**
* Helper to detect and attach to Winston loggers
*/
function attachToWinston(serverLogs, serverLogLimit) {
try {
// Try to find Winston in the require cache
const winstonPath = Object.keys(require.cache).find(key => key.includes('node_modules/winston/') && key.endsWith('winston.js'));
if (winstonPath) {
const winston = require(winstonPath);
const transport = createWinstonTransport(serverLogs, serverLogLimit);
if (!transport) {
return false;
}
// Add our transport to the default logger if it exists
if (winston.default && winston.default.add) {
winston.default.add(transport);
}
// Also intercept createLogger to add our transport to new loggers
const originalCreateLogger = winston.createLogger;
if (originalCreateLogger) {
winston.createLogger = function (...args) {
const logger = originalCreateLogger.apply(winston, args);
const newTransport = createWinstonTransport(serverLogs, serverLogLimit);
if (newTransport) {
logger.add(newTransport);
}
return logger;
};
}
return true;
}
}
catch (error) {
// Winston not found or error attaching
return false;
}
return false;
}
//# sourceMappingURL=winston-transport.js.map