From 94b9a492f0c2a5576bee4ba8a88df24b840f60c1 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 18 Nov 2024 15:57:39 +0100 Subject: [PATCH] feat(assist): fixed the issue with overwritten metadata --- assist/package-lock.json | 6 ++++++ assist/package.json | 1 + assist/utils/socketHandlers.js | 5 +++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/assist/package-lock.json b/assist/package-lock.json index af6eac404..f8a2e5ea3 100644 --- a/assist/package-lock.json +++ b/assist/package-lock.json @@ -9,6 +9,7 @@ "version": "v1.12.0", "license": "Elastic License 2.0 (ELv2)", "dependencies": { + "@fastify/deepmerge": "^2.0.0", "@maxmind/geoip2-node": "^4.2.0", "express": "^4.21.1", "jsonwebtoken": "^9.0.2", @@ -36,6 +37,11 @@ "kuler": "^2.0.0" } }, + "node_modules/@fastify/deepmerge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-2.0.0.tgz", + "integrity": "sha512-fsaybTGDyQ5KpPsplQqb9yKdCf2x/pbNpMNk8Tvp3rRz7lVcupKysH4b2ELMN2P4Hak1+UqTYdTj/u4FNV2p0g==" + }, "node_modules/@maxmind/geoip2-node": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@maxmind/geoip2-node/-/geoip2-node-4.2.0.tgz", diff --git a/assist/package.json b/assist/package.json index 0713e6727..301205804 100644 --- a/assist/package.json +++ b/assist/package.json @@ -18,6 +18,7 @@ }, "homepage": "https://github.com/openreplay/openreplay#readme", "dependencies": { + "@fastify/deepmerge": "^2.0.0", "@maxmind/geoip2-node": "^4.2.0", "express": "^4.21.1", "jsonwebtoken": "^9.0.2", diff --git a/assist/utils/socketHandlers.js b/assist/utils/socketHandlers.js index 1494293b5..a9a3e8a14 100644 --- a/assist/utils/socketHandlers.js +++ b/assist/utils/socketHandlers.js @@ -24,6 +24,7 @@ const { DecreaseOnlineRooms, } = require('../utils/metrics'); const {logger} = require('./logger'); +const deepMerge = require('@fastify/deepmerge')({all: true}); const findSessionSocketId = async (io, roomId, tabId) => { let pickFirstSession = tabId === undefined; @@ -171,14 +172,14 @@ async function onUpdateEvent(socket, ...args) { } args[0] = updateSessionData(socket, args[0]) - Object.assign(socket.handshake.query.sessionInfo, args[0].data, {tabId: args[0]?.meta?.tabId}); + socket.handshake.query.sessionInfo = deepMerge(socket.handshake.query.sessionInfo, args[0]?.data, {tabId: args[0]?.meta?.tabId}); // Update sessionInfo for all agents in the room const io = getServer(); const connected_sockets = await io.in(socket.handshake.query.roomId).fetchSockets(); for (let item of connected_sockets) { if (item.handshake.query.identity === IDENTITIES.session && item.handshake.query.sessionInfo) { - Object.assign(item.handshake.query.sessionInfo, args[0]?.data, {tabId: args[0]?.meta?.tabId}); + item.handshake.query.sessionInfo = deepMerge(item.handshake.query.sessionInfo, args[0]?.data, {tabId: args[0]?.meta?.tabId}); } else if (item.handshake.query.identity === IDENTITIES.agent) { socket.to(item.id).emit(EVENTS_DEFINITION.listen.UPDATE_EVENT, args[0]); }