@thoughtspot/visual-embed-sdk 1.53.0 → 1.53.2-beta

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 (203) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/auth.d.ts.map +1 -1
  3. package/cjs/src/auth.js +25 -6
  4. package/cjs/src/auth.js.map +1 -1
  5. package/cjs/src/auth.spec.js +40 -8
  6. package/cjs/src/auth.spec.js.map +1 -1
  7. package/cjs/src/contracts/contracts.spec.js +169 -2
  8. package/cjs/src/contracts/contracts.spec.js.map +1 -1
  9. package/cjs/src/contracts/embed-event-payloads.d.ts +212 -14
  10. package/cjs/src/contracts/embed-event-payloads.d.ts.map +1 -1
  11. package/cjs/src/contracts/host-event-contracts.d.ts +11 -0
  12. package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
  13. package/cjs/src/css-variables.d.ts +140 -0
  14. package/cjs/src/css-variables.d.ts.map +1 -1
  15. package/cjs/src/embed/app.d.ts +1 -0
  16. package/cjs/src/embed/app.d.ts.map +1 -1
  17. package/cjs/src/embed/app.js.map +1 -1
  18. package/cjs/src/embed/auto-frame-renderer.d.ts +14 -1
  19. package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -1
  20. package/cjs/src/embed/auto-frame-renderer.js +91 -2
  21. package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
  22. package/cjs/src/embed/auto-frame-renderer.spec.js +112 -7
  23. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
  24. package/cjs/src/embed/conversation.d.ts +14 -0
  25. package/cjs/src/embed/conversation.d.ts.map +1 -1
  26. package/cjs/src/embed/conversation.js.map +1 -1
  27. package/cjs/src/embed/conversation.spec.js +22 -0
  28. package/cjs/src/embed/conversation.spec.js.map +1 -1
  29. package/cjs/src/embed/host-events.spec.js +50 -0
  30. package/cjs/src/embed/host-events.spec.js.map +1 -1
  31. package/cjs/src/embed/liveboard.d.ts +2 -16
  32. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  33. package/cjs/src/embed/liveboard.js +29 -10
  34. package/cjs/src/embed/liveboard.js.map +1 -1
  35. package/cjs/src/embed/liveboard.spec.js +139 -0
  36. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  37. package/cjs/src/embed/spotter-utils.d.ts +1 -0
  38. package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
  39. package/cjs/src/embed/spotter-utils.js +7 -1
  40. package/cjs/src/embed/spotter-utils.js.map +1 -1
  41. package/cjs/src/embed/spotter-utils.spec.js +19 -0
  42. package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
  43. package/cjs/src/embed/ts-embed.d.ts +21 -16
  44. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  45. package/cjs/src/embed/ts-embed.js +77 -63
  46. package/cjs/src/embed/ts-embed.js.map +1 -1
  47. package/cjs/src/embed/ts-embed.spec.js +240 -7
  48. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  49. package/cjs/src/index.d.ts +2 -2
  50. package/cjs/src/index.d.ts.map +1 -1
  51. package/cjs/src/index.js.map +1 -1
  52. package/cjs/src/react/all-types-export.d.ts +1 -1
  53. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  54. package/cjs/src/react/all-types-export.js.map +1 -1
  55. package/cjs/src/react/util.d.ts +8 -1
  56. package/cjs/src/react/util.d.ts.map +1 -1
  57. package/cjs/src/react/util.js.map +1 -1
  58. package/cjs/src/types.d.ts +249 -2
  59. package/cjs/src/types.d.ts.map +1 -1
  60. package/cjs/src/types.js +247 -0
  61. package/cjs/src/types.js.map +1 -1
  62. package/cjs/src/utils/runtimeTelemetry.d.ts +11 -0
  63. package/cjs/src/utils/runtimeTelemetry.d.ts.map +1 -0
  64. package/cjs/src/utils/runtimeTelemetry.js +34 -0
  65. package/cjs/src/utils/runtimeTelemetry.js.map +1 -0
  66. package/cjs/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  67. package/cjs/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  68. package/cjs/src/utils/runtimeTelemetry.spec.js +124 -0
  69. package/cjs/src/utils/runtimeTelemetry.spec.js.map +1 -0
  70. package/dist/{index-CyDR8j_0.js → index-DQ7r5f1z.js} +1 -1
  71. package/dist/src/auth.d.ts.map +1 -1
  72. package/dist/src/contracts/embed-event-payloads.d.ts +212 -14
  73. package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -1
  74. package/dist/src/contracts/host-event-contracts.d.ts +11 -0
  75. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
  76. package/dist/src/css-variables.d.ts +140 -0
  77. package/dist/src/css-variables.d.ts.map +1 -1
  78. package/dist/src/embed/app.d.ts +1 -0
  79. package/dist/src/embed/app.d.ts.map +1 -1
  80. package/dist/src/embed/auto-frame-renderer.d.ts +14 -1
  81. package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -1
  82. package/dist/src/embed/conversation.d.ts +14 -0
  83. package/dist/src/embed/conversation.d.ts.map +1 -1
  84. package/dist/src/embed/liveboard.d.ts +2 -16
  85. package/dist/src/embed/liveboard.d.ts.map +1 -1
  86. package/dist/src/embed/spotter-utils.d.ts +1 -0
  87. package/dist/src/embed/spotter-utils.d.ts.map +1 -1
  88. package/dist/src/embed/ts-embed.d.ts +21 -16
  89. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  90. package/dist/src/index.d.ts +2 -2
  91. package/dist/src/index.d.ts.map +1 -1
  92. package/dist/src/react/all-types-export.d.ts +1 -1
  93. package/dist/src/react/all-types-export.d.ts.map +1 -1
  94. package/dist/src/react/util.d.ts +8 -1
  95. package/dist/src/react/util.d.ts.map +1 -1
  96. package/dist/src/types.d.ts +249 -2
  97. package/dist/src/types.d.ts.map +1 -1
  98. package/dist/src/utils/runtimeTelemetry.d.ts +11 -0
  99. package/dist/src/utils/runtimeTelemetry.d.ts.map +1 -0
  100. package/dist/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  101. package/dist/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  102. package/dist/tsembed-react.es.js +474 -84
  103. package/dist/tsembed-react.js +473 -83
  104. package/dist/tsembed.es.js +542 -85
  105. package/dist/tsembed.js +541 -84
  106. package/dist/visual-embed-sdk-react-full.d.ts +649 -30
  107. package/dist/visual-embed-sdk-react.d.ts +646 -28
  108. package/dist/visual-embed-sdk.d.ts +642 -44
  109. package/lib/package.json +1 -1
  110. package/lib/src/auth.d.ts.map +1 -1
  111. package/lib/src/auth.js +25 -6
  112. package/lib/src/auth.js.map +1 -1
  113. package/lib/src/auth.spec.js +40 -8
  114. package/lib/src/auth.spec.js.map +1 -1
  115. package/lib/src/contracts/contracts.spec.js +169 -2
  116. package/lib/src/contracts/contracts.spec.js.map +1 -1
  117. package/lib/src/contracts/embed-event-payloads.d.ts +212 -14
  118. package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -1
  119. package/lib/src/contracts/host-event-contracts.d.ts +11 -0
  120. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
  121. package/lib/src/css-variables.d.ts +140 -0
  122. package/lib/src/css-variables.d.ts.map +1 -1
  123. package/lib/src/embed/app.d.ts +1 -0
  124. package/lib/src/embed/app.d.ts.map +1 -1
  125. package/lib/src/embed/app.js.map +1 -1
  126. package/lib/src/embed/auto-frame-renderer.d.ts +14 -1
  127. package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -1
  128. package/lib/src/embed/auto-frame-renderer.js +91 -2
  129. package/lib/src/embed/auto-frame-renderer.js.map +1 -1
  130. package/lib/src/embed/auto-frame-renderer.spec.js +113 -8
  131. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
  132. package/lib/src/embed/conversation.d.ts +14 -0
  133. package/lib/src/embed/conversation.d.ts.map +1 -1
  134. package/lib/src/embed/conversation.js.map +1 -1
  135. package/lib/src/embed/conversation.spec.js +22 -0
  136. package/lib/src/embed/conversation.spec.js.map +1 -1
  137. package/lib/src/embed/host-events.spec.js +50 -0
  138. package/lib/src/embed/host-events.spec.js.map +1 -1
  139. package/lib/src/embed/liveboard.d.ts +2 -16
  140. package/lib/src/embed/liveboard.d.ts.map +1 -1
  141. package/lib/src/embed/liveboard.js +28 -10
  142. package/lib/src/embed/liveboard.js.map +1 -1
  143. package/lib/src/embed/liveboard.spec.js +139 -0
  144. package/lib/src/embed/liveboard.spec.js.map +1 -1
  145. package/lib/src/embed/spotter-utils.d.ts +1 -0
  146. package/lib/src/embed/spotter-utils.d.ts.map +1 -1
  147. package/lib/src/embed/spotter-utils.js +7 -1
  148. package/lib/src/embed/spotter-utils.js.map +1 -1
  149. package/lib/src/embed/spotter-utils.spec.js +19 -0
  150. package/lib/src/embed/spotter-utils.spec.js.map +1 -1
  151. package/lib/src/embed/ts-embed.d.ts +21 -16
  152. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  153. package/lib/src/embed/ts-embed.js +78 -64
  154. package/lib/src/embed/ts-embed.js.map +1 -1
  155. package/lib/src/embed/ts-embed.spec.js +240 -7
  156. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  157. package/lib/src/index.d.ts +2 -2
  158. package/lib/src/index.d.ts.map +1 -1
  159. package/lib/src/index.js.map +1 -1
  160. package/lib/src/react/all-types-export.d.ts +1 -1
  161. package/lib/src/react/all-types-export.d.ts.map +1 -1
  162. package/lib/src/react/all-types-export.js.map +1 -1
  163. package/lib/src/react/util.d.ts +8 -1
  164. package/lib/src/react/util.d.ts.map +1 -1
  165. package/lib/src/react/util.js.map +1 -1
  166. package/lib/src/types.d.ts +249 -2
  167. package/lib/src/types.d.ts.map +1 -1
  168. package/lib/src/types.js +247 -0
  169. package/lib/src/types.js.map +1 -1
  170. package/lib/src/utils/runtimeTelemetry.d.ts +11 -0
  171. package/lib/src/utils/runtimeTelemetry.d.ts.map +1 -0
  172. package/lib/src/utils/runtimeTelemetry.js +28 -0
  173. package/lib/src/utils/runtimeTelemetry.js.map +1 -0
  174. package/lib/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  175. package/lib/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  176. package/lib/src/utils/runtimeTelemetry.spec.js +122 -0
  177. package/lib/src/utils/runtimeTelemetry.spec.js.map +1 -0
  178. package/lib/src/visual-embed-sdk.d.ts +642 -44
  179. package/package.json +1 -1
  180. package/src/auth.spec.ts +47 -11
  181. package/src/auth.ts +35 -6
  182. package/src/contracts/contracts.spec.ts +186 -3
  183. package/src/contracts/embed-event-payloads.ts +281 -14
  184. package/src/contracts/host-event-contracts.ts +14 -0
  185. package/src/css-variables.ts +168 -0
  186. package/src/embed/app.ts +1 -0
  187. package/src/embed/auto-frame-renderer.spec.ts +134 -8
  188. package/src/embed/auto-frame-renderer.ts +103 -2
  189. package/src/embed/conversation.spec.ts +24 -0
  190. package/src/embed/conversation.ts +14 -0
  191. package/src/embed/host-events.spec.ts +68 -0
  192. package/src/embed/liveboard.spec.ts +156 -0
  193. package/src/embed/liveboard.ts +34 -10
  194. package/src/embed/spotter-utils.spec.ts +20 -0
  195. package/src/embed/spotter-utils.ts +12 -1
  196. package/src/embed/ts-embed.spec.ts +297 -8
  197. package/src/embed/ts-embed.ts +79 -64
  198. package/src/index.ts +2 -0
  199. package/src/react/all-types-export.ts +1 -0
  200. package/src/react/util.ts +13 -1
  201. package/src/types.ts +249 -0
  202. package/src/utils/runtimeTelemetry.spec.ts +148 -0
  203. package/src/utils/runtimeTelemetry.ts +50 -0
