From 2762630697e297a6522eab4b5065f45e5b0be1db Mon Sep 17 00:00:00 2001 From: Molly Draven Date: Wed, 18 Sep 2024 20:07:20 -0400 Subject: [PATCH] rename module property of logger to name --- packages/gateway/src/GatewayServer.ts | 23 ++- packages/gateway/src/index.ts | 12 +- packages/lobby/src/handlers/_setMyUserData.ts | 3 +- .../lobby/src/handlers/encryptedCommand.ts | 17 +- .../src/handlers/handleGetMiniUserList.ts | 4 +- .../src/handlers/handleSendMiniRiffList.ts | 5 +- .../lobby/src/handlers/handleTrackingPing.ts | 2 +- packages/lobby/src/handlers/heartbeat.js | 9 +- .../src/handlers/requestConnectGameServer.ts | 2 +- packages/lobby/src/internal.ts | 17 +- packages/login/src/internal.ts | 12 +- packages/login/src/receiveLoginData.ts | 15 +- .../processSelectPersona.ts | 59 +++--- packages/nps/messageStructs/UserInfo.ts | 6 +- packages/nps/messageStructs/UserStatus.ts | 6 +- packages/nps/tsconfig.json | 3 +- packages/patch/src/PatchServer.ts | 172 +++++++++--------- packages/patch/test/PatchServer.test.ts | 50 ++--- packages/persona/src/_gameLogout.ts | 4 +- packages/persona/src/_getFirstBuddy.ts | 2 +- packages/persona/src/_selectGamePersona.ts | 4 +- .../src/handlers/validatePersonaName.ts | 2 +- packages/persona/src/internal.ts | 16 +- packages/shared/src/Configuration.ts | 4 +- packages/shared/src/MessageBufferOld.ts | 6 +- packages/shared/src/SubThread.ts | 2 +- packages/shared/src/log.ts | 12 +- packages/transactions/src/internal.ts | 18 +- server.ts | 91 +++++---- src/chat/index.ts | 2 +- 30 files changed, 281 insertions(+), 299 deletions(-) diff --git a/packages/gateway/src/GatewayServer.ts b/packages/gateway/src/GatewayServer.ts index 9494caed8..1f2deeb04 100644 --- a/packages/gateway/src/GatewayServer.ts +++ b/packages/gateway/src/GatewayServer.ts @@ -5,7 +5,11 @@ import { ConsoleThread } from "rusty-motors-cli"; import { receiveLobbyData } from "rusty-motors-lobby"; import { receiveLoginData } from "rusty-motors-login"; import { receivePersonaData } from "rusty-motors-personas"; -import { Configuration, getServerConfiguration, type ServerLogger } from "rusty-motors-shared"; +import { + Configuration, + getServerConfiguration, + type ServerLogger, +} from "rusty-motors-shared"; import { addOnDataHandler, createInitialState, @@ -15,7 +19,12 @@ import { getServerLogger } from "rusty-motors-shared"; import { receiveTransactionsData } from "rusty-motors-transactions"; import { onSocketConnection } from "./index.js"; import { addWebRoutes } from "./web.js"; -import { populateGameMessageProcessors, populatePortToMessageTypes, portToMessageTypes, gameMessageProcessors } from "rusty-motors-nps"; +import { + populateGameMessageProcessors, + populatePortToMessageTypes, + portToMessageTypes, + gameMessageProcessors, +} from "rusty-motors-nps"; import { receiveChatData } from "rusty-motors-chat"; /** @@ -66,7 +75,7 @@ export class Gateway { constructor({ config = getServerConfiguration({}), log = getServerLogger({ - module: "GatewayServer", + name: "GatewayServer", }), backlogAllowedCount = 0, listeningPortList = [], @@ -241,9 +250,7 @@ export class Gateway { }); }); - this.webServer = fastify({ - logger: true, - }); + this.webServer = fastify({}); this.webServer.register(FastifySensible); let state = fetchStateFromDatabase(); @@ -282,7 +289,7 @@ export class Gateway { static getInstance({ config = undefined, log = getServerLogger({ - module: "GatewayServer", + name: "GatewayServer", }), backlogAllowedCount = 0, listeningPortList = [], @@ -321,7 +328,7 @@ Gateway._instance = undefined; export function getGatewayServer({ config, log = getServerLogger({ - module: "GatewayServer", + name: "GatewayServer", }), backlogAllowedCount = 0, listeningPortList: listeningPortList = [], diff --git a/packages/gateway/src/index.ts b/packages/gateway/src/index.ts index 487f34ad2..48725976c 100644 --- a/packages/gateway/src/index.ts +++ b/packages/gateway/src/index.ts @@ -39,7 +39,7 @@ import * as Sentry from "@sentry/node"; * @property {string} args.connectionId The connection id of the socket that * received the data. * @property {module:packages/shared/RawMessage} args.message The data that was received. - * @property {module:shared/log.ServerLogger} [args.log=getServerLogger({ module: "gateway" })] The logger to use. + * @property {module:shared/log.ServerLogger} [args.log=getServerLogger({ name: "gateway" })] The logger to use. * response * to the * data. @@ -61,7 +61,7 @@ export function socketErrorHandler({ connectionId, error, log = getServerLogger({ - module: "socketErrorHandler", + name: "socketErrorHandler", }), }: { connectionId: string; @@ -81,12 +81,12 @@ export function socketErrorHandler({ * * @param {object} options * @param {string} options.connectionId The connection ID - * @param {import("pino").Logger} [options.log=getServerLogger({ module: "socketEndHandler" })] The logger to use + * @param {import("pino").Logger} [options.log=getServerLogger({ name: "socketEndHandler" })] The logger to use */ export function socketEndHandler({ connectionId, log = getServerLogger({ - module: "socketEndHandler", + name: "socketEndHandler", }), }: { connectionId: string; @@ -103,13 +103,13 @@ export function socketEndHandler({ * * @param {object} options * @param {Socket} options.incomingSocket The incoming socket - * @param {Logger} [options.log=getServerLogger({ module: "onDataHandler" })] The logger to use + * @param {Logger} [options.log=getServerLogger({ name: "onDataHandler" })] The logger to use * */ export function onSocketConnection({ incomingSocket, log = getServerLogger({ - module: "onDataHandler", + name: "onDataHandler", }), }: { incomingSocket: Socket; diff --git a/packages/lobby/src/handlers/_setMyUserData.ts b/packages/lobby/src/handlers/_setMyUserData.ts index bab6b81b6..55f4afb41 100644 --- a/packages/lobby/src/handlers/_setMyUserData.ts +++ b/packages/lobby/src/handlers/_setMyUserData.ts @@ -8,7 +8,7 @@ export async function _setMyUserData({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", level: getServerConfiguration({}).logLevel ?? "info", }), }: { @@ -25,7 +25,6 @@ export async function _setMyUserData({ log.debug(`User ID: ${incomingMessage._userId}`); - // Update the user's data updateUser({ userId: incomingMessage._userId, diff --git a/packages/lobby/src/handlers/encryptedCommand.ts b/packages/lobby/src/handlers/encryptedCommand.ts index 05388f41f..5d8e0c056 100644 --- a/packages/lobby/src/handlers/encryptedCommand.ts +++ b/packages/lobby/src/handlers/encryptedCommand.ts @@ -47,7 +47,7 @@ export const messageHandlers: { * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage | MessageBuffer} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] * @returns {Promise<{ * connectionId: string, * message: LegacyMessage | MessageBuffer, @@ -57,7 +57,7 @@ async function encryptCmd({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; @@ -97,7 +97,7 @@ async function encryptCmd({ * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] * @returns {Promise<{ * connectionId: string, * message: LegacyMessage, @@ -107,7 +107,7 @@ async function decryptCmd({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; @@ -178,7 +178,7 @@ const npsCommandHandlers: NpsCommandHandler[] = [ * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] * @return {Promise<{ * connectionId: string, * message: MessageBuffer | LegacyMessage, @@ -188,7 +188,7 @@ async function handleCommand({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; @@ -228,7 +228,7 @@ async function handleCommand({ * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -239,7 +239,7 @@ export async function handleEncryptedNPSCommand({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; @@ -249,7 +249,6 @@ export async function handleEncryptedNPSCommand({ connectionId: string; messages: SerializedBufferOld[]; }> { - const inboundMessage = new LegacyMessage(); inboundMessage._doDeserialize(message.data); diff --git a/packages/lobby/src/handlers/handleGetMiniUserList.ts b/packages/lobby/src/handlers/handleGetMiniUserList.ts index ce8750601..e18bb7434 100644 --- a/packages/lobby/src/handlers/handleGetMiniUserList.ts +++ b/packages/lobby/src/handlers/handleGetMiniUserList.ts @@ -13,14 +13,14 @@ user1._userName = "User 1"; * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] */ export async function handleGetMiniUserList({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", level: getServerConfiguration({}).logLevel ?? "info", }), }: { diff --git a/packages/lobby/src/handlers/handleSendMiniRiffList.ts b/packages/lobby/src/handlers/handleSendMiniRiffList.ts index 9a2453e49..1e223332b 100644 --- a/packages/lobby/src/handlers/handleSendMiniRiffList.ts +++ b/packages/lobby/src/handlers/handleSendMiniRiffList.ts @@ -10,13 +10,13 @@ import { channelRecordSize, channels } from "./channels.js"; * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] */ export async function handleSendMiniRiffList({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", level: getServerConfiguration({}).logLevel ?? "info", }), }: { @@ -24,7 +24,6 @@ export async function handleSendMiniRiffList({ message: LegacyMessage; log?: ServerLogger; }) { - log.debug("Handling NPS_SEND_MINI_RIFF_LIST"); log.debug(`Received command: ${message._doSerialize().toString("hex")}`); diff --git a/packages/lobby/src/handlers/handleTrackingPing.ts b/packages/lobby/src/handlers/handleTrackingPing.ts index 4fdff707e..73adbbb18 100644 --- a/packages/lobby/src/handlers/handleTrackingPing.ts +++ b/packages/lobby/src/handlers/handleTrackingPing.ts @@ -6,7 +6,7 @@ export async function handleTrackingPing({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; diff --git a/packages/lobby/src/handlers/heartbeat.js b/packages/lobby/src/handlers/heartbeat.js index 2b36aeae1..b9861ed6b 100644 --- a/packages/lobby/src/handlers/heartbeat.js +++ b/packages/lobby/src/handlers/heartbeat.js @@ -1,14 +1,11 @@ import { getServerLogger } from "rusty-motors-shared"; -import { - NPSMessage, - SerializedBuffer, -} from "rusty-motors-shared"; +import { NPSMessage, SerializedBuffer } from "rusty-motors-shared"; /** * @param {object} args * @param {string} args.connectionId * @param {SerializedBuffer} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "Lobby" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "Lobby" })] * @returns {Promise<{ * connectionId: string * messages: SerializedBuffer[], @@ -19,7 +16,7 @@ export async function _npsHeartbeat({ // @ts-ignore message, // eslint-disable-line no-unused-vars log = getServerLogger({ - module: "_npsHeartbeat", + name: "_npsHeartbeat", }), }) { const packetContent = Buffer.alloc(8); diff --git a/packages/lobby/src/handlers/requestConnectGameServer.ts b/packages/lobby/src/handlers/requestConnectGameServer.ts index c9c969271..11cb2641a 100644 --- a/packages/lobby/src/handlers/requestConnectGameServer.ts +++ b/packages/lobby/src/handlers/requestConnectGameServer.ts @@ -46,7 +46,7 @@ export async function _npsRequestGameConnectServer({ connectionId, message, log = getServerLogger({ - module: "LoginServer", + name: "LoginServer", }), }: ServiceArgs): Promise<{ connectionId: string; diff --git a/packages/lobby/src/internal.ts b/packages/lobby/src/internal.ts index d647fcda0..232c16325 100644 --- a/packages/lobby/src/internal.ts +++ b/packages/lobby/src/internal.ts @@ -72,7 +72,7 @@ export const messageHandlers: { * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "PersonaServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "PersonaServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -83,7 +83,7 @@ export async function receiveLobbyData({ connectionId, message, log = getServerLogger({ - module: "Lobby", + name: "Lobby", }), }: { connectionId: string; @@ -93,7 +93,6 @@ export async function receiveLobbyData({ connectionId: string; messages: SerializedBufferOld[]; }> { - /** @type {LegacyMessage | NPSMessage} */ let inboundMessage: LegacyMessage | NPSMessage; @@ -101,9 +100,7 @@ export async function receiveLobbyData({ const dataLength = message.getByteSize(); if (dataLength < 4) { - throw Error( - `Data length ${dataLength} is too short to deserialize`, - ); + throw Error(`Data length ${dataLength} is too short to deserialize`); } if (dataLength > 12) { @@ -128,9 +125,7 @@ export async function receiveLobbyData({ if (typeof supportedHandler === "undefined") { // We do not yet support this message code - throw Error( - `UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`, - ); + throw Error(`UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`); } const buff = new SerializedBufferOld(); @@ -146,9 +141,7 @@ export async function receiveLobbyData({ log.debug("Leaving receiveLobbyData"); return result; } catch (error) { - const err = Error( - `Error handling lobby data: ${String(error)}`, - ); + const err = Error(`Error handling lobby data: ${String(error)}`); err.cause = error; throw err; } diff --git a/packages/login/src/internal.ts b/packages/login/src/internal.ts index 9590b858a..149db7567 100644 --- a/packages/login/src/internal.ts +++ b/packages/login/src/internal.ts @@ -42,7 +42,7 @@ const userRecords: import("../../shared/src/interfaces.js").UserRecordMini[] = [ * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "LoginServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "LoginServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -52,7 +52,7 @@ async function login({ connectionId, message, log = getServerLogger({ - module: "LoginServer", + name: "LoginServer", }), }: { connectionId: string; @@ -195,7 +195,7 @@ export const messageHandlers: { * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "LoginServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "LoginServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -205,7 +205,7 @@ export async function handleLoginData({ connectionId, message, log = getServerLogger({ - module: "handleLoginData", + name: "handleLoginData", }), }: { connectionId: string; @@ -227,9 +227,7 @@ export async function handleLoginData({ if (typeof supportedHandler === "undefined") { // We do not yet support this message code - throw Error( - `UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`, - ); + throw Error(`UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`); } try { diff --git a/packages/login/src/receiveLoginData.ts b/packages/login/src/receiveLoginData.ts index 18c06f49d..2f1c7ea0d 100644 --- a/packages/login/src/receiveLoginData.ts +++ b/packages/login/src/receiveLoginData.ts @@ -13,27 +13,32 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import { getServerLogger, NPSMessage, SerializedBufferOld, type ServiceResponse } from "rusty-motors-shared"; +import { + getServerLogger, + NPSMessage, + SerializedBufferOld, + type ServiceResponse, +} from "rusty-motors-shared"; import { handleLoginData } from "./internal.js"; import type { Serializable } from "rusty-motors-shared-packets"; /** * Receives login data and handles the login process. - * + * * @param {Object} options - The options for receiving login data. * @param {string} options.connectionId - The connection ID. * @param {NPSMessage} options.message - The login message. * @param {import("pino").Logger} [options.log] - The logger instance. - * + * * @returns {Promise} The response from the login process. - * + * * @throws {Error} If there was an error in the login service. */ export async function receiveLoginData({ connectionId, message, log = getServerLogger({ - module: "LoginServer", + name: "LoginServer", }), }: { connectionId: string; diff --git a/packages/nps/gameMessageProcessors/processSelectPersona.ts b/packages/nps/gameMessageProcessors/processSelectPersona.ts index 7d299cf5f..579a2cfff 100644 --- a/packages/nps/gameMessageProcessors/processSelectPersona.ts +++ b/packages/nps/gameMessageProcessors/processSelectPersona.ts @@ -4,47 +4,46 @@ import type { GameSocketCallback } from "./index.js"; import { UserStatus, UserStatusManager, sendNPSAck } from "rusty-motors-nps"; import { getServerLogger } from "rusty-motors-shared"; -const log = getServerLogger(); +const log = getServerLogger({ + name: "nps:processSelectPersona", +}); export async function processSelectPersona( - connectionId: string, - userStatus: UserStatus, - message: GameMessage, - socketCallback: GameSocketCallback, + connectionId: string, + userStatus: UserStatus, + message: GameMessage, + socketCallback: GameSocketCallback, ): Promise { - log.setName("nps:processSelectPersona"); + log.info(`SelectPersona: ${message.toString()}`); - log.info(`SelectPersona: ${message.toString()}`); + const customerId = getDWord(message.getDataAsBuffer(), 0, false); - const customerId = getDWord(message.getDataAsBuffer(), 0, false); + const personaId = getDWord(message.getDataAsBuffer(), 4, false); - const personaId = getDWord(message.getDataAsBuffer(), 4, false); + const shardId = getDWord(message.getDataAsBuffer(), 8, false); - const shardId = getDWord(message.getDataAsBuffer(), 8, false); + // Log the values + log.info(`Customer ID: ${customerId}`); + log.info(`Persona ID: ${personaId}`); + log.info(`Shard ID: ${shardId}`); - // Log the values - log.info(`Customer ID: ${customerId}`); - log.info(`Persona ID: ${personaId}`); - log.info(`Shard ID: ${shardId}`); + // Lookup the session + const existingStatus = UserStatusManager.getUserStatus(customerId); - // Lookup the session - const existingStatus = UserStatusManager.getUserStatus(customerId); + if (!existingStatus) { + log.error(`UserStatus not found for customer ID ${customerId}`); + throw new Error(`UserStatus not found for customer ID ${customerId}`); + } - if (!existingStatus) { - log.error(`UserStatus not found for customer ID ${customerId}`); - throw new Error(`UserStatus not found for customer ID ${customerId}`); - } + log.info( + `Setting persona ID to ${personaId} for ${existingStatus.getCustomerId()}`, + ); - log.info( - `Setting persona ID to ${personaId} for ${existingStatus.getCustomerId()}`, - ); + // Update the user status + existingStatus.setPersonaId(personaId); - // Update the user status - existingStatus.setPersonaId(personaId); + log.info(`GameLogin: ${message.toString()}`); - log.info(`GameLogin: ${message.toString()}`); - - sendNPSAck(socketCallback); - log.resetName(); - return Promise.resolve(); + sendNPSAck(socketCallback); + return Promise.resolve(); } diff --git a/packages/nps/messageStructs/UserInfo.ts b/packages/nps/messageStructs/UserInfo.ts index caa0470cf..2ebce8df3 100644 --- a/packages/nps/messageStructs/UserInfo.ts +++ b/packages/nps/messageStructs/UserInfo.ts @@ -17,7 +17,7 @@ export class UserInfo extends BaseSerializable { this.userData = Buffer.alloc(64); } - serialize(): Buffer { + override serialize(): Buffer { const buffer = Buffer.alloc(this.getByteSize()); let offset = 0; buffer.writeInt32BE(this.profileId, offset); @@ -34,10 +34,10 @@ export class UserInfo extends BaseSerializable { this.userData.copy(buffer, offset); return buffer; } - getByteSize(): number { + override getByteSize(): number { return 4 + 2 + this.profileName.length + 1 + 64; } - toString(): string { + override toString(): string { return `Profile ID: ${this.profileId}, Profile Name: ${this.profileName}`; } diff --git a/packages/nps/messageStructs/UserStatus.ts b/packages/nps/messageStructs/UserStatus.ts index 1a949e275..4d60d8c8c 100644 --- a/packages/nps/messageStructs/UserStatus.ts +++ b/packages/nps/messageStructs/UserStatus.ts @@ -32,10 +32,10 @@ export class UserStatus extends BaseSerializable { this.gag = new UserAction("gag"); this.sessionKey = sessionKey || new SessionKey({}); } - serialize(): Buffer { + override serialize(): Buffer { return this.toBytes(); } - getByteSize(): number { + override getByteSize(): number { return this.getSize(); } @@ -153,7 +153,7 @@ export class UserStatus extends BaseSerializable { this.sessionKey = sessionKey; } - toString(): string { + override toString(): string { return `UserStatus: Customer ID: ${this.customerId} Persona ID: ${this.personaId} diff --git a/packages/nps/tsconfig.json b/packages/nps/tsconfig.json index 751b5710c..7baa3b4b6 100644 --- a/packages/nps/tsconfig.json +++ b/packages/nps/tsconfig.json @@ -6,6 +6,7 @@ }, "include": [ "index.ts", - "src" + "src", + "**/*.ts" ] } \ No newline at end of file diff --git a/packages/patch/src/PatchServer.ts b/packages/patch/src/PatchServer.ts index d695b3f37..37511a5bd 100644 --- a/packages/patch/src/PatchServer.ts +++ b/packages/patch/src/PatchServer.ts @@ -1,15 +1,15 @@ import { Buffer } from "node:buffer"; import { IncomingMessage, ServerResponse } from "node:http"; -import { getServerLogger } from "rusty-motors-shared"; +import { getServerLogger, type ServerLogger } from "rusty-motors-shared"; export const CastanetResponse = { - body: Buffer.from([ - 0xca, 0xfe, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - ]), - header: { - type: "Content-Type", - value: "application/octet-stream", - }, + body: Buffer.from([ + 0xca, 0xfe, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + ]), + header: { + type: "Content-Type", + value: "application/octet-stream", + }, }; /** @@ -20,89 +20,89 @@ export const CastanetResponse = { */ export class PatchServer { - /** - * - * - * @static - * @type {PatchServer} - * @memberof PatchServer - */ - static _instance: PatchServer; + /** + * + * + * @static + * @type {PatchServer} + * @memberof PatchServer + */ + static _instance: PatchServer; - /** - * - * - * @private - * @type {import("pino").Logger} - */ - _log: import("pino").Logger; + /** + * + * + * @private + * @type {import("pino").Logger} + */ + _log: ServerLogger; - /** - * Creates an instance of PatchServer. - * Please use getInstance() instead - * @param {import("pino").Logger} log - * @memberof PatchServer - */ - constructor(log: import("pino").Logger) { - this._log = log; - } + /** + * Creates an instance of PatchServer. + * Please use getInstance() instead + * @param {import("pino").Logger} log + * @memberof PatchServer + */ + constructor(log: ServerLogger) { + this._log = log; + } - /** - * Return the instance of the PatchServer class - * - * @static - * @param {import("pino").Logger} log - * @return {PatchServer} - * @memberof PatchServer - */ - static getInstance(log: import("pino").Logger): PatchServer { - if (!PatchServer._instance) { - PatchServer._instance = new PatchServer(log); - } - return PatchServer._instance; - } + /** + * Return the instance of the PatchServer class + * + * @static + * @param {import("pino").Logger} log + * @return {PatchServer} + * @memberof PatchServer + */ + static getInstance(log: ServerLogger): PatchServer { + if (!PatchServer._instance) { + PatchServer._instance = new PatchServer(log); + } + return PatchServer._instance; + } - /** - * Returns the hard-coded value that tells the client there are no updates or patches - * @param {IncomingMessage} request - * @param {ServerResponse} response - * @returns {ServerResponse} - */ - castanetResponse( - request: IncomingMessage, - response: ServerResponse, - ): ServerResponse { - this._log.debug( - `[PATCH] Request from ${request.socket.remoteAddress} for ${request.method} ${request.url}.`, - ); + /** + * Returns the hard-coded value that tells the client there are no updates or patches + * @param {IncomingMessage} request + * @param {ServerResponse} response + * @returns {ServerResponse} + */ + castanetResponse( + request: IncomingMessage, + response: ServerResponse, + ): ServerResponse { + this._log.debug( + `[PATCH] Request from ${request.socket.remoteAddress} for ${request.method} ${request.url}.`, + ); - response.setHeader( - CastanetResponse.header.type, - CastanetResponse.header.value, - ); - return response.end(CastanetResponse.body); - } + response.setHeader( + CastanetResponse.header.type, + CastanetResponse.header.value, + ); + return response.end(CastanetResponse.body); + } - /** - * Routes incomming HTTP requests - * @param {IncomingMessage} request - * @param {ServerResponse} response - * @returns {ServerResponse} - */ - handleRequest( - request: IncomingMessage, - response: ServerResponse, - ): ServerResponse { - if ( - request.url === "/games/EA_Seattle/MotorCity/UpdateInfo" || - request.url === "/games/EA_Seattle/MotorCity/NPS" || - request.url === "/games/EA_Seattle/MotorCity/MCO" - ) { - return this.castanetResponse(request, response); - } - response.statusCode = 404; - return response.end(""); - } + /** + * Routes incomming HTTP requests + * @param {IncomingMessage} request + * @param {ServerResponse} response + * @returns {ServerResponse} + */ + handleRequest( + request: IncomingMessage, + response: ServerResponse, + ): ServerResponse { + if ( + request.url === "/games/EA_Seattle/MotorCity/UpdateInfo" || + request.url === "/games/EA_Seattle/MotorCity/NPS" || + request.url === "/games/EA_Seattle/MotorCity/MCO" + ) { + return this.castanetResponse(request, response); + } + response.statusCode = 404; + return response.end(""); + } } /** * Return the instance of the PatchServer class @@ -110,5 +110,5 @@ export class PatchServer { */ export function getPatchServer(): PatchServer { - return PatchServer.getInstance(getServerLogger({ module: "PatchServer" })); + return PatchServer.getInstance(getServerLogger({ name: "PatchServer" })); } diff --git a/packages/patch/test/PatchServer.test.ts b/packages/patch/test/PatchServer.test.ts index f288b730b..1377f5061 100644 --- a/packages/patch/test/PatchServer.test.ts +++ b/packages/patch/test/PatchServer.test.ts @@ -3,31 +3,31 @@ import { getServerLogger } from "rusty-motors-shared"; import { CastanetResponse, PatchServer } from "../src/PatchServer.js"; describe("PatchServer", () => { - it("should return the hard-coded value that tells the client there are no updates or patches", () => { - // Arrange - const log = getServerLogger({ module: "Patch" }); - const patchServer = PatchServer.getInstance(log); - const request = { - socket: { - remoteAddress: "", - }, - method: "", - url: "", - }; - const response = { - setHeader: vi.fn(), - writeHead: vi.fn(), - end: vi.fn(), - }; + it("should return the hard-coded value that tells the client there are no updates or patches", () => { + // Arrange + const log = getServerLogger({ name: "Patch" }); + const patchServer = PatchServer.getInstance(log); + const request = { + socket: { + remoteAddress: "", + }, + method: "", + url: "", + }; + const response = { + setHeader: vi.fn(), + writeHead: vi.fn(), + end: vi.fn(), + }; - // Act - patchServer.castanetResponse(request as any, response as any); + // Act + patchServer.castanetResponse(request as any, response as any); - // Assert - expect(response.setHeader).toHaveBeenCalledWith( - CastanetResponse.header.type, - CastanetResponse.header.value, - ); - expect(response.end).toHaveBeenCalledWith(CastanetResponse.body); - }); + // Assert + expect(response.setHeader).toHaveBeenCalledWith( + CastanetResponse.header.type, + CastanetResponse.header.value, + ); + expect(response.end).toHaveBeenCalledWith(CastanetResponse.body); + }); }); diff --git a/packages/persona/src/_gameLogout.ts b/packages/persona/src/_gameLogout.ts index 79d05b62d..a0fe9c505 100644 --- a/packages/persona/src/_gameLogout.ts +++ b/packages/persona/src/_gameLogout.ts @@ -7,7 +7,7 @@ import { LegacyMessage } from "../../shared/src/LegacyMessage.js"; * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "LoginServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "LoginServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -18,7 +18,7 @@ export async function _gameLogout({ connectionId, message, log = getServerLogger({ - module: "PersonaServer", + name: "PersonaServer", }), }: { connectionId: string; diff --git a/packages/persona/src/_getFirstBuddy.ts b/packages/persona/src/_getFirstBuddy.ts index efc857db6..9007ce910 100644 --- a/packages/persona/src/_getFirstBuddy.ts +++ b/packages/persona/src/_getFirstBuddy.ts @@ -8,7 +8,7 @@ export async function _getFirstBuddy({ connectionId, message, log = getServerLogger({ - module: "PersonaServer", + name: "PersonaServer", }), }: { connectionId: string; diff --git a/packages/persona/src/_selectGamePersona.ts b/packages/persona/src/_selectGamePersona.ts index 633b5bc15..2ad814617 100644 --- a/packages/persona/src/_selectGamePersona.ts +++ b/packages/persona/src/_selectGamePersona.ts @@ -7,7 +7,7 @@ import { LegacyMessage } from "../../shared/src/LegacyMessage.js"; * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "LoginServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "LoginServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -18,7 +18,7 @@ export async function _selectGamePersona({ connectionId, message, log = getServerLogger({ - module: "PersonaServer", + name: "PersonaServer", }), }: { connectionId: string; diff --git a/packages/persona/src/handlers/validatePersonaName.ts b/packages/persona/src/handlers/validatePersonaName.ts index 76e05a2a6..da17ec600 100644 --- a/packages/persona/src/handlers/validatePersonaName.ts +++ b/packages/persona/src/handlers/validatePersonaName.ts @@ -11,7 +11,7 @@ export async function validatePersonaName({ connectionId, message, log = getServerLogger({ - module: "PersonaServer", + name: "PersonaServer", }), }: { connectionId: string; diff --git a/packages/persona/src/internal.ts b/packages/persona/src/internal.ts index 71f4f604e..f8aeb7bcd 100644 --- a/packages/persona/src/internal.ts +++ b/packages/persona/src/internal.ts @@ -157,7 +157,7 @@ async function getPersonaMapsByCustomerId( * @param {object} args * @param {string} args.connectionId * @param {LegacyMessage} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "LoginServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "LoginServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -166,7 +166,7 @@ async function getPersonaMapsByCustomerId( async function getPersonaMaps({ connectionId, message, - log = getServerLogger({ module: "PersonaServer" }), + log = getServerLogger({ name: "PersonaServer" }), }: { connectionId: string; message: LegacyMessage; @@ -253,7 +253,7 @@ async function getPersonaMaps({ * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "PersonaServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "PersonaServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[], @@ -264,7 +264,7 @@ export async function receivePersonaData({ connectionId, message, log = getServerLogger({ - module: "PersonaServer", + name: "PersonaServer", }), }: { connectionId: string; @@ -292,9 +292,7 @@ export async function receivePersonaData({ if (typeof supportedHandler === "undefined") { // We do not yet support this message code - throw Error( - `UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`, - ); + throw Error(`UNSUPPORTED_MESSAGECODE: ${inboundMessage._header.id}`); } try { @@ -307,9 +305,7 @@ export async function receivePersonaData({ log.debug("Leaving receivePersonaDatadleData"); return result; } catch (error) { - const err = Error( - `Error handling persona data: ${String(error)}`, - ); + const err = Error(`Error handling persona data: ${String(error)}`); err.cause = error; throw err; } diff --git a/packages/shared/src/Configuration.ts b/packages/shared/src/Configuration.ts index a2d8704ce..e7584f87c 100644 --- a/packages/shared/src/Configuration.ts +++ b/packages/shared/src/Configuration.ts @@ -1,5 +1,5 @@ import type { Logger } from "pino"; -import { getServerLogger } from "./log.js"; +import { getServerLogger, type ServerLogger } from "./log.js"; /** * @module shared/Configuration @@ -36,7 +36,7 @@ export class Configuration { privateKeyFile?: string; publicKeyFile?: string; logLevel?: string; - logger?: Logger; + logger?: ServerLogger; }) { try { this.certificateFile = certificateFile; diff --git a/packages/shared/src/MessageBufferOld.ts b/packages/shared/src/MessageBufferOld.ts index 002d55ab0..df741446f 100644 --- a/packages/shared/src/MessageBufferOld.ts +++ b/packages/shared/src/MessageBufferOld.ts @@ -42,7 +42,7 @@ export class MessageBufferOld extends SerializedBufferOld { * @param {Buffer} buffer */ set buffer(buffer: Buffer) { - // const log = getServerLogger({ module: "MessageBuffer" }); + // const log = getServerLogger({ name: "MessageBuffer" }); // log.level = getServerConfiguration({}).logLevel ?? "info"; this._buffer = Buffer.alloc(buffer.length); this._buffer = buffer; @@ -103,9 +103,7 @@ export class MessageBufferOld extends SerializedBufferOld { ); } if (this.messageId <= 0) { - throw Error( - `Message ID ${this.messageId} is invalid to serialize`, - ); + throw Error(`Message ID ${this.messageId} is invalid to serialize`); } this._header.serialize().copy(buffer); this._buffer.copy(buffer, 4); diff --git a/packages/shared/src/SubThread.ts b/packages/shared/src/SubThread.ts index dd0dbfe43..4c7d93442 100644 --- a/packages/shared/src/SubThread.ts +++ b/packages/shared/src/SubThread.ts @@ -17,7 +17,7 @@ export class SubThread extends EventEmitter { */ constructor( name: string, - log: ServerLogger = getServerLogger({ module: "SubThread" }), + log: ServerLogger = getServerLogger({ name: "SubThread" }), loopInterval: number = 100, ) { super(); diff --git a/packages/shared/src/log.ts b/packages/shared/src/log.ts index 0cc93b9d3..0d63056ce 100644 --- a/packages/shared/src/log.ts +++ b/packages/shared/src/log.ts @@ -4,7 +4,6 @@ import * as Sentry from "@sentry/node"; type ServerLoggerOptions = { level?: string; - module?: string; name?: string; }; @@ -41,8 +40,7 @@ class SLogger { message, sentry_trace: Sentry.getTraceData()["sentry-trace"], }); - - } + } /** * @param {string} message @@ -87,11 +85,11 @@ class SLogger { * @return {module:pino.Logger} */ export function getServerLogger(options: ServerLoggerOptions): ServerLogger { - const logLevel = process.env["MCO_LOG_LEVEL"] ?? "info"; - const moduleName = `server.${options ? (options.module ?? options.name) : "unknown"}`; + const logLevel = process.env["MCO_LOG_LEVEL"] ?? "info"; + const logName = `server.${options ? (options.name ?? "unknown") : "unknown"}`; SLogger.instance = new SLogger({ level: logLevel, - name: moduleName, + name: logName, }); - return SLogger.instance as ServerLogger + return SLogger.instance as ServerLogger; } diff --git a/packages/transactions/src/internal.ts b/packages/transactions/src/internal.ts index 4541b43c9..38a5d792c 100644 --- a/packages/transactions/src/internal.ts +++ b/packages/transactions/src/internal.ts @@ -89,7 +89,7 @@ async function processInput({ connectionId, packet, log = getServerLogger({ - module: "transactionServer", + name: "transactionServer", }), }: import("./handlers.js").MessageHandlerArgs): Promise< import("./handlers.js").MessageHandlerResult @@ -114,9 +114,7 @@ async function processInput({ }); return responsePackets; } catch (error) { - const err = Error( - `Error handling packet: ${String(error)}`, - ); + const err = Error(`Error handling packet: ${String(error)}`); err.cause = error; throw err; } @@ -131,7 +129,7 @@ async function processInput({ * @param {object} args * @param {string} args.connectionId * @param {SerializedBufferOld} args.message - * @param {import("pino").Logger} [args.log=getServerLogger({ module: "transactionServer" })] + * @param {import("pino").Logger} [args.log=getServerLogger({ name: "transactionServer" })] * @returns {Promise<{ * connectionId: string, * messages: SerializedBufferOld[] @@ -141,7 +139,7 @@ export async function receiveTransactionsData({ connectionId, message, log = getServerLogger({ - module: "transactionServer", + name: "transactionServer", level: getServerConfiguration({}).logLevel ?? "info", }), }: { @@ -197,9 +195,7 @@ export async function receiveTransactionsData({ log.debug(`Decrypted message: ${inboundMessage.toString()}`); } catch (error) { - const err = Error( - `Unable to decrypt message: ${String(error)}`, - ); + const err = Error(`Unable to decrypt message: ${String(error)}`); err.cause = error; throw err; } @@ -287,8 +283,6 @@ export async function receiveTransactionsData({ */ export function verifyLength(buffer: Buffer, buffer2: Buffer) { if (buffer.length !== buffer2.length) { - throw Error( - `Length mismatch: ${buffer.length} !== ${buffer2.length}`, - ); + throw Error(`Length mismatch: ${buffer.length} !== ${buffer2.length}`); } } diff --git a/server.ts b/server.ts index 5b6b99472..21f5642e6 100755 --- a/server.ts +++ b/server.ts @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - import { exit } from "node:process"; import * as Sentry from "@sentry/node"; import { getGatewayServer } from "rusty-motors-gateway"; @@ -22,62 +21,62 @@ import { verifyLegacyCipherSupport } from "rusty-motors-gateway"; import { getServerConfiguration } from "rusty-motors-shared"; import { getServerLogger } from "rusty-motors-shared"; - const coreLogger = getServerLogger({ - module: "core", + name: "core", }); try { - verifyLegacyCipherSupport(); + verifyLegacyCipherSupport(); } catch (err) { - coreLogger.fatal(`Error in core server: ${String(err)}`); - exit(1); + coreLogger.fatal(`Error in core server: ${String(err)}`); + exit(1); } try { - if (typeof process.env['EXTERNAL_HOST'] === "undefined") { - console.error("Please set EXTERNAL_HOST"); - process.exit(1); - } - if (typeof process.env['CERTIFICATE_FILE'] === "undefined") { - console.error("Please set CERTIFICATE_FILE"); - process.exit(1); - } - if (typeof process.env['PRIVATE_KEY_FILE'] === "undefined") { - console.error("Please set PRIVATE_KEY_FILE"); - process.exit(1); - } - if (typeof process.env['PUBLIC_KEY_FILE'] === "undefined") { - console.error("Please set PUBLIC_KEY_FILE"); - process.exit(1); - } - const config = getServerConfiguration({ - host: process.env['EXTERNAL_HOST'], - certificateFile: process.env['CERTIFICATE_FILE'], - privateKeyFile: process.env['PRIVATE_KEY_FILE'], - publicKeyFile: process.env['PUBLIC_KEY_FILE'], - logLevel: process.env['MCO_LOG_LEVEL'] || "info", - }); + if (typeof process.env["EXTERNAL_HOST"] === "undefined") { + console.error("Please set EXTERNAL_HOST"); + process.exit(1); + } + if (typeof process.env["CERTIFICATE_FILE"] === "undefined") { + console.error("Please set CERTIFICATE_FILE"); + process.exit(1); + } + if (typeof process.env["PRIVATE_KEY_FILE"] === "undefined") { + console.error("Please set PRIVATE_KEY_FILE"); + process.exit(1); + } + if (typeof process.env["PUBLIC_KEY_FILE"] === "undefined") { + console.error("Please set PUBLIC_KEY_FILE"); + process.exit(1); + } + const config = getServerConfiguration({ + host: process.env["EXTERNAL_HOST"], + certificateFile: process.env["CERTIFICATE_FILE"], + privateKeyFile: process.env["PRIVATE_KEY_FILE"], + publicKeyFile: process.env["PUBLIC_KEY_FILE"], + logLevel: process.env["MCO_LOG_LEVEL"] || "info", + }); - const appLog = getServerLogger({ - level: config.logLevel, - module: "app", - }); + const appLog = getServerLogger({ + level: config.logLevel, + name: "app", + }); - const listeningPortList = [ - 6660, 7003, 8228, 8226, 8227, 9000, 9001, 9002, 9003, 9004, 9005, 9006, - 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 43200, 43300, 43400, 53303, - ]; + const listeningPortList = [ + 6660, 7003, 8228, 8226, 8227, 9000, 9001, 9002, 9003, 9004, 9005, 9006, + 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 43200, 43300, 43400, + 53303, + ]; - const gatewayServer = getGatewayServer({ - config, - log: appLog, - listeningPortList, - }); + const gatewayServer = getGatewayServer({ + config, + log: appLog, + listeningPortList, + }); - gatewayServer.start(); + gatewayServer.start(); } catch (err) { - Sentry.captureException(err); - coreLogger.fatal(`Error in core server: ${String(err)}`); - process.exit(1); + Sentry.captureException(err); + coreLogger.fatal(`Error in core server: ${String(err)}`); + process.exit(1); } diff --git a/src/chat/index.ts b/src/chat/index.ts index 88c8a1033..0e6d20549 100644 --- a/src/chat/index.ts +++ b/src/chat/index.ts @@ -19,7 +19,7 @@ async function receiveChatData({ connectionId: string; message: Serializable; }): Promise { - const log = getServerLogger({ module: "chat" }); + const log = getServerLogger({ name: "chat" }); log.info(`Received chat data from connection ${connectionId}`); log.debug(`Message: ${message.toHexString()}`);