diff --git a/yarn-project/aztec.js/src/index.ts b/yarn-project/aztec.js/src/index.ts index 5adffcba01f0..003739bdf9c6 100644 --- a/yarn-project/aztec.js/src/index.ts +++ b/yarn-project/aztec.js/src/index.ts @@ -161,7 +161,7 @@ export { decodeFromAbi, encodeArguments, type AbiType } from '@aztec/foundation/ export { toBigIntBE } from '@aztec/foundation/bigint-buffer'; export { sha256 } from '@aztec/foundation/crypto'; export { makeFetch } from '@aztec/foundation/json-rpc/client'; -export { createDebugLogger, onLog, type DebugLogger } from '@aztec/foundation/log'; +export { createDebugLogger, type DebugLogger } from '@aztec/foundation/log'; export { retry, retryUntil } from '@aztec/foundation/retry'; export { to2Fields, toBigInt } from '@aztec/foundation/serialize'; export { sleep } from '@aztec/foundation/sleep'; diff --git a/yarn-project/aztec/package.json b/yarn-project/aztec/package.json index e9ff10afa77d..180f00983628 100644 --- a/yarn-project/aztec/package.json +++ b/yarn-project/aztec/package.json @@ -55,16 +55,13 @@ "@aztec/telemetry-client": "workspace:^", "@aztec/txe": "workspace:^", "@aztec/types": "workspace:^", - "@opentelemetry/winston-transport": "^0.7.0", "@types/chalk": "^2.2.0", "abitype": "^0.8.11", "chalk": "^5.3.0", "commander": "^12.1.0", "koa": "^2.14.2", "koa-router": "^12.0.0", - "viem": "^2.7.15", - "winston": "^3.10.0", - "winston-daily-rotate-file": "^4.7.1" + "viem": "^2.7.15" }, "files": [ "dest", diff --git a/yarn-project/aztec/src/cli/cli.ts b/yarn-project/aztec/src/cli/cli.ts index 91d803851e40..b6b314bd63c5 100644 --- a/yarn-project/aztec/src/cli/cli.ts +++ b/yarn-project/aztec/src/cli/cli.ts @@ -9,7 +9,6 @@ import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { Command } from 'commander'; -import { setupConsoleJsonLog } from '../logging.js'; import { createSandbox } from '../sandbox.js'; import { github, splash } from '../splash.js'; import { aztecStartOptions } from './aztec_start_options.js'; @@ -39,11 +38,6 @@ export function injectAztecCommands(program: Command, userLog: LogFn, debugLogge startCmd.helpInformation = printAztecStartHelpText; startCmd.action(async options => { - // setup json logging - if (['1', 'true', 'TRUE'].includes(process.env.LOG_JSON ?? '')) { - setupConsoleJsonLog(); - } - // list of 'stop' functions to call when process ends const signalHandlers: Array<() => Promise> = []; const services: NamespacedApiHandlers = {}; diff --git a/yarn-project/aztec/src/logging.ts b/yarn-project/aztec/src/logging.ts deleted file mode 100644 index a7deed55ae50..000000000000 --- a/yarn-project/aztec/src/logging.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { currentLevel, onLog, setLevel } from '@aztec/foundation/log'; - -import { OpenTelemetryTransportV3 } from '@opentelemetry/winston-transport'; -import * as path from 'path'; -import * as process from 'process'; -import * as winston from 'winston'; -import DailyRotateFile from 'winston-daily-rotate-file'; - -const { format } = winston; -const CURRENT_LOG_FILE_NAME = 'aztec.debug.log'; -const LOG_DIR = 'log'; - -/** Creates a winston logger that logs everything to a local rotating file */ -function createWinstonLocalFileLogger() { - // See https://www.npmjs.com/package/winston-daily-rotate-file#user-content-options - const transport: DailyRotateFile = new DailyRotateFile({ - filename: 'aztec-%DATE%.debug.log', - dirname: LOG_DIR, - datePattern: 'YYYY-MM-DD', - zippedArchive: true, - maxSize: '30m', - maxFiles: '5', - createSymlink: true, - symlinkName: CURRENT_LOG_FILE_NAME, - }); - - return winston.createLogger({ - level: 'debug', - transports: [transport], - format: format.combine(format.timestamp(), format.json()), - }); -} - -/** Creates a winston logger that logs everything to stdout in json format */ -function createWinstonJsonStdoutLogger() { - return winston.createLogger({ - level: currentLevel, - transports: [ - new winston.transports.Console({ - format: format.combine(format.timestamp(), format.json()), - }), - new OpenTelemetryTransportV3(), - ], - }); -} - -/** - * Hooks to all log statements and outputs them to a local rotating file. - * @returns Output log name. - */ -export function setupFileDebugLog() { - const logger = createWinstonLocalFileLogger(); - onLog((level, module, message, data) => { - logger.log({ ...data, level, module, message }); - }); - const workdir = process.env.HOST_WORKDIR ?? process.cwd(); - return path.join(workdir, LOG_DIR, CURRENT_LOG_FILE_NAME); -} - -/** - * Silences the foundation stdout logger and funnels all logs through a winston JSON logger. - */ -export function setupConsoleJsonLog() { - const logger = createWinstonJsonStdoutLogger(); - setLevel('silent'); - onLog((level, module, message, data) => { - logger.log({ ...data, level, module, message }); - }); -} diff --git a/yarn-project/bb-prover/src/avm_proving.test.ts b/yarn-project/bb-prover/src/avm_proving.test.ts index 3e0ae84cf228..6195eb0850ae 100644 --- a/yarn-project/bb-prover/src/avm_proving.test.ts +++ b/yarn-project/bb-prover/src/avm_proving.test.ts @@ -30,7 +30,7 @@ async function proveAndVerifyAvmTestContract(functionName: string, calldata: Fr[ const bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-')); // Then we prove. - const proofRes = await generateAvmProof(bbPath, bbWorkingDirectory, avmCircuitInputs, logger); + const proofRes = await generateAvmProof(bbPath, bbWorkingDirectory, avmCircuitInputs, internalLogger); if (proofRes.status === BB_RESULT.FAILURE) { internalLogger.error(`Proof generation failed: ${proofRes.reason}`); } diff --git a/yarn-project/bb-prover/src/bb/execute.ts b/yarn-project/bb-prover/src/bb/execute.ts index e73a210f3f96..a038226d9ae3 100644 --- a/yarn-project/bb-prover/src/bb/execute.ts +++ b/yarn-project/bb-prover/src/bb/execute.ts @@ -1,6 +1,6 @@ import { type AvmCircuitInputs } from '@aztec/circuits.js'; import { sha256 } from '@aztec/foundation/crypto'; -import { type LogFn, currentLevel as currentLogLevel } from '@aztec/foundation/log'; +import { type DebugLogger, type LogFn } from '@aztec/foundation/log'; import { Timer } from '@aztec/foundation/timer'; import { type NoirCompiledCircuit } from '@aztec/types/noir'; @@ -493,7 +493,7 @@ export async function generateAvmProof( pathToBB: string, workingDirectory: string, input: AvmCircuitInputs, - log: LogFn, + logger: DebugLogger, ): Promise { // Check that the working directory exists try { @@ -550,11 +550,11 @@ export async function generateAvmProof( avmHintsPath, '-o', outputPath, - currentLogLevel == 'debug' ? '-d' : currentLogLevel == 'verbose' ? '-v' : '', + logger.level === 'debug' || logger.level === 'trace' ? '-d' : logger.level === 'verbose' ? '-v' : '', ]; const timer = new Timer(); const logFunction = (message: string) => { - log(`AvmCircuit (prove) BB out - ${message}`); + logger.verbose(`AvmCircuit (prove) BB out - ${message}`); }; const result = await executeBB(pathToBB, 'avm_prove', args, logFunction); const duration = timer.ms(); diff --git a/yarn-project/bb-prover/src/prover/bb_prover.ts b/yarn-project/bb-prover/src/prover/bb_prover.ts index f737b093a382..57c957382c9d 100644 --- a/yarn-project/bb-prover/src/prover/bb_prover.ts +++ b/yarn-project/bb-prover/src/prover/bb_prover.ts @@ -535,7 +535,7 @@ export class BBNativeRollupProver implements ServerCircuitProver { private async generateAvmProofWithBB(input: AvmCircuitInputs, workingDirectory: string): Promise { logger.info(`Proving avm-circuit for ${input.functionName}...`); - const provingResult = await generateAvmProof(this.config.bbBinaryPath, workingDirectory, input, logger.verbose); + const provingResult = await generateAvmProof(this.config.bbBinaryPath, workingDirectory, input, logger); if (provingResult.status === BB_RESULT.FAILURE) { logger.error(`Failed to generate AVM proof for ${input.functionName}: ${provingResult.reason}`); diff --git a/yarn-project/end-to-end/package.json b/yarn-project/end-to-end/package.json index d9514c42dfb4..1678b81fc530 100644 --- a/yarn-project/end-to-end/package.json +++ b/yarn-project/end-to-end/package.json @@ -93,7 +93,6 @@ "viem": "^2.7.15", "webpack": "^5.88.2", "webpack-cli": "^5.1.4", - "winston": "^3.10.0", "zod": "^3.23.8" }, "devDependencies": { diff --git a/yarn-project/end-to-end/src/fixtures/logging.ts b/yarn-project/end-to-end/src/fixtures/logging.ts index 5e16e5585f80..8c2488158c53 100644 --- a/yarn-project/end-to-end/src/fixtures/logging.ts +++ b/yarn-project/end-to-end/src/fixtures/logging.ts @@ -1,10 +1,5 @@ -import { onLog } from '@aztec/aztec.js'; - import { mkdirpSync } from 'fs-extra'; import { dirname } from 'path'; -import * as winston from 'winston'; - -const { format, transports } = winston; let metricsLoggerSet = false; @@ -22,15 +17,6 @@ export function setupMetricsLogger(filename: string) { return; } mkdirpSync(dirname(filename)); - const logger = winston.createLogger({ - level: 'debug', - format: format.combine(format.timestamp(), format.json()), - transports: [new transports.File({ filename })], - }); - onLog((level, namespace, message, data) => { - if (data && data['eventName']) { - logger.log({ ...data, level, namespace, message }); - } - }); + // TODO(palla/log): Reenable or kill metrics logger metricsLoggerSet = true; } diff --git a/yarn-project/foundation/package.json b/yarn-project/foundation/package.json index 46cc1d6d96be..909cb8c069b2 100644 --- a/yarn-project/foundation/package.json +++ b/yarn-project/foundation/package.json @@ -101,7 +101,9 @@ "@aztec/bb.js": "portal:../../barretenberg/ts", "@koa/cors": "^5.0.0", "@noble/curves": "^1.2.0", + "@opentelemetry/instrumentation-pino": "^0.44.0", "bn.js": "^5.2.1", + "colorette": "^2.0.20", "debug": "^4.3.4", "detect-node": "^2.1.0", "elliptic": "^6.5.4", @@ -116,6 +118,8 @@ "lodash.clonedeepwith": "^4.5.0", "memdown": "^6.1.1", "pako": "^2.1.0", + "pino": "^9.5.0", + "pino-pretty": "^13.0.0", "sha3": "^2.1.4", "zod": "^3.23.8" }, diff --git a/yarn-project/foundation/src/crypto/random/randomness_singleton.ts b/yarn-project/foundation/src/crypto/random/randomness_singleton.ts index f226874a9216..a848f85a6064 100644 --- a/yarn-project/foundation/src/crypto/random/randomness_singleton.ts +++ b/yarn-project/foundation/src/crypto/random/randomness_singleton.ts @@ -1,4 +1,4 @@ -import { createDebugLogger } from '../../log/logger.js'; +import { createDebugLogger } from '../../log/pino-logger.js'; /** * A number generator which is used as a source of randomness in the system. If the SEED env variable is set, the diff --git a/yarn-project/foundation/src/json-rpc/client/safe_json_rpc_client.ts b/yarn-project/foundation/src/json-rpc/client/safe_json_rpc_client.ts index 3c2bf3c32ba3..2de143063b6b 100644 --- a/yarn-project/foundation/src/json-rpc/client/safe_json_rpc_client.ts +++ b/yarn-project/foundation/src/json-rpc/client/safe_json_rpc_client.ts @@ -1,6 +1,6 @@ import { format } from 'util'; -import { createDebugLogger } from '../../log/logger.js'; +import { createDebugLogger } from '../../log/pino-logger.js'; import { type ApiSchema, type ApiSchemaFor, schemaHasMethod } from '../../schemas/api.js'; import { defaultFetch } from './fetch.js'; diff --git a/yarn-project/foundation/src/log/index.ts b/yarn-project/foundation/src/log/index.ts index 2bf44ed88ba4..8e61bc817825 100644 --- a/yarn-project/foundation/src/log/index.ts +++ b/yarn-project/foundation/src/log/index.ts @@ -1,5 +1,5 @@ export * from './console.js'; export * from './debug.js'; -export * from './logger.js'; +export * from './pino-logger.js'; export * from './log_history.js'; export * from './log_fn.js'; diff --git a/yarn-project/foundation/src/log/log-filters.test.ts b/yarn-project/foundation/src/log/log-filters.test.ts new file mode 100644 index 000000000000..11cabca8ed08 --- /dev/null +++ b/yarn-project/foundation/src/log/log-filters.test.ts @@ -0,0 +1,50 @@ +import { parseEnv } from './log-filters.js'; + +describe('parseEnv', () => { + const defaultLevel = 'info'; + + it('returns default level and empty filters when env is empty', () => { + const env = ''; + const [level, filters] = parseEnv(env, defaultLevel); + expect(level).toBe(defaultLevel); + expect(filters).toEqual([]); + }); + + it('parses level and filters from env string', () => { + const env = 'debug;warn:module1,module2;error:module3'; + const [level, filters] = parseEnv(env, defaultLevel); + expect(level).toBe('debug'); + expect(filters).toEqual([ + ['module3', 'error'], + ['module2', 'warn'], + ['module1', 'warn'], + ]); + }); + + it('handles spaces in env string', () => { + const env = 'debug; warn: module1, module2; error: module3'; + const [level, filters] = parseEnv(env, defaultLevel); + expect(level).toBe('debug'); + expect(filters).toEqual([ + ['module3', 'error'], + ['module2', 'warn'], + ['module1', 'warn'], + ]); + }); + + it('throws an error for invalid default log level', () => { + const env = 'invalid;module1:warn'; + expect(() => parseEnv(env, defaultLevel)).toThrow('Invalid log level: invalid'); + }); + + it('throws an error for invalid log level in filter', () => { + const env = 'invalid;warn:module'; + expect(() => parseEnv(env, defaultLevel)).toThrow('Invalid log level: invalid'); + }); + + it('throws an error for invalid log filter statement', () => { + const defaultLevel = 'info'; + const env = 'debug;warn:module1;error:'; + expect(() => parseEnv(env, defaultLevel)).toThrow('Invalid log filter statement: error'); + }); +}); diff --git a/yarn-project/foundation/src/log/log-filters.ts b/yarn-project/foundation/src/log/log-filters.ts new file mode 100644 index 000000000000..808818c3fd59 --- /dev/null +++ b/yarn-project/foundation/src/log/log-filters.ts @@ -0,0 +1,49 @@ +import { type LogLevel, LogLevels } from './log-levels.js'; + +export type LogFilters = [string, LogLevel][]; + +export function getLogLevelFromFilters(filters: LogFilters, module: string): LogLevel | undefined { + for (const [filterModule, level] of filters) { + if (module.startsWith(filterModule)) { + return level as LogLevel; + } + } + return undefined; +} + +export function assertLogLevel(level: string): asserts level is LogLevel { + if (!LogLevels.includes(level as LogLevel)) { + throw new Error(`Invalid log level: ${level}`); + } +} + +export function parseEnv(env: string | undefined, defaultLevel: LogLevel): [LogLevel, LogFilters] { + if (!env) { + return [defaultLevel, []]; + } + const [level] = env.split(';', 1); + assertLogLevel(level); + return [level, parseFilters(env.slice(level.length + 1))]; +} + +export function parseFilters(definition: string | undefined): LogFilters { + if (!definition) { + return []; + } + + const statements = definition.split(';'); + const filters: LogFilters = []; + for (const statement of statements) { + const [level] = statement.split(':', 1); + const modules = statement.slice(level.length + 1); + if (!modules || !level) { + throw new Error(`Invalid log filter statement: ${statement}`); + } + const sanitizedLevel = level.trim().toLowerCase(); + assertLogLevel(sanitizedLevel); + for (const module of modules.split(',')) { + filters.push([module.trim().toLowerCase(), sanitizedLevel as LogLevel | 'silent']); + } + } + return filters.reverse(); +} diff --git a/yarn-project/foundation/src/log/log-levels.ts b/yarn-project/foundation/src/log/log-levels.ts new file mode 100644 index 000000000000..d2a630de9f30 --- /dev/null +++ b/yarn-project/foundation/src/log/log-levels.ts @@ -0,0 +1,3 @@ +export const LogLevels = ['silent', 'fatal', 'error', 'warn', 'info', 'verbose', 'debug', 'trace'] as const; + +export type LogLevel = (typeof LogLevels)[number]; diff --git a/yarn-project/foundation/src/log/logger.ts b/yarn-project/foundation/src/log/logger.ts deleted file mode 100644 index 2f5954f6eb07..000000000000 --- a/yarn-project/foundation/src/log/logger.ts +++ /dev/null @@ -1,179 +0,0 @@ -import debug from 'debug'; -import { inspect } from 'util'; - -import { type LogData, type LogFn } from './log_fn.js'; - -const LogLevels = ['silent', 'error', 'warn', 'info', 'verbose', 'debug'] as const; - -/** - * A valid log severity level. - */ -export type LogLevel = (typeof LogLevels)[number]; - -function getLogLevel() { - const envLogLevel = process.env.LOG_LEVEL?.toLowerCase() as LogLevel; - let defaultLogLevel: LogLevel = 'info'; - if (process.env.DEBUG) { - // if we set DEBUG to a non-empty string, use debug as default - defaultLogLevel = 'debug'; - } else if (process.env.NODE_ENV === 'test') { - // otherwise, be silent in tests as these are frequently ran en-masse - defaultLogLevel = 'silent'; - } - return LogLevels.includes(envLogLevel) ? envLogLevel : defaultLogLevel; -} - -export let currentLevel = getLogLevel(); - -const logElapsedTime = ['1', 'true'].includes(process.env.LOG_ELAPSED_TIME ?? ''); -const firstTimestamp: number = Date.now(); - -function filterNegativePatterns(debugString: string): string { - return debugString - .split(',') - .filter(p => !p.startsWith('-')) - .join(','); -} -function extractNegativePatterns(debugString: string): string[] { - return ( - debugString - .split(',') - .filter(p => p.startsWith('-')) - // Remove the leading '-' from the pattern - .map(p => p.slice(1)) - ); -} - -const namespaces = process.env.DEBUG ?? 'aztec:*'; -debug.enable(filterNegativePatterns(namespaces)); - -/** Log function that accepts an exception object */ -type ErrorLogFn = (msg: string, err?: Error | unknown, data?: LogData) => void; - -/** - * Logger that supports multiple severity levels. - */ -export type Logger = { [K in LogLevel]: LogFn } & { /** Error log function */ error: ErrorLogFn }; - -/** - * Logger that supports multiple severity levels and can be called directly to issue a debug statement. - * Intended as a drop-in replacement for the debug module. - */ -export type DebugLogger = Logger; - -/** - * Creates a new DebugLogger for the current module, defaulting to the LOG_LEVEL env var. - * If DEBUG="[module]" env is set, will enable debug logging if the module matches. - * Uses npm debug for debug level and console.error for other levels. - * @param name - Name of the module. - * @param fixedLogData - Additional data to include in the log message. - * @usage createDebugLogger('aztec:validator'); - * // will always add the validator address to the log labels - * @returns A debug logger. - */ - -export function createDebugLogger(name: string): DebugLogger { - const debugLogger = debug(name); - - const negativePatterns = extractNegativePatterns(namespaces); - const accepted = () => { - return !negativePatterns.some(pattern => name.match(pattern)); - }; - const log = (level: LogLevel, msg: string, data?: LogData) => { - if (accepted()) { - logWithDebug(debugLogger, level, msg, data); - } - }; - const logger = { - silent: () => {}, - error: (msg: string, err?: unknown, data?: LogData) => log('error', fmtErr(msg, err), data), - warn: (msg: string, data?: LogData) => log('warn', msg, data), - info: (msg: string, data?: LogData) => log('info', msg, data), - verbose: (msg: string, data?: LogData) => log('verbose', msg, data), - debug: (msg: string, data?: LogData) => log('debug', msg, data), - }; - return Object.assign((msg: string, data?: LogData) => log('debug', msg, data), logger); -} - -/** - * A function to create a logger that automatically includes fixed data in each log entry. - * @param debugLogger - The base DebugLogger instance to which we attach fixed log data. - * @param fixedLogData - The data to be included in every log entry. - * @returns A DebugLogger with log level methods (error, warn, info, verbose, debug) that - * automatically attach `fixedLogData` to every log message. - */ -export function attachedFixedDataToLogger(debugLogger: DebugLogger, fixedLogData: LogData): DebugLogger { - // Helper function to merge fixed data with additional data passed to log entries. - const attach = (data?: LogData) => ({ ...fixedLogData, ...data }); - // Define the logger with all the necessary log level methods. - const logger = { - // Silent log level does nothing. - silent: () => {}, - error: (msg: string, err?: unknown, data?: LogData) => debugLogger.error(fmtErr(msg, err), attach(data)), - warn: (msg: string, data?: LogData) => debugLogger.warn(msg, attach(data)), - info: (msg: string, data?: LogData) => debugLogger.info(msg, attach(data)), - verbose: (msg: string, data?: LogData) => debugLogger.verbose(msg, attach(data)), - debug: (msg: string, data?: LogData) => debugLogger.debug(msg, attach(data)), - }; - return Object.assign((msg: string, data?: LogData) => debugLogger.debug(msg, attach(data)), logger); -} - -/** A callback to capture all logs. */ -export type LogHandler = (level: LogLevel, namespace: string, msg: string, data?: LogData) => void; - -const logHandlers: LogHandler[] = []; - -/** - * Registers a callback for all logs, whether they are emitted in the current log level or not. - * @param handler - Callback to be called on every log. - */ -export function onLog(handler: LogHandler) { - logHandlers.push(handler); -} - -/** Overrides current log level. */ -export function setLevel(level: LogLevel) { - currentLevel = level; -} - -/** - * Logs args to npm debug if enabled or log level is debug, console.error otherwise. - * @param debug - Instance of npm debug. - * @param level - Intended log level. - * @param args - Args to log. - */ -function logWithDebug(debug: debug.Debugger, level: LogLevel, msg: string, data?: LogData) { - for (const handler of logHandlers) { - handler(level, debug.namespace, msg, data); - } - - msg = data ? `${msg} ${fmtLogData(data)}` : msg; - if (debug.enabled && LogLevels.indexOf(level) <= LogLevels.indexOf(currentLevel)) { - if (logElapsedTime) { - const ts = ((Date.now() - firstTimestamp) / 1000).toFixed(3); - debug('%ss [%s] %s', ts, level.toUpperCase(), msg); - } else { - debug('[%s] %s', level.toUpperCase(), msg); - } - } -} - -/** - * Concatenates a log message and an exception. - * @param msg - Log message - * @param err - Error to log - * @returns A string with both the log message and the error message. - */ -function fmtErr(msg: string, err?: Error | unknown): string { - return err ? `${msg}: ${inspect(err)}` : msg; -} - -/** - * Formats structured log data as a string for console output. - * @param data - Optional log data. - */ -export function fmtLogData(data?: LogData): string { - return Object.entries(data ?? {}) - .map(([key, value]) => `${key}=${typeof value === 'object' && 'toString' in value ? value.toString() : value}`) - .join(' '); -} diff --git a/yarn-project/foundation/src/log/pino-logger.ts b/yarn-project/foundation/src/log/pino-logger.ts new file mode 100644 index 000000000000..89cd062359eb --- /dev/null +++ b/yarn-project/foundation/src/log/pino-logger.ts @@ -0,0 +1,93 @@ +import { bold, reset } from 'colorette'; +import { type LoggerOptions, pino } from 'pino'; +import { inspect } from 'util'; + +import { getLogLevelFromFilters, parseEnv } from './log-filters.js'; +import { type LogLevel } from './log-levels.js'; +import { type LogData, type LogFn } from './log_fn.js'; + +// TODO(palla/log): Rename to createLogger +export function createDebugLogger(module: string): DebugLogger { + // TODO(palla/log): Rename all module names to remove the aztec prefix + const pinoLogger = logger.child( + { module: module.replace(/^aztec:/, '') }, + { level: getLogLevelFromFilters(logFilters, module) }, + ); + + const logFn = (level: LogLevel, msg: string, data?: LogData) => pinoLogger[level](data ?? {}, msg); + + return { + silent: () => {}, + // TODO(palla/log): Should we move err to data instead of the text message? + /** Log as fatal. Use when an error has brought down the system. */ + fatal: (msg: string, err?: unknown, data?: LogData) => logFn('fatal', formatErr(msg, err), data), + /** Log as error. Use for errors in general. */ + error: (msg: string, err?: unknown, data?: LogData) => logFn('error', formatErr(msg, err), data), + /** Log as warn. Use for when we stray from the happy path. */ + warn: (msg: string, data?: LogData) => logFn('warn', msg, data), + /** Log as info. Use for providing an operator with info on what the system is doing. */ + info: (msg: string, data?: LogData) => logFn('info', msg, data), + /** Log as verbose. Use for when we need additional insight on what a subsystem is doing. */ + verbose: (msg: string, data?: LogData) => logFn('verbose', msg, data), + /** Log as debug. Use for when we need debugging info to troubleshoot an issue on a specific component. */ + debug: (msg: string, data?: LogData) => logFn('debug', msg, data), + /** Log as trace. Use for when we want to denial-of-service any recipient of the logs. */ + trace: (msg: string, data?: LogData) => logFn('trace', msg, data), + level: pinoLogger.level as LogLevel, + }; +} + +const defaultLogLevel = process.env.NODE_ENV === 'test' ? 'silent' : 'info'; +const [logLevel, logFilters] = parseEnv(process.env.LOG_LEVEL, defaultLogLevel); + +const pretty: Pick = { + transport: { + target: 'pino-pretty', + options: { + sync: true, + ignore: 'module,pid,hostname', + messageFormat: `${bold('{module}')} ${reset('{msg}')}`, + customLevels: 'fatal:60,error:50,warn:40,info:30,verbose:25,debug:20,trace:10', + customColors: 'fatal:bgRed,error:red,warn:yellow,info:green,verbose:magenta,debug:blue,trace:gray', + }, + }, +}; + +const logger = pino({ + customLevels: { + verbose: 25, + }, + useOnlyCustomLevels: false, + level: logLevel, + ...(['1', 'true', 'TRUE'].includes(process.env.LOG_JSON ?? '') ? {} : pretty), +}); + +logger.info( + { module: 'logger', ...logFilters.reduce((accum, [module, level]) => ({ ...accum, [`log.${module}`]: level }), {}) }, + `Console logger initialized with level ${logLevel}`, +); + +/** Log function that accepts an exception object */ +type ErrorLogFn = (msg: string, err?: Error | unknown, data?: LogData) => void; + +/** + * Logger that supports multiple severity levels. + */ +export type Logger = { [K in LogLevel]: LogFn } & { /** Error log function */ error: ErrorLogFn } & { level: LogLevel }; + +/** + * Logger that supports multiple severity levels and can be called directly to issue a debug statement. + * Intended as a drop-in replacement for the debug module. + * TODO(palla/log): Remove this alias + */ +export type DebugLogger = Logger; + +/** + * Concatenates a log message and an exception. + * @param msg - Log message + * @param err - Error to log + * @returns A string with both the log message and the error message. + */ +function formatErr(msg: string, err?: Error | unknown): string { + return err ? `${msg}: ${inspect(err)}` : msg; +} diff --git a/yarn-project/foundation/src/queue/fifo_memory_queue.ts b/yarn-project/foundation/src/queue/fifo_memory_queue.ts index e2271143ac6f..080133ed71c7 100644 --- a/yarn-project/foundation/src/queue/fifo_memory_queue.ts +++ b/yarn-project/foundation/src/queue/fifo_memory_queue.ts @@ -1,4 +1,4 @@ -import { type DebugLogger } from '../log/logger.js'; +import { type DebugLogger } from '../log/index.js'; import { BaseMemoryQueue } from './base_memory_queue.js'; /** diff --git a/yarn-project/ivc-integration/src/avm_integration.test.ts b/yarn-project/ivc-integration/src/avm_integration.test.ts index 31a14eac16cb..b9dd8bbd933e 100644 --- a/yarn-project/ivc-integration/src/avm_integration.test.ts +++ b/yarn-project/ivc-integration/src/avm_integration.test.ts @@ -123,14 +123,13 @@ async function proveAvmTestContract(functionName: string, calldata: Fr[] = []): const avmCircuitInputs = await simulateAvmTestContractGenerateCircuitInputs(functionName, calldata); const internalLogger = createDebugLogger('aztec:avm-proving-test'); - const logger = (msg: string, _data?: any) => internalLogger.verbose(msg); // The paths for the barretenberg binary and the write path are hardcoded for now. const bbPath = path.resolve('../../barretenberg/cpp/build/bin/bb'); const bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-')); // Then we prove. - const proofRes = await generateAvmProof(bbPath, bbWorkingDirectory, avmCircuitInputs, logger); + const proofRes = await generateAvmProof(bbPath, bbWorkingDirectory, avmCircuitInputs, internalLogger); if (proofRes.status === BB_RESULT.FAILURE) { internalLogger.error(`Proof generation failed: ${proofRes.reason}`); } diff --git a/yarn-project/telemetry-client/package.json b/yarn-project/telemetry-client/package.json index fdd9d252fafb..57c28862fa98 100644 --- a/yarn-project/telemetry-client/package.json +++ b/yarn-project/telemetry-client/package.json @@ -33,6 +33,7 @@ "@opentelemetry/exporter-metrics-otlp-http": "^0.52.0", "@opentelemetry/exporter-trace-otlp-http": "^0.54.0", "@opentelemetry/host-metrics": "^0.35.2", + "@opentelemetry/instrumentation-pino": "^0.44.0", "@opentelemetry/otlp-exporter-base": "^0.54.0", "@opentelemetry/resource-detector-aws": "^1.5.2", "@opentelemetry/resources": "^1.25.0", @@ -40,9 +41,7 @@ "@opentelemetry/sdk-metrics": "^1.25.0", "@opentelemetry/sdk-trace-node": "^1.25.0", "@opentelemetry/semantic-conventions": "^1.25.0", - "@opentelemetry/winston-transport": "^0.7.0", - "prom-client": "^15.1.3", - "winston": "^3.10.0" + "prom-client": "^15.1.3" }, "devDependencies": { "@jest/globals": "^29.5.0", diff --git a/yarn-project/telemetry-client/src/otel.ts b/yarn-project/telemetry-client/src/otel.ts index f94d054cb314..c4ff8abe92ae 100644 --- a/yarn-project/telemetry-client/src/otel.ts +++ b/yarn-project/telemetry-client/src/otel.ts @@ -11,6 +11,7 @@ import { import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; import { HostMetrics } from '@opentelemetry/host-metrics'; +import { PinoInstrumentation } from '@opentelemetry/instrumentation-pino'; import { awsEc2Detector, awsEcsDetector } from '@opentelemetry/resource-detector-aws'; import { type IResource, @@ -27,7 +28,7 @@ import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentele import { aztecDetector } from './aztec_resource_detector.js'; import { type TelemetryClientConfig } from './config.js'; -import { registerOtelLoggerProvider } from './otelLoggerProvider.js'; +import { registerOtelLoggerProvider } from './otel_logger_provider.js'; import { type Gauge, type TelemetryClient } from './telemetry.js'; export class OpenTelemetryClient implements TelemetryClient { @@ -129,7 +130,9 @@ export class OpenTelemetryClient implements TelemetryClient { }), ], }); + const loggerProvider = registerOtelLoggerProvider(resource, config.logsCollectorUrl); + instrumentLogger(loggerProvider, tracerProvider, meterProvider); const service = new OpenTelemetryClient(resource, meterProvider, tracerProvider, loggerProvider, log); service.start(); @@ -137,3 +140,16 @@ export class OpenTelemetryClient implements TelemetryClient { return service; } } + +function instrumentLogger( + loggerProvider: LoggerProvider, + tracerProvider: NodeTracerProvider, + meterProvider: MeterProvider, +) { + // We disable log sending since we have a batch log processor already configured + const instrumentation = new PinoInstrumentation({ disableLogSending: true }); + instrumentation.setLoggerProvider(loggerProvider); + instrumentation.setTracerProvider(tracerProvider); + instrumentation.setMeterProvider(meterProvider); + instrumentation.enable(); +} diff --git a/yarn-project/telemetry-client/src/otelLoggerProvider.ts b/yarn-project/telemetry-client/src/otel_logger_provider.ts similarity index 100% rename from yarn-project/telemetry-client/src/otelLoggerProvider.ts rename to yarn-project/telemetry-client/src/otel_logger_provider.ts index e5289b606c5a..40bfe646bef9 100644 --- a/yarn-project/telemetry-client/src/otelLoggerProvider.ts +++ b/yarn-project/telemetry-client/src/otel_logger_provider.ts @@ -24,7 +24,7 @@ export function registerOtelLoggerProvider(resource: IResource, otelLogsUrl?: UR maxQueueSize: 4096, }), ); - otelLogs.setGlobalLoggerProvider(loggerProvider); + otelLogs.setGlobalLoggerProvider(loggerProvider); return loggerProvider; } diff --git a/yarn-project/world-state/src/native/native_world_state_instance.ts b/yarn-project/world-state/src/native/native_world_state_instance.ts index a1fa6baed48f..31040d4a0090 100644 --- a/yarn-project/world-state/src/native/native_world_state_instance.ts +++ b/yarn-project/world-state/src/native/native_world_state_instance.ts @@ -10,7 +10,7 @@ import { NULLIFIER_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, } from '@aztec/circuits.js'; -import { createDebugLogger, fmtLogData } from '@aztec/foundation/log'; +import { createDebugLogger } from '@aztec/foundation/log'; import { SerialQueue } from '@aztec/foundation/queue'; import { Timer } from '@aztec/foundation/timer'; @@ -203,7 +203,7 @@ export class NativeWorldState implements NativeWorldStateInstance { data['publicDataWritesCount'] = body.publicDataWrites.length; } - this.log.debug(`Calling messageId=${messageId} ${WorldStateMessageType[messageType]} with ${fmtLogData(data)}`); + this.log.debug(`Calling messageId=${messageId} ${WorldStateMessageType[messageType]}`, data); } else { this.log.debug(`Calling messageId=${messageId} ${WorldStateMessageType[messageType]}`); } @@ -248,14 +248,12 @@ export class NativeWorldState implements NativeWorldStateInstance { const response = TypedMessage.fromMessagePack(decodedResponse); const decodingDuration = timer.ms() - callDuration; const totalDuration = timer.ms(); - this.log.debug( - `Call messageId=${messageId} ${WorldStateMessageType[messageType]} took (ms) ${fmtLogData({ - totalDuration, - encodingDuration, - callDuration, - decodingDuration, - })}`, - ); + this.log.debug(`Call messageId=${messageId} ${WorldStateMessageType[messageType]} took (ms)`, { + totalDuration, + encodingDuration, + callDuration, + decodingDuration, + }); if (response.header.requestId !== request.header.messageId) { throw new Error( diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index f12b77c3c63c..2b47375c1312 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -260,7 +260,6 @@ __metadata: "@aztec/txe": "workspace:^" "@aztec/types": "workspace:^" "@jest/globals": ^29.5.0 - "@opentelemetry/winston-transport": ^0.7.0 "@types/chalk": ^2.2.0 "@types/jest": ^29.5.0 "@types/koa": ^2.13.6 @@ -273,8 +272,6 @@ __metadata: ts-node: ^10.9.1 typescript: ^5.0.4 viem: ^2.7.15 - winston: ^3.10.0 - winston-daily-rotate-file: ^4.7.1 bin: aztec: ./dest/bin/index.js languageName: unknown @@ -594,7 +591,6 @@ __metadata: viem: ^2.7.15 webpack: ^5.88.2 webpack-cli: ^5.1.4 - winston: ^3.10.0 zod: ^3.23.8 languageName: unknown linkType: soft @@ -646,6 +642,7 @@ __metadata: "@jest/globals": ^29.5.0 "@koa/cors": ^5.0.0 "@noble/curves": ^1.2.0 + "@opentelemetry/instrumentation-pino": ^0.44.0 "@types/bn.js": ^5.1.3 "@types/debug": ^4.1.7 "@types/detect-node": ^2.0.0 @@ -668,6 +665,7 @@ __metadata: "@typescript-eslint/eslint-plugin": ^6.2.1 "@typescript-eslint/parser": ^6.2.1 bn.js: ^5.2.1 + colorette: ^2.0.20 comlink: ^4.4.1 debug: ^4.3.4 detect-node: ^2.1.0 @@ -689,6 +687,8 @@ __metadata: lodash.clonedeepwith: ^4.5.0 memdown: ^6.1.1 pako: ^2.1.0 + pino: ^9.5.0 + pino-pretty: ^13.0.0 prettier: ^2.7.1 sha3: ^2.1.4 supertest: ^6.3.3 @@ -1202,6 +1202,7 @@ __metadata: "@opentelemetry/exporter-metrics-otlp-http": ^0.52.0 "@opentelemetry/exporter-trace-otlp-http": ^0.54.0 "@opentelemetry/host-metrics": ^0.35.2 + "@opentelemetry/instrumentation-pino": ^0.44.0 "@opentelemetry/otlp-exporter-base": ^0.54.0 "@opentelemetry/resource-detector-aws": ^1.5.2 "@opentelemetry/resources": ^1.25.0 @@ -1209,13 +1210,11 @@ __metadata: "@opentelemetry/sdk-metrics": ^1.25.0 "@opentelemetry/sdk-trace-node": ^1.25.0 "@opentelemetry/semantic-conventions": ^1.25.0 - "@opentelemetry/winston-transport": ^0.7.0 "@types/jest": ^29.5.0 jest: ^29.5.0 prom-client: ^15.1.3 ts-node: ^10.9.1 typescript: ^5.0.4 - winston: ^3.10.0 languageName: unknown linkType: soft @@ -1903,13 +1902,6 @@ __metadata: languageName: node linkType: hard -"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": - version: 1.6.0 - resolution: "@colors/colors@npm:1.6.0" - checksum: aa209963e0c3218e80a4a20553ba8c0fbb6fa13140540b4e5f97923790be06801fc90172c1114fc8b7e888b3d012b67298cde6b9e81521361becfaee400c662f - languageName: node - linkType: hard - "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -1919,17 +1911,6 @@ __metadata: languageName: node linkType: hard -"@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" - dependencies: - colorspace: 1.1.x - enabled: 2.0.x - kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 - languageName: node - linkType: hard - "@dependents/detective-less@npm:^3.0.1": version: 3.0.2 resolution: "@dependents/detective-less@npm:3.0.2" @@ -3582,6 +3563,15 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.55.0, @opentelemetry/api-logs@npm:^0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/api-logs@npm:0.55.0" + dependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 07833624711b4146ea4450b4ca714ada33e07a3c354feb4df08e4312a69d9fd200726deb910c8aaba17b13c52645252845ca9aa7113b78d277a806a28d0b2b90 + languageName: node + linkType: hard + "@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" @@ -3631,6 +3621,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/core@npm:^1.25.0": + version: 1.28.0 + resolution: "@opentelemetry/core@npm:1.28.0" + dependencies: + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: ed80e0640df8ba8387e6f16ed3242891a08491f93d18106bd02ef0e6e75ad111e5f312ccf412edf8479e5800a6f27101a40d5023bd8f8566213a50a5a83e76ee + languageName: node + linkType: hard + "@opentelemetry/exporter-logs-otlp-http@npm:^0.54.0": version: 0.54.0 resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.54.0" @@ -3688,6 +3689,35 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-pino@npm:^0.44.0": + version: 0.44.0 + resolution: "@opentelemetry/instrumentation-pino@npm:0.44.0" + dependencies: + "@opentelemetry/api-logs": ^0.55.0 + "@opentelemetry/core": ^1.25.0 + "@opentelemetry/instrumentation": ^0.55.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a971dd444e2682a0d43ebb4f0f527262410ec7e4f2e2d949f61e6051ccc2cd350408a0fc3334eb52fca71352f08f52bf017cfdaefc11665d2463fe826c0c5a9d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.55.0": + version: 0.55.0 + resolution: "@opentelemetry/instrumentation@npm:0.55.0" + dependencies: + "@opentelemetry/api-logs": 0.55.0 + "@types/shimmer": ^1.2.0 + import-in-the-middle: ^1.8.1 + require-in-the-middle: ^7.1.1 + semver: ^7.5.2 + shimmer: ^1.2.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: f5be3f44289f8896e61098409f0acab4f05a5404eeeb3dc825dedf963fc14327e03967c14a27222a07d92f6b1ce04954c0a1dae3f1e21f59aaab1e3ad4879b82 + languageName: node + linkType: hard + "@opentelemetry/otlp-exporter-base@npm:0.52.0": version: 0.52.0 resolution: "@opentelemetry/otlp-exporter-base@npm:0.52.0" @@ -3931,16 +3961,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/winston-transport@npm:^0.7.0": - version: 0.7.0 - resolution: "@opentelemetry/winston-transport@npm:0.7.0" - dependencies: - "@opentelemetry/api-logs": ^0.54.0 - winston-transport: 4.* - checksum: a75d1915e90ab9beaec842fe2f2ce053ea2b43001d8be7cfd47945fa6e1dee6e1d1b5850becb72c9553edb6904844b685df838a1a2cbea0f2f6edf6ce85dc3bb - languageName: node - linkType: hard - "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -5141,6 +5161,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c + languageName: node + linkType: hard + "@types/sinon@npm:^10.0.15": version: 10.0.20 resolution: "@types/sinon@npm:10.0.20" @@ -5211,13 +5238,6 @@ __metadata: languageName: node linkType: hard -"@types/triple-beam@npm:^1.3.2": - version: 1.3.5 - resolution: "@types/triple-beam@npm:1.3.5" - checksum: 519b6a1b30d4571965c9706ad5400a200b94e4050feca3e7856e3ea7ac00ec9903e32e9a10e2762d0f7e472d5d03e5f4b29c16c0bd8c1f77c8876c683b2231f1 - languageName: node - linkType: hard - "@types/wrap-ansi@npm:^3.0.0": version: 3.0.0 resolution: "@types/wrap-ansi@npm:3.0.0" @@ -5744,15 +5764,6 @@ __metadata: languageName: node linkType: hard -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: ^5.0.0 - checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 - languageName: node - linkType: hard - "abortable-iterator@npm:^5.0.1": version: 5.0.1 resolution: "abortable-iterator@npm:5.0.1" @@ -5796,6 +5807,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 1c0c49b6a244503964ae46ae850baccf306e84caf99bc2010ed6103c69a423987b07b520a6c619f075d215388bd4923eccac995886a54309eda049ab78a4be95 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -6290,13 +6310,6 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.3": - version: 3.2.5 - resolution: "async@npm:3.2.5" - checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -6304,6 +6317,13 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -7233,6 +7253,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.2.2": + version: 1.4.1 + resolution: "cjs-module-lexer@npm:1.4.1" + checksum: 2556807a99aec1f9daac60741af96cd613a707f343174ae7967da46402c91dced411bf830d209f2e93be4cecea46fc75cecf1f17c799d7d8a9e1dd6204bfcd22 + languageName: node + linkType: hard + "clean-css@npm:^5.2.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -7352,7 +7379,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -7377,50 +7404,20 @@ __metadata: languageName: node linkType: hard -"color-name@npm:^1.0.0, color-name@npm:^1.1.4, color-name@npm:~1.1.4": +"color-name@npm:^1.1.4, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard -"color-string@npm:^1.6.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 - languageName: node - linkType: hard - -"colorette@npm:^2.0.10, colorette@npm:^2.0.14": +"colorette@npm:^2.0.10, colorette@npm:^2.0.14, colorette@npm:^2.0.20, colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d languageName: node linkType: hard -"colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" - dependencies: - color: ^3.1.3 - text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 - languageName: node - linkType: hard - "combine-source-map@npm:^0.8.0, combine-source-map@npm:~0.8.0": version: 0.8.0 resolution: "combine-source-map@npm:0.8.0" @@ -8177,6 +8174,13 @@ __metadata: languageName: node linkType: hard +"dateformat@npm:^4.6.3": + version: 4.6.3 + resolution: "dateformat@npm:4.6.3" + checksum: c3aa0617c0a5b30595122bc8d1bee6276a9221e4d392087b41cbbdf175d9662ae0e50d0d6dcdf45caeac5153c4b5b0844265f8cd2b2245451e3da19e39e3b65d + languageName: node + linkType: hard + "debounce@npm:^1.2.0": version: 1.2.1 resolution: "debounce@npm:1.2.1" @@ -8931,13 +8935,6 @@ __metadata: languageName: node linkType: hard -"enabled@npm:2.0.x": - version: 2.0.0 - resolution: "enabled@npm:2.0.0" - checksum: 9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 - languageName: node - linkType: hard - "encodeurl@npm:^1.0.2, encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -9593,13 +9590,6 @@ __metadata: languageName: node linkType: hard -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 - languageName: node - linkType: hard - "eventemitter3@npm:^4.0.0": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -9769,6 +9759,13 @@ __metadata: languageName: node linkType: hard +"fast-copy@npm:^3.0.2": + version: 3.0.2 + resolution: "fast-copy@npm:3.0.2" + checksum: 47f584bcede08ab3198559d3e0e093a547d567715b86be2198da6e3366c3c73eed550d97b86f9fb90dae179982b89c15d68187def960f522cdce14bacdfc6184 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -9810,6 +9807,13 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.1.1": + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: ef03f0d1849da074a520a531ad299bf346417b790a643931ab4e01cb72275c8d55b60dc8512fb1f1818647b696790edefaa96704228db9f012da935faa1940af + languageName: node + linkType: hard + "fast-safe-stringify@npm:^2.0.7, fast-safe-stringify@npm:^2.1.1": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" @@ -9867,13 +9871,6 @@ __metadata: languageName: node linkType: hard -"fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 - languageName: node - linkType: hard - "fflate@npm:^0.8.0": version: 0.8.2 resolution: "fflate@npm:0.8.2" @@ -9890,15 +9887,6 @@ __metadata: languageName: node linkType: hard -"file-stream-rotator@npm:^0.6.1": - version: 0.6.1 - resolution: "file-stream-rotator@npm:0.6.1" - dependencies: - moment: ^2.29.1 - checksum: ebdf6a9e7ca886a50f4dafb2284d4569cefd5bdf4e4451ead25f4d68b7f9776b2620a3d110d534edd40935d1e17f37d818e2129303201870ff89c71b19b49ac1 - languageName: node - linkType: hard - "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -10025,13 +10013,6 @@ __metadata: languageName: node linkType: hard -"fn.name@npm:1.x.x": - version: 1.1.0 - resolution: "fn.name@npm:1.1.0" - checksum: e357144f48cfc9a7f52a82bbc6c23df7c8de639fce049cac41d41d62cabb740cdb9f14eddc6485e29c933104455bdd7a69bb14a9012cef9cd4fa252a4d0cf293 - languageName: node - linkType: hard - "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" @@ -10655,6 +10636,13 @@ __metadata: languageName: node linkType: hard +"help-me@npm:^5.0.0": + version: 5.0.0 + resolution: "help-me@npm:5.0.0" + checksum: 474436627b6c7d2f406a2768453895889eb2712c8ded4c47658d5c6dd46c2ff3f742be4e4e8dedd57b7f1ac6b28803896a2e026a32a977f507222c16f23ab2e1 + languageName: node + linkType: hard + "hexoid@npm:^1.0.0": version: 1.0.0 resolution: "hexoid@npm:1.0.0" @@ -10974,6 +10962,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.8.1": + version: 1.11.2 + resolution: "import-in-the-middle@npm:1.11.2" + dependencies: + acorn: ^8.8.2 + acorn-import-attributes: ^1.9.5 + cjs-module-lexer: ^1.2.2 + module-details-from-path: ^1.0.3 + checksum: 06fb73100a918e00778779713119236cc8d3d4656aae9076a18159cfcd28eb0cc26e0a5040d11da309c5f8f8915c143b8d74e73c0734d3f5549b1813d1008bb9 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.1.0 resolution: "import-local@npm:3.1.0" @@ -11189,13 +11189,6 @@ __metadata: languageName: node linkType: hard -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f - languageName: node - linkType: hard - "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" @@ -12450,6 +12443,13 @@ __metadata: languageName: node linkType: hard +"joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + languageName: node + linkType: hard + "js-sha3@npm:0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -12756,13 +12756,6 @@ __metadata: languageName: node linkType: hard -"kuler@npm:^2.0.0": - version: 2.0.0 - resolution: "kuler@npm:2.0.0" - checksum: 9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 - languageName: node - linkType: hard - "labeled-stream-splicer@npm:^2.0.0": version: 2.0.2 resolution: "labeled-stream-splicer@npm:2.0.2" @@ -13092,34 +13085,6 @@ __metadata: languageName: node linkType: hard -"logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.6.0 - resolution: "logform@npm:2.6.0" - dependencies: - "@colors/colors": 1.6.0 - "@types/triple-beam": ^1.3.2 - fecha: ^4.2.0 - ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 - triple-beam: ^1.3.0 - checksum: b9ea74bb75e55379ad0eb3e4d65ae6e8d02bc45b431c218162878bf663997ab9258a73104c2b30e09dd2db288bb83c8bf8748e46689d75f5e7e34cf69378d6df - languageName: node - linkType: hard - -"logform@npm:^2.6.1": - version: 2.6.1 - resolution: "logform@npm:2.6.1" - dependencies: - "@colors/colors": 1.6.0 - "@types/triple-beam": ^1.3.2 - fecha: ^4.2.0 - ms: ^2.1.1 - safe-stable-stringify: ^2.3.1 - triple-beam: ^1.3.0 - checksum: 0c6b95fa8350ccc33c7c33d77de2a9920205399706fc1b125151c857b61eb90873f4670d9e0e58e58c165b68a363206ae670d6da8b714527c838da3c84449605 - languageName: node - linkType: hard - "long@npm:^5.0.0": version: 5.2.3 resolution: "long@npm:5.2.3" @@ -13752,6 +13717,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 378a8a26013889aa3086bfb0776b7860c5bb957336253e1ba5d779c2f239a218930b145ca76e52c1dd7c8079d52b2af64b8eec30822f81ffdb0dfa27d6fe6f33 + languageName: node + linkType: hard + "module-lookup-amd@npm:^7.0.1": version: 7.0.1 resolution: "module-lookup-amd@npm:7.0.1" @@ -13767,13 +13739,6 @@ __metadata: languageName: node linkType: hard -"moment@npm:^2.29.1": - version: 2.30.1 - resolution: "moment@npm:2.30.1" - checksum: 859236bab1e88c3e5802afcf797fc801acdbd0ee509d34ea3df6eea21eb6bcc2abd4ae4e4e64aa7c986aa6cba563c6e62806218e6412a765010712e5fa121ba6 - languageName: node - linkType: hard - "morphdom@npm:^2.3.3": version: 2.7.4 resolution: "morphdom@npm:2.7.4" @@ -14216,13 +14181,6 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^2.0.1": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 55ba841e3adce9c4f1b9b46b41983eda40f854e0d01af2802d3ae18a7085a17168d6b81731d43fdf1d6bcbb3c9f9c56d22c8fea992203ad90a38d7d919bc28f1 - languageName: node - linkType: hard - "object-inspect@npm:^1.13.1": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" @@ -14297,6 +14255,13 @@ __metadata: languageName: node linkType: hard +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: 6ce7acdc7b9ceb51cf029b5239cbf41937ee4c8dcd9d4e475e1777b41702564d46caa1150a744e00da0ac6d923ab83471646a39a4470f97481cf6e2d8d253c3f + languageName: node + linkType: hard + "on-finished@npm:2.4.1, on-finished@npm:^2.3.0, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -14329,15 +14294,6 @@ __metadata: languageName: node linkType: hard -"one-time@npm:^1.0.0": - version: 1.0.0 - resolution: "one-time@npm:1.0.0" - dependencies: - fn.name: 1.x.x - checksum: fd008d7e992bdec1c67f53a2f9b46381ee12a9b8c309f88b21f0223546003fb47e8ad7c1fd5843751920a8d276c63bd4b45670ef80c61fb3e07dbccc962b5c7d - languageName: node - linkType: hard - "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -14818,6 +14774,66 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: ^4.0.0 + checksum: 4db0cd8a1a7b6d13e76dbb58e6adc057c39e4591c70f601f4a427c030d57dff748ab53954e1ecd3aa6e21c1a22dd38de96432606c6d906a7b9f610543bf1d6e2 + languageName: node + linkType: hard + +"pino-pretty@npm:^13.0.0": + version: 13.0.0 + resolution: "pino-pretty@npm:13.0.0" + dependencies: + colorette: ^2.0.7 + dateformat: ^4.6.3 + fast-copy: ^3.0.2 + fast-safe-stringify: ^2.1.1 + help-me: ^5.0.0 + joycon: ^3.1.1 + minimist: ^1.2.6 + on-exit-leak-free: ^2.1.0 + pino-abstract-transport: ^2.0.0 + pump: ^3.0.0 + secure-json-parse: ^2.4.0 + sonic-boom: ^4.0.1 + strip-json-comments: ^3.1.1 + bin: + pino-pretty: bin.js + checksum: a529219b3ccc99ed6a3e2de00ae6a8d4003344614bce39f836352317c962db8c3f4e9ee45843edc218cb9be618a7318b06fa6fab366d4314b9297d0130bc06f5 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^7.0.0": + version: 7.0.0 + resolution: "pino-std-serializers@npm:7.0.0" + checksum: 08cd1d7b7adc4cfca39e42c2d5fd21bcf4513153734e7b8fa278b0e9e9f62df78c4c202886343fe882a462539c931cb8110b661775ad7f7217c96856795b5a86 + languageName: node + linkType: hard + +"pino@npm:^9.5.0": + version: 9.5.0 + resolution: "pino@npm:9.5.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.1.1 + on-exit-leak-free: ^2.1.0 + pino-abstract-transport: ^2.0.0 + pino-std-serializers: ^7.0.0 + process-warning: ^4.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.2.0 + safe-stable-stringify: ^2.3.1 + sonic-boom: ^4.0.1 + thread-stream: ^3.0.0 + bin: + pino: bin.js + checksum: 650c3087619a619e92948641f0d9acc60cca594175b02fe1ce9c0923a8d07a8d120866f50b0848c26a5898837b8c1ae086adf67066180f686ea21e6e515a8558 + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" @@ -15038,6 +15054,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^4.0.0": + version: 4.0.0 + resolution: "process-warning@npm:4.0.0" + checksum: 39d5cee53649132f12479965857cb01793d62ee1a702f06d079ee8aceee935cd0f79c250faab60e86705d8a5226856a61c419778d48ac67f72e160cceb60a1e5 + languageName: node + linkType: hard + "process@npm:^0.11.10, process@npm:~0.11.0": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -15329,6 +15352,13 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -15481,19 +15511,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^4.5.2": - version: 4.5.2 - resolution: "readable-stream@npm:4.5.2" - dependencies: - abort-controller: ^3.0.0 - buffer: ^6.0.3 - events: ^3.3.0 - process: ^0.11.10 - string_decoder: ^1.3.0 - checksum: c4030ccff010b83e4f33289c535f7830190773e274b3fcb6e2541475070bdfd69c98001c3b0cb78763fc00c8b62f514d96c2b10a8bd35d5ce45203a25fa1d33a - languageName: node - linkType: hard - "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -15503,6 +15520,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: fa060f19f2f447adf678d1376928c76379dce5f72bd334da301685ca6cdcb7b11356813332cc243c88470796bc2e2b1e2917fc10df9143dd93c2ea608694971d + languageName: node + linkType: hard + "receptacle@npm:^1.3.2": version: 1.3.2 resolution: "receptacle@npm:1.3.2" @@ -15617,6 +15641,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.4.0 + resolution: "require-in-the-middle@npm:7.4.0" + dependencies: + debug: ^4.3.5 + module-details-from-path: ^1.0.3 + resolve: ^1.22.8 + checksum: 80a3fdf25ef3f7826486469bfebb01365be87316945143f89607d4777b2019e5ac71bf627f1dcd5e2ee6e91a6e49c76c5d452d5a317153531a2907ccb1bc018b + languageName: node + linkType: hard + "requirejs-config-file@npm:^4.0.0": version: 4.0.0 resolution: "requirejs-config-file@npm:4.0.0" @@ -15709,7 +15744,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.4, resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.21.0, resolve@npm:^1.22.4, resolve@npm:^1.4.0": +"resolve@npm:^1.1.4, resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.21.0, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:^1.4.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -15732,7 +15767,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.4#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.21.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.4.0#~builtin": +"resolve@patch:resolve@^1.1.4#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.21.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.22.8#~builtin, resolve@patch:resolve@^1.4.0#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15949,6 +15984,13 @@ __metadata: languageName: node linkType: hard +"secure-json-parse@npm:^2.4.0": + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: d9d7d5a01fc6db6115744ba23cf9e67ecfe8c524d771537c062ee05ad5c11b64c730bc58c7f33f60bd6877f96b86f0ceb9ea29644e4040cb757f6912d4dd6737 + languageName: node + linkType: hard + "select-hose@npm:^2.0.0": version: 2.0.0 resolution: "select-hose@npm:2.0.0" @@ -16248,6 +16290,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": version: 1.0.6 resolution: "side-channel@npm:1.0.6" @@ -16281,15 +16330,6 @@ __metadata: languageName: node linkType: hard -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: ^0.3.1 - checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 - languageName: node - linkType: hard - "single-line-log@npm:^1.0.1": version: 1.1.2 resolution: "single-line-log@npm:1.1.2" @@ -16376,6 +16416,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^4.0.1": + version: 4.2.0 + resolution: "sonic-boom@npm:4.2.0" + dependencies: + atomic-sleep: ^1.0.0 + checksum: e5e1ffdd3bcb0dee3bf6f7b2ff50dd3ffa2df864dc9d53463f33e225021a28601e91d0ec7e932739824bafd6f4ff3b7090939ac3e34ab1022e01692b41f7e8a3 + languageName: node + linkType: hard + "source-map-js@npm:^1.2.0": version: 1.2.0 resolution: "source-map-js@npm:1.2.0" @@ -16538,13 +16587,6 @@ __metadata: languageName: node linkType: hard -"stack-trace@npm:0.0.x": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 473036ad32f8c00e889613153d6454f9be0536d430eb2358ca51cad6b95cea08a3cc33cc0e34de66b0dad221582b08ed2e61ef8e13f4087ab690f388362d6610 - languageName: node - linkType: hard - "stack-utils@npm:^2.0.3": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -16756,7 +16798,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": +"string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -17127,13 +17169,6 @@ __metadata: languageName: node linkType: hard -"text-hex@npm:1.0.x": - version: 1.0.0 - resolution: "text-hex@npm:1.0.0" - checksum: 1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -17150,6 +17185,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^3.0.0": + version: 3.1.0 + resolution: "thread-stream@npm:3.1.0" + dependencies: + real-require: ^0.2.0 + checksum: 3c5b494ce776f832dfd696792cc865f78c1e850db93e07979349bbc1a5845857cd447aea95808892906cc0178a2fd3233907329f3376e7fc9951e2833f5b7896 + languageName: node + linkType: hard + "through2@npm:^2.0.0, through2@npm:^2.0.3": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -17281,13 +17325,6 @@ __metadata: languageName: node linkType: hard -"triple-beam@npm:^1.3.0": - version: 1.4.1 - resolution: "triple-beam@npm:1.4.1" - checksum: 2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -18470,61 +18507,6 @@ __metadata: languageName: node linkType: hard -"winston-daily-rotate-file@npm:^4.7.1": - version: 4.7.1 - resolution: "winston-daily-rotate-file@npm:4.7.1" - dependencies: - file-stream-rotator: ^0.6.1 - object-hash: ^2.0.1 - triple-beam: ^1.3.0 - winston-transport: ^4.4.0 - peerDependencies: - winston: ^3 - checksum: 227daea41f722caa017fc7d6f1f80d0e6c428491e57693e6bebc8312b85bcf3aace53cb3a925bda72fab59a6898fa127411d29348ec4b295e2263a7544cda611 - languageName: node - linkType: hard - -"winston-transport@npm:4.*": - version: 4.8.0 - resolution: "winston-transport@npm:4.8.0" - dependencies: - logform: ^2.6.1 - readable-stream: ^4.5.2 - triple-beam: ^1.3.0 - checksum: f84092188176d49a6f4f75321ba3e50107ac0942a51a6d7e36b80af19dafb22b57258aaa6d8220763044ea23e30bffd597d3280d2a2298e6a491fe424896bac7 - languageName: node - linkType: hard - -"winston-transport@npm:^4.4.0, winston-transport@npm:^4.7.0": - version: 4.7.0 - resolution: "winston-transport@npm:4.7.0" - dependencies: - logform: ^2.3.2 - readable-stream: ^3.6.0 - triple-beam: ^1.3.0 - checksum: ce074b5c76a99bee5236cf2b4d30fadfaf1e551d566f654f1eba303dc5b5f77169c21545ff5c5e4fdad9f8e815fc6d91b989f1db34161ecca6e860e62fd3a862 - languageName: node - linkType: hard - -"winston@npm:^3.10.0": - version: 3.13.0 - resolution: "winston@npm:3.13.0" - dependencies: - "@colors/colors": ^1.6.0 - "@dabh/diagnostics": ^2.0.2 - async: ^3.2.3 - is-stream: ^2.0.0 - logform: ^2.4.0 - one-time: ^1.0.0 - readable-stream: ^3.4.0 - safe-stable-stringify: ^2.3.1 - stack-trace: 0.0.x - triple-beam: ^1.3.0 - winston-transport: ^4.7.0 - checksum: 66f9fbbadb58e1632701e9c89391f217310c9455462148e163e060dcd25aed21351b0413bdbbf90e5c5fe9bc945fc5de6f53875ac7c7ef3061133a354fc678c0 - languageName: node - linkType: hard - "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5"