@thoughtspot/visual-embed-sdk 1.39.2-alpha.1 → 1.39.2-spotter-agent

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 (125) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/config.spec.js +9 -0
  3. package/cjs/src/config.spec.js.map +1 -1
  4. package/cjs/src/embed/bodyless-conversation.d.ts +19 -7
  5. package/cjs/src/embed/bodyless-conversation.d.ts.map +1 -1
  6. package/cjs/src/embed/bodyless-conversation.js +24 -4
  7. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  8. package/cjs/src/embed/bodyless-conversation.spec.js +8 -190
  9. package/cjs/src/embed/bodyless-conversation.spec.js.map +1 -1
  10. package/cjs/src/embed/conversation.d.ts +2 -60
  11. package/cjs/src/embed/conversation.d.ts.map +1 -1
  12. package/cjs/src/embed/conversation.js +1 -9
  13. package/cjs/src/embed/conversation.js.map +1 -1
  14. package/cjs/src/embed/conversation.spec.js +0 -102
  15. package/cjs/src/embed/conversation.spec.js.map +1 -1
  16. package/cjs/src/errors.d.ts +1 -0
  17. package/cjs/src/errors.d.ts.map +1 -1
  18. package/cjs/src/errors.js +1 -0
  19. package/cjs/src/errors.js.map +1 -1
  20. package/cjs/src/pages/embed-test.page.d.ts +8 -0
  21. package/cjs/src/pages/embed-test.page.d.ts.map +1 -0
  22. package/cjs/src/pages/embed-test.page.js +20 -0
  23. package/cjs/src/pages/embed-test.page.js.map +1 -0
  24. package/cjs/src/pages/home.page.d.ts +6 -0
  25. package/cjs/src/pages/home.page.d.ts.map +1 -0
  26. package/cjs/src/pages/home.page.js +12 -0
  27. package/cjs/src/pages/home.page.js.map +1 -0
  28. package/cjs/src/pages/login.page.d.ts +15 -0
  29. package/cjs/src/pages/login.page.d.ts.map +1 -0
  30. package/cjs/src/pages/login.page.js +22 -0
  31. package/cjs/src/pages/login.page.js.map +1 -0
  32. package/cjs/src/react/all-types-export.d.ts +1 -1
  33. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  34. package/cjs/src/react/all-types-export.js +3 -2
  35. package/cjs/src/react/all-types-export.js.map +1 -1
  36. package/cjs/src/react/index.d.ts +71 -20
  37. package/cjs/src/react/index.d.ts.map +1 -1
  38. package/cjs/src/react/index.js +79 -42
  39. package/cjs/src/react/index.js.map +1 -1
  40. package/cjs/src/react/index.spec.js +436 -100
  41. package/cjs/src/react/index.spec.js.map +1 -1
  42. package/cjs/src/tests/auth.test.d.ts +1 -0
  43. package/cjs/src/tests/auth.test.d.ts.map +1 -0
  44. package/cjs/src/tests/auth.test.js +1 -0
  45. package/cjs/src/tests/auth.test.js.map +1 -0
  46. package/cjs/src/tests/e2e/auth.spec.d.ts +2 -0
  47. package/cjs/src/tests/e2e/auth.spec.d.ts.map +1 -0
  48. package/cjs/src/tests/e2e/auth.spec.js +54 -0
  49. package/cjs/src/tests/e2e/auth.spec.js.map +1 -0
  50. package/cjs/src/utils/graphql/nlsService/conversation-service.d.ts.map +1 -1
  51. package/cjs/src/utils/graphql/nlsService/conversation-service.js +2 -0
  52. package/cjs/src/utils/graphql/nlsService/conversation-service.js.map +1 -1
  53. package/cjs/src/utils.spec.js +25 -0
  54. package/cjs/src/utils.spec.js.map +1 -1
  55. package/dist/index-2QHwuA-G.js +7371 -0
  56. package/dist/{index-DeFzsyFF.js → index-Cj4BVGHL.js} +1 -1
  57. package/dist/{index-UuEbsISo.js → index-DUaG1OG2.js} +1 -1
  58. package/dist/{index-CmEQfuE3.js → index-DnIvX1FR.js} +1 -1
  59. package/dist/{index-Dpf0rd6w.js → index-Fhk1V_Gw.js} +1 -1
  60. package/dist/index-OuiZF3zE.js +7371 -0
  61. package/dist/src/embed/bodyless-conversation.d.ts +19 -7
  62. package/dist/src/embed/bodyless-conversation.d.ts.map +1 -1
  63. package/dist/src/embed/conversation.d.ts +2 -60
  64. package/dist/src/embed/conversation.d.ts.map +1 -1
  65. package/dist/src/errors.d.ts +1 -0
  66. package/dist/src/errors.d.ts.map +1 -1
  67. package/dist/src/react/all-types-export.d.ts +1 -1
  68. package/dist/src/react/all-types-export.d.ts.map +1 -1
  69. package/dist/src/react/index.d.ts +71 -20
  70. package/dist/src/react/index.d.ts.map +1 -1
  71. package/dist/src/utils/graphql/nlsService/conversation-service.d.ts.map +1 -1
  72. package/dist/tsembed-react.es.js +112 -63
  73. package/dist/tsembed-react.js +112 -61
  74. package/dist/tsembed.es.js +29 -15
  75. package/dist/tsembed.js +28 -14
  76. package/dist/visual-embed-sdk-react-full.d.ts +90 -85
  77. package/dist/visual-embed-sdk-react.d.ts +90 -85
  78. package/dist/visual-embed-sdk.d.ts +20 -66
  79. package/lib/package.json +1 -1
  80. package/lib/src/config.spec.js +9 -0
  81. package/lib/src/config.spec.js.map +1 -1
  82. package/lib/src/embed/bodyless-conversation.d.ts +19 -7
  83. package/lib/src/embed/bodyless-conversation.d.ts.map +1 -1
  84. package/lib/src/embed/bodyless-conversation.js +23 -4
  85. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  86. package/lib/src/embed/bodyless-conversation.spec.js +9 -191
  87. package/lib/src/embed/bodyless-conversation.spec.js.map +1 -1
  88. package/lib/src/embed/conversation.d.ts +2 -60
  89. package/lib/src/embed/conversation.d.ts.map +1 -1
  90. package/lib/src/embed/conversation.js +2 -10
  91. package/lib/src/embed/conversation.js.map +1 -1
  92. package/lib/src/embed/conversation.spec.js +2 -104
  93. package/lib/src/embed/conversation.spec.js.map +1 -1
  94. package/lib/src/errors.d.ts +1 -0
  95. package/lib/src/errors.d.ts.map +1 -1
  96. package/lib/src/errors.js +1 -0
  97. package/lib/src/errors.js.map +1 -1
  98. package/lib/src/react/all-types-export.d.ts +1 -1
  99. package/lib/src/react/all-types-export.d.ts.map +1 -1
  100. package/lib/src/react/all-types-export.js +1 -1
  101. package/lib/src/react/all-types-export.js.map +1 -1
  102. package/lib/src/react/index.d.ts +71 -20
  103. package/lib/src/react/index.d.ts.map +1 -1
  104. package/lib/src/react/index.js +79 -43
  105. package/lib/src/react/index.js.map +1 -1
  106. package/lib/src/react/index.spec.js +439 -103
  107. package/lib/src/react/index.spec.js.map +1 -1
  108. package/lib/src/utils/graphql/nlsService/conversation-service.d.ts.map +1 -1
  109. package/lib/src/utils/graphql/nlsService/conversation-service.js +2 -0
  110. package/lib/src/utils/graphql/nlsService/conversation-service.js.map +1 -1
  111. package/lib/src/utils.spec.js +26 -1
  112. package/lib/src/utils.spec.js.map +1 -1
  113. package/lib/src/visual-embed-sdk.d.ts +21 -67
  114. package/package.json +1 -1
  115. package/src/config.spec.ts +11 -0
  116. package/src/embed/bodyless-conversation.spec.ts +9 -203
  117. package/src/embed/bodyless-conversation.ts +24 -10
  118. package/src/embed/conversation.spec.ts +5 -131
  119. package/src/embed/conversation.ts +10 -82
  120. package/src/errors.ts +1 -0
  121. package/src/react/all-types-export.ts +2 -1
  122. package/src/react/index.spec.tsx +556 -157
  123. package/src/react/index.tsx +117 -51
  124. package/src/utils/graphql/nlsService/conversation-service.ts +2 -0
  125. package/src/utils.spec.ts +29 -0
