@thoughtspot/visual-embed-sdk 1.20.1 → 1.20.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 (368) hide show
  1. package/README.md +1 -1
  2. package/cjs/package.json +171 -0
  3. package/cjs/src/auth.d.ts +183 -0
  4. package/cjs/src/auth.d.ts.map +1 -0
  5. package/cjs/src/auth.js +457 -0
  6. package/cjs/src/auth.js.map +1 -0
  7. package/cjs/src/auth.spec.d.ts +13 -0
  8. package/cjs/src/auth.spec.d.ts.map +1 -0
  9. package/cjs/src/auth.spec.js +397 -0
  10. package/cjs/src/auth.spec.js.map +1 -0
  11. package/cjs/src/config.d.ts +22 -0
  12. package/cjs/src/config.d.ts.map +1 -0
  13. package/cjs/src/config.js +70 -0
  14. package/cjs/src/config.js.map +1 -0
  15. package/cjs/src/config.spec.d.ts +5 -0
  16. package/cjs/src/config.spec.d.ts.map +1 -0
  17. package/cjs/src/config.spec.js +65 -0
  18. package/cjs/src/config.spec.js.map +1 -0
  19. package/cjs/src/embed/app.d.ts +168 -0
  20. package/cjs/src/embed/app.d.ts.map +1 -0
  21. package/cjs/src/embed/app.js +215 -0
  22. package/cjs/src/embed/app.js.map +1 -0
  23. package/cjs/src/embed/app.spec.d.ts +2 -0
  24. package/cjs/src/embed/app.spec.d.ts.map +1 -0
  25. package/cjs/src/embed/app.spec.js +239 -0
  26. package/cjs/src/embed/app.spec.js.map +1 -0
  27. package/cjs/src/embed/base.d.ts +79 -0
  28. package/cjs/src/embed/base.d.ts.map +1 -0
  29. package/cjs/src/embed/base.js +229 -0
  30. package/cjs/src/embed/base.js.map +1 -0
  31. package/cjs/src/embed/base.spec.d.ts +2 -0
  32. package/cjs/src/embed/base.spec.d.ts.map +1 -0
  33. package/cjs/src/embed/base.spec.js +198 -0
  34. package/cjs/src/embed/base.spec.js.map +1 -0
  35. package/cjs/src/embed/embed.spec.d.ts +2 -0
  36. package/cjs/src/embed/embed.spec.d.ts.map +1 -0
  37. package/cjs/src/embed/embed.spec.js +74 -0
  38. package/cjs/src/embed/embed.spec.js.map +1 -0
  39. package/cjs/src/embed/events.spec.d.ts +2 -0
  40. package/cjs/src/embed/events.spec.d.ts.map +1 -0
  41. package/cjs/src/embed/events.spec.js +238 -0
  42. package/cjs/src/embed/events.spec.js.map +1 -0
  43. package/cjs/src/embed/liveboard.d.ts +150 -0
  44. package/cjs/src/embed/liveboard.d.ts.map +1 -0
  45. package/cjs/src/embed/liveboard.js +168 -0
  46. package/cjs/src/embed/liveboard.js.map +1 -0
  47. package/cjs/src/embed/liveboard.spec.d.ts +2 -0
  48. package/cjs/src/embed/liveboard.spec.d.ts.map +1 -0
  49. package/cjs/src/embed/liveboard.spec.js +229 -0
  50. package/cjs/src/embed/liveboard.spec.js.map +1 -0
  51. package/cjs/src/embed/pinboard.spec.d.ts +2 -0
  52. package/cjs/src/embed/pinboard.spec.d.ts.map +1 -0
  53. package/cjs/src/embed/pinboard.spec.js +148 -0
  54. package/cjs/src/embed/pinboard.spec.js.map +1 -0
  55. package/cjs/src/embed/search-bar.d.ts +50 -0
  56. package/cjs/src/embed/search-bar.d.ts.map +1 -0
  57. package/cjs/src/embed/search-bar.js +63 -0
  58. package/cjs/src/embed/search-bar.js.map +1 -0
  59. package/cjs/src/embed/search.d.ts +129 -0
  60. package/cjs/src/embed/search.d.ts.map +1 -0
  61. package/cjs/src/embed/search.js +121 -0
  62. package/cjs/src/embed/search.js.map +1 -0
  63. package/cjs/src/embed/search.spec.d.ts +2 -0
  64. package/cjs/src/embed/search.spec.d.ts.map +1 -0
  65. package/cjs/src/embed/search.spec.js +238 -0
  66. package/cjs/src/embed/search.spec.js.map +1 -0
  67. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
  68. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
  69. package/cjs/src/embed/searchEmbed-basic-auth.spec.js +103 -0
  70. package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
  71. package/cjs/src/embed/ts-embed.d.ts +323 -0
  72. package/cjs/src/embed/ts-embed.d.ts.map +1 -0
  73. package/cjs/src/embed/ts-embed.js +719 -0
  74. package/cjs/src/embed/ts-embed.js.map +1 -0
  75. package/cjs/src/embed/ts-embed.spec.d.ts +2 -0
  76. package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -0
  77. package/cjs/src/embed/ts-embed.spec.js +771 -0
  78. package/cjs/src/embed/ts-embed.spec.js.map +1 -0
  79. package/cjs/src/errors.d.ts +7 -0
  80. package/cjs/src/errors.d.ts.map +1 -0
  81. package/cjs/src/errors.js +10 -0
  82. package/cjs/src/errors.js.map +1 -0
  83. package/cjs/src/index.d.ts +18 -0
  84. package/cjs/src/index.d.ts.map +1 -0
  85. package/cjs/src/index.js +42 -0
  86. package/cjs/src/index.js.map +1 -0
  87. package/cjs/src/mixpanel-service.d.ts +29 -0
  88. package/cjs/src/mixpanel-service.d.ts.map +1 -0
  89. package/cjs/src/mixpanel-service.js +76 -0
  90. package/cjs/src/mixpanel-service.js.map +1 -0
  91. package/cjs/src/mixpanel-service.spec.d.ts +2 -0
  92. package/cjs/src/mixpanel-service.spec.d.ts.map +1 -0
  93. package/cjs/src/mixpanel-service.spec.js +63 -0
  94. package/cjs/src/mixpanel-service.spec.js.map +1 -0
  95. package/cjs/src/react/all-types-export.d.ts +3 -0
  96. package/cjs/src/react/all-types-export.d.ts.map +1 -0
  97. package/cjs/src/react/all-types-export.js +29 -0
  98. package/cjs/src/react/all-types-export.js.map +1 -0
  99. package/cjs/src/react/all-types-export.spec.d.ts +2 -0
  100. package/cjs/src/react/all-types-export.spec.d.ts.map +1 -0
  101. package/cjs/src/react/all-types-export.spec.js +13 -0
  102. package/cjs/src/react/all-types-export.spec.js.map +1 -0
  103. package/cjs/src/react/index.d.ts +95 -0
  104. package/cjs/src/react/index.d.ts.map +1 -0
  105. package/cjs/src/react/index.js +121 -0
  106. package/cjs/src/react/index.js.map +1 -0
  107. package/cjs/src/react/index.spec.d.ts +3 -0
  108. package/cjs/src/react/index.spec.d.ts.map +1 -0
  109. package/cjs/src/react/index.spec.js +138 -0
  110. package/cjs/src/react/index.spec.js.map +1 -0
  111. package/cjs/src/react/util.d.ts +19 -0
  112. package/cjs/src/react/util.d.ts.map +1 -0
  113. package/cjs/src/react/util.js +25 -0
  114. package/cjs/src/react/util.js.map +1 -0
  115. package/cjs/src/test/test-utils.d.ts +48 -0
  116. package/cjs/src/test/test-utils.d.ts.map +1 -0
  117. package/cjs/src/test/test-utils.js +108 -0
  118. package/cjs/src/test/test-utils.js.map +1 -0
  119. package/cjs/src/types.d.ts +2020 -0
  120. package/cjs/src/types.d.ts.map +1 -0
  121. package/cjs/src/types.js +1543 -0
  122. package/cjs/src/types.js.map +1 -0
  123. package/cjs/src/utils/answerService.d.ts +10 -0
  124. package/cjs/src/utils/answerService.d.ts.map +1 -0
  125. package/cjs/src/utils/answerService.js +61 -0
  126. package/cjs/src/utils/answerService.js.map +1 -0
  127. package/cjs/src/utils/answerService.spec.d.ts +2 -0
  128. package/cjs/src/utils/answerService.spec.d.ts.map +1 -0
  129. package/cjs/src/utils/answerService.spec.js +31 -0
  130. package/cjs/src/utils/answerService.spec.js.map +1 -0
  131. package/cjs/src/utils/authService.d.ts +37 -0
  132. package/cjs/src/utils/authService.d.ts.map +1 -0
  133. package/cjs/src/utils/authService.js +106 -0
  134. package/cjs/src/utils/authService.js.map +1 -0
  135. package/cjs/src/utils/authService.spec.d.ts +2 -0
  136. package/cjs/src/utils/authService.spec.d.ts.map +1 -0
  137. package/cjs/src/utils/authService.spec.js +72 -0
  138. package/cjs/src/utils/authService.spec.js.map +1 -0
  139. package/cjs/src/utils/processData.d.ts +16 -0
  140. package/cjs/src/utils/processData.d.ts.map +1 -0
  141. package/cjs/src/utils/processData.js +110 -0
  142. package/cjs/src/utils/processData.js.map +1 -0
  143. package/cjs/src/utils/processData.spec.d.ts +2 -0
  144. package/cjs/src/utils/processData.spec.d.ts.map +1 -0
  145. package/cjs/src/utils/processData.spec.js +142 -0
  146. package/cjs/src/utils/processData.spec.js.map +1 -0
  147. package/cjs/src/utils/processTrigger.d.ts +10 -0
  148. package/cjs/src/utils/processTrigger.d.ts.map +1 -0
  149. package/cjs/src/utils/processTrigger.js +63 -0
  150. package/cjs/src/utils/processTrigger.js.map +1 -0
  151. package/cjs/src/utils/processTrigger.spec.d.ts +2 -0
  152. package/cjs/src/utils/processTrigger.spec.d.ts.map +1 -0
  153. package/cjs/src/utils/processTrigger.spec.js +58 -0
  154. package/cjs/src/utils/processTrigger.spec.js.map +1 -0
  155. package/cjs/src/utils.d.ts +68 -0
  156. package/cjs/src/utils.d.ts.map +1 -0
  157. package/cjs/src/utils.js +196 -0
  158. package/cjs/src/utils.js.map +1 -0
  159. package/cjs/src/utils.spec.d.ts +5 -0
  160. package/cjs/src/utils.spec.d.ts.map +1 -0
  161. package/cjs/src/utils.spec.js +98 -0
  162. package/cjs/src/utils.spec.js.map +1 -0
  163. package/dist/src/auth.d.ts +54 -5
  164. package/dist/src/auth.d.ts.map +1 -1
  165. package/dist/src/auth.spec.d.ts +3 -0
  166. package/dist/src/auth.spec.d.ts.map +1 -1
  167. package/dist/src/config.d.ts +1 -0
  168. package/dist/src/config.d.ts.map +1 -1
  169. package/dist/src/embed/app.d.ts +35 -6
  170. package/dist/src/embed/app.d.ts.map +1 -1
  171. package/dist/src/embed/base.d.ts +23 -10
  172. package/dist/src/embed/base.d.ts.map +1 -1
  173. package/dist/src/embed/liveboard.d.ts +28 -6
  174. package/dist/src/embed/liveboard.d.ts.map +1 -1
  175. package/dist/src/embed/search-bar.d.ts +3 -0
  176. package/dist/src/embed/search-bar.d.ts.map +1 -1
  177. package/dist/src/embed/search.d.ts +9 -1
  178. package/dist/src/embed/search.d.ts.map +1 -1
  179. package/dist/src/embed/ts-embed.d.ts +65 -7
  180. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  181. package/dist/src/errors.d.ts.map +1 -1
  182. package/dist/src/index.d.ts +2 -2
  183. package/dist/src/index.d.ts.map +1 -1
  184. package/dist/src/mixpanel-service.d.ts +8 -0
  185. package/dist/src/mixpanel-service.d.ts.map +1 -1
  186. package/dist/src/react/all-types-export.d.ts +3 -0
  187. package/dist/src/react/all-types-export.d.ts.map +1 -0
  188. package/dist/src/react/all-types-export.spec.d.ts +2 -0
  189. package/dist/src/react/all-types-export.spec.d.ts.map +1 -0
  190. package/dist/src/react/index.d.ts +72 -0
  191. package/dist/src/react/index.d.ts.map +1 -1
  192. package/dist/src/react/util.d.ts +4 -0
  193. package/dist/src/react/util.d.ts.map +1 -1
  194. package/dist/src/test/test-utils.d.ts +11 -2
  195. package/dist/src/test/test-utils.d.ts.map +1 -1
  196. package/dist/src/types.d.ts +540 -98
  197. package/dist/src/types.d.ts.map +1 -1
  198. package/dist/src/utils/answerService.d.ts +7 -0
  199. package/dist/src/utils/answerService.d.ts.map +1 -1
  200. package/dist/src/utils/authService.d.ts +30 -0
  201. package/dist/src/utils/authService.d.ts.map +1 -1
  202. package/dist/src/utils/processData.d.ts +12 -0
  203. package/dist/src/utils/processData.d.ts.map +1 -1
  204. package/dist/src/utils/processTrigger.d.ts +7 -0
  205. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  206. package/dist/src/utils.d.ts +12 -0
  207. package/dist/src/utils.d.ts.map +1 -1
  208. package/dist/tsembed-react.es.js +28024 -0
  209. package/dist/tsembed-react.js +27966 -0
  210. package/dist/tsembed.es.js +18163 -303
  211. package/dist/tsembed.js +18120 -308
  212. package/dist/visual-embed-sdk-react-full.d.ts +3092 -0
  213. package/dist/visual-embed-sdk-react.d.ts +2781 -0
  214. package/dist/visual-embed-sdk.d.ts +2944 -0
  215. package/lib/package.json +15 -14
  216. package/lib/src/auth.d.ts +54 -5
  217. package/lib/src/auth.d.ts.map +1 -1
  218. package/lib/src/auth.js +91 -31
  219. package/lib/src/auth.js.map +1 -1
  220. package/lib/src/auth.spec.d.ts +3 -0
  221. package/lib/src/auth.spec.d.ts.map +1 -1
  222. package/lib/src/auth.spec.js +37 -6
  223. package/lib/src/auth.spec.js.map +1 -1
  224. package/lib/src/config.d.ts +1 -0
  225. package/lib/src/config.d.ts.map +1 -1
  226. package/lib/src/config.js +5 -3
  227. package/lib/src/config.js.map +1 -1
  228. package/lib/src/config.spec.js.map +1 -1
  229. package/lib/src/embed/app.d.ts +35 -6
  230. package/lib/src/embed/app.d.ts.map +1 -1
  231. package/lib/src/embed/app.js +55 -16
  232. package/lib/src/embed/app.js.map +1 -1
  233. package/lib/src/embed/app.spec.js +41 -12
  234. package/lib/src/embed/app.spec.js.map +1 -1
  235. package/lib/src/embed/base.d.ts +23 -10
  236. package/lib/src/embed/base.d.ts.map +1 -1
  237. package/lib/src/embed/base.js +34 -16
  238. package/lib/src/embed/base.js.map +1 -1
  239. package/lib/src/embed/base.spec.js.map +1 -1
  240. package/lib/src/embed/embed.spec.js +1 -1
  241. package/lib/src/embed/embed.spec.js.map +1 -1
  242. package/lib/src/embed/liveboard.d.ts +28 -6
  243. package/lib/src/embed/liveboard.d.ts.map +1 -1
  244. package/lib/src/embed/liveboard.js +60 -38
  245. package/lib/src/embed/liveboard.js.map +1 -1
  246. package/lib/src/embed/liveboard.spec.js +37 -30
  247. package/lib/src/embed/liveboard.spec.js.map +1 -1
  248. package/lib/src/embed/pinboard.spec.js +14 -26
  249. package/lib/src/embed/pinboard.spec.js.map +1 -1
  250. package/lib/src/embed/search-bar.d.ts +3 -0
  251. package/lib/src/embed/search-bar.d.ts.map +1 -1
  252. package/lib/src/embed/search-bar.js +5 -6
  253. package/lib/src/embed/search-bar.js.map +1 -1
  254. package/lib/src/embed/search.d.ts +9 -1
  255. package/lib/src/embed/search.d.ts.map +1 -1
  256. package/lib/src/embed/search.js +18 -14
  257. package/lib/src/embed/search.js.map +1 -1
  258. package/lib/src/embed/search.spec.js +16 -19
  259. package/lib/src/embed/search.spec.js.map +1 -1
  260. package/lib/src/embed/searchEmbed-basic-auth.spec.js +4 -0
  261. package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -1
  262. package/lib/src/embed/ts-embed.d.ts +65 -7
  263. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  264. package/lib/src/embed/ts-embed.js +154 -77
  265. package/lib/src/embed/ts-embed.js.map +1 -1
  266. package/lib/src/embed/ts-embed.spec.js +46 -24
  267. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  268. package/lib/src/errors.d.ts.map +1 -1
  269. package/lib/src/errors.js.map +1 -1
  270. package/lib/src/index.d.ts +2 -2
  271. package/lib/src/index.d.ts.map +1 -1
  272. package/lib/src/index.js +4 -4
  273. package/lib/src/index.js.map +1 -1
  274. package/lib/src/mixpanel-service.d.ts +8 -0
  275. package/lib/src/mixpanel-service.d.ts.map +1 -1
  276. package/lib/src/mixpanel-service.js +13 -1
  277. package/lib/src/mixpanel-service.js.map +1 -1
  278. package/lib/src/mixpanel-service.spec.js.map +1 -1
  279. package/lib/src/react/all-types-export.d.ts +3 -0
  280. package/lib/src/react/all-types-export.d.ts.map +1 -0
  281. package/lib/src/react/all-types-export.js +5 -0
  282. package/lib/src/react/all-types-export.js.map +1 -0
  283. package/lib/src/react/all-types-export.spec.d.ts +2 -0
  284. package/lib/src/react/all-types-export.spec.d.ts.map +1 -0
  285. package/lib/src/react/all-types-export.spec.js +10 -0
  286. package/lib/src/react/all-types-export.spec.js.map +1 -0
  287. package/lib/src/react/index.d.ts +72 -0
  288. package/lib/src/react/index.d.ts.map +1 -1
  289. package/lib/src/react/index.js +79 -7
  290. package/lib/src/react/index.js.map +1 -1
  291. package/lib/src/react/index.spec.js +27 -6
  292. package/lib/src/react/index.spec.js.map +1 -1
  293. package/lib/src/react/util.d.ts +4 -0
  294. package/lib/src/react/util.d.ts.map +1 -1
  295. package/lib/src/react/util.js +4 -0
  296. package/lib/src/react/util.js.map +1 -1
  297. package/lib/src/test/test-utils.d.ts +11 -2
  298. package/lib/src/test/test-utils.d.ts.map +1 -1
  299. package/lib/src/test/test-utils.js +36 -25
  300. package/lib/src/test/test-utils.js.map +1 -1
  301. package/lib/src/types.d.ts +540 -98
  302. package/lib/src/types.d.ts.map +1 -1
  303. package/lib/src/types.js +415 -70
  304. package/lib/src/types.js.map +1 -1
  305. package/lib/src/utils/answerService.d.ts +7 -0
  306. package/lib/src/utils/answerService.d.ts.map +1 -1
  307. package/lib/src/utils/answerService.js +7 -0
  308. package/lib/src/utils/answerService.js.map +1 -1
  309. package/lib/src/utils/answerService.spec.js.map +1 -1
  310. package/lib/src/utils/authService.d.ts +30 -0
  311. package/lib/src/utils/authService.d.ts.map +1 -1
  312. package/lib/src/utils/authService.js +39 -2
  313. package/lib/src/utils/authService.js.map +1 -1
  314. package/lib/src/utils/authService.spec.js.map +1 -1
  315. package/lib/src/utils/processData.d.ts +12 -0
  316. package/lib/src/utils/processData.d.ts.map +1 -1
  317. package/lib/src/utils/processData.js +33 -5
  318. package/lib/src/utils/processData.js.map +1 -1
  319. package/lib/src/utils/processData.spec.js.map +1 -1
  320. package/lib/src/utils/processTrigger.d.ts +7 -0
  321. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  322. package/lib/src/utils/processTrigger.js +17 -3
  323. package/lib/src/utils/processTrigger.js.map +1 -1
  324. package/lib/src/utils/processTrigger.spec.js.map +1 -1
  325. package/lib/src/utils.d.ts +12 -0
  326. package/lib/src/utils.d.ts.map +1 -1
  327. package/lib/src/utils.js +24 -19
  328. package/lib/src/utils.js.map +1 -1
  329. package/lib/src/utils.spec.js.map +1 -1
  330. package/package.json +15 -14
  331. package/src/auth.spec.ts +83 -133
  332. package/src/auth.ts +148 -115
  333. package/src/config.spec.ts +2 -4
  334. package/src/config.ts +5 -3
  335. package/src/embed/app.spec.ts +57 -14
  336. package/src/embed/app.ts +91 -36
  337. package/src/embed/base.spec.ts +3 -9
  338. package/src/embed/base.ts +55 -55
  339. package/src/embed/embed.spec.ts +5 -6
  340. package/src/embed/liveboard.spec.ts +56 -37
  341. package/src/embed/liveboard.ts +77 -65
  342. package/src/embed/pinboard.spec.ts +26 -29
  343. package/src/embed/search-bar.tsx +10 -8
  344. package/src/embed/search.spec.ts +31 -21
  345. package/src/embed/search.ts +26 -20
  346. package/src/embed/searchEmbed-basic-auth.spec.ts +22 -28
  347. package/src/embed/ts-embed.spec.ts +99 -144
  348. package/src/embed/ts-embed.ts +188 -162
  349. package/src/errors.ts +3 -6
  350. package/src/index.ts +6 -10
  351. package/src/mixpanel-service.spec.ts +1 -3
  352. package/src/mixpanel-service.ts +13 -1
  353. package/src/react/index.spec.tsx +66 -13
  354. package/src/react/index.tsx +111 -62
  355. package/src/react/util.ts +8 -4
  356. package/src/test/test-utils.ts +43 -39
  357. package/src/types.ts +537 -98
  358. package/src/utils/answerService.spec.ts +3 -5
  359. package/src/utils/answerService.ts +21 -17
  360. package/src/utils/authService.spec.ts +26 -41
  361. package/src/utils/authService.ts +47 -21
  362. package/src/utils/processData.spec.ts +26 -59
  363. package/src/utils/processData.ts +36 -14
  364. package/src/utils/processTrigger.spec.ts +1 -6
  365. package/src/utils/processTrigger.ts +18 -9
  366. package/src/utils.spec.ts +8 -12
  367. package/src/utils.ts +25 -26
  368. package/lib/src/visual-embed-sdk.d.ts +0 -2368
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockSessionInfo = exports.embedConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const authInstance = tslib_1.__importStar(require("./auth"));
6
+ const authService = tslib_1.__importStar(require("./utils/authService"));
7
+ const checkReleaseVersionInBetaInstance = tslib_1.__importStar(require("./utils"));
8
+ const mixPanelService = tslib_1.__importStar(require("./mixpanel-service"));
9
+ const types_1 = require("./types");
10
+ const test_utils_1 = require("./test/test-utils");
11
+ const thoughtSpotHost = 'http://localhost:3000';
12
+ const username = 'tsuser';
13
+ const password = '12345678';
14
+ const samalLoginUrl = `${thoughtSpotHost}/callosum/v1/saml/login?targetURLPath=%235e16222e-ef02-43e9-9fbd-24226bf3ce5b`;
15
+ exports.embedConfig = {
16
+ doTokenAuthSuccess: (token) => ({
17
+ thoughtSpotHost,
18
+ username,
19
+ authEndpoint: 'auth',
20
+ authType: types_1.AuthType.AuthServer,
21
+ getAuthToken: jest.fn(() => Promise.resolve(token)),
22
+ }),
23
+ doTokenAuthWithCookieDetect: {
24
+ thoughtSpotHost,
25
+ username,
26
+ authEndpoint: 'auth',
27
+ detectCookieAccessSlow: true,
28
+ },
29
+ doTokenAuthFailureWithoutAuthEndPoint: {
30
+ thoughtSpotHost,
31
+ username,
32
+ authEndpoint: '',
33
+ getAuthToken: null,
34
+ },
35
+ doTokenAuthFailureWithoutGetAuthToken: {
36
+ thoughtSpotHost,
37
+ username,
38
+ authEndpoint: 'auth',
39
+ getAuthToken: null,
40
+ },
41
+ doBasicAuth: {
42
+ thoughtSpotHost,
43
+ username,
44
+ password,
45
+ },
46
+ doSamlAuth: {
47
+ thoughtSpotHost,
48
+ },
49
+ doSamlAuthNoRedirect: {
50
+ thoughtSpotHost,
51
+ inPopup: true,
52
+ authTriggerContainer: document.body,
53
+ authTriggerText: 'auth',
54
+ },
55
+ doOidcAuth: {
56
+ thoughtSpotHost,
57
+ },
58
+ SSOAuth: {
59
+ authType: types_1.AuthType.SSO,
60
+ },
61
+ SAMLAuth: {
62
+ authType: types_1.AuthType.SAML,
63
+ },
64
+ OIDCAuth: {
65
+ authType: types_1.AuthType.OIDC,
66
+ },
67
+ authServerFailure: {
68
+ thoughtSpotHost,
69
+ username,
70
+ authEndpoint: '',
71
+ getAuthToken: null,
72
+ authType: types_1.AuthType.AuthServer,
73
+ },
74
+ authServerCookielessFailure: {
75
+ thoughtSpotHost,
76
+ username,
77
+ authEndpoint: '',
78
+ getAuthToken: null,
79
+ authType: types_1.AuthType.TrustedAuthTokenCookieless,
80
+ },
81
+ basicAuthSuccess: {
82
+ thoughtSpotHost,
83
+ username,
84
+ password,
85
+ authType: types_1.AuthType.Basic,
86
+ },
87
+ nonAuthSucess: {
88
+ thoughtSpotHost,
89
+ username,
90
+ password,
91
+ authType: types_1.AuthType.None,
92
+ },
93
+ };
94
+ const originalWindow = window;
95
+ exports.mockSessionInfo = {
96
+ userGUID: '1234',
97
+ mixpanelToken: 'abc123',
98
+ isPublicUser: false,
99
+ sessionId: '6588e7d9-710c-453e-a7b4-535fb3a8cbb2',
100
+ genNo: 3,
101
+ acSession: {
102
+ sessionId: 'cb202c48-b14b-4466-8a70-899ea666d46q',
103
+ genNo: 5,
104
+ },
105
+ };
106
+ describe('Unit test for auth', () => {
107
+ beforeEach(() => {
108
+ global.fetch = window.fetch;
109
+ });
110
+ test('endpoints, SAML_LOGIN_TEMPLATE', () => {
111
+ const ssoTemplateUrl = authInstance.EndPoints.SAML_LOGIN_TEMPLATE(thoughtSpotHost);
112
+ expect(ssoTemplateUrl).toBe(`/callosum/v1/saml/login?targetURLPath=${thoughtSpotHost}`);
113
+ });
114
+ test('when session info giving response', async () => {
115
+ jest.spyOn(mixPanelService, 'initMixpanel').mockImplementation(() => Promise.resolve());
116
+ authInstance.initSession(exports.mockSessionInfo);
117
+ const sessionInfo = await authInstance.getSessionInfo();
118
+ expect(sessionInfo).toStrictEqual(exports.mockSessionInfo);
119
+ });
120
+ test('doCookielessTokenAuth: when authEndpoint and getAuthToken are not there, it throw error', async () => {
121
+ try {
122
+ await authInstance.doCookielessTokenAuth(exports.embedConfig.doTokenAuthFailureWithoutAuthEndPoint);
123
+ }
124
+ catch (e) {
125
+ expect(e.message).toBe('Either auth endpoint or getAuthToken function must be provided');
126
+ }
127
+ });
128
+ test('doTokenAuth: when authEndpoint and getAuthToken are not there, it throw error', async () => {
129
+ try {
130
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthFailureWithoutAuthEndPoint);
131
+ }
132
+ catch (e) {
133
+ expect(e.message).toBe('Either auth endpoint or getAuthToken function must be provided');
134
+ }
135
+ });
136
+ test('doTokenAuth: when user is loggedIn', async () => {
137
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(async () => ({
138
+ json: () => exports.mockSessionInfo,
139
+ status: 200,
140
+ }));
141
+ jest.spyOn(authInstance, 'getSessionDetails').mockReturnValue(exports.mockSessionInfo);
142
+ jest.spyOn(authInstance, 'initSession').mockReturnValue(null);
143
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthSuccess('authToken'));
144
+ expect(authService.fetchSessionInfoService).toBeCalled();
145
+ expect(authInstance.loggedInStatus).toBe(true);
146
+ });
147
+ test('doTokenAuth: when user is not loggedIn & getAuthToken have response', async () => {
148
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => false);
149
+ jest.spyOn(authService, 'fetchAuthTokenService').mockImplementation(() => ({
150
+ text: () => Promise.resolve('abc'),
151
+ }));
152
+ jest.spyOn(authService, 'fetchAuthService').mockImplementation(() => Promise.resolve({
153
+ status: 200,
154
+ }));
155
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthSuccess('authToken2'));
156
+ expect(authService.fetchSessionInfoService).toBeCalled();
157
+ expect(authService.fetchAuthService).toBeCalledWith(thoughtSpotHost, username, 'authToken2');
158
+ });
159
+ test('doTokenAuth: when user is not loggedIn & getAuthToken not present, isLoggedIn should called', async () => {
160
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => false);
161
+ jest.spyOn(authService, 'fetchAuthTokenService').mockImplementation(() => Promise.resolve({ text: () => Promise.resolve('abc') }));
162
+ jest.spyOn(authService, 'fetchAuthService').mockImplementation(() => Promise.resolve({
163
+ status: 200,
164
+ ok: true,
165
+ }));
166
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthFailureWithoutGetAuthToken);
167
+ await (0, test_utils_1.executeAfterWait)(() => {
168
+ expect(authInstance.loggedInStatus).toBe(true);
169
+ expect(authService.fetchSessionInfoService).toBeCalled();
170
+ expect(authService.fetchAuthService).toBeCalledWith(thoughtSpotHost, username, 'abc');
171
+ });
172
+ });
173
+ test('doTokenAuth: Should raise error when duplicate token is used', async () => {
174
+ jest.spyOn(authService, 'fetchSessionInfoService').mockResolvedValue({
175
+ status: 401,
176
+ });
177
+ jest.spyOn(window, 'alert').mockClear();
178
+ jest.spyOn(window, 'alert').mockReturnValue(undefined);
179
+ jest.spyOn(authService, 'fetchAuthService').mockReset();
180
+ jest.spyOn(authService, 'fetchAuthService').mockImplementation(() => Promise.resolve({
181
+ status: 200,
182
+ ok: true,
183
+ }));
184
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthSuccess('authToken3'));
185
+ try {
186
+ await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthSuccess('authToken3'));
187
+ expect(false).toBe(true);
188
+ }
189
+ catch (e) {
190
+ expect(e.message).toContain('Duplicate token');
191
+ }
192
+ await (0, test_utils_1.executeAfterWait)(() => {
193
+ expect(authInstance.loggedInStatus).toBe(false);
194
+ expect(window.alert).toBeCalled();
195
+ expect(authService.fetchAuthService).toHaveBeenCalledTimes(1);
196
+ });
197
+ });
198
+ test('doTokenAuth: Should set loggedInStatus if detectThirdPartyCookieAccess is true and the second info call fails', async () => {
199
+ jest.spyOn(authService, 'fetchSessionInfoService')
200
+ .mockResolvedValue({
201
+ status: 401,
202
+ })
203
+ .mockClear();
204
+ jest.spyOn(authService, 'fetchAuthTokenService').mockImplementation(() => ({
205
+ text: () => Promise.resolve('abc'),
206
+ }));
207
+ jest.spyOn(authService, 'fetchAuthService').mockImplementation(() => Promise.resolve({
208
+ status: 200,
209
+ ok: true,
210
+ }));
211
+ const isLoggedIn = await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthWithCookieDetect);
212
+ expect(authService.fetchSessionInfoService).toHaveBeenCalledTimes(2);
213
+ expect(isLoggedIn).toBe(false);
214
+ });
215
+ test('doTokenAuth: when user is not loggedIn & fetchAuthPostService failed than fetchAuthService should call', async () => {
216
+ jest.spyOn(window, 'alert').mockImplementation(() => undefined);
217
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => false);
218
+ jest.spyOn(authService, 'fetchAuthTokenService').mockImplementation(() => ({
219
+ text: () => Promise.resolve('abc'),
220
+ }));
221
+ jest.spyOn(authService, 'fetchAuthPostService').mockImplementation(() =>
222
+ // eslint-disable-next-line prefer-promise-reject-errors, implicit-arrow-linebreak
223
+ Promise.reject({
224
+ status: 500,
225
+ }));
226
+ jest.spyOn(authService, 'fetchAuthService').mockImplementation(() => Promise.resolve({
227
+ status: 200,
228
+ type: 'opaqueredirect',
229
+ }));
230
+ expect(await authInstance.doTokenAuth(exports.embedConfig.doTokenAuthSuccess('authToken2'))).toBe(true);
231
+ expect(authService.fetchSessionInfoService).toBeCalled();
232
+ expect(authService.fetchAuthPostService).toBeCalledWith(thoughtSpotHost, username, 'authToken2');
233
+ expect(authService.fetchAuthService).toBeCalledWith(thoughtSpotHost, username, 'authToken2');
234
+ });
235
+ describe('doBasicAuth', () => {
236
+ beforeEach(() => {
237
+ global.fetch = window.fetch;
238
+ });
239
+ it('when user is loggedIn', async () => {
240
+ spyOn(checkReleaseVersionInBetaInstance, 'checkReleaseVersionInBeta');
241
+ jest.spyOn(authInstance, 'getSessionDetails').mockReturnValue(exports.mockSessionInfo);
242
+ jest.spyOn(authInstance, 'initSession').mockReturnValue(null);
243
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(async () => ({
244
+ json: () => exports.mockSessionInfo,
245
+ status: 200,
246
+ }));
247
+ await authInstance.doBasicAuth(exports.embedConfig.doBasicAuth);
248
+ expect(authService.fetchSessionInfoService).toBeCalled();
249
+ expect(authInstance.loggedInStatus).toBe(true);
250
+ expect(authInstance.getSessionDetails).toBeCalled();
251
+ expect(authInstance.initSession).toBeCalled();
252
+ });
253
+ it('when user is not loggedIn', async () => {
254
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => Promise.reject());
255
+ jest.spyOn(authService, 'fetchBasicAuthService').mockImplementation(() => ({
256
+ status: 200,
257
+ ok: true,
258
+ }));
259
+ await authInstance.doBasicAuth(exports.embedConfig.doBasicAuth);
260
+ expect(authService.fetchSessionInfoService).toBeCalled();
261
+ expect(authService.fetchBasicAuthService).toBeCalled();
262
+ expect(authInstance.loggedInStatus).toBe(true);
263
+ });
264
+ });
265
+ describe('doSamlAuth', () => {
266
+ afterEach(() => {
267
+ delete global.window;
268
+ global.window = Object.create(originalWindow);
269
+ global.window.open = jest.fn();
270
+ global.fetch = window.fetch;
271
+ });
272
+ it('when user is loggedIn & isAtSSORedirectUrl is true', async () => {
273
+ spyOn(checkReleaseVersionInBetaInstance, 'checkReleaseVersionInBeta');
274
+ Object.defineProperty(window, 'location', {
275
+ value: {
276
+ href: authInstance.SSO_REDIRECTION_MARKER_GUID,
277
+ hash: '',
278
+ },
279
+ });
280
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(async () => ({
281
+ json: () => exports.mockSessionInfo,
282
+ status: 200,
283
+ }));
284
+ jest.spyOn(authInstance, 'getSessionDetails').mockReturnValue(exports.mockSessionInfo);
285
+ jest.spyOn(authInstance, 'initSession').mockReturnValue(null);
286
+ await authInstance.doSamlAuth(exports.embedConfig.doSamlAuth);
287
+ expect(authService.fetchSessionInfoService).toBeCalled();
288
+ expect(window.location.hash).toBe('');
289
+ expect(authInstance.loggedInStatus).toBe(true);
290
+ });
291
+ it('when user is not loggedIn & isAtSSORedirectUrl is true', async () => {
292
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => Promise.reject());
293
+ await authInstance.doSamlAuth(exports.embedConfig.doSamlAuth);
294
+ expect(authService.fetchSessionInfoService).toBeCalled();
295
+ expect(window.location.hash).toBe('');
296
+ expect(authInstance.loggedInStatus).toBe(false);
297
+ });
298
+ it('when user is not loggedIn, in config noRedirect is false and isAtSSORedirectUrl is false', async () => {
299
+ Object.defineProperty(window, 'location', {
300
+ value: {
301
+ href: '',
302
+ hash: '',
303
+ },
304
+ });
305
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => Promise.reject());
306
+ await authInstance.doSamlAuth(exports.embedConfig.doSamlAuth);
307
+ expect(authService.fetchSessionInfoService).toBeCalled();
308
+ expect(global.window.location.href).toBe(samalLoginUrl);
309
+ });
310
+ it('when user is not loggedIn, in config noRedirect is true and isAtSSORedirectUrl is false', async () => {
311
+ Object.defineProperty(window, 'location', {
312
+ value: {
313
+ href: '',
314
+ hash: '',
315
+ },
316
+ });
317
+ spyOn(authInstance, 'samlCompletionPromise');
318
+ global.window.open = jest.fn();
319
+ jest.spyOn(authService, 'fetchSessionInfoService')
320
+ .mockImplementationOnce(() => Promise.reject())
321
+ .mockImplementationOnce(async () => ({
322
+ json: () => exports.mockSessionInfo,
323
+ status: 200,
324
+ }));
325
+ jest.spyOn(authInstance, 'getSessionDetails').mockReturnValue(exports.mockSessionInfo);
326
+ jest.spyOn(authInstance, 'initSession').mockReturnValue(null);
327
+ expect(await authInstance.samlCompletionPromise).not.toBe(null);
328
+ expect(await authInstance.doSamlAuth({
329
+ ...exports.embedConfig.doSamlAuthNoRedirect,
330
+ })).toBe(true);
331
+ document.getElementById('ts-auth-btn').click();
332
+ window.postMessage({ type: types_1.EmbedEvent.SAMLComplete }, '*');
333
+ await authInstance.samlCompletionPromise;
334
+ expect(authService.fetchSessionInfoService).toBeCalled();
335
+ expect(authInstance.getSessionDetails).toBeCalled();
336
+ expect(authInstance.initSession).toBeCalled();
337
+ });
338
+ });
339
+ describe('doOIDCAuth', () => {
340
+ afterEach(() => {
341
+ delete global.window;
342
+ global.window = Object.create(originalWindow);
343
+ global.window.open = jest.fn();
344
+ global.fetch = window.fetch;
345
+ });
346
+ it('when user is not loggedIn & isAtSSORedirectUrl is true', async () => {
347
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(() => Promise.reject());
348
+ await authInstance.doOIDCAuth(exports.embedConfig.doOidcAuth);
349
+ expect(authService.fetchSessionInfoService).toBeCalled();
350
+ expect(window.location.hash).toBe('');
351
+ expect(authInstance.loggedInStatus).toBe(false);
352
+ });
353
+ });
354
+ it('authenticate: when authType is SSO', async () => {
355
+ jest.spyOn(authInstance, 'doSamlAuth');
356
+ await authInstance.authenticate(exports.embedConfig.SSOAuth);
357
+ expect(window.location.hash).toBe('');
358
+ expect(authInstance.doSamlAuth).toBeCalled();
359
+ });
360
+ it('authenticate: when authType is SMAL', async () => {
361
+ jest.spyOn(authInstance, 'doSamlAuth');
362
+ await authInstance.authenticate(exports.embedConfig.SAMLAuth);
363
+ expect(window.location.hash).toBe('');
364
+ expect(authInstance.doSamlAuth).toBeCalled();
365
+ });
366
+ it('authenticate: when authType is OIDC', async () => {
367
+ jest.spyOn(authInstance, 'doOIDCAuth');
368
+ await authInstance.authenticate(exports.embedConfig.OIDCAuth);
369
+ expect(window.location.hash).toBe('');
370
+ expect(authInstance.doOIDCAuth).toBeCalled();
371
+ });
372
+ it('authenticate: when authType is AuthServer', async () => {
373
+ spyOn(authInstance, 'doTokenAuth');
374
+ await authInstance.authenticate(exports.embedConfig.authServerFailure);
375
+ expect(window.location.hash).toBe('');
376
+ expect(authInstance.doTokenAuth).toBeCalled();
377
+ });
378
+ it('authenticate: when authType is AuthServerCookieless', async () => {
379
+ spyOn(authInstance, 'doCookielessTokenAuth');
380
+ await authInstance.authenticate(exports.embedConfig.authServerCookielessFailure);
381
+ expect(window.location.hash).toBe('');
382
+ expect(authInstance.doCookielessTokenAuth).toBeCalled();
383
+ });
384
+ it('authenticate: when authType is Basic', async () => {
385
+ jest.spyOn(authInstance, 'doBasicAuth');
386
+ await authInstance.authenticate(exports.embedConfig.basicAuthSuccess);
387
+ expect(authInstance.doBasicAuth).toBeCalled();
388
+ expect(authInstance.loggedInStatus).toBe(true);
389
+ });
390
+ it('authenticate: when authType is None', async () => {
391
+ expect(await authInstance.authenticate(exports.embedConfig.nonAuthSucess)).not.toBeInstanceOf(Error);
392
+ });
393
+ it('user is authenticated when loggedInStatus is true', () => {
394
+ expect(authInstance.isAuthenticated()).toBe(authInstance.loggedInStatus);
395
+ });
396
+ });
397
+ //# sourceMappingURL=auth.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.spec.js","sourceRoot":"","sources":["../../src/auth.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { EmbedConfig } from './types';
2
+ /**
3
+ * Parse and construct the ThoughtSpot hostname or IP address
4
+ * from the embed configuration object.
5
+ *
6
+ * @param config
7
+ */
8
+ export declare const getThoughtSpotHost: (config: EmbedConfig) => string;
9
+ export declare const getV2BasePath: (config: EmbedConfig) => string;
10
+ /**
11
+ * It is a good idea to keep URLs under 2000 chars.
12
+ * If this is ever breached, since we pass view configuration through
13
+ * URL params, we would like to log a warning.
14
+ * Reference: https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers
15
+ */
16
+ export declare const URL_MAX_LENGTH = 2000;
17
+ /**
18
+ * The default CSS dimensions of the embedded app
19
+ */
20
+ export declare const DEFAULT_EMBED_WIDTH = "100%";
21
+ export declare const DEFAULT_EMBED_HEIGHT = "100%";
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBtC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,WAAY,WAAW,KAAG,MAiBxD,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,WAAW,KAAG,MAgBnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,oBAAoB,SAAS,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_EMBED_HEIGHT = exports.DEFAULT_EMBED_WIDTH = exports.URL_MAX_LENGTH = exports.getV2BasePath = exports.getThoughtSpotHost = void 0;
4
+ const errors_1 = require("./errors");
5
+ /**
6
+ * Copyright (c) 2023
7
+ *
8
+ * Utilities related to reading configuration objects
9
+ *
10
+ * @summary Config-related utils
11
+ * @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
12
+ */
13
+ const urlRegex = new RegExp([
14
+ '(^(https?:)//)?',
15
+ '(([^:/?#]*)(?::([0-9]+))?)',
16
+ '(/{0,1}[^?#]*)',
17
+ '(\\?[^#]*|)',
18
+ '(#.*|)$', // hash
19
+ ].join(''));
20
+ /**
21
+ * Parse and construct the ThoughtSpot hostname or IP address
22
+ * from the embed configuration object.
23
+ *
24
+ * @param config
25
+ */
26
+ const getThoughtSpotHost = (config) => {
27
+ const urlParts = config.thoughtSpotHost.match(urlRegex);
28
+ if (!urlParts) {
29
+ throw new Error(errors_1.ERROR_MESSAGE.INVALID_THOUGHTSPOT_HOST);
30
+ }
31
+ const protocol = urlParts[2] || window.location.protocol;
32
+ const host = urlParts[3];
33
+ let path = urlParts[6];
34
+ // Lose the trailing / if any
35
+ if (path.charAt(path.length - 1) === '/') {
36
+ path = path.substring(0, path.length - 1);
37
+ }
38
+ // const urlParams = urlParts[7];
39
+ // const hash = urlParts[8];
40
+ return `${protocol}//${host}${path}`;
41
+ };
42
+ exports.getThoughtSpotHost = getThoughtSpotHost;
43
+ const getV2BasePath = (config) => {
44
+ if (config.basepath) {
45
+ return config.basepath;
46
+ }
47
+ const tsHost = (0, exports.getThoughtSpotHost)(config);
48
+ // This is to handle when e2e's. Search is run on pods for
49
+ // comp-blink-test-pipeline with baseUrl=https://localhost:8443.
50
+ // This is to handle when the developer is developing in their local
51
+ // environment.
52
+ if (tsHost.includes('://localhost') && !tsHost.includes(':8443')) {
53
+ return '';
54
+ }
55
+ return 'v2';
56
+ };
57
+ exports.getV2BasePath = getV2BasePath;
58
+ /**
59
+ * It is a good idea to keep URLs under 2000 chars.
60
+ * If this is ever breached, since we pass view configuration through
61
+ * URL params, we would like to log a warning.
62
+ * Reference: https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers
63
+ */
64
+ exports.URL_MAX_LENGTH = 2000;
65
+ /**
66
+ * The default CSS dimensions of the embedded app
67
+ */
68
+ exports.DEFAULT_EMBED_WIDTH = '100%';
69
+ exports.DEFAULT_EMBED_HEIGHT = '100%';
70
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AAGzC;;;;;;;GAOG;AAEH,MAAM,QAAQ,GAAG,IAAI,MAAM,CACvB;IACI,iBAAiB;IACjB,4BAA4B;IAC5B,gBAAgB;IAChB,aAAa;IACb,SAAS,EAAE,OAAO;CACrB,CAAC,IAAI,CAAC,EAAE,CAAC,CACb,CAAC;AAEF;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAU,EAAE;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,sBAAa,CAAC,wBAAwB,CAAC,CAAC;KAC3D;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,6BAA6B;IAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACtC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC7C;IACD,iCAAiC;IACjC,4BAA4B;IAE5B,OAAO,GAAG,QAAQ,KAAK,IAAI,GAAG,IAAI,EAAE,CAAC;AACzC,CAAC,CAAC;AAjBW,QAAA,kBAAkB,sBAiB7B;AAEK,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAU,EAAE;IACzD,IAAI,MAAM,CAAC,QAAQ,EAAE;QACjB,OAAO,MAAM,CAAC,QAAQ,CAAC;KAC1B;IAED,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAC;IAE1C,0DAA0D;IAC1D,gEAAgE;IAChE,oEAAoE;IACpE,eAAe;IACf,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC9D,OAAO,EAAE,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAEF;;;;;GAKG;AACU,QAAA,cAAc,GAAG,IAAI,CAAC;AAEnC;;GAEG;AACU,QAAA,mBAAmB,GAAG,MAAM,CAAC;AAC7B,QAAA,oBAAoB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @jest-environment node
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=config.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.spec.d.ts","sourceRoot":"","sources":["../../src/config.spec.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * @jest-environment node
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const config_1 = require("./config");
7
+ const types_1 = require("./types");
8
+ const embedConfig = {
9
+ authType: types_1.AuthType.SSO,
10
+ };
11
+ describe('getThoughtSpotHost', () => {
12
+ test('invalid config', () => {
13
+ const testFn = () => {
14
+ (0, config_1.getThoughtSpotHost)({
15
+ ...embedConfig,
16
+ thoughtSpotHost: null,
17
+ });
18
+ };
19
+ expect(testFn).toThrow(TypeError);
20
+ });
21
+ test('IP address/hostname only', () => {
22
+ expect((0, config_1.getThoughtSpotHost)({
23
+ ...embedConfig,
24
+ thoughtSpotHost: '1.2.3.4',
25
+ })).toBe('https://1.2.3.4');
26
+ expect((0, config_1.getThoughtSpotHost)({
27
+ ...embedConfig,
28
+ thoughtSpotHost: 'myhost',
29
+ })).toBe('https://myhost');
30
+ });
31
+ test('host name and protocol', () => {
32
+ expect((0, config_1.getThoughtSpotHost)({
33
+ ...embedConfig,
34
+ thoughtSpotHost: 'http://myhost',
35
+ })).toBe('http://myhost');
36
+ });
37
+ test('host name, protocol and port', () => {
38
+ expect((0, config_1.getThoughtSpotHost)({
39
+ ...embedConfig,
40
+ thoughtSpotHost: 'http://myhost:8088/',
41
+ })).toBe('http://myhost:8088');
42
+ });
43
+ test('fully formed URL', () => {
44
+ expect((0, config_1.getThoughtSpotHost)({
45
+ ...embedConfig,
46
+ thoughtSpotHost: 'http://1.2.3.4:8088/v2/?foo=bar&baz=42#myhash',
47
+ })).toBe('http://1.2.3.4:8088/v2');
48
+ });
49
+ test('when authtype SAML, fully formed URL with', () => {
50
+ expect((0, config_1.getThoughtSpotHost)({
51
+ ...embedConfig,
52
+ authType: types_1.AuthType.SAML,
53
+ thoughtSpotHost: 'http://1.2.3.4:8088/v2/?foo=bar&baz=42#myhash',
54
+ })).toBe('http://1.2.3.4:8088/v2');
55
+ });
56
+ test('Return correct v2 basepath', () => {
57
+ const basePath = (0, config_1.getV2BasePath)({
58
+ basepath: 'test',
59
+ thoughtSpotHost: '',
60
+ authType: types_1.AuthType.None,
61
+ });
62
+ expect(basePath).toBe('test');
63
+ });
64
+ });
65
+ //# sourceMappingURL=config.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.spec.js","sourceRoot":"","sources":["../../src/config.spec.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAA6D;AAC7D,mCAAmC;AAEnC,MAAM,WAAW,GAAG;IAChB,QAAQ,EAAE,gBAAQ,CAAC,GAAG;CACzB,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,MAAM,GAAG,GAAG,EAAE;YAChB,IAAA,2BAAkB,EAAC;gBACf,GAAG,WAAW;gBACd,eAAe,EAAE,IAAI;aACxB,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,eAAe,EAAE,SAAS;SAC7B,CAAC,CACL,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE1B,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,eAAe,EAAE,QAAQ;SAC5B,CAAC,CACL,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,eAAe,EAAE,eAAe;SACnC,CAAC,CACL,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,eAAe,EAAE,qBAAqB;SACzC,CAAC,CACL,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,eAAe,EAAE,+CAA+C;SACnE,CAAC,CACL,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACF,IAAA,2BAAkB,EAAC;YACf,GAAG,WAAW;YACd,QAAQ,EAAE,gBAAQ,CAAC,IAAI;YACvB,eAAe,EAAE,+CAA+C;SACnE,CAAC,CACL,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAA,sBAAa,EAAC;YAC3B,QAAQ,EAAE,MAAM;YAChB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,gBAAQ,CAAC,IAAI;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}