@thoughtspot/visual-embed-sdk 1.46.1 → 1.46.3

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 (257) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/auth.d.ts +29 -4
  3. package/cjs/src/auth.d.ts.map +1 -1
  4. package/cjs/src/auth.js +29 -7
  5. package/cjs/src/auth.js.map +1 -1
  6. package/cjs/src/auth.spec.js +1 -3
  7. package/cjs/src/auth.spec.js.map +1 -1
  8. package/cjs/src/authToken.js +0 -1
  9. package/cjs/src/authToken.js.map +1 -1
  10. package/cjs/src/authToken.spec.js +2 -1
  11. package/cjs/src/authToken.spec.js.map +1 -1
  12. package/cjs/src/css-variables.d.ts +17 -17
  13. package/cjs/src/embed/app.d.ts +62 -33
  14. package/cjs/src/embed/app.d.ts.map +1 -1
  15. package/cjs/src/embed/app.js +10 -3
  16. package/cjs/src/embed/app.js.map +1 -1
  17. package/cjs/src/embed/app.spec.js +34 -1
  18. package/cjs/src/embed/app.spec.js.map +1 -1
  19. package/cjs/src/embed/auto-frame-renderer.d.ts +41 -0
  20. package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -0
  21. package/cjs/src/embed/auto-frame-renderer.js +145 -0
  22. package/cjs/src/embed/auto-frame-renderer.js.map +1 -0
  23. package/cjs/src/embed/auto-frame-renderer.spec.d.ts +2 -0
  24. package/cjs/src/embed/auto-frame-renderer.spec.d.ts.map +1 -0
  25. package/cjs/src/embed/auto-frame-renderer.spec.js +195 -0
  26. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -0
  27. package/cjs/src/embed/base.d.ts +2 -2
  28. package/cjs/src/embed/base.d.ts.map +1 -1
  29. package/cjs/src/embed/base.js +6 -9
  30. package/cjs/src/embed/base.js.map +1 -1
  31. package/cjs/src/embed/bodyless-conversation.d.ts +5 -5
  32. package/cjs/src/embed/bodyless-conversation.js +4 -4
  33. package/cjs/src/embed/conversation.d.ts +43 -30
  34. package/cjs/src/embed/conversation.d.ts.map +1 -1
  35. package/cjs/src/embed/conversation.js +10 -11
  36. package/cjs/src/embed/conversation.js.map +1 -1
  37. package/cjs/src/embed/conversation.spec.js +27 -0
  38. package/cjs/src/embed/conversation.spec.js.map +1 -1
  39. package/cjs/src/embed/hostEventClient/host-event-client.js +0 -2
  40. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  41. package/cjs/src/embed/liveboard.d.ts +42 -35
  42. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  43. package/cjs/src/embed/liveboard.js +6 -4
  44. package/cjs/src/embed/liveboard.js.map +1 -1
  45. package/cjs/src/embed/liveboard.spec.js +5 -3
  46. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  47. package/cjs/src/embed/sage.d.ts +5 -5
  48. package/cjs/src/embed/sage.js +1 -2
  49. package/cjs/src/embed/sage.js.map +1 -1
  50. package/cjs/src/embed/search-bar.d.ts +7 -7
  51. package/cjs/src/embed/search-bar.js +1 -1
  52. package/cjs/src/embed/search.d.ts +13 -12
  53. package/cjs/src/embed/search.d.ts.map +1 -1
  54. package/cjs/src/embed/search.js.map +1 -1
  55. package/cjs/src/embed/search.spec.js +0 -2
  56. package/cjs/src/embed/search.spec.js.map +1 -1
  57. package/cjs/src/embed/ts-embed.d.ts +3 -3
  58. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  59. package/cjs/src/embed/ts-embed.js +15 -9
  60. package/cjs/src/embed/ts-embed.js.map +1 -1
  61. package/cjs/src/embed/ts-embed.spec.js +37 -1
  62. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  63. package/cjs/src/index.d.ts +3 -2
  64. package/cjs/src/index.d.ts.map +1 -1
  65. package/cjs/src/index.js +3 -1
  66. package/cjs/src/index.js.map +1 -1
  67. package/cjs/src/react/index.d.ts +15 -15
  68. package/cjs/src/react/index.js +12 -13
  69. package/cjs/src/react/index.js.map +1 -1
  70. package/cjs/src/react/index.spec.js +6 -3
  71. package/cjs/src/react/index.spec.js.map +1 -1
  72. package/cjs/src/tokenizedFetch.d.ts +1 -1
  73. package/cjs/src/tokenizedFetch.js +1 -1
  74. package/cjs/src/types.d.ts +350 -287
  75. package/cjs/src/types.d.ts.map +1 -1
  76. package/cjs/src/types.js +240 -218
  77. package/cjs/src/types.js.map +1 -1
  78. package/cjs/src/utils/graphql/answerService/answerService.d.ts +9 -6
  79. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  80. package/cjs/src/utils/graphql/answerService/answerService.js +13 -15
  81. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
  82. package/cjs/src/utils/graphql/answerService/answerService.spec.js +55 -0
  83. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  84. package/cjs/src/utils/graphql/preview-service.js +0 -1
  85. package/cjs/src/utils/graphql/preview-service.js.map +1 -1
  86. package/cjs/src/utils/processData.js +0 -5
  87. package/cjs/src/utils/processData.js.map +1 -1
  88. package/cjs/src/utils.d.ts +9 -0
  89. package/cjs/src/utils.d.ts.map +1 -1
  90. package/cjs/src/utils.js +10 -1
  91. package/cjs/src/utils.js.map +1 -1
  92. package/dist/{index-Vyh6Ha5f.js → index-DyX-x6uN.js} +1 -1
  93. package/dist/src/auth.d.ts +29 -4
  94. package/dist/src/auth.d.ts.map +1 -1
  95. package/dist/src/css-variables.d.ts +17 -17
  96. package/dist/src/embed/app.d.ts +62 -33
  97. package/dist/src/embed/app.d.ts.map +1 -1
  98. package/dist/src/embed/auto-frame-renderer.d.ts +41 -0
  99. package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -0
  100. package/dist/src/embed/auto-frame-renderer.spec.d.ts +2 -0
  101. package/dist/src/embed/auto-frame-renderer.spec.d.ts.map +1 -0
  102. package/dist/src/embed/base.d.ts +2 -2
  103. package/dist/src/embed/base.d.ts.map +1 -1
  104. package/dist/src/embed/bodyless-conversation.d.ts +5 -5
  105. package/dist/src/embed/conversation.d.ts +43 -30
  106. package/dist/src/embed/conversation.d.ts.map +1 -1
  107. package/dist/src/embed/liveboard.d.ts +42 -35
  108. package/dist/src/embed/liveboard.d.ts.map +1 -1
  109. package/dist/src/embed/sage.d.ts +5 -5
  110. package/dist/src/embed/search-bar.d.ts +7 -7
  111. package/dist/src/embed/search.d.ts +13 -12
  112. package/dist/src/embed/search.d.ts.map +1 -1
  113. package/dist/src/embed/ts-embed.d.ts +3 -3
  114. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  115. package/dist/src/index.d.ts +3 -2
  116. package/dist/src/index.d.ts.map +1 -1
  117. package/dist/src/react/index.d.ts +15 -15
  118. package/dist/src/tokenizedFetch.d.ts +1 -1
  119. package/dist/src/types.d.ts +350 -287
  120. package/dist/src/types.d.ts.map +1 -1
  121. package/dist/src/utils/graphql/answerService/answerService.d.ts +9 -6
  122. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  123. package/dist/src/utils.d.ts +9 -0
  124. package/dist/src/utils.d.ts.map +1 -1
  125. package/dist/tsembed-react.es.js +359 -329
  126. package/dist/tsembed-react.js +358 -328
  127. package/dist/tsembed.es.js +490 -321
  128. package/dist/tsembed.js +489 -319
  129. package/dist/visual-embed-sdk-react-full.d.ts +574 -442
  130. package/dist/visual-embed-sdk-react.d.ts +572 -440
  131. package/dist/visual-embed-sdk.d.ts +622 -446
  132. package/lib/package.json +1 -1
  133. package/lib/src/auth.d.ts +29 -4
  134. package/lib/src/auth.d.ts.map +1 -1
  135. package/lib/src/auth.js +29 -7
  136. package/lib/src/auth.js.map +1 -1
  137. package/lib/src/auth.spec.js +1 -3
  138. package/lib/src/auth.spec.js.map +1 -1
  139. package/lib/src/authToken.js +0 -1
  140. package/lib/src/authToken.js.map +1 -1
  141. package/lib/src/authToken.spec.js +2 -1
  142. package/lib/src/authToken.spec.js.map +1 -1
  143. package/lib/src/css-variables.d.ts +17 -17
  144. package/lib/src/embed/app.d.ts +62 -33
  145. package/lib/src/embed/app.d.ts.map +1 -1
  146. package/lib/src/embed/app.js +11 -4
  147. package/lib/src/embed/app.js.map +1 -1
  148. package/lib/src/embed/app.spec.js +34 -1
  149. package/lib/src/embed/app.spec.js.map +1 -1
  150. package/lib/src/embed/auto-frame-renderer.d.ts +41 -0
  151. package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -0
  152. package/lib/src/embed/auto-frame-renderer.js +141 -0
  153. package/lib/src/embed/auto-frame-renderer.js.map +1 -0
  154. package/lib/src/embed/auto-frame-renderer.spec.d.ts +2 -0
  155. package/lib/src/embed/auto-frame-renderer.spec.d.ts.map +1 -0
  156. package/lib/src/embed/auto-frame-renderer.spec.js +192 -0
  157. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -0
  158. package/lib/src/embed/base.d.ts +2 -2
  159. package/lib/src/embed/base.d.ts.map +1 -1
  160. package/lib/src/embed/base.js +6 -9
  161. package/lib/src/embed/base.js.map +1 -1
  162. package/lib/src/embed/bodyless-conversation.d.ts +5 -5
  163. package/lib/src/embed/bodyless-conversation.js +4 -4
  164. package/lib/src/embed/conversation.d.ts +43 -30
  165. package/lib/src/embed/conversation.d.ts.map +1 -1
  166. package/lib/src/embed/conversation.js +11 -11
  167. package/lib/src/embed/conversation.js.map +1 -1
  168. package/lib/src/embed/conversation.spec.js +27 -0
  169. package/lib/src/embed/conversation.spec.js.map +1 -1
  170. package/lib/src/embed/hostEventClient/host-event-client.js +0 -2
  171. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  172. package/lib/src/embed/liveboard.d.ts +42 -35
  173. package/lib/src/embed/liveboard.d.ts.map +1 -1
  174. package/lib/src/embed/liveboard.js +6 -4
  175. package/lib/src/embed/liveboard.js.map +1 -1
  176. package/lib/src/embed/liveboard.spec.js +5 -3
  177. package/lib/src/embed/liveboard.spec.js.map +1 -1
  178. package/lib/src/embed/sage.d.ts +5 -5
  179. package/lib/src/embed/sage.js +1 -2
  180. package/lib/src/embed/sage.js.map +1 -1
  181. package/lib/src/embed/search-bar.d.ts +7 -7
  182. package/lib/src/embed/search-bar.js +1 -1
  183. package/lib/src/embed/search.d.ts +13 -12
  184. package/lib/src/embed/search.d.ts.map +1 -1
  185. package/lib/src/embed/search.js.map +1 -1
  186. package/lib/src/embed/search.spec.js +0 -2
  187. package/lib/src/embed/search.spec.js.map +1 -1
  188. package/lib/src/embed/ts-embed.d.ts +3 -3
  189. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  190. package/lib/src/embed/ts-embed.js +15 -9
  191. package/lib/src/embed/ts-embed.js.map +1 -1
  192. package/lib/src/embed/ts-embed.spec.js +37 -1
  193. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  194. package/lib/src/index.d.ts +3 -2
  195. package/lib/src/index.d.ts.map +1 -1
  196. package/lib/src/index.js +1 -0
  197. package/lib/src/index.js.map +1 -1
  198. package/lib/src/react/index.d.ts +15 -15
  199. package/lib/src/react/index.js +12 -13
  200. package/lib/src/react/index.js.map +1 -1
  201. package/lib/src/react/index.spec.js +6 -3
  202. package/lib/src/react/index.spec.js.map +1 -1
  203. package/lib/src/tokenizedFetch.d.ts +1 -1
  204. package/lib/src/tokenizedFetch.js +1 -1
  205. package/lib/src/types.d.ts +350 -287
  206. package/lib/src/types.d.ts.map +1 -1
  207. package/lib/src/types.js +240 -218
  208. package/lib/src/types.js.map +1 -1
  209. package/lib/src/utils/graphql/answerService/answerService.d.ts +9 -6
  210. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  211. package/lib/src/utils/graphql/answerService/answerService.js +12 -14
  212. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
  213. package/lib/src/utils/graphql/answerService/answerService.spec.js +55 -0
  214. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  215. package/lib/src/utils/graphql/preview-service.js +0 -1
  216. package/lib/src/utils/graphql/preview-service.js.map +1 -1
  217. package/lib/src/utils/processData.js +0 -5
  218. package/lib/src/utils/processData.js.map +1 -1
  219. package/lib/src/utils.d.ts +9 -0
  220. package/lib/src/utils.d.ts.map +1 -1
  221. package/lib/src/utils.js +8 -0
  222. package/lib/src/utils.js.map +1 -1
  223. package/lib/src/visual-embed-sdk.d.ts +11466 -0
  224. package/package.json +1 -1
  225. package/src/auth.spec.ts +1 -1
  226. package/src/auth.ts +32 -7
  227. package/src/authToken.spec.ts +2 -1
  228. package/src/authToken.ts +1 -1
  229. package/src/css-variables.ts +17 -17
  230. package/src/embed/app.spec.ts +46 -1
  231. package/src/embed/app.ts +74 -36
  232. package/src/embed/auto-frame-renderer.spec.ts +266 -0
  233. package/src/embed/auto-frame-renderer.ts +152 -0
  234. package/src/embed/base.spec.ts +1 -1
  235. package/src/embed/base.ts +9 -10
  236. package/src/embed/bodyless-conversation.ts +5 -5
  237. package/src/embed/conversation.spec.ts +37 -0
  238. package/src/embed/conversation.ts +55 -38
  239. package/src/embed/hostEventClient/host-event-client.ts +2 -2
  240. package/src/embed/liveboard.spec.ts +5 -3
  241. package/src/embed/liveboard.ts +47 -38
  242. package/src/embed/sage.ts +6 -6
  243. package/src/embed/search-bar.tsx +7 -7
  244. package/src/embed/search.spec.ts +2 -2
  245. package/src/embed/search.ts +13 -12
  246. package/src/embed/ts-embed.spec.ts +44 -1
  247. package/src/embed/ts-embed.ts +14 -9
  248. package/src/index.ts +3 -0
  249. package/src/react/index.spec.tsx +6 -3
  250. package/src/react/index.tsx +16 -16
  251. package/src/tokenizedFetch.ts +1 -1
  252. package/src/types.ts +350 -286
  253. package/src/utils/graphql/answerService/answerService.spec.ts +62 -0
  254. package/src/utils/graphql/answerService/answerService.ts +14 -10
  255. package/src/utils/graphql/preview-service.ts +1 -1
  256. package/src/utils/processData.ts +5 -5
  257. package/src/utils.ts +14 -0
