@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
package/cjs/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thoughtspot/visual-embed-sdk",
3
- "version": "1.35.0",
3
+ "version": "1.35.1",
4
4
  "description": "ThoughtSpot Embed SDK",
5
5
  "module": "lib/src/index.js",
6
6
  "main": "dist/tsembed.js",
@@ -26,6 +26,16 @@
26
26
  "import": "./lib/src/react/all-types-export.js",
27
27
  "require": "./cjs/src/react/all-types-export.js",
28
28
  "types": "./lib/src/react/all-types-export.d.ts"
29
+ },
30
+ "./native": {
31
+ "import": "./lib/src/native/index.js",
32
+ "require": "./cjs/src/native/index.js",
33
+ "types": "./lib/src/native/index.d.ts"
34
+ },
35
+ "./lib/src/native": {
36
+ "import": "./lib/src/native/index.js",
37
+ "require": "./cjs/src/native/index.js",
38
+ "types": "./lib/src/native/index.d.ts"
29
39
  }
30
40
  },
31
41
  "typesVersions": {
@@ -76,6 +86,8 @@
76
86
  "html-react-parser": "^1.4.12",
77
87
  "lodash": "^4.17.21",
78
88
  "mixpanel-browser": "2.47.0",
89
+ "react-native": "^0.76.3",
90
+ "react-native-webview": "^13.12.4",
79
91
  "ts-deepmerge": "^6.0.2",
80
92
  "tslib": "^2.5.3",
81
93
  "use-deep-compare-effect": "^1.8.1",
@@ -112,11 +124,11 @@
112
124
  "eslint-config-airbnb-base": "^14.2.0",
113
125
  "eslint-config-prettier": "^6.15.0",
114
126
  "eslint-import-resolver-typescript": "^2.3.0",
127
+ "eslint-plugin-comment-length": "1.7.3",
115
128
  "eslint-plugin-import": "^2.22.1",
129
+ "eslint-plugin-jsdoc": "^46.9.0",
116
130
  "eslint-plugin-prettier": "^3.1.4",
117
131
  "eslint-plugin-react-hooks": "^4.2.0",
118
- "eslint-plugin-comment-length": "1.7.3",
119
- "eslint-plugin-jsdoc": "^46.9.0",
120
132
  "fs-extra": "^10.0.0",
121
133
  "gh-pages": "^3.1.0",
122
134
  "highlight.js": "^10.6.0",
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=base.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.native.d.ts","sourceRoot":"","sources":["../../../src/embed/base.native.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=base.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.native.js","sourceRoot":"","sources":["../../../src/embed/base.native.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const sayHelloWorld: () => string;
2
+ //# sourceMappingURL=hello.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello.d.ts","sourceRoot":"","sources":["../../../src/embed/hello.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,QAAO,MAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sayHelloWorld = void 0;
4
+ const sayHelloWorld = () => "1312";
5
+ exports.sayHelloWorld = sayHelloWorld;
6
+ //# sourceMappingURL=hello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello.js","sourceRoot":"","sources":["../../../src/embed/hello.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC;AAArC,QAAA,aAAa,iBAAwB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=searchEmbed-basic-auth.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchEmbed-basic-auth.spec.d.ts","sourceRoot":"","sources":["../../../src/embed/searchEmbed-basic-auth.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const search_1 = require("./search");
5
+ const baseInstance = tslib_1.__importStar(require("./base"));
6
+ const authService = tslib_1.__importStar(require("../utils/authService"));
7
+ const authInstance = tslib_1.__importStar(require("../auth"));
8
+ const config = tslib_1.__importStar(require("../config"));
9
+ const embedConfigInstance = tslib_1.__importStar(require("./embedConfig"));
10
+ const index_1 = require("../index");
11
+ const types_1 = require("../types");
12
+ const test_utils_1 = require("../test/test-utils");
13
+ const auth_spec_1 = require("../auth.spec");
14
+ const thoughtSpotHost = 'tshost';
15
+ (0, index_1.init)({
16
+ thoughtSpotHost,
17
+ authType: types_1.AuthType.Basic,
18
+ username: 'tsadmin',
19
+ password: 'admin',
20
+ });
21
+ describe('Search embed tests when authType is Basic', () => {
22
+ /**
23
+ *
24
+ * @param version
25
+ */
26
+ function setupVersion(version) {
27
+ jest.spyOn(window, 'addEventListener').mockImplementation((event, handler, options) => {
28
+ handler({
29
+ data: {
30
+ type: 'xyz',
31
+ },
32
+ ports: [3000],
33
+ source: null,
34
+ });
35
+ });
36
+ jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(async () => ({
37
+ json: () => ({
38
+ ...auth_spec_1.mockSessionInfo,
39
+ releaseVersion: version,
40
+ }),
41
+ status: 200,
42
+ }));
43
+ jest.spyOn(authInstance, 'getReleaseVersion').mockReturnValue(version);
44
+ }
45
+ beforeEach(() => {
46
+ document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
47
+ jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
48
+ });
49
+ afterEach(() => {
50
+ jest.clearAllMocks();
51
+ });
52
+ test('when releaseVersion is empty', async () => {
53
+ setupVersion('');
54
+ const mockAlert = spyOn(window, 'alert');
55
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
56
+ await searchEmbed.render();
57
+ expect(mockAlert).not.toBeCalled();
58
+ });
59
+ test("when releaseVersion is '7.0.1.cl' ", async () => {
60
+ setupVersion('7.0.1.cl');
61
+ const mockAlert = jest.spyOn(window, 'alert');
62
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
63
+ await searchEmbed.render();
64
+ expect(mockAlert).not.toBeCalled();
65
+ });
66
+ test('when releaseVersion is above 8.4.0.sw', async () => {
67
+ setupVersion('8.4.0.sw');
68
+ const mockAlert = jest.spyOn(window, 'alert');
69
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
70
+ await searchEmbed.render();
71
+ expect(mockAlert).not.toBeCalled();
72
+ });
73
+ test('releaseVersion is above 8.4.0.sw', async () => {
74
+ setupVersion('8.8.0.sw');
75
+ jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
76
+ const mockAlert = jest.spyOn(window, 'alert');
77
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
78
+ await searchEmbed.render();
79
+ expect(mockAlert).not.toBeCalled();
80
+ });
81
+ test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is ts7.dec.cl', async () => {
82
+ setupVersion('ts7.dec.cl');
83
+ jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
84
+ jest.spyOn(embedConfigInstance, 'getEmbedConfig').mockReturnValue({
85
+ suppressSearchEmbedBetaWarning: true,
86
+ });
87
+ const mockAlert = jest.spyOn(window, 'alert');
88
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
89
+ await searchEmbed.render();
90
+ expect(mockAlert).not.toBeCalled();
91
+ });
92
+ test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is 8.4.0.sw', async () => {
93
+ setupVersion('8.4.0.sw');
94
+ jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
95
+ jest.spyOn(embedConfigInstance, 'getEmbedConfig').mockReturnValue({
96
+ suppressSearchEmbedBetaWarning: true,
97
+ });
98
+ const mockAlert = jest.spyOn(window, 'alert');
99
+ const searchEmbed = new search_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
100
+ await searchEmbed.render();
101
+ expect(mockAlert).not.toBeCalled();
102
+ });
103
+ });
104
+ //# sourceMappingURL=searchEmbed-basic-auth.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchEmbed-basic-auth.spec.js","sourceRoot":"","sources":["../../../src/embed/searchEmbed-basic-auth.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ export type LiveboardEmbedProps = {
3
+ liveboardId: string;
4
+ getToken: () => Promise<string>;
5
+ };
6
+ export declare enum Param {
7
+ Version = "sdkVersion"
8
+ }
9
+ export type QueryParams = {
10
+ [key: string]: string | boolean | number;
11
+ };
12
+ export declare const LiveboardEmbed: React.FC<LiveboardEmbedProps>;
13
+ //# sourceMappingURL=LiveboardEmbed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveboardEmbed.d.ts","sourceRoot":"","sources":["../../../src/native/LiveboardEmbed.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAS3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,KAAK;IACb,OAAO,eAAe;CACzB;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC5C,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkKxD,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LiveboardEmbed = exports.Param = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const react_native_1 = require("react-native");
7
+ const react_native_webview_1 = tslib_1.__importDefault(require("react-native-webview"));
8
+ const embedConfig_1 = require("./embedConfig");
9
+ const auth_spec_1 = require("src/auth.spec");
10
+ const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
11
+ const utils_1 = require("src/utils");
12
+ const { version } = package_json_1.default;
13
+ var Param;
14
+ (function (Param) {
15
+ Param["Version"] = "sdkVersion";
16
+ })(Param = exports.Param || (exports.Param = {}));
17
+ const LiveboardEmbed = ({ liveboardId, getToken }) => {
18
+ const webViewRef = (0, react_1.useRef)(null);
19
+ const [embedUrl, setEmbedUrl] = (0, react_1.useState)("");
20
+ const [webViewLoaded, setWebViewLoaded] = (0, react_1.useState)(false);
21
+ const getEmbedParamsString = () => {
22
+ const queryparamsH = getBaseQueryParams();
23
+ return getQueryParamString(queryparamsH);
24
+ };
25
+ const getEmbedBasePath = (query) => {
26
+ let queryString = (query.startsWith('?')) ? query : `?${query}`;
27
+ queryString = `?base64UrlEncodedFlags=${(0, utils_1.getEncodedQueryParamsString)(queryString.substr(1))}`;
28
+ const basePath = [auth_spec_1.embedConfig === null || auth_spec_1.embedConfig === void 0 ? void 0 : auth_spec_1.embedConfig.host, queryString]
29
+ .filter((x) => x.length > 0)
30
+ .join('/');
31
+ return `${basePath}#`;
32
+ };
33
+ const getRootWebViewSrc = () => {
34
+ const query = getEmbedParamsString();
35
+ return getEmbedBasePath(query);
36
+ };
37
+ const getQueryParamString = (queryParams, shouldSerializeParamValues = false) => {
38
+ const qp = [];
39
+ const params = Object.keys(queryParams);
40
+ params.forEach((key) => {
41
+ const val = queryParams[key];
42
+ if (val !== undefined) {
43
+ const serializedValue = shouldSerializeParamValues
44
+ ? (0, utils_1.serializeParam)(val)
45
+ : (0, utils_1.paramToString)(val);
46
+ qp.push(`${key}=${serializedValue}`);
47
+ }
48
+ });
49
+ if (qp.length) {
50
+ return qp.join('&');
51
+ }
52
+ return null;
53
+ };
54
+ const getBaseQueryParams = (queryParams = {}) => {
55
+ var _a;
56
+ let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
57
+ if (hostAppUrl.includes('localhost') || hostAppUrl.includes('127.0.0.1')) {
58
+ hostAppUrl = 'local-host';
59
+ }
60
+ queryParams[Param.Version] = version;
61
+ return queryParams;
62
+ };
63
+ const handleAppInit = async () => {
64
+ const authToken = await getToken();
65
+ const initPayload = {
66
+ type: "appInit",
67
+ data: {
68
+ host: auth_spec_1.embedConfig === null || auth_spec_1.embedConfig === void 0 ? void 0 : auth_spec_1.embedConfig.host,
69
+ authToken,
70
+ },
71
+ };
72
+ const jsCode = `
73
+ window.postMessage(${JSON.stringify(initPayload)});
74
+ `;
75
+ if (webViewRef.current && webViewLoaded) {
76
+ webViewRef.current.injectJavaScript(jsCode);
77
+ }
78
+ };
79
+ // Generate embed URL
80
+ const constructEmbedUrl = async () => {
81
+ const embedConfig = (0, embedConfig_1.getEmbedConfig)();
82
+ const host = (embedConfig === null || embedConfig === void 0 ? void 0 : embedConfig.host) || "";
83
+ const url = `${host}/?authType=AuthServerCookieless#/embed/liveboard/${liveboardId}`;
84
+ setEmbedUrl(url);
85
+ };
86
+ // Handle messages from the WebView
87
+ const handleOnMessage = (event) => {
88
+ try {
89
+ const message = JSON.parse(event.nativeEvent.data);
90
+ switch (message.type) {
91
+ case "AppInit":
92
+ handleAppInit();
93
+ break;
94
+ case "AuthExpiry" || "ThoughtspotAuthExpired":
95
+ handleAuthExpiry();
96
+ break;
97
+ case "CustomEvent":
98
+ console.log("Custom event received:", message.data);
99
+ break;
100
+ default:
101
+ console.warn("Unhandled message type:", message.type);
102
+ }
103
+ }
104
+ catch (error) {
105
+ console.error("Failed to handle message from WebView:", error);
106
+ }
107
+ };
108
+ // Handle auth token expiry
109
+ const handleAuthExpiry = async () => {
110
+ var _a;
111
+ const authToken = await getToken();
112
+ const payload = {
113
+ type: "AuthExpiry",
114
+ data: { authToken },
115
+ };
116
+ (_a = webViewRef.current) === null || _a === void 0 ? void 0 : _a.injectJavaScript(`
117
+ window.postMessage(${JSON.stringify(payload)}, "*");
118
+ `);
119
+ };
120
+ (0, react_1.useEffect)(() => {
121
+ constructEmbedUrl();
122
+ }, []);
123
+ if (!embedUrl) {
124
+ return (react_1.default.createElement(react_native_1.View, { style: styles.loadingContainer },
125
+ react_1.default.createElement(react_native_1.Text, null, "Loading Liveboard...")));
126
+ }
127
+ return (react_1.default.createElement(react_native_webview_1.default, { ref: webViewRef, source: { uri: embedUrl }, style: styles.webview, onMessage: handleOnMessage, onLoadStart: () => console.log('WebView load started'), injectedJavaScriptBeforeContentLoaded: `
128
+ window.ReactNativeWebView = {
129
+ postMessage: function(data) {
130
+ window.postMessage(data, '*');
131
+ }
132
+ };
133
+ `, onLoad: () => setWebViewLoaded(true), javaScriptEnabled: true, domStorageEnabled: true, cacheEnabled: false, originWhitelist: ["*"], onHttpError: (event) => console.log("HTTP Error: ", event.nativeEvent), onError: (event) => console.error("WebView Error: ", event.nativeEvent) }));
134
+ };
135
+ exports.LiveboardEmbed = LiveboardEmbed;
136
+ const styles = react_native_1.StyleSheet.create({
137
+ webview: {
138
+ flex: 1,
139
+ },
140
+ loadingContainer: {
141
+ flex: 1,
142
+ justifyContent: "center",
143
+ alignItems: "center",
144
+ },
145
+ });
146
+ //# sourceMappingURL=LiveboardEmbed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveboardEmbed.js","sourceRoot":"","sources":["../../../src/native/LiveboardEmbed.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { WebViewConfig } from './types';
2
+ /**
3
+ * This method constructs the webview URL with given config.
4
+ * @param config To get the webviewURL pass the necessary config options.
5
+ * host: string;
6
+ * authType: AuthType;
7
+ * liveboardId: string;
8
+ * getAuthToken: () => Promise<string>;
9
+ * These four are necessary arguments.
10
+ * @returns The Promise for WebView URL.
11
+ */
12
+ export declare const getWebViewUrl: (config: WebViewConfig) => Promise<string>;
13
+ /**
14
+ * setting up message handling for the message replies to TS instances.
15
+ * @param config The webview config
16
+ * @param event The message event from the WebView.
17
+ * @param WebViewRef Ref to use and inject javascript
18
+ */
19
+ export declare const setupWebViewMessageHandler: (config: WebViewConfig, event: any, webViewRef: any) => Promise<void>;
20
+ //# sourceMappingURL=commonUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/native/commonUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,WAAkB,aAAa,KAAG,QAAQ,MAAM,CA+BzE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,WAC3B,aAAa,SACd,GAAG,cACE,GAAG,kBA2ElB,CAAC"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupWebViewMessageHandler = exports.getWebViewUrl = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const utils_1 = require("../utils");
6
+ const types_1 = require("../types");
7
+ const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
8
+ const logger_1 = require("../utils/logger");
9
+ /**
10
+ * This method constructs the webview URL with given config.
11
+ * @param config To get the webviewURL pass the necessary config options.
12
+ * host: string;
13
+ * authType: AuthType;
14
+ * liveboardId: string;
15
+ * getAuthToken: () => Promise<string>;
16
+ * These four are necessary arguments.
17
+ * @returns The Promise for WebView URL.
18
+ */
19
+ const getWebViewUrl = async (config) => {
20
+ if (typeof config.getAuthToken !== 'function') {
21
+ throw new Error('`getAuthToken` must be a function that returns a Promise.');
22
+ }
23
+ const authToken = await config.getAuthToken();
24
+ if (!authToken) {
25
+ throw new Error('Failed to fetch initial authentication token.');
26
+ }
27
+ const hostAppUrl = encodeURIComponent(config.host.includes('localhost')
28
+ || config.host.includes('127.0.0.1')
29
+ || config.host.includes('10.0.2.2')
30
+ ? 'local-host'
31
+ : config.host);
32
+ const queryParams = {
33
+ [types_1.Param.EmbedApp]: true,
34
+ [types_1.Param.HostAppUrl]: hostAppUrl,
35
+ [types_1.Param.Version]: package_json_1.default.version,
36
+ [types_1.Param.AuthType]: config.authType,
37
+ [types_1.Param.livedBoardEmbed]: true,
38
+ [types_1.Param.EnableFlipTooltipToContextMenu]: true,
39
+ [types_1.Param.ContextMenuTrigger]: true,
40
+ };
41
+ const queryString = (0, utils_1.getQueryParamString)(queryParams);
42
+ const webViewUrl = `${config.host}/embed?${queryString}#/embed/viz/${encodeURIComponent(config.liveboardId)}`;
43
+ return webViewUrl;
44
+ };
45
+ exports.getWebViewUrl = getWebViewUrl;
46
+ /**
47
+ * setting up message handling for the message replies to TS instances.
48
+ * @param config The webview config
49
+ * @param event The message event from the WebView.
50
+ * @param WebViewRef Ref to use and inject javascript
51
+ */
52
+ const setupWebViewMessageHandler = async (config, event, webViewRef) => {
53
+ const message = JSON.parse(event.nativeEvent.data);
54
+ const injectJavaScript = (codeSnip) => {
55
+ if (webViewRef === null || webViewRef === void 0 ? void 0 : webViewRef.current) {
56
+ webViewRef.current.injectJavaScript(codeSnip);
57
+ }
58
+ else {
59
+ logger_1.logger.error('Reference for Webview not found!!');
60
+ }
61
+ };
62
+ const defaultHandleMessage = async () => {
63
+ switch (message.type) {
64
+ case 'appInit': {
65
+ try {
66
+ const authToken = await config.getAuthToken();
67
+ const initPayload = {
68
+ type: 'appInit',
69
+ data: {
70
+ host: config.host,
71
+ authToken,
72
+ customisations: (0, utils_1.getCustomisationsMobileEmbed)(config),
73
+ },
74
+ };
75
+ injectJavaScript(jsCodeToHandleInteractionsForContextMenu);
76
+ injectJavaScript(`window.postMessage(${JSON.stringify(initPayload)}, '*');`);
77
+ }
78
+ catch (error) {
79
+ console.error('Error handling appInit:', error);
80
+ }
81
+ break;
82
+ }
83
+ case 'ThoughtspotAuthExpired': {
84
+ try {
85
+ const newAuthToken = await config.getAuthToken();
86
+ if (newAuthToken) {
87
+ const authExpirePayload = {
88
+ type: 'ThoughtspotAuthExpired',
89
+ data: { authToken: newAuthToken },
90
+ };
91
+ injectJavaScript(`window.postMessage(${JSON.stringify(authExpirePayload)}, '*');`);
92
+ }
93
+ }
94
+ catch (error) {
95
+ console.error('Error refreshing token on expiry:', error);
96
+ }
97
+ break;
98
+ }
99
+ case 'ThoughtspotAuthFailure': {
100
+ try {
101
+ const newAuthToken = await config.getAuthToken();
102
+ if (newAuthToken) {
103
+ const authFailurePayload = {
104
+ type: 'ThoughtspotAuthFailure',
105
+ data: { authToken: newAuthToken },
106
+ };
107
+ injectJavaScript(`window.postMessage(${JSON.stringify(authFailurePayload)}, '*');`);
108
+ }
109
+ }
110
+ catch (error) {
111
+ console.error('Error refreshing token on failure:', error);
112
+ }
113
+ break;
114
+ }
115
+ default:
116
+ console.warn('Unhandled message type:', message.type);
117
+ }
118
+ };
119
+ if (config.handleMessage) {
120
+ await config.handleMessage(event);
121
+ }
122
+ else {
123
+ await defaultHandleMessage();
124
+ }
125
+ };
126
+ exports.setupWebViewMessageHandler = setupWebViewMessageHandler;
127
+ const jsCodeToHandleInteractionsForContextMenu = `
128
+ // Disabling auofocus
129
+ document.querySelectorAll('input[autofocus], textarea[autofocus]').forEach(el => el.removeAttribute('autofocus'));
130
+
131
+ // adding meta tag to keep fixed viewport scalign
132
+ const meta = document.createElement('meta');
133
+ meta.name = 'viewport';
134
+ meta.content = 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no';
135
+ document.head.appendChild(meta);
136
+
137
+ // input focus problem. -> we can just force it inside our view.
138
+ document.addEventListener('focusin', (event) => {
139
+ const target = event.target;
140
+
141
+ if (
142
+ target.tagName === 'INPUT' ||
143
+ target.tagName === 'TEXTAREA'
144
+ ) {
145
+ const rect = target.getBoundingClientRect();
146
+ if (
147
+ rect.top < 0 ||
148
+ rect.bottom > window.innerHeight ||
149
+ rect.left < 0 ||
150
+ rect.right > window.innerWidth
151
+ ) {
152
+ event.preventDefault();
153
+ // target.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'end' });
154
+ const horizontalPadding = 10;
155
+
156
+ let scrollX = 0;
157
+
158
+ if (rect.left < horizontalPadding) {
159
+ scrollX = rect.left - horizontalPadding;
160
+ }
161
+ if (rect.right > window.innerWidth - horizontalPadding) {
162
+ scrollX = rect.right - window.innerWidth + horizontalPadding;
163
+ }
164
+ const scrollY = rect.top - (window.innerHeight / 2 - rect.height / 2);
165
+
166
+ window.scrollBy({
167
+ top: scrollY,
168
+ left: scrollX,
169
+ behavior: 'smooth',
170
+ })
171
+ }
172
+ }
173
+ });
174
+ `;
175
+ //# sourceMappingURL=commonUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonUtils.js","sourceRoot":"","sources":["../../../src/native/commonUtils.ts"],"names":[],"mappings":"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"}
@@ -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":""}