@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.
Files changed (112) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/api-client/__mocks__/chatbot-api-client.mock.js +21 -47
  3. package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -1
  4. package/dist/api-client/base/chatbot-api-client.js +3 -4
  5. package/dist/api-client/base/chatbot-api-client.js.map +1 -1
  6. package/dist/api-client/help-center/__tests__/converter-from-models.test.js +48 -15
  7. package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +1 -1
  8. package/dist/api-client/help-center/__tests__/converter-to-models.test.js +23 -22
  9. package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +1 -1
  10. package/dist/api-client/help-center/chatbot-api-client.js +51 -52
  11. package/dist/api-client/help-center/chatbot-api-client.js.map +1 -1
  12. package/dist/api-client/help-center/converter-from-models.js +15 -12
  13. package/dist/api-client/help-center/converter-from-models.js.map +1 -1
  14. package/dist/api-client/help-center/converter-to-models.js +29 -26
  15. package/dist/api-client/help-center/converter-to-models.js.map +1 -1
  16. package/dist/api-client/help-center/index.d.ts +2 -1
  17. package/dist/api-client/help-center/index.d.ts.map +1 -1
  18. package/dist/api-client/help-center/index.js +1 -0
  19. package/dist/api-client/help-center/index.js.map +1 -1
  20. package/dist/api-client/help-center/native-client.js +1192 -2884
  21. package/dist/api-client/help-center/native-client.js.map +1 -1
  22. package/dist/api-client/index.d.ts +2 -1
  23. package/dist/api-client/index.d.ts.map +1 -1
  24. package/dist/api-client/index.js +14 -7
  25. package/dist/api-client/index.js.map +1 -1
  26. package/dist/api-client/models/__mocks__/models.mock.js +154 -124
  27. package/dist/api-client/models/__mocks__/models.mock.js.map +1 -1
  28. package/dist/api-client/models/index.d.ts +2 -1
  29. package/dist/api-client/models/index.d.ts.map +1 -1
  30. package/dist/api-client/models/index.js +8 -7
  31. package/dist/api-client/models/index.js.map +1 -1
  32. package/dist/api-client/titan-chat/__tests__/native-client.test.js +6 -6
  33. package/dist/api-client/titan-chat/__tests__/native-client.test.js.map +1 -1
  34. package/dist/api-client/titan-chat/chatbot-api-client.js +40 -35
  35. package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -1
  36. package/dist/api-client/titan-chat/index.d.ts +2 -1
  37. package/dist/api-client/titan-chat/index.d.ts.map +1 -1
  38. package/dist/api-client/titan-chat/index.js +1 -0
  39. package/dist/api-client/titan-chat/index.js.map +1 -1
  40. package/dist/api-client/titan-chat/native-client.d.ts +14 -14
  41. package/dist/api-client/titan-chat/native-client.d.ts.map +1 -1
  42. package/dist/api-client/titan-chat/native-client.js +359 -809
  43. package/dist/api-client/titan-chat/native-client.js.map +1 -1
  44. package/dist/api-client/utils/__tests__/model-utils.test.js +454 -191
  45. package/dist/api-client/utils/__tests__/model-utils.test.js.map +1 -1
  46. package/dist/api-client/utils/model-utils.d.ts.map +1 -1
  47. package/dist/api-client/utils/model-utils.js +28 -25
  48. package/dist/api-client/utils/model-utils.js.map +1 -1
  49. package/dist/hooks/use-customization-chatbot.js +2 -1
  50. package/dist/hooks/use-customization-chatbot.js.map +1 -1
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +6 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/models/chatbot-customizations.js +2 -1
  56. package/dist/models/chatbot-customizations.js.map +1 -1
  57. package/dist/models/index.d.ts +1 -1
  58. package/dist/models/index.d.ts.map +1 -1
  59. package/dist/models/index.js +2 -1
  60. package/dist/models/index.js.map +1 -1
  61. package/dist/stores/__tests__/chatbot-ui-backend.store.test.js +267 -172
  62. package/dist/stores/__tests__/chatbot-ui-backend.store.test.js.map +1 -1
  63. package/dist/stores/__tests__/chatbot-ui.store.test.js +61 -64
  64. package/dist/stores/__tests__/chatbot-ui.store.test.js.map +1 -1
  65. package/dist/stores/__tests__/filter.store.test.js +243 -116
  66. package/dist/stores/__tests__/filter.store.test.js.map +1 -1
  67. package/dist/stores/__tests__/initialize.store.test.js +9 -8
  68. package/dist/stores/__tests__/initialize.store.test.js.map +1 -1
  69. package/dist/stores/__tests__/message-feedback-guardrail.store.test.js +8 -7
  70. package/dist/stores/__tests__/message-feedback-guardrail.store.test.js.map +1 -1
  71. package/dist/stores/__tests__/message-feedback.store.test.js +34 -27
  72. package/dist/stores/__tests__/message-feedback.store.test.js.map +1 -1
  73. package/dist/stores/__tests__/session-feedback.store.test.js +9 -8
  74. package/dist/stores/__tests__/session-feedback.store.test.js.map +1 -1
  75. package/dist/stores/chatbot-ui-backend.store.js +171 -240
  76. package/dist/stores/chatbot-ui-backend.store.js.map +1 -1
  77. package/dist/stores/chatbot-ui.store.js +73 -46
  78. package/dist/stores/chatbot-ui.store.js.map +1 -1
  79. package/dist/stores/filter.store.js +298 -378
  80. package/dist/stores/filter.store.js.map +1 -1
  81. package/dist/stores/index.d.ts +5 -3
  82. package/dist/stores/index.d.ts.map +1 -1
  83. package/dist/stores/index.js +3 -2
  84. package/dist/stores/index.js.map +1 -1
  85. package/dist/stores/initialize.store.js +55 -51
  86. package/dist/stores/initialize.store.js.map +1 -1
  87. package/dist/stores/message-feedback-base.store.js +2 -1
  88. package/dist/stores/message-feedback-base.store.js.map +1 -1
  89. package/dist/stores/message-feedback-guardrail.store.js +50 -47
  90. package/dist/stores/message-feedback-guardrail.store.js.map +1 -1
  91. package/dist/stores/message-feedback.store.js +84 -89
  92. package/dist/stores/message-feedback.store.js.map +1 -1
  93. package/dist/stores/session-feedback.store.js +46 -39
  94. package/dist/stores/session-feedback.store.js.map +1 -1
  95. package/dist/utils/__tests__/axios-utils.test.js +8 -7
  96. package/dist/utils/__tests__/axios-utils.test.js.map +1 -1
  97. package/dist/utils/axios-utils.js +9 -7
  98. package/dist/utils/axios-utils.js.map +1 -1
  99. package/dist/utils/test-utils.js +5 -5
  100. package/dist/utils/test-utils.js.map +1 -1
  101. package/package.json +3 -3
  102. package/src/api-client/help-center/index.ts +2 -1
  103. package/src/api-client/help-center/native-client.ts +4 -4
  104. package/src/api-client/index.ts +2 -6
  105. package/src/api-client/models/index.ts +15 -13
  106. package/src/api-client/titan-chat/index.ts +2 -1
  107. package/src/api-client/titan-chat/native-client.ts +17 -14
  108. package/src/api-client/utils/model-utils.ts +4 -8
  109. package/src/index.ts +1 -1
  110. package/src/models/index.ts +1 -1
  111. package/src/stores/index.ts +5 -12
  112. package/tsconfig.tsbuildinfo +1 -1
