@sisense/sdk-pivot-query-client 2.17.0

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 (189) hide show
  1. package/LICENSE.md +35 -0
  2. package/README.md +2 -0
  3. package/dist/__test-helpers__/testUtils.d.ts +30 -0
  4. package/dist/__test-helpers__/testUtils.js +89 -0
  5. package/dist/builders/index.d.ts +2 -0
  6. package/dist/builders/index.js +2 -0
  7. package/dist/builders/pivot-data-builder.d.ts +34 -0
  8. package/dist/builders/pivot-data-builder.js +182 -0
  9. package/dist/builders/socket-builder.d.ts +18 -0
  10. package/dist/builders/socket-builder.js +72 -0
  11. package/dist/cjs/__test-helpers__/testUtils.d.ts +30 -0
  12. package/dist/cjs/__test-helpers__/testUtils.js +104 -0
  13. package/dist/cjs/builders/index.d.ts +2 -0
  14. package/dist/cjs/builders/index.js +7 -0
  15. package/dist/cjs/builders/pivot-data-builder.d.ts +34 -0
  16. package/dist/cjs/builders/pivot-data-builder.js +186 -0
  17. package/dist/cjs/builders/socket-builder.d.ts +18 -0
  18. package/dist/cjs/builders/socket-builder.js +79 -0
  19. package/dist/cjs/data-handling/DataService.d.ts +672 -0
  20. package/dist/cjs/data-handling/DataService.js +1364 -0
  21. package/dist/cjs/data-handling/DivergenceComparator.d.ts +7 -0
  22. package/dist/cjs/data-handling/DivergenceComparator.js +20 -0
  23. package/dist/cjs/data-handling/constants.d.ts +44 -0
  24. package/dist/cjs/data-handling/constants.js +43 -0
  25. package/dist/cjs/data-handling/index.d.ts +3 -0
  26. package/dist/cjs/data-handling/index.js +23 -0
  27. package/dist/cjs/data-handling/types.d.ts +104 -0
  28. package/dist/cjs/data-handling/types.js +2 -0
  29. package/dist/cjs/data-handling/utils/createPivotTreeNode.d.ts +13 -0
  30. package/dist/cjs/data-handling/utils/createPivotTreeNode.js +21 -0
  31. package/dist/cjs/data-handling/utils/index.d.ts +4 -0
  32. package/dist/cjs/data-handling/utils/index.js +14 -0
  33. package/dist/cjs/data-handling/utils/jaqlProcessor.d.ts +122 -0
  34. package/dist/cjs/data-handling/utils/jaqlProcessor.js +661 -0
  35. package/dist/cjs/data-handling/utils/pivotTransforms.d.ts +74 -0
  36. package/dist/cjs/data-handling/utils/pivotTransforms.js +373 -0
  37. package/dist/cjs/data-handling/utils/plugins/PluginService.d.ts +135 -0
  38. package/dist/cjs/data-handling/utils/plugins/PluginService.js +383 -0
  39. package/dist/cjs/data-handling/utils/plugins/getters.d.ts +23 -0
  40. package/dist/cjs/data-handling/utils/plugins/getters.js +70 -0
  41. package/dist/cjs/data-handling/utils/plugins/types.d.ts +75 -0
  42. package/dist/cjs/data-handling/utils/plugins/types.js +2 -0
  43. package/dist/cjs/data-handling/utils/plugins/validator.d.ts +13 -0
  44. package/dist/cjs/data-handling/utils/plugins/validator.js +169 -0
  45. package/dist/cjs/data-load/AbstractDataLoadService.d.ts +256 -0
  46. package/dist/cjs/data-load/AbstractDataLoadService.js +473 -0
  47. package/dist/cjs/data-load/DataLoadService.d.ts +63 -0
  48. package/dist/cjs/data-load/DataLoadService.js +152 -0
  49. package/dist/cjs/data-load/SisenseDataLoadService.d.ts +44 -0
  50. package/dist/cjs/data-load/SisenseDataLoadService.js +87 -0
  51. package/dist/cjs/data-load/TestDataLoadService.d.ts +27 -0
  52. package/dist/cjs/data-load/TestDataLoadService.js +76 -0
  53. package/dist/cjs/data-load/constants.d.ts +13 -0
  54. package/dist/cjs/data-load/constants.js +28 -0
  55. package/dist/cjs/data-load/index.d.ts +6 -0
  56. package/dist/cjs/data-load/index.js +14 -0
  57. package/dist/cjs/data-load/sockets/SisenseSocket.d.ts +81 -0
  58. package/dist/cjs/data-load/sockets/SisenseSocket.js +162 -0
  59. package/dist/cjs/data-load/sockets/TestSocket.d.ts +61 -0
  60. package/dist/cjs/data-load/sockets/TestSocket.js +90 -0
  61. package/dist/cjs/data-load/sockets/helpers.d.ts +4 -0
  62. package/dist/cjs/data-load/sockets/helpers.js +27 -0
  63. package/dist/cjs/data-load/sockets/index.d.ts +2 -0
  64. package/dist/cjs/data-load/sockets/index.js +8 -0
  65. package/dist/cjs/data-load/types.d.ts +90 -0
  66. package/dist/cjs/data-load/types.js +2 -0
  67. package/dist/cjs/errors/LoadingCanceledError.d.ts +7 -0
  68. package/dist/cjs/errors/LoadingCanceledError.js +24 -0
  69. package/dist/cjs/errors/index.d.ts +1 -0
  70. package/dist/cjs/errors/index.js +6 -0
  71. package/dist/cjs/index.d.ts +17 -0
  72. package/dist/cjs/index.js +32 -0
  73. package/dist/cjs/package.json +12 -0
  74. package/dist/cjs/pivot-query-client.d.ts +13 -0
  75. package/dist/cjs/pivot-query-client.js +26 -0
  76. package/dist/cjs/tree-structure/AbstractTreeService.d.ts +308 -0
  77. package/dist/cjs/tree-structure/AbstractTreeService.js +716 -0
  78. package/dist/cjs/tree-structure/HeaderTreeService.d.ts +180 -0
  79. package/dist/cjs/tree-structure/HeaderTreeService.js +280 -0
  80. package/dist/cjs/tree-structure/TreeCellMap.d.ts +104 -0
  81. package/dist/cjs/tree-structure/TreeCellMap.js +145 -0
  82. package/dist/cjs/tree-structure/TreeService.d.ts +8 -0
  83. package/dist/cjs/tree-structure/TreeService.js +12 -0
  84. package/dist/cjs/tree-structure/constants.d.ts +6 -0
  85. package/dist/cjs/tree-structure/constants.js +10 -0
  86. package/dist/cjs/tree-structure/index.d.ts +5 -0
  87. package/dist/cjs/tree-structure/index.js +10 -0
  88. package/dist/cjs/tree-structure/types.d.ts +93 -0
  89. package/dist/cjs/tree-structure/types.js +2 -0
  90. package/dist/cjs/tree-structure/utils/index.d.ts +1 -0
  91. package/dist/cjs/tree-structure/utils/index.js +9 -0
  92. package/dist/cjs/tree-structure/utils/treeNode.d.ts +147 -0
  93. package/dist/cjs/tree-structure/utils/treeNode.js +534 -0
  94. package/dist/cjs/utils/array.d.ts +13 -0
  95. package/dist/cjs/utils/array.js +25 -0
  96. package/dist/cjs/utils/cloneObject.d.ts +30 -0
  97. package/dist/cjs/utils/cloneObject.js +225 -0
  98. package/dist/cjs/utils/index.d.ts +3 -0
  99. package/dist/cjs/utils/index.js +9 -0
  100. package/dist/cjs/utils/throttle.d.ts +12 -0
  101. package/dist/cjs/utils/throttle.js +39 -0
  102. package/dist/cjs/utils/types.d.ts +12 -0
  103. package/dist/cjs/utils/types.js +2 -0
  104. package/dist/data-handling/DataService.d.ts +672 -0
  105. package/dist/data-handling/DataService.js +1357 -0
  106. package/dist/data-handling/DivergenceComparator.d.ts +7 -0
  107. package/dist/data-handling/DivergenceComparator.js +16 -0
  108. package/dist/data-handling/constants.d.ts +44 -0
  109. package/dist/data-handling/constants.js +40 -0
  110. package/dist/data-handling/index.d.ts +3 -0
  111. package/dist/data-handling/index.js +4 -0
  112. package/dist/data-handling/types.d.ts +104 -0
  113. package/dist/data-handling/types.js +1 -0
  114. package/dist/data-handling/utils/createPivotTreeNode.d.ts +13 -0
  115. package/dist/data-handling/utils/createPivotTreeNode.js +17 -0
  116. package/dist/data-handling/utils/index.d.ts +4 -0
  117. package/dist/data-handling/utils/index.js +4 -0
  118. package/dist/data-handling/utils/jaqlProcessor.d.ts +122 -0
  119. package/dist/data-handling/utils/jaqlProcessor.js +621 -0
  120. package/dist/data-handling/utils/pivotTransforms.d.ts +74 -0
  121. package/dist/data-handling/utils/pivotTransforms.js +335 -0
  122. package/dist/data-handling/utils/plugins/PluginService.d.ts +135 -0
  123. package/dist/data-handling/utils/plugins/PluginService.js +379 -0
  124. package/dist/data-handling/utils/plugins/getters.d.ts +23 -0
  125. package/dist/data-handling/utils/plugins/getters.js +65 -0
  126. package/dist/data-handling/utils/plugins/types.d.ts +75 -0
  127. package/dist/data-handling/utils/plugins/types.js +1 -0
  128. package/dist/data-handling/utils/plugins/validator.d.ts +13 -0
  129. package/dist/data-handling/utils/plugins/validator.js +165 -0
  130. package/dist/data-load/AbstractDataLoadService.d.ts +256 -0
  131. package/dist/data-load/AbstractDataLoadService.js +466 -0
  132. package/dist/data-load/DataLoadService.d.ts +63 -0
  133. package/dist/data-load/DataLoadService.js +148 -0
  134. package/dist/data-load/SisenseDataLoadService.d.ts +44 -0
  135. package/dist/data-load/SisenseDataLoadService.js +83 -0
  136. package/dist/data-load/TestDataLoadService.d.ts +27 -0
  137. package/dist/data-load/TestDataLoadService.js +69 -0
  138. package/dist/data-load/constants.d.ts +13 -0
  139. package/dist/data-load/constants.js +25 -0
  140. package/dist/data-load/index.d.ts +6 -0
  141. package/dist/data-load/index.js +6 -0
  142. package/dist/data-load/sockets/SisenseSocket.d.ts +81 -0
  143. package/dist/data-load/sockets/SisenseSocket.js +155 -0
  144. package/dist/data-load/sockets/TestSocket.d.ts +61 -0
  145. package/dist/data-load/sockets/TestSocket.js +83 -0
  146. package/dist/data-load/sockets/helpers.d.ts +4 -0
  147. package/dist/data-load/sockets/helpers.js +23 -0
  148. package/dist/data-load/sockets/index.d.ts +2 -0
  149. package/dist/data-load/sockets/index.js +3 -0
  150. package/dist/data-load/types.d.ts +90 -0
  151. package/dist/data-load/types.js +1 -0
  152. package/dist/errors/LoadingCanceledError.d.ts +7 -0
  153. package/dist/errors/LoadingCanceledError.js +20 -0
  154. package/dist/errors/index.d.ts +1 -0
  155. package/dist/errors/index.js +2 -0
  156. package/dist/index.d.ts +17 -0
  157. package/dist/index.js +9 -0
  158. package/dist/pivot-query-client.d.ts +13 -0
  159. package/dist/pivot-query-client.js +22 -0
  160. package/dist/tree-structure/AbstractTreeService.d.ts +308 -0
  161. package/dist/tree-structure/AbstractTreeService.js +712 -0
  162. package/dist/tree-structure/HeaderTreeService.d.ts +180 -0
  163. package/dist/tree-structure/HeaderTreeService.js +276 -0
  164. package/dist/tree-structure/TreeCellMap.d.ts +104 -0
  165. package/dist/tree-structure/TreeCellMap.js +141 -0
  166. package/dist/tree-structure/TreeService.d.ts +8 -0
  167. package/dist/tree-structure/TreeService.js +8 -0
  168. package/dist/tree-structure/constants.d.ts +6 -0
  169. package/dist/tree-structure/constants.js +7 -0
  170. package/dist/tree-structure/index.d.ts +5 -0
  171. package/dist/tree-structure/index.js +4 -0
  172. package/dist/tree-structure/types.d.ts +93 -0
  173. package/dist/tree-structure/types.js +1 -0
  174. package/dist/tree-structure/utils/index.d.ts +1 -0
  175. package/dist/tree-structure/utils/index.js +1 -0
  176. package/dist/tree-structure/utils/treeNode.d.ts +147 -0
  177. package/dist/tree-structure/utils/treeNode.js +515 -0
  178. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  179. package/dist/utils/array.d.ts +13 -0
  180. package/dist/utils/array.js +21 -0
  181. package/dist/utils/cloneObject.d.ts +30 -0
  182. package/dist/utils/cloneObject.js +221 -0
  183. package/dist/utils/index.d.ts +3 -0
  184. package/dist/utils/index.js +3 -0
  185. package/dist/utils/throttle.d.ts +12 -0
  186. package/dist/utils/throttle.js +35 -0
  187. package/dist/utils/types.d.ts +12 -0
  188. package/dist/utils/types.js +1 -0
  189. package/package.json +61 -0
