@servicetitan/titan-chatbot-api 8.0.0 → 9.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 (117) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts +1 -0
  3. package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts.map +1 -1
  4. package/dist/api-client/__mocks__/chatbot-api-client.mock.js +1 -0
  5. package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -1
  6. package/dist/api-client/base/chatbot-api-client.d.ts +7 -0
  7. package/dist/api-client/base/chatbot-api-client.d.ts.map +1 -1
  8. package/dist/api-client/base/chatbot-api-client.js.map +1 -1
  9. package/dist/api-client/index.d.ts +0 -1
  10. package/dist/api-client/index.d.ts.map +1 -1
  11. package/dist/api-client/index.js +0 -2
  12. package/dist/api-client/index.js.map +1 -1
  13. package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts +2 -0
  14. package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.d.ts.map +1 -0
  15. package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js +240 -0
  16. package/dist/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.js.map +1 -0
  17. package/dist/api-client/titan-chat/chatbot-api-client.d.ts +11 -0
  18. package/dist/api-client/titan-chat/chatbot-api-client.d.ts.map +1 -1
  19. package/dist/api-client/titan-chat/chatbot-api-client.js +29 -0
  20. package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/models/__tests__/chatbot-customizations.test.d.ts +2 -0
  26. package/dist/models/__tests__/chatbot-customizations.test.d.ts.map +1 -0
  27. package/dist/models/__tests__/chatbot-customizations.test.js +36 -0
  28. package/dist/models/__tests__/chatbot-customizations.test.js.map +1 -0
  29. package/dist/models/chatbot-customizations.d.ts +17 -0
  30. package/dist/models/chatbot-customizations.d.ts.map +1 -1
  31. package/dist/models/chatbot-customizations.js +6 -1
  32. package/dist/models/chatbot-customizations.js.map +1 -1
  33. package/dist/models/index.d.ts +1 -1
  34. package/dist/models/index.d.ts.map +1 -1
  35. package/dist/models/index.js +1 -1
  36. package/dist/models/index.js.map +1 -1
  37. package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts +2 -0
  38. package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.d.ts.map +1 -0
  39. package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js +107 -0
  40. package/dist/stores/__tests__/chatbot-ui-backend.store.observability.test.js.map +1 -0
  41. package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts +2 -0
  42. package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.d.ts.map +1 -0
  43. package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js +312 -0
  44. package/dist/stores/__tests__/chatbot-ui-backend.store.streaming.test.js.map +1 -0
  45. package/dist/stores/chatbot-ui-backend.store.d.ts +26 -2
  46. package/dist/stores/chatbot-ui-backend.store.d.ts.map +1 -1
  47. package/dist/stores/chatbot-ui-backend.store.js +129 -4
  48. package/dist/stores/chatbot-ui-backend.store.js.map +1 -1
  49. package/dist/streaming/__tests__/agent-stream.test.d.ts +2 -0
  50. package/dist/streaming/__tests__/agent-stream.test.d.ts.map +1 -0
  51. package/dist/streaming/__tests__/agent-stream.test.js +92 -0
  52. package/dist/streaming/__tests__/agent-stream.test.js.map +1 -0
  53. package/dist/streaming/agent-stream.d.ts +83 -0
  54. package/dist/streaming/agent-stream.d.ts.map +1 -0
  55. package/dist/streaming/agent-stream.js +28 -0
  56. package/dist/streaming/agent-stream.js.map +1 -0
  57. package/dist/streaming/index.d.ts +3 -0
  58. package/dist/streaming/index.d.ts.map +1 -0
  59. package/dist/streaming/index.js +4 -0
  60. package/dist/streaming/index.js.map +1 -0
  61. package/dist/streaming/run-agent-stream.d.ts +23 -0
  62. package/dist/streaming/run-agent-stream.d.ts.map +1 -0
  63. package/dist/streaming/run-agent-stream.js +83 -0
  64. package/dist/streaming/run-agent-stream.js.map +1 -0
  65. package/package.json +6 -3
  66. package/src/api-client/__mocks__/chatbot-api-client.mock.ts +1 -0
  67. package/src/api-client/base/chatbot-api-client.ts +11 -0
  68. package/src/api-client/index.ts +0 -1
  69. package/src/api-client/titan-chat/__tests__/chatbot-api-client-stream.test.ts +208 -0
  70. package/src/api-client/titan-chat/chatbot-api-client.ts +46 -0
  71. package/src/index.ts +6 -1
  72. package/src/models/__tests__/chatbot-customizations.test.ts +26 -0
  73. package/src/models/chatbot-customizations.ts +20 -0
  74. package/src/models/index.ts +1 -1
  75. package/src/stores/__tests__/chatbot-ui-backend.store.observability.test.ts +105 -0
  76. package/src/stores/__tests__/chatbot-ui-backend.store.streaming.test.ts +261 -0
  77. package/src/stores/chatbot-ui-backend.store.ts +179 -4
  78. package/src/streaming/__tests__/agent-stream.test.ts +80 -0
  79. package/src/streaming/agent-stream.ts +103 -0
  80. package/src/streaming/index.ts +2 -0
  81. package/src/streaming/run-agent-stream.ts +109 -0
  82. package/tsconfig.tsbuildinfo +1 -1
  83. package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts +0 -2
  84. package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts.map +0 -1
  85. package/dist/api-client/help-center/__tests__/converter-from-models.test.js +0 -67
  86. package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +0 -1
  87. package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts +0 -2
  88. package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts.map +0 -1
  89. package/dist/api-client/help-center/__tests__/converter-to-models.test.js +0 -83
  90. package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +0 -1
  91. package/dist/api-client/help-center/chatbot-api-client.d.ts +0 -32
  92. package/dist/api-client/help-center/chatbot-api-client.d.ts.map +0 -1
  93. package/dist/api-client/help-center/chatbot-api-client.js +0 -101
  94. package/dist/api-client/help-center/chatbot-api-client.js.map +0 -1
  95. package/dist/api-client/help-center/converter-from-models.d.ts +0 -13
  96. package/dist/api-client/help-center/converter-from-models.d.ts.map +0 -1
  97. package/dist/api-client/help-center/converter-from-models.js +0 -117
  98. package/dist/api-client/help-center/converter-from-models.js.map +0 -1
  99. package/dist/api-client/help-center/converter-to-models.d.ts +0 -13
  100. package/dist/api-client/help-center/converter-to-models.d.ts.map +0 -1
  101. package/dist/api-client/help-center/converter-to-models.js +0 -101
  102. package/dist/api-client/help-center/converter-to-models.js.map +0 -1
  103. package/dist/api-client/help-center/index.d.ts +0 -3
  104. package/dist/api-client/help-center/index.d.ts.map +0 -1
  105. package/dist/api-client/help-center/index.js +0 -3
  106. package/dist/api-client/help-center/index.js.map +0 -1
  107. package/dist/api-client/help-center/native-client.d.ts +0 -1268
  108. package/dist/api-client/help-center/native-client.d.ts.map +0 -1
  109. package/dist/api-client/help-center/native-client.js +0 -4550
  110. package/dist/api-client/help-center/native-client.js.map +0 -1
  111. package/src/api-client/help-center/__tests__/converter-from-models.test.ts +0 -41
  112. package/src/api-client/help-center/__tests__/converter-to-models.test.ts +0 -89
  113. package/src/api-client/help-center/chatbot-api-client.ts +0 -122
  114. package/src/api-client/help-center/converter-from-models.ts +0 -133
  115. package/src/api-client/help-center/converter-to-models.ts +0 -127
  116. package/src/api-client/help-center/index.ts +0 -2
  117. package/src/api-client/help-center/native-client.ts +0 -5727
