@servicetitan/titan-chatbot-api 3.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 (160) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts +11 -0
  3. package/dist/api-client/__mocks__/chatbot-api-client.mock.d.ts.map +1 -0
  4. package/dist/api-client/__mocks__/chatbot-api-client.mock.js +47 -0
  5. package/dist/api-client/__mocks__/chatbot-api-client.mock.js.map +1 -0
  6. package/dist/api-client/base/chatbot-api-client.d.ts +27 -0
  7. package/dist/api-client/base/chatbot-api-client.d.ts.map +1 -0
  8. package/dist/api-client/base/chatbot-api-client.js +10 -0
  9. package/dist/api-client/base/chatbot-api-client.js.map +1 -0
  10. package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts +2 -0
  11. package/dist/api-client/help-center/__tests__/converter-from-models.test.d.ts.map +1 -0
  12. package/dist/api-client/help-center/__tests__/converter-from-models.test.js +34 -0
  13. package/dist/api-client/help-center/__tests__/converter-from-models.test.js.map +1 -0
  14. package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts +2 -0
  15. package/dist/api-client/help-center/__tests__/converter-to-models.test.d.ts.map +1 -0
  16. package/dist/api-client/help-center/__tests__/converter-to-models.test.js +82 -0
  17. package/dist/api-client/help-center/__tests__/converter-to-models.test.js.map +1 -0
  18. package/dist/api-client/help-center/chatbot-api-client.d.ts +31 -0
  19. package/dist/api-client/help-center/chatbot-api-client.d.ts.map +1 -0
  20. package/dist/api-client/help-center/chatbot-api-client.js +90 -0
  21. package/dist/api-client/help-center/chatbot-api-client.js.map +1 -0
  22. package/dist/api-client/help-center/converter-from-models.d.ts +13 -0
  23. package/dist/api-client/help-center/converter-from-models.d.ts.map +1 -0
  24. package/dist/api-client/help-center/converter-from-models.js +113 -0
  25. package/dist/api-client/help-center/converter-from-models.js.map +1 -0
  26. package/dist/api-client/help-center/converter-to-models.d.ts +13 -0
  27. package/dist/api-client/help-center/converter-to-models.d.ts.map +1 -0
  28. package/dist/api-client/help-center/converter-to-models.js +95 -0
  29. package/dist/api-client/help-center/converter-to-models.js.map +1 -0
  30. package/dist/api-client/help-center/index.d.ts +2 -0
  31. package/dist/api-client/help-center/index.d.ts.map +1 -0
  32. package/dist/api-client/help-center/index.js +2 -0
  33. package/dist/api-client/help-center/index.js.map +1 -0
  34. package/dist/api-client/help-center/native-client.d.ts +1260 -0
  35. package/dist/api-client/help-center/native-client.d.ts.map +1 -0
  36. package/dist/api-client/help-center/native-client.js +6169 -0
  37. package/dist/api-client/help-center/native-client.js.map +1 -0
  38. package/dist/api-client/index.d.ts +8 -0
  39. package/dist/api-client/index.d.ts.map +1 -0
  40. package/dist/api-client/index.js +8 -0
  41. package/dist/api-client/index.js.map +1 -0
  42. package/dist/api-client/models/__mocks__/models.mock.d.ts +13 -0
  43. package/dist/api-client/models/__mocks__/models.mock.d.ts.map +1 -0
  44. package/dist/api-client/models/__mocks__/models.mock.js +114 -0
  45. package/dist/api-client/models/__mocks__/models.mock.js.map +1 -0
  46. package/dist/api-client/models/index.d.ts +22 -0
  47. package/dist/api-client/models/index.d.ts.map +1 -0
  48. package/dist/api-client/models/index.js +15 -0
  49. package/dist/api-client/models/index.js.map +1 -0
  50. package/dist/api-client/titan-chat/chatbot-api-client.d.ts +34 -0
  51. package/dist/api-client/titan-chat/chatbot-api-client.d.ts.map +1 -0
  52. package/dist/api-client/titan-chat/chatbot-api-client.js +72 -0
  53. package/dist/api-client/titan-chat/chatbot-api-client.js.map +1 -0
  54. package/dist/api-client/titan-chat/index.d.ts +2 -0
  55. package/dist/api-client/titan-chat/index.d.ts.map +1 -0
  56. package/dist/api-client/titan-chat/index.js +2 -0
  57. package/dist/api-client/titan-chat/index.js.map +1 -0
  58. package/dist/api-client/titan-chat/native-client.d.ts +225 -0
  59. package/dist/api-client/titan-chat/native-client.d.ts.map +1 -0
  60. package/dist/api-client/titan-chat/native-client.js +931 -0
  61. package/dist/api-client/titan-chat/native-client.js.map +1 -0
  62. package/dist/api-client/utils/model-utils.d.ts +4 -0
  63. package/dist/api-client/utils/model-utils.d.ts.map +1 -0
  64. package/dist/api-client/utils/model-utils.js +58 -0
  65. package/dist/api-client/utils/model-utils.js.map +1 -0
  66. package/dist/index.d.ts +6 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +7 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/models/chatbot-customizations.d.ts +15 -0
  71. package/dist/models/chatbot-customizations.d.ts.map +1 -0
  72. package/dist/models/chatbot-customizations.js +2 -0
  73. package/dist/models/chatbot-customizations.js.map +1 -0
  74. package/dist/models/index.d.ts +2 -0
  75. package/dist/models/index.d.ts.map +1 -0
  76. package/dist/models/index.js +2 -0
  77. package/dist/models/index.js.map +1 -0
  78. package/dist/stores/__tests__/chatbot-ui-backend.store.test.d.ts +2 -0
  79. package/dist/stores/__tests__/chatbot-ui-backend.store.test.d.ts.map +1 -0
  80. package/dist/stores/__tests__/chatbot-ui-backend.store.test.js +341 -0
  81. package/dist/stores/__tests__/chatbot-ui-backend.store.test.js.map +1 -0
  82. package/dist/stores/__tests__/chatbot-ui.store.test.d.ts +2 -0
  83. package/dist/stores/__tests__/chatbot-ui.store.test.d.ts.map +1 -0
  84. package/dist/stores/__tests__/chatbot-ui.store.test.js +166 -0
  85. package/dist/stores/__tests__/chatbot-ui.store.test.js.map +1 -0
  86. package/dist/stores/__tests__/filter.store.test.d.ts +2 -0
  87. package/dist/stores/__tests__/filter.store.test.d.ts.map +1 -0
  88. package/dist/stores/__tests__/filter.store.test.js +316 -0
  89. package/dist/stores/__tests__/filter.store.test.js.map +1 -0
  90. package/dist/stores/__tests__/initialize.store.test.d.ts +2 -0
  91. package/dist/stores/__tests__/initialize.store.test.d.ts.map +1 -0
  92. package/dist/stores/__tests__/initialize.store.test.js +54 -0
  93. package/dist/stores/__tests__/initialize.store.test.js.map +1 -0
  94. package/dist/stores/chatbot-ui-backend.store.d.ts +61 -0
  95. package/dist/stores/chatbot-ui-backend.store.d.ts.map +1 -0
  96. package/dist/stores/chatbot-ui-backend.store.js +396 -0
  97. package/dist/stores/chatbot-ui-backend.store.js.map +1 -0
  98. package/dist/stores/chatbot-ui.store.d.ts +25 -0
  99. package/dist/stores/chatbot-ui.store.d.ts.map +1 -0
  100. package/dist/stores/chatbot-ui.store.js +87 -0
  101. package/dist/stores/chatbot-ui.store.js.map +1 -0
  102. package/dist/stores/filter.store.d.ts +30 -0
  103. package/dist/stores/filter.store.d.ts.map +1 -0
  104. package/dist/stores/filter.store.js +334 -0
  105. package/dist/stores/filter.store.js.map +1 -0
  106. package/dist/stores/index.d.ts +4 -0
  107. package/dist/stores/index.d.ts.map +1 -0
  108. package/dist/stores/index.js +4 -0
  109. package/dist/stores/index.js.map +1 -0
  110. package/dist/stores/initialize.store.d.ts +17 -0
  111. package/dist/stores/initialize.store.d.ts.map +1 -0
  112. package/dist/stores/initialize.store.js +98 -0
  113. package/dist/stores/initialize.store.js.map +1 -0
  114. package/dist/utils/__tests__/axios-utils.test.d.ts +2 -0
  115. package/dist/utils/__tests__/axios-utils.test.d.ts.map +1 -0
  116. package/dist/utils/__tests__/axios-utils.test.js +33 -0
  117. package/dist/utils/__tests__/axios-utils.test.js.map +1 -0
  118. package/dist/utils/axios-utils.d.ts +5 -0
  119. package/dist/utils/axios-utils.d.ts.map +1 -0
  120. package/dist/utils/axios-utils.js +23 -0
  121. package/dist/utils/axios-utils.js.map +1 -0
  122. package/dist/utils/test-utils.d.ts +5 -0
  123. package/dist/utils/test-utils.d.ts.map +1 -0
  124. package/dist/utils/test-utils.js +17 -0
  125. package/dist/utils/test-utils.js.map +1 -0
  126. package/package.json +45 -0
  127. package/src/api-client/__mocks__/chatbot-api-client.mock.ts +11 -0
  128. package/src/api-client/base/chatbot-api-client.ts +33 -0
  129. package/src/api-client/help-center/__tests__/converter-from-models.test.ts +41 -0
  130. package/src/api-client/help-center/__tests__/converter-to-models.test.ts +89 -0
  131. package/src/api-client/help-center/chatbot-api-client.ts +107 -0
  132. package/src/api-client/help-center/converter-from-models.ts +132 -0
  133. package/src/api-client/help-center/converter-to-models.ts +124 -0
  134. package/src/api-client/help-center/index.ts +1 -0
  135. package/src/api-client/help-center/native-client.ts +5662 -0
  136. package/src/api-client/index.ts +12 -0
  137. package/src/api-client/models/__mocks__/models.mock.ts +141 -0
  138. package/src/api-client/models/index.ts +48 -0
  139. package/src/api-client/titan-chat/chatbot-api-client.ts +77 -0
  140. package/src/api-client/titan-chat/index.ts +1 -0
  141. package/src/api-client/titan-chat/native-client.ts +826 -0
  142. package/src/api-client/utils/model-utils.ts +68 -0
  143. package/src/cypress.d.ts +10 -0
  144. package/src/index.ts +6 -0
  145. package/src/models/chatbot-customizations.ts +16 -0
  146. package/src/models/index.ts +1 -0
  147. package/src/stores/__tests__/chatbot-ui-backend.store.test.ts +426 -0
  148. package/src/stores/__tests__/chatbot-ui.store.test.ts +196 -0
  149. package/src/stores/__tests__/filter.store.test.ts +363 -0
  150. package/src/stores/__tests__/initialize.store.test.ts +73 -0
  151. package/src/stores/chatbot-ui-backend.store.ts +401 -0
  152. package/src/stores/chatbot-ui.store.ts +82 -0
  153. package/src/stores/filter.store.ts +250 -0
  154. package/src/stores/index.ts +12 -0
  155. package/src/stores/initialize.store.ts +62 -0
  156. package/src/utils/__tests__/axios-utils.test.ts +40 -0
  157. package/src/utils/axios-utils.ts +25 -0
  158. package/src/utils/test-utils.ts +22 -0
  159. package/tsconfig.json +19 -0
  160. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,12 @@