@@ -1,207 +1,44 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
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 (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;
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
- var __metadata = (this && this.__metadata) || function (k, v) {
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, } from '@servicetitan/titan-chat-ui-common';
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) => axios.isCancel(error) || (error === null || error === void 0 ? void 0 : error.name) === 'AbortError';
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
- let ChatbotUiBackendStore = class ChatbotUiBackendStore extends InitializeStore {
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 _a, _b;
92
+ runInAction(()=>{
93
+ var _this_customizations_filters, _this_customizations;
260
94
  this.chatUiStore.filterStore.initFilters(options, {
261
- isDefaultSelected: (_b = (_a = this.customizations) === null || _a === void 0 ? void 0 : _a.filters) === null || _b === void 0 ? void 0 : _b.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 = () => perRequestController.abort(this.abortController.signal.reason);
297
- this.abortController.signal.addEventListener('abort', forwardStoreAbort, { once: true });
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), (_c = timeoutMs !== null && timeoutMs !== void 0 ? timeoutMs : (_b = (_a = this.customizations) === null || _a === void 0 ? void 0 : _a.timeouts) === null || _b === void 0 ? void 0 : _b.chatbotRequestTimeoutMs) !== null && _c !== void 0 ? _c : DEFAULT_CHATBOT_ASK_BOT_TIMEOUT_MS, perRequestController);
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
- catch (error) {
318
- this.withSaveState(() => {
152
+ } catch (error) {
153
+ this.withSaveState(()=>{
319
154
  this.chatUiStore.setMessageState(messageModel, ChatMessageState.Failed, {
320
155
  selections,
321
- ...(timeoutMs !== undefined ? { timeoutMs } : {}),
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 = { ...data, ...sessionData };
186
+ data = {
187
+ ...data,
188
+ ...sessionData
189
+ };
352
190
  }
353
- return this.api('postSession', ModelsUtils.createNewSessionModel({ data }), this.abortController.signal);
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 _a;
399
- this.chatUiStore.setError(message, (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error);
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
- __decorate([
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
- __metadata("design:type", Object)
341
+ _ts_metadata("design:type", typeof IChatbotApiClient === "undefined" ? Object : IChatbotApiClient)
412
342
  ], ChatbotUiBackendStore.prototype, "chatbotApiClient", void 0);
413
- __decorate([
343
+ _ts_decorate([
414
344
  inject(CHATBOT_UI_STORE_TOKEN),
415
- __metadata("design:type", Object)
345
+ _ts_metadata("design:type", typeof IChatbotUiStore === "undefined" ? Object : IChatbotUiStore)
416
346
  ], ChatbotUiBackendStore.prototype, "chatUiStore", void 0);
417
- __decorate([
347
+ _ts_decorate([
418
348
  inject(Log),
419
- __metadata("design:type", Object)
349
+ _ts_metadata("design:type", typeof ILog === "undefined" ? Object : ILog)
420
350
  ], ChatbotUiBackendStore.prototype, "log", void 0);
421
- ChatbotUiBackendStore = __decorate([
351
+ ChatbotUiBackendStore = _ts_decorate([
422
352
  injectable(),
423
- __metadata("design:paramtypes", [])
353
+ _ts_metadata("design:type", Function),
354
+ _ts_metadata("design:paramtypes", [])
424
355
  ], ChatbotUiBackendStore);
425
- export { ChatbotUiBackendStore };
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":";;;;;;;;;AAAA,OAAO,EAAQ,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACH,SAAS,EAGT,gBAAgB,EAChB,YAAY,EACZ,WAAW,GAGd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,kCAAkC,GAAG,KAAK,CAAC,CAAC,aAAa;AAE/D,MAAM,cAAc,GAAG,CAAC,KAAc,EAAW,EAAE,CAC/C,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAkC,aAAlC,KAAK,uBAAL,KAAK,CAA+B,IAAI,MAAK,YAAY,CAAC;AAExF,MAAM,CAAC,MAAM,8BAA8B,GAAG,WAAW,CACrD,gCAAgC,CACnC,CAAC;AAaK,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,eAAe;IAStD,IAAc,UAAU;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,IAAc,cAAc;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3C,CAAC;IAED;QACI,KAAK,EAAE,CAAC;QAjBZ;;;;;WAA0B;QAC1B;;;;;WAAkC;QACa;;;;;WAAqC;QACjC;;;;;WAA8B;QAE5D;;;;;WAAW;QACxB;;;;;WAA0C;QA4ClD;;;;mBAAiC,KAAK,EAAC,OAAO,EAAC,EAAE;gBAC7C,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAqC,KAAK,EAAC,OAAO,EAAC,EAAE;gBACjD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAqC,KAAK,EAAC,OAAO,EAAC,EAAE;gBACjD,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAyC,KAAK,EAC1C,OAAO,EACP,CAAC,EACD,YAAkC,EAClC,UAAyC,EACzC,SAAkB,EACpB,EAAE;gBACA,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAA8C,KAAK,EAC/C,OAAO,EACP,CAAC,EACD,YAAkC,EACpC,EAAE;;gBACA,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,OAAO,EAAE,CAAC;oBACV,OAAO;gBACX,CAAC;gBACD,MAAM,UAAU,GAAG,MAAA,YAAY,CAAC,IAAI,0CAAE,UAA2C,CAAC;gBAClF,MAAM,SAAS,GAAG,MAAA,YAAY,CAAC,IAAI,0CAAE,SAA+B,CAAC;gBACrE,MAAM,IAAI,CAAC,WAAW,CAAC,YAAoC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACpF,OAAO,EAAE,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAEK,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,WAAqC,EAAE,aAAuB,EAAE,EAAE;gBACtF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBACpE,OAAO,CAAC;oBACJ,OAAO;iBACV,CAAC,CAAC;YACP,CAAC;WAAC;QAEF;;;;mBAGK,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAwB,EAAE,EAAE;gBAChD,IAAI,aAA0C,CAAC;gBAC/C,IAAI,cAAc,GAAgC,KAAK;oBACnD,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC5B,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,CAAC;oBACD,IAAI,CAAC,KAAK,EAAE,CAAC;wBACT,MAAM,IAAI,SAAS,CAAC,8BAA8B,EAAE;4BAChD,eAAe,EAAE,KAAK;yBACzB,CAAC,CAAC;oBACP,CAAC;oBACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;wBACzC,MAAM,IAAI,SAAS,CAAC,gDAAgD,EAAE;4BAClE,eAAe,EAAE,KAAK;yBACzB,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAQ,CAAC,EAAG,EAAE,CAAC,CAAC;oBACjF,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBACvF,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CACT,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,CACR,CAAC;oBACF,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACxD,CAAC;gBACD,OAAO,CAAC;oBACJ,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,cAAc;iBAC3B,CAAC,CAAC;YACP,CAAC;WAAC;QAEF;;;;mBAGK,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAwB,EAAE,EAAE;gBAChD,IAAI,aAA0C,CAAC;gBAC/C,IAAI,cAAc,GAAgC,KAAK;oBACnD,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC5B,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,CAAC;oBACD,IAAI,CAAC,KAAK,EAAE,CAAC;wBACT,MAAM,IAAI,SAAS,CAAC,8BAA8B,EAAE;4BAChD,eAAe,EAAE,KAAK;yBACzB,CAAC,CAAC;oBACP,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBACnB,MAAM,IAAI,SAAS,CAAC,wCAAwC,EAAE;4BAC1D,eAAe,EAAE,KAAK;yBACzB,CAAC,CAAC;oBACP,CAAC;oBACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC1B,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAQ,CAAC,EAAG,EAAE,CAAC,CAAC;oBACjF,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBACvF,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CACT,6BAA6B,EAC7B,uBAAuB,EACvB,iCAAiC,EACjC,KAAK,CACR,CAAC;oBACF,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACxD,CAAC;gBACD,OAAO,CAAC;oBACJ,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,cAAc;iBAC3B,CAAC,CAAC;YACP,CAAC;WAAC;QA9JE,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACrC,CAAC;IAED,SAAS;QACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,2BAA2B,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,2BAA2B,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChG,CAAC;IACD,WAAW;QACP,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,cAAc,CAAC,2BAA2B,EAC1C,IAAI,CAAC,qBAAqB,CAC7B,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,cAAc,CAAC,2BAA2B,EAC1C,IAAI,CAAC,qBAAqB,CAC7B,CAAC;IACN,CAAC;IAkID,KAAK,CAAC,cAAc;QAChB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,kBAAkB,KAAI,CAAC;IAEvB,gBAAgB,KAAI,CAAC;IAErB,wBAAwB,KAAI,CAAC;IAE7B,aAAa,KAAI,CAAC;IAER,oBAAoB;QAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC9B,iBAAiB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,iDAAiD;gBACzF,8DAA8D;gBAC9D,kEAAkE;gBAClE,gCAAgC,CACvC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAES,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,KAAU;QACxD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAClB,KAAK;YACL,OAAO;YACP,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,gBAAgB,IAAI,EAAE;SAC/B,CAAC,CAAC;IACP,CAAC;IAEkB,KAAK,CAAC,kBAAkB;QACvC,MAAM,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACzD,WAAW,CAAC,GAAG,EAAE;;YACb,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE;gBAC9C,iBAAiB,EAAE,MAAA,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,0CAAE,iBAAiB;aACrE,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAES,KAAK,CAAC,GAAG;QACf,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CACT,oBAAoB,EACpB,sBAAsB,EACtB,yFAAyF,EACzF,KAAK,CACR,CAAC;QACN,CAAC;IACL,CAAC;IAES,KAAK;QACX,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,OAAO;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAES,gBAAgB,CAAC,MAA0B;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAES,KAAK,CAAC,WAAW,CACvB,YAAkC,EAClC,UAA8B,EAC9B,SAAkB;;QAElB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC;QACtC,MAAM,oBAAoB,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC3B,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC5B,IAAI,CAAC,GAAG,CACJ,aAAa,EACb,IAAI,MAAM,CAAC,WAAW,CAAC;gBACnB,SAAS,EAAE,IAAI,CAAC,OAAQ,CAAC,EAAG;gBAC5B,QAAQ;gBACR,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;gBACvC,UAAU;aACb,CAAC,EACF,oBAAoB,CAAC,MAAM,CAC9B,EACD,MAAA,SAAS,aAAT,SAAS,cAAT,SAAS,GACL,MAAA,MAAA,IAAI,CAAC,cAAc,0CAAE,QAAQ,0CAAE,uBAAuB,mCACtD,kCAAkC,EACtC,oBAAoB,CACvB,CAAC;YACF,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACpB,6IAA6I;gBAC7I,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,YAAY,EAAE,gBAAgB,CAAC,SAAS,EAAE;oBACvE,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,UAAU;iBACb,CAAC,CAAC;gBACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE;oBACpE,UAAU;oBACV,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,QAAQ,CACT,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,KAAK,CACR,CAAC;YACN,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC5E,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAES,UAAU,CAAC,OAAyB;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,WAAqC,EAAE,aAAa,GAAG,KAAK;QACrF,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC9B,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvC,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;gBACvC,CAAC;gBACD,OAAO,IAAI,CAAC,GAAG,CACX,aAAa,EACb,WAAW,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,EAC3C,IAAI,CAAC,eAAe,CAAC,MAAM,CAC9B,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC;QAC9B,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAES,KAAK,CAAC,GAAG,CAIjB,UAAa,EAAE,GAAG,IAAU;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,OAAQ,MAAoC,CAAC,IAAI,CAC7C,IAAI,CAAC,gBAAgB,EACrB,GAAG,IAAI,CACkB,CAAC;YAClC,CAAC;oBAAS,CAAC;gBACP,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,yBAAyB,CAAC,CAAC;IACpE,CAAC;IAES,aAAa,CAAI,MAAe;QACtC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,YAAY,CAAC,IAAY,EAAE,KAAgB;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAES,QAAQ,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAE,KAAU;QACvE,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;;YACpB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC;IAES,yBAAyB;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACvD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAtZkD;IAA9C,MAAM,CAAC,kBAAkB,CAAC;;+DAAyD;AACjC;IAAlD,MAAM,CAAC,sBAAsB,CAAC;;0DAAkD;AAE5D;IAApB,MAAM,CAAC,GAAG,CAAC;;kDAAoB;AANvB,qBAAqB;IADjC,UAAU,EAAE;;GACA,qBAAqB,CAyZjC"}
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":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,IAAI,EAAEC,GAAG,QAAQ,4BAA4B;AACtD,SAASC,MAAM,EAAEC,UAAU,EAAEC,WAAW,QAAQ,0BAA0B;AAC1E,SACIC,SAAS,EAGTC,gBAAgB,EAChBC,YAAY,EACZC,WAAW,QAGR,qCAAqC;AAC5C,OAAOC,WAAW,QAAQ;AAC1B,SAASC,cAAc,EAAEC,WAAW,QAAQ,OAAO;AACnD,SAASC,kBAAkB,EAAEC,iBAAiB,EAAEC,MAAM,EAAEC,WAAW,QAAQ,gBAAgB;AAC3F,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,sBAAsB,EAAEC,cAAc,EAAEC,eAAe,QAAQ,qBAAqB;AAC7F,SAASC,eAAe,QAAQ,qBAAqB;AAErD,MAAMC,qCAAqC,OAAO,aAAa;AAE/D,MAAMC,iBAAiB,CAACC,QACpBd,MAAMe,QAAQ,CAACD,UAAU,CAACA,kBAAAA,4BAAD,AAACA,MAAoCE,IAAI,MAAK;AAE3E,OAAO,MAAMC,iCAAiCtB,YAC1C,kCACF;AAaF,OAAO,MAAMuB,8BAA8BP;IASvC,IAAcQ,aAAmB;QAC7B,OAAO,IAAI,CAACC,GAAG;IACnB;IAEA,IAAcC,iBAAiB;QAC3B,OAAO,IAAI,CAACC,WAAW,CAACD,cAAc;IAC1C;IAQAE,YAAkB;QACd,IAAI,CAACC,WAAW;QAChB,IAAI,CAACF,WAAW,CAACG,EAAE,CAAC1B,YAAY2B,QAAQ,EAAE,IAAI,CAACC,SAAS;QACxD,IAAI,CAACL,WAAW,CAACG,EAAE,CAAC1B,YAAY6B,YAAY,EAAE,IAAI,CAACC,aAAa;QAChE,IAAI,CAACP,WAAW,CAACG,EAAE,CAAC1B,YAAY+B,YAAY,EAAE,IAAI,CAACC,aAAa;QAChE,IAAI,CAACT,WAAW,CAACG,EAAE,CAAC1B,YAAYiC,gBAAgB,EAAE,IAAI,CAACC,iBAAiB;QACxE,IAAI,CAACX,WAAW,CAACG,EAAE,CAAC1B,YAAYmC,qBAAqB,EAAE,IAAI,CAACC,sBAAsB;QAClF,IAAI,CAACb,WAAW,CAACG,EAAE,CAAChB,eAAe2B,wBAAwB,EAAE,IAAI,CAACC,kBAAkB;QACpF,IAAI,CAACf,WAAW,CAACG,EAAE,CAAChB,eAAe6B,2BAA2B,EAAE,IAAI,CAACC,qBAAqB;QAC1F,IAAI,CAACjB,WAAW,CAACG,EAAE,CAAChB,eAAe+B,2BAA2B,EAAE,IAAI,CAACC,qBAAqB;IAC9F;IACAjB,cAAoB;QAChB,IAAI,CAACF,WAAW,CAACoB,GAAG,CAAC3C,YAAY2B,QAAQ,EAAE,IAAI,CAACC,SAAS;QACzD,IAAI,CAACL,WAAW,CAACoB,GAAG,CAAC3C,YAAY6B,YAAY,EAAE,IAAI,CAACC,aAAa;QACjE,IAAI,CAACP,WAAW,CAACoB,GAAG,CAAC3C,YAAY+B,YAAY,EAAE,IAAI,CAACC,aAAa;QACjE,IAAI,CAACT,WAAW,CAACoB,GAAG,CAAC3C,YAAYiC,gBAAgB,EAAE,IAAI,CAACC,iBAAiB;QACzE,IAAI,CAACX,WAAW,CAACoB,GAAG,CAAC3C,YAAYmC,qBAAqB,EAAE,IAAI,CAACC,sBAAsB;QACnF,IAAI,CAACb,WAAW,CAACoB,GAAG,CAACjC,eAAe2B,wBAAwB,EAAE,IAAI,CAACC,kBAAkB;QACrF,IAAI,CAACf,WAAW,CAACoB,GAAG,CAChBjC,eAAe6B,2BAA2B,EAC1C,IAAI,CAACC,qBAAqB;QAE9B,IAAI,CAACjB,WAAW,CAACoB,GAAG,CAChBjC,eAAe+B,2BAA2B,EAC1C,IAAI,CAACC,qBAAqB;IAElC;IAkIA,MAAME,iBAA+D;QACjE,OAAOC,QAAQC,OAAO,CAACC;IAC3B;IAEAC,qBAAqB,CAAC;IAEtBC,mBAAmB,CAAC;IAEpBC,2BAA2B,CAAC;IAE5BC,gBAAgB,CAAC;IAEPC,uBAAuB;QAC7B,IAAI,IAAI,CAAC7B,WAAW,CAAC8B,QAAQ,CAACC,MAAM,EAAE;YAClC;QACJ;QACA,IAAI,CAACC,aAAa,CAAC;YACf,IAAI,CAAChC,WAAW,CAACiC,iBAAiB,CAC9B,CAAC,cAAc,EAAE,IAAI,CAACjC,WAAW,CAACkC,KAAK,CAACxC,IAAI,CAAC,+CAA+C,CAAC,GACzF,iEACA,qEACA;QAEZ;IACJ;IAEUyC,SAASC,IAAY,EAAEC,OAAe,EAAE7C,KAAU,EAAE;QAC1D,IAAID,eAAeC,QAAQ;YACvB;QACJ;QACA,IAAI,CAACK,UAAU,CAACL,KAAK,CAAC;YAClBA;YACA6C;YACAC,UAAU;YACVF,MAAM,CAAC,aAAa,EAAEA,MAAM;QAChC;IACJ;IAEA,MAAyBG,qBAAqB;QAC1C,MAAM,KAAK,CAACA;QACZ,MAAMC,UAAU,MAAM,IAAI,CAACC,gBAAgB,CAACC,UAAU;QACtD9D,YAAY;gBAEe,8BAAA;YADvB,IAAI,CAACoB,WAAW,CAAC2C,WAAW,CAACC,WAAW,CAACJ,SAAS;gBAC9CK,iBAAiB,GAAE,uBAAA,IAAI,CAAC9C,cAAc,cAAnB,4CAAA,+BAAA,qBAAqB+C,OAAO,cAA5B,mDAAA,6BAA8BD,iBAAiB;YACtE;QACJ;IACJ;IAEA,MAAgBE,MAAM;QAClB,IAAI,CAAC/C,WAAW,CAACgD,SAAS,CAACxE,aAAayE,YAAY;QACpD,IAAI;YACA,MAAM,IAAI,CAACC,UAAU;YACrB,IAAI,CAACzB,kBAAkB;YACvB,IAAI,CAACI,oBAAoB;YACzB,IAAI,CAACD,aAAa;YAClB,IAAI,CAAC5B,WAAW,CAACgD,SAAS,CAACxE,aAAa2E,OAAO;QACnD,EAAE,OAAO3D,OAAgB;YACrB,IAAI,CAAC4D,QAAQ,CACT,sBACA,wBACA,2FACA5D;QAER;IACJ;IAEU6D,QAAQ;QACd,IAAI,CAACC,UAAU,CAAC9B;IACpB;IAEA,MAAgB+B,UAAU;QACtB,IAAI,IAAI,CAACC,OAAO,EAAE;YACd,MAAMA,UAAU,MAAM,IAAI,CAACC,GAAG,CAAC,iBAAiB,IAAI,CAACD,OAAO;YAC5D,IAAI,CAACF,UAAU,CAACE;QACpB;QACA,IAAI,CAACH,KAAK;QACV,IAAI,CAACrD,WAAW,CAACqD,KAAK;IAC1B;IAEUK,iBAAiBC,MAA0B,EAAE;QACnD,IAAI,CAAC3D,WAAW,CAAC4D,UAAU,CAAC,MAAMD,OAAOA,MAAM,EAAEA;IACrD;IAEA,MAAgBE,YACZC,YAAkC,EAClCC,UAA8B,EAC9BC,SAAkB,EACpB;QACE,MAAMC,WAAWH,aAAazB,OAAO;QACrC,MAAM6B,uBAAuB,IAAIC;QACjC,MAAMC,oBAAoB,IACtBF,qBAAqBG,KAAK,CAAC,IAAI,CAACC,eAAe,CAACC,MAAM,CAACC,MAAM;QACjE,IAAI,CAACF,eAAe,CAACC,MAAM,CAACE,gBAAgB,CAAC,SAASL,mBAAmB;YAAEM,MAAM;QAAK;QACtF,IAAI;gBAcIV;gBACI,+BAAA;YAdR,MAAM,IAAI,CAACW,YAAY;YACvB,IAAI,CAAC3E,WAAW,CAAC4E,cAAc,CAAC;YAChC,MAAMjB,SAAS,MAAM1E,YACjB,IAAI,CAACwE,GAAG,CACJ,eACA,IAAI1E,OAAO8F,WAAW,CAAC;gBACnBC,WAAW,IAAI,CAACtB,OAAO,CAAEuB,EAAE;gBAC3Bd;gBACAe,YAAYjG,OAAOkG,UAAU,CAACC,SAAS;gBACvCnB;YACJ,IACAG,qBAAqBK,MAAM,IAE/BP,OAAAA,sBAAAA,uBAAAA,aACI,uBAAA,IAAI,CAACjE,cAAc,cAAnB,4CAAA,gCAAA,qBAAqBoF,QAAQ,cAA7B,oDAAA,8BAA+BC,uBAAuB,cAD1DpB,kBAAAA,OAEI1E,oCACJ4E;YAEJ,IAAI,CAAClC,aAAa,CAAC;gBACf,6IAA6I;gBAC7I,IAAI,CAAChC,WAAW,CAACqF,eAAe,CAACvB,cAAcvF,iBAAiB+G,SAAS,EAAE;oBACvEC,UAAU5B,OAAOoB,EAAE;oBACnBhB;gBACJ;gBACA,IAAI,CAACL,gBAAgB,CAACC;gBACtB,IAAI,CAAC3D,WAAW,CAACwF,UAAU,CAAChH,aAAa2E,OAAO;YACpD;QACJ,EAAE,OAAO3D,OAAgB;YACrB,IAAI,CAACwC,aAAa,CAAC;gBACf,IAAI,CAAChC,WAAW,CAACqF,eAAe,CAACvB,cAAcvF,iBAAiBkH,MAAM,EAAE;oBACpE1B;oBACA,GAAIC,cAAcxC,YAAY;wBAAEwC;oBAAU,IAAI,CAAC,CAAC;gBACpD;YACJ;YACA,IAAIxE,iBAAiBlB,WAAW;gBAC5B,IAAI,CAACoH,YAAY,CAAC,uBAAuBlG;YAC7C,OAAO;gBACH,IAAI,CAAC4D,QAAQ,CACT,uBACA,gBACA,0BACA5D;YAER;QACJ,SAAU;YACN,IAAI,CAAC8E,eAAe,CAACC,MAAM,CAACoB,mBAAmB,CAAC,SAASvB;YACzD,IAAI,CAACpE,WAAW,CAAC4E,cAAc,CAAC;QACpC;IACJ;IAEUtB,WAAWE,OAAyB,EAAE;QAC5C,IAAI,CAACA,OAAO,GAAGA;IACnB;IAEA,MAAgBmB,aAAaiB,WAAqC,EAAEC,gBAAgB,KAAK,EAAE;QACvF,IAAIA,eAAe;YACf,IAAI,CAACxC,KAAK;YACV,IAAI,CAACyC,cAAc,GAAGtE;QAC1B;QACA,IAAI,IAAI,CAACgC,OAAO,EAAE;YACd,OAAO,IAAI,CAACA,OAAO;QACvB;QACA,IAAI,CAAC,IAAI,CAACsC,cAAc,EAAE;YACtB,IAAI,CAACA,cAAc,GAAG,AAAC,CAAA;gBACnB,IAAIC,OAAO,MAAM,IAAI,CAAC1E,cAAc;gBACpC,IAAIuE,aAAa;oBACbG,OAAO;wBAAE,GAAGA,IAAI;wBAAE,GAAGH,WAAW;oBAAC;gBACrC;gBACA,OAAO,IAAI,CAACnC,GAAG,CACX,eACAzE,YAAYgH,qBAAqB,CAAC;oBAAED;gBAAK,IACzC,IAAI,CAACzB,eAAe,CAACC,MAAM;YAEnC,CAAA;YACA,MAAMf,UAAU,MAAM,IAAI,CAACsC,cAAc;YACzC,IAAI,CAACxC,UAAU,CAACE;YAChB,IAAI,CAACxB,aAAa,CAAC;gBACf,IAAI,CAAChC,WAAW,CAACwF,UAAU,CAAChH,aAAa2E,OAAO;YACpD;QACJ;QACA,IAAI;YACA,MAAM,IAAI,CAAC2C,cAAc;QAC7B,SAAU;YACN,IAAI,CAACA,cAAc,GAAGtE;QAC1B;QACA,OAAO,IAAI,CAACgC,OAAO;IACvB;IAEA,MAAgBC,IAIdwC,UAAa,EAAE,GAAGC,IAAU,EAA4B;QACtD,MAAMC,SAAS,IAAI,CAAC1D,gBAAgB,CAACwD,WAAW;QAChD,IAAIE,QAAQ;YACR,IAAI;gBACA,OAAO,AAACA,OAAqCC,IAAI,CAC7C,IAAI,CAAC3D,gBAAgB,KAClByD;YAEX,SAAU;gBACN,IAAI,CAACtE,aAAa;YACtB;QACJ;QACA,MAAM,IAAIyE,MAAM,CAAC,QAAQ,EAAEJ,WAAW,uBAAuB,CAAC;IAClE;IAEUjE,cAAiBsE,MAAe,EAAK;QAC3C,MAAMC,SAASD;QACf,IAAI,CAAC5E,gBAAgB;QACrB,OAAO6E;IACX;IAEUb,aAAatD,IAAY,EAAE5C,KAAgB,EAAE;QACnD,IAAI,CAAC2C,QAAQ,CAACC,MAAM5C,MAAM6C,OAAO,EAAE7C;QACnC,IAAI,CAACwC,aAAa,CAAC;YACf,IAAI,CAAChC,WAAW,CAAC0F,YAAY,CAAClG;QAClC;IACJ;IAEU4D,SAAShB,IAAY,EAAEoE,KAAa,EAAEnE,OAAe,EAAE7C,KAAU,EAAE;QACzE,IAAID,eAAeC,QAAQ;YACvB;QACJ;QACA,IAAI,CAAC2C,QAAQ,CAACC,MAAMC,SAAS7C;QAC7B,IAAI,CAACwC,aAAa,CAAC;;YACf,IAAI,CAAChC,WAAW,CAACoD,QAAQ,CAACf,iBAAS7C,kBAAAA,4BAAAA,MAAO6C,OAAO,uCAAI7C;QACzD;IACJ;IAEUiH,4BAAkC;QACxC,IAAI,CAACnC,eAAe,GAAG,IAAIH;QAC3B,IAAI,CAACG,eAAe,CAACC,MAAM,CAACE,gBAAgB,CAAC,SAAS;YAClD,IAAI,CAACgC,yBAAyB;QAClC;IACJ;IAvYA,aAAc;QACV,KAAK,IAjBTjD,uBAAAA,WAAAA,KAAAA,IACAc,uBAAAA,mBAAAA,KAAAA,IACA,uBAA+C7B,oBAA/C,KAAA,IACA,uBAAmDzC,eAAnD,KAAA,IAEA,uBAAqBF,OAArB,KAAA,IACA,uBAAQgG,kBAAR,KAAA,IA4CAzF,uBAAAA,aAAiC,OAAMkB;YACnC,MAAM,IAAI,CAACwB,GAAG;YACdxB;QACJ,IAEAhB,uBAAAA,iBAAqC,OAAMgB;YACvC,MAAM,IAAI,CAACgC,OAAO;YAClBhC;QACJ,IAEAd,uBAAAA,iBAAqC,OAAMc;YACvC,MAAM,IAAI,CAACgC,OAAO;YAClB,IAAI,CAAC5B,wBAAwB;YAC7B,MAAM,IAAI,CAACoB,GAAG;YACdxB;QACJ,IAEAZ,uBAAAA,qBAAyC,OACrCY,SACAmF,GACA5C,cACAC,YACAC;YAEA,MAAM,IAAI,CAACH,WAAW,CAACC,cAAcC,YAAYC;YACjDzC;QACJ,IAEAV,uBAAAA,0BAA8C,OAC1CU,SACAmF,GACA5C;gBAMmBA,oBACDA;YALlB,IAAIA,aAAa6C,IAAI,KAAK,WAAW;gBACjCpF;gBACA;YACJ;YACA,MAAMwC,cAAaD,qBAAAA,aAAaiC,IAAI,cAAjBjC,yCAAAA,mBAAmBC,UAAU;YAChD,MAAMC,aAAYF,sBAAAA,aAAaiC,IAAI,cAAjBjC,0CAAAA,oBAAmBE,SAAS;YAC9C,MAAM,IAAI,CAACH,WAAW,CAACC,cAAsCC,YAAYC;YACzEzC;QACJ,IAEAR,uBAAAA,sBAEK,OAAOQ,SAASmF,GAAGd,aAAuCC;YAC3D,MAAMrC,UAAU,MAAM,IAAI,CAACmB,YAAY,CAACiB,aAAaC;YACrDtE,QAAQ;gBACJiC;YACJ;QACJ,IAEAvC,uBAAAA,yBAGK,OAAOM,SAASmF,GAAGE;YACpB,IAAIC;YACJ,IAAIC,iBAA8CF,QAC5C,IAAI7H,OAAOgI,QAAQ,CAACH,SACpBpF;YACN,IAAI;gBACA,IAAI,CAACoF,OAAO;oBACR,MAAM,IAAItI,UAAU,gCAAgC;wBAChD0I,iBAAiB;oBACrB;gBACJ;gBACA,IAAI,OAAOJ,MAAMK,SAAS,KAAK,aAAa;oBACxC,MAAM,IAAI3I,UAAU,kDAAkD;wBAClE0I,iBAAiB;oBACrB;gBACJ;gBACA,MAAM,IAAI,CAACrC,YAAY;gBACvB,MAAMuC,WAAW,IAAInI,OAAOgI,QAAQ,CAAC;oBAAE,GAAGH,KAAK;oBAAE9B,WAAW,IAAI,CAACtB,OAAO,CAAEuB,EAAE;gBAAE;gBAC9E+B,iBAAiB,MAAM,IAAI,CAACrD,GAAG,CAAC,gBAAgByD,UAAU,IAAI,CAAC5C,eAAe,CAACC,MAAM;gBACrFsC,gBAAgB9H,OAAOoI,oBAAoB,CAACC,OAAO;YACvD,EAAE,OAAO5H,OAAgB;gBACrB,IAAI,CAAC4D,QAAQ,CACT,wBACA,yBACA,2BACA5D;gBAEJqH,gBAAgB9H,OAAOoI,oBAAoB,CAACE,OAAO;YACvD;YACA9F,QAAQ;gBACJ+F,OAAOT;gBACPK,UAAUJ;YACd;QACJ,IAEA3F,uBAAAA,yBAGK,OAAOI,SAASmF,GAAGE;YACpB,IAAIC;YACJ,IAAIC,iBAA8CF,QAC5C,IAAI7H,OAAOgI,QAAQ,CAACH,SACpBpF;YACN,IAAI;gBACA,IAAI,CAACoF,OAAO;oBACR,MAAM,IAAItI,UAAU,gCAAgC;wBAChD0I,iBAAiB;oBACrB;gBACJ;gBACA,IAAI,CAACJ,MAAMK,SAAS,EAAE;oBAClB,MAAM,IAAI3I,UAAU,0CAA0C;wBAC1D0I,iBAAiB;oBACrB;gBACJ;gBACA,MAAM,IAAI,CAACrC,YAAY;gBACvB,MAAMuC,WAAW,IAAInI,OAAOgI,QAAQ,CAAC;oBAAE,GAAGH,KAAK;oBAAE9B,WAAW,IAAI,CAACtB,OAAO,CAAEuB,EAAE;gBAAE;gBAC9E+B,iBAAiB,MAAM,IAAI,CAACrD,GAAG,CAAC,gBAAgByD,UAAU,IAAI,CAAC5C,eAAe,CAACC,MAAM;gBACrFsC,gBAAgB9H,OAAOoI,oBAAoB,CAACC,OAAO;YACvD,EAAE,OAAO5H,OAAgB;gBACrB,IAAI,CAAC4D,QAAQ,CACT,+BACA,yBACA,mCACA5D;gBAEJqH,gBAAgB9H,OAAOoI,oBAAoB,CAACE,OAAO;YACvD;YACA9F,QAAQ;gBACJ+F,OAAOT;gBACPK,UAAUJ;YACd;QACJ;QA9JInI,eAAe,IAAI;QACnB,IAAI,CAAC8H,yBAAyB;IAClC;AAoYJ"}