{"version":3,"sources":["message_logger.ts"],"sourcesContent":["import { Runtime } from \"../runtime/runtime.ts\";\nimport { IOHandler } from \"../runtime/io_handler.ts\";\nimport { ProtocolDataType } from \"../compiler/protocol_types.ts\";\nimport { Logical } from \"../types/logic.ts\";\nimport { Logger } from \"./logger.ts\";\n\n// WASM\nimport wasm_init, {decompile as wasm_decompile} from \"../wasm/adapter/pkg/datex_wasm.js\";\nimport { console } from \"./ansi_compat.ts\";\nimport { ESCAPE_SEQUENCES } from \"./logger.ts\";\n\nexport class MessageLogger {\n\t\n\tstatic logger:Logger\n\n    static decompile(dxb:ArrayBuffer, has_header = true, colorized = true, resolve_slots = true){\n        if (!this.#initialized) return \"[DATEX Decompiler not enabled]\"\n        try {\n            // extract body (TODO: just temporary, rust impl does not yet support header decompilation)\n            if (has_header) {\n                const res = Runtime.parseHeaderSynchronousPart(dxb);\n                if (!(res instanceof Array)) return \"/* ERROR: Invalid DATEX Header */\";\n                dxb = res[1];\n            }\n         \n            return wasm_decompile(new Uint8Array(dxb), true, colorized, resolve_slots).replace(/\\r\\n$/, '');\n        } catch (e) {\n            return \"Decompiler Error: \" + e.message;\n        }\n    }\n\n    static #initialized = false;\n    static async init() {\n        if (this.#initialized) return;\n        try {\n            await wasm_init()\n        }\n        catch (e) {\n            console.error(e)\n        }\n        this.#initialized = true;\n    }\n\n\tstatic async enable(showRedirectedMessages = true){\n        await this.init();\n        IOHandler.resetDatexHandlers();\n\t\tif (!this.logger) this.logger = new Logger(\"DATEX Message\");\n\n        IOHandler.onDatexReceived((header, dxb, socket)=>{\n            const log = (dxb as any)._is_stream ? console.log : this.logger.raw.bind(this.logger);\n\n            // ignore incoming requests from own endpoint to own endpoint\n            const receivers = header.routing?.receivers;\n            const receiverIsOwnEndpoint = receivers instanceof Logical && receivers?.size == 1 && (receivers.has(Runtime.endpoint) || receivers.has(Runtime.endpoint.main));\n            if (!showRedirectedMessages && !receiverIsOwnEndpoint) return;\n            if (header.sender == Runtime.endpoint && receiverIsOwnEndpoint && header.type != ProtocolDataType.RESPONSE && header.type != ProtocolDataType.DEBUGGER) return;\n\n            // ignore hello messages\n            if (header.type == ProtocolDataType.HELLO || header.type == ProtocolDataType.GOODBYE) {\n                log(`${ESCAPE_SEQUENCES.BLUE}◀── ${header.sender||'@*'} ${header.type!=undefined? `(${ProtocolDataType[header.type]}) ` : ''}${socket ? `via ${socket.toString()}` : ''}`);\n                return;\n            };\n            \n            let content = MessageLogger.decompile(dxb);\n            if (content.trim() == \"\\x1b[38;2;219;45;129mvoid\\x1b[39m;\") return; // dont log void; messages\n            \n            content = \n                `${ESCAPE_SEQUENCES.BLUE}${receiverIsOwnEndpoint?'':Runtime.valueToDatexStringExperimental(receivers, false, false)+ ' '}◀── ${header.sender||'@*'} ${header.type!=undefined ? `(${ProtocolDataType[header.type]}) ` : ''}${socket ? `via ${socket.toString()} ` : ''}${socket?.endpoint ? ` ${socket?.endpoint}` : ''}`.padEnd(80, '─') + '\\n'\n                + content\n                + `\\n${ESCAPE_SEQUENCES.BLUE}──────────────────────────────────────────────────────────────────────────\\n`;\n            log(content)\n        });\n\n        IOHandler.onDatexSent((header, dxb, socket) => {\n            \n            const log = (dxb as any)._is_stream ? console.log : this.logger.raw.bind(this.logger);\n\n            // ignore outgoing responses from own endpoint to own endpoint\n            const receivers = header.routing?.receivers;\n            if (header.sender == Runtime.endpoint && (receivers instanceof Logical && receivers?.size == 1 && receivers.has(Runtime.endpoint)) && header.type != ProtocolDataType.RESPONSE && header.type != ProtocolDataType.DEBUGGER) return;\n            const senderIsOwnEndpoint = header.sender == Runtime.endpoint || header.sender == Runtime.endpoint.main;\n            if (!showRedirectedMessages && !senderIsOwnEndpoint) return;\n\n            // ignore hello messages\n            if (header.type == ProtocolDataType.HELLO || header.type == ProtocolDataType.GOODBYE) {\n                log(`${ESCAPE_SEQUENCES.GREEN}${header.sender||'@*'} ──▶ ${receivers||'@*'} ${header.type!=undefined ? `(${ProtocolDataType[header.type]}) ` : ''}${socket ? `via ${socket.toString()}` : ''}`);\n                return;\n            };\n            \n            let content = MessageLogger.decompile(dxb);\n            if (content.trim() == \"\\x1b[38;2;219;45;129mvoid\\x1b[39m;\") return; // dont log void; messages\n \n            content = \n                `${ESCAPE_SEQUENCES.GREEN}${senderIsOwnEndpoint?'':Runtime.valueToDatexStringExperimental(header.sender, false, false)+' '}──▶ ${receivers||'@*'} ${header.type!=undefined ? `(${ProtocolDataType[header.type]}) ` : ''}${socket ? `via ${socket.toString()} ` : ''}${socket?.endpoint ? ` ${socket?.endpoint}` : '-'}`.padEnd(80, '─') + '\\n'\n                + content\n                + `\\n${ESCAPE_SEQUENCES.GREEN}──────────────────────────────────────────────────────────────────────────\\n`;\n\n            log(content);\n        });\n\n\t}\n\n    static disable() {\n        IOHandler.resetDatexHandlers()\n    }\n\n}"],"names":["Runtime","IOHandler","ProtocolDataType","Logical","Logger","wasm_init","decompile","wasm_decompile","console","ESCAPE_SEQUENCES","MessageLogger","logger","dxb","has_header","colorized","resolve_slots","res","parseHeaderSynchronousPart","Array","Uint8Array","replace","e","message","init","error","enable","showRedirectedMessages","resetDatexHandlers","onDatexReceived","header","socket","log","_is_stream","raw","bind","receivers","routing","receiverIsOwnEndpoint","size","has","endpoint","main","sender","type","RESPONSE","DEBUGGER","HELLO","GOODBYE","BLUE","undefined","toString","content","trim","valueToDatexStringExperimental","padEnd","onDatexSent","senderIsOwnEndpoint","GREEN","disable"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/utils/","file":"message_logger.ts"}