@servicetitan/titan-chatbot-api 7.1.1 → 8.0.0
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/CHANGELOG.md +25 -0
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js +21 -47
- package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -1
- package/dist/api-client/base/chatbot-api-client.js +3 -4
- package/dist/api-client/base/chatbot-api-client.js.map +1 -1
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js +48 -15
- package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +1 -1
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js +23 -22
- package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +1 -1
- package/dist/api-client/help-center/chatbot-api-client.js +51 -52
- package/dist/api-client/help-center/chatbot-api-client.js.map +1 -1
- package/dist/api-client/help-center/converter-from-models.js +15 -12
- package/dist/api-client/help-center/converter-from-models.js.map +1 -1
- package/dist/api-client/help-center/converter-to-models.js +29 -26
- package/dist/api-client/help-center/converter-to-models.js.map +1 -1
- package/dist/api-client/help-center/index.d.ts +2 -1
- package/dist/api-client/help-center/index.d.ts.map +1 -1
- package/dist/api-client/help-center/index.js +1 -0
- package/dist/api-client/help-center/index.js.map +1 -1
- package/dist/api-client/help-center/native-client.js +1192 -2884
- package/dist/api-client/help-center/native-client.js.map +1 -1
- package/dist/api-client/index.d.ts +2 -1
- package/dist/api-client/index.d.ts.map +1 -1
- package/dist/api-client/index.js +14 -7
- package/dist/api-client/index.js.map +1 -1
- package/dist/api-client/models/__mocks__/models.mock.js +154 -124
- package/dist/api-client/models/__mocks__/models.mock.js.map +1 -1
- package/dist/api-client/models/index.d.ts +2 -1
- package/dist/api-client/models/index.d.ts.map +1 -1
- package/dist/api-client/models/index.js +8 -7
- package/dist/api-client/models/index.js.map +1 -1
- package/dist/api-client/titan-chat/__tests__/native-client.test.js +6 -6
- package/dist/api-client/titan-chat/__tests__/native-client.test.js.map +1 -1
- package/dist/api-client/titan-chat/chatbot-api-client.js +40 -35
- package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -1
- package/dist/api-client/titan-chat/index.d.ts +2 -1
- package/dist/api-client/titan-chat/index.d.ts.map +1 -1
- package/dist/api-client/titan-chat/index.js +1 -0
- package/dist/api-client/titan-chat/index.js.map +1 -1
- package/dist/api-client/titan-chat/native-client.d.ts +14 -14
- package/dist/api-client/titan-chat/native-client.d.ts.map +1 -1
- package/dist/api-client/titan-chat/native-client.js +359 -809
- package/dist/api-client/titan-chat/native-client.js.map +1 -1
- package/dist/api-client/utils/__tests__/model-utils.test.js +454 -191
- package/dist/api-client/utils/__tests__/model-utils.test.js.map +1 -1
- package/dist/api-client/utils/model-utils.d.ts.map +1 -1
- package/dist/api-client/utils/model-utils.js +28 -25
- package/dist/api-client/utils/model-utils.js.map +1 -1
- package/dist/hooks/use-customization-chatbot.js +2 -1
- package/dist/hooks/use-customization-chatbot.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/models/chatbot-customizations.js +2 -1
- package/dist/models/chatbot-customizations.js.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -1
- package/dist/models/index.js.map +1 -1
- package/dist/stores/__tests__/chatbot-ui-backend.store.test.js +267 -172
- package/dist/stores/__tests__/chatbot-ui-backend.store.test.js.map +1 -1
- package/dist/stores/__tests__/chatbot-ui.store.test.js +61 -64
- package/dist/stores/__tests__/chatbot-ui.store.test.js.map +1 -1
- package/dist/stores/__tests__/filter.store.test.js +243 -116
- package/dist/stores/__tests__/filter.store.test.js.map +1 -1
- package/dist/stores/__tests__/initialize.store.test.js +9 -8
- package/dist/stores/__tests__/initialize.store.test.js.map +1 -1
- package/dist/stores/__tests__/message-feedback-guardrail.store.test.js +8 -7
- package/dist/stores/__tests__/message-feedback-guardrail.store.test.js.map +1 -1
- package/dist/stores/__tests__/message-feedback.store.test.js +34 -27
- package/dist/stores/__tests__/message-feedback.store.test.js.map +1 -1
- package/dist/stores/__tests__/session-feedback.store.test.js +9 -8
- package/dist/stores/__tests__/session-feedback.store.test.js.map +1 -1
- package/dist/stores/chatbot-ui-backend.store.js +171 -240
- package/dist/stores/chatbot-ui-backend.store.js.map +1 -1
- package/dist/stores/chatbot-ui.store.js +73 -46
- package/dist/stores/chatbot-ui.store.js.map +1 -1
- package/dist/stores/filter.store.js +298 -378
- package/dist/stores/filter.store.js.map +1 -1
- package/dist/stores/index.d.ts +5 -3
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +3 -2
- package/dist/stores/index.js.map +1 -1
- package/dist/stores/initialize.store.js +55 -51
- package/dist/stores/initialize.store.js.map +1 -1
- package/dist/stores/message-feedback-base.store.js +2 -1
- package/dist/stores/message-feedback-base.store.js.map +1 -1
- package/dist/stores/message-feedback-guardrail.store.js +50 -47
- package/dist/stores/message-feedback-guardrail.store.js.map +1 -1
- package/dist/stores/message-feedback.store.js +84 -89
- package/dist/stores/message-feedback.store.js.map +1 -1
- package/dist/stores/session-feedback.store.js +46 -39
- package/dist/stores/session-feedback.store.js.map +1 -1
- package/dist/utils/__tests__/axios-utils.test.js +8 -7
- package/dist/utils/__tests__/axios-utils.test.js.map +1 -1
- package/dist/utils/axios-utils.js +9 -7
- package/dist/utils/axios-utils.js.map +1 -1
- package/dist/utils/test-utils.js +5 -5
- package/dist/utils/test-utils.js.map +1 -1
- package/package.json +3 -3
- package/src/api-client/help-center/index.ts +2 -1
- package/src/api-client/help-center/native-client.ts +4 -4
- package/src/api-client/index.ts +2 -6
- package/src/api-client/models/index.ts +15 -13
- package/src/api-client/titan-chat/index.ts +2 -1
- package/src/api-client/titan-chat/native-client.ts +17 -14
- package/src/api-client/utils/model-utils.ts +4 -8
- package/src/index.ts +1 -1
- package/src/models/index.ts +1 -1
- package/src/stores/index.ts +5 -12
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,207 +1,44 @@
|
|
|
1
|
-
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
2
15
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
16
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for
|
|
17
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
18
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
}
|
|
7
|
-
|
|
19
|
+
}
|
|
20
|
+
function _ts_metadata(k, v) {
|
|
8
21
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
}
|
|
10
|
-
import { Log } from '@servicetitan/log-service';
|
|
22
|
+
}
|
|
23
|
+
import { ILog, Log } from '@servicetitan/log-service';
|
|
11
24
|
import { inject, injectable, symbolToken } from '@servicetitan/react-ioc';
|
|
12
|
-
import { ChatError, ChatMessageState, ChatRunState, ChatUiEvent
|
|
25
|
+
import { ChatError, ChatMessageState, ChatRunState, ChatUiEvent } from '@servicetitan/titan-chat-ui-common';
|
|
13
26
|
import axios from 'axios';
|
|
14
27
|
import { makeObservable, runInAction } from 'mobx';
|
|
15
|
-
import { CHATBOT_API_CLIENT, Models, ModelsUtils } from '../api-client';
|
|
28
|
+
import { CHATBOT_API_CLIENT, IChatbotApiClient, Models, ModelsUtils } from '../api-client';
|
|
16
29
|
import { withTimeout } from '../utils/axios-utils';
|
|
17
|
-
import { CHATBOT_UI_STORE_TOKEN, ChatbotUiEvent } from './chatbot-ui.store';
|
|
30
|
+
import { CHATBOT_UI_STORE_TOKEN, ChatbotUiEvent, IChatbotUiStore } from './chatbot-ui.store';
|
|
18
31
|
import { InitializeStore } from './initialize.store';
|
|
19
32
|
const DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS = 31000; // 31 seconds
|
|
20
|
-
const isAbortedError = (error)
|
|
33
|
+
const isAbortedError = (error)=>axios.isCancel(error) || (error === null || error === void 0 ? void 0 : error.name) === 'AbortError';
|
|
21
34
|
export const CHATBOT_UI_BACKEND_STORE_TOKEN = symbolToken('CHATBOT_UI_BACKEND_STORE_TOKEN');
|
|
22
|
-
|
|
35
|
+
export class ChatbotUiBackendStore extends InitializeStore {
|
|
23
36
|
get logService() {
|
|
24
37
|
return this.log;
|
|
25
38
|
}
|
|
26
39
|
get customizations() {
|
|
27
40
|
return this.chatUiStore.customizations;
|
|
28
41
|
}
|
|
29
|
-
constructor() {
|
|
30
|
-
super();
|
|
31
|
-
Object.defineProperty(this, "session", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: void 0
|
|
36
|
-
});
|
|
37
|
-
Object.defineProperty(this, "abortController", {
|
|
38
|
-
enumerable: true,
|
|
39
|
-
configurable: true,
|
|
40
|
-
writable: true,
|
|
41
|
-
value: void 0
|
|
42
|
-
});
|
|
43
|
-
Object.defineProperty(this, "chatbotApiClient", {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
configurable: true,
|
|
46
|
-
writable: true,
|
|
47
|
-
value: void 0
|
|
48
|
-
});
|
|
49
|
-
Object.defineProperty(this, "chatUiStore", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
configurable: true,
|
|
52
|
-
writable: true,
|
|
53
|
-
value: void 0
|
|
54
|
-
});
|
|
55
|
-
Object.defineProperty(this, "log", {
|
|
56
|
-
enumerable: true,
|
|
57
|
-
configurable: true,
|
|
58
|
-
writable: true,
|
|
59
|
-
value: void 0
|
|
60
|
-
});
|
|
61
|
-
Object.defineProperty(this, "sessionPromise", {
|
|
62
|
-
enumerable: true,
|
|
63
|
-
configurable: true,
|
|
64
|
-
writable: true,
|
|
65
|
-
value: void 0
|
|
66
|
-
});
|
|
67
|
-
Object.defineProperty(this, "handleRun", {
|
|
68
|
-
enumerable: true,
|
|
69
|
-
configurable: true,
|
|
70
|
-
writable: true,
|
|
71
|
-
value: async (resolve) => {
|
|
72
|
-
await this.run();
|
|
73
|
-
resolve();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
Object.defineProperty(this, "handleDestroy", {
|
|
77
|
-
enumerable: true,
|
|
78
|
-
configurable: true,
|
|
79
|
-
writable: true,
|
|
80
|
-
value: async (resolve) => {
|
|
81
|
-
await this.destroy();
|
|
82
|
-
resolve();
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
Object.defineProperty(this, "handleRestart", {
|
|
86
|
-
enumerable: true,
|
|
87
|
-
configurable: true,
|
|
88
|
-
writable: true,
|
|
89
|
-
value: async (resolve) => {
|
|
90
|
-
await this.destroy();
|
|
91
|
-
this.deleteFromSessionStorage();
|
|
92
|
-
await this.run();
|
|
93
|
-
resolve();
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
Object.defineProperty(this, "handleMessageSend", {
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: async (resolve, _, messageModel, selections, timeoutMs) => {
|
|
101
|
-
await this.sendMessage(messageModel, selections, timeoutMs);
|
|
102
|
-
resolve();
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
Object.defineProperty(this, "handleMessageSendRetry", {
|
|
106
|
-
enumerable: true,
|
|
107
|
-
configurable: true,
|
|
108
|
-
writable: true,
|
|
109
|
-
value: async (resolve, _, messageModel) => {
|
|
110
|
-
var _a, _b;
|
|
111
|
-
if (messageModel.type !== 'message') {
|
|
112
|
-
resolve();
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const selections = (_a = messageModel.data) === null || _a === void 0 ? void 0 : _a.selections;
|
|
116
|
-
const timeoutMs = (_b = messageModel.data) === null || _b === void 0 ? void 0 : _b.timeoutMs;
|
|
117
|
-
await this.sendMessage(messageModel, selections, timeoutMs);
|
|
118
|
-
resolve();
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
Object.defineProperty(this, "handleSessionStart", {
|
|
122
|
-
enumerable: true,
|
|
123
|
-
configurable: true,
|
|
124
|
-
writable: true,
|
|
125
|
-
value: async (resolve, _, sessionData, forceRecreate) => {
|
|
126
|
-
const session = await this.startSession(sessionData, forceRecreate);
|
|
127
|
-
resolve({
|
|
128
|
-
session,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
Object.defineProperty(this, "handleSessionFeedback", {
|
|
133
|
-
enumerable: true,
|
|
134
|
-
configurable: true,
|
|
135
|
-
writable: true,
|
|
136
|
-
value: async (resolve, _, draft) => {
|
|
137
|
-
let feedbackState;
|
|
138
|
-
let feedbackResult = draft
|
|
139
|
-
? new Models.Feedback(draft)
|
|
140
|
-
: undefined;
|
|
141
|
-
try {
|
|
142
|
-
if (!draft) {
|
|
143
|
-
throw new ChatError('Session feedback is missing.', {
|
|
144
|
-
recoverStrategy: false,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
if (typeof draft.messageId !== 'undefined') {
|
|
148
|
-
throw new ChatError('Session feedback should not contain messageId.', {
|
|
149
|
-
recoverStrategy: false,
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
await this.startSession();
|
|
153
|
-
const feedback = new Models.Feedback({ ...draft, sessionId: this.session.id });
|
|
154
|
-
feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);
|
|
155
|
-
feedbackState = Models.ChatbotFeedbackState.Success;
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
this.setError('FailedToSendFeedback', 'Send session feedback', 'Failed to send feedback', error);
|
|
159
|
-
feedbackState = Models.ChatbotFeedbackState.Failure;
|
|
160
|
-
}
|
|
161
|
-
resolve({
|
|
162
|
-
state: feedbackState,
|
|
163
|
-
feedback: feedbackResult,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
Object.defineProperty(this, "handleMessageFeedback", {
|
|
168
|
-
enumerable: true,
|
|
169
|
-
configurable: true,
|
|
170
|
-
writable: true,
|
|
171
|
-
value: async (resolve, _, draft) => {
|
|
172
|
-
let feedbackState;
|
|
173
|
-
let feedbackResult = draft
|
|
174
|
-
? new Models.Feedback(draft)
|
|
175
|
-
: undefined;
|
|
176
|
-
try {
|
|
177
|
-
if (!draft) {
|
|
178
|
-
throw new ChatError('Message feedback is missing.', {
|
|
179
|
-
recoverStrategy: false,
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
if (!draft.messageId) {
|
|
183
|
-
throw new ChatError('Message feedback is missing messageId.', {
|
|
184
|
-
recoverStrategy: false,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
await this.startSession();
|
|
188
|
-
const feedback = new Models.Feedback({ ...draft, sessionId: this.session.id });
|
|
189
|
-
feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);
|
|
190
|
-
feedbackState = Models.ChatbotFeedbackState.Success;
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
this.setError('FailedToSendMessageFeedback', 'Send message feedback', 'Failed to send message feedback', error);
|
|
194
|
-
feedbackState = Models.ChatbotFeedbackState.Failure;
|
|
195
|
-
}
|
|
196
|
-
resolve({
|
|
197
|
-
state: feedbackState,
|
|
198
|
-
feedback: feedbackResult,
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
makeObservable(this);
|
|
203
|
-
this.initializeAbortController();
|
|
204
|
-
}
|
|
205
42
|
subscribe() {
|
|
206
43
|
this.unsubscribe();
|
|
207
44
|
this.chatUiStore.on(ChatUiEvent.eventRun, this.handleRun);
|
|
@@ -226,19 +63,16 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
226
63
|
async getSessionData() {
|
|
227
64
|
return Promise.resolve(undefined);
|
|
228
65
|
}
|
|
229
|
-
restoreChatSession() {
|
|
230
|
-
saveCurrentState() {
|
|
231
|
-
deleteFromSessionStorage() {
|
|
232
|
-
restartTimers() {
|
|
66
|
+
restoreChatSession() {}
|
|
67
|
+
saveCurrentState() {}
|
|
68
|
+
deleteFromSessionStorage() {}
|
|
69
|
+
restartTimers() {}
|
|
233
70
|
ensureWelcomeMessage() {
|
|
234
71
|
if (this.chatUiStore.messages.length) {
|
|
235
72
|
return;
|
|
236
73
|
}
|
|
237
|
-
this.withSaveState(()
|
|
238
|
-
this.chatUiStore.addMessageWelcome(`Hi there! I’m ${this.chatUiStore.agent.name}, an AI chatbot powered by Titan Intelligence. ` +
|
|
239
|
-
'I’m here to answer your questions about using ServiceTitan. ' +
|
|
240
|
-
'You can ask me things like "How to merge duplicate customers?". ' +
|
|
241
|
-
'Do you have a question for me?');
|
|
74
|
+
this.withSaveState(()=>{
|
|
75
|
+
this.chatUiStore.addMessageWelcome(`Hi there! I’m ${this.chatUiStore.agent.name}, an AI chatbot powered by Titan Intelligence. ` + 'I’m here to answer your questions about using ServiceTitan. ' + 'You can ask me things like "How to merge duplicate customers?". ' + 'Do you have a question for me?');
|
|
242
76
|
});
|
|
243
77
|
}
|
|
244
78
|
logError(code, message, error) {
|
|
@@ -249,16 +83,16 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
249
83
|
error,
|
|
250
84
|
message,
|
|
251
85
|
category: 'TitanChatbot',
|
|
252
|
-
code: `TitanChatbot_${code}
|
|
86
|
+
code: `TitanChatbot_${code}`
|
|
253
87
|
});
|
|
254
88
|
}
|
|
255
89
|
async initializeInternal() {
|
|
256
90
|
await super.initializeInternal();
|
|
257
91
|
const options = await this.chatbotApiClient.getOptions();
|
|
258
|
-
runInAction(()
|
|
259
|
-
var
|
|
92
|
+
runInAction(()=>{
|
|
93
|
+
var _this_customizations_filters, _this_customizations;
|
|
260
94
|
this.chatUiStore.filterStore.initFilters(options, {
|
|
261
|
-
isDefaultSelected: (
|
|
95
|
+
isDefaultSelected: (_this_customizations = this.customizations) === null || _this_customizations === void 0 ? void 0 : (_this_customizations_filters = _this_customizations.filters) === null || _this_customizations_filters === void 0 ? void 0 : _this_customizations_filters.isDefaultSelected
|
|
262
96
|
});
|
|
263
97
|
});
|
|
264
98
|
}
|
|
@@ -270,8 +104,7 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
270
104
|
this.ensureWelcomeMessage();
|
|
271
105
|
this.restartTimers();
|
|
272
106
|
this.chatUiStore.setStatus(ChatRunState.Started);
|
|
273
|
-
}
|
|
274
|
-
catch (error) {
|
|
107
|
+
} catch (error) {
|
|
275
108
|
this.setError('FailedToInitialize', 'Initialization Error', 'Unable to start the chatbot service. Please check your connection and refresh the page.', error);
|
|
276
109
|
}
|
|
277
110
|
}
|
|
@@ -290,45 +123,47 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
290
123
|
this.chatUiStore.addMessage(true, answer.answer, answer);
|
|
291
124
|
}
|
|
292
125
|
async sendMessage(messageModel, selections, timeoutMs) {
|
|
293
|
-
var _a, _b, _c;
|
|
294
126
|
const question = messageModel.message;
|
|
295
127
|
const perRequestController = new AbortController();
|
|
296
|
-
const forwardStoreAbort = ()
|
|
297
|
-
this.abortController.signal.addEventListener('abort', forwardStoreAbort, {
|
|
128
|
+
const forwardStoreAbort = ()=>perRequestController.abort(this.abortController.signal.reason);
|
|
129
|
+
this.abortController.signal.addEventListener('abort', forwardStoreAbort, {
|
|
130
|
+
once: true
|
|
131
|
+
});
|
|
298
132
|
try {
|
|
133
|
+
var _ref;
|
|
134
|
+
var _this_customizations_timeouts, _this_customizations;
|
|
299
135
|
await this.startSession();
|
|
300
136
|
this.chatUiStore.setAgentTyping(true);
|
|
301
137
|
const answer = await withTimeout(this.api('postMessage', new Models.UserMessage({
|
|
302
138
|
sessionId: this.session.id,
|
|
303
139
|
question,
|
|
304
140
|
experience: Models.Experience.MultiTurn,
|
|
305
|
-
selections
|
|
306
|
-
}), perRequestController.signal), (
|
|
307
|
-
this.withSaveState(()
|
|
141
|
+
selections
|
|
142
|
+
}), perRequestController.signal), (_ref = timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : (_this_customizations = this.customizations) === null || _this_customizations === void 0 ? void 0 : (_this_customizations_timeouts = _this_customizations.timeouts) === null || _this_customizations_timeouts === void 0 ? void 0 : _this_customizations_timeouts.chatbotRequestTimeoutMs) !== null && _ref !== void 0 ? _ref : DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS, perRequestController);
|
|
143
|
+
this.withSaveState(()=>{
|
|
308
144
|
// Set message state to Delivered and preserve selections and bot answer id to the user question (to have a link between question and answer)
|
|
309
145
|
this.chatUiStore.setMessageState(messageModel, ChatMessageState.Delivered, {
|
|
310
146
|
answerId: answer.id,
|
|
311
|
-
selections
|
|
147
|
+
selections
|
|
312
148
|
});
|
|
313
149
|
this.processBotAnswer(answer);
|
|
314
150
|
this.chatUiStore.resetError(ChatRunState.Started);
|
|
315
151
|
});
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
this.withSaveState(() => {
|
|
152
|
+
} catch (error) {
|
|
153
|
+
this.withSaveState(()=>{
|
|
319
154
|
this.chatUiStore.setMessageState(messageModel, ChatMessageState.Failed, {
|
|
320
155
|
selections,
|
|
321
|
-
...
|
|
156
|
+
...timeoutMs !== undefined ? {
|
|
157
|
+
timeoutMs
|
|
158
|
+
} : {}
|
|
322
159
|
});
|
|
323
160
|
});
|
|
324
161
|
if (error instanceof ChatError) {
|
|
325
162
|
this.setChatError('FailedToSendMessage', error);
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
163
|
+
} else {
|
|
328
164
|
this.setError('FailedToSendMessage', 'Send message', 'Failed to send message', error);
|
|
329
165
|
}
|
|
330
|
-
}
|
|
331
|
-
finally {
|
|
166
|
+
} finally{
|
|
332
167
|
this.abortController.signal.removeEventListener('abort', forwardStoreAbort);
|
|
333
168
|
this.chatUiStore.setAgentTyping(false);
|
|
334
169
|
}
|
|
@@ -345,23 +180,27 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
345
180
|
return this.session;
|
|
346
181
|
}
|
|
347
182
|
if (!this.sessionPromise) {
|
|
348
|
-
this.sessionPromise = (async ()
|
|
183
|
+
this.sessionPromise = (async ()=>{
|
|
349
184
|
let data = await this.getSessionData();
|
|
350
185
|
if (sessionData) {
|
|
351
|
-
data = {
|
|
186
|
+
data = {
|
|
187
|
+
...data,
|
|
188
|
+
...sessionData
|
|
189
|
+
};
|
|
352
190
|
}
|
|
353
|
-
return this.api('postSession', ModelsUtils.createNewSessionModel({
|
|
191
|
+
return this.api('postSession', ModelsUtils.createNewSessionModel({
|
|
192
|
+
data
|
|
193
|
+
}), this.abortController.signal);
|
|
354
194
|
})();
|
|
355
195
|
const session = await this.sessionPromise;
|
|
356
196
|
this.setSession(session);
|
|
357
|
-
this.withSaveState(()
|
|
197
|
+
this.withSaveState(()=>{
|
|
358
198
|
this.chatUiStore.resetError(ChatRunState.Started);
|
|
359
199
|
});
|
|
360
200
|
}
|
|
361
201
|
try {
|
|
362
202
|
await this.sessionPromise;
|
|
363
|
-
}
|
|
364
|
-
finally {
|
|
203
|
+
} finally{
|
|
365
204
|
this.sessionPromise = undefined;
|
|
366
205
|
}
|
|
367
206
|
return this.session;
|
|
@@ -371,8 +210,7 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
371
210
|
if (method) {
|
|
372
211
|
try {
|
|
373
212
|
return method.call(this.chatbotApiClient, ...args);
|
|
374
|
-
}
|
|
375
|
-
finally {
|
|
213
|
+
} finally{
|
|
376
214
|
this.restartTimers();
|
|
377
215
|
}
|
|
378
216
|
}
|
|
@@ -385,7 +223,7 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
385
223
|
}
|
|
386
224
|
setChatError(code, error) {
|
|
387
225
|
this.logError(code, error.message, error);
|
|
388
|
-
this.withSaveState(()
|
|
226
|
+
this.withSaveState(()=>{
|
|
389
227
|
this.chatUiStore.setChatError(error);
|
|
390
228
|
});
|
|
391
229
|
}
|
|
@@ -394,33 +232,126 @@ let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore
|
|
|
394
232
|
return;
|
|
395
233
|
}
|
|
396
234
|
this.logError(code, message, error);
|
|
397
|
-
this.withSaveState(()
|
|
398
|
-
var
|
|
399
|
-
this.chatUiStore.setError(message, (
|
|
235
|
+
this.withSaveState(()=>{
|
|
236
|
+
var _ref;
|
|
237
|
+
this.chatUiStore.setError(message, (_ref = error === null || error === void 0 ? void 0 : error.message) !== null && _ref !== void 0 ? _ref : error);
|
|
400
238
|
});
|
|
401
239
|
}
|
|
402
240
|
initializeAbortController() {
|
|
403
241
|
this.abortController = new AbortController();
|
|
404
|
-
this.abortController.signal.addEventListener('abort', ()
|
|
242
|
+
this.abortController.signal.addEventListener('abort', ()=>{
|
|
405
243
|
this.initializeAbortController();
|
|
406
244
|
});
|
|
407
245
|
}
|
|
408
|
-
|
|
409
|
-
|
|
246
|
+
constructor(){
|
|
247
|
+
super(), _define_property(this, "session", void 0), _define_property(this, "abortController", void 0), _define_property(this, "chatbotApiClient", void 0), _define_property(this, "chatUiStore", void 0), _define_property(this, "log", void 0), _define_property(this, "sessionPromise", void 0), _define_property(this, "handleRun", async (resolve)=>{
|
|
248
|
+
await this.run();
|
|
249
|
+
resolve();
|
|
250
|
+
}), _define_property(this, "handleDestroy", async (resolve)=>{
|
|
251
|
+
await this.destroy();
|
|
252
|
+
resolve();
|
|
253
|
+
}), _define_property(this, "handleRestart", async (resolve)=>{
|
|
254
|
+
await this.destroy();
|
|
255
|
+
this.deleteFromSessionStorage();
|
|
256
|
+
await this.run();
|
|
257
|
+
resolve();
|
|
258
|
+
}), _define_property(this, "handleMessageSend", async (resolve, _, messageModel, selections, timeoutMs)=>{
|
|
259
|
+
await this.sendMessage(messageModel, selections, timeoutMs);
|
|
260
|
+
resolve();
|
|
261
|
+
}), _define_property(this, "handleMessageSendRetry", async (resolve, _, messageModel)=>{
|
|
262
|
+
var _messageModel_data, _messageModel_data1;
|
|
263
|
+
if (messageModel.type !== 'message') {
|
|
264
|
+
resolve();
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
const selections = (_messageModel_data = messageModel.data) === null || _messageModel_data === void 0 ? void 0 : _messageModel_data.selections;
|
|
268
|
+
const timeoutMs = (_messageModel_data1 = messageModel.data) === null || _messageModel_data1 === void 0 ? void 0 : _messageModel_data1.timeoutMs;
|
|
269
|
+
await this.sendMessage(messageModel, selections, timeoutMs);
|
|
270
|
+
resolve();
|
|
271
|
+
}), _define_property(this, "handleSessionStart", async (resolve, _, sessionData, forceRecreate)=>{
|
|
272
|
+
const session = await this.startSession(sessionData, forceRecreate);
|
|
273
|
+
resolve({
|
|
274
|
+
session
|
|
275
|
+
});
|
|
276
|
+
}), _define_property(this, "handleSessionFeedback", async (resolve, _, draft)=>{
|
|
277
|
+
let feedbackState;
|
|
278
|
+
let feedbackResult = draft ? new Models.Feedback(draft) : undefined;
|
|
279
|
+
try {
|
|
280
|
+
if (!draft) {
|
|
281
|
+
throw new ChatError('Session feedback is missing.', {
|
|
282
|
+
recoverStrategy: false
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
if (typeof draft.messageId !== 'undefined') {
|
|
286
|
+
throw new ChatError('Session feedback should not contain messageId.', {
|
|
287
|
+
recoverStrategy: false
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
await this.startSession();
|
|
291
|
+
const feedback = new Models.Feedback({
|
|
292
|
+
...draft,
|
|
293
|
+
sessionId: this.session.id
|
|
294
|
+
});
|
|
295
|
+
feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);
|
|
296
|
+
feedbackState = Models.ChatbotFeedbackState.Success;
|
|
297
|
+
} catch (error) {
|
|
298
|
+
this.setError('FailedToSendFeedback', 'Send session feedback', 'Failed to send feedback', error);
|
|
299
|
+
feedbackState = Models.ChatbotFeedbackState.Failure;
|
|
300
|
+
}
|
|
301
|
+
resolve({
|
|
302
|
+
state: feedbackState,
|
|
303
|
+
feedback: feedbackResult
|
|
304
|
+
});
|
|
305
|
+
}), _define_property(this, "handleMessageFeedback", async (resolve, _, draft)=>{
|
|
306
|
+
let feedbackState;
|
|
307
|
+
let feedbackResult = draft ? new Models.Feedback(draft) : undefined;
|
|
308
|
+
try {
|
|
309
|
+
if (!draft) {
|
|
310
|
+
throw new ChatError('Message feedback is missing.', {
|
|
311
|
+
recoverStrategy: false
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
if (!draft.messageId) {
|
|
315
|
+
throw new ChatError('Message feedback is missing messageId.', {
|
|
316
|
+
recoverStrategy: false
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
await this.startSession();
|
|
320
|
+
const feedback = new Models.Feedback({
|
|
321
|
+
...draft,
|
|
322
|
+
sessionId: this.session.id
|
|
323
|
+
});
|
|
324
|
+
feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);
|
|
325
|
+
feedbackState = Models.ChatbotFeedbackState.Success;
|
|
326
|
+
} catch (error) {
|
|
327
|
+
this.setError('FailedToSendMessageFeedback', 'Send message feedback', 'Failed to send message feedback', error);
|
|
328
|
+
feedbackState = Models.ChatbotFeedbackState.Failure;
|
|
329
|
+
}
|
|
330
|
+
resolve({
|
|
331
|
+
state: feedbackState,
|
|
332
|
+
feedback: feedbackResult
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
makeObservable(this);
|
|
336
|
+
this.initializeAbortController();
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
_ts_decorate([
|
|
410
340
|
inject(CHATBOT_API_CLIENT),
|
|
411
|
-
|
|
341
|
+
_ts_metadata("design:type", typeof IChatbotApiClient === "undefined" ? Object : IChatbotApiClient)
|
|
412
342
|
], ChatbotUiBackendStore.prototype, "chatbotApiClient", void 0);
|
|
413
|
-
|
|
343
|
+
_ts_decorate([
|
|
414
344
|
inject(CHATBOT_UI_STORE_TOKEN),
|
|
415
|
-
|
|
345
|
+
_ts_metadata("design:type", typeof IChatbotUiStore === "undefined" ? Object : IChatbotUiStore)
|
|
416
346
|
], ChatbotUiBackendStore.prototype, "chatUiStore", void 0);
|
|
417
|
-
|
|
347
|
+
_ts_decorate([
|
|
418
348
|
inject(Log),
|
|
419
|
-
|
|
349
|
+
_ts_metadata("design:type", typeof ILog === "undefined" ? Object : ILog)
|
|
420
350
|
], ChatbotUiBackendStore.prototype, "log", void 0);
|
|
421
|
-
ChatbotUiBackendStore =
|
|
351
|
+
ChatbotUiBackendStore = _ts_decorate([
|
|
422
352
|
injectable(),
|
|
423
|
-
|
|
353
|
+
_ts_metadata("design:type", Function),
|
|
354
|
+
_ts_metadata("design:paramtypes", [])
|
|
424
355
|
], ChatbotUiBackendStore);
|
|
425
|
-
|
|
356
|
+
|
|
426
357
|
//# sourceMappingURL=chatbot-ui-backend.store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatbot-ui-backend.store.js","sourceRoot":"","sources":["../../src/stores/chatbot-ui-backend.store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/stores/chatbot-ui-backend.store.ts"],"sourcesContent":["import { ILog, Log } from '@servicetitan/log-service';\nimport { inject, injectable, symbolToken } from '@servicetitan/react-ioc';\nimport {\n ChatError,\n ChatMessageModelBase,\n ChatMessageModelText,\n ChatMessageState,\n ChatRunState,\n ChatUiEvent,\n ChatUiEventListener,\n IChatUiBackendStore,\n} from '@servicetitan/titan-chat-ui-common';\nimport axios from 'axios';\nimport { makeObservable, runInAction } from 'mobx';\nimport { CHATBOT_API_CLIENT, IChatbotApiClient, Models, ModelsUtils } from '../api-client';\nimport { withTimeout } from '../utils/axios-utils';\nimport { CHATBOT_UI_STORE_TOKEN, ChatbotUiEvent, IChatbotUiStore } from './chatbot-ui.store';\nimport { InitializeStore } from './initialize.store';\n\nconst DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS = 31000; // 31 seconds\n\nconst isAbortedError = (error: unknown): boolean =>\n axios.isCancel(error) || (error as { name?: string } | null)?.name === 'AbortError';\n\nexport const CHATBOT_UI_BACKEND_STORE_TOKEN = symbolToken<IChatbotUiBackendStore>(\n 'CHATBOT_UI_BACKEND_STORE_TOKEN'\n);\n\nexport interface IChatbotUiBackendStore extends IChatUiBackendStore {\n session?: Models.ISession;\n initialize: () => void;\n saveCurrentState: () => void;\n deleteFromSessionStorage: () => void;\n restoreChatSession: () => void;\n getSessionData: () => Promise<Models.ISession['data'] | undefined>;\n restartTimers: () => void;\n}\n\n@injectable()\nexport class ChatbotUiBackendStore extends InitializeStore implements IChatbotUiBackendStore {\n session?: Models.ISession;\n abortController!: AbortController;\n @inject(CHATBOT_API_CLIENT) protected readonly chatbotApiClient!: IChatbotApiClient;\n @inject(CHATBOT_UI_STORE_TOKEN) protected readonly chatUiStore!: IChatbotUiStore;\n\n @inject(Log) private log!: ILog;\n private sessionPromise?: Promise<Models.ISession>;\n\n protected get logService(): ILog {\n return this.log;\n }\n\n protected get customizations() {\n return this.chatUiStore.customizations;\n }\n\n constructor() {\n super();\n makeObservable(this);\n this.initializeAbortController();\n }\n\n subscribe(): void {\n this.unsubscribe();\n this.chatUiStore.on(ChatUiEvent.eventRun, this.handleRun);\n this.chatUiStore.on(ChatUiEvent.eventDestroy, this.handleDestroy);\n this.chatUiStore.on(ChatUiEvent.eventRestart, this.handleRestart);\n this.chatUiStore.on(ChatUiEvent.eventMessageSend, this.handleMessageSend);\n this.chatUiStore.on(ChatUiEvent.eventMessageSendRetry, this.handleMessageSendRetry);\n this.chatUiStore.on(ChatbotUiEvent.eventChatbotSessionStart, this.handleSessionStart);\n this.chatUiStore.on(ChatbotUiEvent.eventChatbotSessionFeedback, this.handleSessionFeedback);\n this.chatUiStore.on(ChatbotUiEvent.eventChatbotMessageFeedback, this.handleMessageFeedback);\n }\n unsubscribe(): void {\n this.chatUiStore.off(ChatUiEvent.eventRun, this.handleRun);\n this.chatUiStore.off(ChatUiEvent.eventDestroy, this.handleDestroy);\n this.chatUiStore.off(ChatUiEvent.eventRestart, this.handleRestart);\n this.chatUiStore.off(ChatUiEvent.eventMessageSend, this.handleMessageSend);\n this.chatUiStore.off(ChatUiEvent.eventMessageSendRetry, this.handleMessageSendRetry);\n this.chatUiStore.off(ChatbotUiEvent.eventChatbotSessionStart, this.handleSessionStart);\n this.chatUiStore.off(\n ChatbotUiEvent.eventChatbotSessionFeedback,\n this.handleSessionFeedback\n );\n this.chatUiStore.off(\n ChatbotUiEvent.eventChatbotMessageFeedback,\n this.handleMessageFeedback\n );\n }\n\n handleRun: ChatUiEventListener = async resolve => {\n await this.run();\n resolve();\n };\n\n handleDestroy: ChatUiEventListener = async resolve => {\n await this.destroy();\n resolve();\n };\n\n handleRestart: ChatUiEventListener = async resolve => {\n await this.destroy();\n this.deleteFromSessionStorage();\n await this.run();\n resolve();\n };\n\n handleMessageSend: ChatUiEventListener = async (\n resolve,\n _,\n messageModel: ChatMessageModelText,\n selections: Models.Selections | undefined,\n timeoutMs?: number\n ) => {\n await this.sendMessage(messageModel, selections, timeoutMs);\n resolve();\n };\n\n handleMessageSendRetry: ChatUiEventListener = async (\n resolve,\n _,\n messageModel: ChatMessageModelBase\n ) => {\n if (messageModel.type !== 'message') {\n resolve();\n return;\n }\n const selections = messageModel.data?.selections as Models.Selections | undefined;\n const timeoutMs = messageModel.data?.timeoutMs as number | undefined;\n await this.sendMessage(messageModel as ChatMessageModelText, selections, timeoutMs);\n resolve();\n };\n\n handleSessionStart: ChatUiEventListener<{\n session?: Models.ISession;\n }> = async (resolve, _, sessionData?: Models.ISession['data'], forceRecreate?: boolean) => {\n const session = await this.startSession(sessionData, forceRecreate);\n resolve({\n session,\n });\n };\n\n handleSessionFeedback: ChatUiEventListener<{\n state: Models.ChatbotFeedbackState;\n feedback?: Models.Feedback;\n }> = async (resolve, _, draft?: Models.IFeedback) => {\n let feedbackState: Models.ChatbotFeedbackState;\n let feedbackResult: Models.Feedback | undefined = draft\n ? new Models.Feedback(draft)\n : undefined;\n try {\n if (!draft) {\n throw new ChatError('Session feedback is missing.', {\n recoverStrategy: false,\n });\n }\n if (typeof draft.messageId !== 'undefined') {\n throw new ChatError('Session feedback should not contain messageId.', {\n recoverStrategy: false,\n });\n }\n await this.startSession();\n const feedback = new Models.Feedback({ ...draft, sessionId: this.session!.id! });\n feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);\n feedbackState = Models.ChatbotFeedbackState.Success;\n } catch (error: unknown) {\n this.setError(\n 'FailedToSendFeedback',\n 'Send session feedback',\n 'Failed to send feedback',\n error\n );\n feedbackState = Models.ChatbotFeedbackState.Failure;\n }\n resolve({\n state: feedbackState,\n feedback: feedbackResult,\n });\n };\n\n handleMessageFeedback: ChatUiEventListener<{\n state: Models.ChatbotFeedbackState;\n feedback?: Models.Feedback;\n }> = async (resolve, _, draft?: Models.IFeedback) => {\n let feedbackState: Models.ChatbotFeedbackState;\n let feedbackResult: Models.Feedback | undefined = draft\n ? new Models.Feedback(draft)\n : undefined;\n try {\n if (!draft) {\n throw new ChatError('Message feedback is missing.', {\n recoverStrategy: false,\n });\n }\n if (!draft.messageId) {\n throw new ChatError('Message feedback is missing messageId.', {\n recoverStrategy: false,\n });\n }\n await this.startSession();\n const feedback = new Models.Feedback({ ...draft, sessionId: this.session!.id! });\n feedbackResult = await this.api('postFeedback', feedback, this.abortController.signal);\n feedbackState = Models.ChatbotFeedbackState.Success;\n } catch (error: unknown) {\n this.setError(\n 'FailedToSendMessageFeedback',\n 'Send message feedback',\n 'Failed to send message feedback',\n error\n );\n feedbackState = Models.ChatbotFeedbackState.Failure;\n }\n resolve({\n state: feedbackState,\n feedback: feedbackResult,\n });\n };\n\n async getSessionData(): Promise<Models.ISession['data'] | undefined> {\n return Promise.resolve(undefined);\n }\n\n restoreChatSession() {}\n\n saveCurrentState() {}\n\n deleteFromSessionStorage() {}\n\n restartTimers() {}\n\n protected ensureWelcomeMessage() {\n if (this.chatUiStore.messages.length) {\n return;\n }\n this.withSaveState(() => {\n this.chatUiStore.addMessageWelcome(\n `Hi there! I’m ${this.chatUiStore.agent.name}, an AI chatbot powered by Titan Intelligence. ` +\n 'I’m here to answer your questions about using ServiceTitan. ' +\n 'You can ask me things like \"How to merge duplicate customers?\". ' +\n 'Do you have a question for me?'\n );\n });\n }\n\n protected logError(code: string, message: string, error: any) {\n if (isAbortedError(error)) {\n return;\n }\n this.logService.error({\n error,\n message,\n category: 'TitanChatbot',\n code: `TitanChatbot_${code}`,\n });\n }\n\n protected override async initializeInternal() {\n await super.initializeInternal();\n const options = await this.chatbotApiClient.getOptions();\n runInAction(() => {\n this.chatUiStore.filterStore.initFilters(options, {\n isDefaultSelected: this.customizations?.filters?.isDefaultSelected,\n });\n });\n }\n\n protected async run() {\n this.chatUiStore.setStatus(ChatRunState.Initializing);\n try {\n await this.initialize();\n this.restoreChatSession();\n this.ensureWelcomeMessage();\n this.restartTimers();\n this.chatUiStore.setStatus(ChatRunState.Started);\n } catch (error: unknown) {\n this.setError(\n 'FailedToInitialize',\n 'Initialization Error',\n 'Unable to start the chatbot service. Please check your connection and refresh the page.',\n error\n );\n }\n }\n\n protected reset() {\n this.setSession(undefined);\n }\n\n protected async destroy() {\n if (this.session) {\n const session = await this.api('deleteSession', this.session);\n this.setSession(session);\n }\n this.reset();\n this.chatUiStore.reset();\n }\n\n protected processBotAnswer(answer: Models.IBotMessage) {\n this.chatUiStore.addMessage(true, answer.answer, answer);\n }\n\n protected async sendMessage(\n messageModel: ChatMessageModelText,\n selections?: Models.Selections,\n timeoutMs?: number\n ) {\n const question = messageModel.message;\n const perRequestController = new AbortController();\n const forwardStoreAbort = () =>\n perRequestController.abort(this.abortController.signal.reason);\n this.abortController.signal.addEventListener('abort', forwardStoreAbort, { once: true });\n try {\n await this.startSession();\n this.chatUiStore.setAgentTyping(true);\n const answer = await withTimeout(\n this.api(\n 'postMessage',\n new Models.UserMessage({\n sessionId: this.session!.id!,\n question,\n experience: Models.Experience.MultiTurn,\n selections,\n }),\n perRequestController.signal\n ),\n timeoutMs ??\n this.customizations?.timeouts?.chatbotRequestTimeoutMs ??\n DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS,\n perRequestController\n );\n this.withSaveState(() => {\n // Set message state to Delivered and preserve selections and bot answer id to the user question (to have a link between question and answer)\n this.chatUiStore.setMessageState(messageModel, ChatMessageState.Delivered, {\n answerId: answer.id,\n selections,\n });\n this.processBotAnswer(answer);\n this.chatUiStore.resetError(ChatRunState.Started);\n });\n } catch (error: unknown) {\n this.withSaveState(() => {\n this.chatUiStore.setMessageState(messageModel, ChatMessageState.Failed, {\n selections,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n });\n });\n if (error instanceof ChatError) {\n this.setChatError('FailedToSendMessage', error);\n } else {\n this.setError(\n 'FailedToSendMessage',\n 'Send message',\n 'Failed to send message',\n error\n );\n }\n } finally {\n this.abortController.signal.removeEventListener('abort', forwardStoreAbort);\n this.chatUiStore.setAgentTyping(false);\n }\n }\n\n protected setSession(session?: Models.ISession) {\n this.session = session;\n }\n\n protected async startSession(sessionData?: Models.ISession['data'], forceRecreate = false) {\n if (forceRecreate) {\n this.reset();\n this.sessionPromise = undefined;\n }\n if (this.session) {\n return this.session;\n }\n if (!this.sessionPromise) {\n this.sessionPromise = (async () => {\n let data = await this.getSessionData();\n if (sessionData) {\n data = { ...data, ...sessionData };\n }\n return this.api(\n 'postSession',\n ModelsUtils.createNewSessionModel({ data }),\n this.abortController.signal\n );\n })();\n const session = await this.sessionPromise;\n this.setSession(session);\n this.withSaveState(() => {\n this.chatUiStore.resetError(ChatRunState.Started);\n });\n }\n try {\n await this.sessionPromise;\n } finally {\n this.sessionPromise = undefined;\n }\n return this.session;\n }\n\n protected async api<\n K extends keyof IChatbotApiClient,\n Args extends Parameters<IChatbotApiClient[K]>,\n Result extends ReturnType<IChatbotApiClient[K]>,\n >(methodName: K, ...args: Args): Promise<Awaited<Result>> {\n const method = this.chatbotApiClient[methodName];\n if (method) {\n try {\n return (method as (...args: Args) => Result).call(\n this.chatbotApiClient,\n ...args\n ) as Promise<Awaited<Result>>;\n } finally {\n this.restartTimers();\n }\n }\n throw new Error(`Method '${methodName}' not found in the API.`);\n }\n\n protected withSaveState<T>(action: () => T): T {\n const result = action();\n this.saveCurrentState();\n return result;\n }\n\n protected setChatError(code: string, error: ChatError) {\n this.logError(code, error.message, error);\n this.withSaveState(() => {\n this.chatUiStore.setChatError(error);\n });\n }\n\n protected setError(code: string, title: string, message: string, error: any) {\n if (isAbortedError(error)) {\n return;\n }\n this.logError(code, message, error);\n this.withSaveState(() => {\n this.chatUiStore.setError(message, error?.message ?? error);\n });\n }\n\n protected initializeAbortController(): void {\n this.abortController = new AbortController();\n this.abortController.signal.addEventListener('abort', () => {\n this.initializeAbortController();\n });\n }\n}\n"],"names":["ILog","Log","inject","injectable","symbolToken","ChatError","ChatMessageState","ChatRunState","ChatUiEvent","axios","makeObservable","runInAction","CHATBOT_API_CLIENT","IChatbotApiClient","Models","ModelsUtils","withTimeout","CHATBOT_UI_STORE_TOKEN","ChatbotUiEvent","IChatbotUiStore","InitializeStore","DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS","isAbortedError","error","isCancel","name","CHATBOT_UI_BACKEND_STORE_TOKEN","ChatbotUiBackendStore","logService","log","customizations","chatUiStore","subscribe","unsubscribe","on","eventRun","handleRun","eventDestroy","handleDestroy","eventRestart","handleRestart","eventMessageSend","handleMessageSend","eventMessageSendRetry","handleMessageSendRetry","eventChatbotSessionStart","handleSessionStart","eventChatbotSessionFeedback","handleSessionFeedback","eventChatbotMessageFeedback","handleMessageFeedback","off","getSessionData","Promise","resolve","undefined","restoreChatSession","saveCurrentState","deleteFromSessionStorage","restartTimers","ensureWelcomeMessage","messages","length","withSaveState","addMessageWelcome","agent","logError","code","message","category","initializeInternal","options","chatbotApiClient","getOptions","filterStore","initFilters","isDefaultSelected","filters","run","setStatus","Initializing","initialize","Started","setError","reset","setSession","destroy","session","api","processBotAnswer","answer","addMessage","sendMessage","messageModel","selections","timeoutMs","question","perRequestController","AbortController","forwardStoreAbort","abort","abortController","signal","reason","addEventListener","once","startSession","setAgentTyping","UserMessage","sessionId","id","experience","Experience","MultiTurn","timeouts","chatbotRequestTimeoutMs","setMessageState","Delivered","answerId","resetError","Failed","setChatError","removeEventListener","sessionData","forceRecreate","sessionPromise","data","createNewSessionModel","methodName","args","method","call","Error","action","result","title","initializeAbortController","_","type","draft","feedbackState","feedbackResult","Feedback","recoverStrategy","messageId","feedback","ChatbotFeedbackState","Success","Failure","state"],"mappings":"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"}
|