@@ -13,11 +13,6 @@ export interface SpotterAgentEmbedViewConfig extends Omit<BaseViewConfig, 'prima
13
13
  * The ID of the worksheet to use for the conversation.
14
14
  */
15
15
  worksheetId: string;
16
-
17
- /**
18
- * Optional CSS class name to add to the container div.
19
- */
20
- containerClassName?: string;
21
16
  }
22
17
 
23
18
  /**
@@ -29,14 +24,14 @@ export interface SpotterAgentEmbedViewConfig extends Omit<BaseViewConfig, 'prima
29
24
  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
30
25
  export interface BodylessConversationViewConfig extends SpotterAgentEmbedViewConfig {}
31
26
 
32
- interface SpotterAgentMessageViewConfig extends SpotterAgentEmbedViewConfig {
27
+ export interface SpotterAgentMessageViewConfig extends SpotterAgentEmbedViewConfig {
33
28
  sessionId: string;
34
29
  genNo: number;
35
30
  acSessionId: string;
36
31
  acGenNo: number;
37
32
  }
38
33
 
39
- class ConversationMessage extends TsEmbed {
34
+ export class ConversationMessage extends TsEmbed {
40
35
  constructor(container: HTMLElement, protected viewConfig: SpotterAgentMessageViewConfig) {
41
36
  viewConfig.embedComponentType = 'bodyless-conversation';
42
37
  super(container, viewConfig);
@@ -116,9 +111,6 @@ export class SpotterAgentEmbed {
116
111
  }
117
112
 
118
113
  const container = document.createElement('div');
119
- if (this.viewConfig.containerClassName) {
120
- container.className = this.viewConfig.containerClassName;
121
- }
122
114
 
123
115
  const embed = new ConversationMessage(container, {
124
116
  ...this.viewConfig,
@@ -130,6 +122,28 @@ export class SpotterAgentEmbed {
130
122
  await embed.render();
131
123
  return { container, viz: embed };
132
124
  }
125
+
126
+ /**
127
+ * Send a message to the conversation service and return only the data.
128
+ * @param userMessage - The message to send to the conversation service.
129
+ * @returns The data from the conversation service.
130
+ */
131
+ public async sendMessageData(userMessage: string) {
132
+ try {
133
+ const { data, error } = await this.conversationService.sendMessage(userMessage);
134
+ if (error) {
135
+ return { error };
136
+ }
137
+ return { data: {
138
+ sessionId: data.sessionId,
139
+ genNo: data.genNo,
140
+ acSessionId: data.stateKey.transactionId,
141
+ acGenNo: data.stateKey.generationNumber,
142
+ } };
143
+ } catch (error) {
144
+ return { error: error as Error };
145
+ }
146
+ }
133
147
  }