1
+ export * as ApiClientTitanChat from './titan-chat';
2
+ export * as ApiClientHelpCenter from './help-center';
3
+ export * as Models from './models';
4
+ export * as ModelsMocks from './models/__mocks__/models.mock';
5
+ export * as ClientMocks from './__mocks__/chatbot-api-client.mock';
6
+ export * as ModelsUtils from './utils/model-utils';
7
+ export {
8
+ IChatbotClientSettings,
9
+ IChatbotApiClient,
10
+ CHATBOT_CLIENT_SETTINGS,
11
+ CHATBOT_API_CLIENT,
12
+ } from './base/chatbot-api-client';
@@ -0,0 +1,141 @@
1
+ import {
2
+ ChatMessageModelBase,
3
+ ChatMessageState,
4
+ ChatParticipantIcon,
5
+ } from '@servicetitan/titan-chat-ui-common';
6
+ import { Models, ModelsUtils } from '../..';
7
+
8
+ export const mockOption = (overrides?: Models.IOption) =>
9
+ new Models.Option({
10
+ key: 'mock_key',
11
+ displayName: 'Mock Option',
12
+ type: Models.OptionType.Group,
13
+ ...overrides,
14
+ });
15
+
16
+ export const mockFrontendModel = (): Models.FrontendModel => {
17
+ const opt = (
18
+ key: string,
19
+ displayName: string | undefined,
20
+ type: Models.OptionType,
21
+ subOptions?: Models.Option[]
22
+ ) =>
23
+ mockOption({
24
+ key,
25
+ displayName,
26
+ type,
27
+ subOptions,
28
+ });
29
+
30
+ const sources = opt('Sources', 'Sources', Models.OptionType.Group, [
31
+ opt('KnowledgeBase', 'Knowledge Base', Models.OptionType.Selectable, [
32
+ opt('ContentTypes', 'Content Types', Models.OptionType.Group, [
33
+ opt('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),
34
+ opt('kbFaq', 'FAQ', Models.OptionType.Selectable),
35
+ opt('kbHowTo', 'How To', Models.OptionType.Selectable),
36
+ ]),
37
+ opt('ProductAreas', 'Product Areas', Models.OptionType.Group, [
38
+ opt('Call Booking', 'Call Booking', Models.OptionType.Selectable),
39
+ opt('Marketing', 'Marketing', Models.OptionType.Selectable),
40
+ opt('Marketing Pro', 'Marketing Pro', Models.OptionType.Selectable),
41
+ ]),
42
+ ]),
43
+ opt('Jarvis', 'Jarvis', Models.OptionType.Selectable, [
44
+ opt('ContentTypes', 'Content Types', Models.OptionType.Group, [
45
+ opt('kbReleaseNotes', 'Release Notes', Models.OptionType.Selectable),
46
+ opt('xxx', 'Xxx', Models.OptionType.Selectable),
47
+ opt('yyy', 'Yyy', Models.OptionType.Selectable),
48
+ ]),
49
+ ]),
50
+ ]);
51
+ return new Models.FrontendModel({
52
+ options: opt('customer-knowledge', undefined, Models.OptionType.Group, [sources]),
53
+ });
54
+ };
55
+
56
+ export const mockSession = (overrides?: Partial<Models.ISession>): Models.Session =>
57
+ new Models.Session({
58
+ id: 1,
59
+ data: {
60
+ createdUtc: new Date('2021-01-01T00:00:00Z').toISOString(),
61
+ closedUtc: new Date('2021-01-02T00:00:00Z').toISOString(),
62
+ botId: 'bot-id',
63
+ instance: 'instance',
64
+ category: 'category',
65
+ subCategory: 'sub-category',
66
+ },
67
+ ...overrides,
68
+ });
69
+
70
+ export const mockFeedback = (overrides?: Partial<Models.IFeedback>): Models.Feedback =>
71
+ new Models.Feedback({
72
+ linkUrl: 'https://example.com',
73
+ sessionId: 1,
74
+ messageId: 1,
75
+ rating: Models.FeedbackRatings.ThumbsUp,
76
+ description: 'description',
77
+ options: undefined,
78
+ ...overrides,
79
+ });
80
+
81
+ export const mockSelections = (overrides?: Models.Selections): Models.Selections | undefined =>
82
+ new Models.Selections({
83
+ ...ModelsUtils.createSelectionsModel([mockFrontendModel().options], {
84
+ Sources: ['KnowledgeBase', 'Jarvis'],
85
+ ContentTypes: ['kbReleaseNotes', 'kbFaq', 'xxx'],
86
+ }),
87
+ ...overrides,
88
+ });
89
+
90
+ export const mockUserMessage = (overrides?: Partial<Models.IUserMessage>): Models.UserMessage =>
91
+ new Models.UserMessage({
92
+ sessionId: 1,
93
+ question: 'question',
94
+ experience: Models.Experience.MultiTurn,
95
+ selections: mockSelections(),
96
+ context: {
97
+ key1: 'value1',
98
+ key2: 'value2',
99
+ },
100
+ ...overrides,
101
+ });
102
+
103
+ export const mockScoredUrl = (overrides?: Partial<Models.IScoredUrl>): Models.ScoredUrl =>
104
+ new Models.ScoredUrl({
105
+ url: 'https://example.com',
106
+ score: 0.9,
107
+ title: 'Example Title',
108
+ ...overrides,
109
+ });
110
+
111
+ export const mockScoredUrls = (): Models.ScoredUrl[] => [
112
+ mockScoredUrl({ url: 'https://example1.com', score: 0.95, title: 'Example 1' }),
113
+ mockScoredUrl({ url: 'https://example2.com', score: 0.85, title: 'Example 2' }),
114
+ ];
115
+
116
+ export const mockBotMessage = (overrides?: Partial<Models.IBotMessage>): Models.BotMessage =>
117
+ new Models.BotMessage({
118
+ id: 1,
119
+ answer: 'answer',
120
+ sessionId: 1,
121
+ isGuardrailed: false,
122
+ scoredUrls: undefined,
123
+ guardFlag: 'N',
124
+ ...overrides,
125
+ });
126
+
127
+ export const mockChatMessageModel = <T extends ChatMessageModelBase>(overrides?: Partial<T>): T => {
128
+ const result = {
129
+ id: '1',
130
+ timestamp: new Date('2021-01-01T00:00:00Z'),
131
+ state: ChatMessageState.Delivered,
132
+ participant: {
133
+ isAgent: true,
134
+ name: 'Agent Name',
135
+ icon: ChatParticipantIcon.Initials,
136
+ },
137
+ type: 'message',
138
+ ...overrides,
139
+ };
140
+ return result as T;
141
+ };
@@ -0,0 +1,48 @@
1
+ /* eslint-disable no-restricted-imports */
2
+ import { IBotMessage, IFeedback, IUserMessage } from '../titan-chat/native-client';
3
+ export {
4
+ IUserMessage,
5
+ Selections,
6
+ FeedbackOptions,
7
+ FeedbackRatings,
8
+ Session,
9
+ ApiException,
10
+ Feedback,
11
+ Option,
12
+ IFeedback,
13
+ FrontendModel,
14
+ UserMessage,
15
+ IFrontendModel,
16
+ IOption,
17
+ OptionType,
18
+ ScoredUrl,
19
+ IScoredUrl,
20
+ ISelections,
21
+ ISession,
22
+ Experience,
23
+ IBotMessage,
24
+ BotMessage,
25
+ } from '../titan-chat/native-client';
26
+
27
+ export interface IBotMessageWithFeedback extends IBotMessage {
28
+ isFeedbackSaved?: boolean;
29
+ feedback?: IFeedback;
30
+ }
31
+
32
+ export interface ChatbotAskBotResult {
33
+ question: IUserMessage;
34
+ answer: IBotMessage;
35
+ }
36
+
37
+ export enum BotArea {
38
+ SupportFlow = 'SupportFlow',
39
+ Search = 'Search',
40
+ FloatingChat = 'FloatingChat',
41
+ }
42
+
43
+ export enum ChatbotFeedbackState {
44
+ None,
45
+ Sent,
46
+ Success,
47
+ Failure,
48
+ }
@@ -0,0 +1,77 @@
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
+ // eslint-disable-next-line no-restricted-imports
11
+ import { Client } from './native-client';
12
+
13
+ /**
14
+ * Settings for the chatbot client, which includes a factory for constructor parameters, and additional settings
15
+ * like version and clientId which are used in the API calls.
16
+ */
17
+ export interface IChatbotClientSettingsTitanChat extends IChatbotClientSettings {
18
+ constructorParametersFactory: () => {
19
+ baseUrl?: FirstParameterType<typeof Client>;
20
+ http?: SecondParameterType<typeof Client>;
21
+ };
22
+ version: string;
23
+ clientId: string;
24
+ }
25
+
26
+ /**
27
+ * Client adapter adopts the generated titan chatbot client to the generic IChatbotApiClient interface.
28
+ * Contains client-specific methods for interacting with the titan chatbot API.
29
+ */
30
+ @injectable()
31
+ export class ChatbotApiClient implements IChatbotApiClient {
32
+ private readonly client: Client;
33
+
34
+ get version(): string {
35
+ return this.chatbotApiClientSettings.version;
36
+ }
37
+
38
+ get clientId(): string {
39
+ return this.chatbotApiClientSettings.clientId;
40
+ }
41
+
42
+ constructor(
43
+ @inject(CHATBOT_CLIENT_SETTINGS)
44
+ private readonly chatbotApiClientSettings: IChatbotClientSettingsTitanChat
45
+ ) {
46
+ const { baseUrl, http } = this.chatbotApiClientSettings.constructorParametersFactory();
47
+ this.client = new Client(baseUrl, http);
48
+ }
49
+
50
+ postRefreshAuthCookies(_?: AbortSignal): Promise<boolean> {
51
+ return Promise.resolve<boolean>(true);
52
+ }
53
+
54
+ postFeedback(body: Models.Feedback, abortSignal?: AbortSignal) {
55
+ return this.client.feedback(this.version, this.clientId, body, abortSignal);
56
+ }
57
+
58
+ postMessage(body: Models.UserMessage, abortSignal?: AbortSignal) {
59
+ return this.client.message(this.version, this.clientId, body, abortSignal);
60
+ }
61
+
62
+ getOptions(abortSignal?: AbortSignal): Promise<Models.FrontendModel> {
63
+ return this.client.options(this.version, this.clientId, abortSignal);
64
+ }
65
+
66
+ async postSession(body: Models.Session, abortSignal?: AbortSignal) {
67
+ return this.client.sessionPOST(this.version, this.clientId, body, abortSignal);
68
+ }
69
+
70
+ patchSession(body: Models.Session, abortSignal?: AbortSignal) {
71
+ return this.client.sessionPATCH(this.version, this.clientId, body, abortSignal);
72
+ }
73
+
74
+ deleteSession(body: Models.Session, abortSignal?: AbortSignal) {
75
+ return this.client.sessionDELETE(this.version, this.clientId, body, abortSignal);
76
+ }
77
+ }
@@ -0,0 +1 @@
1
+ export { ChatbotApiClient, IChatbotClientSettingsTitanChat } from './chatbot-api-client';