From 06808f57fd5f7e73d0e46f8825e483f3ea7cc12b Mon Sep 17 00:00:00 2001 From: Mathu-lmn <80094438+Mathu-lmn@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:08:33 +0200 Subject: [PATCH] Attempt to use iconv --- package-lock.json | 20 ++++++++++++++++++++ package.json | 1 + src/realms/rest/emitter.ts | 13 +++++++------ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a37760..63f34e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "dockerode": "^3.3.4", "fastify": "^4.16.0", "fastify-decorators": "^3.15.0", + "iconv-lite": "^0.6.3", "ioredis": "^5.3.1", "reflect-metadata": "^0.1.13" }, @@ -2819,6 +2820,17 @@ "node": ">= 0.8" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -6745,6 +6757,14 @@ "toidentifier": "1.0.1" } }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", diff --git a/package.json b/package.json index 75d5066..0bf7d25 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "dockerode": "^3.3.4", "fastify": "^4.16.0", "fastify-decorators": "^3.15.0", + "iconv-lite": "^0.6.3", "ioredis": "^5.3.1", "reflect-metadata": "^0.1.13" }, diff --git a/src/realms/rest/emitter.ts b/src/realms/rest/emitter.ts index 71f3407..cf365fb 100644 --- a/src/realms/rest/emitter.ts +++ b/src/realms/rest/emitter.ts @@ -4,6 +4,7 @@ import { Static, Type } from "@sinclair/typebox" import { SocketStream } from "@fastify/websocket" import { WebSocket } from "ws" import RedisClient from "../../clients/Redis" +import iconv from 'iconv-lite' export const websockets = new Map>() @@ -91,11 +92,11 @@ export const emitterMessage = Type.Union( export type EmitterMessage = Static -// eslint-disable-next-line no-control-regex -const ANSI_ESCAPE = /\x1b\[*m/g; - -function removeAnsiColorCodes(str: string):string { - return str.replace(ANSI_ESCAPE, ""); +function ANSItoUTF8(text: string): string { + // convert string to buffer for iconv + const buffer = Buffer.from(text, 'binary'); + const res_buff = iconv.encode(iconv.decode(buffer, 'win1251'), 'utf8'); + return res_buff.toString('utf8'); } export const prepareRedisListeners = () => { @@ -105,7 +106,7 @@ export const prepareRedisListeners = () => { if (channel === "emitter") { const body = JSON.parse(message.toString()) as EmitterMessage if (body.type === "serverLog") { - body.payload.message = removeAnsiColorCodes(body.payload.message) + body.payload.message = ANSItoUTF8(body.payload.message) } emitter.emit(body.type, body.payload) }