@thoughtspot/visual-embed-sdk 1.35.0 → 1.35.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 (172) hide show
  1. package/cjs/package.json +15 -3
  2. package/cjs/src/embed/base.native.d.ts +1 -0
  3. package/cjs/src/embed/base.native.d.ts.map +1 -0
  4. package/cjs/src/embed/base.native.js +1 -0
  5. package/cjs/src/embed/base.native.js.map +1 -0
  6. package/cjs/src/embed/hello.d.ts +2 -0
  7. package/cjs/src/embed/hello.d.ts.map +1 -0
  8. package/cjs/src/embed/hello.js +6 -0
  9. package/cjs/src/embed/hello.js.map +1 -0
  10. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
  11. package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
  12. package/cjs/src/embed/searchEmbed-basic-auth.spec.js +104 -0
  13. package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
  14. package/cjs/src/native/LiveboardEmbed.d.ts +13 -0
  15. package/cjs/src/native/LiveboardEmbed.d.ts.map +1 -0
  16. package/cjs/src/native/LiveboardEmbed.js +146 -0
  17. package/cjs/src/native/LiveboardEmbed.js.map +1 -0
  18. package/cjs/src/native/commonUtils.d.ts +20 -0
  19. package/cjs/src/native/commonUtils.d.ts.map +1 -0
  20. package/cjs/src/native/commonUtils.js +175 -0
  21. package/cjs/src/native/commonUtils.js.map +1 -0
  22. package/cjs/src/native/commonUtils.spec.d.ts +2 -0
  23. package/cjs/src/native/commonUtils.spec.d.ts.map +1 -0
  24. package/cjs/src/native/commonUtils.spec.js +127 -0
  25. package/cjs/src/native/commonUtils.spec.js.map +1 -0
  26. package/cjs/src/native/embedConfig.d.ts +10 -0
  27. package/cjs/src/native/embedConfig.d.ts.map +1 -0
  28. package/cjs/src/native/embedConfig.js +12 -0
  29. package/cjs/src/native/embedConfig.js.map +1 -0
  30. package/cjs/src/native/index.d.ts +2 -0
  31. package/cjs/src/native/index.d.ts.map +1 -0
  32. package/cjs/src/native/index.js +7 -0
  33. package/cjs/src/native/index.js.map +1 -0
  34. package/cjs/src/native/types.d.ts +10 -0
  35. package/cjs/src/native/types.d.ts.map +1 -0
  36. package/cjs/src/native/types.js +3 -0
  37. package/cjs/src/native/types.js.map +1 -0
  38. package/cjs/src/parsers/filtersToRuntimeFilters.d.ts +6 -0
  39. package/cjs/src/parsers/filtersToRuntimeFilters.d.ts.map +1 -0
  40. package/cjs/src/parsers/filtersToRuntimeFilters.js +60 -0
  41. package/cjs/src/parsers/filtersToRuntimeFilters.js.map +1 -0
  42. package/cjs/src/parsers/filtersToRuntimeFilters.spec.d.ts +2 -0
  43. package/cjs/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +1 -0
  44. package/cjs/src/parsers/filtersToRuntimeFilters.spec.js +205 -0
  45. package/cjs/src/parsers/filtersToRuntimeFilters.spec.js.map +1 -0
  46. package/cjs/src/parsers/index.d.ts +2 -0
  47. package/cjs/src/parsers/index.d.ts.map +1 -0
  48. package/cjs/src/parsers/index.js +6 -0
  49. package/cjs/src/parsers/index.js.map +1 -0
  50. package/cjs/src/parsers/index.spec.d.ts +2 -0
  51. package/cjs/src/parsers/index.spec.d.ts.map +1 -0
  52. package/cjs/src/parsers/index.spec.js +9 -0
  53. package/cjs/src/parsers/index.spec.js.map +1 -0
  54. package/cjs/src/react-native/Liveboard.d.ts +1 -0
  55. package/cjs/src/react-native/Liveboard.d.ts.map +1 -0
  56. package/cjs/src/react-native/Liveboard.js +1 -0
  57. package/cjs/src/react-native/Liveboard.js.map +1 -0
  58. package/cjs/src/utils/processData.spec.js +33 -0
  59. package/cjs/src/utils/processData.spec.js.map +1 -1
  60. package/cjs/src/utils.d.ts +15 -0
  61. package/cjs/src/utils.d.ts.map +1 -1
  62. package/cjs/src/utils.js +24 -3
  63. package/cjs/src/utils.js.map +1 -1
  64. package/cjs/src/utils.spec.js +132 -0
  65. package/cjs/src/utils.spec.js.map +1 -1
  66. package/dist/{index-A4UOqx43.js → index-BXczdQc7.js} +1 -1
  67. package/dist/index-Bh8kjZh8.js +7370 -0
  68. package/dist/src/embed/hello.d.ts +2 -0
  69. package/dist/src/embed/hello.d.ts.map +1 -0
  70. package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
  71. package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
  72. package/dist/src/native/LiveboardEmbed.d.ts +13 -0
  73. package/dist/src/native/LiveboardEmbed.d.ts.map +1 -0
  74. package/dist/src/native/commonUtils.d.ts +20 -0
  75. package/dist/src/native/commonUtils.d.ts.map +1 -0
  76. package/dist/src/native/commonUtils.spec.d.ts +2 -0
  77. package/dist/src/native/commonUtils.spec.d.ts.map +1 -0
  78. package/dist/src/native/embedConfig.d.ts +10 -0
  79. package/dist/src/native/embedConfig.d.ts.map +1 -0
  80. package/dist/src/native/index.d.ts +2 -0
  81. package/dist/src/native/index.d.ts.map +1 -0
  82. package/dist/src/native/types.d.ts +10 -0
  83. package/dist/src/native/types.d.ts.map +1 -0
  84. package/dist/src/parsers/filtersToRuntimeFilters.d.ts +6 -0
  85. package/dist/src/parsers/filtersToRuntimeFilters.d.ts.map +1 -0
  86. package/dist/src/parsers/filtersToRuntimeFilters.spec.d.ts +2 -0
  87. package/dist/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +1 -0
  88. package/dist/src/parsers/index.d.ts +2 -0
  89. package/dist/src/parsers/index.d.ts.map +1 -0
  90. package/dist/src/parsers/index.spec.d.ts +2 -0
  91. package/dist/src/parsers/index.spec.d.ts.map +1 -0
  92. package/dist/src/utils.d.ts +15 -0
  93. package/dist/src/utils.d.ts.map +1 -1
  94. package/dist/tsembed-parsers.es.js +3831 -0
  95. package/dist/tsembed-parsers.js +3840 -0
  96. package/dist/tsembed-react.es.js +3 -3
  97. package/dist/tsembed-react.js +2 -2
  98. package/dist/tsembed.es.js +3 -3
  99. package/dist/tsembed.js +2 -2
  100. package/lib/package.json +15 -3
  101. package/lib/src/embed/base.native.d.ts +1 -0
  102. package/lib/src/embed/base.native.d.ts.map +1 -0
  103. package/lib/src/embed/base.native.js +1 -0
  104. package/lib/src/embed/base.native.js.map +1 -0
  105. package/lib/src/embed/hello.d.ts +2 -0
  106. package/lib/src/embed/hello.d.ts.map +1 -0
  107. package/lib/src/embed/hello.js +2 -0
  108. package/lib/src/embed/hello.js.map +1 -0
  109. package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
  110. package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
  111. package/lib/src/embed/searchEmbed-basic-auth.spec.js +101 -0
  112. package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
  113. package/lib/src/native/LiveboardEmbed.d.ts +13 -0
  114. package/lib/src/native/LiveboardEmbed.d.ts.map +1 -0
  115. package/lib/src/native/LiveboardEmbed.js +141 -0
  116. package/lib/src/native/LiveboardEmbed.js.map +1 -0
  117. package/lib/src/native/commonUtils.d.ts +20 -0
  118. package/lib/src/native/commonUtils.d.ts.map +1 -0
  119. package/lib/src/native/commonUtils.js +169 -0
  120. package/lib/src/native/commonUtils.js.map +1 -0
  121. package/lib/src/native/commonUtils.spec.d.ts +2 -0
  122. package/lib/src/native/commonUtils.spec.d.ts.map +1 -0
  123. package/lib/src/native/commonUtils.spec.js +124 -0
  124. package/lib/src/native/commonUtils.spec.js.map +1 -0
  125. package/lib/src/native/embedConfig.d.ts +10 -0
  126. package/lib/src/native/embedConfig.d.ts.map +1 -0
  127. package/lib/src/native/embedConfig.js +7 -0
  128. package/lib/src/native/embedConfig.js.map +1 -0
  129. package/lib/src/native/index.d.ts +2 -0
  130. package/lib/src/native/index.d.ts.map +1 -0
  131. package/lib/src/native/index.js +2 -0
  132. package/lib/src/native/index.js.map +1 -0
  133. package/lib/src/native/types.d.ts +10 -0
  134. package/lib/src/native/types.d.ts.map +1 -0
  135. package/lib/src/native/types.js +2 -0
  136. package/lib/src/native/types.js.map +1 -0
  137. package/lib/src/parsers/filtersToRuntimeFilters.d.ts +6 -0
  138. package/lib/src/parsers/filtersToRuntimeFilters.d.ts.map +1 -0
  139. package/lib/src/parsers/filtersToRuntimeFilters.js +55 -0
  140. package/lib/src/parsers/filtersToRuntimeFilters.js.map +1 -0
  141. package/lib/src/parsers/filtersToRuntimeFilters.spec.d.ts +2 -0
  142. package/lib/src/parsers/filtersToRuntimeFilters.spec.d.ts.map +1 -0
  143. package/lib/src/parsers/filtersToRuntimeFilters.spec.js +203 -0
  144. package/lib/src/parsers/filtersToRuntimeFilters.spec.js.map +1 -0
  145. package/lib/src/parsers/index.d.ts +2 -0
  146. package/lib/src/parsers/index.d.ts.map +1 -0
  147. package/lib/src/parsers/index.js +2 -0
  148. package/lib/src/parsers/index.js.map +1 -0
  149. package/lib/src/parsers/index.spec.d.ts +2 -0
  150. package/lib/src/parsers/index.spec.d.ts.map +1 -0
  151. package/lib/src/parsers/index.spec.js +7 -0
  152. package/lib/src/parsers/index.spec.js.map +1 -0
  153. package/lib/src/react-native/Liveboard.d.ts +1 -0
  154. package/lib/src/react-native/Liveboard.d.ts.map +1 -0
  155. package/lib/src/react-native/Liveboard.js +1 -0
  156. package/lib/src/react-native/Liveboard.js.map +1 -0
  157. package/lib/src/utils/processData.spec.js +33 -0
  158. package/lib/src/utils/processData.spec.js.map +1 -1
  159. package/lib/src/utils.d.ts +15 -0
  160. package/lib/src/utils.d.ts.map +1 -1
  161. package/lib/src/utils.js +20 -2
  162. package/lib/src/utils.js.map +1 -1
  163. package/lib/src/utils.spec.js +133 -1
  164. package/lib/src/utils.spec.js.map +1 -1
  165. package/package.json +15 -3
  166. package/src/native/commonUtils.spec.tsx +161 -0
  167. package/src/native/commonUtils.ts +183 -0
  168. package/src/native/index.ts +1 -0
  169. package/src/native/types.ts +10 -0
  170. package/src/utils/processData.spec.ts +42 -0
  171. package/src/utils.spec.ts +147 -1
  172. package/src/utils.ts +25 -2
