@microsoft/omnichannel-chat-widget 1.2.3-main.2ce131d → 1.2.3-main.d27a359
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/common/telemetry/TelemetryConstants.js +1 -0
- package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -1
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +6 -3
- package/lib/cjs/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.spec.js +190 -0
- package/lib/esm/common/telemetry/TelemetryConstants.js +1 -0
- package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js +4 -1
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.js +6 -3
- package/lib/esm/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.spec.js +188 -0
- package/lib/types/common/telemetry/TelemetryConstants.d.ts +1 -0
- package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.spec.d.ts +1 -0
- package/package.json +1 -1
|
@@ -164,6 +164,7 @@ exports.TelemetryEvent = TelemetryEvent;
|
|
|
164
164
|
TelemetryEvent["SetBotAuthProviderHideCard"] = "SetBotAuthProviderHideCard";
|
|
165
165
|
TelemetryEvent["SetBotAuthProviderDisplayCard"] = "SetBotAuthProviderDisplayCard";
|
|
166
166
|
TelemetryEvent["SetBotAuthProviderNotFound"] = "SetBotAuthProviderNotFound";
|
|
167
|
+
TelemetryEvent["BotAuthActivityUndefinedSignInId"] = "BotAuthActivityUndefinedSignInId";
|
|
167
168
|
TelemetryEvent["ThirdPartyCookiesBlocked"] = "ThirdPartyCookiesBlocked";
|
|
168
169
|
TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
|
|
169
170
|
TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
|
package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js
CHANGED
|
@@ -83,7 +83,10 @@ class BotAuthActivitySubscriber {
|
|
|
83
83
|
const signInUrl = attachment.content.buttons[0].value;
|
|
84
84
|
const signInId = extractSignInId(signInUrl);
|
|
85
85
|
if (!signInId) {
|
|
86
|
-
|
|
86
|
+
_TelemetryHelper.TelemetryHelper.logLoadingEvent(_TelemetryConstants.LogLevel.INFO, {
|
|
87
|
+
Event: _TelemetryConstants.TelemetryEvent.BotAuthActivityUndefinedSignInId
|
|
88
|
+
});
|
|
89
|
+
return activity;
|
|
87
90
|
}
|
|
88
91
|
if (this.signInCardSeen.has(signInId)) {
|
|
89
92
|
// Prevents duplicate auth
|
|
@@ -51,12 +51,15 @@ const handleSystemMessage = (next, args, card, systemMessageStyleProps) => {
|
|
|
51
51
|
return () => false;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
// eslint-disable-next-line react/display-name
|
|
54
|
+
// eslint-disable-next-line react/display-name
|
|
55
55
|
return () => /*#__PURE__*/_react.default.createElement("div", {
|
|
56
56
|
key: card.activity.id,
|
|
57
57
|
style: systemMessageStyles,
|
|
58
|
-
"aria-hidden": "true"
|
|
59
|
-
|
|
58
|
+
"aria-hidden": "true",
|
|
59
|
+
dangerouslySetInnerHTML: {
|
|
60
|
+
__html: (0, _utils.escapeHtml)(card.activity.text)
|
|
61
|
+
}
|
|
62
|
+
});
|
|
60
63
|
};
|
|
61
64
|
|
|
62
65
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Constants = require("../../../../../common/Constants");
|
|
4
|
+
var _DirectLineActivityType = require("../../enums/DirectLineActivityType");
|
|
5
|
+
var _DirectLineSenderRole = require("../../enums/DirectLineSenderRole");
|
|
6
|
+
var _MessageType = require("../../enums/MessageType");
|
|
7
|
+
var _TelemetryHelper = require("../../../../../common/telemetry/TelemetryHelper");
|
|
8
|
+
var _activityMiddleware = require("./activityMiddleware");
|
|
9
|
+
describe("activityMiddleware test", () => {
|
|
10
|
+
it("createActivityMiddleware() with Channel role sender should returns nothing", () => {
|
|
11
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
12
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
13
|
+
const args = {
|
|
14
|
+
activity: {
|
|
15
|
+
channelData: {
|
|
16
|
+
type: _MessageType.MessageTypes.Thread
|
|
17
|
+
},
|
|
18
|
+
from: {
|
|
19
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.Channel
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
24
|
+
expect(results()).toEqual(false);
|
|
25
|
+
expect(_TelemetryHelper.TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(1);
|
|
26
|
+
});
|
|
27
|
+
it("createActivityMiddleware() with Hidden tag should return nothing", () => {
|
|
28
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
29
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
30
|
+
const args = {
|
|
31
|
+
activity: {
|
|
32
|
+
channelData: {
|
|
33
|
+
tags: [_Constants.Constants.hiddenTag]
|
|
34
|
+
},
|
|
35
|
+
from: {
|
|
36
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
41
|
+
expect(results()).toEqual(false);
|
|
42
|
+
expect(_TelemetryHelper.TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
43
|
+
});
|
|
44
|
+
it("createActivityMiddleware() with System tag should return system message", () => {
|
|
45
|
+
var _results$props, _results$props$danger;
|
|
46
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
47
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
48
|
+
const systemMessage = "system message";
|
|
49
|
+
const args = {
|
|
50
|
+
activity: {
|
|
51
|
+
text: systemMessage,
|
|
52
|
+
channelData: {
|
|
53
|
+
tags: [_Constants.Constants.systemMessageTag]
|
|
54
|
+
},
|
|
55
|
+
from: {
|
|
56
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
61
|
+
expect(_TelemetryHelper.TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
62
|
+
expect((_results$props = results().props) === null || _results$props === void 0 ? void 0 : (_results$props$danger = _results$props.dangerouslySetInnerHTML) === null || _results$props$danger === void 0 ? void 0 : _results$props$danger.__html).toEqual(systemMessage);
|
|
63
|
+
});
|
|
64
|
+
it("createActivityMiddleware() should escape html texts to prevent XSS attacks", () => {
|
|
65
|
+
var _results$props2, _results$props2$dange;
|
|
66
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
67
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
68
|
+
const systemMessage = "<img src='' onerror=\"alert('XSS attack')\"/>";
|
|
69
|
+
const args = {
|
|
70
|
+
activity: {
|
|
71
|
+
text: systemMessage,
|
|
72
|
+
channelData: {
|
|
73
|
+
tags: [_Constants.Constants.systemMessageTag]
|
|
74
|
+
},
|
|
75
|
+
from: {
|
|
76
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
81
|
+
expect(_TelemetryHelper.TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
82
|
+
expect((_results$props2 = results().props) === null || _results$props2 === void 0 ? void 0 : (_results$props2$dange = _results$props2.dangerouslySetInnerHTML) === null || _results$props2$dange === void 0 ? void 0 : _results$props2$dange.__html).toEqual("<img src='' onerror="alert('XSS attack')"/>");
|
|
83
|
+
});
|
|
84
|
+
it("createActivityMiddleware() with QueuePosition tag should log QueuePosition message", () => {
|
|
85
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
86
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
87
|
+
const systemMessage = "system message";
|
|
88
|
+
const args = {
|
|
89
|
+
activity: {
|
|
90
|
+
text: systemMessage,
|
|
91
|
+
channelData: {
|
|
92
|
+
tags: [_Constants.Constants.systemMessageTag, _Constants.Constants.queuePositionMessageTag]
|
|
93
|
+
},
|
|
94
|
+
from: {
|
|
95
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
(0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
100
|
+
expect(_TelemetryHelper.TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(1);
|
|
101
|
+
});
|
|
102
|
+
it("createActivityMiddleware() with same clientmessageid with next activity should return nothing", () => {
|
|
103
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
104
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
105
|
+
const systemMessage = "system message";
|
|
106
|
+
const args = {
|
|
107
|
+
activity: {
|
|
108
|
+
text: systemMessage,
|
|
109
|
+
channelData: {
|
|
110
|
+
tags: [_Constants.Constants.systemMessageTag],
|
|
111
|
+
clientmessageid: "1234"
|
|
112
|
+
},
|
|
113
|
+
from: {
|
|
114
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
nextVisibleActivity: {
|
|
118
|
+
channelData: {
|
|
119
|
+
clientmessageid: "1234"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
124
|
+
expect(results()).toEqual(false);
|
|
125
|
+
});
|
|
126
|
+
it("createActivityMiddleware() with same messageid with next activity should return nothing", () => {
|
|
127
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
128
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
129
|
+
const systemMessage = "system message";
|
|
130
|
+
const args = {
|
|
131
|
+
activity: {
|
|
132
|
+
text: systemMessage,
|
|
133
|
+
channelData: {
|
|
134
|
+
tags: [_Constants.Constants.systemMessageTag]
|
|
135
|
+
},
|
|
136
|
+
from: {
|
|
137
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
138
|
+
},
|
|
139
|
+
messageid: "1234"
|
|
140
|
+
},
|
|
141
|
+
nextVisibleActivity: {
|
|
142
|
+
messageid: "1234"
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
146
|
+
expect(results()).toEqual(false);
|
|
147
|
+
});
|
|
148
|
+
it("createActivityMiddleware() should render normal user messages", () => {
|
|
149
|
+
var _results$props3, _results$props3$child, _results$props3$child2;
|
|
150
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
151
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
152
|
+
const userMessage = "Hello World";
|
|
153
|
+
const args = {
|
|
154
|
+
activity: {
|
|
155
|
+
text: userMessage,
|
|
156
|
+
channelId: "webchat",
|
|
157
|
+
channelData: {
|
|
158
|
+
isHtmlEncoded: false
|
|
159
|
+
},
|
|
160
|
+
from: {
|
|
161
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
162
|
+
},
|
|
163
|
+
type: _DirectLineActivityType.DirectLineActivityType.Message
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
167
|
+
expect((_results$props3 = results().props) === null || _results$props3 === void 0 ? void 0 : (_results$props3$child = _results$props3.children) === null || _results$props3$child === void 0 ? void 0 : (_results$props3$child2 = _results$props3$child.activity) === null || _results$props3$child2 === void 0 ? void 0 : _results$props3$child2.text).toEqual(userMessage);
|
|
168
|
+
});
|
|
169
|
+
it("createActivityMiddleware() should not render typing messages", () => {
|
|
170
|
+
var _results$activity;
|
|
171
|
+
spyOn(_TelemetryHelper.TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
172
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
173
|
+
const userMessage = "Hello World";
|
|
174
|
+
const args = {
|
|
175
|
+
activity: {
|
|
176
|
+
text: userMessage,
|
|
177
|
+
channelId: "webchat",
|
|
178
|
+
channelData: {
|
|
179
|
+
isHtmlEncoded: false
|
|
180
|
+
},
|
|
181
|
+
from: {
|
|
182
|
+
role: _DirectLineSenderRole.DirectLineSenderRole.User
|
|
183
|
+
},
|
|
184
|
+
type: _DirectLineActivityType.DirectLineActivityType.Typing
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const results = (0, _activityMiddleware.createActivityMiddleware)()()(next)(args);
|
|
188
|
+
expect((_results$activity = results().activity) === null || _results$activity === void 0 ? void 0 : _results$activity.text).toEqual(userMessage);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
@@ -158,6 +158,7 @@ export let TelemetryEvent;
|
|
|
158
158
|
TelemetryEvent["SetBotAuthProviderHideCard"] = "SetBotAuthProviderHideCard";
|
|
159
159
|
TelemetryEvent["SetBotAuthProviderDisplayCard"] = "SetBotAuthProviderDisplayCard";
|
|
160
160
|
TelemetryEvent["SetBotAuthProviderNotFound"] = "SetBotAuthProviderNotFound";
|
|
161
|
+
TelemetryEvent["BotAuthActivityUndefinedSignInId"] = "BotAuthActivityUndefinedSignInId";
|
|
161
162
|
TelemetryEvent["ThirdPartyCookiesBlocked"] = "ThirdPartyCookiesBlocked";
|
|
162
163
|
TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
|
|
163
164
|
TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
|
package/lib/esm/components/livechatwidget/common/ActivitySubscriber/BotAuthActivitySubscriber.js
CHANGED
|
@@ -79,7 +79,10 @@ export class BotAuthActivitySubscriber {
|
|
|
79
79
|
const signInUrl = attachment.content.buttons[0].value;
|
|
80
80
|
const signInId = extractSignInId(signInUrl);
|
|
81
81
|
if (!signInId) {
|
|
82
|
-
|
|
82
|
+
TelemetryHelper.logLoadingEvent(LogLevel.INFO, {
|
|
83
|
+
Event: TelemetryEvent.BotAuthActivityUndefinedSignInId
|
|
84
|
+
});
|
|
85
|
+
return activity;
|
|
83
86
|
}
|
|
84
87
|
if (this.signInCardSeen.has(signInId)) {
|
|
85
88
|
// Prevents duplicate auth
|
|
@@ -44,12 +44,15 @@ const handleSystemMessage = (next, args, card, systemMessageStyleProps) => {
|
|
|
44
44
|
return () => false;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
// eslint-disable-next-line react/display-name
|
|
47
|
+
// eslint-disable-next-line react/display-name
|
|
48
48
|
return () => /*#__PURE__*/React.createElement("div", {
|
|
49
49
|
key: card.activity.id,
|
|
50
50
|
style: systemMessageStyles,
|
|
51
|
-
"aria-hidden": "true"
|
|
52
|
-
|
|
51
|
+
"aria-hidden": "true",
|
|
52
|
+
dangerouslySetInnerHTML: {
|
|
53
|
+
__html: escapeHtml(card.activity.text)
|
|
54
|
+
}
|
|
55
|
+
});
|
|
53
56
|
};
|
|
54
57
|
|
|
55
58
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Constants } from "../../../../../common/Constants";
|
|
2
|
+
import { DirectLineActivityType } from "../../enums/DirectLineActivityType";
|
|
3
|
+
import { DirectLineSenderRole } from "../../enums/DirectLineSenderRole";
|
|
4
|
+
import { MessageTypes } from "../../enums/MessageType";
|
|
5
|
+
import { TelemetryHelper } from "../../../../../common/telemetry/TelemetryHelper";
|
|
6
|
+
import { createActivityMiddleware } from "./activityMiddleware";
|
|
7
|
+
describe("activityMiddleware test", () => {
|
|
8
|
+
it("createActivityMiddleware() with Channel role sender should returns nothing", () => {
|
|
9
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
10
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
11
|
+
const args = {
|
|
12
|
+
activity: {
|
|
13
|
+
channelData: {
|
|
14
|
+
type: MessageTypes.Thread
|
|
15
|
+
},
|
|
16
|
+
from: {
|
|
17
|
+
role: DirectLineSenderRole.Channel
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
22
|
+
expect(results()).toEqual(false);
|
|
23
|
+
expect(TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(1);
|
|
24
|
+
});
|
|
25
|
+
it("createActivityMiddleware() with Hidden tag should return nothing", () => {
|
|
26
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
27
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
28
|
+
const args = {
|
|
29
|
+
activity: {
|
|
30
|
+
channelData: {
|
|
31
|
+
tags: [Constants.hiddenTag]
|
|
32
|
+
},
|
|
33
|
+
from: {
|
|
34
|
+
role: DirectLineSenderRole.User
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
39
|
+
expect(results()).toEqual(false);
|
|
40
|
+
expect(TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
41
|
+
});
|
|
42
|
+
it("createActivityMiddleware() with System tag should return system message", () => {
|
|
43
|
+
var _results$props, _results$props$danger;
|
|
44
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
45
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
46
|
+
const systemMessage = "system message";
|
|
47
|
+
const args = {
|
|
48
|
+
activity: {
|
|
49
|
+
text: systemMessage,
|
|
50
|
+
channelData: {
|
|
51
|
+
tags: [Constants.systemMessageTag]
|
|
52
|
+
},
|
|
53
|
+
from: {
|
|
54
|
+
role: DirectLineSenderRole.User
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
59
|
+
expect(TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
60
|
+
expect((_results$props = results().props) === null || _results$props === void 0 ? void 0 : (_results$props$danger = _results$props.dangerouslySetInnerHTML) === null || _results$props$danger === void 0 ? void 0 : _results$props$danger.__html).toEqual(systemMessage);
|
|
61
|
+
});
|
|
62
|
+
it("createActivityMiddleware() should escape html texts to prevent XSS attacks", () => {
|
|
63
|
+
var _results$props2, _results$props2$dange;
|
|
64
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
65
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
66
|
+
const systemMessage = "<img src='' onerror=\"alert('XSS attack')\"/>";
|
|
67
|
+
const args = {
|
|
68
|
+
activity: {
|
|
69
|
+
text: systemMessage,
|
|
70
|
+
channelData: {
|
|
71
|
+
tags: [Constants.systemMessageTag]
|
|
72
|
+
},
|
|
73
|
+
from: {
|
|
74
|
+
role: DirectLineSenderRole.User
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
79
|
+
expect(TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(0);
|
|
80
|
+
expect((_results$props2 = results().props) === null || _results$props2 === void 0 ? void 0 : (_results$props2$dange = _results$props2.dangerouslySetInnerHTML) === null || _results$props2$dange === void 0 ? void 0 : _results$props2$dange.__html).toEqual("<img src='' onerror="alert('XSS attack')"/>");
|
|
81
|
+
});
|
|
82
|
+
it("createActivityMiddleware() with QueuePosition tag should log QueuePosition message", () => {
|
|
83
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
84
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
85
|
+
const systemMessage = "system message";
|
|
86
|
+
const args = {
|
|
87
|
+
activity: {
|
|
88
|
+
text: systemMessage,
|
|
89
|
+
channelData: {
|
|
90
|
+
tags: [Constants.systemMessageTag, Constants.queuePositionMessageTag]
|
|
91
|
+
},
|
|
92
|
+
from: {
|
|
93
|
+
role: DirectLineSenderRole.User
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
createActivityMiddleware()()(next)(args);
|
|
98
|
+
expect(TelemetryHelper.logActionEvent).toHaveBeenCalledTimes(1);
|
|
99
|
+
});
|
|
100
|
+
it("createActivityMiddleware() with same clientmessageid with next activity should return nothing", () => {
|
|
101
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
102
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
103
|
+
const systemMessage = "system message";
|
|
104
|
+
const args = {
|
|
105
|
+
activity: {
|
|
106
|
+
text: systemMessage,
|
|
107
|
+
channelData: {
|
|
108
|
+
tags: [Constants.systemMessageTag],
|
|
109
|
+
clientmessageid: "1234"
|
|
110
|
+
},
|
|
111
|
+
from: {
|
|
112
|
+
role: DirectLineSenderRole.User
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
nextVisibleActivity: {
|
|
116
|
+
channelData: {
|
|
117
|
+
clientmessageid: "1234"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
122
|
+
expect(results()).toEqual(false);
|
|
123
|
+
});
|
|
124
|
+
it("createActivityMiddleware() with same messageid with next activity should return nothing", () => {
|
|
125
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
126
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
127
|
+
const systemMessage = "system message";
|
|
128
|
+
const args = {
|
|
129
|
+
activity: {
|
|
130
|
+
text: systemMessage,
|
|
131
|
+
channelData: {
|
|
132
|
+
tags: [Constants.systemMessageTag]
|
|
133
|
+
},
|
|
134
|
+
from: {
|
|
135
|
+
role: DirectLineSenderRole.User
|
|
136
|
+
},
|
|
137
|
+
messageid: "1234"
|
|
138
|
+
},
|
|
139
|
+
nextVisibleActivity: {
|
|
140
|
+
messageid: "1234"
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
144
|
+
expect(results()).toEqual(false);
|
|
145
|
+
});
|
|
146
|
+
it("createActivityMiddleware() should render normal user messages", () => {
|
|
147
|
+
var _results$props3, _results$props3$child, _results$props3$child2;
|
|
148
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
149
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
150
|
+
const userMessage = "Hello World";
|
|
151
|
+
const args = {
|
|
152
|
+
activity: {
|
|
153
|
+
text: userMessage,
|
|
154
|
+
channelId: "webchat",
|
|
155
|
+
channelData: {
|
|
156
|
+
isHtmlEncoded: false
|
|
157
|
+
},
|
|
158
|
+
from: {
|
|
159
|
+
role: DirectLineSenderRole.User
|
|
160
|
+
},
|
|
161
|
+
type: DirectLineActivityType.Message
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
165
|
+
expect((_results$props3 = results().props) === null || _results$props3 === void 0 ? void 0 : (_results$props3$child = _results$props3.children) === null || _results$props3$child === void 0 ? void 0 : (_results$props3$child2 = _results$props3$child.activity) === null || _results$props3$child2 === void 0 ? void 0 : _results$props3$child2.text).toEqual(userMessage);
|
|
166
|
+
});
|
|
167
|
+
it("createActivityMiddleware() should not render typing messages", () => {
|
|
168
|
+
var _results$activity;
|
|
169
|
+
spyOn(TelemetryHelper, "logActionEvent").and.callFake(() => false);
|
|
170
|
+
const next = args => () => args; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
171
|
+
const userMessage = "Hello World";
|
|
172
|
+
const args = {
|
|
173
|
+
activity: {
|
|
174
|
+
text: userMessage,
|
|
175
|
+
channelId: "webchat",
|
|
176
|
+
channelData: {
|
|
177
|
+
isHtmlEncoded: false
|
|
178
|
+
},
|
|
179
|
+
from: {
|
|
180
|
+
role: DirectLineSenderRole.User
|
|
181
|
+
},
|
|
182
|
+
type: DirectLineActivityType.Typing
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const results = createActivityMiddleware()()(next)(args);
|
|
186
|
+
expect((_results$activity = results().activity) === null || _results$activity === void 0 ? void 0 : _results$activity.text).toEqual(userMessage);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
@@ -151,6 +151,7 @@ export declare enum TelemetryEvent {
|
|
|
151
151
|
SetBotAuthProviderHideCard = "SetBotAuthProviderHideCard",
|
|
152
152
|
SetBotAuthProviderDisplayCard = "SetBotAuthProviderDisplayCard",
|
|
153
153
|
SetBotAuthProviderNotFound = "SetBotAuthProviderNotFound",
|
|
154
|
+
BotAuthActivityUndefinedSignInId = "BotAuthActivityUndefinedSignInId",
|
|
154
155
|
ThirdPartyCookiesBlocked = "ThirdPartyCookiesBlocked",
|
|
155
156
|
ProcessingHTMLTextMiddlewareFailed = "ProcessingHTMLTextMiddlewareFailed",
|
|
156
157
|
ProcessingSanitizationMiddlewareFailed = "ProcessingSanitizationMiddlewareFailed",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|