From 37c165335c1484e64179f69f0b0f76b3967c4193 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 25 Jan 2024 16:36:02 -0300 Subject: [PATCH] fix: use EJSON serializer for data transfer between multi instances --- .changeset/spotty-tips-sell.md | 5 +++++ .../server/local-services/instance/service.ts | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 .changeset/spotty-tips-sell.md diff --git a/.changeset/spotty-tips-sell.md b/.changeset/spotty-tips-sell.md new file mode 100644 index 0000000000000..8505e004a3c26 --- /dev/null +++ b/.changeset/spotty-tips-sell.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Fix multi-instance data formats being lost diff --git a/apps/meteor/ee/server/local-services/instance/service.ts b/apps/meteor/ee/server/local-services/instance/service.ts index 4caab1ba9f16c..5da11ede98d61 100644 --- a/apps/meteor/ee/server/local-services/instance/service.ts +++ b/apps/meteor/ee/server/local-services/instance/service.ts @@ -3,8 +3,9 @@ import os from 'os'; import { License, ServiceClassInternal } from '@rocket.chat/core-services'; import { InstanceStatus } from '@rocket.chat/instance-status'; import { InstanceStatus as InstanceStatusRaw } from '@rocket.chat/models'; +import EJSON from 'ejson'; import type { BrokerNode } from 'moleculer'; -import { ServiceBroker, Transporters } from 'moleculer'; +import { ServiceBroker, Transporters, Serializers } from 'moleculer'; import { StreamerCentral } from '../../../../server/modules/streamer/streamer.module'; import type { IInstanceService } from '../../sdk/types/IInstanceService'; @@ -13,6 +14,18 @@ import { getTransporter } from './getTransporter'; const hostIP = process.env.INSTANCE_IP ? String(process.env.INSTANCE_IP).trim() : 'localhost'; +const { Base } = Serializers; + +class EJSONSerializer extends Base { + serialize(obj: any): Buffer { + return Buffer.from(EJSON.stringify(obj)); + } + + deserialize(buf: Buffer): any { + return EJSON.parse(buf.toString()); + } +} + export class InstanceService extends ServiceClassInternal implements IInstanceService { protected name = 'instance'; @@ -83,7 +96,7 @@ export class InstanceService extends ServiceClassInternal implements IInstanceSe this.broker = new ServiceBroker({ nodeID: InstanceStatus.id(), transporter: this.transporter, - + serializer: new EJSONSerializer(), ...getLogger(process.env), });