@thoughtspot/visual-embed-sdk 1.52.0 → 1.52.1

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 (279) hide show
  1. package/cjs/package.json +9 -1
  2. package/cjs/src/contracts/contracts.spec.d.ts +2 -0
  3. package/cjs/src/contracts/contracts.spec.d.ts.map +1 -0
  4. package/cjs/src/contracts/contracts.spec.js +345 -0
  5. package/cjs/src/contracts/contracts.spec.js.map +1 -0
  6. package/cjs/src/contracts/embed-event-payloads.d.ts +73 -0
  7. package/cjs/src/contracts/embed-event-payloads.d.ts.map +1 -0
  8. package/cjs/src/contracts/embed-event-payloads.js +3 -0
  9. package/cjs/src/contracts/embed-event-payloads.js.map +1 -0
  10. package/cjs/src/contracts/host-event-contracts.d.ts +378 -0
  11. package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -0
  12. package/cjs/src/contracts/host-event-contracts.js +3 -0
  13. package/cjs/src/contracts/host-event-contracts.js.map +1 -0
  14. package/cjs/src/contracts/index.d.ts +22 -0
  15. package/cjs/src/contracts/index.d.ts.map +1 -0
  16. package/cjs/src/contracts/index.js +33 -0
  17. package/cjs/src/contracts/index.js.map +1 -0
  18. package/cjs/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  19. package/cjs/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  20. package/cjs/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
  21. package/cjs/src/contracts/ui-passthrough-contracts.js.map +1 -0
  22. package/cjs/src/embed/app.d.ts +17 -140
  23. package/cjs/src/embed/app.d.ts.map +1 -1
  24. package/cjs/src/embed/app.js +20 -120
  25. package/cjs/src/embed/app.js.map +1 -1
  26. package/cjs/src/embed/app.spec.js +70 -26
  27. package/cjs/src/embed/app.spec.js.map +1 -1
  28. package/cjs/src/embed/events.spec.js +12 -2
  29. package/cjs/src/embed/events.spec.js.map +1 -1
  30. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  31. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  32. package/cjs/src/embed/hostEventClient/host-event-client.js +23 -18
  33. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  34. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +36 -36
  35. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  36. package/cjs/src/embed/hostEventClient/utils.d.ts +1 -1
  37. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
  38. package/cjs/src/embed/hostEventClient/utils.js +3 -3
  39. package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
  40. package/cjs/src/embed/liveboard.d.ts +9 -161
  41. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  42. package/cjs/src/embed/liveboard.js +66 -134
  43. package/cjs/src/embed/liveboard.js.map +1 -1
  44. package/cjs/src/embed/liveboard.spec.js +211 -28
  45. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  46. package/cjs/src/embed/search.d.ts +14 -0
  47. package/cjs/src/embed/search.d.ts.map +1 -1
  48. package/cjs/src/embed/search.js +4 -1
  49. package/cjs/src/embed/search.js.map +1 -1
  50. package/cjs/src/embed/search.spec.js +65 -0
  51. package/cjs/src/embed/search.spec.js.map +1 -1
  52. package/cjs/src/embed/ts-embed.d.ts +17 -22
  53. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  54. package/cjs/src/embed/ts-embed.js +82 -56
  55. package/cjs/src/embed/ts-embed.js.map +1 -1
  56. package/cjs/src/embed/ts-embed.spec.js +325 -17
  57. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  58. package/cjs/src/full-height.d.ts +137 -0
  59. package/cjs/src/full-height.d.ts.map +1 -0
  60. package/cjs/src/full-height.js +272 -0
  61. package/cjs/src/full-height.js.map +1 -0
  62. package/cjs/src/full-height.spec.d.ts +2 -0
  63. package/cjs/src/full-height.spec.d.ts.map +1 -0
  64. package/cjs/src/full-height.spec.js +835 -0
  65. package/cjs/src/full-height.spec.js.map +1 -0
  66. package/cjs/src/index.d.ts +4 -3
  67. package/cjs/src/index.d.ts.map +1 -1
  68. package/cjs/src/index.js +3 -3
  69. package/cjs/src/index.js.map +1 -1
  70. package/cjs/src/react/all-types-export.d.ts +1 -1
  71. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  72. package/cjs/src/react/all-types-export.js.map +1 -1
  73. package/cjs/src/react/all-types-export.parity.spec.js +55 -3
  74. package/cjs/src/react/all-types-export.parity.spec.js.map +1 -1
  75. package/cjs/src/types.d.ts +540 -3
  76. package/cjs/src/types.d.ts.map +1 -1
  77. package/cjs/src/types.js +326 -1
  78. package/cjs/src/types.js.map +1 -1
  79. package/cjs/src/utils/processTrigger.d.ts +3 -1
  80. package/cjs/src/utils/processTrigger.d.ts.map +1 -1
  81. package/cjs/src/utils/processTrigger.js +19 -51
  82. package/cjs/src/utils/processTrigger.js.map +1 -1
  83. package/cjs/src/utils/transport/iframe-transport.d.ts +55 -0
  84. package/cjs/src/utils/transport/iframe-transport.d.ts.map +1 -0
  85. package/cjs/src/utils/transport/iframe-transport.js +108 -0
  86. package/cjs/src/utils/transport/iframe-transport.js.map +1 -0
  87. package/cjs/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  88. package/cjs/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  89. package/cjs/src/utils/transport/iframe-transport.spec.js +140 -0
  90. package/cjs/src/utils/transport/iframe-transport.spec.js.map +1 -0
  91. package/cjs/src/utils.d.ts +18 -0
  92. package/cjs/src/utils.d.ts.map +1 -1
  93. package/cjs/src/utils.js +39 -1
  94. package/cjs/src/utils.js.map +1 -1
  95. package/cjs/src/utils.spec.js +62 -0
  96. package/cjs/src/utils.spec.js.map +1 -1
  97. package/dist/{index-BMppCU63.js → index-C1pmYb5H.js} +1 -1
  98. package/dist/src/contracts/contracts.spec.d.ts +2 -0
  99. package/dist/src/contracts/contracts.spec.d.ts.map +1 -0
  100. package/dist/src/contracts/embed-event-payloads.d.ts +73 -0
  101. package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -0
  102. package/dist/src/contracts/host-event-contracts.d.ts +378 -0
  103. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -0
  104. package/dist/src/contracts/index.d.ts +22 -0
  105. package/dist/src/contracts/index.d.ts.map +1 -0
  106. package/dist/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  107. package/dist/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  108. package/dist/src/embed/app.d.ts +17 -140
  109. package/dist/src/embed/app.d.ts.map +1 -1
  110. package/dist/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  111. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  112. package/dist/src/embed/hostEventClient/utils.d.ts +1 -1
  113. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
  114. package/dist/src/embed/liveboard.d.ts +9 -161
  115. package/dist/src/embed/liveboard.d.ts.map +1 -1
  116. package/dist/src/embed/search.d.ts +14 -0
  117. package/dist/src/embed/search.d.ts.map +1 -1
  118. package/dist/src/embed/ts-embed.d.ts +17 -22
  119. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  120. package/dist/src/full-height.d.ts +137 -0
  121. package/dist/src/full-height.d.ts.map +1 -0
  122. package/dist/src/full-height.spec.d.ts +2 -0
  123. package/dist/src/full-height.spec.d.ts.map +1 -0
  124. package/dist/src/index.d.ts +4 -3
  125. package/dist/src/index.d.ts.map +1 -1
  126. package/dist/src/react/all-types-export.d.ts +1 -1
  127. package/dist/src/react/all-types-export.d.ts.map +1 -1
  128. package/dist/src/types.d.ts +540 -3
  129. package/dist/src/types.d.ts.map +1 -1
  130. package/dist/src/utils/processTrigger.d.ts +3 -1
  131. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  132. package/dist/src/utils/transport/iframe-transport.d.ts +55 -0
  133. package/dist/src/utils/transport/iframe-transport.d.ts.map +1 -0
  134. package/dist/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  135. package/dist/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  136. package/dist/src/utils.d.ts +18 -0
  137. package/dist/src/utils.d.ts.map +1 -1
  138. package/dist/tsembed-react.es.js +925 -363
  139. package/dist/tsembed-react.js +924 -362
  140. package/dist/tsembed.es.js +925 -363
  141. package/dist/tsembed.js +924 -362
  142. package/dist/visual-embed-sdk-react-full.d.ts +1357 -656
  143. package/dist/visual-embed-sdk-react.d.ts +1257 -606
  144. package/dist/visual-embed-sdk.d.ts +1320 -642
  145. package/lib/package.json +9 -1
  146. package/lib/src/contracts/contracts.spec.d.ts +2 -0
  147. package/lib/src/contracts/contracts.spec.d.ts.map +1 -0
  148. package/lib/src/contracts/contracts.spec.js +342 -0
  149. package/lib/src/contracts/contracts.spec.js.map +1 -0
  150. package/lib/src/contracts/embed-event-payloads.d.ts +73 -0
  151. package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -0
  152. package/lib/src/contracts/embed-event-payloads.js +2 -0
  153. package/lib/src/contracts/embed-event-payloads.js.map +1 -0
  154. package/lib/src/contracts/host-event-contracts.d.ts +378 -0
  155. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -0
  156. package/lib/src/contracts/host-event-contracts.js +2 -0
  157. package/lib/src/contracts/host-event-contracts.js.map +1 -0
  158. package/lib/src/contracts/index.d.ts +22 -0
  159. package/lib/src/contracts/index.d.ts.map +1 -0
  160. package/lib/src/contracts/index.js +22 -0
  161. package/lib/src/contracts/index.js.map +1 -0
  162. package/lib/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  163. package/lib/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  164. package/lib/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
  165. package/lib/src/contracts/ui-passthrough-contracts.js.map +1 -0
  166. package/lib/src/embed/app.d.ts +17 -140
  167. package/lib/src/embed/app.d.ts.map +1 -1
  168. package/lib/src/embed/app.js +22 -122
  169. package/lib/src/embed/app.js.map +1 -1
  170. package/lib/src/embed/app.spec.js +70 -26
  171. package/lib/src/embed/app.spec.js.map +1 -1
  172. package/lib/src/embed/events.spec.js +12 -2
  173. package/lib/src/embed/events.spec.js.map +1 -1
  174. package/lib/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  175. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  176. package/lib/src/embed/hostEventClient/host-event-client.js +6 -1
  177. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  178. package/lib/src/embed/hostEventClient/host-event-client.spec.js +1 -1
  179. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  180. package/lib/src/embed/hostEventClient/utils.d.ts +1 -1
  181. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
  182. package/lib/src/embed/hostEventClient/utils.js +1 -1
  183. package/lib/src/embed/hostEventClient/utils.js.map +1 -1
  184. package/lib/src/embed/liveboard.d.ts +9 -161
  185. package/lib/src/embed/liveboard.d.ts.map +1 -1
  186. package/lib/src/embed/liveboard.js +67 -135
  187. package/lib/src/embed/liveboard.js.map +1 -1
  188. package/lib/src/embed/liveboard.spec.js +211 -28
  189. package/lib/src/embed/liveboard.spec.js.map +1 -1
  190. package/lib/src/embed/search.d.ts +14 -0
  191. package/lib/src/embed/search.d.ts.map +1 -1
  192. package/lib/src/embed/search.js +4 -1
  193. package/lib/src/embed/search.js.map +1 -1
  194. package/lib/src/embed/search.spec.js +65 -0
  195. package/lib/src/embed/search.spec.js.map +1 -1
  196. package/lib/src/embed/ts-embed.d.ts +17 -22
  197. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  198. package/lib/src/embed/ts-embed.js +82 -56
  199. package/lib/src/embed/ts-embed.js.map +1 -1
  200. package/lib/src/embed/ts-embed.spec.js +322 -14
  201. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  202. package/lib/src/full-height.d.ts +137 -0
  203. package/lib/src/full-height.d.ts.map +1 -0
  204. package/lib/src/full-height.js +268 -0
  205. package/lib/src/full-height.js.map +1 -0
  206. package/lib/src/full-height.spec.d.ts +2 -0
  207. package/lib/src/full-height.spec.d.ts.map +1 -0
  208. package/lib/src/full-height.spec.js +833 -0
  209. package/lib/src/full-height.spec.js.map +1 -0
  210. package/lib/src/index.d.ts +4 -3
  211. package/lib/src/index.d.ts.map +1 -1
  212. package/lib/src/index.js +1 -1
  213. package/lib/src/index.js.map +1 -1
  214. package/lib/src/react/all-types-export.d.ts +1 -1
  215. package/lib/src/react/all-types-export.d.ts.map +1 -1
  216. package/lib/src/react/all-types-export.js.map +1 -1
  217. package/lib/src/react/all-types-export.parity.spec.js +55 -3
  218. package/lib/src/react/all-types-export.parity.spec.js.map +1 -1
  219. package/lib/src/types.d.ts +540 -3
  220. package/lib/src/types.d.ts.map +1 -1
  221. package/lib/src/types.js +326 -1
  222. package/lib/src/types.js.map +1 -1
  223. package/lib/src/utils/processTrigger.d.ts +3 -1
  224. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  225. package/lib/src/utils/processTrigger.js +19 -51
  226. package/lib/src/utils/processTrigger.js.map +1 -1
  227. package/lib/src/utils/transport/iframe-transport.d.ts +55 -0
  228. package/lib/src/utils/transport/iframe-transport.d.ts.map +1 -0
  229. package/lib/src/utils/transport/iframe-transport.js +101 -0
  230. package/lib/src/utils/transport/iframe-transport.js.map +1 -0
  231. package/lib/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  232. package/lib/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  233. package/lib/src/utils/transport/iframe-transport.spec.js +138 -0
  234. package/lib/src/utils/transport/iframe-transport.spec.js.map +1 -0
  235. package/lib/src/utils.d.ts +18 -0
  236. package/lib/src/utils.d.ts.map +1 -1
  237. package/lib/src/utils.js +37 -0
  238. package/lib/src/utils.js.map +1 -1
  239. package/lib/src/utils.spec.js +63 -1
  240. package/lib/src/utils.spec.js.map +1 -1
  241. package/lib/src/visual-embed-sdk.d.ts +1320 -642
  242. package/package.json +9 -1
  243. package/src/contracts/contracts.spec.ts +392 -0
  244. package/src/contracts/embed-event-payloads.ts +83 -0
  245. package/src/contracts/host-event-contracts.ts +456 -0
  246. package/src/contracts/index.ts +53 -0
  247. package/src/contracts/ui-passthrough-contracts.ts +301 -0
  248. package/src/embed/app.spec.ts +86 -34
  249. package/src/embed/app.ts +37 -264
  250. package/src/embed/events.spec.ts +14 -2
  251. package/src/embed/hostEventClient/host-event-client.spec.ts +2 -2
  252. package/src/embed/hostEventClient/host-event-client.ts +18 -5
  253. package/src/embed/hostEventClient/utils.ts +2 -1
  254. package/src/embed/liveboard.spec.ts +257 -38
  255. package/src/embed/liveboard.ts +75 -296
  256. package/src/embed/search.spec.ts +80 -0
  257. package/src/embed/search.ts +20 -0
  258. package/src/embed/ts-embed.spec.ts +448 -15
  259. package/src/embed/ts-embed.ts +109 -66
  260. package/src/full-height.spec.ts +1008 -0
  261. package/src/full-height.ts +361 -0
  262. package/src/index.ts +93 -5
  263. package/src/react/all-types-export.parity.spec.ts +63 -3
  264. package/src/react/all-types-export.ts +45 -0
  265. package/src/types.ts +540 -1
  266. package/src/utils/processTrigger.ts +28 -58
  267. package/src/utils/transport/iframe-transport.spec.ts +177 -0
  268. package/src/utils/transport/iframe-transport.ts +122 -0
  269. package/src/utils.spec.ts +71 -0
  270. package/src/utils.ts +38 -0
  271. package/cjs/src/embed/hostEventClient/contracts.d.ts +0 -231
  272. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  273. package/cjs/src/embed/hostEventClient/contracts.js.map +0 -1
  274. package/dist/src/embed/hostEventClient/contracts.d.ts +0 -231
  275. package/dist/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  276. package/lib/src/embed/hostEventClient/contracts.d.ts +0 -231
  277. package/lib/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  278. package/lib/src/embed/hostEventClient/contracts.js.map +0 -1
  279. package/src/embed/hostEventClient/contracts.ts +0 -262
