asma-helpers 0.2.50 → 0.3.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.
- package/lib/helpers/generateGenqlClient.d.ts +8 -1
- package/lib/helpers/generateGenqlClient.d.ts.map +1 -1
- package/lib/helpers/generateGenqlClient.js +24 -35
- package/lib/helpers/generateGenqlClient.js.map +1 -1
- package/lib/helpers/generateSrvAuthBindings.d.ts +14 -9
- package/lib/helpers/generateSrvAuthBindings.d.ts.map +1 -1
- package/lib/helpers/generateSrvAuthBindings.js +64 -49
- package/lib/helpers/generateSrvAuthBindings.js.map +1 -1
- package/lib/helpers/parseJwt.d.ts.map +1 -1
- package/lib/helpers/parseJwt.js +2 -2
- package/lib/helpers/parseJwt.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/generateGenqlClient.ts +35 -40
- package/src/helpers/generateSrvAuthBindings.ts +77 -54
- package/src/helpers/parseJwt.ts +4 -4
|
@@ -7,10 +7,17 @@ export declare function generateGenqlClient<T extends ReturnType<typeof createCl
|
|
|
7
7
|
setReqConfig: () => Promise<AxiosRequestConfig<any>>;
|
|
8
8
|
createClient: (options?: ClientOptions | undefined) => T;
|
|
9
9
|
serviceUrl: () => string;
|
|
10
|
+
/**
|
|
11
|
+
* Returns true whenether token and refresh token is epired! this helps to cancel all concurent requests after first request is invalidated.
|
|
12
|
+
* @returns true if request should be cancelled
|
|
13
|
+
*/
|
|
10
14
|
path?: string;
|
|
11
15
|
}): {
|
|
12
16
|
getGenqlClient: () => Promise<T>;
|
|
13
|
-
|
|
17
|
+
resetGenqlClient: () => void;
|
|
18
|
+
genqlClient: (options?: CliOptions & {
|
|
19
|
+
abortController?: AbortController;
|
|
20
|
+
}) => Promise<T>;
|
|
14
21
|
genqlClientWs: () => Promise<T>;
|
|
15
22
|
};
|
|
16
23
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateGenqlClient.d.ts","sourceRoot":"","sources":["../../src/helpers/generateGenqlClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,gBAAgB,CAAA;AAKjE,UAAU,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,YAAY,CAAC,EAAE,EAC3E,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,IAAoB,GACvB,EAAE;IAEC,YAAY,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,KAAK,CAAC,CAAA;IACxD,UAAU,EAAE,MAAM,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB
|
|
1
|
+
{"version":3,"file":"generateGenqlClient.d.ts","sourceRoot":"","sources":["../../src/helpers/generateGenqlClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,gBAAgB,CAAA;AAKjE,UAAU,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,YAAY,CAAC,EAAE,EAC3E,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,IAAoB,GACvB,EAAE;IAEC,YAAY,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,KAAK,CAAC,CAAA;IACxD,UAAU,EAAE,MAAM,MAAM,CAAA;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;;;4BA2BuC,UAAU,GAAG;QAAE,eAAe,CAAC,EAAE,eAAe,CAAA;KAAE,KAAQ,QAAQ,CAAC,CAAC;;EAwD3G"}
|
|
@@ -1,51 +1,30 @@
|
|
|
1
1
|
import { httpToWs } from './Config';
|
|
2
2
|
import { registerCallbackOnSrvAuthEvents } from './generateSrvAuthBindings';
|
|
3
3
|
export function generateGenqlClient({ setReqConfig, createClient, serviceUrl, path = '/v1/graphql', }) {
|
|
4
|
-
// let jwt_exp = 0
|
|
5
4
|
let client = null;
|
|
6
5
|
let wsClient = null;
|
|
7
|
-
|
|
6
|
+
function resetClients() {
|
|
8
7
|
client = null;
|
|
9
8
|
wsClient = null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// const nowTime = Math.floor(new Date().getTime() / 1000)
|
|
13
|
-
//
|
|
14
|
-
// //set exp time -20sec for token to be refreshed early
|
|
15
|
-
// return jwt_exp - 10 <= nowTime
|
|
16
|
-
//}
|
|
9
|
+
}
|
|
10
|
+
registerCallbackOnSrvAuthEvents('jwt_changed', resetClients);
|
|
17
11
|
async function getGenqlClient() {
|
|
18
|
-
if (
|
|
12
|
+
if (client === null) {
|
|
19
13
|
client = await genqlClient();
|
|
20
14
|
return client;
|
|
21
15
|
}
|
|
22
16
|
return client;
|
|
23
17
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// if (!token) return
|
|
29
|
-
//
|
|
30
|
-
// const parsed_jwt = parseJwt<{ exp: number }>(token)?.exp
|
|
31
|
-
//
|
|
32
|
-
// jwt_exp = parsed_jwt || 0
|
|
33
|
-
// }
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
36
|
-
* This is used for anonymous requests as well as authenticated requests
|
|
37
|
-
*
|
|
38
|
-
*/
|
|
18
|
+
function resetGenqlClient() {
|
|
19
|
+
client = null;
|
|
20
|
+
wsClient = null;
|
|
21
|
+
}
|
|
39
22
|
async function genqlClient(options = {}) {
|
|
40
|
-
|
|
41
|
-
const { anonymous, headers, ...rest } = options;
|
|
23
|
+
const { anonymous, headers, abortController, ...rest } = options;
|
|
42
24
|
if (!serviceUrl()) {
|
|
43
25
|
console.warn('requred param srv_url is undefined, please check EnvConfig object!');
|
|
44
26
|
}
|
|
45
|
-
|
|
46
|
-
//req_headers = ((await setReqConfig()).headers ?? {}) as Record<string, string>
|
|
47
|
-
// setJwtExp(req_headers['Authorization'])
|
|
48
|
-
// }
|
|
27
|
+
const localAbrotController = createabortControllerAndAbortOnLogoutEvent(abortController);
|
|
49
28
|
return createClient({
|
|
50
29
|
url: `${serviceUrl()}${path}`,
|
|
51
30
|
headers: async () => {
|
|
@@ -55,18 +34,19 @@ export function generateGenqlClient({ setReqConfig, createClient, serviceUrl, pa
|
|
|
55
34
|
...headers,
|
|
56
35
|
});
|
|
57
36
|
},
|
|
37
|
+
signal: localAbrotController.signal,
|
|
58
38
|
batch: { batchInterval: 50, maxBatchSize: 100 },
|
|
59
39
|
...rest,
|
|
60
40
|
});
|
|
61
41
|
}
|
|
62
42
|
async function genqlClientWs() {
|
|
63
|
-
if (
|
|
64
|
-
|
|
65
|
-
//setJwtExp(req_headers['Authorization'])
|
|
43
|
+
if (!wsClient) {
|
|
44
|
+
const localAbrotController = createabortControllerAndAbortOnLogoutEvent();
|
|
66
45
|
wsClient = createClient({
|
|
67
46
|
url: `${httpToWs(serviceUrl())}${path}`,
|
|
68
47
|
cache: 'reload',
|
|
69
48
|
batch: { batchInterval: 50, maxBatchSize: 100 },
|
|
49
|
+
signal: localAbrotController.signal,
|
|
70
50
|
subscription: {
|
|
71
51
|
reconnect: true,
|
|
72
52
|
reconnectionAttempts: 5,
|
|
@@ -76,6 +56,15 @@ export function generateGenqlClient({ setReqConfig, createClient, serviceUrl, pa
|
|
|
76
56
|
}
|
|
77
57
|
return wsClient;
|
|
78
58
|
}
|
|
79
|
-
|
|
59
|
+
function createabortControllerAndAbortOnLogoutEvent(abortController) {
|
|
60
|
+
let localAbrotController = abortController || new AbortController();
|
|
61
|
+
const { unregister } = registerCallbackOnSrvAuthEvents('logout_event', () => {
|
|
62
|
+
localAbrotController === null || localAbrotController === void 0 ? void 0 : localAbrotController.abort();
|
|
63
|
+
resetClients();
|
|
64
|
+
unregister();
|
|
65
|
+
});
|
|
66
|
+
return localAbrotController;
|
|
67
|
+
}
|
|
68
|
+
return { getGenqlClient, resetGenqlClient, genqlClient, genqlClientWs };
|
|
80
69
|
}
|
|
81
70
|
//# sourceMappingURL=generateGenqlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateGenqlClient.js","sourceRoot":"","sources":["../../src/helpers/generateGenqlClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAO3E,MAAM,UAAU,mBAAmB,CAA4C,EAC3E,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,IAAI,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"generateGenqlClient.js","sourceRoot":"","sources":["../../src/helpers/generateGenqlClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AxiosResponse, type ResponseType } from 'axios';
|
|
2
2
|
import { EnvironmentEnums } from '..';
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const dispatchSrvAuthEvents: <Key extends "logout_event" | "jwt_changed">(event: Key, arg: {
|
|
4
4
|
jwt_changed: {};
|
|
5
5
|
logout_event: {};
|
|
6
6
|
}[Key], shouldPersist?: boolean | undefined) => void, registerCallbackOnSrvAuthEvents: <Key_1 extends "logout_event" | "jwt_changed">(event: Key_1, callback: (val: {
|
|
@@ -13,11 +13,11 @@ export declare function generateSrvAuthBindings<FeatureEnums = never>(SRV_AUTH:
|
|
|
13
13
|
hasFeature: (featureName: FeatureEnums) => boolean;
|
|
14
14
|
getFeatures: () => Set<FeatureEnums> | undefined;
|
|
15
15
|
isJwtValid: () => boolean;
|
|
16
|
-
signin: (url: string, headers?: Record<string, string>) => Promise<{
|
|
16
|
+
signin: (url: string, headers?: Record<string, string>) => Promise<AxiosResponse<{
|
|
17
17
|
token: string;
|
|
18
18
|
features: FeatureEnums[];
|
|
19
|
-
}>;
|
|
20
|
-
srvAuthGet: <R>(url: string, headers?: Record<string, string>) => Promise<AxiosResponse<R, any
|
|
19
|
+
}, any> | undefined>;
|
|
20
|
+
srvAuthGet: <R>(url: string, headers?: Record<string, string>) => Promise<AxiosResponse<R, any> | undefined>;
|
|
21
21
|
signoutAuth: () => Promise<void>;
|
|
22
22
|
setReqConfig: <T = unknown>(data?: T | undefined, responseType?: ResponseType) => Promise<{
|
|
23
23
|
data: T | undefined;
|
|
@@ -26,6 +26,15 @@ export declare function generateSrvAuthBindings<FeatureEnums = never>(SRV_AUTH:
|
|
|
26
26
|
}>;
|
|
27
27
|
getJwtTokenAsync: () => Promise<string | undefined>;
|
|
28
28
|
getNewJwtToken: () => Promise<string | undefined>;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated use registerCallbackOnSrvAuthEvents directly
|
|
31
|
+
*/
|
|
32
|
+
registerOnJwtChanges: <Key_1 extends "logout_event" | "jwt_changed">(event: Key_1, callback: (val: {
|
|
33
|
+
jwt_changed: {};
|
|
34
|
+
logout_event: {};
|
|
35
|
+
}[Key_1]) => void) => {
|
|
36
|
+
unregister: () => void;
|
|
37
|
+
};
|
|
29
38
|
getUserId: () => string;
|
|
30
39
|
getParsedJwt: <R_1 = {
|
|
31
40
|
user_id: string;
|
|
@@ -36,11 +45,7 @@ export declare function generateSrvAuthBindings<FeatureEnums = never>(SRV_AUTH:
|
|
|
36
45
|
};
|
|
37
46
|
/**
|
|
38
47
|
* @deprecated use generateSrvAuthBindings
|
|
39
|
-
*
|
|
40
|
-
* @param DEVELOPMENT
|
|
41
|
-
* @param ENVIRONMENT_TO_OPERATE
|
|
42
|
-
* @param logout
|
|
43
|
-
* @returns
|
|
48
|
+
*
|
|
44
49
|
*/
|
|
45
50
|
export declare function generateSrvAuthBindingsMicroApp(SRV_AUTH: () => string, DEVELOPMENT: () => boolean, ENVIRONMENT_TO_OPERATE: () => EnvironmentEnums, logout?: () => void): {};
|
|
46
51
|
//# sourceMappingURL=generateSrvAuthBindings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSrvAuthBindings.d.ts","sourceRoot":"","sources":["../../src/helpers/generateSrvAuthBindings.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpE,OAAO,EAAE,gBAAgB,EAAY,MAAM,IAAI,CAAA;AAI/C,eAAO,
|
|
1
|
+
{"version":3,"file":"generateSrvAuthBindings.d.ts","sourceRoot":"","sources":["../../src/helpers/generateSrvAuthBindings.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpE,OAAO,EAAE,gBAAgB,EAAY,MAAM,IAAI,CAAA;AAI/C,eAAO,MAAkB,qBAAqB;iBAC7B,EAAE;kBACD,EAAE;sDAFsC,+BAA+B;iBACxE,EAAE;kBACD,EAAE;;;CACD,CAAA;AAEnB,wBAAgB,uBAAuB,CAAC,YAAY,GAAG,KAAK,EACxD,QAAQ,EAAE,MAAM,MAAM,EACtB,WAAW,EAAE,MAAM,OAAO,EAC1B,sBAAsB,EAAE,MAAM,MAAM,EACpC,MAAM,CAAC,EAAE,MAAM,IAAI;8BAkMc,YAAY;;;kBA9GlB,MAAM,YAAY,OAAO,MAAM,EAAE,MAAM,CAAC;eACxB,MAAM;kBAAY,YAAY,EAAE;;yBAvDzC,MAAM,YAAY,OAAO,MAAM,EAAE,MAAM,CAAC;;qEA4GR,YAAY;;;;;;;IAsE1E;;OAEG;;;;;;;qBAtGe,MAAM;;iBAwES,MAAM;aAAO,MAAM;;;iCA3GtB,OAAO;EAsJ5C;AACD;;;GAGG;AACH,wBAAgB,+BAA+B,CAC3C,QAAQ,EAAE,MAAM,MAAM,EACtB,WAAW,EAAE,MAAM,OAAO,EAC1B,sBAAsB,EAAE,MAAM,gBAAgB,EAC9C,MAAM,CAAC,EAAE,MAAM,IAAI,MAMtB"}
|
|
@@ -1,41 +1,61 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import { EventBus } from 'asma-event-bus/lib/event-buss';
|
|
3
3
|
import { EnvironmentEnums, parseJwt } from '..';
|
|
4
|
-
let logoutsuccesfull = false
|
|
5
|
-
export const { dispatch, register: registerCallbackOnSrvAuthEvents } = EventBus('auth-bindings');
|
|
4
|
+
//let logoutsuccesfull = false
|
|
5
|
+
export const { dispatch: dispatchSrvAuthEvents, register: registerCallbackOnSrvAuthEvents } = EventBus('auth-bindings');
|
|
6
6
|
export function generateSrvAuthBindings(SRV_AUTH, DEVELOPMENT, EnvironmentToOperateFn, logout) {
|
|
7
|
-
// let logoutMfes: (() => void)[] = []
|
|
8
7
|
var _a;
|
|
9
8
|
if (logout) {
|
|
10
9
|
registerCallbackOnSrvAuthEvents('logout_event', logout);
|
|
11
10
|
}
|
|
12
11
|
if ((_a = window.__ASMA__SHELL__) === null || _a === void 0 ? void 0 : _a.auth_bindings) {
|
|
13
|
-
//window.__ASMA__SHELL__.logoutMfes = logoutMfes
|
|
14
12
|
return window.__ASMA__SHELL__.auth_bindings;
|
|
15
13
|
}
|
|
16
14
|
let jwtToken = '';
|
|
17
15
|
let features;
|
|
18
16
|
let parsed_jwt;
|
|
19
|
-
let fetchJwtPromise
|
|
17
|
+
/* let fetchJwtPromise: Promise<{
|
|
18
|
+
data: { message: string; token?: string; features?: FeatureEnums[]; errors: { message: string }[] }
|
|
19
|
+
}> | null = null */
|
|
20
20
|
const isJwtInvalid = () => (jwtToken && accessTokenHasExpired()) || !jwtToken;
|
|
21
21
|
const isJwtValid = () => !isJwtInvalid();
|
|
22
|
+
//function cancelRequest() {
|
|
23
|
+
// return logoutsuccesfull
|
|
24
|
+
// }
|
|
25
|
+
const promiseRegistry = {};
|
|
22
26
|
async function srvAuthGet(url, headers) {
|
|
23
27
|
if (DEVELOPMENT() && EnvironmentToOperateFn()) {
|
|
24
28
|
if (EnvironmentToOperateFn() in EnvironmentEnums) {
|
|
25
29
|
url = `${url}&env=${EnvironmentToOperateFn()}`;
|
|
30
|
+
// file deepcode ignore GlobalReplacementRegex: <it is intended to be replaced only first occurence>
|
|
26
31
|
url = url.includes('&') && !url.includes('?') ? url.replace('&', '?') : url;
|
|
27
32
|
}
|
|
28
33
|
else {
|
|
29
34
|
console.warn('EnvironmentToOperateFn() is not a valid EnvironmentEnums', 'shall be one of:', EnvironmentEnums, 'actual value:', EnvironmentToOperateFn());
|
|
30
35
|
}
|
|
31
36
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
const promise = promiseRegistry[url] ||
|
|
38
|
+
axios.get(`${SRV_AUTH()}${url}`, {
|
|
39
|
+
headers: {
|
|
40
|
+
...headers,
|
|
41
|
+
'asma-origin': window.location.origin,
|
|
42
|
+
},
|
|
43
|
+
withCredentials: true,
|
|
44
|
+
});
|
|
45
|
+
if (!promiseRegistry[url]) {
|
|
46
|
+
promiseRegistry[url] = promise;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const res = await promise;
|
|
50
|
+
return res;
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error(e);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
delete promiseRegistry[url];
|
|
58
|
+
}
|
|
39
59
|
}
|
|
40
60
|
function accessTokenHasExpired() {
|
|
41
61
|
const tokenObj = getParsedJwt();
|
|
@@ -45,32 +65,31 @@ export function generateSrvAuthBindings(SRV_AUTH, DEVELOPMENT, EnvironmentToOper
|
|
|
45
65
|
return accessTokenExpDate - 10 <= nowTime;
|
|
46
66
|
}
|
|
47
67
|
async function signin(url, headers) {
|
|
48
|
-
const
|
|
49
|
-
setAuthData(data);
|
|
50
|
-
logoutsuccesfull = false
|
|
68
|
+
const data = await srvAuthGet(url, headers);
|
|
69
|
+
setAuthData(data === null || data === void 0 ? void 0 : data.data);
|
|
70
|
+
// logoutsuccesfull = false
|
|
51
71
|
return data;
|
|
52
72
|
}
|
|
73
|
+
const { unregister } = registerCallbackOnSrvAuthEvents('logout_event', () => {
|
|
74
|
+
setAuthData({ token: '' });
|
|
75
|
+
srvAuthGet('/signout');
|
|
76
|
+
unregister();
|
|
77
|
+
});
|
|
53
78
|
async function signoutAuth() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
await srvAuthGet('/signout');
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
console.error(e);
|
|
60
|
-
}
|
|
61
|
-
finally {
|
|
62
|
-
dispatch('logout_event', {}, false);
|
|
63
|
-
}
|
|
79
|
+
dispatchSrvAuthEvents('logout_event', {}, false);
|
|
80
|
+
// return srvAuthGet('/signout')
|
|
64
81
|
}
|
|
65
82
|
function getUserId() {
|
|
66
83
|
var _a;
|
|
67
84
|
return ((_a = getParsedJwt()) === null || _a === void 0 ? void 0 : _a['user_id']) || '-1';
|
|
68
85
|
}
|
|
69
86
|
function setAuthData(data) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
if (data) {
|
|
88
|
+
jwtToken = data === null || data === void 0 ? void 0 : data.token;
|
|
89
|
+
features = new Set(data.features);
|
|
90
|
+
parsed_jwt = parseJwt(jwtToken);
|
|
91
|
+
}
|
|
92
|
+
dispatchSrvAuthEvents('jwt_changed', {}, false);
|
|
74
93
|
}
|
|
75
94
|
function getJwtToken() {
|
|
76
95
|
return jwtToken;
|
|
@@ -97,29 +116,24 @@ export function generateSrvAuthBindings(SRV_AUTH, DEVELOPMENT, EnvironmentToOper
|
|
|
97
116
|
return res;
|
|
98
117
|
}
|
|
99
118
|
async function getNewJwtToken() {
|
|
100
|
-
|
|
101
|
-
return;
|
|
119
|
+
var _a;
|
|
102
120
|
try {
|
|
103
|
-
if (!fetchJwtPromise) {
|
|
104
|
-
fetchJwtPromise = srvAuthGet('/token')
|
|
105
|
-
}
|
|
106
|
-
const
|
|
107
|
-
if (!data || data.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
//signoutAuth()
|
|
121
|
+
/* if (!fetchJwtPromise) {
|
|
122
|
+
fetchJwtPromise = srvAuthGet('/token')
|
|
123
|
+
} */
|
|
124
|
+
const data = await srvAuthGet('/token');
|
|
125
|
+
if (!data || ((_a = data.data) === null || _a === void 0 ? void 0 : _a.errors) || !data.data.token) {
|
|
126
|
+
dispatchSrvAuthEvents('logout_event', {}, false);
|
|
127
|
+
return;
|
|
111
128
|
}
|
|
112
|
-
setAuthData({ token: data.token || '', features: data.features || [] });
|
|
129
|
+
setAuthData({ token: data.data.token || '', features: data.data.features || [] });
|
|
113
130
|
}
|
|
114
131
|
catch (error) {
|
|
115
|
-
|
|
116
|
-
logoutsuccesfull = true;
|
|
117
|
-
//signoutAuth()
|
|
132
|
+
dispatchSrvAuthEvents('logout_event', {}, false);
|
|
118
133
|
setAuthData({ token: '', features: [] });
|
|
119
134
|
console.error(error);
|
|
120
135
|
}
|
|
121
136
|
finally {
|
|
122
|
-
fetchJwtPromise = null;
|
|
123
137
|
return jwtToken;
|
|
124
138
|
}
|
|
125
139
|
}
|
|
@@ -150,9 +164,14 @@ export function generateSrvAuthBindings(SRV_AUTH, DEVELOPMENT, EnvironmentToOper
|
|
|
150
164
|
setReqConfig,
|
|
151
165
|
getJwtTokenAsync,
|
|
152
166
|
getNewJwtToken,
|
|
167
|
+
/**
|
|
168
|
+
* @deprecated use registerCallbackOnSrvAuthEvents directly
|
|
169
|
+
*/
|
|
170
|
+
registerOnJwtChanges: registerCallbackOnSrvAuthEvents,
|
|
153
171
|
getUserId,
|
|
154
172
|
getParsedJwt,
|
|
155
173
|
getJwtToken,
|
|
174
|
+
// cancelRequest,
|
|
156
175
|
accessTokenHasExpired,
|
|
157
176
|
};
|
|
158
177
|
window.__ASMA__SHELL__ = window.__ASMA__SHELL__ || {};
|
|
@@ -161,11 +180,7 @@ export function generateSrvAuthBindings(SRV_AUTH, DEVELOPMENT, EnvironmentToOper
|
|
|
161
180
|
}
|
|
162
181
|
/**
|
|
163
182
|
* @deprecated use generateSrvAuthBindings
|
|
164
|
-
*
|
|
165
|
-
* @param DEVELOPMENT
|
|
166
|
-
* @param ENVIRONMENT_TO_OPERATE
|
|
167
|
-
* @param logout
|
|
168
|
-
* @returns
|
|
183
|
+
*
|
|
169
184
|
*/
|
|
170
185
|
export function generateSrvAuthBindingsMicroApp(SRV_AUTH, DEVELOPMENT, ENVIRONMENT_TO_OPERATE, logout) {
|
|
171
186
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateSrvAuthBindings.js","sourceRoot":"","sources":["../../src/helpers/generateSrvAuthBindings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAE/C,
|
|
1
|
+
{"version":3,"file":"generateSrvAuthBindings.js","sourceRoot":"","sources":["../../src/helpers/generateSrvAuthBindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJwt.d.ts","sourceRoot":"","sources":["../../src/helpers/parseJwt.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"parseJwt.d.ts","sourceRoot":"","sources":["../../src/helpers/parseJwt.ts"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,iBAQ3C"}
|
package/lib/helpers/parseJwt.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function parseJwt(jwtToken) {
|
|
2
2
|
const base64Url = jwtToken === null || jwtToken === void 0 ? void 0 : jwtToken.split('.')[1];
|
|
3
|
-
if (base64Url
|
|
4
|
-
return
|
|
3
|
+
if (!base64Url) {
|
|
4
|
+
return;
|
|
5
5
|
}
|
|
6
6
|
return JSON.parse(decodeURIComponent(escape(window.atob(base64Url))));
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJwt.js","sourceRoot":"","sources":["../../src/helpers/parseJwt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAI,QAAgB;IACxC,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEzC,IAAI,
|
|
1
|
+
{"version":3,"file":"parseJwt.js","sourceRoot":"","sources":["../../src/helpers/parseJwt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAI,QAAgB;IACxC,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEzC,IAAI,CAAC,SAAS,EAAE;QACZ,OAAM;KACT;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAM,CAAA;AAC9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -18,28 +18,25 @@ export function generateGenqlClient<T extends ReturnType<typeof createClient>>({
|
|
|
18
18
|
setReqConfig: () => Promise<AxiosRequestConfig<any>>
|
|
19
19
|
createClient: (options?: ClientOptions | undefined) => T
|
|
20
20
|
serviceUrl: () => string
|
|
21
|
+
/**
|
|
22
|
+
* Returns true whenether token and refresh token is epired! this helps to cancel all concurent requests after first request is invalidated.
|
|
23
|
+
* @returns true if request should be cancelled
|
|
24
|
+
*/
|
|
21
25
|
path?: string
|
|
22
26
|
}) {
|
|
23
|
-
// let jwt_exp = 0
|
|
24
|
-
|
|
25
27
|
let client: T | null = null
|
|
26
28
|
|
|
27
29
|
let wsClient: T | null = null
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
function resetClients() {
|
|
30
32
|
client = null
|
|
31
33
|
wsClient = null
|
|
32
|
-
}
|
|
34
|
+
}
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
// const nowTime = Math.floor(new Date().getTime() / 1000)
|
|
36
|
-
//
|
|
37
|
-
// //set exp time -20sec for token to be refreshed early
|
|
38
|
-
// return jwt_exp - 10 <= nowTime
|
|
39
|
-
//}
|
|
36
|
+
registerCallbackOnSrvAuthEvents('jwt_changed', resetClients)
|
|
40
37
|
|
|
41
38
|
async function getGenqlClient() {
|
|
42
|
-
if (
|
|
39
|
+
if (client === null) {
|
|
43
40
|
client = await genqlClient()
|
|
44
41
|
|
|
45
42
|
return client
|
|
@@ -48,35 +45,19 @@ export function generateGenqlClient<T extends ReturnType<typeof createClient>>({
|
|
|
48
45
|
return client
|
|
49
46
|
}
|
|
50
47
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// function setJwtExp(token?: string) {
|
|
56
|
-
// if (!token) return
|
|
57
|
-
//
|
|
58
|
-
// const parsed_jwt = parseJwt<{ exp: number }>(token)?.exp
|
|
59
|
-
//
|
|
60
|
-
// jwt_exp = parsed_jwt || 0
|
|
61
|
-
// }
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
*
|
|
65
|
-
* This is used for anonymous requests as well as authenticated requests
|
|
66
|
-
*
|
|
67
|
-
*/
|
|
68
|
-
async function genqlClient(options: CliOptions = {}): Promise<T> {
|
|
69
|
-
//let req_headers: Record<string, string> = {}
|
|
48
|
+
function resetGenqlClient() {
|
|
49
|
+
client = null
|
|
50
|
+
wsClient = null
|
|
51
|
+
}
|
|
70
52
|
|
|
71
|
-
|
|
53
|
+
async function genqlClient(options: CliOptions & { abortController?: AbortController } = {}): Promise<T> {
|
|
54
|
+
const { anonymous, headers, abortController, ...rest } = options
|
|
72
55
|
|
|
73
56
|
if (!serviceUrl()) {
|
|
74
57
|
console.warn('requred param srv_url is undefined, please check EnvConfig object!')
|
|
75
58
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
// setJwtExp(req_headers['Authorization'])
|
|
79
|
-
// }
|
|
59
|
+
|
|
60
|
+
const localAbrotController = createabortControllerAndAbortOnLogoutEvent(abortController)
|
|
80
61
|
|
|
81
62
|
return createClient({
|
|
82
63
|
url: `${serviceUrl()}${path}`,
|
|
@@ -84,21 +65,21 @@ export function generateGenqlClient<T extends ReturnType<typeof createClient>>({
|
|
|
84
65
|
...(options.anonymous ? {} : (((await setReqConfig()).headers ?? {}) as Record<string, string>)),
|
|
85
66
|
...headers,
|
|
86
67
|
}),
|
|
68
|
+
signal: localAbrotController.signal,
|
|
87
69
|
batch: { batchInterval: 50, maxBatchSize: 100 },
|
|
88
70
|
...rest,
|
|
89
71
|
})
|
|
90
72
|
}
|
|
91
73
|
|
|
92
74
|
async function genqlClientWs() {
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//setJwtExp(req_headers['Authorization'])
|
|
75
|
+
if (!wsClient) {
|
|
76
|
+
const localAbrotController = createabortControllerAndAbortOnLogoutEvent()
|
|
97
77
|
|
|
98
78
|
wsClient = createClient({
|
|
99
79
|
url: `${httpToWs(serviceUrl())}${path}`,
|
|
100
80
|
cache: 'reload',
|
|
101
81
|
batch: { batchInterval: 50, maxBatchSize: 100 },
|
|
82
|
+
signal: localAbrotController.signal,
|
|
102
83
|
subscription: {
|
|
103
84
|
reconnect: true,
|
|
104
85
|
reconnectionAttempts: 5,
|
|
@@ -110,5 +91,19 @@ export function generateGenqlClient<T extends ReturnType<typeof createClient>>({
|
|
|
110
91
|
return wsClient
|
|
111
92
|
}
|
|
112
93
|
|
|
113
|
-
|
|
94
|
+
function createabortControllerAndAbortOnLogoutEvent(abortController?: AbortController) {
|
|
95
|
+
let localAbrotController = abortController || new AbortController()
|
|
96
|
+
|
|
97
|
+
const { unregister } = registerCallbackOnSrvAuthEvents('logout_event', () => {
|
|
98
|
+
localAbrotController?.abort()
|
|
99
|
+
|
|
100
|
+
resetClients()
|
|
101
|
+
|
|
102
|
+
unregister()
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
return localAbrotController
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return { getGenqlClient, resetGenqlClient, genqlClient, genqlClientWs }
|
|
114
109
|
}
|
|
@@ -2,11 +2,12 @@ import axios, { type AxiosResponse, type ResponseType } from 'axios'
|
|
|
2
2
|
import { EventBus } from 'asma-event-bus/lib/event-buss'
|
|
3
3
|
import { EnvironmentEnums, parseJwt } from '..'
|
|
4
4
|
|
|
5
|
-
let logoutsuccesfull = false
|
|
5
|
+
//let logoutsuccesfull = false
|
|
6
6
|
|
|
7
|
-
export const { dispatch, register: registerCallbackOnSrvAuthEvents } = EventBus<{
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export const { dispatch: dispatchSrvAuthEvents, register: registerCallbackOnSrvAuthEvents } = EventBus<{
|
|
8
|
+
jwt_changed: {}
|
|
9
|
+
logout_event: {}
|
|
10
|
+
}>('auth-bindings')
|
|
10
11
|
|
|
11
12
|
export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
12
13
|
SRV_AUTH: () => string,
|
|
@@ -14,15 +15,11 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
14
15
|
EnvironmentToOperateFn: () => string,
|
|
15
16
|
logout?: () => void,
|
|
16
17
|
) {
|
|
17
|
-
// let logoutMfes: (() => void)[] = []
|
|
18
|
-
|
|
19
18
|
if (logout) {
|
|
20
19
|
registerCallbackOnSrvAuthEvents('logout_event', logout)
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
if (window.__ASMA__SHELL__?.auth_bindings) {
|
|
24
|
-
//window.__ASMA__SHELL__.logoutMfes = logoutMfes
|
|
25
|
-
|
|
26
23
|
return window.__ASMA__SHELL__.auth_bindings as typeof auth_bindings
|
|
27
24
|
}
|
|
28
25
|
|
|
@@ -30,21 +27,28 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
30
27
|
|
|
31
28
|
let features: Set<FeatureEnums> | undefined
|
|
32
29
|
|
|
33
|
-
let parsed_jwt:
|
|
30
|
+
let parsed_jwt: unknown | undefined
|
|
34
31
|
|
|
35
|
-
let fetchJwtPromise: Promise<{
|
|
32
|
+
/* let fetchJwtPromise: Promise<{
|
|
36
33
|
data: { message: string; token?: string; features?: FeatureEnums[]; errors: { message: string }[] }
|
|
37
|
-
}> | null = null
|
|
34
|
+
}> | null = null */
|
|
38
35
|
|
|
39
36
|
const isJwtInvalid = () => (jwtToken && accessTokenHasExpired()) || !jwtToken
|
|
40
37
|
|
|
41
38
|
const isJwtValid = () => !isJwtInvalid()
|
|
42
39
|
|
|
40
|
+
//function cancelRequest() {
|
|
41
|
+
// return logoutsuccesfull
|
|
42
|
+
// }
|
|
43
|
+
|
|
44
|
+
const promiseRegistry: Record<string, Promise<unknown>> = <{}>{}
|
|
45
|
+
|
|
43
46
|
async function srvAuthGet<R>(url: string, headers?: Record<string, string>) {
|
|
44
47
|
if (DEVELOPMENT() && EnvironmentToOperateFn()) {
|
|
45
48
|
if (EnvironmentToOperateFn() in EnvironmentEnums) {
|
|
46
49
|
url = `${url}&env=${EnvironmentToOperateFn()}`
|
|
47
50
|
|
|
51
|
+
// file deepcode ignore GlobalReplacementRegex: <it is intended to be replaced only first occurence>
|
|
48
52
|
url = url.includes('&') && !url.includes('?') ? url.replace('&', '?') : url
|
|
49
53
|
} else {
|
|
50
54
|
console.warn(
|
|
@@ -57,13 +61,29 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
const promise =
|
|
65
|
+
promiseRegistry[url] ||
|
|
66
|
+
axios.get<unknown, AxiosResponse<R>>(`${SRV_AUTH()}${url}`, {
|
|
67
|
+
headers: {
|
|
68
|
+
...headers,
|
|
69
|
+
'asma-origin': window.location.origin,
|
|
70
|
+
},
|
|
71
|
+
withCredentials: true,
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
if (!promiseRegistry[url]) {
|
|
75
|
+
promiseRegistry[url] = promise
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const res = await promise
|
|
79
|
+
|
|
80
|
+
return res as AxiosResponse<R, any>
|
|
81
|
+
} catch (e) {
|
|
82
|
+
console.error(e)
|
|
83
|
+
return
|
|
84
|
+
} finally {
|
|
85
|
+
delete promiseRegistry[url]
|
|
86
|
+
}
|
|
67
87
|
}
|
|
68
88
|
|
|
69
89
|
function accessTokenHasExpired(): boolean {
|
|
@@ -78,35 +98,43 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
78
98
|
}
|
|
79
99
|
|
|
80
100
|
async function signin(url: string, headers?: Record<string, string>) {
|
|
81
|
-
const
|
|
101
|
+
const data = await srvAuthGet<{ token: string; features: FeatureEnums[] }>(url, headers)
|
|
82
102
|
|
|
83
|
-
setAuthData(data)
|
|
103
|
+
setAuthData(data?.data)
|
|
84
104
|
|
|
85
|
-
logoutsuccesfull = false
|
|
105
|
+
// logoutsuccesfull = false
|
|
86
106
|
|
|
87
107
|
return data
|
|
88
108
|
}
|
|
89
109
|
|
|
110
|
+
const { unregister } = registerCallbackOnSrvAuthEvents('logout_event', () => {
|
|
111
|
+
setAuthData({ token: '' })
|
|
112
|
+
|
|
113
|
+
srvAuthGet('/signout')
|
|
114
|
+
|
|
115
|
+
unregister()
|
|
116
|
+
})
|
|
117
|
+
|
|
90
118
|
async function signoutAuth() {
|
|
91
|
-
|
|
92
|
-
setAuthData({ token: '' })
|
|
119
|
+
dispatchSrvAuthEvents('logout_event', {}, false)
|
|
93
120
|
|
|
94
|
-
|
|
95
|
-
} catch (e) {
|
|
96
|
-
console.error(e)
|
|
97
|
-
} finally {
|
|
98
|
-
dispatch('logout_event', {}, false)
|
|
99
|
-
}
|
|
121
|
+
// return srvAuthGet('/signout')
|
|
100
122
|
}
|
|
123
|
+
|
|
101
124
|
function getUserId(): string {
|
|
102
125
|
return getParsedJwt()?.['user_id'] || '-1'
|
|
103
126
|
}
|
|
104
127
|
|
|
105
|
-
function setAuthData(data
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
128
|
+
function setAuthData(data?: { token: string; features?: FeatureEnums[] }) {
|
|
129
|
+
if (data) {
|
|
130
|
+
jwtToken = data?.token
|
|
131
|
+
|
|
132
|
+
features = new Set(data.features)
|
|
133
|
+
|
|
134
|
+
parsed_jwt = parseJwt(jwtToken)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
dispatchSrvAuthEvents('jwt_changed', {}, false)
|
|
110
138
|
}
|
|
111
139
|
|
|
112
140
|
function getJwtToken() {
|
|
@@ -140,33 +168,27 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
140
168
|
}
|
|
141
169
|
|
|
142
170
|
async function getNewJwtToken() {
|
|
143
|
-
if (logoutsuccesfull) return
|
|
144
171
|
try {
|
|
145
|
-
if (!fetchJwtPromise) {
|
|
172
|
+
/* if (!fetchJwtPromise) {
|
|
146
173
|
fetchJwtPromise = srvAuthGet('/token')
|
|
147
|
-
}
|
|
174
|
+
} */
|
|
148
175
|
|
|
149
|
-
const
|
|
176
|
+
const data = await srvAuthGet<{ errors?: string; token: string; features: FeatureEnums[] }>('/token')
|
|
150
177
|
|
|
151
|
-
if (!data || data.errors || data.
|
|
152
|
-
|
|
153
|
-
logoutsuccesfull = true
|
|
178
|
+
if (!data || data.data?.errors || !data.data.token) {
|
|
179
|
+
dispatchSrvAuthEvents('logout_event', {}, false)
|
|
154
180
|
|
|
155
|
-
|
|
181
|
+
return
|
|
156
182
|
}
|
|
157
183
|
|
|
158
|
-
setAuthData({ token: data.token || '', features: data.features || [] })
|
|
184
|
+
setAuthData({ token: data.data.token || '', features: data.data.features || [] })
|
|
159
185
|
} catch (error) {
|
|
160
|
-
|
|
161
|
-
logoutsuccesfull = true
|
|
162
|
-
//signoutAuth()
|
|
186
|
+
dispatchSrvAuthEvents('logout_event', {}, false)
|
|
163
187
|
|
|
164
188
|
setAuthData({ token: '', features: [] })
|
|
165
189
|
|
|
166
190
|
console.error(error)
|
|
167
191
|
} finally {
|
|
168
|
-
fetchJwtPromise = null
|
|
169
|
-
|
|
170
192
|
return jwtToken
|
|
171
193
|
}
|
|
172
194
|
}
|
|
@@ -175,7 +197,7 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
175
197
|
if (!parsed_jwt) {
|
|
176
198
|
parsed_jwt = parseJwt<R>(jwtToken)
|
|
177
199
|
}
|
|
178
|
-
return parsed_jwt
|
|
200
|
+
return parsed_jwt as R
|
|
179
201
|
}
|
|
180
202
|
function getFeatures() {
|
|
181
203
|
return features
|
|
@@ -199,9 +221,14 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
199
221
|
setReqConfig,
|
|
200
222
|
getJwtTokenAsync,
|
|
201
223
|
getNewJwtToken,
|
|
224
|
+
/**
|
|
225
|
+
* @deprecated use registerCallbackOnSrvAuthEvents directly
|
|
226
|
+
*/
|
|
227
|
+
registerOnJwtChanges: registerCallbackOnSrvAuthEvents,
|
|
202
228
|
getUserId,
|
|
203
229
|
getParsedJwt,
|
|
204
230
|
getJwtToken,
|
|
231
|
+
// cancelRequest,
|
|
205
232
|
accessTokenHasExpired,
|
|
206
233
|
}
|
|
207
234
|
window.__ASMA__SHELL__ = window.__ASMA__SHELL__ || {}
|
|
@@ -212,11 +239,7 @@ export function generateSrvAuthBindings<FeatureEnums = never>(
|
|
|
212
239
|
}
|
|
213
240
|
/**
|
|
214
241
|
* @deprecated use generateSrvAuthBindings
|
|
215
|
-
*
|
|
216
|
-
* @param DEVELOPMENT
|
|
217
|
-
* @param ENVIRONMENT_TO_OPERATE
|
|
218
|
-
* @param logout
|
|
219
|
-
* @returns
|
|
242
|
+
*
|
|
220
243
|
*/
|
|
221
244
|
export function generateSrvAuthBindingsMicroApp(
|
|
222
245
|
SRV_AUTH: () => string,
|
package/src/helpers/parseJwt.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
export function parseJwt<R>(jwtToken: string)
|
|
3
|
+
export function parseJwt<R>(jwtToken: string){
|
|
4
4
|
const base64Url = jwtToken?.split('.')[1]
|
|
5
5
|
|
|
6
|
-
if (base64Url
|
|
7
|
-
return
|
|
6
|
+
if (!base64Url) {
|
|
7
|
+
return
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
return JSON.parse(decodeURIComponent(escape(window.atob(base64Url))))
|
|
10
|
+
return JSON.parse(decodeURIComponent(escape(window.atob(base64Url)))) as R
|
|
11
11
|
}
|