@@ -0,0 +1,169 @@
1
+ import { getCustomisationsMobileEmbed, getQueryParamString } from '../utils';
2
+ import { Param } from '../types';
3
+ import pkgInfo from '../../package.json';
4
+ import { logger } from '../utils/logger';
5
+ /**
6
+ * This method constructs the webview URL with given config.
7
+ * @param config To get the webviewURL pass the necessary config options.
8
+ * host: string;
9
+ * authType: AuthType;
10
+ * liveboardId: string;
11
+ * getAuthToken: () => Promise<string>;
12
+ * These four are necessary arguments.
13
+ * @returns The Promise for WebView URL.
14
+ */
15
+ export const getWebViewUrl = async (config) => {
16
+ if (typeof config.getAuthToken !== 'function') {
17
+ throw new Error('`getAuthToken` must be a function that returns a Promise.');
18
+ }
19
+ const authToken = await config.getAuthToken();
20
+ if (!authToken) {
21
+ throw new Error('Failed to fetch initial authentication token.');
22
+ }
23
+ const hostAppUrl = encodeURIComponent(config.host.includes('localhost')
24
+ || config.host.includes('127.0.0.1')
25
+ || config.host.includes('10.0.2.2')
26
+ ? 'local-host'
27
+ : config.host);
28
+ const queryParams = {
29
+ [Param.EmbedApp]: true,
30
+ [Param.HostAppUrl]: hostAppUrl,
31
+ [Param.Version]: pkgInfo.version,
32
+ [Param.AuthType]: config.authType,
33
+ [Param.livedBoardEmbed]: true,
34
+ [Param.EnableFlipTooltipToContextMenu]: true,
35
+ [Param.ContextMenuTrigger]: true,
36
+ };
37
+ const queryString = getQueryParamString(queryParams);
38
+ const webViewUrl = `${config.host}/embed?${queryString}#/embed/viz/${encodeURIComponent(config.liveboardId)}`;
39
+ return webViewUrl;
40
+ };
41
+ /**
42
+ * setting up message handling for the message replies to TS instances.
43
+ * @param config The webview config
44
+ * @param event The message event from the WebView.
45
+ * @param WebViewRef Ref to use and inject javascript
46
+ */
47
+ export const setupWebViewMessageHandler = async (config, event, webViewRef) => {
48
+ const message = JSON.parse(event.nativeEvent.data);
49
+ const injectJavaScript = (codeSnip) => {
50
+ if (webViewRef === null || webViewRef === void 0 ? void 0 : webViewRef.current) {
51
+ webViewRef.current.injectJavaScript(codeSnip);
52
+ }
53
+ else {
54
+ logger.error('Reference for Webview not found!!');
55
+ }
56
+ };
57
+ const defaultHandleMessage = async () => {
58
+ switch (message.type) {
59
+ case 'appInit': {
60
+ try {
61
+ const authToken = await config.getAuthToken();
62
+ const initPayload = {
63
+ type: 'appInit',
64
+ data: {
65
+ host: config.host,
66
+ authToken,
67
+ customisations: getCustomisationsMobileEmbed(config),
68
+ },
69
+ };
70
+ injectJavaScript(jsCodeToHandleInteractionsForContextMenu);
71
+ injectJavaScript(`window.postMessage(${JSON.stringify(initPayload)}, '*');`);
72
+ }
73
+ catch (error) {
74
+ console.error('Error handling appInit:', error);
75
+ }
76
+ break;
77
+ }
78
+ case 'ThoughtspotAuthExpired': {
79
+ try {
80
+ const newAuthToken = await config.getAuthToken();
81
+ if (newAuthToken) {
82
+ const authExpirePayload = {
83
+ type: 'ThoughtspotAuthExpired',
84
+ data: { authToken: newAuthToken },
85
+ };
86
+ injectJavaScript(`window.postMessage(${JSON.stringify(authExpirePayload)}, '*');`);
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error('Error refreshing token on expiry:', error);
91
+ }
92
+ break;
93
+ }
94
+ case 'ThoughtspotAuthFailure': {
95
+ try {
96
+ const newAuthToken = await config.getAuthToken();
97
+ if (newAuthToken) {
98
+ const authFailurePayload = {
99
+ type: 'ThoughtspotAuthFailure',
100
+ data: { authToken: newAuthToken },
101
+ };
102
+ injectJavaScript(`window.postMessage(${JSON.stringify(authFailurePayload)}, '*');`);
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error('Error refreshing token on failure:', error);
107
+ }
108
+ break;
109
+ }
110
+ default:
111
+ console.warn('Unhandled message type:', message.type);
112
+ }
113
+ };
114
+ if (config.handleMessage) {
115
+ await config.handleMessage(event);
116
+ }
117
+ else {
118
+ await defaultHandleMessage();
119
+ }
120
+ };
121
+ const jsCodeToHandleInteractionsForContextMenu = `
122
+ // Disabling auofocus
123
+ document.querySelectorAll('input[autofocus], textarea[autofocus]').forEach(el => el.removeAttribute('autofocus'));
124
+
125
+ // adding meta tag to keep fixed viewport scalign
126
+ const meta = document.createElement('meta');
127
+ meta.name = 'viewport';
128
+ meta.content = 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no';
129
+ document.head.appendChild(meta);
130
+
131
+ // input focus problem. -> we can just force it inside our view.
132
+ document.addEventListener('focusin', (event) => {
133
+ const target = event.target;
134
+
135
+ if (
136
+ target.tagName === 'INPUT' ||
137
+ target.tagName === 'TEXTAREA'
138
+ ) {
139
+ const rect = target.getBoundingClientRect();
140
+ if (
141
+ rect.top < 0 ||
142
+ rect.bottom > window.innerHeight ||
143
+ rect.left < 0 ||
144
+ rect.right > window.innerWidth
145
+ ) {
146
+ event.preventDefault();
147
+ // target.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'end' });
148
+ const horizontalPadding = 10;
149
+
150
+ let scrollX = 0;
151
+
152
+ if (rect.left < horizontalPadding) {
153
+ scrollX = rect.left - horizontalPadding;
154
+ }
155
+ if (rect.right > window.innerWidth - horizontalPadding) {
156
+ scrollX = rect.right - window.innerWidth + horizontalPadding;
157
+ }
158
+ const scrollY = rect.top - (window.innerHeight / 2 - rect.height / 2);
159
+
160
+ window.scrollBy({
161
+ top: scrollY,
162
+ left: scrollX,
163
+ behavior: 'smooth',
164
+ })
165
+ }
166
+ }
167
+ });
168
+ `;
169
+ //# sourceMappingURL=commonUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonUtils.js","sourceRoot":"","sources":["../../../src/native/commonUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,MAAqB,EAAmB,EAAE;IAC1E,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;QAC3C,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;KAChF;IAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;KACpE;IAED,MAAM,UAAU,GAAG,kBAAkB,CACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;WAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;WACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC7B,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,MAAM,CAAC,IAAI,CACpB,CAAC;IAEF,MAAM,WAAW,GAAG;QAChB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI;QACtB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU;QAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO;QAChC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ;QACjC,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI;QAC7B,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,IAAI;QAC5C,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI;KACnC,CAAC;IAEF,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,UAAU,WAAW,eAAe,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IAC9G,OAAO,UAAU,CAAC;AACtB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAC3C,MAAqB,EACrB,KAAU,EACV,UAAe,EACjB,EAAE;IACA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnD,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC1C,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,EAAE;YACrB,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SACjD;aAAM;YACH,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACrD;IACL,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,KAAK,IAAI,EAAE;QACpC,QAAQ,OAAO,CAAC,IAAI,EAAE;YAClB,KAAK,SAAS,CAAC,CAAC;gBACZ,IAAI;oBACA,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC9C,MAAM,WAAW,GAAG;wBAChB,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE;4BACF,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,SAAS;4BACT,cAAc,EAAE,4BAA4B,CAAC,MAAM,CAAC;yBACvD;qBACJ,CAAC;oBACF,gBAAgB,CAAC,wCAAwC,CAAC,CAAC;oBAC3D,gBAAgB,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBAChF;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;iBACnD;gBACD,MAAM;aACT;YAED,KAAK,wBAAwB,CAAC,CAAC;gBAC3B,IAAI;oBACA,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;oBACjD,IAAI,YAAY,EAAE;wBACd,MAAM,iBAAiB,GAAG;4BACtB,IAAI,EAAE,wBAAwB;4BAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;yBACpC,CAAC;wBACF,gBAAgB,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;qBACtF;iBACJ;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;iBAC7D;gBACD,MAAM;aACT;YAED,KAAK,wBAAwB,CAAC,CAAC;gBAC3B,IAAI;oBACA,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;oBACjD,IAAI,YAAY,EAAE;wBACd,MAAM,kBAAkB,GAAG;4BACvB,IAAI,EAAE,wBAAwB;4BAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;yBACpC,CAAC;wBACF,gBAAgB,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;qBACvF;iBACJ;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;iBAC9D;gBACD,MAAM;aACT;YAED;gBACI,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7D;IACL,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,aAAa,EAAE;QACtB,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACrC;SAAM;QACH,MAAM,oBAAoB,EAAE,CAAC;KAChC;AACL,CAAC,CAAC;AAEF,MAAM,wCAAwC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=commonUtils.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonUtils.spec.d.ts","sourceRoot":"","sources":["../../../src/native/commonUtils.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ import { getWebViewUrl, setupWebViewMessageHandler } from './commonUtils'; // Adjust the import path
2
+ import { AuthType } from '../types';
3
+ import pkgInfo from '../../package.json';
4
+ jest.mock('../utils', () => ({
5
+ getQueryParamString: jest.fn((params) => Object.keys(params).map((key) => `${key}=${params[key]}`).join('&')),
6
+ getCustomisationsMobileEmbed: jest.fn(() => ({ customKey: 'customValue' })),
7
+ }));
8
+ describe('getWebViewUrl', () => {
9
+ const mockGetAuthToken = jest.fn();
10
+ beforeEach(() => {
11
+ jest.clearAllMocks();
12
+ });
13
+ test('should construct the WebView URL correctly', async () => {
14
+ mockGetAuthToken.mockResolvedValue('mock-token');
15
+ const config = {
16
+ host: 'https://lookat-webview.com',
17
+ authType: AuthType.TrustedAuthTokenCookieless,
18
+ liveboardId: 'test-liveboard-id',
19
+ getAuthToken: mockGetAuthToken,
20
+ };
21
+ const url = await getWebViewUrl(config);
22
+ expect(mockGetAuthToken).toHaveBeenCalledTimes(1);
23
+ expect(url).toContain('https://lookat-webview.com/embed');
24
+ expect(url).toContain(`authType=${AuthType.TrustedAuthTokenCookieless}`);
25
+ expect(url).toContain('test-liveboard-id');
26
+ expect(url).toContain(`sdkVersion=${pkgInfo.version}`);
27
+ });
28
+ test('should throw an error if getAuthToken is not a function', async () => {
29
+ const config = {
30
+ host: 'https://lookat-webview.com',
31
+ authType: AuthType.TrustedAuthTokenCookieless,
32
+ liveboardId: 'test-liveboard-id',
33
+ getAuthToken: undefined,
34
+ };
35
+ await expect(getWebViewUrl(config)).rejects.toThrow('`getAuthToken` must be a function that returns a Promise.');
36
+ });
37
+ test('should throw an error if `getAuthToken` resolves to a falsy value', async () => {
38
+ mockGetAuthToken.mockResolvedValue(null);
39
+ const config = {
40
+ host: 'https://lookat-webview.com',
41
+ authType: AuthType.TrustedAuthTokenCookieless,
42
+ liveboardId: 'test-liveboard-id',
43
+ getAuthToken: mockGetAuthToken,
44
+ };
45
+ await expect(getWebViewUrl(config)).rejects.toThrow('Failed to fetch initial authentication token.');
46
+ });
47
+ test('should encode localhost URLs correctly', async () => {
48
+ mockGetAuthToken.mockResolvedValue('mock-token');
49
+ const config = {
50
+ host: 'localhost',
51
+ authType: AuthType.TrustedAuthTokenCookieless,
52
+ liveboardId: 'test-liveboard-id',
53
+ getAuthToken: mockGetAuthToken,
54
+ };
55
+ const url = await getWebViewUrl(config);
56
+ expect(url).toContain('hostAppUrl=local-host');
57
+ });
58
+ });
59
+ describe('WebView Utilities', () => {
60
+ const mockConfig = {
61
+ host: 'https://example.com',
62
+ authType: AuthType.TrustedAuthTokenCookieless,
63
+ liveboardId: '1234',
64
+ getAuthToken: jest.fn(),
65
+ };
66
+ const mockWebViewRef = {
67
+ current: {
68
+ injectJavaScript: jest.fn(),
69
+ },
70
+ };
71
+ let mockEvent;
72
+ beforeEach(() => {
73
+ jest.clearAllMocks();
74
+ mockEvent = {
75
+ nativeEvent: {
76
+ data: JSON.stringify({ type: 'appInit' }),
77
+ },
78
+ };
79
+ });
80
+ describe('setupWebViewMessageHandler', () => {
81
+ test('should reply to and call injectJavaScript with appInit payload', async () => {
82
+ mockConfig.getAuthToken.mockResolvedValue('mockAuthToken');
83
+ await setupWebViewMessageHandler(mockConfig, mockEvent, mockWebViewRef);
84
+ expect(mockConfig.getAuthToken).toHaveBeenCalled();
85
+ expect(mockWebViewRef.current.injectJavaScript).toHaveBeenCalledWith(expect.stringContaining('"type":"appInit"'));
86
+ });
87
+ test('should handle ThoughtspotAuthExpired and refresh the token', async () => {
88
+ mockEvent.nativeEvent.data = JSON.stringify({ type: 'ThoughtspotAuthExpired' });
89
+ mockConfig.getAuthToken.mockResolvedValue('bearer-token');
90
+ await setupWebViewMessageHandler(mockConfig, mockEvent, mockWebViewRef);
91
+ expect(mockConfig.getAuthToken).toHaveBeenCalled();
92
+ expect(mockWebViewRef.current.injectJavaScript).toHaveBeenCalledWith(expect.stringContaining('"type":"ThoughtspotAuthExpired"'));
93
+ });
94
+ test('should handle ThoughtspotAuthFailure and refresh the token', async () => {
95
+ mockEvent.nativeEvent.data = JSON.stringify({ type: 'ThoughtspotAuthFailure' });
96
+ mockConfig.getAuthToken.mockResolvedValue('bearer-token');
97
+ await setupWebViewMessageHandler(mockConfig, mockEvent, mockWebViewRef);
98
+ expect(mockConfig.getAuthToken).toHaveBeenCalled();
99
+ expect(mockWebViewRef.current.injectJavaScript).toHaveBeenCalledWith(expect.stringContaining('"type":"ThoughtspotAuthFailure"'));
100
+ });
101
+ test('should warn for unhandled message types', async () => {
102
+ mockEvent.nativeEvent.data = JSON.stringify({ type: 'unknownType' });
103
+ await setupWebViewMessageHandler(mockConfig, mockEvent, mockWebViewRef);
104
+ expect(mockWebViewRef.current.injectJavaScript).not.toHaveBeenCalled();
105
+ });
106
+ test('should throw if getAuthToken fails during appInit', async () => {
107
+ mockEvent.nativeEvent.data = JSON.stringify({ type: 'appInit' });
108
+ mockConfig.getAuthToken.mockRejectedValue(new Error('Token fetch error'));
109
+ await expect(setupWebViewMessageHandler(mockConfig, mockEvent, mockWebViewRef))
110
+ .rejects
111
+ .toThrow('Error handling appInit:');
112
+ });
113
+ test('should call config.handleMessage instead of default handler', async () => {
114
+ const handleMessageSpy = jest.fn();
115
+ const localConfig = { ...mockConfig, handleMessage: handleMessageSpy };
116
+ mockEvent.nativeEvent.data = JSON.stringify({ type: 'appInit' });
117
+ await setupWebViewMessageHandler(localConfig, mockEvent, mockWebViewRef);
118
+ expect(handleMessageSpy).toHaveBeenCalledWith(mockEvent);
119
+ // default logic never called
120
+ expect(mockWebViewRef.current.injectJavaScript).not.toHaveBeenCalled();
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=commonUtils.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonUtils.spec.js","sourceRoot":"","sources":["../../../src/native/commonUtils.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type EmbedConfig = {
2
+ host: string;
3
+ authType: "TrustedAuthCookieless";
4
+ getAuthToken: () => Promise<string>;
5
+ };
6
+ declare let embedConfig: EmbedConfig | null;
7
+ declare const setEmbedConfig: (newConfig: EmbedConfig) => void;
8
+ declare const getEmbedConfig: () => EmbedConfig;
9
+ export { embedConfig, setEmbedConfig, getEmbedConfig };
10
+ //# sourceMappingURL=embedConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedConfig.d.ts","sourceRoot":"","sources":["../../../src/native/embedConfig.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,uBAAuB,CAAC;IAElC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC;AACF,QAAA,IAAI,WAAW,EAAE,WAAW,GAAG,IAAW,CAAC;AAC3C,QAAA,MAAM,cAAc,cAAe,WAAW,SAE7C,CAAC;AACF,QAAA,MAAM,cAAc,mBAAoB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ let embedConfig = null;
2
+ const setEmbedConfig = (newConfig) => {
3
+ embedConfig = newConfig;
4
+ };
5
+ const getEmbedConfig = () => embedConfig;
6
+ export { embedConfig, setEmbedConfig, getEmbedConfig };
7
+ //# sourceMappingURL=embedConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedConfig.js","sourceRoot":"","sources":["../../../src/native/embedConfig.ts"],"names":[],"mappings":"AAME,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,MAAM,cAAc,GAAG,CAAC,SAAsB,EAAE,EAAE;IAChD,WAAW,GAAG,SAAS,CAAC;AAC1B,CAAC,CAAC;AACF,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getWebViewUrl, setupWebViewMessageHandler } from './commonUtils';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getWebViewUrl, setupWebViewMessageHandler } from './commonUtils';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AuthType, CustomisationsInterface } from 'src/types';
2
+ export interface WebViewConfig {
3
+ host: string;
4
+ authType: AuthType;
5
+ liveboardId: string;
6
+ getAuthToken: () => Promise<string>;
7
+ handleMessage?: (event: any) => void;
8
+ customizations?: CustomisationsInterface;
9
+ }
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/native/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,uBAAuB,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/native/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { RuntimeFilter } from '../types';
2
+ export declare class ValidationError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare const convertFiltersToRuntimeFilters: (liveboardFiltersData: any) => RuntimeFilter[];
6
+ //# sourceMappingURL=filtersToRuntimeFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtersToRuntimeFilters.d.ts","sourceRoot":"","sources":["../../../src/parsers/filtersToRuntimeFilters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAC;AAE1D,qBAAa,eAAgB,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI9B;AAED,eAAO,MAAM,8BAA8B,yBAA0B,GAAG,KAAG,aAAa,EAwDvF,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { RuntimeFilterOp } from '../types';
2
+ export class ValidationError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = 'ValidationError';
6
+ }
7
+ }
8
+ export const convertFiltersToRuntimeFilters = (liveboardFiltersData) => {
9
+ const result = [];
10
+ if (!Array.isArray(liveboardFiltersData === null || liveboardFiltersData === void 0 ? void 0 : liveboardFiltersData.liveboardFilters)) {
11
+ throw new ValidationError('Expected liveboardFilters to be an array');
12
+ }
13
+ liveboardFiltersData.liveboardFilters.forEach((filterData) => {
14
+ var _a;
15
+ const columnName = (_a = filterData === null || filterData === void 0 ? void 0 : filterData.columnInfo) === null || _a === void 0 ? void 0 : _a.name;
16
+ if (typeof columnName !== 'string') {
17
+ throw new ValidationError('Column name is missing or invalid');
18
+ }
19
+ const filters = filterData === null || filterData === void 0 ? void 0 : filterData.filters;
20
+ if (!Array.isArray(filters) || filters.length === 0) {
21
+ throw new ValidationError('Filters must be a non-empty array');
22
+ }
23
+ filters.forEach((filter) => {
24
+ const filterContent = filter === null || filter === void 0 ? void 0 : filter.filterContent;
25
+ if (!Array.isArray(filterContent) || filterContent.length === 0) {
26
+ throw new ValidationError('Filter content must be a non-empty array');
27
+ }
28
+ filterContent.forEach((content) => {
29
+ const operator = content === null || content === void 0 ? void 0 : content.filterType;
30
+ if (!Object.values(RuntimeFilterOp).includes(operator)) {
31
+ throw new ValidationError(`Invalid operator: ${operator}`);
32
+ }
33
+ const values = content === null || content === void 0 ? void 0 : content.value;
34
+ if (!Array.isArray(values) || values == null) {
35
+ throw new ValidationError('Values must be an array and should not be null');
36
+ }
37
+ values.forEach((val) => {
38
+ if (typeof val !== 'object') {
39
+ throw new ValidationError('Value must be an object');
40
+ }
41
+ if (!('key' in val)) {
42
+ throw new ValidationError('Value object must contain a key property');
43
+ }
44
+ });
45
+ result.push({
46
+ columnName,
47
+ operator: operator,
48
+ values: values.map((val) => val.key),
49
+ });
50
+ });
51
+ });
52
+ });
53
+ return result;
54
+ };
55
+ //# sourceMappingURL=filtersToRuntimeFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtersToRuntimeFilters.js","sourceRoot":"","sources":["../../../src/parsers/filtersToRuntimeFilters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1D,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACtC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,oBAAyB,EAAmB,EAAE;IACzF,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,gBAAgB,CAAC,EAAE;QACxD,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;KACzE;IAED,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,EAAE;;QAC9D,MAAM,UAAU,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,IAAI,CAAC;QAChD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAChC,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;SAClE;QAED,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACjD,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;SAClE;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,EAAE;YAC5B,MAAM,aAAa,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7D,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;aACzE;YAED,aAAa,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACpD,MAAM,IAAI,eAAe,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;iBAC9D;gBAED,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE;oBAC1C,MAAM,IAAI,eAAe,CAAC,gDAAgD,CAAC,CAAC;iBAC/E;gBAED,MAAM,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;oBACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;wBACzB,MAAM,IAAI,eAAe,CACrB,yBAAyB,CAC5B,CAAC;qBACL;oBACD,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE;wBACjB,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;qBACzE;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,IAAI,CAAC;oBACR,UAAU;oBACV,QAAQ,EAAE,QAA2B;oBACrC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;iBAC5C,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filtersToRuntimeFilters.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtersToRuntimeFilters.spec.d.ts","sourceRoot":"","sources":["../../../src/parsers/filtersToRuntimeFilters.spec.ts"],"names":[],"mappings":""}