@@ -1,41 +0,0 @@
1
- import { expect } from '@jest/globals';
2
- import { Models } from '../..';
3
- import { ConverterFromModels } from '../converter-from-models';
4
-
5
- describe('ConverterFromModels', () => {
6
- test('convertFilters', () => {
7
- expect(ConverterFromModels.convertFilters()).toBeUndefined();
8
- expect(ConverterFromModels.convertFilters({})).toBeUndefined();
9
- expect(
10
- ConverterFromModels.convertFilters({
11
- subOptions: {
12
- ProductAreas: { values: [] },
13
- },
14
- } as unknown as Models.ISelections)
15
- ).toEqual({
16
- productAreas: [],
17
- });
18
- expect(
19
- ConverterFromModels.convertFilters({
20
- subOptions: {
21
- ProductAreas: { values: ['area1', 'area2'] },
22
- },
23
- } as unknown as Models.ISelections)
24
- ).toEqual({
25
- productAreas: ['area1', 'area2'],
26
- });
27
- expect(
28
- ConverterFromModels.convertFilters({
29
- subOptions: {
30
- Sources: { values: ['source1', 'source2'] },
31
- ContentTypes: { values: ['type1'] },
32
- ProductAreas: { values: ['area1', 'area2'] },
33
- },
34
- } as unknown as Models.ISelections)
35
- ).toEqual({
36
- sources: ['source1', 'source2'],
37
- contentTypes: ['type1'],
38
- productAreas: ['area1', 'area2'],
39
- });
40
- });
41
- });
@@ -1,89 +0,0 @@
1
- import { expect } from '@jest/globals';
2
- import { Models } from '../..';
3
- import { ConverterToModels } from '../converter-to-models';
4
- // eslint-disable-next-line no-restricted-imports
5
- import * as HelpCenterClient from '../native-client';
6
-
7
- describe('ConverterToModels', () => {
8
- test('convertFilterOptions', () => {
9
- expect(ConverterToModels.convertFilterOptions({})).toEqual(
10
- new Models.FrontendModel({
11
- options: new Models.Option({
12
- key: 'help-center-filters-root',
13
- displayName: 'help-center-filters-root',
14
- type: Models.OptionType.Group,
15
- subOptions: [],
16
- }),
17
- })
18
- );
19
-
20
- expect(
21
- ConverterToModels.convertFilterOptions({
22
- sources: [
23
- new HelpCenterClient.FilterOption({
24
- id: 'source1',
25
- displayName: 'Source 1',
26
- }),
27
- new HelpCenterClient.FilterOption({
28
- id: 'source2',
29
- displayName: 'Source 2',
30
- }),
31
- ],
32
- productAreas: [
33
- new HelpCenterClient.FilterOption({
34
- id: 'area1',
35
- displayName: 'Area 1',
36
- }),
37
- new HelpCenterClient.FilterOption({
38
- id: 'area2',
39
- displayName: 'Area 2',
40
- }),
41
- ],
42
- })
43
- ).toEqual(
44
- new Models.FrontendModel({
45
- options: new Models.Option({
46
- key: 'help-center-filters-root',
47
- displayName: 'help-center-filters-root',
48
- type: Models.OptionType.Group,
49
- subOptions: [
50
- new Models.Option({
51
- key: 'Sources',
52
- displayName: 'Sources',
53
- type: Models.OptionType.Group,
54
- subOptions: [
55
- new Models.Option({
56
- key: 'source1',
57
- displayName: 'Source 1',
58
- type: Models.OptionType.Selectable,
59
- }),
60
- new Models.Option({
61
- key: 'source2',
62
- displayName: 'Source 2',
63
- type: Models.OptionType.Selectable,
64
- }),
65
- ],
66
- }),
67
- new Models.Option({
68
- key: 'ProductAreas',
69
- displayName: 'Product Areas',
70
- type: Models.OptionType.Group,
71
- subOptions: [
72
- new Models.Option({
73
- key: 'area1',
74
- displayName: 'Area 1',
75
- type: Models.OptionType.Selectable,
76
- }),
77
- new Models.Option({
78
- key: 'area2',
79
- displayName: 'Area 2',
80
- type: Models.OptionType.Selectable,
81
- }),
82
- ],
83
- }),
84
- ],
85
- }),
86
- })
87
- );
88
- });
89
- });
@@ -1,122 +0,0 @@
1
- import { inject, injectable } from '@servicetitan/react-ioc';
2
- import { Models } from '..';
3
- import {
4
- CHATBOT_CLIENT_SETTINGS,
5
- FirstParameterType,
6
- IChatbotApiClient,
7
- IChatbotClientSettings,
8
- SecondParameterType,
9
- } from '../base/chatbot-api-client';
10
- import { ConverterFromModels } from './converter-from-models';
11
- import { ConverterToModels } from './converter-to-models';
12
- // eslint-disable-next-line no-restricted-imports
13
- import { ChatClient } from './native-client';
14
-
15
- /**
16
- * Settings for the chatbot client, which includes a factory for constructor parameters, and additional settings
17
- * like instance and area which are used in the API calls.
18
- */
19
- export interface IChatbotClientSettingsHelpCenter extends IChatbotClientSettings {
20
- constructorParametersFactory: () => {
21
- baseUrl?: FirstParameterType<typeof ChatClient>;
22
- axiosInstance?: SecondParameterType<typeof ChatClient>;
23
- };
24
- instance: string;
25
- area: string;
26
- }
27
-
28
- /**
29
- * Client adapter adopts the generated titan chatbot client to the generic IChatbotApiClient interface.
30
- */
31
- @injectable()
32
- export class ChatbotApiClient implements IChatbotApiClient {
33
- private readonly client: ChatClient;
34
-
35
- constructor(
36
- @inject(CHATBOT_CLIENT_SETTINGS)
37
- private readonly chatbotApiClientSettings: IChatbotClientSettingsHelpCenter
38
- ) {
39
- const { axiosInstance, baseUrl } =
40
- this.chatbotApiClientSettings.constructorParametersFactory();
41
- this.client = new ChatClient(baseUrl, axiosInstance);
42
- }
43
-
44
- async postFeedback(body: Models.Feedback, abortSignal?: AbortSignal) {
45
- if (body?.messageId) {
46
- await this.client.sendBotMessageFeedback(
47
- body.sessionId,
48
- body.messageId,
49
- ConverterFromModels.convertMessageFeedback(body),
50
- abortSignal
51
- );
52
- return body;
53
- } else if (body?.sessionId) {
54
- await this.client.sendSessionFeedback(
55
- body.sessionId,
56
- ConverterFromModels.convertSessionFeedback(body),
57
- abortSignal
58
- );
59
- return body;
60
- }
61
- throw new Error('Feedback must contain either messageId or sessionId');
62
- }
63
-
64
- async postMessage(body: Models.UserMessage, abortSignal?: AbortSignal) {
65
- const hcMessage = ConverterFromModels.convertUserMessage(
66
- body,
67
- this.chatbotApiClientSettings.area
68
- );
69
- const botMessage = await this.client.sendUserMessage(hcMessage, abortSignal);
70
- return ConverterToModels.convertBotMessage(botMessage);
71
- }
72
-
73
- postFollowUpEmail(
74
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
75
- body: Models.UserMessage,
76
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
77
- abortSignal?: AbortSignal
78
- ): Promise<Models.BotMessage> {
79
- throw new Error('Method not implemented for Help Center chatbot API.');
80
- }
81
-
82
- async getOptions(abortSignal?: AbortSignal): Promise<Models.FrontendModel> {
83
- const filterOptions = await this.client.getFilterOptions(abortSignal);
84
- return ConverterToModels.convertFilterOptions(filterOptions);
85
- }
86
-
87
- async postSession(body: Models.Session, abortSignal?: AbortSignal) {
88
- body.data = body.data ?? {};
89
- body.data.instance ??= this.chatbotApiClientSettings.instance;
90
- const hcSession = ConverterFromModels.convertSession(body);
91
- const newSession = await this.client.createSession(hcSession.source!, abortSignal);
92
- return ConverterToModels.convertSession(newSession);
93
- }
94
-
95
- async patchSession(body: Models.Session, abortSignal?: AbortSignal) {
96
- const session = ConverterFromModels.convertSession(body);
97
- await this.client.updateSessionCategory(
98
- session.source?.category,
99
- session.source?.subCategory,
100
- session.id,
101
- abortSignal
102
- );
103
- return body;
104
- }
105
-
106
- async deleteSession(body: Models.Session, abortSignal?: AbortSignal) {
107
- const session = ConverterFromModels.convertSession(body);
108
- await this.client.closeSession(session.id, abortSignal);
109
- return body;
110
- }
111
-
112
- getTranscripts(
113
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
- start?: Date,
115
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
116
- end?: Date,
117
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
118
- signal?: AbortSignal
119
- ): Promise<Models.ExportHistoryMessage[]> {
120
- throw new Error('Method not implemented for Help Center chatbot API.');
121
- }
122
- }
@@ -1,133 +0,0 @@
1
- import { Models } from '..';
2
- // eslint-disable-next-line no-restricted-imports
3
- import * as HelpCenterModels from './native-client';
4
-
5
- export class ConverterFromModels {
6
- static convertSession(session: Models.ISession): HelpCenterModels.ChatbotSession {
7
- const data = session.data;
8
- return new HelpCenterModels.ChatbotSession({
9
- id: session.id,
10
- createdUtc: data?.createdUtc ? new Date(data.createdUtc) : undefined,
11
- closedUtc: data?.closedUtc ? new Date(data.closedUtc) : undefined,
12
- botId: data?.botId,
13
- source: new HelpCenterModels.SessionSource({
14
- instance: data?.instance,
15
- category: data?.category,
16
- subCategory: data?.subCategory,
17
- fullstorySessionId: data?.fullstorySessionId,
18
- }),
19
- });
20
- }
21
-
22
- static convertUserMessage(
23
- userMessage: Models.IUserMessage,
24
- area: string
25
- ): HelpCenterModels.UserMessage {
26
- const filters =
27
- ConverterFromModels.convertFilters(userMessage.selections) ??
28
- new HelpCenterModels.FilterSelections({});
29
- const data: HelpCenterModels.IUserMessage = {
30
- sessionId: userMessage.sessionId,
31
- text: userMessage.question,
32
- source: new HelpCenterModels.MessageSource({
33
- area,
34
- }),
35
- ...(filters ? { filters } : undefined),
36
- };
37
- return HelpCenterModels.UserMessage.fromJS(data);
38
- }
39
-
40
- static convertFilters(
41
- selections?: Models.ISelections
42
- ): HelpCenterModels.FilterSelections | undefined {
43
- if (!selections?.subOptions || !Object.keys(selections.subOptions).length) {
44
- return;
45
- }
46
- const data: HelpCenterModels.IFilterSelections = {};
47
- const sources = selections.subOptions.Sources;
48
- const contentTypes = selections.subOptions.ContentTypes;
49
- const productAreas = selections.subOptions.ProductAreas;
50
- if (sources?.values) {
51
- data.sources = sources.values;
52
- }
53
- if (contentTypes?.values) {
54
- data.contentTypes = contentTypes.values;
55
- }
56
- if (productAreas?.values) {
57
- data.productAreas = productAreas.values;
58
- }
59
- return new HelpCenterModels.FilterSelections(data);
60
- }
61
-
62
- static convertSessionFeedback(feedback: Models.IFeedback): HelpCenterModels.SessionFeedback {
63
- return new HelpCenterModels.SessionFeedback({
64
- description: feedback.description,
65
- rating: ConverterFromModels.convertSessionFeedbackRating(feedback.rating),
66
- });
67
- }
68
-
69
- static convertMessageFeedback(feedback: Models.IFeedback): HelpCenterModels.MessageFeedback {
70
- return new HelpCenterModels.MessageFeedback({
71
- linkUrl: feedback.linkUrl,
72
- description: feedback.description,
73
- rating: ConverterFromModels.convertMessageFeedbackRating(feedback.rating),
74
- options: ConverterFromModels.convertFeedbackOptions(feedback.options),
75
- });
76
- }
77
-
78
- static convertFeedbackOptions(
79
- feedbackOptions?: Models.FeedbackOptions[]
80
- ): HelpCenterModels.FeedbackOptions[] | undefined {
81
- if (feedbackOptions === undefined) {
82
- return;
83
- }
84
- return feedbackOptions.map(feedbackOption => {
85
- switch (feedbackOption) {
86
- case Models.FeedbackOptions.Incomplete:
87
- return HelpCenterModels.FeedbackOptions.Incomplete;
88
- case Models.FeedbackOptions.Incorrect:
89
- return HelpCenterModels.FeedbackOptions.Incorrect;
90
- case Models.FeedbackOptions.Other:
91
- return HelpCenterModels.FeedbackOptions.Other;
92
- case Models.FeedbackOptions.Unclear:
93
- return HelpCenterModels.FeedbackOptions.Unclear;
94
- case Models.FeedbackOptions.Unrelated:
95
- return HelpCenterModels.FeedbackOptions.Unrelated;
96
- default:
97
- return HelpCenterModels.FeedbackOptions.Other;
98
- }
99
- });
100
- }
101
-
102
- static convertMessageFeedbackRating(
103
- feedbackRatings?: Models.FeedbackRatings
104
- ): HelpCenterModels.MessageFeedbackRatings | undefined {
105
- if (feedbackRatings === undefined) {
106
- return;
107
- }
108
- switch (feedbackRatings) {
109
- case Models.FeedbackRatings.ThumbsDown:
110
- return HelpCenterModels.MessageFeedbackRatings.ThumbsDown;
111
- case Models.FeedbackRatings.GuardrailFeedback:
112
- return HelpCenterModels.MessageFeedbackRatings.GuardrailFeedback;
113
- case Models.FeedbackRatings.ThumbsUp:
114
- return HelpCenterModels.MessageFeedbackRatings.ThumbsUp;
115
- }
116
- }
117
-
118
- static convertSessionFeedbackRating(
119
- feedbackRatings?: Models.FeedbackRatings
120
- ): HelpCenterModels.SessionFeedbackRatings | undefined {
121
- if (feedbackRatings === undefined) {
122
- return;
123
- }
124
- switch (feedbackRatings) {
125
- case Models.FeedbackRatings.ThumbsDown:
126
- return HelpCenterModels.SessionFeedbackRatings.ThumbsDown;
127
- case Models.FeedbackRatings.ThumbsUp:
128
- return HelpCenterModels.SessionFeedbackRatings.ThumbsUp;
129
- default:
130
- return HelpCenterModels.SessionFeedbackRatings.ThumbsDown;
131
- }
132
- }
133
- }
@@ -1,127 +0,0 @@
1
- import { Models } from '..';
2
- // eslint-disable-next-line no-restricted-imports
3
- import * as HelpCenterClient from './native-client';
4
-
5
- export class ConverterToModels {
6
- static convertSession(session: HelpCenterClient.IChatbotSession): Models.Session {
7
- return new Models.Session({
8
- id: session.id,
9
- data: ConverterToModels.convertSessionData(session),
10
- });
11
- }
12
-
13
- static convertSessionData(session: HelpCenterClient.IChatbotSession): Models.Session['data'] {
14
- const data: Models.Session['data'] = {};
15
- if (session.createdUtc) {
16
- data.createdUtc = session.createdUtc.toISOString();
17
- }
18
- if (session.closedUtc) {
19
- data.closedUtc = session.closedUtc.toISOString();
20
- }
21
- if (session.botId) {
22
- data.botId = session.botId;
23
- }
24
- if (session.source) {
25
- if (session.source.instance) {
26
- data.instance = session.source.instance;
27
- }
28
- if (session.source.category) {
29
- data.category = session.source.category;
30
- }
31
- if (session.source.subCategory) {
32
- data.subCategory = session.source.subCategory;
33
- }
34
- if (session.source.fullstorySessionId) {
35
- data.fullstorySessionId = session.source.fullstorySessionId;
36
- }
37
- }
38
- return Object.keys(data).length > 0 ? data : undefined;
39
- }
40
-
41
- /**
42
- * Convert HC filters into single-level frontend model.
43
- */
44
- static convertFilterOptions(options: HelpCenterClient.IFilterOptions): Models.FrontendModel {
45
- const createFilterOption = (key: string, displayName?: string): Models.Option => {
46
- return new Models.Option({
47
- key,
48
- displayName: displayName ?? key,
49
- type: Models.OptionType.Selectable,
50
- });
51
- };
52
- const createFilterOptions = (options?: HelpCenterClient.IFilterOption[]) =>
53
- options?.map(x => createFilterOption(x.id ?? '', x.displayName));
54
- const createFilter = (
55
- key: string,
56
- displayName?: string,
57
- subOptions?: Models.Option[]
58
- ): Models.Option => {
59
- return new Models.Option({
60
- key,
61
- displayName: displayName ?? key,
62
- type: Models.OptionType.Group,
63
- subOptions,
64
- });
65
- };
66
-
67
- const subOptions: Models.Option[] = [];
68
- if (options.sources?.length) {
69
- subOptions.push(
70
- createFilter('Sources', 'Sources', createFilterOptions(options.sources))
71
- );
72
- }
73
- if (options.contentTypes?.length) {
74
- subOptions.push(
75
- createFilter(
76
- 'ContentTypes',
77
- 'Content Types',
78
- createFilterOptions(options.contentTypes)
79
- )
80
- );
81
- }
82
- if (options.productAreas?.length) {
83
- subOptions.push(
84
- createFilter(
85
- 'ProductAreas',
86
- 'Product Areas',
87
- createFilterOptions(options.productAreas)
88
- )
89
- );
90
- }
91
- return new Models.FrontendModel({
92
- options: new Models.Option({
93
- key: 'help-center-filters-root',
94
- displayName: 'help-center-filters-root',
95
- type: Models.OptionType.Group,
96
- subOptions,
97
- }),
98
- });
99
- }
100
-
101
- static convertBotMessage(botMessage: HelpCenterClient.IBotMessage): Models.BotMessage {
102
- return new Models.BotMessage({
103
- id: botMessage.id ?? 0,
104
- answer: botMessage.text ?? '',
105
- isGuardrailed: botMessage.isGuardrailed ?? false,
106
- guardFlag: botMessage.guardFlag ?? 'N',
107
- sessionId: botMessage.sessionId ?? 0,
108
- scoredUrls: ConverterToModels.convertScoredUrls(botMessage.scoredUrls),
109
- });
110
- }
111
-
112
- static convertScoredUrls(
113
- scoredUrls?: HelpCenterClient.IScoredUrl[]
114
- ): Models.ScoredUrl[] | undefined {
115
- if (scoredUrls === undefined) {
116
- return;
117
- }
118
- return scoredUrls.map(
119
- url =>
120
- new Models.ScoredUrl({
121
- url: url.url,
122
- score: url.score,
123
- title: url.title,
124
- })
125
- );
126
- }
127
- }
@@ -1,2 +0,0 @@
1
- export type { IChatbotClientSettingsHelpCenter } from './chatbot-api-client';
2
- export { ChatbotApiClient } from './chatbot-api-client';