{"version":3,"sources":["../../src/loggers/winston.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { formatMessage, removeKeys } from \"./utils.js\";\n\nconst MAX_BUFFER_SIZE = 1000;\n\nlet isPatched = false;\nlet globalLogsContext: AsyncLocalStorage<LogRecord[]>;\n\nexport async function patchWinston(\n  logsContext: AsyncLocalStorage<LogRecord[]>,\n) {\n  globalLogsContext = logsContext;\n\n  if (isPatched) {\n    return;\n  }\n\n  try {\n    const loggerModule = await import(\n      // @ts-expect-error - file is not typed\n      /* webpackIgnore: true */ \"winston/lib/winston/logger.js\"\n    );\n    if (loggerModule.default?.prototype?.write) {\n      const originalWrite = loggerModule.default.prototype.write;\n      loggerModule.default.prototype.write = function (info: any) {\n        captureLog(info);\n        return originalWrite.call(this, info);\n      };\n    }\n  } catch {\n    // winston is not installed, silently ignore\n  }\n\n  isPatched = true;\n}\n\nfunction captureLog(info: any) {\n  const logs = globalLogsContext?.getStore();\n  if (!logs || !info || logs.length >= MAX_BUFFER_SIZE) {\n    return;\n  }\n\n  try {\n    const rest = removeKeys(info, [\"timestamp\", \"level\", \"message\", \"splat\"]);\n    const formattedMessage = formatMessage(info.message, rest);\n    if (formattedMessage) {\n      logs.push({\n        timestamp: parseTimestamp(info.timestamp),\n        level: info.level || \"info\",\n        message: formattedMessage.trim(),\n      });\n    }\n  } catch (e) {\n    // ignore\n  }\n}\n\nfunction parseTimestamp(timestamp: any) {\n  if (timestamp) {\n    const ts = new Date(timestamp).getTime();\n    if (!isNaN(ts)) {\n      return ts / 1000;\n    }\n  }\n  return Date.now() / 1000;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;AAAA,mBAA0C;AAE1C,MAAMA,kBAAkB;AAExB,IAAIC,YAAY;AAChB,IAAIC;AAEJ,eAAsBC,aACpBC,aAA2C;AAR7C;AAUEF,sBAAoBE;AAEpB,MAAIH,WAAW;AACb;EACF;AAEA,MAAI;AACF,UAAMI,eAAe,MAAM;;;MAEC;IAAA;AAE5B,SAAIA,wBAAaC,YAAbD,mBAAsBE,cAAtBF,mBAAiCG,OAAO;AAC1C,YAAMC,gBAAgBJ,aAAaC,QAAQC,UAAUC;AACrDH,mBAAaC,QAAQC,UAAUC,QAAQ,SAAUE,MAAS;AACxDC,mBAAWD,IAAAA;AACX,eAAOD,cAAcG,KAAK,MAAMF,IAAAA;MAClC;IACF;EACF,QAAQ;EAER;AAEAT,cAAY;AACd;AA1BsBE;AA4BtB,SAASQ,WAAWD,MAAS;AAC3B,QAAMG,OAAOX,uDAAmBY;AAChC,MAAI,CAACD,QAAQ,CAACH,QAAQG,KAAKE,UAAUf,iBAAiB;AACpD;EACF;AAEA,MAAI;AACF,UAAMgB,WAAOC,yBAAWP,MAAM;MAAC;MAAa;MAAS;MAAW;KAAQ;AACxE,UAAMQ,uBAAmBC,4BAAcT,KAAKU,SAASJ,IAAAA;AACrD,QAAIE,kBAAkB;AACpBL,WAAKQ,KAAK;QACRC,WAAWC,eAAeb,KAAKY,SAAS;QACxCE,OAAOd,KAAKc,SAAS;QACrBJ,SAASF,iBAAiBO,KAAI;MAChC,CAAA;IACF;EACF,SAASC,GAAG;EAEZ;AACF;AAnBSf;AAqBT,SAASY,eAAeD,WAAc;AACpC,MAAIA,WAAW;AACb,UAAMK,KAAK,IAAIC,KAAKN,SAAAA,EAAWO,QAAO;AACtC,QAAI,CAACC,MAAMH,EAAAA,GAAK;AACd,aAAOA,KAAK;IACd;EACF;AACA,SAAOC,KAAKG,IAAG,IAAK;AACtB;AARSR;","names":["MAX_BUFFER_SIZE","isPatched","globalLogsContext","patchWinston","logsContext","loggerModule","default","prototype","write","originalWrite","info","captureLog","call","logs","getStore","length","rest","removeKeys","formattedMessage","formatMessage","message","push","timestamp","parseTimestamp","level","trim","e","ts","Date","getTime","isNaN","now"]}