From 7c713c97b70279582df44e58df735ee021389ad7 Mon Sep 17 00:00:00 2001 From: Anh Thu Nguyen Date: Fri, 19 Jul 2024 11:10:59 -0400 Subject: [PATCH] assign the appropriate message source based on the client (BOT vs AGENT) J=CLIP-1341 TEST=manual,auto tested via test-site using aws connect agent handoff and verified that the messages show up with the right sources. added and ran unit tests. --- package-lock.json | 28 +++++++++++++++---- packages/chat-headless/package.json | 4 +-- .../chat-headless/src/ChatHeadlessImpl.ts | 2 +- .../tests/chatheadless.clients.test.ts | 6 +++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f5d04d..d7abadf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4895,9 +4895,9 @@ } }, "node_modules/@yext/chat-core": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@yext/chat-core/-/chat-core-0.8.2.tgz", - "integrity": "sha512-+ivq2xEHY1sGLOlPQ7d5wnlswsZfdO/Hz1Y8cmgq5UP6cpr4wUBTTQd5yWn1u9JJHq38/jcRleC2TSrh8E2Ozg==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@yext/chat-core/-/chat-core-0.9.0.tgz", + "integrity": "sha512-g0lOKEbsLCxXPYTYZbMSqt6h/BTF0om/k6KOp7ESt1zAgpW6tVJ3bF0kLfJb1O/VhSr+U/IPWXp7lPTA5LWTbA==", "dependencies": { "cross-fetch": "^3.1.5" } @@ -18722,12 +18722,12 @@ }, "packages/chat-headless": { "name": "@yext/chat-headless", - "version": "0.10.1", + "version": "0.11.0", "license": "BSD-3-Clause", "dependencies": { "@reduxjs/toolkit": "^1.9.5", "@yext/analytics": "^0.6.3", - "@yext/chat-core": "^0.8.2" + "@yext/chat-core": "^0.9.0" }, "devDependencies": { "@babel/preset-env": "^7.21.5", @@ -19047,6 +19047,24 @@ "@types/yargs-parser": "*" } }, + "packages/chat-headless-react/node_modules/@yext/chat-core": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@yext/chat-core/-/chat-core-0.8.2.tgz", + "integrity": "sha512-+ivq2xEHY1sGLOlPQ7d5wnlswsZfdO/Hz1Y8cmgq5UP6cpr4wUBTTQd5yWn1u9JJHq38/jcRleC2TSrh8E2Ozg==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "packages/chat-headless-react/node_modules/@yext/chat-headless": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@yext/chat-headless/-/chat-headless-0.10.1.tgz", + "integrity": "sha512-CuJw7IdPo3ZE8SdypgDuSDEMpnYsRgjKf4ZYF+a4qxNLlgs5wsORzKiqxo6PmK/+yf3A71s0nwVHGxvVlT4YQA==", + "dependencies": { + "@reduxjs/toolkit": "^1.9.5", + "@yext/analytics": "^0.6.3", + "@yext/chat-core": "^0.8.2" + } + }, "packages/chat-headless-react/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, diff --git a/packages/chat-headless/package.json b/packages/chat-headless/package.json index 4453e12..cdd2bd6 100644 --- a/packages/chat-headless/package.json +++ b/packages/chat-headless/package.json @@ -1,6 +1,6 @@ { "name": "@yext/chat-headless", - "version": "0.10.1", + "version": "0.11.0", "description": "A state manager library powered by Redux for Yext Chat integrations", "main": "./dist/commonjs/src/index.js", "module": "./dist/esm/src/index.mjs", @@ -40,7 +40,7 @@ "dependencies": { "@reduxjs/toolkit": "^1.9.5", "@yext/analytics": "^0.6.3", - "@yext/chat-core": "^0.8.2" + "@yext/chat-core": "^0.9.0" }, "devDependencies": { "@babel/preset-env": "^7.21.5", diff --git a/packages/chat-headless/src/ChatHeadlessImpl.ts b/packages/chat-headless/src/ChatHeadlessImpl.ts index e5aaa5a..cff79ca 100644 --- a/packages/chat-headless/src/ChatHeadlessImpl.ts +++ b/packages/chat-headless/src/ChatHeadlessImpl.ts @@ -117,7 +117,7 @@ export class ChatHeadlessImpl implements ChatHeadless { client.on("message", (data: string) => { this.addMessage({ - source: MessageSource.BOT, + source: client === this.botClient ? MessageSource.BOT : MessageSource.AGENT, text: data, timestamp: new Date().toISOString(), }); diff --git a/packages/chat-headless/tests/chatheadless.clients.test.ts b/packages/chat-headless/tests/chatheadless.clients.test.ts index 6d8ee43..c5cb506 100644 --- a/packages/chat-headless/tests/chatheadless.clients.test.ts +++ b/packages/chat-headless/tests/chatheadless.clients.test.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { Message, MessageResponse } from "@yext/chat-core"; +import { Message, MessageResponse, MessageSource } from "@yext/chat-core"; import { provideChatHeadless } from "../src/HeadlessProvider"; import { ChatEventClient, ChatHttpClient, HeadlessConfig } from "../src/models"; import * as analyticsLib from "@yext/analytics"; @@ -85,17 +85,20 @@ it("handoff http client between event client", async () => { bot: botClient, agent: agentClient, }); + // const expectedMessageSources: MessageSource[] = [] //http client handoff to event client await headless.getNextMessage(); expect(botClient.getNextMessage).toHaveBeenCalledTimes(1); expect(agentClient.processMessage).toHaveBeenCalledTimes(0); expect(agentClient.init).toHaveBeenCalledTimes(1); + expect(headless.state.conversation.messages.at(-1)?.source).toEqual(MessageSource.BOT); //event client handle next user message await headless.getNextMessage("user message 1"); expect(botClient.getNextMessage).toHaveBeenCalledTimes(1); expect(agentClient.processMessage).toHaveBeenCalledTimes(1); + expect(headless.state.conversation.messages.at(-1)?.source).toEqual(MessageSource.AGENT); //event client handoff to http client callbacks["close"]?.forEach((cb) => cb()); @@ -106,6 +109,7 @@ it("handoff http client between event client", async () => { await headless.getNextMessage("user message 2"); expect(botClient.getNextMessage).toHaveBeenCalledTimes(2); expect(agentClient.processMessage).toHaveBeenCalledTimes(1); + expect(headless.state.conversation.messages.at(-1)?.source).toEqual(MessageSource.BOT); }); it("update state on events from event client", async () => {