package/cjs/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thoughtspot/visual-embed-sdk",
3
- "version": "1.52.0",
3
+ "version": "1.52.1",
4
4
  "description": "ThoughtSpot Embed SDK",
5
5
  "module": "lib/src/index.js",
6
6
  "main": "dist/tsembed.js",
@@ -22,6 +22,11 @@
22
22
  "require": "./cjs/src/react/all-types-export.js",
23
23
  "types": "./lib/src/react/all-types-export.d.ts"
24
24
  },
25
+ "./contracts": {
26
+ "import": "./lib/src/contracts/index.js",
27
+ "require": "./cjs/src/contracts/index.js",
28
+ "types": "./lib/src/contracts/index.d.ts"
29
+ },
25
30
  "./lib/src/react": {
26
31
  "import": "./lib/src/react/all-types-export.js",
27
32
  "require": "./cjs/src/react/all-types-export.js",
@@ -32,6 +37,9 @@
32
37
  "*": {
33
38
  "react": [
34
39
  "./lib/src/react/all-types-export.d.ts"
40
+ ],
41
+ "contracts": [
42
+ "./lib/src/contracts/index.d.ts"
35
43
  ]
36
44
  }
37
45
  },
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contracts.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.spec.d.ts","sourceRoot":"","sources":["../../../src/contracts/contracts.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ /**
5
+ * Contract drift guardrails.
6
+ *
7
+ * These tests are the CI gate for the additive-only contract policy:
8
+ * - The explicit wire-value lists below record which events have TYPED
9
+ * contracts. Removing an event from the typed maps (or renaming its wire
10
+ * value) fails the equality check and must be treated as a breaking change,
11
+ * not a refactor.
12
+ * - Type-level assertions verify the request/response resolution helpers
13
+ * keep resolving typed events to their contracts and unknown events to
14
+ * `any` (backward compatibility).
15
+ *
16
+ * When a list check fails: if you ADDED an event, add its wire value to the
17
+ * expected list here. If an existing entry disappeared or changed value,
18
+ * stop — that breaks published SDK consumers and the host runtime validation
19
+ * derived from these contracts.
20
+ */
21
+ const types_1 = require("../types");
22
+ const ui_passthrough_contracts_1 = require("./ui-passthrough-contracts");
23
+ const contractsBarrel = tslib_1.__importStar(require("./index"));
24
+ // Events with explicitly typed requests in HostEventRequestMap.
25
+ // Keep in sync with the interface — this list is what the snapshot locks.
26
+ const TYPED_HOST_EVENTS = [
27
+ // Filters and parameters
28
+ types_1.HostEvent.UpdateRuntimeFilters,
29
+ types_1.HostEvent.UpdateParameters,
30
+ types_1.HostEvent.UpdateFilters,
31
+ types_1.HostEvent.UpdateCrossFilter,
32
+ types_1.HostEvent.OpenFilter,
33
+ types_1.HostEvent.OpenParameter,
34
+ // Tabs and vizs
35
+ types_1.HostEvent.SetVisibleVizs,
36
+ types_1.HostEvent.SetVisibleTabs,
37
+ types_1.HostEvent.SetHiddenTabs,
38
+ types_1.HostEvent.SetActiveTab,
39
+ // Navigation
40
+ types_1.HostEvent.Navigate,
41
+ // Search and columns
42
+ types_1.HostEvent.Search,
43
+ types_1.HostEvent.ResetSearch,
44
+ types_1.HostEvent.AddColumns,
45
+ types_1.HostEvent.RemoveColumn,
46
+ // Viz-scoped actions
47
+ types_1.HostEvent.Edit,
48
+ types_1.HostEvent.Save,
49
+ types_1.HostEvent.Delete,
50
+ types_1.HostEvent.Share,
51
+ types_1.HostEvent.Present,
52
+ types_1.HostEvent.CopyLink,
53
+ types_1.HostEvent.ExportTML,
54
+ types_1.HostEvent.EditTML,
55
+ types_1.HostEvent.UpdateTML,
56
+ types_1.HostEvent.SchedulesList,
57
+ types_1.HostEvent.Schedule,
58
+ types_1.HostEvent.SpotIQAnalyze,
59
+ types_1.HostEvent.ShowUnderlyingData,
60
+ types_1.HostEvent.CreateMonitor,
61
+ types_1.HostEvent.ManageMonitor,
62
+ types_1.HostEvent.SyncToSheets,
63
+ types_1.HostEvent.SyncToOtherApps,
64
+ types_1.HostEvent.ManagePipelines,
65
+ types_1.HostEvent.DownloadAsPng,
66
+ types_1.HostEvent.DownloadAsCsv,
67
+ types_1.HostEvent.DownloadAsXlsx,
68
+ types_1.HostEvent.DownloadAsPdf,
69
+ types_1.HostEvent.Explore,
70
+ types_1.HostEvent.AskSage,
71
+ types_1.HostEvent.AskSpotter,
72
+ types_1.HostEvent.AnswerChartSwitcher,
73
+ // Liveboard
74
+ types_1.HostEvent.UpdatePersonalisedView,
75
+ types_1.HostEvent.SelectPersonalizedView,
76
+ types_1.HostEvent.ResetLiveboardPersonalisedView,
77
+ types_1.HostEvent.AIHighlights,
78
+ types_1.HostEvent.SendTestScheduleEmail,
79
+ types_1.HostEvent.RefreshLiveboardBrowserCache,
80
+ // Spotter
81
+ types_1.HostEvent.SpotterSearch,
82
+ types_1.HostEvent.ResetSpotterConversation,
83
+ types_1.HostEvent.ShareSpotterConversation,
84
+ types_1.HostEvent.CloseSpotterShareConversation,
85
+ types_1.HostEvent.ExitSpotterSharedConversation,
86
+ types_1.HostEvent.PinSpotterConversation,
87
+ types_1.HostEvent.UnpinSpotterConversation,
88
+ types_1.HostEvent.EditLastPrompt,
89
+ types_1.HostEvent.DeleteLastPrompt,
90
+ types_1.HostEvent.PreviewSpotterData,
91
+ types_1.HostEvent.SpotterVizSendUserMessage,
92
+ types_1.HostEvent.InitSpotterVizConversation,
93
+ types_1.HostEvent.OpenSpotterVizPanel,
94
+ types_1.HostEvent.CloseSpotterVizPanel,
95
+ ];
96
+ // Type-level assertions: compile failures here mean contract resolution
97
+ // regressed. `expectType` is erased at runtime.
98
+ const expectType = (value) => value;
99
+ describe('event contracts (drift guardrails)', () => {
100
+ // The lists below LOCK the set of typed events. Adding an event is an
101
+ // intentional, additive edit here; a removed/renamed wire value fails this
102
+ // test — which is the signal that it is a breaking change, not a refactor.
103
+ test('typed host event wire values are stable (additive-only)', () => {
104
+ expect(TYPED_HOST_EVENTS.map((event) => `${event}`).sort()).toEqual([
105
+ 'AIHighlights',
106
+ 'AskSage',
107
+ 'AskSpotter',
108
+ 'CloseSpotterShareConversation',
109
+ 'CloseSpotterVizPanel',
110
+ 'DeleteLastPrompt',
111
+ 'EditLastPrompt',
112
+ 'ExitSpotterSharedConversation',
113
+ 'InitSpotterVizConversation',
114
+ 'Navigate',
115
+ 'OpenSpotterVizPanel',
116
+ 'PinSpotterConversation',
117
+ 'PreviewSpotterData',
118
+ 'ResetLiveboardPersonalisedView',
119
+ 'ResetSpotterConversation',
120
+ 'SelectPersonalisedView',
121
+ 'SetActiveTab',
122
+ 'SetPinboardHiddenTabs',
123
+ 'SetPinboardVisibleTabs',
124
+ 'SetPinboardVisibleVizs',
125
+ 'ShareSpotterConversation',
126
+ 'SpotterSearch',
127
+ 'SpotterVizSendUserMessage',
128
+ 'UnpinSpotterConversation',
129
+ 'UpdateCrossFilter',
130
+ 'UpdateParameters',
131
+ 'UpdatePersonalisedView',
132
+ 'UpdateRuntimeFilters',
133
+ 'addColumns',
134
+ 'answerChartSwitcher',
135
+ 'createMonitor',
136
+ 'downloadAsCSV',
137
+ 'downloadAsPdf',
138
+ 'downloadAsPng',
139
+ 'downloadAsXLSX',
140
+ 'edit',
141
+ 'editTSL',
142
+ 'embedDocument',
143
+ 'explore',
144
+ 'exportTSL',
145
+ 'manage-pipeline',
146
+ 'manageMonitor',
147
+ 'onDeleteAnswer',
148
+ 'openFilter',
149
+ 'openParameter',
150
+ 'present',
151
+ 'refreshLiveboardBrowserCache',
152
+ 'removeColumn',
153
+ 'resetSearch',
154
+ 'save',
155
+ 'schedule-list',
156
+ 'search',
157
+ 'sendTestScheduleEmail',
158
+ 'share',
159
+ 'showUnderlyingData',
160
+ 'spotIQAnalyze',
161
+ 'subscription',
162
+ 'sync-to-other-apps',
163
+ 'sync-to-sheets',
164
+ 'updateFilters',
165
+ 'updateTSL',
166
+ ]);
167
+ });
168
+ test('UI passthrough wire values are stable (additive-only)', () => {
169
+ expect(Object.values(ui_passthrough_contracts_1.UIPassthroughEvent).sort()).toEqual([
170
+ 'addVizToPinboard',
171
+ 'drillDown',
172
+ 'getAnswerPageConfig',
173
+ 'getAnswerSession',
174
+ 'getAvailableUiPassthroughs',
175
+ 'getDiscoverabilityStatus',
176
+ 'getExportRequestForCurrentPinboard',
177
+ 'getFilters',
178
+ 'getGroups',
179
+ 'getIframeUrl',
180
+ 'getParameters',
181
+ 'getPinboardPageConfig',
182
+ 'getTML',
183
+ 'getTabs',
184
+ 'getUnsavedAnswerTML',
185
+ 'saveAnswer',
186
+ 'updateFilters',
187
+ ]);
188
+ });
189
+ test('every typed host event is a real HostEvent member', () => {
190
+ const allHostEventValues = new Set(Object.values(types_1.HostEvent));
191
+ TYPED_HOST_EVENTS.forEach((event) => {
192
+ expect(allHostEventValues.has(event)).toBe(true);
193
+ });
194
+ });
195
+ test('contract resolution helpers compile against the typed map', () => {
196
+ // Typed event resolves to its contract type.
197
+ expectType(undefined);
198
+ expectType(undefined);
199
+ expectType(undefined);
200
+ // Untyped event stays `any` (backward compatible).
201
+ const untyped = { anything: 'goes' };
202
+ expect(untyped).toBeDefined();
203
+ // Response helper resolves for UI-passthrough-backed events.
204
+ expectType(undefined);
205
+ });
206
+ test('embed event enum wire values referenced by typed payloads are stable', () => {
207
+ expect([
208
+ types_1.EmbedEvent.AuthInit,
209
+ types_1.EmbedEvent.EmbedListenerReady,
210
+ types_1.EmbedEvent.CustomAction,
211
+ ].map((e) => `${e}`).sort()).toEqual([
212
+ 'EmbedListenerReady',
213
+ 'authInit',
214
+ 'customAction',
215
+ ]);
216
+ });
217
+ test('CustomAction resolves to its typed payload; answerService on the dedicated type', () => {
218
+ // Wire data resolves to CustomActionPayload.
219
+ expectType(undefined);
220
+ // payload.data.id is a typed string (type-level indexed access).
221
+ expectType(undefined);
222
+ const svc = undefined;
223
+ expect(svc).toBeUndefined();
224
+ // Untyped embed event stays `any` (backward compatible).
225
+ const untyped = { anything: 'goes' };
226
+ expect(untyped).toBeDefined();
227
+ });
228
+ test('HostEvent doc examples compile against TriggerData (docs and types must agree)', () => {
229
+ // Payloads copied verbatim from the HostEvent enum @example blocks.
230
+ // If one stops compiling, the docs or the contract is wrong; fix that.
231
+ const trigger = (_event, _data) => true;
232
+ const ok = [
233
+ trigger(types_1.HostEvent.UpdateParameters, [{ name: 'Integer Range Param', value: 10, isVisibleToUser: false }]),
234
+ trigger(types_1.HostEvent.UpdateParameters, [{
235
+ name: 'Integer Range Param',
236
+ value: 10,
237
+ applicability: { level: 'TAB', targetId: 'e0836cad-4fdf-42d4-bd97-567a6b2a6058' },
238
+ }]),
239
+ trigger(types_1.HostEvent.UpdateRuntimeFilters, [
240
+ { columnName: 'state', operator: types_1.RuntimeFilterOp.EQ, values: ['michigan'] },
241
+ { columnName: 'product', operator: types_1.RuntimeFilterOp.IN, values: ['shoes', 'boots'] },
242
+ ]),
243
+ trigger(types_1.HostEvent.UpdateFilters, { filter: { column: 'item type', oper: 'IN', values: ['bags', 'shirts'] } }),
244
+ trigger(types_1.HostEvent.UpdateFilters, {
245
+ filter: { column: 'date', oper: 'EQ', values: ['JULY', '2023'], type: 'MONTH_YEAR' },
246
+ }),
247
+ trigger(types_1.HostEvent.OpenFilter, {
248
+ column: { columnId: '<column-GUID>', name: 'column name', type: 'ATTRIBUTE', dataType: 'INT64' },
249
+ }),
250
+ trigger(types_1.HostEvent.OpenFilter, { column: { columnId: '<column-GUID>' } }),
251
+ trigger(types_1.HostEvent.OpenParameter, { parameter: { parameterId: '<parameter-GUID>' } }),
252
+ trigger(types_1.HostEvent.OpenParameter, {
253
+ parameter: { parameterId: '<parameter-GUID>' },
254
+ applicability: { level: 'GROUP', targetId: '<group-GUID>' },
255
+ }),
256
+ trigger(types_1.HostEvent.UpdateFilters, {
257
+ filter: {
258
+ column: 'item type',
259
+ oper: 'IN',
260
+ values: ['bags', 'shirts'],
261
+ applicability: { level: 'TAB', targetId: 'e0836cad-4fdf-42d4-bd97-567a6b2a6058' },
262
+ },
263
+ }),
264
+ trigger(types_1.HostEvent.OpenFilter, {
265
+ column: { columnId: '<column-GUID>' },
266
+ applicability: { level: 'TAB', targetId: '<tab-GUID>' },
267
+ }),
268
+ trigger(types_1.HostEvent.Navigate, -1),
269
+ trigger(types_1.HostEvent.Navigate, 'home'),
270
+ trigger(types_1.HostEvent.Navigate, { path: 'home', replace: true }),
271
+ trigger(types_1.HostEvent.Search, {
272
+ searchQuery: '[sales] by [item type]',
273
+ dataSources: ['cd252e5c-b552-49a8-821d-3eadaa049cca'],
274
+ execute: true,
275
+ }),
276
+ trigger(types_1.HostEvent.SetActiveTab, { tabId: '730496d6-6903-4601-937e-2c691821af3c' }),
277
+ trigger(types_1.HostEvent.UpdateCrossFilter, {
278
+ vizId: 'b535c760-8bbe-4e6f-bb26-af56b4129a1e',
279
+ conditions: [
280
+ { columnName: 'Category', values: ['mfgr#12', 'mfgr#14'] },
281
+ { columnName: 'color', values: ['mint', 'hot'] },
282
+ ],
283
+ }),
284
+ trigger(types_1.HostEvent.SpotterSearch, { query: 'revenue per year', executeSearch: true }),
285
+ ];
286
+ expect(ok.every(Boolean)).toBe(true);
287
+ });
288
+ // Per-context request interfaces are documentation-only today: exported and
289
+ // linked from docs, but trigger() still accepts the cross-context superset.
290
+ test('per-context request interfaces are exported and shaped as documented', () => {
291
+ expectType({ column: { columnId: 'c' } });
292
+ expectType({ column: { columnId: 'c', dataType: 'INT64' } });
293
+ // The default request stays the cross-context superset.
294
+ expectType({});
295
+ });
296
+ test('the /contracts barrel re-exports the public runtime surface', () => {
297
+ // Importing the barrel executes its re-exports; assert the runtime
298
+ // values consumers rely on from the /contracts entry point.
299
+ expect(contractsBarrel.UIPassthroughEvent).toBeDefined();
300
+ expect(contractsBarrel.CustomActionsPosition).toBeDefined();
301
+ expect(contractsBarrel.CustomActionTarget).toBeDefined();
302
+ expect(contractsBarrel.ApplicabilityLevel).toBeDefined();
303
+ });
304
+ test('trigger data (TriggerData) autocompletes and flags unknown fields', () => {
305
+ // Known fields resolve (drives autocomplete + hover).
306
+ const valid = {
307
+ filters: [{ columnName: 'Region', values: ['East'] }],
308
+ };
309
+ // Omitting fields still compiles (all fields optional).
310
+ const empty = {};
311
+ // Extra fields via a variable still compile (no excess check).
312
+ const viaVariable = {
313
+ filters: [{ columnName: 'Region', values: ['East'] }],
314
+ someExtra: 1,
315
+ };
316
+ const loose = viaVariable;
317
+ // Unknown fields on an object literal are flagged — at the top level...
318
+ const topExtra = {
319
+ filters: [],
320
+ // @ts-expect-error — `topLevelExtra` is not on the contract
321
+ topLevelExtra: 1,
322
+ };
323
+ // ...and at any depth.
324
+ const nestedExtra = {
325
+ // @ts-expect-error — `legacyField` is not on the filter contract
326
+ filters: [{ columnName: 'Region', values: ['East'], legacyField: true }],
327
+ };
328
+ // A non-literal sharing no field is flagged (TS weak-type check).
329
+ const unrelated = { totallyDifferent: true };
330
+ // @ts-expect-error — no overlap with the UpdateFilters contract
331
+ const zeroOverlap = unrelated;
332
+ // A wrong TYPE on a known field is flagged.
333
+ const bad = {
334
+ // @ts-expect-error — values must be an array, not a number
335
+ filters: [{ values: 123 }],
336
+ };
337
+ // `{}` is accepted for void events (AIHighlights requires it).
338
+ const voidEmpty = {};
339
+ // Unmapped events keep a fully permissive payload.
340
+ const unmapped = { anything: 'goes' };
341
+ const all = [valid, empty, loose, topExtra, nestedExtra, zeroOverlap, bad];
342
+ expect([...all, voidEmpty, unmapped].every(Boolean)).toBe(true);
343
+ });
344
+ });
345
+ //# sourceMappingURL=contracts.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.spec.js","sourceRoot":"","sources":["../../../src/contracts/contracts.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Copyright (c) 2026
3
+ *
4
+ * Typed payload contracts for {@link EmbedEvent}s (ThoughtSpot app -> SDK).
5
+ *
6
+ * The SDK delivers embed events to `embed.on()` callbacks wrapped in the
7
+ * {@link MessagePayload} envelope `{ type, data, status? }`. The map below
8
+ * types the `data` field per event. Events absent from the map resolve to
9
+ * `any` until their payload is audited against what the host actually sends
10
+ * (codify observed behavior, not documented behavior).
11
+ *
12
+ * Same additive-only evolution rules as host-event-contracts.ts.
13
+ * @module contracts
14
+ */
15
+ import type { CustomActionPayload, EmbedEvent, MessagePayload } from '../types';
16
+ import type { AnswerService } from '../utils/graphql/answerService/answerService';
17
+ /**
18
+ * Typed `data` field per embed event. Seed with audited events only.
19
+ */
20
+ export interface EmbedEventDataExtension {
21
+ [EmbedEvent.AuthInit]: {
22
+ /**
23
+ * Whether authentication was successful.
24
+ */
25
+ isLoggedIn?: boolean;
26
+ [key: string]: any;
27
+ };
28
+ [EmbedEvent.EmbedListenerReady]: Record<string, any>;
29
+ /**
30
+ * Fired when a callback-type custom action is triggered. Use
31
+ * `payload.data.id` to identify which action fired.
32
+ */
33
+ [EmbedEvent.CustomAction]: CustomActionPayload;
34
+ }
35
+ /**
36
+ * Resolves the typed `data` payload for an embed event; `any` when the
37
+ * event has not been audited/typed yet.
38
+ */
39
+ export type EmbedEventData<EmbedEventT extends EmbedEvent> = EmbedEventT extends keyof EmbedEventDataExtension ? EmbedEventDataExtension[EmbedEventT] : any;
40
+ /**
41
+ * Full envelope delivered to `embed.on()` callbacks for a given event:
42
+ * the wire fields (`type`, `status`) plus the typed `data`.
43
+ */
44
+ export type EmbedEventPayload<EmbedEventT extends EmbedEvent> = Omit<MessagePayload, 'data'> & {
45
+ data: EmbedEventData<EmbedEventT>;
46
+ };
47
+ /**
48
+ * Payload delivered to `on(EmbedEvent.CustomAction)`. Beyond the wire fields,
49
+ * the SDK attaches an {@link AnswerService} built from the event's session and
50
+ * answer data (see utils/processData.ts `processCustomAction`) — annotate your
51
+ * callback with this type to access it:
52
+ *
53
+ * ```ts
54
+ * embed.on(EmbedEvent.CustomAction, (payload: CustomActionEventPayload) => {
55
+ * if (payload.data.id === 'my-action') {
56
+ * payload.answerService?.getUnderlyingDataForPoint([]);
57
+ * }
58
+ * });
59
+ * ```
60
+ *
61
+ * It is a dedicated type rather than folded into `on()`'s generic callback
62
+ * because the SDK's event registry types callbacks as the plain
63
+ * {@link MessagePayload}, which the enrichment cannot be intersected into
64
+ * without restructuring that registry.
65
+ */
66
+ export type CustomActionEventPayload = EmbedEventPayload<EmbedEvent.CustomAction> & {
67
+ answerService?: AnswerService;
68
+ };
69
+ /**
70
+ * String-name keyed view for the host side (addresses events by wire value).
71
+ */
72
+ export type EmbedEventName = `${EmbedEvent}`;
73
+ //# sourceMappingURL=embed-event-payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-event-payloads.d.ts","sourceRoot":"","sources":["../../../src/contracts/embed-event-payloads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAIhF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QACnB;;WAEG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACtB,CAAC;IACF,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrD;;;OAGG;IACH,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,WAAW,SAAS,UAAU,IACrD,WAAW,SAAS,MAAM,uBAAuB,GAC3C,uBAAuB,CAAC,WAAW,CAAC,GACpC,GAAG,CAAC;AAEd;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,WAAW,SAAS,UAAU,IACxD,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAC3B,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC;AAEN;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG;IAAE,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,UAAU,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=embed-event-payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-event-payloads.js","sourceRoot":"","sources":["../../../src/contracts/embed-event-payloads.ts"],"names":[],"mappings":""}