134
148
 
135
149
  /**
@@ -1,8 +1,10 @@
1
- import { SpotterEmbed, SpotterEmbedViewConfig, ConversationEmbed } from './conversation';
2
- import { TsEmbed } from './ts-embed';
1
+ import {
2
+ SpotterEmbed,
3
+ SpotterEmbedViewConfig,
4
+ } from './conversation';
3
5
  import * as authInstance from '../auth';
4
6
  import { Action, init } from '../index';
5
- import { AuthType, Param, RuntimeFilterOp } from '../types';
7
+ import { AuthType, Param } from '../types';
6
8
  import {
7
9
  getDocumentBody,
8
10
  getIFrameSrc,
@@ -178,132 +180,4 @@ describe('ConversationEmbed', () => {
178
180
  `http://${thoughtSpotHost}/v2/?${defaultParams}&${Param.DisableActions}=[%22${Action.InConversationTraining}%22]&${Param.DisableActionReason}=${disabledReason}&isSpotterExperienceEnabled=true&enableDataPanelV2=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
179
181
  );
180
182
  });
181
-
182
- it('should render the conversation embed with runtime filters', async () => {
183
- const viewConfig: SpotterEmbedViewConfig = {
184
- worksheetId: 'worksheetId',
185
- searchOptions: {
186
- searchQuery: 'searchQuery',
187
- },
188
- runtimeFilters: [
189
- {
190
- columnName: 'revenue',
191
- operator: RuntimeFilterOp.EQ,
192
- values: [1000],
193
- },
194
- ],
195
- };
196
-
197
- const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
198
- await conversationEmbed.render();
199
- expectUrlMatchesWithParams(
200
- getIFrameSrc(),
201
- `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&col1=revenue&op1=EQ&val1=1000#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
202
- );
203
- });
204
-
205
- it('should render the conversation embed with runtime parameters', async () => {
206
- const viewConfig: SpotterEmbedViewConfig = {
207
- worksheetId: 'worksheetId',
208
- searchOptions: {
209
- searchQuery: 'searchQuery',
210
- },
211
- runtimeParameters: [
212
- {
213
- name: 'Date Range',
214
- value: '30',
215
- },
216
- ],
217
- };
218
-
219
- const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
220
- await conversationEmbed.render();
221
- expectUrlMatchesWithParams(
222
- getIFrameSrc(),
223
- `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&param1=Date%20Range&paramVal1=30#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
224
- );
225
- });
226
-
227
- it('should render the conversation embed with runtime parameters excluded from URL', async () => {
228
- const viewConfig: SpotterEmbedViewConfig = {
229
- worksheetId: 'worksheetId',
230
- searchOptions: {
231
- searchQuery: 'searchQuery',
232
- },
233
- runtimeParameters: [
234
- {
235
- name: 'Date Range',
236
- value: '30',
237
- },
238
- {
239
- name: 'Region',
240
- value: 'North America',
241
- },
242
- ],
243
- excludeRuntimeParametersfromURL: true,
244
- };
245
-
246
- const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
247
- await conversationEmbed.render();
248
- expectUrlMatchesWithParams(
249
- getIFrameSrc(),
250
- `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
251
- );
252
- });
253
-
254
- it('should render the conversation embed with both runtime filters and parameters', async () => {
255
- const viewConfig: SpotterEmbedViewConfig = {
256
- worksheetId: 'worksheetId',
257
- searchOptions: {
258
- searchQuery: 'searchQuery',
259
- },
260
- runtimeParameters: [
261
- {
262
- name: 'Date Range',
263
- value: '30',
264
- },
265
- ],
266
- runtimeFilters: [
267
- {
268
- columnName: 'revenue',
269
- operator: RuntimeFilterOp.EQ,
270
- values: [1000],
271
- },
272
- ],
273
- excludeRuntimeParametersfromURL: false,
274
- excludeRuntimeFiltersfromURL: false,
275
- };
276
-
277
- const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
278
- await conversationEmbed.render();
279
- expectUrlMatchesWithParams(
280
- getIFrameSrc(),
281
- `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&col1=revenue&op1=EQ&val1=1000&param1=Date%20Range&paramVal1=30#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
282
- );
283
- });
284
-
285
- it('should ensure deprecated ConversationEmbed class maintains same functionality as SpotterEmbed', async () => {
286
- const viewConfig: SpotterEmbedViewConfig = {
287
- worksheetId: 'worksheetId',
288
- searchOptions: {
289
- searchQuery: 'searchQuery',
290
- },
291
- runtimeParameters: [
292
- {
293
- name: 'Date Range',
294
- value: '30',
295
- },
296
- ],
297
- };
298
-
299
- // Test with deprecated class
300
- const conversationEmbed = new ConversationEmbed(getRootEl(), viewConfig);
301
- await conversationEmbed.render();
302
-
303
- // Verify it generates the same URL structure as SpotterEmbed
304
- expectUrlMatchesWithParams(
305
- getIFrameSrc(),
306
- `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&param1=Date%20Range&paramVal1=30#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
307
- );
308
- });
309
183
  });
@@ -1,10 +1,10 @@
1
1
  import isUndefined from 'lodash/isUndefined';
2
2
  import { ERROR_MESSAGE } from '../errors';
3
- import { Param, BaseViewConfig, RuntimeFilter, RuntimeParameter } from '../types';
3
+ import { Param, BaseViewConfig } from '../types';
4
4
  import { TsEmbed } from './ts-embed';
5
- import { getQueryParamString, getFilterQuery, getRuntimeParameters } from '../utils';
5
+ import { getQueryParamString } from '../utils';
6
6
 
7
- /**
7
+ /**
8
8
  * Configuration for search options
9
9
  */