@@ -0,0 +1,152 @@
1
+ import { AutoMCPFrameRendererViewConfig, Param } from "../types";
2
+ import { TsEmbed } from "./ts-embed";
3
+ import { getQueryParamString } from "../utils";
4
+
5
+
6
+ /**
7
+ * Starts an automatic renderer that watches the DOM for iframes containing
8
+ * the `tsmcp=true` query parameter and replaces them with fully configured
9
+ * ThoughtSpot embed iframes. The query parameter is automatically added by
10
+ * the ThoughtSpot MCP server.
11
+ *
12
+ * A {@link MutationObserver} is set up on `document.body` to detect both
13
+ * directly added iframes and iframes nested within added container elements.
14
+ * Each matching iframe is replaced in-place with a new ThoughtSpot embed
15
+ * iframe that merges the original iframe's query parameters with the SDK
16
+ * embed parameters.
17
+ *
18
+ * Call {@link MutationObserver.disconnect | observer.disconnect()} on the
19
+ * returned observer to stop monitoring the DOM.
20
+ *
21
+ * @param viewConfig - Optional configuration for the auto-rendered embeds.
22
+ * Accepts all properties from {@link AutoMCPFrameRendererViewConfig}.
23
+ * Defaults to an empty config.
24
+ * @returns A {@link MutationObserver} instance that is actively observing
25
+ * `document.body`. Disconnect it when monitoring is no longer needed.
26
+ *
27
+ * @example
28
+ * ```js
29
+ * import { startAutoMCPFrameRenderer } from '@thoughtspot/visual-embed-sdk';
30
+ *
31
+ * // Start watching the DOM for tsmcp iframes
32
+ * const observer = startAutoMCPFrameRenderer({
33
+ * // optional view config overrides
34
+ * });
35
+ *
36
+ * // Later, stop watching
37
+ * observer.disconnect();
38
+ * ```
39
+ *
40
+ * @example
41
+ * Detailed example of how to use the auto-frame renderer:
42
+ * [Python React Agent Simple UI](https://github.com/thoughtspot/developer-examples/tree/main/mcp/python-react-agent-simple-ui)
43
+ */
44
+ export function startAutoMCPFrameRenderer(viewConfig: AutoMCPFrameRendererViewConfig = {}) {
45
+
46
+ const replaceWithMCPIframe = (iframe: HTMLIFrameElement) => {
47
+ const autoMCPFrameRenderer = new AutoFrameRenderer(viewConfig);
48
+ autoMCPFrameRenderer.replaceIframe(iframe);
49
+ };
50
+
51
+ const observer = new MutationObserver((mutations) => {
52
+ for (const mutation of mutations) {
53
+ for (const node of Array.from(mutation.addedNodes)) {
54
+ if (node instanceof HTMLIFrameElement && isTSMCPIframe(node)) {
55
+ replaceWithMCPIframe(node);
56
+ }
57
+ if (node instanceof HTMLElement) {
58
+ node.querySelectorAll('iframe').forEach((iframe) => {
59
+ if (isTSMCPIframe(iframe)) {
60
+ replaceWithMCPIframe(iframe);
61
+ }
62
+ });
63
+ }
64
+ }
65
+ }
66
+ });
67
+
68
+ observer.observe(document.body, { childList: true, subtree: true });
69
+
70
+ return observer;
71
+ }
72
+
73
+ function isTSMCPIframe(iframe: HTMLIFrameElement) {
74
+ try {
75
+ const url = new URL(iframe.src);
76
+ return url.searchParams.get(Param.Tsmcp) === 'true';
77
+ } catch (e) {
78
+ // The iframe src might not be a valid URL (e.g., 'about:blank').
79
+ return false;
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Embed component that automatically replaces a plain iframe with a
85
+ * ThoughtSpot embed iframe. It merges the SDK's embed parameters with
86
+ * the original iframe's query parameters (stripping the `tsmcp` marker)
87
+ * and swaps the original iframe element in the DOM.
88
+ *
89
+ * This class is used internally by {@link startAutoMCPFrameRenderer} and
90
+ * is not intended to be instantiated directly.
91
+ */
92
+ class AutoFrameRenderer extends TsEmbed {
93
+ private frameToReplace: HTMLIFrameElement;
94
+
95
+ constructor(protected viewConfig: AutoMCPFrameRendererViewConfig) {
96
+ viewConfig.embedComponentType = 'auto-frame-renderer';
97
+ const container = document.createElement('div');
98
+ super(container, viewConfig);
99
+ }
100
+
101
+ /**
102
+ * Builds the final iframe `src` by merging the SDK embed parameters
103
+ * with the query parameters already present on the source iframe URL.
104
+ * The `tsmcp` marker param is removed so it does not propagate to the
105
+ * ThoughtSpot application.
106
+ *
107
+ * @param sourceSrc - The original iframe's `src` URL string.
108
+ * @returns The constructed URL to use for the ThoughtSpot embed iframe.
109
+ */
110
+ private getMCPIframeSrc(sourceSrc: string) {
111
+ const queryParams = this.getEmbedParamsObject();
112
+ const sourceURL = new URL(sourceSrc);
113
+ const existingQueryParams = sourceURL.searchParams;
114
+ const existingQueryParamsObject = Object.fromEntries(existingQueryParams);
115
+ delete existingQueryParamsObject[Param.Tsmcp];
116
+
117
+ const mergedQueryParams = { ...queryParams, ...existingQueryParamsObject };
118
+ const mergedQueryParamsString = getQueryParamString(mergedQueryParams);
119
+ const frameSrc = `${this.getEmbedBasePath(mergedQueryParamsString)}${sourceURL.hash.replace('#', '')}`;
120
+ return frameSrc;
121
+ }
122
+
123
+ /**
124
+ * Overrides the base insertion behavior so the new embed iframe
125
+ * replaces the original iframe in-place rather than being appended
126
+ * to a container element. Falls back to the default behavior when
127
+ * no iframe has been set for replacement.
128
+ */
129
+ protected handleInsertionIntoDOM(child: string | Node): void {
130
+ if (this.frameToReplace) {
131
+ this.frameToReplace.replaceWith(child);
132
+ } else {
133
+ super.handleInsertionIntoDOM(child);
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Replaces the given iframe with a new ThoughtSpot embed iframe.
139
+ *
140
+ * The original iframe's `src` is used to derive the embed URL, and
141
+ * once the new iframe is rendered it takes the original's place in
142
+ * the DOM tree.
143
+ *
144
+ * @param iframe - The existing `<iframe>` element to replace.
145
+ */
146
+ public async replaceIframe(iframe: HTMLIFrameElement): Promise<void> {
147
+ this.frameToReplace = iframe;
148
+ const src = this.getMCPIframeSrc(iframe.src);
149
+ await this.renderIFrame(src);
150
+ }
151
+ }
152
+
@@ -1,4 +1,4 @@
1
- /* eslint-disable no-console */
1
+
2
2
  /* eslint-disable @typescript-eslint/no-shadow */
3
3
  import EventEmitter from 'eventemitter3';
4
4
  import { EmbedConfig } from '../index';
package/src/embed/base.ts CHANGED
@@ -1,5 +1,5 @@
1
- /* eslint-disable camelcase */
2
- /* eslint-disable import/no-mutable-exports */
1
+
2
+
3
3
  /**
4
4
  * Copyright (c) 2022
5
5
  *
@@ -36,7 +36,6 @@ import { getEmbedConfig, setEmbedConfig } from './embedConfig';
36
36
  import { getQueryParamString, getValueFromWindow, isWindowUndefined, storeValueInWindow } from '../utils';
37
37
  import { resetAllCachedServices } from '../utils/resetServices';
38
38
  import { reload } from '../utils/processTrigger';
39
- import { ERROR_MESSAGE } from '../errors';
40
39
 
41
40
  const CONFIG_DEFAULTS: Partial<EmbedConfig> = {
42
41
  loginFailedMessage: 'Not logged in',
@@ -116,7 +115,7 @@ export const prefetch = (
116
115
  additionalFlags?: { [key: string]: string | number | boolean },
117
116
  ): void => {
118
117
  if (url === '') {
119
- // eslint-disable-next-line no-console
118
+
120
119
  logger.warn('The prefetch method does not have a valid URL');
121
120
  } else {
122
121
  const features = prefetchFeatures || [PrefetchFeatures.FullApp];
@@ -142,9 +141,9 @@ export const prefetch = (
142
141
  iFrame.style.height = '0';
143
142
  iFrame.style.border = '0';
144
143
 
145
- // Make it 'fixed' to keep it in a different stacking context.
146
- // This should solve the focus behaviours inside the iframe from
147
- // interfering with main body.
144
+ // Make it 'fixed' to keep it in a different stacking
145
+ // context. This should solve the focus behaviours inside
146
+ // the iframe from interfering with main body.
148
147
  iFrame.style.position = 'fixed';
149
148
  // Push it out of viewport.
150
149
  iFrame.style.top = '100vh';
@@ -323,7 +322,7 @@ export const renderInQueue = (fn: (next?: (val?: any) => void) => Promise<any>):
323
322
  return renderQueue;
324
323
  }
325
324
  // Sending an empty function to keep it consistent with the above usage.
326
- return fn(() => {}); // eslint-disable-line @typescript-eslint/no-empty-function
325
+ return fn(() => {});
327
326
  };
328
327
 
329
328
  /**
@@ -345,7 +344,7 @@ export const renderInQueue = (fn: (next?: (val?: any) => void) => Promise<any>):
345
344
  * }).catch(error => {
346
345
  * console.error(error);
347
346
  * });
348
- *```
347
+ * ```
349
348
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
350
349
  * @group Global methods
351
350
  */
@@ -466,9 +465,9 @@ export function reset(): void {
466
465
 
467
466
  /**
468
467
  * Reloads the ThoughtSpot iframe.
468
+ * @version SDK: 1.43.1
469
469
  * @param iFrame
470
470
  * @group Global methods
471
- * @version SDK: 1.43.1
472
471
  */
473
472
  export const reloadIframe = (iFrame: HTMLIFrameElement) => {
474
473
  if (!iFrame) {
@@ -17,8 +17,8 @@ export interface SpotterAgentEmbedViewConfig extends Omit<BaseViewConfig, 'prima
17
17
 
18
18
  /**
19
19
  * Configuration for conversation options.
20
- * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
21
20
  * Use {@link SpotterAgentEmbedViewConfig} instead
21
+ * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
22
22
  * @group Embed components
23
23
  */
24
24
  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
@@ -87,6 +87,8 @@ export class ConversationMessage extends TsEmbed {
87
87
  /**
88
88
  * Create a conversation embed, which can be integrated inside
89
89
  * chatbots or other conversational interfaces.
90
+ * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl
91
+ * @group Embed components
90
92
  * @example
91
93
  * ```js
92
94
  * import { SpotterAgentEmbed } from '@thoughtspot/visual-embed-sdk';
@@ -100,8 +102,6 @@ export class ConversationMessage extends TsEmbed {
100
102
  * // append the container to the DOM
101
103
  * document.body.appendChild(container); // or to any other element
102
104
  * ```
103
- * @group Embed components
104
- * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl
105
105
  */
106
106
  export class SpotterAgentEmbed {
107
107
  private conversationService: ConversationService;
@@ -164,8 +164,9 @@ export class SpotterAgentEmbed {
164
164
  /**
165
165
  * Create a conversation embed, which can be integrated inside
166
166
  * chatbots or other conversational interfaces.
167
- * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
168
167
  * Use {@link SpotterAgentEmbed} instead
168
+ * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
169
+ * @group Embed components
169
170
  * @example
170
171
  * ```js
171
172
  * import { SpotterAgentEmbed } from '@thoughtspot/visual-embed-sdk';
@@ -179,7 +180,6 @@ export class SpotterAgentEmbed {
179
180
  * // append the container to the DOM
180
181
  * document.body.appendChild(container); // or to any other element
181
182
  * ```
182
- * @group Embed components
183
183
  */
184
184
  export class BodylessConversation extends SpotterAgentEmbed {
185
185
  constructor(viewConfig: BodylessConversationViewConfig) {
@@ -327,6 +327,43 @@ describe('ConversationEmbed', () => {
327
327
  );
328
328
  });
329
329
 
330
+ it('should render the conversation embed with deprecated standalone enablePastConversationsSidebar flag', async () => {
331
+ const viewConfig: SpotterEmbedViewConfig = {
332
+ worksheetId: 'worksheetId',
333
+ searchOptions: {
334
+ searchQuery: 'searchQuery',
335
+ },
336
+ enablePastConversationsSidebar: true,
337
+ };
338
+
339
+ const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
340
+ await conversationEmbed.render();
341
+ expectUrlMatchesWithParams(
342
+ getIFrameSrc(),
343
+ `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&enablePastConversationsSidebar=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
344
+ );
345
+ });
346
+
347
+ it('should prefer spotterSidebarConfig.enablePastConversationsSidebar over deprecated standalone flag', async () => {
348
+ const viewConfig: SpotterEmbedViewConfig = {
349
+ worksheetId: 'worksheetId',
350
+ searchOptions: {
351
+ searchQuery: 'searchQuery',
352
+ },
353
+ enablePastConversationsSidebar: false,
354
+ spotterSidebarConfig: {
355
+ enablePastConversationsSidebar: true,
356
+ },
357
+ };
358
+
359
+ const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
360
+ await conversationEmbed.render();
361
+ expectUrlMatchesWithParams(
362
+ getIFrameSrc(),
363
+ `http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&enablePastConversationsSidebar=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
364
+ );
365
+ });
366
+
330
367
  it('should render the conversation embed with all boolean flags set', async () => {
331
368
  const viewConfig: SpotterEmbedViewConfig = {
332
369
  worksheetId: 'worksheetId',