@ethlete/query 0.1.0-next.17 → 0.1.0-next.18
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/esm2020/lib/auth/auth-provider.types.mjs +1 -1
- package/esm2020/lib/auth/bearer-auth-provider.mjs +39 -21
- package/fesm2015/ethlete-query.mjs +41 -23
- package/fesm2015/ethlete-query.mjs.map +1 -1
- package/fesm2020/ethlete-query.mjs +39 -21
- package/fesm2020/ethlete-query.mjs.map +1 -1
- package/lib/auth/auth-provider.types.d.ts +4 -4
- package/lib/auth/bearer-auth-provider.d.ts +4 -3
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm92aWRlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9hdXRoL2F1dGgtcHJvdmlkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5UmVzcG9uc2VUeXBlIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBRdWVyeUNyZWF0b3JBcmdzLCBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlIH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRoUHJvdmlkZXIge1xuICAvKipcbiAgICogVGhlIHVwIHRvIGRhdGUgYXV0aCBoZWFkZXIuXG4gICAqIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCBpbmplY3RlZCBpbnRvIGV2ZXJ5IHF1ZXJ5IHRoYXQgaGFzIHRoZSBgc2VjdXJlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgaGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgb25jZSB0aGUgYXV0aCBwcm92aWRlciBnZXRzIGRlc3Ryb3llZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjbGVhblVwKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFByb3ZpZGVyQmFzaWNDb25maWcge1xuICAvKipcbiAgICogQmFzaWMgYXV0aCB1c2VybmFtZVxuICAgKi9cbiAgdXNlcm5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQmFzaWMgYXV0aCBwYXNzd29yZFxuICAgKi9cbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoUHJvdmlkZXJDdXN0b21IZWFkZXJDb25maWcge1xuICAvKipcbiAgICogVGhlIGN1c3RvbSBoZWFkZXIgbmFtZVxuICAgKiBAZXhhbXBsZSBgWC1BcGktS2V5YFxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIGhlYWRlciB2YWx1ZVxuICAgKiBAZXhhbXBsZSBgbXlBcGlLZXlgXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhQcm92aWRlckJlYXJlckNvbmZpZzxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yPiB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBqd3RcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRva2VuIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlZnJlc2hDb25maWc/OiBCZWFyZXJSZWZyZXNoQ29uZmlnPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJlYXJlclJlZnJlc2hDb25maWc8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHVzZWQgdG8gdHJhZGUgdGhlIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IHRva2VuIHJlc3BvbnNlLlxuICAgKi9cbiAgcXVlcnlDcmVhdG9yOiBUO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCByZWZyZXNoIHRva2VuXG4gICAqL1xuICB0b2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvb2tpZSBuYW1lIHdoZXJlIHRoZSByZWZyZXNoIHRva2VuIGlzIHN0b3JlZFxuICAgKi9cbiAgY29va2llTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdG9rZW4gZXhwaXJlcyB3aGVuIHRoZSByZWZyZXNoIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBkZWZhdWx0IDMwMDAwMCAoNSBtaW51dGVzKVxuICAgKi9cbiAgcmVmcmVzaEJ1ZmZlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgbmFtZSBpbnNpZGUgdGhlIGp3dCBib2R5XG4gICAqIEBkZWZhdWx0ICdleHAnXG4gICAqL1xuICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm92aWRlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9hdXRoL2F1dGgtcHJvdmlkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5UmVzcG9uc2VUeXBlIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBRdWVyeUNyZWF0b3JBcmdzLCBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlIH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRoUHJvdmlkZXIge1xuICAvKipcbiAgICogVGhlIHVwIHRvIGRhdGUgYXV0aCBoZWFkZXIuXG4gICAqIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCBpbmplY3RlZCBpbnRvIGV2ZXJ5IHF1ZXJ5IHRoYXQgaGFzIHRoZSBgc2VjdXJlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgLlxuICAgKi9cbiAgaGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgb25jZSB0aGUgYXV0aCBwcm92aWRlciBnZXRzIGRlc3Ryb3llZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjbGVhblVwKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFByb3ZpZGVyQmFzaWNDb25maWcge1xuICAvKipcbiAgICogQmFzaWMgYXV0aCB1c2VybmFtZVxuICAgKi9cbiAgdXNlcm5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQmFzaWMgYXV0aCBwYXNzd29yZFxuICAgKi9cbiAgcGFzc3dvcmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoUHJvdmlkZXJDdXN0b21IZWFkZXJDb25maWcge1xuICAvKipcbiAgICogVGhlIGN1c3RvbSBoZWFkZXIgbmFtZVxuICAgKiBAZXhhbXBsZSBgWC1BcGktS2V5YFxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIGhlYWRlciB2YWx1ZVxuICAgKiBAZXhhbXBsZSBgbXlBcGlLZXlgXG4gICAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhQcm92aWRlckJlYXJlckNvbmZpZzxUIGV4dGVuZHMgQW55UXVlcnlDcmVhdG9yPiB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBqd3RcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRva2VuIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlZnJlc2hDb25maWc/OiBCZWFyZXJSZWZyZXNoQ29uZmlnPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJlYXJlclJlZnJlc2hDb25maWc8VCBleHRlbmRzIEFueVF1ZXJ5Q3JlYXRvcj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHVzZWQgdG8gdHJhZGUgdGhlIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IHRva2VuIHJlc3BvbnNlLlxuICAgKi9cbiAgcXVlcnlDcmVhdG9yOiBUO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCByZWZyZXNoIHRva2VuXG4gICAqL1xuICB0b2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvb2tpZSBuYW1lIHdoZXJlIHRoZSByZWZyZXNoIHRva2VuIGlzIHN0b3JlZFxuICAgKi9cbiAgY29va2llTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgdG9rZW4gZXhwaXJlcyB3aGVuIHRoZSByZWZyZXNoIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBkZWZhdWx0IDMwMDAwMCAoNSBtaW51dGVzKVxuICAgKi9cbiAgcmVmcmVzaEJ1ZmZlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgbmFtZSBpbnNpZGUgdGhlIGp3dCBib2R5XG4gICAqIEBkZWZhdWx0ICdleHAnXG4gICAqL1xuICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hlbiB0aGUgdG9rZW4gc2hvdWxkIGJlIHJlZnJlc2hlZC5cbiAgICogQGRlZmF1bHQgQXV0aEJlYXJlclJlZnJlc2hTdHJhdGVneS5CZWZvcmVFeHBpcmF0aW9uXG4gICAqL1xuICBzdHJhdGVneT86IEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIgZnVuY3Rpb24gdXNlZCB0byBidWlsZCB0aGUgcmVxdWVzdCBib2R5IGZvciB0aGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgKiBAZGVmYXVsdCB7IGJvZHk6IHsgcmVmcmVzaFRva2VuOiBcInJlZnJlc2hUb2tlblwiIH0gfVxuICAgKi9cbiAgcmVxdWVzdEFyZ3NBZGFwdGVyPzogKHRva2VuczogVG9rZW5SZXNwb25zZSkgPT4gUXVlcnlDcmVhdG9yQXJnczxUPjtcblxuICAvKipcbiAgICogQWRhcHRlciBmdW5jdGlvbiB1c2VkIHRvIGV4dHJhY3QgdGhlIHRva2VuIGFuZCByZWZyZXNoVG9rZW4gZnJvbSB0aGUgcmVzcG9uc2UuXG4gICAqIEBkZWZhdWx0IHsgdG9rZW46IFwidG9rZW5cIiwgcmVmcmVzaFRva2VuOiBcInJlZnJlc2hUb2tlblwiIH1cbiAgICovXG4gIHJlc3BvbnNlQWRhcHRlcj86IChyZXNwb25zZTogTm9uTnVsbGFibGU8UXVlcnlSZXNwb25zZVR5cGU8UXVlcnlDcmVhdG9yUmV0dXJuVHlwZTxUPj4+KSA9PiBUb2tlblJlc3BvbnNlO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBBdXRoQmVhcmVyUmVmcmVzaFN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgcmVmcmVzaCB0aGUgdG9rZW4gNSBtaW51dGVzIGJlZm9yZSBleHBpcmF0aW9uLlxuICAgKi9cbiAgQmVmb3JlRXhwaXJhdGlvbiA9ICdiZWZvcmVFeHBpcmF0aW9uJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW4gdXNlZCBpbnNpZGUgdGhlIGF1dGhvcml6YXRpb24gaHR0cCBoZWFkZXIuXG4gICAqL1xuICB0b2tlbjogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHJlZnJlc2ggdG9rZW4gdXNlZCBmb3IgcmVxdWVzdGluZyBhIG5ldyB0b2tlbiByZXNwb25zZSBvbmNlIHRoZSBjdXJyZW50IHRva2VzIGlzIGV4cGlyZWQuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgaWYgdGhlIGJlYXJlciByZWZyZXNoIGNvbmZpZyBpcyBzZXQuXG4gICAqL1xuICByZWZyZXNoVG9rZW46IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
|
|
@@ -4,7 +4,13 @@ import { isQueryStateFailure, isQueryStateSuccess, switchQueryState, takeUntilRe
|
|
|
4
4
|
import { decryptBearer } from './auth-provider.utils';
|
|
5
5
|
export class BearerAuthProvider {
|
|
6
6
|
get header() {
|
|
7
|
-
return { Authorization: `Bearer ${this.
|
|
7
|
+
return { Authorization: `Bearer ${this._tokens$.getValue().token}` };
|
|
8
|
+
}
|
|
9
|
+
get tokens$() {
|
|
10
|
+
return this._tokens$.asObservable();
|
|
11
|
+
}
|
|
12
|
+
get tokens() {
|
|
13
|
+
return this._tokens$.getValue();
|
|
8
14
|
}
|
|
9
15
|
get currentRefreshQuery$() {
|
|
10
16
|
return this._currentRefreshQuery$.asObservable();
|
|
@@ -16,18 +22,30 @@ export class BearerAuthProvider {
|
|
|
16
22
|
this._config = _config;
|
|
17
23
|
this._destroy$ = new Subject();
|
|
18
24
|
this._currentRefreshQuery$ = new BehaviorSubject(null);
|
|
19
|
-
this.
|
|
20
|
-
|
|
25
|
+
this._tokens$ = new BehaviorSubject({
|
|
26
|
+
token: null,
|
|
27
|
+
refreshToken: null,
|
|
28
|
+
});
|
|
21
29
|
const cookieToken = _config.refreshConfig?.cookieName ? getCookie(_config.refreshConfig.cookieName) ?? null : null;
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
this._tokens$.next({
|
|
31
|
+
token: _config.token || null,
|
|
32
|
+
refreshToken: _config.refreshConfig?.token || cookieToken || null,
|
|
33
|
+
});
|
|
34
|
+
if (!this.tokens.token && !this.tokens.refreshToken) {
|
|
25
35
|
if (!_config.refreshConfig?.cookieName) {
|
|
26
36
|
console.error('A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.');
|
|
27
37
|
}
|
|
28
38
|
return;
|
|
29
39
|
}
|
|
30
|
-
this.
|
|
40
|
+
if (this.tokens.token) {
|
|
41
|
+
this._prepareForRefresh();
|
|
42
|
+
if (this.tokens.refreshToken && this._config.refreshConfig?.cookieName) {
|
|
43
|
+
setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (this.tokens.refreshToken) {
|
|
47
|
+
this._refreshQuery();
|
|
48
|
+
}
|
|
31
49
|
}
|
|
32
50
|
cleanUp() {
|
|
33
51
|
this._destroy$.next(true);
|
|
@@ -38,10 +56,10 @@ export class BearerAuthProvider {
|
|
|
38
56
|
}
|
|
39
57
|
}
|
|
40
58
|
_prepareForRefresh() {
|
|
41
|
-
if (!this.
|
|
59
|
+
if (!this.tokens.token || !this._config.refreshConfig) {
|
|
42
60
|
return;
|
|
43
61
|
}
|
|
44
|
-
const bearer = decryptBearer(this.
|
|
62
|
+
const bearer = decryptBearer(this.tokens.token);
|
|
45
63
|
if (!bearer) {
|
|
46
64
|
return;
|
|
47
65
|
}
|
|
@@ -63,11 +81,11 @@ export class BearerAuthProvider {
|
|
|
63
81
|
}
|
|
64
82
|
}
|
|
65
83
|
_refreshQuery() {
|
|
66
|
-
if (!this.
|
|
84
|
+
if (!this.tokens.refreshToken || !this._config.refreshConfig) {
|
|
67
85
|
return;
|
|
68
86
|
}
|
|
69
|
-
const args = this._config.refreshConfig.requestArgsAdapter?.(this.
|
|
70
|
-
body: { refreshToken: this.
|
|
87
|
+
const args = this._config.refreshConfig.requestArgsAdapter?.(this.tokens) ?? {
|
|
88
|
+
body: { refreshToken: this.tokens.refreshToken },
|
|
71
89
|
};
|
|
72
90
|
const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });
|
|
73
91
|
this._currentRefreshQuery$.next(query);
|
|
@@ -76,21 +94,21 @@ export class BearerAuthProvider {
|
|
|
76
94
|
if (isQueryStateSuccess(state)) {
|
|
77
95
|
if (this._config.refreshConfig?.responseAdapter) {
|
|
78
96
|
const tokens = this._config.refreshConfig.responseAdapter(state.response);
|
|
79
|
-
this.
|
|
80
|
-
this._refreshToken = tokens.refreshToken || null;
|
|
97
|
+
this._tokens$.next(tokens);
|
|
81
98
|
}
|
|
82
99
|
else {
|
|
83
|
-
this.
|
|
84
|
-
|
|
100
|
+
this._tokens$.next({
|
|
101
|
+
token: state.response['token'],
|
|
102
|
+
refreshToken: state.response['refreshToken'],
|
|
103
|
+
});
|
|
85
104
|
}
|
|
86
|
-
if (this._config.refreshConfig?.cookieName && this.
|
|
87
|
-
setCookie(this._config.refreshConfig.cookieName, this.
|
|
105
|
+
if (this._config.refreshConfig?.cookieName && this.tokens.refreshToken) {
|
|
106
|
+
setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);
|
|
88
107
|
}
|
|
89
108
|
this._prepareForRefresh();
|
|
90
109
|
}
|
|
91
110
|
else if (isQueryStateFailure(state)) {
|
|
92
|
-
this.
|
|
93
|
-
this._refreshToken = null;
|
|
111
|
+
this._tokens$.next({ token: null, refreshToken: null });
|
|
94
112
|
if (this._config.refreshConfig?.cookieName) {
|
|
95
113
|
deleteCookie(this._config.refreshConfig.cookieName, '/');
|
|
96
114
|
}
|
|
@@ -99,4 +117,4 @@ export class BearerAuthProvider {
|
|
|
99
117
|
.subscribe();
|
|
100
118
|
}
|
|
101
119
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvYXV0aC9iZWFyZXItYXV0aC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3pHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLElBQUksTUFBTTtRQUNSLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxZQUFvQixPQUFvQztRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUE2QjtRQWxCdkMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbkMsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQW1DLElBQUksQ0FBQyxDQUFDO1FBRTdGLFdBQU0sR0FBa0IsSUFBSSxDQUFDO1FBQzdCLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQWUxQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFbkgsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRTtnQkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FDWCxvSkFBb0osQ0FDckosQ0FBQzthQUNIO1lBRUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUU7WUFDMUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMvQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPO1NBQ1I7UUFFRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FBQztRQUN4RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQXVCLENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQztRQUU5RSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMscUJBQXFCLFlBQVksQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWxHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsdUVBQThDLENBQUM7UUFFbkcsUUFBUSxRQUFRLEVBQUU7WUFDaEI7Z0JBQ0UsS0FBSyxDQUFDLGFBQWEsQ0FBQztxQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDekMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUU7WUFDcEUsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUMvRixJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtTQUMzQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQWtDLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMscUJBQXFCO2FBQ3ZCLElBQUksQ0FDSCxnQkFBZ0IsRUFBRSxFQUNsQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFO29CQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUNyRDtnQkFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNoRSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDdEU7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDM0I7aUJBQU0sSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUUxQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRTtvQkFDMUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDMUQ7YUFDRjtRQUNILENBQUMsQ0FBQyxFQUNGLGlCQUFpQixFQUFFLEVBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWUsIHNldENvb2tpZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzUXVlcnlTdGF0ZUZhaWx1cmUsIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsIHN3aXRjaFF1ZXJ5U3RhdGUsIHRha2VVbnRpbFJlc3BvbnNlIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgQW55UXVlcnlDcmVhdG9yLCBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlIH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcbmltcG9ydCB7IEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3ksIEF1dGhQcm92aWRlciwgQXV0aFByb3ZpZGVyQmVhcmVyQ29uZmlnIH0gZnJvbSAnLi9hdXRoLXByb3ZpZGVyLnR5cGVzJztcbmltcG9ydCB7IGRlY3J5cHRCZWFyZXIgfSBmcm9tICcuL2F1dGgtcHJvdmlkZXIudXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQmVhcmVyQXV0aFByb3ZpZGVyPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3I+IGltcGxlbWVudHMgQXV0aFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UmVmcmVzaFF1ZXJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlDcmVhdG9yUmV0dXJuVHlwZTxUPiB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgX3Rva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBnZXQgaGVhZGVyKCkge1xuICAgIHJldHVybiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLl90b2tlbn1gIH07XG4gIH1cblxuICBnZXQgY3VycmVudFJlZnJlc2hRdWVyeSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZWZyZXNoUXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLmdldFZhbHVlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25maWc6IEF1dGhQcm92aWRlckJlYXJlckNvbmZpZzxUPikge1xuICAgIGNvbnN0IGNvb2tpZVRva2VuID0gX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lID8gZ2V0Q29va2llKF9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lKSA/PyBudWxsIDogbnVsbDtcblxuICAgIHRoaXMuX3Rva2VuID0gX2NvbmZpZy50b2tlbiB8fCBudWxsO1xuICAgIHRoaXMuX3JlZnJlc2hUb2tlbiA9IF9jb25maWcucmVmcmVzaENvbmZpZz8udG9rZW4gfHwgY29va2llVG9rZW4gfHwgbnVsbDtcblxuICAgIGlmICghdGhpcy5fdG9rZW4gJiYgIXRoaXMuX3JlZnJlc2hUb2tlbikge1xuICAgICAgaWYgKCFfY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQSBCZWFyZXJBdXRoUHJvdmlkZXIgd2FzIGNyZWF0ZWQgd2l0aG91dCB0b2tlbiBvciByZWZyZXNoIHRva2VuLiBZb3Ugc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgYSBjb29raWVOYW1lIHdoZXJlIHRoZSByZWZyZXNoIHRva2VuIG1pZ2h0IGJlIHN0b3JlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcHJlcGFyZUZvclJlZnJlc2goKTtcbiAgfVxuXG4gIGNsZWFuVXAoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkLm5leHQobnVsbCk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgIGRlbGV0ZUNvb2tpZSh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLCAnLycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByZXBhcmVGb3JSZWZyZXNoKCkge1xuICAgIGlmICghdGhpcy5fdG9rZW4gfHwgIXRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmVhcmVyID0gZGVjcnlwdEJlYXJlcih0aGlzLl90b2tlbik7XG5cbiAgICBpZiAoIWJlYXJlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGlyZXNJblByb3BlcnR5TmFtZSA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmV4cGlyZXNJblByb3BlcnR5TmFtZSB8fCAnZXhwJztcbiAgICBjb25zdCBleHBpcmVzSW4gPSBiZWFyZXJbZXhwaXJlc0luUHJvcGVydHlOYW1lXSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZml2ZU1pbnV0ZXMgPSA1ICogNjAgKiAxMDAwO1xuICAgIGNvbnN0IHJlZnJlc2hCdWZmZXIgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5yZWZyZXNoQnVmZmVyID8/IGZpdmVNaW51dGVzO1xuXG4gICAgaWYgKGV4cGlyZXNJbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJlYXJlciB0b2tlbiBkb2VzIG5vdCBjb250YWluIGFuICcke2V4cGlyZXNJblByb3BlcnR5TmFtZX0nIHByb3BlcnR5YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nVGltZSA9IG5ldyBEYXRlKGV4cGlyZXNJbiAqIDEwMDApLmdldFRpbWUoKSAtIHJlZnJlc2hCdWZmZXIgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuc3RyYXRlZ3kgPz8gQXV0aEJlYXJlclJlZnJlc2hTdHJhdGVneS5CZWZvcmVFeHBpcmF0aW9uO1xuXG4gICAgc3dpdGNoIChzdHJhdGVneSkge1xuICAgICAgY2FzZSBBdXRoQmVhcmVyUmVmcmVzaFN0cmF0ZWd5LkJlZm9yZUV4cGlyYXRpb246XG4gICAgICAgIHRpbWVyKHJlbWFpbmluZ1RpbWUpXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlZnJlc2hRdWVyeSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaFF1ZXJ5KCkge1xuICAgIGlmICghdGhpcy5fcmVmcmVzaFRva2VuIHx8ICF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8ucXVlcnlDcmVhdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnJlcXVlc3RBcmdzQWRhcHRlcj8uKHRoaXMuX3JlZnJlc2hUb2tlbiwgdGhpcy5fdG9rZW4pID8/IHtcbiAgICAgIGJvZHk6IHsgcmVmcmVzaFRva2VuOiB0aGlzLl9yZWZyZXNoVG9rZW4gfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5xdWVyeUNyZWF0b3IucHJlcGFyZShhcmdzKS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQubmV4dChxdWVyeSBhcyBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlPFQ+KTtcblxuICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoUXVlcnlTdGF0ZSgpLFxuICAgICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LnJlc3BvbnNlQWRhcHRlcikge1xuICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5yZXNwb25zZUFkYXB0ZXIoc3RhdGUucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRva2Vucy50b2tlbjtcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRva2VuID0gdG9rZW5zLnJlZnJlc2hUb2tlbiB8fCBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fdG9rZW4gPSBzdGF0ZS5yZXNwb25zZVsndG9rZW4nXTtcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRva2VuID0gc3RhdGUucmVzcG9uc2VbJ3JlZnJlc2hUb2tlbiddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgJiYgdGhpcy5fcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgIHNldENvb2tpZSh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLCB0aGlzLl9yZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlRm9yUmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdWVyeVN0YXRlRmFpbHVyZShzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rva2VuID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSkge1xuICAgICAgICAgICAgICBkZWxldGVDb29raWUodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llTmFtZSwgJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxSZXNwb25zZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvYXV0aC9iZWFyZXItYXV0aC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBUXpHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLElBQUksTUFBTTtRQUNSLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7SUFDdkUsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELFlBQW9CLE9BQW9DO1FBQXBDLFlBQU8sR0FBUCxPQUFPLENBQTZC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LGFBQWEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzFEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsRUFDRixpQkFBaUIsRUFBRSxFQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llLCBzZXRDb29raWUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc1F1ZXJ5U3RhdGVGYWlsdXJlLCBpc1F1ZXJ5U3RhdGVTdWNjZXNzLCBzd2l0Y2hRdWVyeVN0YXRlLCB0YWtlVW50aWxSZXNwb25zZSB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgUXVlcnlDcmVhdG9yUmV0dXJuVHlwZSB9IGZyb20gJy4uL3F1ZXJ5LWNsaWVudCc7XG5pbXBvcnQge1xuICBBdXRoQmVhcmVyUmVmcmVzaFN0cmF0ZWd5LFxuICBBdXRoUHJvdmlkZXIsXG4gIEF1dGhQcm92aWRlckJlYXJlckNvbmZpZyxcbiAgVG9rZW5SZXNwb25zZSxcbn0gZnJvbSAnLi9hdXRoLXByb3ZpZGVyLnR5cGVzJztcbmltcG9ydCB7IGRlY3J5cHRCZWFyZXIgfSBmcm9tICcuL2F1dGgtcHJvdmlkZXIudXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQmVhcmVyQXV0aFByb3ZpZGVyPFQgZXh0ZW5kcyBBbnlRdWVyeUNyZWF0b3I+IGltcGxlbWVudHMgQXV0aFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50UmVmcmVzaFF1ZXJ5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlDcmVhdG9yUmV0dXJuVHlwZTxUPiB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRva2VuUmVzcG9uc2U+KHtcbiAgICB0b2tlbjogbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IG51bGwsXG4gIH0pO1xuXG4gIGdldCBoZWFkZXIoKSB7XG4gICAgcmV0dXJuIHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuX3Rva2VucyQuZ2V0VmFsdWUoKS50b2tlbn1gIH07XG4gIH1cblxuICBnZXQgdG9rZW5zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0b2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VucyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVmcmVzaFF1ZXJ5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFJlZnJlc2hRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbmZpZzogQXV0aFByb3ZpZGVyQmVhcmVyQ29uZmlnPFQ+KSB7XG4gICAgY29uc3QgY29va2llVG9rZW4gPSBfY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgPyBnZXRDb29raWUoX2NvbmZpZy5yZWZyZXNoQ29uZmlnLmNvb2tpZU5hbWUpID8/IG51bGwgOiBudWxsO1xuXG4gICAgdGhpcy5fdG9rZW5zJC5uZXh0KHtcbiAgICAgIHRva2VuOiBfY29uZmlnLnRva2VuIHx8IG51bGwsXG4gICAgICByZWZyZXNoVG9rZW46IF9jb25maWcucmVmcmVzaENvbmZpZz8udG9rZW4gfHwgY29va2llVG9rZW4gfHwgbnVsbCxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy50b2tlbnMudG9rZW4gJiYgIXRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbikge1xuICAgICAgaWYgKCFfY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQSBCZWFyZXJBdXRoUHJvdmlkZXIgd2FzIGNyZWF0ZWQgd2l0aG91dCB0b2tlbiBvciByZWZyZXNoIHRva2VuLiBZb3Ugc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgYSBjb29raWVOYW1lIHdoZXJlIHRoZSByZWZyZXNoIHRva2VuIG1pZ2h0IGJlIHN0b3JlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9rZW5zLnRva2VuKSB7XG4gICAgICB0aGlzLl9wcmVwYXJlRm9yUmVmcmVzaCgpO1xuXG4gICAgICBpZiAodGhpcy50b2tlbnMucmVmcmVzaFRva2VuICYmIHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSB7XG4gICAgICAgIHNldENvb2tpZSh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLCB0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoUXVlcnkoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhblVwKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5fZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9jdXJyZW50UmVmcmVzaFF1ZXJ5JC5uZXh0KG51bGwpO1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnPy5jb29raWVOYW1lKSB7XG4gICAgICBkZWxldGVDb29raWUodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llTmFtZSwgJy8nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wcmVwYXJlRm9yUmVmcmVzaCgpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLnRva2VuIHx8ICF0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJlYXJlciA9IGRlY3J5cHRCZWFyZXIodGhpcy50b2tlbnMudG9rZW4pO1xuXG4gICAgaWYgKCFiZWFyZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmVzSW5Qcm9wZXJ0eU5hbWUgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5leHBpcmVzSW5Qcm9wZXJ0eU5hbWUgfHwgJ2V4cCc7XG4gICAgY29uc3QgZXhwaXJlc0luID0gYmVhcmVyW2V4cGlyZXNJblByb3BlcnR5TmFtZV0gYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZpdmVNaW51dGVzID0gNSAqIDYwICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQnVmZmVyID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcucmVmcmVzaEJ1ZmZlciA/PyBmaXZlTWludXRlcztcblxuICAgIGlmIChleHBpcmVzSW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCZWFyZXIgdG9rZW4gZG9lcyBub3QgY29udGFpbiBhbiAnJHtleHBpcmVzSW5Qcm9wZXJ0eU5hbWV9JyBwcm9wZXJ0eWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBuZXcgRGF0ZShleHBpcmVzSW4gKiAxMDAwKS5nZXRUaW1lKCkgLSByZWZyZXNoQnVmZmVyIC0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuX2NvbmZpZy5yZWZyZXNoQ29uZmlnLnN0cmF0ZWd5ID8/IEF1dGhCZWFyZXJSZWZyZXNoU3RyYXRlZ3kuQmVmb3JlRXhwaXJhdGlvbjtcblxuICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgQXV0aEJlYXJlclJlZnJlc2hTdHJhdGVneS5CZWZvcmVFeHBpcmF0aW9uOlxuICAgICAgICB0aW1lcihyZW1haW5pbmdUaW1lKVxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoUXVlcnkoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZnJlc2hRdWVyeSgpIHtcbiAgICBpZiAoIXRoaXMudG9rZW5zLnJlZnJlc2hUb2tlbiB8fCAhdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gdGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcucmVxdWVzdEFyZ3NBZGFwdGVyPy4odGhpcy50b2tlbnMpID8/IHtcbiAgICAgIGJvZHk6IHsgcmVmcmVzaFRva2VuOiB0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4gfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5xdWVyeUNyZWF0b3IucHJlcGFyZShhcmdzKS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5fY3VycmVudFJlZnJlc2hRdWVyeSQubmV4dChxdWVyeSBhcyBRdWVyeUNyZWF0b3JSZXR1cm5UeXBlPFQ+KTtcblxuICAgIHRoaXMuX2N1cnJlbnRSZWZyZXNoUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoUXVlcnlTdGF0ZSgpLFxuICAgICAgICB0YXAoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LnJlc3BvbnNlQWRhcHRlcikge1xuICAgICAgICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5yZXNwb25zZUFkYXB0ZXIoc3RhdGUucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3Rva2VucyQubmV4dCh0b2tlbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fdG9rZW5zJC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0b2tlbjogc3RhdGUucmVzcG9uc2VbJ3Rva2VuJ10sXG4gICAgICAgICAgICAgICAgcmVmcmVzaFRva2VuOiBzdGF0ZS5yZXNwb25zZVsncmVmcmVzaFRva2VuJ10sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWc/LmNvb2tpZU5hbWUgJiYgdGhpcy50b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgIHNldENvb2tpZSh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZy5jb29raWVOYW1lLCB0aGlzLnRva2Vucy5yZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlRm9yUmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdWVyeVN0YXRlRmFpbHVyZShzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Rva2VucyQubmV4dCh7IHRva2VuOiBudWxsLCByZWZyZXNoVG9rZW46IG51bGwgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcucmVmcmVzaENvbmZpZz8uY29va2llTmFtZSkge1xuICAgICAgICAgICAgICBkZWxldGVDb29raWUodGhpcy5fY29uZmlnLnJlZnJlc2hDb25maWcuY29va2llTmFtZSwgJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxSZXNwb25zZSgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getCookie,
|
|
1
|
+
import { getCookie, setCookie, deleteCookie, DestroyService } from '@ethlete/core';
|
|
2
2
|
import { filter, takeWhile, switchMap, of, BehaviorSubject, Subject, interval, takeUntil, tap, timer, fromEvent, startWith, concat, take, debounceTime, combineLatest, map, distinctUntilChanged } from 'rxjs';
|
|
3
3
|
import { __awaiter } from 'tslib';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
@@ -603,7 +603,13 @@ const decryptBearer = (token) => {
|
|
|
603
603
|
|
|
604
604
|
class BearerAuthProvider {
|
|
605
605
|
get header() {
|
|
606
|
-
return { Authorization: `Bearer ${this.
|
|
606
|
+
return { Authorization: `Bearer ${this._tokens$.getValue().token}` };
|
|
607
|
+
}
|
|
608
|
+
get tokens$() {
|
|
609
|
+
return this._tokens$.asObservable();
|
|
610
|
+
}
|
|
611
|
+
get tokens() {
|
|
612
|
+
return this._tokens$.getValue();
|
|
607
613
|
}
|
|
608
614
|
get currentRefreshQuery$() {
|
|
609
615
|
return this._currentRefreshQuery$.asObservable();
|
|
@@ -612,22 +618,34 @@ class BearerAuthProvider {
|
|
|
612
618
|
return this._currentRefreshQuery$.getValue();
|
|
613
619
|
}
|
|
614
620
|
constructor(_config) {
|
|
615
|
-
var _a, _b, _c, _d;
|
|
621
|
+
var _a, _b, _c, _d, _e;
|
|
616
622
|
this._config = _config;
|
|
617
623
|
this._destroy$ = new Subject();
|
|
618
624
|
this._currentRefreshQuery$ = new BehaviorSubject(null);
|
|
619
|
-
this.
|
|
620
|
-
|
|
625
|
+
this._tokens$ = new BehaviorSubject({
|
|
626
|
+
token: null,
|
|
627
|
+
refreshToken: null,
|
|
628
|
+
});
|
|
621
629
|
const cookieToken = ((_a = _config.refreshConfig) === null || _a === void 0 ? void 0 : _a.cookieName) ? (_b = getCookie(_config.refreshConfig.cookieName)) !== null && _b !== void 0 ? _b : null : null;
|
|
622
|
-
this.
|
|
623
|
-
|
|
624
|
-
|
|
630
|
+
this._tokens$.next({
|
|
631
|
+
token: _config.token || null,
|
|
632
|
+
refreshToken: ((_c = _config.refreshConfig) === null || _c === void 0 ? void 0 : _c.token) || cookieToken || null,
|
|
633
|
+
});
|
|
634
|
+
if (!this.tokens.token && !this.tokens.refreshToken) {
|
|
625
635
|
if (!((_d = _config.refreshConfig) === null || _d === void 0 ? void 0 : _d.cookieName)) {
|
|
626
636
|
console.error('A BearerAuthProvider was created without token or refresh token. You should provide at least a cookieName where the refresh token might be stored.');
|
|
627
637
|
}
|
|
628
638
|
return;
|
|
629
639
|
}
|
|
630
|
-
this.
|
|
640
|
+
if (this.tokens.token) {
|
|
641
|
+
this._prepareForRefresh();
|
|
642
|
+
if (this.tokens.refreshToken && ((_e = this._config.refreshConfig) === null || _e === void 0 ? void 0 : _e.cookieName)) {
|
|
643
|
+
setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
else if (this.tokens.refreshToken) {
|
|
647
|
+
this._refreshQuery();
|
|
648
|
+
}
|
|
631
649
|
}
|
|
632
650
|
cleanUp() {
|
|
633
651
|
var _a;
|
|
@@ -640,10 +658,10 @@ class BearerAuthProvider {
|
|
|
640
658
|
}
|
|
641
659
|
_prepareForRefresh() {
|
|
642
660
|
var _a, _b;
|
|
643
|
-
if (!this.
|
|
661
|
+
if (!this.tokens.token || !this._config.refreshConfig) {
|
|
644
662
|
return;
|
|
645
663
|
}
|
|
646
|
-
const bearer = decryptBearer(this.
|
|
664
|
+
const bearer = decryptBearer(this.tokens.token);
|
|
647
665
|
if (!bearer) {
|
|
648
666
|
return;
|
|
649
667
|
}
|
|
@@ -665,12 +683,12 @@ class BearerAuthProvider {
|
|
|
665
683
|
}
|
|
666
684
|
}
|
|
667
685
|
_refreshQuery() {
|
|
668
|
-
var _a, _b, _c
|
|
669
|
-
if (!this.
|
|
686
|
+
var _a, _b, _c;
|
|
687
|
+
if (!this.tokens.refreshToken || !this._config.refreshConfig) {
|
|
670
688
|
return;
|
|
671
689
|
}
|
|
672
|
-
const args = (
|
|
673
|
-
body: { refreshToken: this.
|
|
690
|
+
const args = (_c = (_b = (_a = this._config.refreshConfig).requestArgsAdapter) === null || _b === void 0 ? void 0 : _b.call(_a, this.tokens)) !== null && _c !== void 0 ? _c : {
|
|
691
|
+
body: { refreshToken: this.tokens.refreshToken },
|
|
674
692
|
};
|
|
675
693
|
const query = this._config.refreshConfig.queryCreator.prepare(args).execute({ skipCache: true });
|
|
676
694
|
this._currentRefreshQuery$.next(query);
|
|
@@ -680,21 +698,21 @@ class BearerAuthProvider {
|
|
|
680
698
|
if (isQueryStateSuccess(state)) {
|
|
681
699
|
if ((_a = this._config.refreshConfig) === null || _a === void 0 ? void 0 : _a.responseAdapter) {
|
|
682
700
|
const tokens = this._config.refreshConfig.responseAdapter(state.response);
|
|
683
|
-
this.
|
|
684
|
-
this._refreshToken = tokens.refreshToken || null;
|
|
701
|
+
this._tokens$.next(tokens);
|
|
685
702
|
}
|
|
686
703
|
else {
|
|
687
|
-
this.
|
|
688
|
-
|
|
704
|
+
this._tokens$.next({
|
|
705
|
+
token: state.response['token'],
|
|
706
|
+
refreshToken: state.response['refreshToken'],
|
|
707
|
+
});
|
|
689
708
|
}
|
|
690
|
-
if (((_b = this._config.refreshConfig) === null || _b === void 0 ? void 0 : _b.cookieName) && this.
|
|
691
|
-
setCookie(this._config.refreshConfig.cookieName, this.
|
|
709
|
+
if (((_b = this._config.refreshConfig) === null || _b === void 0 ? void 0 : _b.cookieName) && this.tokens.refreshToken) {
|
|
710
|
+
setCookie(this._config.refreshConfig.cookieName, this.tokens.refreshToken);
|
|
692
711
|
}
|
|
693
712
|
this._prepareForRefresh();
|
|
694
713
|
}
|
|
695
714
|
else if (isQueryStateFailure(state)) {
|
|
696
|
-
this.
|
|
697
|
-
this._refreshToken = null;
|
|
715
|
+
this._tokens$.next({ token: null, refreshToken: null });
|
|
698
716
|
if ((_c = this._config.refreshConfig) === null || _c === void 0 ? void 0 : _c.cookieName) {
|
|
699
717
|
deleteCookie(this._config.refreshConfig.cookieName, '/');
|
|
700
718
|
}
|