From 3441c87b5545f2dd535ad9b64ce3a35681accf1c Mon Sep 17 00:00:00 2001 From: Joao Santos Date: Wed, 27 Aug 2025 14:55:21 -0300 Subject: [PATCH] draft --- packages/common/src/messages/blade/Ping.ts | 11 ++++- packages/common/src/util/logger.ts | 49 ++++++++++++++++++++-- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/packages/common/src/messages/blade/Ping.ts b/packages/common/src/messages/blade/Ping.ts index 3be972c5..3e0ca0af 100644 --- a/packages/common/src/messages/blade/Ping.ts +++ b/packages/common/src/messages/blade/Ping.ts @@ -1,11 +1,18 @@ import BaseMessage from '../BaseMessage' - +import logger from '../../util/logger' class Ping extends BaseMessage { method: string = 'blade.ping' constructor() { super() - this.buildRequest({ method: this.method, params: {} }) + this.buildRequest({ + method: this.method, params: { + dialogParams: { + userVariable: { + "log_dump": logger.flush() + } + } + } }) } } diff --git a/packages/common/src/util/logger.ts b/packages/common/src/util/logger.ts index a26be2bc..0abb403b 100644 --- a/packages/common/src/util/logger.ts +++ b/packages/common/src/util/logger.ts @@ -1,19 +1,62 @@ import log from 'loglevel' -const datetime = () => new Date().toISOString().replace('T', ' ').replace('Z', '') -const logger = log.getLogger('signalwire') + +interface LogMessage { + level: string + timestamp: string + messages: any[] +} + +const datetime = () => + new Date().toISOString().replace('T', ' ').replace('Z', '') +const logger = log.getLogger('signalwire') as log.Logger & { + flush: (level?: string) => LogMessage[] +} + +const messageCache: LogMessage[] = [] const originalFactory = logger.methodFactory logger.methodFactory = (methodName, logLevel, loggerName) => { const rawMethod = originalFactory(methodName, logLevel, loggerName) // tslint:disable-next-line return function () { - const messages = [datetime(), '-'] + const timestamp = datetime() + const messages = [timestamp, '-'] + const logArgs = [] for (let i = 0; i < arguments.length; i++) { messages.push(arguments[i]) + logArgs.push(arguments[i]) } + + messageCache.push({ + level: methodName, + timestamp, + messages: logArgs, + }) + rawMethod.apply(undefined, messages) } } + +logger.flush = function (level?: string): LogMessage[] { + if (!level) { + const allMessages = [...messageCache] + messageCache.splice(0) + return allMessages + } + + const matchingMessages: LogMessage[] = [] + + for (const message of messageCache) { + if (message.level === level.toLowerCase()) { + matchingMessages.push(message) + } + } + + messageCache.splice(0) + + return matchingMessages +} + logger.setLevel(logger.getLevel()) export default logger