From 9a8342642f8519210f996bc581ca822313f9af9b Mon Sep 17 00:00:00 2001
From: Abhinav Kumar <abhinav@avitechlab.com>
Date: Thu, 10 Oct 2024 01:48:34 +0530
Subject: [PATCH] chore!: remove deprecated livechat:setCustomField method
 (#33444)

---
 .changeset/nice-vans-design.md                |  5 ++++
 .../app/livechat/imports/server/rest/sms.ts   | 11 +++----
 .../livechat/server/api/lib/customFields.ts   | 20 ++++++++++++-
 apps/meteor/app/livechat/server/index.ts      |  1 -
 .../livechat/server/methods/setCustomField.ts | 30 -------------------
 5 files changed, 30 insertions(+), 37 deletions(-)
 create mode 100644 .changeset/nice-vans-design.md
 delete mode 100644 apps/meteor/app/livechat/server/methods/setCustomField.ts

diff --git a/.changeset/nice-vans-design.md b/.changeset/nice-vans-design.md
new file mode 100644
index 00000000000..42070f39cc8
--- /dev/null
+++ b/.changeset/nice-vans-design.md
@@ -0,0 +1,5 @@
+---
+'@rocket.chat/meteor': major
+---
+
+Removes deprecated method `livechat:setCustomField`. The custom fields can be directly set via the `livechat/visitor` endpoint.
diff --git a/apps/meteor/app/livechat/imports/server/rest/sms.ts b/apps/meteor/app/livechat/imports/server/rest/sms.ts
index 2fe3ce40eed..15f08cdc1e8 100644
--- a/apps/meteor/app/livechat/imports/server/rest/sms.ts
+++ b/apps/meteor/app/livechat/imports/server/rest/sms.ts
@@ -19,6 +19,7 @@ import { API } from '../../../../api/server';
 import { FileUpload } from '../../../../file-upload/server';
 import { checkUrlForSsrf } from '../../../../lib/server/functions/checkUrlForSsrf';
 import { settings } from '../../../../settings/server';
+import { setCustomField } from '../../../server/api/lib/customFields';
 import type { ILivechatMessage } from '../../../server/lib/LivechatTyped';
 import { Livechat as LivechatTyped } from '../../../server/lib/LivechatTyped';
 
@@ -267,16 +268,16 @@ API.v1.addRoute('livechat/sms-incoming/:service', {
 			setImmediate(async () => {
 				if (sms.extra) {
 					if (sms.extra.fromCountry) {
-						await Meteor.callAsync('livechat:setCustomField', sendMessage.message.token, 'country', sms.extra.fromCountry);
+						await setCustomField(sendMessage.message.token, 'country', sms.extra.fromCountry);
 					}
 					if (sms.extra.fromState) {
-						await Meteor.callAsync('livechat:setCustomField', sendMessage.message.token, 'state', sms.extra.fromState);
+						await setCustomField(sendMessage.message.token, 'state', sms.extra.fromState);
 					}
 					if (sms.extra.fromCity) {
-						await Meteor.callAsync('livechat:setCustomField', sendMessage.message.token, 'city', sms.extra.fromCity);
+						await setCustomField(sendMessage.message.token, 'city', sms.extra.fromCity);
 					}
-					if (sms.extra.toPhone) {
-						await Meteor.callAsync('livechat:setCustomField', sendMessage.message.token, 'phoneNumber', sms.extra.toPhone);
+					if (sms.extra.fromZip) {
+						await setCustomField(sendMessage.message.token, 'zip', sms.extra.fromZip);
 					}
 				}
 			});
diff --git a/apps/meteor/app/livechat/server/api/lib/customFields.ts b/apps/meteor/app/livechat/server/api/lib/customFields.ts
index 0a9213f99f9..8b1d459b2d8 100644
--- a/apps/meteor/app/livechat/server/api/lib/customFields.ts
+++ b/apps/meteor/app/livechat/server/api/lib/customFields.ts
@@ -1,7 +1,8 @@
 import type { ILivechatCustomField } from '@rocket.chat/core-typings';
-import { LivechatCustomField } from '@rocket.chat/models';
+import { LivechatCustomField, LivechatVisitors, LivechatRooms } from '@rocket.chat/models';
 import type { PaginatedResult } from '@rocket.chat/rest-typings';
 import { escapeRegExp } from '@rocket.chat/string-helpers';
+import type { UpdateResult, Document } from 'mongodb';
 
 export async function findLivechatCustomFields({
 	text,
@@ -41,3 +42,20 @@ export async function findCustomFieldById({
 		customField: await LivechatCustomField.findOneById(customFieldId),
 	};
 }
+
+export async function setCustomField(
+	token: string,
+	key: string,
+	value: string,
+	overwrite = true,
+): Promise<boolean | UpdateResult | Document> {
+	const customField = await LivechatCustomField.findOneById(key);
+	if (customField) {
+		if (customField.scope === 'room') {
+			return LivechatRooms.updateDataByToken(token, key, value, overwrite);
+		}
+		return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite);
+	}
+
+	return true;
+}
diff --git a/apps/meteor/app/livechat/server/index.ts b/apps/meteor/app/livechat/server/index.ts
index 4e78811505d..35d27dbae12 100644
--- a/apps/meteor/app/livechat/server/index.ts
+++ b/apps/meteor/app/livechat/server/index.ts
@@ -37,7 +37,6 @@ import './methods/saveIntegration';
 import './methods/saveTrigger';
 import './methods/sendMessageLivechat';
 import './methods/sendFileLivechatMessage';
-import './methods/setCustomField';
 import './methods/setDepartmentForVisitor';
 import './methods/transfer';
 import './methods/setUpConnection';
diff --git a/apps/meteor/app/livechat/server/methods/setCustomField.ts b/apps/meteor/app/livechat/server/methods/setCustomField.ts
deleted file mode 100644
index 6d3a2384cdd..00000000000
--- a/apps/meteor/app/livechat/server/methods/setCustomField.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import type { ServerMethods } from '@rocket.chat/ddp-client';
-import { LivechatVisitors, LivechatCustomField, LivechatRooms } from '@rocket.chat/models';
-import { Meteor } from 'meteor/meteor';
-import type { UpdateResult, Document } from 'mongodb';
-
-import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger';
-
-declare module '@rocket.chat/ddp-client' {
-	// eslint-disable-next-line @typescript-eslint/naming-convention
-	interface ServerMethods {
-		'livechat:setCustomField'(token: string, key: string, value: string, overwrite?: boolean): Promise<boolean | UpdateResult | Document>;
-	}
-}
-
-Meteor.methods<ServerMethods>({
-	async 'livechat:setCustomField'(token, key, value, overwrite = true) {
-		methodDeprecationLogger.method('livechat:setCustomField', '7.0.0');
-
-		const customField = await LivechatCustomField.findOneById(key);
-		if (customField) {
-			if (customField.scope === 'room') {
-				return LivechatRooms.updateDataByToken(token, key, value, overwrite);
-			}
-			// Save in user
-			return LivechatVisitors.updateLivechatDataByToken(token, key, value, overwrite);
-		}
-
-		return true;
-	},
-});
-- 
GitLab