@thoughtspot/visual-embed-sdk 1.10.0-alpha.4 → 1.11.0-alpha.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.
- package/CHANGELOG.md +4 -0
- package/README.md +1 -1
- package/dist/src/auth.d.ts +18 -5
- package/dist/src/embed/base.d.ts +21 -5
- package/dist/src/embed/pinboard.d.ts +6 -0
- package/dist/src/embed/ts-embed.d.ts +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/types.d.ts +21 -0
- package/dist/src/utils/authService.d.ts +1 -0
- package/dist/src/utils/plugin.d.ts +0 -0
- package/dist/src/utils/processData.d.ts +1 -1
- package/dist/src/v1/api.d.ts +19 -0
- package/dist/tsembed.es.js +536 -36
- package/dist/tsembed.js +534 -35
- package/lib/package.json +2 -1
- package/lib/src/auth.d.ts +18 -5
- package/lib/src/auth.js +48 -9
- package/lib/src/auth.js.map +1 -1
- package/lib/src/auth.spec.js +69 -11
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +21 -5
- package/lib/src/embed/base.js +64 -10
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/base.spec.js +49 -3
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +1 -1
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +30 -1
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/pinboard.d.ts +6 -0
- package/lib/src/embed/pinboard.js +4 -1
- package/lib/src/embed/pinboard.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +1 -1
- package/lib/src/embed/ts-embed.js +18 -14
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +16 -6
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +3 -2
- package/lib/src/index.js +3 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/test/test-utils.js +1 -1
- package/lib/src/test/test-utils.js.map +1 -1
- package/lib/src/types.d.ts +21 -0
- package/lib/src/types.js +16 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/authService.d.ts +1 -0
- package/lib/src/utils/authService.js +21 -3
- package/lib/src/utils/authService.js.map +1 -1
- package/lib/src/utils/authService.spec.js +21 -5
- package/lib/src/utils/authService.spec.js.map +1 -1
- package/lib/src/utils/plugin.d.ts +0 -0
- package/lib/src/utils/plugin.js +1 -0
- package/lib/src/utils/plugin.js.map +1 -0
- package/lib/src/utils/processData.d.ts +1 -1
- package/lib/src/utils/processData.js +37 -3
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js +106 -4
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +107 -8
- package/package.json +2 -1
- package/src/auth.spec.ts +90 -11
- package/src/auth.ts +63 -13
- package/src/embed/base.spec.ts +56 -4
- package/src/embed/base.ts +83 -16
- package/src/embed/embed.spec.ts +1 -1
- package/src/embed/events.spec.ts +32 -0
- package/src/embed/ts-embed.spec.ts +19 -9
- package/src/embed/ts-embed.ts +24 -15
- package/src/index.ts +5 -1
- package/src/test/test-utils.ts +1 -1
- package/src/types.ts +22 -0
- package/src/utils/authService.spec.ts +31 -5
- package/src/utils/authService.ts +27 -3
- package/src/utils/processData.spec.ts +139 -4
- package/src/utils/processData.ts +54 -4
- package/lib/src/utils/fetchAnswers.d.ts +0 -3
- package/lib/src/utils/fetchAnswers.js +0 -49
- package/lib/src/utils/fetchAnswers.js.map +0 -1
package/lib/src/types.d.ts
CHANGED
|
@@ -119,6 +119,11 @@ export interface EmbedConfig {
|
|
|
119
119
|
* @default false
|
|
120
120
|
*/
|
|
121
121
|
disableLoginRedirect?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* This message is displayed on the embed view when the login fails.
|
|
124
|
+
* @version 1.10.1 | ThoughtSpot: *
|
|
125
|
+
*/
|
|
126
|
+
loginFailedMessage?: string;
|
|
122
127
|
/**
|
|
123
128
|
* Calls the prefetch method internally when set to true
|
|
124
129
|
* @default false
|
|
@@ -332,6 +337,16 @@ export declare enum EmbedEvent {
|
|
|
332
337
|
* The ThoughtSpot auth session has expired.
|
|
333
338
|
*/
|
|
334
339
|
AuthExpire = "ThoughtspotAuthExpired",
|
|
340
|
+
/**
|
|
341
|
+
* ThoughtSpot failed to validate the auth session.
|
|
342
|
+
* @hidden
|
|
343
|
+
*/
|
|
344
|
+
AuthFailure = "ThoughtspotAuthFailure",
|
|
345
|
+
/**
|
|
346
|
+
* ThoughtSpot failed to validate the auth session.
|
|
347
|
+
* @hidden
|
|
348
|
+
*/
|
|
349
|
+
AuthLogout = "ThoughtspotAuthLogout",
|
|
335
350
|
/**
|
|
336
351
|
* The height of the embedded Liveboard or visualization has been computed.
|
|
337
352
|
* @return data - The height of the embedded Liveboard or visualization
|
|
@@ -383,6 +398,12 @@ export declare enum EmbedEvent {
|
|
|
383
398
|
* @version 1.9.1 or later
|
|
384
399
|
*/
|
|
385
400
|
LiveboardRendered = "PinboardRendered",
|
|
401
|
+
/**
|
|
402
|
+
* This can be used to register an event listener which
|
|
403
|
+
* is triggered on all events.
|
|
404
|
+
* @version SDK: 1.10.0 | ThoughtSpot: any
|
|
405
|
+
*/
|
|
406
|
+
ALL = "*",
|
|
386
407
|
/**
|
|
387
408
|
* Emitted when answer is saved in the app
|
|
388
409
|
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
package/lib/src/types.js
CHANGED
|
@@ -185,6 +185,16 @@ export var EmbedEvent;
|
|
|
185
185
|
* The ThoughtSpot auth session has expired.
|
|
186
186
|
*/
|
|
187
187
|
EmbedEvent["AuthExpire"] = "ThoughtspotAuthExpired";
|
|
188
|
+
/**
|
|
189
|
+
* ThoughtSpot failed to validate the auth session.
|
|
190
|
+
* @hidden
|
|
191
|
+
*/
|
|
192
|
+
EmbedEvent["AuthFailure"] = "ThoughtspotAuthFailure";
|
|
193
|
+
/**
|
|
194
|
+
* ThoughtSpot failed to validate the auth session.
|
|
195
|
+
* @hidden
|
|
196
|
+
*/
|
|
197
|
+
EmbedEvent["AuthLogout"] = "ThoughtspotAuthLogout";
|
|
188
198
|
/**
|
|
189
199
|
* The height of the embedded Liveboard or visualization has been computed.
|
|
190
200
|
* @return data - The height of the embedded Liveboard or visualization
|
|
@@ -236,6 +246,12 @@ export var EmbedEvent;
|
|
|
236
246
|
* @version 1.9.1 or later
|
|
237
247
|
*/
|
|
238
248
|
EmbedEvent["LiveboardRendered"] = "PinboardRendered";
|
|
249
|
+
/**
|
|
250
|
+
* This can be used to register an event listener which
|
|
251
|
+
* is triggered on all events.
|
|
252
|
+
* @version SDK: 1.10.0 | ThoughtSpot: any
|
|
253
|
+
*/
|
|
254
|
+
EmbedEvent["ALL"] = "*";
|
|
239
255
|
/**
|
|
240
256
|
* Emitted when answer is saved in the app
|
|
241
257
|
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
package/lib/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,qCAAqC;AACrC,MAAM,CAAN,IAAY,QAwBX;AAxBD,WAAY,QAAQ;IAChB;;OAEG;IACH,yBAAa,CAAA;IACb;;OAEG;IACH,4BAAgB,CAAA;IAChB;;OAEG;IACH,6BAAiB,CAAA;IACjB;;OAEG;IACH,qCAAyB,CAAA;IACzB;;;;;OAKG;IACH,2BAAe,CAAA;AACnB,CAAC,EAxBW,QAAQ,KAAR,QAAQ,QAwBnB;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,3 +2,4 @@ export declare function fetchSessionInfoService(authVerificationUrl: string): Pr
|
|
|
2
2
|
export declare function fetchAuthTokenService(authEndpoint: string): Promise<any>;
|
|
3
3
|
export declare function fetchAuthService(thoughtSpotHost: string, username: string, authToken: string): Promise<any>;
|
|
4
4
|
export declare function fetchBasicAuthService(thoughtSpotHost: string, username: string, password: string): Promise<any>;
|
|
5
|
+
export declare function fetchLogoutService(thoughtSpotHost: string): Promise<any>;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
// eslint-disable-next-line import/no-cycle
|
|
2
2
|
import { EndPoints } from '../auth';
|
|
3
|
+
function failureLoggedFetch(url, options = {}) {
|
|
4
|
+
return fetch(url, options).then(async (r) => {
|
|
5
|
+
var _a;
|
|
6
|
+
if (!r.ok && r.type !== 'opaqueredirect' && r.type !== 'opaque') {
|
|
7
|
+
console.error('Failure', await ((_a = r.text) === null || _a === void 0 ? void 0 : _a.call(r)));
|
|
8
|
+
}
|
|
9
|
+
return r;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
3
12
|
export function fetchSessionInfoService(authVerificationUrl) {
|
|
4
|
-
return
|
|
13
|
+
return failureLoggedFetch(authVerificationUrl, {
|
|
5
14
|
credentials: 'include',
|
|
6
15
|
});
|
|
7
16
|
}
|
|
@@ -9,12 +18,14 @@ export async function fetchAuthTokenService(authEndpoint) {
|
|
|
9
18
|
return fetch(authEndpoint);
|
|
10
19
|
}
|
|
11
20
|
export async function fetchAuthService(thoughtSpotHost, username, authToken) {
|
|
12
|
-
return
|
|
21
|
+
return failureLoggedFetch(`${thoughtSpotHost}${EndPoints.TOKEN_LOGIN}?username=${username}&auth_token=${authToken}`, {
|
|
13
22
|
credentials: 'include',
|
|
23
|
+
// We do not want to follow the redirect, as it starts giving a CORS error
|
|
24
|
+
redirect: 'manual',
|
|
14
25
|
});
|
|
15
26
|
}
|
|
16
27
|
export async function fetchBasicAuthService(thoughtSpotHost, username, password) {
|
|
17
|
-
return
|
|
28
|
+
return failureLoggedFetch(`${thoughtSpotHost}${EndPoints.BASIC_LOGIN}`, {
|
|
18
29
|
method: 'POST',
|
|
19
30
|
headers: {
|
|
20
31
|
'content-type': 'application/x-www-form-urlencoded',
|
|
@@ -24,4 +35,11 @@ export async function fetchBasicAuthService(thoughtSpotHost, username, password)
|
|
|
24
35
|
credentials: 'include',
|
|
25
36
|
});
|
|
26
37
|
}
|
|
38
|
+
export async function fetchLogoutService(thoughtSpotHost) {
|
|
39
|
+
return failureLoggedFetch(`${thoughtSpotHost}${EndPoints.LOGOUT}`, {
|
|
40
|
+
credentials: 'include',
|
|
41
|
+
mode: 'no-cors',
|
|
42
|
+
method: 'POST',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
27
45
|
//# sourceMappingURL=authService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/utils/authService.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,UAAU,uBAAuB,CACnC,mBAA2B;IAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/utils/authService.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,SAAS,kBAAkB,CACvB,GAAW,EACX,UAAuB,EAAE;IAEzB,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;;QACxC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7D,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAA,MAAA,CAAC,CAAC,IAAI,+CAAN,CAAC,CAAS,CAAA,CAAC,CAAC;SAC9C;QACD,OAAO,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,mBAA2B;IAE3B,OAAO,kBAAkB,CAAC,mBAAmB,EAAE;QAC3C,WAAW,EAAE,SAAS;KACzB,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACvC,YAAoB;IAEpB,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,eAAuB,EACvB,QAAgB,EAChB,SAAiB;IAEjB,OAAO,kBAAkB,CACrB,GAAG,eAAe,GAAG,SAAS,CAAC,WAAW,aAAa,QAAQ,eAAe,SAAS,EAAE,EACzF;QACI,WAAW,EAAE,SAAS;QACtB,0EAA0E;QAC1E,QAAQ,EAAE,QAAQ;KACrB,CACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACvC,eAAuB,EACvB,QAAgB,EAChB,QAAgB;IAEhB,OAAO,kBAAkB,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,EAAE;QACpE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACL,cAAc,EAAE,mCAAmC;YACnD,gBAAgB,EAAE,aAAa;SAClC;QACD,IAAI,EAAE,YAAY,kBAAkB,CAChC,QAAQ,CACX,aAAa,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QAC5C,WAAW,EAAE,SAAS;KACzB,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,eAAuB;IAEvB,OAAO,kBAAkB,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE;QAC/D,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,MAAM;KACjB,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fetchSessionInfoService, fetchAuthTokenService, fetchAuthService, fetchBasicAuthService, } from './authService';
|
|
2
|
+
import { EndPoints } from '../auth';
|
|
2
3
|
const thoughtSpotHost = 'http://10.79.135.124:3000';
|
|
3
4
|
const authVerificationUrl = 'http://localhost:3000';
|
|
4
5
|
const authEndpoint = '';
|
|
@@ -13,6 +14,7 @@ describe('Unit test for authService', () => {
|
|
|
13
14
|
global.fetch = jest.fn(() => Promise.resolve({
|
|
14
15
|
json: () => ({ success: true }),
|
|
15
16
|
status: 200,
|
|
17
|
+
ok: true,
|
|
16
18
|
}));
|
|
17
19
|
const response = await fetchSessionInfoService(authVerificationUrl);
|
|
18
20
|
expect(response.status).toBe(200);
|
|
@@ -21,20 +23,34 @@ describe('Unit test for authService', () => {
|
|
|
21
23
|
test('fetchAuthTokenService', async () => {
|
|
22
24
|
global.fetch = jest.fn(() => Promise.resolve({
|
|
23
25
|
text: () => ({ success: true }),
|
|
26
|
+
ok: true,
|
|
24
27
|
}));
|
|
25
28
|
const response = await fetchAuthTokenService(authEndpoint);
|
|
26
29
|
expect(response.text()).toStrictEqual({ success: true });
|
|
27
30
|
expect(fetch).toBeCalled();
|
|
28
31
|
});
|
|
29
32
|
test('fetchAuthService', async () => {
|
|
30
|
-
global.fetch = jest.fn(() => Promise.resolve({ success: true }));
|
|
31
|
-
await fetchAuthService(
|
|
32
|
-
expect(fetch).
|
|
33
|
+
global.fetch = jest.fn(() => Promise.resolve({ success: true, ok: true }));
|
|
34
|
+
await fetchAuthService(thoughtSpotHost, username, authToken);
|
|
35
|
+
expect(fetch).toBeCalledWith(`${thoughtSpotHost}${EndPoints.TOKEN_LOGIN}?username=${username}&auth_token=${authToken}`, {
|
|
36
|
+
credentials: 'include',
|
|
37
|
+
redirect: 'manual',
|
|
38
|
+
});
|
|
33
39
|
});
|
|
34
|
-
test('fetchBasicAuthService', async () => {
|
|
35
|
-
global.fetch = jest.fn(() => Promise.resolve({ success: true }));
|
|
40
|
+
test('fetchBasicAuthService called with manual redirect', async () => {
|
|
41
|
+
global.fetch = jest.fn(() => Promise.resolve({ success: true, ok: true }));
|
|
36
42
|
await fetchBasicAuthService(thoughtSpotHost, username, password);
|
|
37
43
|
expect(fetch).toBeCalled();
|
|
38
44
|
});
|
|
45
|
+
test('log error on API failures', async () => {
|
|
46
|
+
jest.spyOn(global.console, 'error').mockImplementation(() => undefined);
|
|
47
|
+
global.fetch = jest.fn(() => Promise.resolve({
|
|
48
|
+
text: () => Promise.resolve('error'),
|
|
49
|
+
status: 500,
|
|
50
|
+
ok: false,
|
|
51
|
+
}));
|
|
52
|
+
await fetchSessionInfoService(authVerificationUrl);
|
|
53
|
+
expect(global.console.error).toHaveBeenCalledWith('Failure', 'error');
|
|
54
|
+
});
|
|
39
55
|
});
|
|
40
56
|
//# sourceMappingURL=authService.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authService.spec.js","sourceRoot":"","sources":["../../../src/utils/authService.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"authService.spec.js","sourceRoot":"","sources":["../../../src/utils/authService.spec.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/utils/plugin.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { EmbedEvent } from '../types';
|
|
2
2
|
export declare function processCustomAction(e: any, thoughtSpotHost: string): any;
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function processEventData(type: EmbedEvent, e: any, thoughtSpotHost: string, containerEl: Element): any;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getEmbedConfig, handleAuth } from '../embed/base';
|
|
2
|
-
import { initSession } from '../auth';
|
|
1
|
+
import { disableAutoLogin, getEmbedConfig, handleAuth, notifyAuthFailure, notifyAuthSuccess, notifyLogout, } from '../embed/base';
|
|
2
|
+
import { AuthFailureType, initSession } from '../auth';
|
|
3
3
|
import { EmbedEvent, OperationType } from '../types';
|
|
4
4
|
import { getAnswerServiceInstance } from './answerService';
|
|
5
5
|
export function processCustomAction(e, thoughtSpotHost) {
|
|
@@ -21,6 +21,7 @@ function processAuthInit(e) {
|
|
|
21
21
|
var _a, _b;
|
|
22
22
|
// Store user session details sent by app.
|
|
23
23
|
initSession(e.data);
|
|
24
|
+
notifyAuthSuccess();
|
|
24
25
|
// Expose only allowed details (eg: userGUID) back to SDK users.
|
|
25
26
|
return {
|
|
26
27
|
...e,
|
|
@@ -34,9 +35,36 @@ function processAuthExpire(e) {
|
|
|
34
35
|
if (autoLogin) {
|
|
35
36
|
handleAuth();
|
|
36
37
|
}
|
|
38
|
+
notifyAuthFailure(AuthFailureType.EXPIRY);
|
|
37
39
|
return e;
|
|
38
40
|
}
|
|
39
|
-
|
|
41
|
+
function processNoCookieAccess(e, containerEl) {
|
|
42
|
+
const { loginFailedMessage, suppressNoCookieAccessAlert, } = getEmbedConfig();
|
|
43
|
+
if (!suppressNoCookieAccessAlert) {
|
|
44
|
+
// eslint-disable-next-line no-alert
|
|
45
|
+
alert('Third party cookie access is blocked on this browser, please allow third party cookies for this to work properly. \nYou can use `suppressNoCookieAccessAlert` to suppress this message.');
|
|
46
|
+
}
|
|
47
|
+
// eslint-disable-next-line no-param-reassign
|
|
48
|
+
containerEl.innerHTML = loginFailedMessage;
|
|
49
|
+
notifyAuthFailure(AuthFailureType.NO_COOKIE_ACCESS);
|
|
50
|
+
return e;
|
|
51
|
+
}
|
|
52
|
+
function processAuthFailure(e, containerEl) {
|
|
53
|
+
const { loginFailedMessage } = getEmbedConfig();
|
|
54
|
+
// eslint-disable-next-line no-param-reassign
|
|
55
|
+
containerEl.innerHTML = loginFailedMessage;
|
|
56
|
+
notifyAuthFailure(AuthFailureType.OTHER);
|
|
57
|
+
return e;
|
|
58
|
+
}
|
|
59
|
+
function processAuthLogout(e, containerEl) {
|
|
60
|
+
const { loginFailedMessage } = getEmbedConfig();
|
|
61
|
+
// eslint-disable-next-line no-param-reassign
|
|
62
|
+
containerEl.innerHTML = loginFailedMessage;
|
|
63
|
+
disableAutoLogin();
|
|
64
|
+
notifyLogout();
|
|
65
|
+
return e;
|
|
66
|
+
}
|
|
67
|
+
export function processEventData(type, e, thoughtSpotHost, containerEl) {
|
|
40
68
|
switch (type) {
|
|
41
69
|
case EmbedEvent.CustomAction:
|
|
42
70
|
return processCustomAction(e, thoughtSpotHost);
|
|
@@ -44,6 +72,12 @@ export function getProcessData(type, e, thoughtSpotHost) {
|
|
|
44
72
|
return processAuthInit(e);
|
|
45
73
|
case EmbedEvent.AuthExpire:
|
|
46
74
|
return processAuthExpire(e);
|
|
75
|
+
case EmbedEvent.NoCookieAccess:
|
|
76
|
+
return processNoCookieAccess(e, containerEl);
|
|
77
|
+
case EmbedEvent.AuthFailure:
|
|
78
|
+
return processAuthFailure(e, containerEl);
|
|
79
|
+
case EmbedEvent.AuthLogout:
|
|
80
|
+
return processAuthLogout(e, containerEl);
|
|
47
81
|
default:
|
|
48
82
|
}
|
|
49
83
|
return e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processData.js","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"processData.js","sourceRoot":"","sources":["../../../src/utils/processData.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import * as processDataInstance from './processData';
|
|
2
2
|
import * as answerServiceInstance from './answerService';
|
|
3
3
|
import * as auth from '../auth';
|
|
4
|
-
import
|
|
4
|
+
import * as base from '../embed/base';
|
|
5
|
+
import { EmbedEvent, OperationType, AuthType } from '../types';
|
|
5
6
|
describe('Unit test for process data', () => {
|
|
7
|
+
beforeAll(() => {
|
|
8
|
+
base.init({
|
|
9
|
+
thoughtSpotHost: '',
|
|
10
|
+
authType: AuthType.None,
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
afterEach(() => {
|
|
14
|
+
jest.resetAllMocks();
|
|
15
|
+
});
|
|
6
16
|
const thoughtSpotHost = 'http://localhost';
|
|
7
17
|
test('processDataInstance, when operation is GetChartWithData', () => {
|
|
8
18
|
const answerService = {};
|
|
@@ -20,13 +30,13 @@ describe('Unit test for process data', () => {
|
|
|
20
30
|
test('ProcessData, when Action is CustomAction', async () => {
|
|
21
31
|
const processedData = { type: EmbedEvent.CustomAction };
|
|
22
32
|
jest.spyOn(processDataInstance, 'processCustomAction').mockImplementation(async () => ({}));
|
|
23
|
-
expect(processDataInstance.
|
|
33
|
+
expect(processDataInstance.processEventData(EmbedEvent.CustomAction, processedData, thoughtSpotHost, null)).toStrictEqual(processedData);
|
|
24
34
|
});
|
|
25
35
|
test('ProcessData, when Action is non CustomAction', () => {
|
|
26
36
|
const processedData = { type: EmbedEvent.Data };
|
|
27
37
|
jest.spyOn(processDataInstance, 'processCustomAction').mockImplementation(async () => ({}));
|
|
28
38
|
jest.spyOn(answerServiceInstance, 'getAnswerServiceInstance').mockImplementation(async () => ({}));
|
|
29
|
-
processDataInstance.
|
|
39
|
+
processDataInstance.processEventData(EmbedEvent.Data, processedData, thoughtSpotHost, null);
|
|
30
40
|
expect(processDataInstance.processCustomAction).not.toBeCalled();
|
|
31
41
|
});
|
|
32
42
|
test('AuthInit', () => {
|
|
@@ -37,13 +47,105 @@ describe('Unit test for process data', () => {
|
|
|
37
47
|
};
|
|
38
48
|
const e = { type: EmbedEvent.AuthInit, data: sessionInfo };
|
|
39
49
|
jest.spyOn(auth, 'initSession').mockReturnValue(null);
|
|
40
|
-
|
|
50
|
+
jest.spyOn(base, 'notifyAuthSuccess');
|
|
51
|
+
expect(processDataInstance.processEventData(e.type, e, '', null)).toEqual({
|
|
41
52
|
type: e.type,
|
|
42
53
|
data: {
|
|
43
54
|
userGUID: sessionInfo.userGUID,
|
|
44
55
|
},
|
|
45
56
|
});
|
|
46
57
|
expect(auth.initSession).toBeCalledWith(sessionInfo);
|
|
58
|
+
expect(base.notifyAuthSuccess).toBeCalled();
|
|
59
|
+
});
|
|
60
|
+
test('AuthExpire autoLogin false', () => {
|
|
61
|
+
const e = { type: EmbedEvent.AuthExpire };
|
|
62
|
+
jest.spyOn(base, 'notifyAuthFailure');
|
|
63
|
+
jest.spyOn(base, 'handleAuth');
|
|
64
|
+
jest.spyOn(base, 'getEmbedConfig').mockReturnValue({
|
|
65
|
+
autoLogin: false,
|
|
66
|
+
});
|
|
67
|
+
expect(processDataInstance.processEventData(e.type, e, '', null)).toEqual({
|
|
68
|
+
type: e.type,
|
|
69
|
+
});
|
|
70
|
+
expect(base.notifyAuthFailure).toBeCalledWith(auth.AuthFailureType.EXPIRY);
|
|
71
|
+
expect(base.handleAuth).not.toHaveBeenCalled();
|
|
72
|
+
});
|
|
73
|
+
test('AuthExpire autoLogin true', () => {
|
|
74
|
+
const e = { type: EmbedEvent.AuthExpire };
|
|
75
|
+
jest.spyOn(base, 'notifyAuthFailure');
|
|
76
|
+
jest.spyOn(base, 'handleAuth').mockResolvedValue(true);
|
|
77
|
+
jest.spyOn(base, 'getEmbedConfig').mockReturnValue({
|
|
78
|
+
autoLogin: true,
|
|
79
|
+
});
|
|
80
|
+
expect(processDataInstance.processEventData(e.type, e, '', null)).toEqual({
|
|
81
|
+
type: e.type,
|
|
82
|
+
});
|
|
83
|
+
expect(base.notifyAuthFailure).toBeCalledWith(auth.AuthFailureType.EXPIRY);
|
|
84
|
+
expect(base.handleAuth).toBeCalled();
|
|
85
|
+
});
|
|
86
|
+
test('NoCookieAccess no suppress alert', () => {
|
|
87
|
+
const e = { type: EmbedEvent.NoCookieAccess };
|
|
88
|
+
jest.spyOn(base, 'notifyAuthFailure');
|
|
89
|
+
jest.spyOn(base, 'getEmbedConfig').mockReturnValue({
|
|
90
|
+
loginFailedMessage: 'Hello',
|
|
91
|
+
suppressNoCookieAccessAlert: false,
|
|
92
|
+
});
|
|
93
|
+
jest.spyOn(window, 'alert').mockImplementation(() => undefined);
|
|
94
|
+
const el = {};
|
|
95
|
+
expect(processDataInstance.processEventData(e.type, e, '', el)).toEqual({
|
|
96
|
+
type: e.type,
|
|
97
|
+
});
|
|
98
|
+
expect(base.notifyAuthFailure).toBeCalledWith(auth.AuthFailureType.NO_COOKIE_ACCESS);
|
|
99
|
+
expect(window.alert).toBeCalled();
|
|
100
|
+
expect(el.innerHTML).toBe('Hello');
|
|
101
|
+
});
|
|
102
|
+
test('NoCookieAccess suppressAlert=true', () => {
|
|
103
|
+
const e = { type: EmbedEvent.NoCookieAccess };
|
|
104
|
+
jest.spyOn(base, 'notifyAuthFailure');
|
|
105
|
+
jest.spyOn(base, 'getEmbedConfig').mockReturnValue({
|
|
106
|
+
loginFailedMessage: 'Hello',
|
|
107
|
+
suppressNoCookieAccessAlert: true,
|
|
108
|
+
});
|
|
109
|
+
jest.spyOn(window, 'alert').mockReset();
|
|
110
|
+
jest.spyOn(window, 'alert').mockImplementation(() => undefined);
|
|
111
|
+
const el = {};
|
|
112
|
+
expect(processDataInstance.processEventData(e.type, e, '', el)).toEqual({
|
|
113
|
+
type: e.type,
|
|
114
|
+
});
|
|
115
|
+
expect(base.notifyAuthFailure).toBeCalledWith(auth.AuthFailureType.NO_COOKIE_ACCESS);
|
|
116
|
+
expect(window.alert).not.toBeCalled();
|
|
117
|
+
expect(el.innerHTML).toBe('Hello');
|
|
118
|
+
});
|
|
119
|
+
test('process authFailure', () => {
|
|
120
|
+
const e = { type: EmbedEvent.AuthFailure };
|
|
121
|
+
jest.spyOn(base, 'notifyAuthFailure');
|
|
122
|
+
jest.spyOn(base, 'getEmbedConfig').mockReturnValue({
|
|
123
|
+
loginFailedMessage: 'Hello',
|
|
124
|
+
});
|
|
125
|
+
const el = {};
|
|
126
|
+
expect(processDataInstance.processEventData(e.type, e, '', el)).toEqual({
|
|
127
|
+
type: e.type,
|
|
128
|
+
});
|
|
129
|
+
expect(base.notifyAuthFailure).toBeCalledWith(auth.AuthFailureType.OTHER);
|
|
130
|
+
expect(el.innerHTML).toBe('Hello');
|
|
131
|
+
});
|
|
132
|
+
test('process authLogout', () => {
|
|
133
|
+
base.init({
|
|
134
|
+
loginFailedMessage: 'Hello',
|
|
135
|
+
autoLogin: true,
|
|
136
|
+
thoughtSpotHost: '',
|
|
137
|
+
authType: AuthType.None,
|
|
138
|
+
});
|
|
139
|
+
jest.spyOn(base, 'getEmbedConfig').mockRestore();
|
|
140
|
+
const e = { type: EmbedEvent.AuthLogout };
|
|
141
|
+
jest.spyOn(base, 'notifyLogout');
|
|
142
|
+
const el = {};
|
|
143
|
+
expect(processDataInstance.processEventData(e.type, e, '', el)).toEqual({
|
|
144
|
+
type: e.type,
|
|
145
|
+
});
|
|
146
|
+
expect(base.notifyLogout).toBeCalled();
|
|
147
|
+
expect(el.innerHTML).toBe('Hello');
|
|
148
|
+
expect(base.getEmbedConfig().autoLogin).toBe(false);
|
|
47
149
|
});
|
|
48
150
|
});
|
|
49
151
|
//# sourceMappingURL=processData.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processData.spec.js","sourceRoot":"","sources":["../../../src/utils/processData.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,mBAAmB,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,qBAAqB,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"processData.spec.js","sourceRoot":"","sources":["../../../src/utils/processData.spec.ts"],"names":[],"mappings":"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"}
|