@@ -0,0 +1,34 @@
1
+ import { PivotQueryResultData } from '@sisense/sdk-data';
2
+ import { InitPageData } from '../data-handling/types.js';
3
+ import { DataLoadServiceI, JaqlRequest, SocketI } from '../data-load/types.js';
4
+ export declare class PivotDataBuilder {
5
+ /**
6
+ * DataLoadServiceI instance
7
+ */
8
+ private dataLoadService?;
9
+ /**
10
+ * SocketI instance
11
+ */
12
+ private readonly socket;
13
+ /**
14
+ * @param socket - socket instance
15
+ */
16
+ constructor(socket: SocketI);
17
+ destroy(): void;
18
+ prepareRequest(jaql: JaqlRequest): Promise<JaqlRequest>;
19
+ prepareLoadService(jaql?: JaqlRequest, useCache?: boolean): DataLoadServiceI;
20
+ prepareDataService(dataLoadService: DataLoadServiceI): {
21
+ loadData: (jaql?: JaqlRequest, pageSize?: number, isPaginated?: boolean) => Promise<InitPageData>;
22
+ };
23
+ loadInitData(jaql: JaqlRequest, isPaginated?: boolean, elementsPerPage?: number, useCache?: boolean): Promise<PivotQueryResultData>;
24
+ private buildColumnsHelper;
25
+ /**
26
+ * Transforms Pivot Grid to Columns of Table structure
27
+ *
28
+ * @param columnType - type of column
29
+ * @param grid - pivot grid
30
+ * @returns An array of columns
31
+ */
32
+ private transformGridToColumns;
33
+ private transformTreeStructuresToResultData;
34
+ }
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PivotDataBuilder = void 0;
13
+ const sdk_data_1 = require("@sisense/sdk-data");
14
+ const DataService_js_1 = require("../data-handling/DataService.js");
15
+ const index_js_1 = require("../data-load/index.js");
16
+ class PivotDataBuilder {
17
+ /**
18
+ * @param socket - socket instance
19
+ */
20
+ constructor(socket) {
21
+ this.socket = socket;
22
+ }
23
+ destroy() { }
24
+ prepareRequest(jaql) {
25
+ return Promise.resolve(jaql);
26
+ }
27
+ prepareLoadService(jaql, useCache = false) {
28
+ if (this.dataLoadService && (useCache || this.dataLoadService.isFormattingChanges(jaql))) {
29
+ return this.dataLoadService;
30
+ }
31
+ return new index_js_1.SisenseDataLoadService(this.socket);
32
+ }
33
+ prepareDataService(dataLoadService) {
34
+ const dataService = new DataService_js_1.DataService(dataLoadService);
35
+ return {
36
+ loadData: (jaql, pageSize, isPaginated) => {
37
+ if (!dataService) {
38
+ throw new Error('No DataService defined during "prepareDataService"');
39
+ }
40
+ return dataService.loadData(jaql, { pageSize, isPaginated });
41
+ },
42
+ };
43
+ }
44
+ loadInitData(jaql, isPaginated = true, elementsPerPage = 100, useCache = false) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const pageSize = isPaginated ? elementsPerPage : undefined;
47
+ try {
48
+ const jaqlInternal = yield this.prepareRequest(jaql);
49
+ // Currently, each jaql need a separate dataLoadService instance
50
+ // In other words, each dataLoadService is associated with a jaql
51
+ this.dataLoadService = this.prepareLoadService(jaqlInternal, useCache);
52
+ const { loadData } = this.prepareDataService(this.dataLoadService);
53
+ const { rowsTreeService, columnsTreeService, cornerTreeService, isLastPage } = yield loadData(useCache ? undefined : jaqlInternal, pageSize, isPaginated);
54
+ return this.transformTreeStructuresToResultData({
55
+ rowsTreeService,
56
+ columnsTreeService,
57
+ cornerTreeService,
58
+ isLastPage,
59
+ });
60
+ }
61
+ catch (err) {
62
+ console.error('Error during loading initial page"', err);
63
+ }
64
+ return sdk_data_1.EMPTY_PIVOT_QUERY_RESULT_DATA;
65
+ });
66
+ }
67
+ buildColumnsHelper(columnType, columns, prefix, treeNode) {
68
+ var _a;
69
+ const columnName = `${prefix}${prefix === '' ? '' : ' | '}${(_a = treeNode.value) === null || _a === void 0 ? void 0 : _a.toString()}`;
70
+ if (treeNode.children) {
71
+ treeNode.children.forEach((child) => {
72
+ this.buildColumnsHelper(columnType, columns, columnName, child);
73
+ });
74
+ }
75
+ else {
76
+ columns.push({ name: columnName, type: columnType });
77
+ }
78
+ }
79
+ /**
80
+ * Transforms Pivot Grid to Columns of Table structure
81
+ *
82
+ * @param columnType - type of column
83
+ * @param grid - pivot grid
84
+ * @returns An array of columns
85
+ */
86
+ transformGridToColumns(columnType, grid) {
87
+ if (!grid || grid.length === 0) {
88
+ return [];
89
+ }
90
+ const columns = [];
91
+ grid === null || grid === void 0 ? void 0 : grid[0].forEach((cell) => {
92
+ if (typeof cell === 'string')
93
+ return;
94
+ this.buildColumnsHelper(columnType, columns, '', cell);
95
+ });
96
+ return columns || [];
97
+ }
98
+ // eslint-disable-next-line sonarjs/cognitive-complexity,max-lines-per-function
99
+ transformTreeStructuresToResultData(pivotTreeData) {
100
+ const { rowsTreeService, columnsTreeService, cornerTreeService } = pivotTreeData;
101
+ if (!rowsTreeService && !columnsTreeService && !cornerTreeService) {
102
+ return sdk_data_1.EMPTY_PIVOT_QUERY_RESULT_DATA;
103
+ }
104
+ const cornerGrid = cornerTreeService ? cornerTreeService.getGrid() : [];
105
+ const columnsGrid = columnsTreeService ? columnsTreeService.getGrid() : [];
106
+ const rowsGrid = rowsTreeService ? rowsTreeService.getGrid() : [];
107
+ const cornerColumns = this.transformGridToColumns('string', cornerGrid);
108
+ const columnsColumns = this.transformGridToColumns('number', columnsGrid);
109
+ const columns = [...cornerColumns, ...columnsColumns];
110
+ const FILL_IN_THE_BLANKS = true;
111
+ const valuesGrid = rowsTreeService
112
+ ? rowsTreeService.extractData(columnsTreeService)
113
+ : [];
114
+ const rowCount = rowsGrid.length;
115
+ const columnCount = columns.length;
116
+ const rows = [];
117
+ let curRowIndex = 0;
118
+ let curColIndex = 0;
119
+ Array.from(Array(rowCount)).map((c, rowIndex) => {
120
+ const row = [];
121
+ Array.from(Array(columnCount)).map((c, colIndex) => {
122
+ var _a, _b;
123
+ let dataNode;
124
+ if (colIndex < cornerColumns.length) {
125
+ curRowIndex = rowIndex;
126
+ curColIndex = colIndex;
127
+ try {
128
+ dataNode = rowsGrid[curRowIndex][curColIndex];
129
+ }
130
+ catch (err) {
131
+ throw new Error(`Can't find data item for ${curRowIndex}-${curColIndex}`);
132
+ }
133
+ }
134
+ else {
135
+ curRowIndex = rowIndex;
136
+ curColIndex = colIndex - cornerColumns.length;
137
+ try {
138
+ dataNode = valuesGrid[curRowIndex][curColIndex];
139
+ }
140
+ catch (err) {
141
+ throw new Error(`Can't find data item for ${curRowIndex}-${curColIndex}`);
142
+ }
143
+ }
144
+ let value;
145
+ if (typeof dataNode === 'string') {
146
+ if (FILL_IN_THE_BLANKS) {
147
+ const indexes = dataNode.split('-');
148
+ // eslint-disable-next-line max-lines
149
+ if (indexes.length === 2) {
150
+ const parentRowIndex = Number(indexes[0]);
151
+ const parentColIndex = Number(indexes[1]);
152
+ dataNode = rowsGrid[parentRowIndex][parentColIndex];
153
+ value = ((_a = dataNode.value) === null || _a === void 0 ? void 0 : _a.toString()) || '';
154
+ }
155
+ else {
156
+ // eslint-disable-next-line max-lines
157
+ value = '';
158
+ }
159
+ }
160
+ else {
161
+ value = '';
162
+ }
163
+ // eslint-disable-next-line max-lines
164
+ }
165
+ else {
166
+ value = ((_b = dataNode.value) === null || _b === void 0 ? void 0 : _b.toString()) || '';
167
+ }
168
+ row.push({ data: value, text: value });
169
+ });
170
+ rows.push(row);
171
+ });
172
+ return {
173
+ table: {
174
+ columns: columns,
175
+ rows: rows,
176
+ },
177
+ grids: {
178
+ corner: cornerGrid,
179
+ rows: rowsGrid,
180
+ columns: columnsGrid,
181
+ values: valuesGrid,
182
+ },
183
+ };
184
+ }
185
+ }
186
+ exports.PivotDataBuilder = PivotDataBuilder;
@@ -0,0 +1,18 @@
1
+ import { Authenticator } from '@sisense/sdk-rest-client';
2
+ import { SocketI } from '../data-load/types.js';
3
+ export declare class SocketBuilder {
4
+ private _socket;
5
+ private readonly _url;
6
+ private readonly _auth;
7
+ /**
8
+ * Boolean flag to indicate if the socket should be mocked or not (for testing).
9
+ *
10
+ * @internal
11
+ */
12
+ private readonly _mockSocket;
13
+ constructor(url: string, auth: Authenticator, mockSocket?: boolean);
14
+ private getQueryOptionsSso;
15
+ private getQueryOptionsBearer;
16
+ private getQueryOptionsWat;
17
+ get socket(): SocketI;
18
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SocketBuilder = void 0;
7
+ const sdk_rest_client_1 = require("@sisense/sdk-rest-client");
8
+ const index_js_1 = require("../data-load/index.js");
9
+ const TestSocket_js_1 = __importDefault(require("../data-load/sockets/TestSocket.js"));
10
+ /**
11
+ * Builder to create a web socket client on demand to communicate with a Sisense web socket server.
12
+ *
13
+ * @internal
14
+ */
15
+ const PIVOT_NAMESPACE = 'pivot2';
16
+ class SocketBuilder {
17
+ constructor(url, auth, mockSocket = false) {
18
+ this._url = url;
19
+ this._auth = auth;
20
+ this._mockSocket = mockSocket;
21
+ }
22
+ getQueryOptionsSso(auth) {
23
+ // No need to add query params as SSO authentication
24
+ // is using cookies sent automatically by the browser
25
+ return {};
26
+ }
27
+ getQueryOptionsBearer(auth) {
28
+ const authToken = auth.bearer;
29
+ if (!authToken) {
30
+ throw new Error('Missing bearer token');
31
+ }
32
+ return {
33
+ token: authToken,
34
+ };
35
+ }
36
+ getQueryOptionsWat(auth) {
37
+ const headers = new Headers();
38
+ auth.applyHeaders(headers);
39
+ const authorization = headers.get('Authorization');
40
+ const initialiser = headers.get('Initialiser');
41
+ if (!authorization || !initialiser) {
42
+ throw new Error('Missing auth header');
43
+ }
44
+ return {
45
+ authorization,
46
+ initialiser,
47
+ };
48
+ }
49
+ get socket() {
50
+ // initialize socket only when needed
51
+ if (!this._socket) {
52
+ if (this._mockSocket) {
53
+ // use a mock socket for testing
54
+ this._socket = new TestSocket_js_1.default();
55
+ return this._socket;
56
+ }
57
+ const auth = this._auth;
58
+ const url = this._url;
59
+ let query = {};
60
+ // Do not use instanceof because it checks if the constructors are the same.
61
+ // However, when the class is imported from @sisense/sdk-rest-client,
62
+ // the code gets its own copy of the constructor from the code in the library,
63
+ // so they are not the same instance anymore.
64
+ // Reference: https://stackoverflow.com/a/63937850/2425556
65
+ if ((0, sdk_rest_client_1.isBearerAuthenticator)(auth)) {
66
+ query = this.getQueryOptionsBearer(auth);
67
+ }
68
+ else if ((0, sdk_rest_client_1.isWatAuthenticator)(auth)) {
69
+ query = this.getQueryOptionsWat(auth);
70
+ }
71
+ else if ((0, sdk_rest_client_1.isSsoAuthenticator)(auth)) {
72
+ query = this.getQueryOptionsSso(auth);
73
+ }
74
+ this._socket = new index_js_1.SisenseSocket(url, query, PIVOT_NAMESPACE);
75
+ }
76
+ return this._socket;
77
+ }
78
+ }
79
+ exports.SocketBuilder = SocketBuilder;