@@ -0,0 +1,148 @@
1
+ import {
2
+ describeRuntimeFilters,
3
+ describeRuntimeParameters,
4
+ summarizeRuntimeDataForTelemetry,
5
+ } from './runtimeTelemetry';
6
+ import { RuntimeFilter, RuntimeFilterOp, RuntimeParameter } from '../types';
7
+ import { ApplicabilityLevel } from '../contracts/ui-passthrough-contracts';
8
+
9
+ const customerFilters: RuntimeFilter[] = [
10
+ {
11
+ columnName: 'Patient SSN',
12
+ operator: RuntimeFilterOp.EQ,
13
+ values: ['123-45-6789'],
14
+ },
15
+ {
16
+ columnName: 'Revenue',
17
+ operator: RuntimeFilterOp.BW,
18
+ values: [1000, 5000],
19
+ },
20
+ ];
21
+
22
+ const customerParameters: RuntimeParameter[] = [
23
+ {
24
+ name: 'Sales Region',
25
+ value: 'EMEA',
26
+ applicability: { level: ApplicabilityLevel.Tab, targetId: 'tab-guid' },
27
+ },
28
+ ];
29
+
30
+ describe('describeRuntimeFilters', () => {
31
+ test('reports the count and the operators used', () => {
32
+ expect(describeRuntimeFilters(customerFilters)).toEqual({
33
+ count: 2,
34
+ operators: ['EQ', 'BW'],
35
+ });
36
+ });
37
+
38
+ test('de-duplicates repeated operators', () => {
39
+ const filters = [
40
+ { columnName: 'a', operator: RuntimeFilterOp.EQ, values: ['x'] },
41
+ { columnName: 'b', operator: RuntimeFilterOp.EQ, values: ['y'] },
42
+ ];
43
+ expect(describeRuntimeFilters(filters).operators).toEqual(['EQ']);
44
+ });
45
+
46
+ test('drops an operator that is not a RuntimeFilterOp member', () => {
47
+ const filters = [
48
+ { columnName: 'a', operator: 'a-customer-value' as any, values: ['x'] },
49
+ ];
50
+ expect(describeRuntimeFilters(filters)).toEqual({ count: 1, operators: [] });
51
+ });
52
+
53
+ test('tolerates a filter with no operator', () => {
54
+ expect(describeRuntimeFilters([undefined as any, {} as any])).toEqual({
55
+ count: 2,
56
+ operators: [],
57
+ });
58
+ });
59
+
60
+ test('reports an empty list', () => {
61
+ expect(describeRuntimeFilters([])).toEqual({ count: 0, operators: [] });
62
+ });
63
+ });
64
+
65
+ describe('describeRuntimeParameters', () => {
66
+ test('reports the count and the applicability levels used', () => {
67
+ expect(describeRuntimeParameters(customerParameters)).toEqual({
68
+ count: 1,
69
+ applicabilityLevels: ['TAB'],
70
+ });
71
+ });
72
+
73
+ test('reports no level when the parameter has no applicability', () => {
74
+ expect(describeRuntimeParameters([{ name: 'Region', value: 'EMEA' }])).toEqual({
75
+ count: 1,
76
+ applicabilityLevels: [],
77
+ });
78
+ });
79
+
80
+ test('drops a level that is not an ApplicabilityLevel member', () => {
81
+ const parameters = [
82
+ { name: 'Region', value: 'EMEA', applicability: { level: 'EVERYWHERE' as any } },
83
+ ];
84
+ expect(describeRuntimeParameters(parameters).applicabilityLevels).toEqual([]);
85
+ });
86
+ });
87
+
88
+ describe('summarizeRuntimeDataForTelemetry', () => {
89
+ test('never returns a column name, a parameter name or an operand', () => {
90
+ const props = summarizeRuntimeDataForTelemetry({
91
+ liveboardId: 'lb-guid',
92
+ runtimeFilters: customerFilters,
93
+ runtimeParameters: customerParameters,
94
+ });
95
+
96
+ const serialised = JSON.stringify(props);
97
+ ['Patient SSN', '123-45-6789', 'Revenue', '1000', '5000', 'Sales Region', 'EMEA', 'tab-guid'].forEach(
98
+ (customerValue) => {
99
+ expect(serialised).not.toContain(customerValue);
100
+ },
101
+ );
102
+ });
103
+
104
+ test('replaces both arrays with their summaries', () => {
105
+ expect(
106
+ summarizeRuntimeDataForTelemetry({
107
+ runtimeFilters: customerFilters,
108
+ runtimeParameters: customerParameters,
109
+ }),
110
+ ).toEqual({
111
+ runtimeFilters: { count: 2, operators: ['EQ', 'BW'] },
112
+ runtimeParameters: { count: 1, applicabilityLevels: ['TAB'] },
113
+ });
114
+ });
115
+
116
+ test('leaves every other view config property untouched', () => {
117
+ expect(
118
+ summarizeRuntimeDataForTelemetry({
119
+ liveboardId: 'lb-guid',
120
+ fullHeight: true,
121
+ hiddenActions: ['download'],
122
+ }),
123
+ ).toEqual({
124
+ liveboardId: 'lb-guid',
125
+ fullHeight: true,
126
+ hiddenActions: ['download'],
127
+ });
128
+ });
129
+
130
+ test('omits the keys entirely when they are absent', () => {
131
+ const props = summarizeRuntimeDataForTelemetry({ liveboardId: 'lb-guid' });
132
+ expect(props).not.toHaveProperty('runtimeFilters');
133
+ expect(props).not.toHaveProperty('runtimeParameters');
134
+ });
135
+
136
+ test('drops a non-array value rather than passing it through', () => {
137
+ const props = summarizeRuntimeDataForTelemetry({
138
+ runtimeFilters: { columnName: 'Patient SSN' } as any,
139
+ runtimeParameters: 'Sales Region' as any,
140
+ });
141
+ expect(props).not.toHaveProperty('runtimeFilters');
142
+ expect(props).not.toHaveProperty('runtimeParameters');
143
+ });
144
+
145
+ test('tolerates an undefined view config', () => {
146
+ expect(summarizeRuntimeDataForTelemetry(undefined as any)).toEqual({});
147
+ });
148
+ });
@@ -0,0 +1,50 @@
1
+ import { RuntimeFilter, RuntimeFilterOp, RuntimeParameter } from '../types';
2
+ import { ApplicabilityLevel } from '../contracts/ui-passthrough-contracts';
3
+
4
+ // Membership is checked, not just the key: a bare key allowlist would upload an
5
+ // arbitrary customer string sitting under `operator` verbatim.
6
+ const isEnumMember = (enumObject: Record<string, string>, value: unknown): boolean =>
7
+ typeof value === 'string' && Object.values(enumObject).includes(value);
8
+
9
+ const uniqueEnumMembers = (
10
+ enumObject: Record<string, string>,
11
+ values: unknown[],
12
+ ): string[] => Array.from(new Set(values.filter((v) => isEnumMember(enumObject, v)))) as string[];
13
+
14
+ export const describeRuntimeFilters = (
15
+ runtimeFilters: RuntimeFilter[],
16
+ ): { count: number; operators: string[] } => ({
17
+ count: runtimeFilters.length,
18
+ operators: uniqueEnumMembers(
19
+ RuntimeFilterOp as unknown as Record<string, string>,
20
+ runtimeFilters.map((filter) => filter?.operator),
21
+ ),
22
+ });
23
+
24
+ export const describeRuntimeParameters = (
25
+ runtimeParameters: RuntimeParameter[],
26
+ ): { count: number; applicabilityLevels: string[] } => ({
27
+ count: runtimeParameters.length,
28
+ applicabilityLevels: uniqueEnumMembers(
29
+ ApplicabilityLevel as unknown as Record<string, string>,
30
+ runtimeParameters.map((parameter) => parameter?.applicability?.level),
31
+ ),
32
+ });
33
+
34
+ // Column names, parameter names and operands are customer data and must never
35
+ // reach Mixpanel; an unrecognized shape is dropped rather than forwarded.
36
+ export const summarizeRuntimeDataForTelemetry = <T extends Record<string, any>>(
37
+ viewConfig: T,
38
+ ): Record<string, any> => {
39
+ const { runtimeFilters, runtimeParameters, ...rest } = viewConfig ?? ({} as T);
40
+ const telemetryProps: Record<string, any> = { ...rest };
41
+
42
+ if (Array.isArray(runtimeFilters)) {
43
+ telemetryProps.runtimeFilters = describeRuntimeFilters(runtimeFilters);
44
+ }
45
+ if (Array.isArray(runtimeParameters)) {
46
+ telemetryProps.runtimeParameters = describeRuntimeParameters(runtimeParameters);
47
+ }
48
+
49
+ return telemetryProps;
50
+ };