10
10
  export interface SearchOptions {
@@ -20,8 +20,7 @@ export interface SearchOptions {
20
20
  */
21
21
  export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAction'> {
22
22
  /**
23
- * The ID of the data source object. For example, Model, View, or Table. Spotter uses
24
- * this object to query data and generate Answers.
23
+ * The ID of the data source object. For example, Model, View, or Table. Spotter uses this object to query data and generate Answers.
25
24
  */
26
25
  worksheetId: string;
27
26
  /**
@@ -31,7 +30,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
31
30
  /**
32
31
  * disableSourceSelection : Disables data source selection
33
32
  * but still display the selected data source.
34
- *
33
+ *
35
34
  * Supported embed types: `SpotterEmbed`
36
35
  * @example
37
36
  * ```js
@@ -45,7 +44,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
45
44
  disableSourceSelection?: boolean;
46
45
  /**
47
46
  * hideSourceSelection : Hide data source selection
48
- *
47
+ *
49
48
  * Supported embed types: `SpotterEmbed`
50
49
  * @example
51
50
  * ```js
@@ -59,7 +58,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
59
58
  hideSourceSelection?: boolean;
60
59
  /**
61
60
  * Flag to control Data panel experience
62
- *
61
+ *
63
62
  * Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed`
64
63
  * @default false
65
64
  * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.4.0.cl
@@ -77,7 +76,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
77
76
  * showSpotterLimitations : show limitation text
78
77
  * of the spotter underneath the chat input.
79
78
  * default is false.
80
- *
79
+ *
81
80
  * Supported embed types: `SpotterEmbed`
82
81
  * @example
83
82
  * ```js
@@ -92,7 +91,7 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
92
91
  /**
93
92
  * hideSampleQuestions : Hide sample questions on
94
93
  * the initial screen of the conversation.
95
- *
94
+ *
96
95
  * Supported embed types: `SpotterEmbed`
97
96
  * @example
98
97
  * ```js
@@ -104,63 +103,6 @@ export interface SpotterEmbedViewConfig extends Omit<BaseViewConfig, 'primaryAct
104
103
  * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl
105
104
  */
106
105
  hideSampleQuestions?: boolean;
107
- /**
108
- * The list of runtime filters to apply to a search Answer,
109
- * visualization, or Liveboard.
110
- *
111
- * Supported embed types: `SpotterEmbed`
112
- * @example
113
- * ```js
114
- * const embed = new SpotterEmbed('#tsEmbed', {
115
- * ... // other embed view config
116
- * runtimeFilters: [
117
- * {
118
- * columnName: 'value',
119
- * operator: RuntimeFilterOp.EQ,
120
- * values: ['string' | 123 | true],
121
- * },
122
- * ],
123
- * })
124
- * ```
125
- */
126
- runtimeFilters?: RuntimeFilter[];
127
- /**
128
- * Flag to control whether runtime filters should be included in the URL.
129
- * If true, filters will be passed via app initialization payload instead.
130
- * If false/undefined, filters will be added to URL (default behavior).
131
- *
132
- * Supported embed types: `SpotterEmbed`
133
- * @default false
134
- */
135
- excludeRuntimeFiltersfromURL?: boolean;
136
- /**
137
- * The list of runtime parameters to apply to the conversation.
138
- *
139
- * Supported embed types: `SpotterEmbed`
140
- * @example
141
- * ```js
142
- * const embed = new SpotterEmbed('#tsEmbed', {
143
- * ... // other embed view config
144
- * runtimeParameters: [
145
- * {
146
- * name: 'Parameter Name',
147
- * value: 'Parameter Value',
148
- * },
149
- * ],
150
- * })
151
- * ```
152
- */
153
- runtimeParameters?: RuntimeParameter[];
154
- /**
155
- * Flag to control whether runtime parameters should be included in the URL.
156
- * If true, parameters will be passed via app initialization payload instead.
157
- * If false/undefined, parameters will be added to URL (default behavior).
158
- *
159
- * Supported embed types: `SpotterEmbed`
160
- * @default false
161
- *
162
- */
163
- excludeRuntimeParametersfromURL?: boolean;
164
106
  }
165
107
 
166
108
  /**
@@ -202,10 +144,6 @@ export class SpotterEmbed extends TsEmbed {
202
144
  dataPanelV2,
203
145
  showSpotterLimitations,
204
146
  hideSampleQuestions,
205
- runtimeFilters,
206
- excludeRuntimeFiltersfromURL,
207
- runtimeParameters,
208
- excludeRuntimeParametersfromURL,
209
147
  } = this.viewConfig;
210
148
  const path = 'insights/conv-assist';
211
149
  if (!worksheetId) {
@@ -237,21 +175,11 @@ export class SpotterEmbed extends TsEmbed {
237
175
  if (queryParamsString) {
238
176
  query = `?${queryParamsString}`;
239
177
  }
240
-
241
- const filterQuery = getFilterQuery(runtimeFilters || []);
242
- if (filterQuery && !excludeRuntimeFiltersfromURL) {
243
- query += `&${filterQuery}`;
244
- }
245
-
246
- const parameterQuery = getRuntimeParameters(runtimeParameters || []);
247
- if (parameterQuery && !excludeRuntimeParametersfromURL) {
248
- query += `&${parameterQuery}`;
249
- }
250
-
251
178
  const tsPostHashParams = this.getThoughtSpotPostUrlParams({
252
179
  worksheet: worksheetId,
253
180
  query: searchOptions?.searchQuery || '',
254
181
  });
182
+
255
183
  return `${this.getEmbedBasePath(query)}/embed/${path}${tsPostHashParams}`;
256
184
  }
257
185
 
package/src/errors.ts CHANGED
@@ -17,4 +17,5 @@ export const ERROR_MESSAGE = {
17
17
  CSP_FRAME_HOST_VIOLATION_LOG_MESSAGE: 'Please set up CSP correctly for the application to start working. For more information, see https://developers.thoughtspot.com/docs/security-settings#csp-viz-embed-hosts. \n If the issue persists, refer to https://developers.thoughtspot.com/docs/security-settings#csp-viz-embed-hosts',
18
18
  MISSING_REPORTING_OBSERVER: 'ReportingObserver not supported',
19
19
  RENDER_CALLED_BEFORE_INIT: 'Looks like render was called before calling init, the render won\'t start until init is called.\nFor more info check\n1. https://developers.thoughtspot.com/docs/Function_init#_init\n2.https://developers.thoughtspot.com/docs/getting-started#initSdk',
20
+ SPOTTER_AGENT_NOT_INITIALIZED: 'SpotterAgent not initialized',
20
21
  };
@@ -12,7 +12,8 @@ export {
12
12
  SpotterEmbed,
13
13
  ConversationEmbed,
14
14
  PreRenderedConversationEmbed,
15
- SpotterAgentEmbed,
15
+ SpotterMessage,
16
+ useSpotterAgent,
16
17
  useEmbedRef,
17
18
  useInit,
18
19
  } from './index';