@ethlete/query 5.21.1 → 5.22.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/CHANGELOG.md +6 -0
- package/fesm2022/ethlete-query.mjs +21 -37
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/package.json +5 -7
- package/esm2022/ethlete-query.mjs +0 -5
- package/esm2022/index.mjs +0 -21
- package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
- package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
- package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
- package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
- package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
- package/esm2022/lib/auth/index.mjs +0 -6
- package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
- package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
- package/esm2022/lib/class-validator/index.mjs +0 -3
- package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
- package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
- package/esm2022/lib/devtools/pipes/index.mjs +0 -2
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
- package/esm2022/lib/devtools/utils/index.mjs +0 -2
- package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
- package/esm2022/lib/directives/index.mjs +0 -4
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
- package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
- package/esm2022/lib/directives/query.directive.mjs +0 -123
- package/esm2022/lib/entity/entity-store.mjs +0 -127
- package/esm2022/lib/entity/entity.types.mjs +0 -2
- package/esm2022/lib/entity/entity.utils.mjs +0 -29
- package/esm2022/lib/entity/index.mjs +0 -4
- package/esm2022/lib/experimental/bearer-auth-provider-config.mjs +0 -19
- package/esm2022/lib/experimental/bearer-auth-provider.mjs +0 -245
- package/esm2022/lib/experimental/http-request.mjs +0 -154
- package/esm2022/lib/experimental/index.mjs +0 -23
- package/esm2022/lib/experimental/paged-query.mjs +0 -194
- package/esm2022/lib/experimental/query-client-config.mjs +0 -13
- package/esm2022/lib/experimental/query-client.mjs +0 -16
- package/esm2022/lib/experimental/query-creator-templates.mjs +0 -33
- package/esm2022/lib/experimental/query-creator.mjs +0 -28
- package/esm2022/lib/experimental/query-dependencies.mjs +0 -14
- package/esm2022/lib/experimental/query-errors.mjs +0 -70
- package/esm2022/lib/experimental/query-execute-utils.mjs +0 -54
- package/esm2022/lib/experimental/query-execute.mjs +0 -14
- package/esm2022/lib/experimental/query-features.mjs +0 -126
- package/esm2022/lib/experimental/query-repository.mjs +0 -97
- package/esm2022/lib/experimental/query-snapshot.mjs +0 -45
- package/esm2022/lib/experimental/query-stack.mjs +0 -65
- package/esm2022/lib/experimental/query-state.mjs +0 -20
- package/esm2022/lib/experimental/query-utils.mjs +0 -176
- package/esm2022/lib/experimental/query.mjs +0 -29
- package/esm2022/lib/experimental/secure-query-creator.mjs +0 -15
- package/esm2022/lib/experimental/secure-query-execute.mjs +0 -80
- package/esm2022/lib/experimental/secure-query.mjs +0 -33
- package/esm2022/lib/gql/gql.mjs +0 -23
- package/esm2022/lib/gql/index.mjs +0 -2
- package/esm2022/lib/infinite-query/index.mjs +0 -4
- package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
- package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
- package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
- package/esm2022/lib/logger/index.mjs +0 -2
- package/esm2022/lib/logger/logger.mjs +0 -16
- package/esm2022/lib/query/index.mjs +0 -4
- package/esm2022/lib/query/query.mjs +0 -431
- package/esm2022/lib/query/query.types.mjs +0 -2
- package/esm2022/lib/query/query.utils.mjs +0 -253
- package/esm2022/lib/query-client/index.mjs +0 -4
- package/esm2022/lib/query-client/query-client.mjs +0 -80
- package/esm2022/lib/query-client/query-client.types.mjs +0 -2
- package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
- package/esm2022/lib/query-creator/index.mjs +0 -3
- package/esm2022/lib/query-creator/query-creator.mjs +0 -55
- package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
- package/esm2022/lib/query-form/index.mjs +0 -4
- package/esm2022/lib/query-form/query-form.mjs +0 -412
- package/esm2022/lib/query-form/query-form.types.mjs +0 -2
- package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
- package/esm2022/lib/query-store/index.mjs +0 -2
- package/esm2022/lib/query-store/query-store.mjs +0 -144
- package/esm2022/lib/request/index.mjs +0 -4
- package/esm2022/lib/request/request.mjs +0 -196
- package/esm2022/lib/request/request.types.mjs +0 -2
- package/esm2022/lib/request/request.util.mjs +0 -252
- package/esm2022/lib/symfony/index.mjs +0 -3
- package/esm2022/lib/symfony/symfony.types.mjs +0 -2
- package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
- package/esm2022/lib/utils/data.utils.mjs +0 -138
- package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
- package/esm2022/lib/utils/def.util.mjs +0 -8
- package/esm2022/lib/utils/index.mjs +0 -4
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
-
import { computed, effect, isDevMode, signal, untracked } from '@angular/core';
|
|
3
|
-
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { deleteCookie as coreDeleteCookie, getCookie, getDomain, isObject, setCookie } from '@ethlete/core';
|
|
5
|
-
import { of, switchMap, tap, timer } from 'rxjs';
|
|
6
|
-
import { decryptBearer } from '../auth';
|
|
7
|
-
import { bearerExpiresInPropertyNotNumber, cookieLoginTriedButCookieDisabled, defaultResponseTransformerResponseNotContainingAccessToken, defaultResponseTransformerResponseNotContainingRefreshToken, defaultResponseTransformerResponseNotObject, disableCookieCalledWithoutCookieConfig, enableCookieCalledWithoutCookieConfig, loginCalledWithoutConfig, loginWithTokenCalledWithoutConfig, refreshTokenCalledWithoutConfig, selectRoleCalledWithoutConfig, unableToDecryptBearerToken, } from './query-errors';
|
|
8
|
-
const defaultResponseTransformer = (response) => {
|
|
9
|
-
if (!isObject(response)) {
|
|
10
|
-
throw defaultResponseTransformerResponseNotObject(typeof response);
|
|
11
|
-
}
|
|
12
|
-
if (!('accessToken' in response)) {
|
|
13
|
-
throw defaultResponseTransformerResponseNotContainingAccessToken();
|
|
14
|
-
}
|
|
15
|
-
if (!('refreshToken' in response)) {
|
|
16
|
-
throw defaultResponseTransformerResponseNotContainingRefreshToken();
|
|
17
|
-
}
|
|
18
|
-
return response;
|
|
19
|
-
};
|
|
20
|
-
const FIVE_MINUTES = 5 * 60 * 1000;
|
|
21
|
-
const createAuthProviderQuery = (config, authProviderConfig) => {
|
|
22
|
-
const query = config.queryCreator();
|
|
23
|
-
const triggeredInternally = signal(false);
|
|
24
|
-
const tokens = computed(() => {
|
|
25
|
-
const res = query.response();
|
|
26
|
-
if (!res)
|
|
27
|
-
return null;
|
|
28
|
-
const transformed = config.responseTransformer?.(res) ?? defaultResponseTransformer(res);
|
|
29
|
-
const bearerValue = decryptBearer(transformed.accessToken);
|
|
30
|
-
if (!bearerValue)
|
|
31
|
-
throw unableToDecryptBearerToken(transformed.accessToken);
|
|
32
|
-
return {
|
|
33
|
-
bearer: bearerValue,
|
|
34
|
-
tokens: transformed,
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
const expiresIn = computed(() => {
|
|
38
|
-
const res = tokens();
|
|
39
|
-
if (!res)
|
|
40
|
-
return null;
|
|
41
|
-
const expiresIn = res.bearer[authProviderConfig.expiresInPropertyName ?? 'exp'];
|
|
42
|
-
const refreshBuffer = authProviderConfig.refreshBuffer ?? FIVE_MINUTES;
|
|
43
|
-
if (typeof expiresIn !== 'number') {
|
|
44
|
-
throw bearerExpiresInPropertyNotNumber(expiresIn);
|
|
45
|
-
}
|
|
46
|
-
// const dummyRemainingTime = (query.lastTimeExecutedAt() ?? 0) + 5000 - new Date().getTime();
|
|
47
|
-
const remainingTime = new Date(expiresIn * 1000).getTime() - refreshBuffer - new Date().getTime();
|
|
48
|
-
return remainingTime;
|
|
49
|
-
});
|
|
50
|
-
const execute = (newArgs, options) => {
|
|
51
|
-
query.execute({ args: newArgs });
|
|
52
|
-
triggeredInternally.set(options?.triggeredInternally ?? false);
|
|
53
|
-
};
|
|
54
|
-
return {
|
|
55
|
-
execute,
|
|
56
|
-
query,
|
|
57
|
-
tokens,
|
|
58
|
-
expiresIn,
|
|
59
|
-
triggeredInternally: triggeredInternally.asReadonly(),
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
export const createBearerAuthProvider = (options) => {
|
|
63
|
-
const cookieEnabled = signal(options.cookie === undefined ? false : (options.cookie.enabled ?? true));
|
|
64
|
-
const cookieOptions = {
|
|
65
|
-
expiresInDays: 30,
|
|
66
|
-
name: 'etAuth',
|
|
67
|
-
path: '/',
|
|
68
|
-
sameSite: 'lax',
|
|
69
|
-
domain: getDomain() ?? 'localhost',
|
|
70
|
-
refreshArgsTransformer: (token) => ({ body: { token } }),
|
|
71
|
-
...(options.cookie ?? {}),
|
|
72
|
-
};
|
|
73
|
-
const loginQuery = options.login ? createAuthProviderQuery(options.login, options) : null;
|
|
74
|
-
const tokenLoginQuery = options.tokenLogin ? createAuthProviderQuery(options.tokenLogin, options) : null;
|
|
75
|
-
const tokenRefreshQuery = options.tokenRefresh ? createAuthProviderQuery(options.tokenRefresh, options) : null;
|
|
76
|
-
const selectRoleQuery = options.selectRole ? createAuthProviderQuery(options.selectRole, options) : null;
|
|
77
|
-
const queries = [
|
|
78
|
-
{ type: 'login', query: loginQuery },
|
|
79
|
-
{ type: 'tokenLogin', query: tokenLoginQuery },
|
|
80
|
-
{ type: 'tokenRefresh', query: tokenRefreshQuery },
|
|
81
|
-
{ type: 'selectRole', query: selectRoleQuery },
|
|
82
|
-
];
|
|
83
|
-
const latestExecutedQuery = computed(() => {
|
|
84
|
-
const relevantQueries = queries.filter((q) => q.query && q.query.query.lastTimeExecutedAt() !== null);
|
|
85
|
-
return findMostRecentQuery(relevantQueries);
|
|
86
|
-
});
|
|
87
|
-
const tokens = computed(() => {
|
|
88
|
-
const query = latestExecutedQuery();
|
|
89
|
-
return query?.query?.tokens()?.tokens ?? null;
|
|
90
|
-
});
|
|
91
|
-
toObservable(computed(() => {
|
|
92
|
-
const query = latestExecutedQuery();
|
|
93
|
-
const expiresIn = query?.query?.expiresIn() ?? null;
|
|
94
|
-
const tokens = query?.query?.tokens() ?? null;
|
|
95
|
-
return { expiresIn, tokens, query };
|
|
96
|
-
}))
|
|
97
|
-
.pipe(switchMap((res) => {
|
|
98
|
-
if (!res.tokens || res.expiresIn === null || !options.tokenRefresh)
|
|
99
|
-
return of(null);
|
|
100
|
-
const expIn = res.expiresIn;
|
|
101
|
-
const tokens = res.tokens;
|
|
102
|
-
if (!expIn || !tokens)
|
|
103
|
-
return of(null);
|
|
104
|
-
return timer(expIn).pipe(tap(() => refreshToken({
|
|
105
|
-
...cookieOptions.refreshArgsTransformer(tokens.tokens.refreshToken),
|
|
106
|
-
}, { triggeredInternally: true })));
|
|
107
|
-
}), takeUntilDestroyed())
|
|
108
|
-
.subscribe();
|
|
109
|
-
const latestNonInternalQuery = signal(null);
|
|
110
|
-
effect(() => {
|
|
111
|
-
const relevantQueries = queries.filter((q) => q.query && !q.query.triggeredInternally() && q.query.query.lastTimeExecutedAt() !== null);
|
|
112
|
-
const lastQuery = findMostRecentQuery(relevantQueries);
|
|
113
|
-
untracked(() => {
|
|
114
|
-
if (!lastQuery || !lastQuery.query?.query)
|
|
115
|
-
return;
|
|
116
|
-
latestNonInternalQuery.set({
|
|
117
|
-
type: lastQuery.type,
|
|
118
|
-
...lastQuery.query.query.createSnapshot(),
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
// Cookie writing
|
|
123
|
-
effect(() => {
|
|
124
|
-
const isCookieEnabled = cookieEnabled();
|
|
125
|
-
const res = latestExecutedQuery();
|
|
126
|
-
const error = res?.query?.query.error();
|
|
127
|
-
if (!isCookieEnabled || (error && error.status === 401)) {
|
|
128
|
-
deleteCookie();
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
if (!res?.query)
|
|
132
|
-
return;
|
|
133
|
-
const { tokens } = res.query;
|
|
134
|
-
const rt = tokens()?.tokens.refreshToken;
|
|
135
|
-
if (!rt)
|
|
136
|
-
return;
|
|
137
|
-
writeCookie(rt);
|
|
138
|
-
});
|
|
139
|
-
const login = (args) => {
|
|
140
|
-
if (!loginQuery) {
|
|
141
|
-
throw loginCalledWithoutConfig();
|
|
142
|
-
}
|
|
143
|
-
loginQuery.execute(args);
|
|
144
|
-
return loginQuery.query.createSnapshot();
|
|
145
|
-
};
|
|
146
|
-
const loginWithToken = (args) => {
|
|
147
|
-
if (!tokenLoginQuery) {
|
|
148
|
-
throw loginWithTokenCalledWithoutConfig();
|
|
149
|
-
}
|
|
150
|
-
tokenLoginQuery.execute(args);
|
|
151
|
-
return tokenLoginQuery.query.createSnapshot();
|
|
152
|
-
};
|
|
153
|
-
const refreshToken = (args, options) => {
|
|
154
|
-
if (!tokenRefreshQuery) {
|
|
155
|
-
throw refreshTokenCalledWithoutConfig();
|
|
156
|
-
}
|
|
157
|
-
tokenRefreshQuery.execute(args, { triggeredInternally: options?.triggeredInternally });
|
|
158
|
-
return tokenRefreshQuery.query.createSnapshot();
|
|
159
|
-
};
|
|
160
|
-
const selectRole = (args) => {
|
|
161
|
-
if (!selectRoleQuery) {
|
|
162
|
-
throw selectRoleCalledWithoutConfig();
|
|
163
|
-
}
|
|
164
|
-
selectRoleQuery.execute(args);
|
|
165
|
-
return selectRoleQuery.query.createSnapshot();
|
|
166
|
-
};
|
|
167
|
-
const logout = () => {
|
|
168
|
-
deleteCookie();
|
|
169
|
-
loginQuery?.query.execute.reset();
|
|
170
|
-
tokenLoginQuery?.query.execute.reset();
|
|
171
|
-
tokenRefreshQuery?.query.execute.reset();
|
|
172
|
-
selectRoleQuery?.query.execute.reset();
|
|
173
|
-
latestNonInternalQuery.set(null);
|
|
174
|
-
};
|
|
175
|
-
const enableCookie = () => {
|
|
176
|
-
if (isDevMode() && !options.cookie) {
|
|
177
|
-
throw enableCookieCalledWithoutCookieConfig();
|
|
178
|
-
}
|
|
179
|
-
cookieEnabled.set(true);
|
|
180
|
-
};
|
|
181
|
-
const disableCookie = () => {
|
|
182
|
-
if (isDevMode() && !options.cookie) {
|
|
183
|
-
throw disableCookieCalledWithoutCookieConfig();
|
|
184
|
-
}
|
|
185
|
-
cookieEnabled.set(false);
|
|
186
|
-
deleteCookie();
|
|
187
|
-
};
|
|
188
|
-
const tryLoginWithCookie = () => {
|
|
189
|
-
const isCookieEnabled = cookieEnabled();
|
|
190
|
-
if (!isCookieEnabled) {
|
|
191
|
-
if (isDevMode()) {
|
|
192
|
-
throw cookieLoginTriedButCookieDisabled();
|
|
193
|
-
}
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
const cookie = getCookie(cookieOptions.name);
|
|
197
|
-
if (!cookie) {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
refreshToken(cookieOptions.refreshArgsTransformer(cookie));
|
|
201
|
-
return true;
|
|
202
|
-
};
|
|
203
|
-
const writeCookie = (refreshToken) => {
|
|
204
|
-
const { name, expiresInDays, domain, path, sameSite } = cookieOptions;
|
|
205
|
-
setCookie(name, refreshToken, expiresInDays, domain, path, sameSite);
|
|
206
|
-
};
|
|
207
|
-
const deleteCookie = () => {
|
|
208
|
-
const { name, path, domain } = cookieOptions;
|
|
209
|
-
coreDeleteCookie(name, path, domain);
|
|
210
|
-
};
|
|
211
|
-
const findMostRecentQuery = (queriesToSearch) => {
|
|
212
|
-
return queriesToSearch.reduce((acc, curr) => {
|
|
213
|
-
if (!acc)
|
|
214
|
-
return curr;
|
|
215
|
-
const accExp = acc.query?.query.lastTimeExecutedAt() ?? null;
|
|
216
|
-
const currExp = curr.query?.query.lastTimeExecutedAt() ?? null;
|
|
217
|
-
if (currExp === null || accExp === null)
|
|
218
|
-
return acc;
|
|
219
|
-
return accExp > currExp ? acc : curr;
|
|
220
|
-
}, null);
|
|
221
|
-
};
|
|
222
|
-
const bearerAuthProvider = {
|
|
223
|
-
login,
|
|
224
|
-
loginWithToken,
|
|
225
|
-
refreshToken,
|
|
226
|
-
selectRole,
|
|
227
|
-
logout,
|
|
228
|
-
enableCookie,
|
|
229
|
-
disableCookie,
|
|
230
|
-
tryLoginWithCookie,
|
|
231
|
-
latestExecutedQuery: latestNonInternalQuery.asReadonly(),
|
|
232
|
-
tokens,
|
|
233
|
-
};
|
|
234
|
-
if (cookieEnabled()) {
|
|
235
|
-
tryLoginWithCookie();
|
|
236
|
-
}
|
|
237
|
-
return bearerAuthProvider;
|
|
238
|
-
};
|
|
239
|
-
export const provideBearerAuthProvider = (config) => {
|
|
240
|
-
return {
|
|
241
|
-
provide: config.token,
|
|
242
|
-
useFactory: () => createBearerAuthProvider(config),
|
|
243
|
-
};
|
|
244
|
-
};
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhcmVyLWF1dGgtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2JlYXJlci1hdXRoLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUd6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBUXhDLE9BQU8sRUFDTCxnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDBEQUEwRCxFQUMxRCwyREFBMkQsRUFDM0QsMkNBQTJDLEVBQzNDLHNDQUFzQyxFQUN0QyxxQ0FBcUMsRUFDckMsd0JBQXdCLEVBQ3hCLGlDQUFpQyxFQUNqQywrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBaUh4QixNQUFNLDBCQUEwQixHQUFHLENBQUksUUFBVyxFQUFFLEVBQUU7SUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sMkNBQTJDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQyxF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d0Y7UUFDOUcsS0FBSztRQUNMLGNBQWM7UUFDZCxZQUFZO1FBQ1osVUFBVTtRQUNWLE1BQU07UUFDTixZQUFZO1FBQ1osYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixtQkFBbUIsRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUU7UUFDeEQsTUFBTTtLQUNQLENBQUM7SUFFRixJQUFJLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDcEIsa0JBQWtCLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQU12QyxNQUFpRyxFQUNqRyxFQUFFO0lBQ0YsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSztRQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO0tBQ25ELENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpc0Rldk1vZGUsIFNpZ25hbCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZGVsZXRlQ29va2llIGFzIGNvcmVEZWxldGVDb29raWUsIGdldENvb2tpZSwgZ2V0RG9tYWluLCBpc09iamVjdCwgc2V0Q29va2llIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBvZiwgc3dpdGNoTWFwLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWNyeXB0QmVhcmVyIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQge1xuICBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZyxcbiAgQmVhcmVyQXV0aFByb3ZpZGVyUm91dGVDb25maWcsXG4gIEJlYXJlckF1dGhQcm92aWRlclRva2Vucyxcbn0gZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBRdWVyeVNuYXBzaG90LCBSZXF1ZXN0QXJncyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHtcbiAgYmVhcmVyRXhwaXJlc0luUHJvcGVydHlOb3ROdW1iZXIsXG4gIGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCxcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbixcbiAgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4sXG4gIGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QsXG4gIGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBlbmFibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnLFxuICBsb2dpbkNhbGxlZFdpdGhvdXRDb25maWcsXG4gIGxvZ2luV2l0aFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgcmVmcmVzaFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZyxcbiAgc2VsZWN0Um9sZUNhbGxlZFdpdGhvdXRDb25maWcsXG4gIHVuYWJsZVRvRGVjcnlwdEJlYXJlclRva2VuLFxufSBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5cbnR5cGUgSW50ZXJuYWxRdWVyeUV4ZWN1dGVPcHRpb25zID0ge1xuICB0cmlnZ2VyZWRJbnRlcm5hbGx5PzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQXV0aFByb3ZpZGVyUXVlcnlXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwge1xuICAgICAgdHlwZTogJ2xvZ2luJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5Mb2dpbic7XG4gICAgICBxdWVyeTogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnk8VFRva2VuTG9naW5BcmdzPj4gfCBudWxsO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICAgIHF1ZXJ5OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeTxUVG9rZW5SZWZyZXNoQXJncz4+IHwgbnVsbDtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogJ3NlbGVjdFJvbGUnO1xuICAgICAgcXVlcnk6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5PFRTZWxlY3RSb2xlQXJncz4+IHwgbnVsbDtcbiAgICB9O1xuXG50eXBlIFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPiA9XG4gIHwgKHtcbiAgICAgIHR5cGU6ICdsb2dpbic7XG4gICAgfSAmIFF1ZXJ5U25hcHNob3Q8VExvZ2luQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICd0b2tlbkxvZ2luJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5Mb2dpbkFyZ3M+KVxuICB8ICh7XG4gICAgICB0eXBlOiAndG9rZW5SZWZyZXNoJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUVG9rZW5SZWZyZXNoQXJncz4pXG4gIHwgKHtcbiAgICAgIHR5cGU6ICdzZWxlY3RSb2xlJztcbiAgICB9ICYgUXVlcnlTbmFwc2hvdDxUU2VsZWN0Um9sZUFyZ3M+KTtcblxuZXhwb3J0IHR5cGUgQmVhcmVyQXV0aFByb3ZpZGVyPFxuICBUTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5Mb2dpbkFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4gIFRUb2tlblJlZnJlc2hBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUU2VsZWN0Um9sZUFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3MsXG4+ID0ge1xuICAvKipcbiAgICogTG9ncyBpbiB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBhcmdzLlxuICAgKi9cbiAgbG9naW46IChhcmdzOiBSZXF1ZXN0QXJnczxUTG9naW5BcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUTG9naW5BcmdzPjtcblxuICAvKipcbiAgICogTG9ncyBpbiB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiB0b2tlbi5cbiAgICovXG4gIGxvZ2luV2l0aFRva2VuOiAoYXJnczogUmVxdWVzdEFyZ3M8VFRva2VuTG9naW5BcmdzPikgPT4gUXVlcnlTbmFwc2hvdDxUVG9rZW5Mb2dpbkFyZ3M+O1xuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHRva2VuIHdpdGggdGhlIGdpdmVuIHJlZnJlc2ggdG9rZW4uXG4gICAqL1xuICByZWZyZXNoVG9rZW46IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4pID0+IFF1ZXJ5U25hcHNob3Q8VFRva2VuUmVmcmVzaEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSByb2xlIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHNlbGVjdFJvbGU6IChhcmdzOiBSZXF1ZXN0QXJnczxUU2VsZWN0Um9sZUFyZ3M+KSA9PiBRdWVyeVNuYXBzaG90PFRTZWxlY3RSb2xlQXJncz47XG5cbiAgLyoqXG4gICAqIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCByZW1vdmVzIHRoZSBjb29raWUuXG4gICAqL1xuICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgY29va2llIHVzYWdlIGZvciB0aGUgYXV0aCBwcm92aWRlci5cbiAgICovXG4gIGVuYWJsZUNvb2tpZTogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogRGlzYWJsZXMgY29va2llIHVzYWdlIGZvciB0aGUgYXV0aCBwcm92aWRlciBhbmQgcmVtb3ZlcyB0aGUgY29va2llLlxuICAgKi9cbiAgZGlzYWJsZUNvb2tpZTogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVHJpZXMgdG8gbG9naW4gd2l0aCB0aGUgZ2l2ZW4gY29va2llIGNvbmZpZy5cbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBjb29raWUgd2FzIGZvdW5kLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHRyeUxvZ2luV2l0aENvb2tpZTogKCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBleGVjdXRlZCBxdWVyeSB0aGF0IHdhcyBub3QgdHJpZ2dlcmVkIGludGVybmFsbHkuXG4gICAqL1xuICBsYXRlc3RFeGVjdXRlZFF1ZXJ5OiBTaWduYWw8UXVlcnlTbmFwc2hvdFdpdGhUeXBlPFxuICAgIFRMb2dpbkFyZ3MsXG4gICAgVFRva2VuTG9naW5BcmdzLFxuICAgIFRUb2tlblJlZnJlc2hBcmdzLFxuICAgIFRTZWxlY3RSb2xlQXJnc1xuICA+IHwgbnVsbD47XG5cbiAgb25SZWZyZXNoRmFpbHVyZT86IChjYWxsYmFjazogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdm9pZCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQSBzaWduYWwgdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLlxuICAgKi9cbiAgdG9rZW5zOiBTaWduYWw8QmVhcmVyQXV0aFByb3ZpZGVyVG9rZW5zIHwgbnVsbD47XG59O1xuXG5jb25zdCBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lciA9IDxUPihyZXNwb25zZTogVCkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgIHRocm93IGRlZmF1bHRSZXNwb25zZVRyYW5zZm9ybWVyUmVzcG9uc2VOb3RPYmplY3QodHlwZW9mIHJlc3BvbnNlKTtcbiAgfVxuXG4gIGlmICghKCdhY2Nlc3NUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdBY2Nlc3NUb2tlbigpO1xuICB9XG5cbiAgaWYgKCEoJ3JlZnJlc2hUb2tlbicgaW4gcmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgZGVmYXVsdFJlc3BvbnNlVHJhbnNmb3JtZXJSZXNwb25zZU5vdENvbnRhaW5pbmdSZWZyZXNoVG9rZW4oKTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZSBhcyB1bmtub3duIGFzIEJlYXJlckF1dGhQcm92aWRlclRva2Vucztcbn07XG5cbmNvbnN0IEZJVkVfTUlOVVRFUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5ID0gPFQgZXh0ZW5kcyBRdWVyeUFyZ3M+KFxuICBjb25maWc6IEJlYXJlckF1dGhQcm92aWRlclJvdXRlQ29uZmlnPFQ+LFxuICBhdXRoUHJvdmlkZXJDb25maWc6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSB0b2tlbiBleHBpcmVzIHdoZW4gdGhlIHJlZnJlc2ggc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICAgKiBAZGVmYXVsdCAzMDAwMDAgLy8gKDUgbWludXRlcylcbiAgICAgKi9cbiAgICByZWZyZXNoQnVmZmVyPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4cGlyZXMgaW4gcHJvcGVydHkgbmFtZSBpbnNpZGUgdGhlIGp3dCBib2R5XG4gICAgICogQGRlZmF1bHQgJ2V4cCdcbiAgICAgKi9cbiAgICBleHBpcmVzSW5Qcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjb25maWcucXVlcnlDcmVhdG9yKCk7XG5cbiAgY29uc3QgdHJpZ2dlcmVkSW50ZXJuYWxseSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgdG9rZW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IHF1ZXJ5LnJlc3BvbnNlKCk7XG5cbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGNvbmZpZy5yZXNwb25zZVRyYW5zZm9ybWVyPy4ocmVzKSA/PyBkZWZhdWx0UmVzcG9uc2VUcmFuc2Zvcm1lcihyZXMpO1xuXG4gICAgY29uc3QgYmVhcmVyVmFsdWUgPSBkZWNyeXB0QmVhcmVyKHRyYW5zZm9ybWVkLmFjY2Vzc1Rva2VuKTtcblxuICAgIGlmICghYmVhcmVyVmFsdWUpIHRocm93IHVuYWJsZVRvRGVjcnlwdEJlYXJlclRva2VuKHRyYW5zZm9ybWVkLmFjY2Vzc1Rva2VuKTtcblxuICAgIHJldHVybiB7XG4gICAgICBiZWFyZXI6IGJlYXJlclZhbHVlLFxuICAgICAgdG9rZW5zOiB0cmFuc2Zvcm1lZCxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBleHBpcmVzSW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gdG9rZW5zKCk7XG5cbiAgICBpZiAoIXJlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBleHBpcmVzSW4gPSByZXMuYmVhcmVyW2F1dGhQcm92aWRlckNvbmZpZy5leHBpcmVzSW5Qcm9wZXJ0eU5hbWUgPz8gJ2V4cCddO1xuICAgIGNvbnN0IHJlZnJlc2hCdWZmZXIgPSBhdXRoUHJvdmlkZXJDb25maWcucmVmcmVzaEJ1ZmZlciA/PyBGSVZFX01JTlVURVM7XG5cbiAgICBpZiAodHlwZW9mIGV4cGlyZXNJbiAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IGJlYXJlckV4cGlyZXNJblByb3BlcnR5Tm90TnVtYmVyKGV4cGlyZXNJbik7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgZHVtbXlSZW1haW5pbmdUaW1lID0gKHF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpID8/IDApICsgNTAwMCAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBuZXcgRGF0ZShleHBpcmVzSW4gKiAxMDAwKS5nZXRUaW1lKCkgLSByZWZyZXNoQnVmZmVyIC0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgICByZXR1cm4gcmVtYWluaW5nVGltZTtcbiAgfSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IChuZXdBcmdzOiBSZXF1ZXN0QXJnczxUPiwgb3B0aW9ucz86IEludGVybmFsUXVlcnlFeGVjdXRlT3B0aW9ucykgPT4ge1xuICAgIHF1ZXJ5LmV4ZWN1dGUoeyBhcmdzOiBuZXdBcmdzIH0pO1xuICAgIHRyaWdnZXJlZEludGVybmFsbHkuc2V0KG9wdGlvbnM/LnRyaWdnZXJlZEludGVybmFsbHkgPz8gZmFsc2UpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZXhlY3V0ZSxcbiAgICBxdWVyeSxcbiAgICB0b2tlbnMsXG4gICAgZXhwaXJlc0luLFxuICAgIHRyaWdnZXJlZEludGVybmFsbHk6IHRyaWdnZXJlZEludGVybmFsbHkuYXNSZWFkb25seSgpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJlYXJlckF1dGhQcm92aWRlciA9IDxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPihcbiAgb3B0aW9uczogQmVhcmVyQXV0aFByb3ZpZGVyQ29uZmlnPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncz4sXG4pOiBCZWFyZXJBdXRoUHJvdmlkZXI8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPiA9PiB7XG4gIGNvbnN0IGNvb2tpZUVuYWJsZWQgPSBzaWduYWwob3B0aW9ucy5jb29raWUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG9wdGlvbnMuY29va2llLmVuYWJsZWQgPz8gdHJ1ZSkpO1xuICBjb25zdCBjb29raWVPcHRpb25zOiBSZXF1aXJlZDxPbWl0PEJlYXJlckF1dGhQcm92aWRlckNvb2tpZUNvbmZpZzxUVG9rZW5SZWZyZXNoQXJncz4sICdlbmFibGVkJz4+ID0ge1xuICAgIGV4cGlyZXNJbkRheXM6IDMwLFxuICAgIG5hbWU6ICdldEF1dGgnLFxuICAgIHBhdGg6ICcvJyxcbiAgICBzYW1lU2l0ZTogJ2xheCcsXG4gICAgZG9tYWluOiBnZXREb21haW4oKSA/PyAnbG9jYWxob3N0JyxcbiAgICByZWZyZXNoQXJnc1RyYW5zZm9ybWVyOiAodG9rZW4pID0+ICh7IGJvZHk6IHsgdG9rZW4gfSB9KSBhcyBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4sXG4gICAgLi4uKG9wdGlvbnMuY29va2llID8/IHt9KSxcbiAgfTtcblxuICBjb25zdCBsb2dpblF1ZXJ5ID0gb3B0aW9ucy5sb2dpbiA/IGNyZWF0ZUF1dGhQcm92aWRlclF1ZXJ5KG9wdGlvbnMubG9naW4sIG9wdGlvbnMpIDogbnVsbDtcbiAgY29uc3QgdG9rZW5Mb2dpblF1ZXJ5ID0gb3B0aW9ucy50b2tlbkxvZ2luID8gY3JlYXRlQXV0aFByb3ZpZGVyUXVlcnkob3B0aW9ucy50b2tlbkxvZ2luLCBvcHRpb25zKSA6IG51bGw7XG4gIGNvbnN0IHRva2VuUmVmcmVzaFF1ZXJ5ID0gb3B0aW9ucy50b2tlblJlZnJlc2ggPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLnRva2VuUmVmcmVzaCwgb3B0aW9ucykgOiBudWxsO1xuICBjb25zdCBzZWxlY3RSb2xlUXVlcnkgPSBvcHRpb25zLnNlbGVjdFJvbGUgPyBjcmVhdGVBdXRoUHJvdmlkZXJRdWVyeShvcHRpb25zLnNlbGVjdFJvbGUsIG9wdGlvbnMpIDogbnVsbDtcblxuICBjb25zdCBxdWVyaWVzOiBBdXRoUHJvdmlkZXJRdWVyeVdpdGhUeXBlPFRMb2dpbkFyZ3MsIFRUb2tlbkxvZ2luQXJncywgVFRva2VuUmVmcmVzaEFyZ3MsIFRTZWxlY3RSb2xlQXJncz5bXSA9IFtcbiAgICB7IHR5cGU6ICdsb2dpbicsIHF1ZXJ5OiBsb2dpblF1ZXJ5IH0sXG4gICAgeyB0eXBlOiAndG9rZW5Mb2dpbicsIHF1ZXJ5OiB0b2tlbkxvZ2luUXVlcnkgfSxcbiAgICB7IHR5cGU6ICd0b2tlblJlZnJlc2gnLCBxdWVyeTogdG9rZW5SZWZyZXNoUXVlcnkgfSxcbiAgICB7IHR5cGU6ICdzZWxlY3RSb2xlJywgcXVlcnk6IHNlbGVjdFJvbGVRdWVyeSB9LFxuICBdO1xuXG4gIGNvbnN0IGxhdGVzdEV4ZWN1dGVkUXVlcnkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcmVsZXZhbnRRdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoKHEpID0+IHEucXVlcnkgJiYgcS5xdWVyeS5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZmluZE1vc3RSZWNlbnRRdWVyeShyZWxldmFudFF1ZXJpZXMpO1xuICB9KTtcblxuICBjb25zdCB0b2tlbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBsYXRlc3RFeGVjdXRlZFF1ZXJ5KCk7XG5cbiAgICByZXR1cm4gcXVlcnk/LnF1ZXJ5Py50b2tlbnMoKT8udG9rZW5zID8/IG51bGw7XG4gIH0pO1xuXG4gIHRvT2JzZXJ2YWJsZShcbiAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHF1ZXJ5Py5xdWVyeT8uZXhwaXJlc0luKCkgPz8gbnVsbDtcbiAgICAgIGNvbnN0IHRva2VucyA9IHF1ZXJ5Py5xdWVyeT8udG9rZW5zKCkgPz8gbnVsbDtcblxuICAgICAgcmV0dXJuIHsgZXhwaXJlc0luLCB0b2tlbnMsIHF1ZXJ5IH07XG4gICAgfSksXG4gIClcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzLnRva2VucyB8fCByZXMuZXhwaXJlc0luID09PSBudWxsIHx8ICFvcHRpb25zLnRva2VuUmVmcmVzaCkgcmV0dXJuIG9mKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGV4cEluID0gcmVzLmV4cGlyZXNJbjtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gcmVzLnRva2VucztcblxuICAgICAgICBpZiAoIWV4cEluIHx8ICF0b2tlbnMpIHJldHVybiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gdGltZXIoZXhwSW4pLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICByZWZyZXNoVG9rZW4oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5jb29raWVPcHRpb25zLnJlZnJlc2hBcmdzVHJhbnNmb3JtZXIodG9rZW5zLnRva2Vucy5yZWZyZXNoVG9rZW4pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHRyaWdnZXJlZEludGVybmFsbHk6IHRydWUgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdCBsYXRlc3ROb25JbnRlcm5hbFF1ZXJ5ID0gc2lnbmFsPFF1ZXJ5U25hcHNob3RXaXRoVHlwZTxcbiAgICBUTG9naW5BcmdzLFxuICAgIFRUb2tlbkxvZ2luQXJncyxcbiAgICBUVG9rZW5SZWZyZXNoQXJncyxcbiAgICBUU2VsZWN0Um9sZUFyZ3NcbiAgPiB8IG51bGw+KG51bGwpO1xuXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmVsZXZhbnRRdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoXG4gICAgICAocSkgPT4gcS5xdWVyeSAmJiAhcS5xdWVyeS50cmlnZ2VyZWRJbnRlcm5hbGx5KCkgJiYgcS5xdWVyeS5xdWVyeS5sYXN0VGltZUV4ZWN1dGVkQXQoKSAhPT0gbnVsbCxcbiAgICApO1xuXG4gICAgY29uc3QgbGFzdFF1ZXJ5ID0gZmluZE1vc3RSZWNlbnRRdWVyeShyZWxldmFudFF1ZXJpZXMpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIGlmICghbGFzdFF1ZXJ5IHx8ICFsYXN0UXVlcnkucXVlcnk/LnF1ZXJ5KSByZXR1cm47XG5cbiAgICAgIGxhdGVzdE5vbkludGVybmFsUXVlcnkuc2V0KHtcbiAgICAgICAgdHlwZTogbGFzdFF1ZXJ5LnR5cGUsXG4gICAgICAgIC4uLmxhc3RRdWVyeS5xdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpLFxuICAgICAgfSBhcyBRdWVyeVNuYXBzaG90V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIENvb2tpZSB3cml0aW5nXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNDb29raWVFbmFibGVkID0gY29va2llRW5hYmxlZCgpO1xuICAgIGNvbnN0IHJlcyA9IGxhdGVzdEV4ZWN1dGVkUXVlcnkoKTtcbiAgICBjb25zdCBlcnJvciA9IHJlcz8ucXVlcnk/LnF1ZXJ5LmVycm9yKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCB8fCAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDEpKSB7XG4gICAgICBkZWxldGVDb29raWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJlcz8ucXVlcnkpIHJldHVybjtcblxuICAgIGNvbnN0IHsgdG9rZW5zIH0gPSByZXMucXVlcnk7XG5cbiAgICBjb25zdCBydCA9IHRva2VucygpPy50b2tlbnMucmVmcmVzaFRva2VuO1xuXG4gICAgaWYgKCFydCkgcmV0dXJuO1xuXG4gICAgd3JpdGVDb29raWUocnQpO1xuICB9KTtcblxuICBjb25zdCBsb2dpbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUTG9naW5BcmdzPikgPT4ge1xuICAgIGlmICghbG9naW5RdWVyeSkge1xuICAgICAgdGhyb3cgbG9naW5DYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbG9naW5RdWVyeS5leGVjdXRlKGFyZ3MpO1xuXG4gICAgcmV0dXJuIGxvZ2luUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBsb2dpbldpdGhUb2tlbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5Mb2dpbkFyZ3M+KSA9PiB7XG4gICAgaWYgKCF0b2tlbkxvZ2luUXVlcnkpIHtcbiAgICAgIHRocm93IGxvZ2luV2l0aFRva2VuQ2FsbGVkV2l0aG91dENvbmZpZygpO1xuICAgIH1cblxuICAgIHRva2VuTG9naW5RdWVyeS5leGVjdXRlKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRva2VuTG9naW5RdWVyeS5xdWVyeS5jcmVhdGVTbmFwc2hvdCgpO1xuICB9O1xuXG4gIGNvbnN0IHJlZnJlc2hUb2tlbiA9IChhcmdzOiBSZXF1ZXN0QXJnczxUVG9rZW5SZWZyZXNoQXJncz4sIG9wdGlvbnM/OiBJbnRlcm5hbFF1ZXJ5RXhlY3V0ZU9wdGlvbnMpID0+IHtcbiAgICBpZiAoIXRva2VuUmVmcmVzaFF1ZXJ5KSB7XG4gICAgICB0aHJvdyByZWZyZXNoVG9rZW5DYWxsZWRXaXRob3V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgdG9rZW5SZWZyZXNoUXVlcnkuZXhlY3V0ZShhcmdzLCB7IHRyaWdnZXJlZEludGVybmFsbHk6IG9wdGlvbnM/LnRyaWdnZXJlZEludGVybmFsbHkgfSk7XG5cbiAgICByZXR1cm4gdG9rZW5SZWZyZXNoUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBzZWxlY3RSb2xlID0gKGFyZ3M6IFJlcXVlc3RBcmdzPFRTZWxlY3RSb2xlQXJncz4pID0+IHtcbiAgICBpZiAoIXNlbGVjdFJvbGVRdWVyeSkge1xuICAgICAgdGhyb3cgc2VsZWN0Um9sZUNhbGxlZFdpdGhvdXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RSb2xlUXVlcnkuZXhlY3V0ZShhcmdzKTtcblxuICAgIHJldHVybiBzZWxlY3RSb2xlUXVlcnkucXVlcnkuY3JlYXRlU25hcHNob3QoKTtcbiAgfTtcblxuICBjb25zdCBsb2dvdXQgPSAoKSA9PiB7XG4gICAgZGVsZXRlQ29va2llKCk7XG4gICAgbG9naW5RdWVyeT8ucXVlcnkuZXhlY3V0ZS5yZXNldCgpO1xuICAgIHRva2VuTG9naW5RdWVyeT8ucXVlcnkuZXhlY3V0ZS5yZXNldCgpO1xuICAgIHRva2VuUmVmcmVzaFF1ZXJ5Py5xdWVyeS5leGVjdXRlLnJlc2V0KCk7XG4gICAgc2VsZWN0Um9sZVF1ZXJ5Py5xdWVyeS5leGVjdXRlLnJlc2V0KCk7XG4gICAgbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeS5zZXQobnVsbCk7XG4gIH07XG5cbiAgY29uc3QgZW5hYmxlQ29va2llID0gKCkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhb3B0aW9ucy5jb29raWUpIHtcbiAgICAgIHRocm93IGVuYWJsZUNvb2tpZUNhbGxlZFdpdGhvdXRDb29raWVDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb29raWVFbmFibGVkLnNldCh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlQ29va2llID0gKCkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhb3B0aW9ucy5jb29raWUpIHtcbiAgICAgIHRocm93IGRpc2FibGVDb29raWVDYWxsZWRXaXRob3V0Q29va2llQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29va2llRW5hYmxlZC5zZXQoZmFsc2UpO1xuICAgIGRlbGV0ZUNvb2tpZSgpO1xuICB9O1xuXG4gIGNvbnN0IHRyeUxvZ2luV2l0aENvb2tpZSA9ICgpID0+IHtcbiAgICBjb25zdCBpc0Nvb2tpZUVuYWJsZWQgPSBjb29raWVFbmFibGVkKCk7XG5cbiAgICBpZiAoIWlzQ29va2llRW5hYmxlZCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIHRocm93IGNvb2tpZUxvZ2luVHJpZWRCdXRDb29raWVEaXNhYmxlZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb2tpZSA9IGdldENvb2tpZShjb29raWVPcHRpb25zLm5hbWUpO1xuXG4gICAgaWYgKCFjb29raWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZWZyZXNoVG9rZW4oY29va2llT3B0aW9ucy5yZWZyZXNoQXJnc1RyYW5zZm9ybWVyKGNvb2tpZSkpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3Qgd3JpdGVDb29raWUgPSAocmVmcmVzaFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIGV4cGlyZXNJbkRheXMsIGRvbWFpbiwgcGF0aCwgc2FtZVNpdGUgfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBzZXRDb29raWUobmFtZSwgcmVmcmVzaFRva2VuLCBleHBpcmVzSW5EYXlzLCBkb21haW4sIHBhdGgsIHNhbWVTaXRlKTtcbiAgfTtcblxuICBjb25zdCBkZWxldGVDb29raWUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCBwYXRoLCBkb21haW4gfSA9IGNvb2tpZU9wdGlvbnM7XG5cbiAgICBjb3JlRGVsZXRlQ29va2llKG5hbWUsIHBhdGgsIGRvbWFpbik7XG4gIH07XG5cbiAgY29uc3QgZmluZE1vc3RSZWNlbnRRdWVyeSA9IChcbiAgICBxdWVyaWVzVG9TZWFyY2g6IEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPltdLFxuICApID0+IHtcbiAgICByZXR1cm4gcXVlcmllc1RvU2VhcmNoLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCFhY2MpIHJldHVybiBjdXJyO1xuXG4gICAgICAgIGNvbnN0IGFjY0V4cCA9IGFjYy5xdWVyeT8ucXVlcnkubGFzdFRpbWVFeGVjdXRlZEF0KCkgPz8gbnVsbDtcbiAgICAgICAgY29uc3QgY3VyckV4cCA9IGN1cnIucXVlcnk/LnF1ZXJ5Lmxhc3RUaW1lRXhlY3V0ZWRBdCgpID8/IG51bGw7XG5cbiAgICAgICAgaWYgKGN1cnJFeHAgPT09IG51bGwgfHwgYWNjRXhwID09PSBudWxsKSByZXR1cm4gYWNjO1xuXG4gICAgICAgIHJldHVybiBhY2NFeHAgPiBjdXJyRXhwID8gYWNjIDogY3VycjtcbiAgICAgIH0sXG4gICAgICBudWxsIGFzIEF1dGhQcm92aWRlclF1ZXJ5V2l0aFR5cGU8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPiB8IG51bGwsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXI6IEJlYXJlckF1dGhQcm92aWRlcjxUTG9naW5BcmdzLCBUVG9rZW5Mb2dpbkFyZ3MsIFRUb2tlblJlZnJlc2hBcmdzLCBUU2VsZWN0Um9sZUFyZ3M+ID0ge1xuICAgIGxvZ2luLFxuICAgIGxvZ2luV2l0aFRva2VuLFxuICAgIHJlZnJlc2hUb2tlbixcbiAgICBzZWxlY3RSb2xlLFxuICAgIGxvZ291dCxcbiAgICBlbmFibGVDb29raWUsXG4gICAgZGlzYWJsZUNvb2tpZSxcbiAgICB0cnlMb2dpbldpdGhDb29raWUsXG4gICAgbGF0ZXN0RXhlY3V0ZWRRdWVyeTogbGF0ZXN0Tm9uSW50ZXJuYWxRdWVyeS5hc1JlYWRvbmx5KCksXG4gICAgdG9rZW5zLFxuICB9O1xuXG4gIGlmIChjb29raWVFbmFibGVkKCkpIHtcbiAgICB0cnlMb2dpbldpdGhDb29raWUoKTtcbiAgfVxuXG4gIHJldHVybiBiZWFyZXJBdXRoUHJvdmlkZXI7XG59O1xuXG5leHBvcnQgY29uc3QgcHJvdmlkZUJlYXJlckF1dGhQcm92aWRlciA9IDxcbiAgVExvZ2luQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFRva2VuTG9naW5BcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuICBUVG9rZW5SZWZyZXNoQXJncyBleHRlbmRzIFF1ZXJ5QXJncyxcbiAgVFNlbGVjdFJvbGVBcmdzIGV4dGVuZHMgUXVlcnlBcmdzLFxuPihcbiAgY29uZmlnOiBCZWFyZXJBdXRoUHJvdmlkZXJDb25maWc8VExvZ2luQXJncywgVFRva2VuTG9naW5BcmdzLCBUVG9rZW5SZWZyZXNoQXJncywgVFNlbGVjdFJvbGVBcmdzPixcbikgPT4ge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IGNvbmZpZy50b2tlbixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBjcmVhdGVCZWFyZXJBdXRoUHJvdmlkZXIoY29uZmlnKSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
-
import { HttpErrorResponse, HttpEventType, } from '@angular/common/http';
|
|
3
|
-
import { computed, signal } from '@angular/core';
|
|
4
|
-
import { Subscription, catchError, retry, tap, throwError, timer } from 'rxjs';
|
|
5
|
-
import { buildTimestampFromSeconds } from '../request';
|
|
6
|
-
import { extractExpiresInSeconds, shouldRetryRequest, } from './query-utils';
|
|
7
|
-
export const SPEED_BUFFER_TIME_IN_MS = 2000;
|
|
8
|
-
export const createHttpRequest = (options) => {
|
|
9
|
-
let currentStreamSubscription = Subscription.EMPTY;
|
|
10
|
-
const { args, clientOptions, dependencies } = options;
|
|
11
|
-
const currentEvent = signal(null);
|
|
12
|
-
const loading = signal(null);
|
|
13
|
-
const error = signal(null);
|
|
14
|
-
const response = signal(null);
|
|
15
|
-
const lastLoadEventTime = signal(0);
|
|
16
|
-
const lastLoadEventAmount = signal(0);
|
|
17
|
-
const lastExecuteTime = signal(0);
|
|
18
|
-
const expiresIn = signal(null);
|
|
19
|
-
const isStale = computed(() => {
|
|
20
|
-
const expiresInTs = expiresIn();
|
|
21
|
-
return expiresInTs === null || expiresInTs < Date.now();
|
|
22
|
-
});
|
|
23
|
-
const stream = dependencies.httpClient
|
|
24
|
-
.request(options.method, options.fullPath, {
|
|
25
|
-
observe: 'events',
|
|
26
|
-
body: args?.body,
|
|
27
|
-
reportProgress: clientOptions?.reportProgress,
|
|
28
|
-
withCredentials: clientOptions?.withCredentials,
|
|
29
|
-
transferCache: clientOptions?.transferCache,
|
|
30
|
-
responseType: clientOptions?.responseType || 'json',
|
|
31
|
-
context: clientOptions?.context,
|
|
32
|
-
headers: args?.headers,
|
|
33
|
-
})
|
|
34
|
-
.pipe(tap((event) => updateState(event)), retry({
|
|
35
|
-
delay: (error, retryCount) => {
|
|
36
|
-
const retryOptions = { error, retryCount };
|
|
37
|
-
const retryResult = options.retryFn?.(retryOptions) || shouldRetryRequest(retryOptions);
|
|
38
|
-
if (!retryResult.retry) {
|
|
39
|
-
return throwError(() => error);
|
|
40
|
-
}
|
|
41
|
-
return timer(retryResult.delay);
|
|
42
|
-
},
|
|
43
|
-
}), catchError((e) => {
|
|
44
|
-
updateErrorState(e);
|
|
45
|
-
return throwError(() => e);
|
|
46
|
-
}));
|
|
47
|
-
const execute = (options) => {
|
|
48
|
-
if (loading() || (!isStale() && !options?.skipCache)) {
|
|
49
|
-
// Do not execute if there is already a request in progress or the request is not stale
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
currentStreamSubscription.unsubscribe();
|
|
53
|
-
lastExecuteTime.set(Date.now());
|
|
54
|
-
lastLoadEventTime.set(lastExecuteTime());
|
|
55
|
-
loading.set({
|
|
56
|
-
executeTime: lastExecuteTime(),
|
|
57
|
-
progress: null,
|
|
58
|
-
});
|
|
59
|
-
error.set(null);
|
|
60
|
-
expiresIn.set(null);
|
|
61
|
-
currentStreamSubscription = stream.subscribe();
|
|
62
|
-
return true;
|
|
63
|
-
};
|
|
64
|
-
const destroy = () => {
|
|
65
|
-
if (currentStreamSubscription.closed) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
currentStreamSubscription.unsubscribe();
|
|
69
|
-
return true;
|
|
70
|
-
};
|
|
71
|
-
const updateState = (event) => {
|
|
72
|
-
currentEvent.set(event);
|
|
73
|
-
switch (event.type) {
|
|
74
|
-
case HttpEventType.Response:
|
|
75
|
-
{
|
|
76
|
-
loading.set(null);
|
|
77
|
-
response.set(event.body);
|
|
78
|
-
const expiresInSeconds = options.cacheAdapter
|
|
79
|
-
? options.cacheAdapter(event.headers)
|
|
80
|
-
: extractExpiresInSeconds(event.headers);
|
|
81
|
-
const expiresInTimestamp = buildTimestampFromSeconds(expiresInSeconds);
|
|
82
|
-
expiresIn.set(expiresInTimestamp);
|
|
83
|
-
}
|
|
84
|
-
break;
|
|
85
|
-
case HttpEventType.UploadProgress:
|
|
86
|
-
case HttpEventType.DownloadProgress:
|
|
87
|
-
{
|
|
88
|
-
updateLoadingState(event);
|
|
89
|
-
}
|
|
90
|
-
break;
|
|
91
|
-
case HttpEventType.Sent:
|
|
92
|
-
case HttpEventType.ResponseHeader:
|
|
93
|
-
case HttpEventType.User:
|
|
94
|
-
{
|
|
95
|
-
// we don't care about these events
|
|
96
|
-
}
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
const updateErrorState = (errorResponse) => {
|
|
101
|
-
let err = errorResponse instanceof HttpErrorResponse ? errorResponse : null;
|
|
102
|
-
if (!err) {
|
|
103
|
-
err = new HttpErrorResponse({
|
|
104
|
-
error: errorResponse,
|
|
105
|
-
status: 0,
|
|
106
|
-
statusText: 'Unknown Error',
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
error.set(err);
|
|
110
|
-
loading.set(null);
|
|
111
|
-
currentEvent.set({ type: 'error', error: err });
|
|
112
|
-
};
|
|
113
|
-
const updateLoadingState = (event) => {
|
|
114
|
-
if (event.total === undefined) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const progress = {
|
|
118
|
-
total: event.total,
|
|
119
|
-
loaded: event.loaded,
|
|
120
|
-
percentage: (event.loaded / event.total) * 100,
|
|
121
|
-
speed: null,
|
|
122
|
-
remainingTime: null,
|
|
123
|
-
};
|
|
124
|
-
const state = {
|
|
125
|
-
executeTime: lastExecuteTime(),
|
|
126
|
-
progress,
|
|
127
|
-
};
|
|
128
|
-
const currentTime = Date.now();
|
|
129
|
-
const elapsedTimeSinceLastEvent = currentTime - lastLoadEventTime();
|
|
130
|
-
const elapsedTimeSinceLastExecute = currentTime - lastExecuteTime();
|
|
131
|
-
const loadedAmount = event.loaded - lastLoadEventAmount();
|
|
132
|
-
// We only want to calculate speed and remaining time after 2 seconds of the execution
|
|
133
|
-
// This is to avoid showing incorrect speed and remaining time when the request is very fast
|
|
134
|
-
if (elapsedTimeSinceLastExecute > SPEED_BUFFER_TIME_IN_MS) {
|
|
135
|
-
const speed = (loadedAmount / elapsedTimeSinceLastEvent) * 1000;
|
|
136
|
-
progress.speed = speed * 1000;
|
|
137
|
-
progress.remainingTime = Math.round((event.total - event.loaded) / speed) * 1000;
|
|
138
|
-
}
|
|
139
|
-
lastLoadEventTime.set(currentTime);
|
|
140
|
-
lastLoadEventAmount.set(event.loaded);
|
|
141
|
-
loading.set(state);
|
|
142
|
-
};
|
|
143
|
-
const httpRequest = {
|
|
144
|
-
execute,
|
|
145
|
-
destroy,
|
|
146
|
-
loading: loading.asReadonly(),
|
|
147
|
-
error: error.asReadonly(),
|
|
148
|
-
response: response.asReadonly(),
|
|
149
|
-
currentEvent: currentEvent.asReadonly(),
|
|
150
|
-
isStale,
|
|
151
|
-
};
|
|
152
|
-
return httpRequest;
|
|
153
|
-
};
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2V4cGVyaW1lbnRhbC9odHRwLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBRXpELE9BQU8sRUFHTCxpQkFBaUIsRUFFakIsYUFBYSxHQUVkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUl2RCxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUEySTVDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQTBCLE9BQXdDLEVBQUUsRUFBRTtJQUNyRyxJQUFJLHlCQUF5QixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFFbkQsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXRELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBeUQsSUFBSSxDQUFDLENBQUM7SUFDMUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFpQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQTJCLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBNkIsSUFBSSxDQUFDLENBQUM7SUFFMUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFD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QUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuXG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwQ29udGV4dCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEV2ZW50VHlwZSxcbiAgSHR0cFByb2dyZXNzRXZlbnQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBjYXRjaEVycm9yLCByZXRyeSwgdGFwLCB0aHJvd0Vycm9yLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlBcmdzLCBSZXF1ZXN0QXJncywgUmVzcG9uc2VUeXBlIH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBDYWNoZUFkYXB0ZXJGbiB9IGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBRdWVyeU1ldGhvZCB9IGZyb20gJy4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQge1xuICBTaG91bGRSZXRyeVJlcXVlc3RGbixcbiAgU2hvdWxkUmV0cnlSZXF1ZXN0T3B0aW9ucyxcbiAgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMsXG4gIHNob3VsZFJldHJ5UmVxdWVzdCxcbn0gZnJvbSAnLi9xdWVyeS11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBTUEVFRF9CVUZGRVJfVElNRV9JTl9NUyA9IDIwMDA7XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0VHJhbnNmZXJDYWNoZUNvbmZpZyA9XG4gIHwgYm9vbGVhblxuICB8IHtcbiAgICAgIGluY2x1ZGVIZWFkZXJzPzogc3RyaW5nW107XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RSZXNwb25zZVR5cGUgPSAnanNvbicgfCAndGV4dCcgfCAnYmxvYicgfCAnYXJyYXlidWZmZXInO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdERlcGVuZGVuY2llcyA9IHtcbiAgLyoqIFRoZSBodHRwIGNsaWVudCBpbnN0YW5jZSB0byB1c2UgZm9yIHRoZSByZXF1ZXN0ICovXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVIdHRwUmVxdWVzdENsaWVudE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlcG9ydCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlcXVlc3Qgb3Igbm90LiBJZiB0aGUgZmV0Y2ggYmFja2VuZCBpcyB1c2VkLCB0aGlzIHdpbGwgb25seSB3b3JrIGZvciBkb3dubG9hZHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmRldi9ndWlkZS9odHRwL21ha2luZy1yZXF1ZXN0cyNyZWNlaXZpbmctcmF3LXByb2dyZXNzLWV2ZW50c1xuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgY3JlZGVudGlhbHMgaW4gdGhlIHJlcXVlc3Qgb3Igbm90XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGFjY2VwdHMgZWl0aGVyIGEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSB0cmFuc2ZlcnJpbmcgY2FjaGUgZm9yIGVsaWdpYmxlXG4gICAqIHJlcXVlc3RzIHBlcmZvcm1lZCB1c2luZyBgSHR0cENsaWVudGAsIG9yIGFuIG9iamVjdCwgd2hpY2ggYWxsb3dzIHRvIGNvbmZpZ3VyZSBjYWNoZVxuICAgKiBwYXJhbWV0ZXJzLCBzdWNoIGFzIHdoaWNoIGhlYWRlcnMgc2hvdWxkIGJlIGluY2x1ZGVkIChubyBoZWFkZXJzIGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0KS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgb3ZlcnJpZGUgdGhlIG9wdGlvbnMgcGFzc2VkIHRvIGBwcm92aWRlQ2xpZW50SHlkcmF0aW9uKClgIGZvciB0aGlzXG4gICAqIHBhcnRpY3VsYXIgcmVxdWVzdFxuICAgKi9cbiAgdHJhbnNmZXJDYWNoZT86IEh0dHBSZXF1ZXN0VHJhbnNmZXJDYWNoZUNvbmZpZztcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHR5cGUgb2YgdGhlIHJlcXVlc3RcbiAgICogQGRlZmF1bHQgJ2pzb24nXG4gICAqL1xuICByZXNwb25zZVR5cGU/OiBIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQgb2YgdGhlIHJlcXVlc3RcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmRldi9ndWlkZS9odHRwL2ludGVyY2VwdG9ycyNyZXF1ZXN0LWFuZC1yZXNwb25zZS1tZXRhZGF0YVxuICAgKi9cbiAgY29udGV4dD86IEh0dHBDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlSHR0cFJlcXVlc3RPcHRpb25zPFRBcmdzIGV4dGVuZHMgUXVlcnlBcmdzPiA9IHtcbiAgLyoqIFRoZSBIVFRQIG1ldGhvZCBvZiB0aGUgcmVxdWVzdCAqL1xuICBtZXRob2Q6IFF1ZXJ5TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBwYXRoIG9mIHRoZSByZXF1ZXN0XG4gICAqIEBleGFtcGxlICdodHRwczovL2FwaS5leGFtcGxlLmNvbS92MS91c2VycydcbiAgICovXG4gIGZ1bGxQYXRoOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBkYXRhIG9mIHRoZSByZXF1ZXN0ICovXG4gIGFyZ3M/OiBSZXF1ZXN0QXJnczxUQXJncz4gfCBudWxsO1xuXG4gIC8qKiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoZSByZXF1ZXN0ICovXG4gIGRlcGVuZGVuY2llczogQ3JlYXRlSHR0cFJlcXVlc3REZXBlbmRlbmNpZXM7XG5cbiAgLyoqIFRoZSBjbGllbnQgb3B0aW9ucyBvZiB0aGUgcmVxdWVzdCAqL1xuICBjbGllbnRPcHRpb25zPzogQ3JlYXRlSHR0cFJlcXVlc3RDbGllbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgYWRhcHRlciBmdW5jdGlvbiB0byB1c2UgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEBkZWZhdWx0IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKClcbiAgICovXG4gIGNhY2hlQWRhcHRlcj86IENhY2hlQWRhcHRlckZuO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgZnVuY3Rpb24gdG8gdXNlIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAZGVmYXVsdCBzaG91bGRSZXRyeVJlcXVlc3QoKVxuICAgKi9cbiAgcmV0cnlGbj86IFNob3VsZFJldHJ5UmVxdWVzdEZuO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RMb2FkaW5nU3RhdGUgPSB7XG4gIC8qKiBUaGUgdGltZSB3aGVuIHRoZSByZXF1ZXN0IHdhcyBleGVjdXRlZCBpbiBtcyAqL1xuICBleGVjdXRlVGltZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlcXVlc3QuIE51bGwgaWYgcmVwb3J0UHJvZ3Jlc3MgaXMgZmFsc2Ugb3IgcHJvZ3Jlc3MgaXMgbm90IGF2YWlsYWJsZSAvIHVuc3VwcG9ydGVkICovXG4gIHByb2dyZXNzOiBIdHRwUmVxdWVzdExvYWRpbmdQcm9ncmVzc1N0YXRlIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEh0dHBSZXF1ZXN0TG9hZGluZ1Byb2dyZXNzU3RhdGUgPSB7XG4gIC8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkICovXG4gIHRvdGFsOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi9cbiAgbG9hZGVkOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBwZXJjZW50YWdlIG9mIHRoZSB0cmFuc2ZlciB0aGF0IGlzIGNvbXBsZXRlZCAqL1xuICBwZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBzcGVlZCBvZiB0aGUgdHJhbnNmZXIgaW4gYnl0ZXMgcGVyIG1pbGxpc2Vjb25kICovXG4gIHNwZWVkOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgZXN0aW1hdGVkIHJlbWFpbmluZyB0aW1lIGluIG1pbGxpc2Vjb25kcyAqL1xuICByZW1haW5pbmdUaW1lOiBudW1iZXIgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3Q8VEFyZ3MgZXh0ZW5kcyBRdWVyeUFyZ3M+ID0ge1xuICAvKiogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgKi9cbiAgZXhlY3V0ZTogKG9wdGlvbnM/OiB7IHNraXBDYWNoZT86IGJvb2xlYW4gfSkgPT4gYm9vbGVhbjtcblxuICAvKiogRGVzdHJveXMgdGhlIHJlcXVlc3QgKGNhbmNlbHMgaXQgaWYgaW4gcHJvZ3Jlc3MpICovXG4gIGRlc3Ryb3k6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBsb2FkaW5nIHN0YXRlIG9mIHRoZSByZXF1ZXN0ICovXG4gIGxvYWRpbmc6IFNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+O1xuXG4gIC8qKiBUaGUgZXJyb3Igc3RhdGUgb2YgdGhlIHJlcXVlc3QgKi9cbiAgZXJyb3I6IFNpZ25hbDxIdHRwRXJyb3JSZXNwb25zZSB8IG51bGw+O1xuXG4gIC8qKiBUaGUgcmVzcG9uc2Ugc3RhdGUgb2YgdGhlIHJlcXVlc3QgKi9cbiAgcmVzcG9uc2U6IFNpZ25hbDxSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbD47XG5cbiAgLyoqIFRoZSBjdXJyZW50IGV2ZW50IG9mIHRoZSByZXF1ZXN0ICovXG4gIGN1cnJlbnRFdmVudDogU2lnbmFsPEh0dHBFdmVudDxSZXNwb25zZVR5cGU8VEFyZ3M+PiB8IEh0dHBFcnJvckV2ZW50IHwgbnVsbD47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgc3RhbGUgb3Igbm90IGFrYSB0aGUgY2FjaGUgaGVhZGVyIGhhcyBleHBpcmVkICovXG4gIGlzU3RhbGU6IFNpZ25hbDxib29sZWFuPjtcbn07XG5cbi8qKiBBIGN1c3RvbSBlcnJvciBldmVudCBzaW5jZSB0aGUgQW5ndWxhciBodHRwIGNsaWVudCBkb2VzIG5vdCBwcm92aWRlIGEgc3BlY2lmaWMgZXZlbnQgZm9yIGVycm9ycyAqL1xuZXhwb3J0IHR5cGUgSHR0cEVycm9yRXZlbnQgPSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVIdHRwUmVxdWVzdCA9IDxUQXJncyBleHRlbmRzIFF1ZXJ5QXJncz4ob3B0aW9uczogQ3JlYXRlSHR0cFJlcXVlc3RPcHRpb25zPFRBcmdzPikgPT4ge1xuICBsZXQgY3VycmVudFN0cmVhbVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBjb25zdCB7IGFyZ3MsIGNsaWVudE9wdGlvbnMsIGRlcGVuZGVuY2llcyB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjdXJyZW50RXZlbnQgPSBzaWduYWw8SHR0cEV2ZW50PFJlc3BvbnNlVHlwZTxUQXJncz4+IHwgSHR0cEVycm9yRXZlbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9hZGluZyA9IHNpZ25hbDxIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBlcnJvciA9IHNpZ25hbDxIdHRwRXJyb3JSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZXNwb25zZSA9IHNpZ25hbDxSZXNwb25zZVR5cGU8VEFyZ3M+IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgbGFzdExvYWRFdmVudFRpbWUgPSBzaWduYWwoMCk7XG4gIGNvbnN0IGxhc3RMb2FkRXZlbnRBbW91bnQgPSBzaWduYWwoMCk7XG4gIGNvbnN0IGxhc3RFeGVjdXRlVGltZSA9IHNpZ25hbCgwKTtcbiAgY29uc3QgZXhwaXJlc0luID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzU3RhbGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZXhwaXJlc0luVHMgPSBleHBpcmVzSW4oKTtcblxuICAgIHJldHVybiBleHBpcmVzSW5UcyA9PT0gbnVsbCB8fCBleHBpcmVzSW5UcyA8IERhdGUubm93KCk7XG4gIH0pO1xuXG4gIGNvbnN0IHN0cmVhbSA9IGRlcGVuZGVuY2llcy5odHRwQ2xpZW50XG4gICAgLnJlcXVlc3Qob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMuZnVsbFBhdGgsIHtcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgYm9keTogYXJncz8uYm9keSxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBjbGllbnRPcHRpb25zPy5yZXBvcnRQcm9ncmVzcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogY2xpZW50T3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgdHJhbnNmZXJDYWNoZTogY2xpZW50T3B0aW9ucz8udHJhbnNmZXJDYWNoZSxcbiAgICAgIHJlc3BvbnNlVHlwZTogY2xpZW50T3B0aW9ucz8ucmVzcG9uc2VUeXBlIHx8ICdqc29uJyxcbiAgICAgIGNvbnRleHQ6IGNsaWVudE9wdGlvbnM/LmNvbnRleHQsXG4gICAgICBoZWFkZXJzOiBhcmdzPy5oZWFkZXJzLFxuICAgIH0pXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50KSA9PiB1cGRhdGVTdGF0ZShldmVudCkpLFxuICAgICAgcmV0cnkoe1xuICAgICAgICBkZWxheTogKGVycm9yLCByZXRyeUNvdW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmV0cnlPcHRpb25zOiBTaG91bGRSZXRyeVJlcXVlc3RPcHRpb25zID0geyBlcnJvciwgcmV0cnlDb3VudCB9O1xuXG4gICAgICAgICAgY29uc3QgcmV0cnlSZXN1bHQgPSBvcHRpb25zLnJldHJ5Rm4/LihyZXRyeU9wdGlvbnMpIHx8IHNob3VsZFJldHJ5UmVxdWVzdChyZXRyeU9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKCFyZXRyeVJlc3VsdC5yZXRyeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0aW1lcihyZXRyeVJlc3VsdC5kZWxheSk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgdXBkYXRlRXJyb3JTdGF0ZShlKTtcblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IChvcHRpb25zPzogeyBza2lwQ2FjaGU/OiBib29sZWFuIH0pID0+IHtcbiAgICBpZiAobG9hZGluZygpIHx8ICghaXNTdGFsZSgpICYmICFvcHRpb25zPy5za2lwQ2FjaGUpKSB7XG4gICAgICAvLyBEbyBub3QgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcmVxdWVzdCBpbiBwcm9ncmVzcyBvciB0aGUgcmVxdWVzdCBpcyBub3Qgc3RhbGVcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXJyZW50U3RyZWFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBsYXN0RXhlY3V0ZVRpbWUuc2V0KERhdGUubm93KCkpO1xuICAgIGxhc3RMb2FkRXZlbnRUaW1lLnNldChsYXN0RXhlY3V0ZVRpbWUoKSk7XG5cbiAgICBsb2FkaW5nLnNldCh7XG4gICAgICBleGVjdXRlVGltZTogbGFzdEV4ZWN1dGVUaW1lKCksXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICB9KTtcbiAgICBlcnJvci5zZXQobnVsbCk7XG4gICAgZXhwaXJlc0luLnNldChudWxsKTtcblxuICAgIGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24gPSBzdHJlYW0uc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmIChjdXJyZW50U3RyZWFtU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGN1cnJlbnRTdHJlYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVN0YXRlID0gKGV2ZW50OiBIdHRwRXZlbnQ8UmVzcG9uc2VUeXBlPFRBcmdzPj4pID0+IHtcbiAgICBjdXJyZW50RXZlbnQuc2V0KGV2ZW50KTtcblxuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICB7XG4gICAgICAgICAgbG9hZGluZy5zZXQobnVsbCk7XG4gICAgICAgICAgcmVzcG9uc2Uuc2V0KGV2ZW50LmJvZHkpO1xuXG4gICAgICAgICAgY29uc3QgZXhwaXJlc0luU2Vjb25kcyA9IG9wdGlvbnMuY2FjaGVBZGFwdGVyXG4gICAgICAgICAgICA/IG9wdGlvbnMuY2FjaGVBZGFwdGVyKGV2ZW50LmhlYWRlcnMpXG4gICAgICAgICAgICA6IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzKGV2ZW50LmhlYWRlcnMpO1xuICAgICAgICAgIGNvbnN0IGV4cGlyZXNJblRpbWVzdGFtcCA9IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMoZXhwaXJlc0luU2Vjb25kcyk7XG4gICAgICAgICAgZXhwaXJlc0luLnNldChleHBpcmVzSW5UaW1lc3RhbXApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcbiAgICAgICAge1xuICAgICAgICAgIHVwZGF0ZUxvYWRpbmdTdGF0ZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5TZW50OlxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlSGVhZGVyOlxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlVzZXI6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGV2ZW50c1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVFcnJvclN0YXRlID0gKGVycm9yUmVzcG9uc2U6IHVua25vd24pID0+IHtcbiAgICBsZXQgZXJyID0gZXJyb3JSZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlID8gZXJyb3JSZXNwb25zZSA6IG51bGw7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgZXJyID0gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgZXJyb3I6IGVycm9yUmVzcG9uc2UsXG4gICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ1Vua25vd24gRXJyb3InLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZXJyb3Iuc2V0KGVycik7XG4gICAgbG9hZGluZy5zZXQobnVsbCk7XG4gICAgY3VycmVudEV2ZW50LnNldCh7IHR5cGU6ICdlcnJvcicsIGVycm9yOiBlcnIgfSk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlTG9hZGluZ1N0YXRlID0gKGV2ZW50OiBIdHRwUHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC50b3RhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3M6IEh0dHBSZXF1ZXN0TG9hZGluZ1Byb2dyZXNzU3RhdGUgPSB7XG4gICAgICB0b3RhbDogZXZlbnQudG90YWwsXG4gICAgICBsb2FkZWQ6IGV2ZW50LmxvYWRlZCxcbiAgICAgIHBlcmNlbnRhZ2U6IChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAxMDAsXG4gICAgICBzcGVlZDogbnVsbCxcbiAgICAgIHJlbWFpbmluZ1RpbWU6IG51bGwsXG4gICAgfTtcblxuICAgIGNvbnN0IHN0YXRlOiBIdHRwUmVxdWVzdExvYWRpbmdTdGF0ZSA9IHtcbiAgICAgIGV4ZWN1dGVUaW1lOiBsYXN0RXhlY3V0ZVRpbWUoKSxcbiAgICAgIHByb2dyZXNzLFxuICAgIH07XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZWxhcHNlZFRpbWVTaW5jZUxhc3RFdmVudCA9IGN1cnJlbnRUaW1lIC0gbGFzdExvYWRFdmVudFRpbWUoKTtcbiAgICBjb25zdCBlbGFwc2VkVGltZVNpbmNlTGFzdEV4ZWN1dGUgPSBjdXJyZW50VGltZSAtIGxhc3RFeGVjdXRlVGltZSgpO1xuICAgIGNvbnN0IGxvYWRlZEFtb3VudCA9IGV2ZW50LmxvYWRlZCAtIGxhc3RMb2FkRXZlbnRBbW91bnQoKTtcblxuICAgIC8vIFdlIG9ubHkgd2FudCB0byBjYWxjdWxhdGUgc3BlZWQgYW5kIHJlbWFpbmluZyB0aW1lIGFmdGVyIDIgc2Vjb25kcyBvZiB0aGUgZXhlY3V0aW9uXG4gICAgLy8gVGhpcyBpcyB0byBhdm9pZCBzaG93aW5nIGluY29ycmVjdCBzcGVlZCBhbmQgcmVtYWluaW5nIHRpbWUgd2hlbiB0aGUgcmVxdWVzdCBpcyB2ZXJ5IGZhc3RcbiAgICBpZiAoZWxhcHNlZFRpbWVTaW5jZUxhc3RFeGVjdXRlID4gU1BFRURfQlVGRkVSX1RJTUVfSU5fTVMpIHtcbiAgICAgIGNvbnN0IHNwZWVkID0gKGxvYWRlZEFtb3VudCAvIGVsYXBzZWRUaW1lU2luY2VMYXN0RXZlbnQpICogMTAwMDtcblxuICAgICAgcHJvZ3Jlc3Muc3BlZWQgPSBzcGVlZCAqIDEwMDA7XG4gICAgICBwcm9ncmVzcy5yZW1haW5pbmdUaW1lID0gTWF0aC5yb3VuZCgoZXZlbnQudG90YWwgLSBldmVudC5sb2FkZWQpIC8gc3BlZWQpICogMTAwMDtcbiAgICB9XG5cbiAgICBsYXN0TG9hZEV2ZW50VGltZS5zZXQoY3VycmVudFRpbWUpO1xuICAgIGxhc3RMb2FkRXZlbnRBbW91bnQuc2V0KGV2ZW50LmxvYWRlZCk7XG5cbiAgICBsb2FkaW5nLnNldChzdGF0ZSk7XG4gIH07XG5cbiAgY29uc3QgaHR0cFJlcXVlc3Q6IEh0dHBSZXF1ZXN0PFRBcmdzPiA9IHtcbiAgICBleGVjdXRlLFxuICAgIGRlc3Ryb3ksXG4gICAgbG9hZGluZzogbG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IGVycm9yLmFzUmVhZG9ubHkoKSxcbiAgICByZXNwb25zZTogcmVzcG9uc2UuYXNSZWFkb25seSgpLFxuICAgIGN1cnJlbnRFdmVudDogY3VycmVudEV2ZW50LmFzUmVhZG9ubHkoKSxcbiAgICBpc1N0YWxlLFxuICB9O1xuXG4gIHJldHVybiBodHRwUmVxdWVzdDtcbn07XG4iXX0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export * from './bearer-auth-provider';
|
|
2
|
-
export * from './bearer-auth-provider-config';
|
|
3
|
-
export * from './http-request';
|
|
4
|
-
export * from './paged-query';
|
|
5
|
-
export * from './query';
|
|
6
|
-
export * from './query-client';
|
|
7
|
-
export * from './query-client-config';
|
|
8
|
-
export * from './query-creator';
|
|
9
|
-
export * from './query-creator-templates';
|
|
10
|
-
export * from './query-dependencies';
|
|
11
|
-
export * from './query-errors';
|
|
12
|
-
export * from './query-execute';
|
|
13
|
-
export * from './query-execute-utils';
|
|
14
|
-
export * from './query-features';
|
|
15
|
-
export * from './query-repository';
|
|
16
|
-
export * from './query-snapshot';
|
|
17
|
-
export * from './query-stack';
|
|
18
|
-
export * from './query-state';
|
|
19
|
-
export * from './query-utils';
|
|
20
|
-
export * from './secure-query';
|
|
21
|
-
export * from './secure-query-creator';
|
|
22
|
-
export * from './secure-query-execute';
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZXhwZXJpbWVudGFsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmVhcmVyLWF1dGgtcHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9iZWFyZXItYXV0aC1wcm92aWRlci1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdlZC1xdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktY2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktY2xpZW50LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWNyZWF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1jcmVhdG9yLXRlbXBsYXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWRlcGVuZGVuY2llcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWVycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWV4ZWN1dGUnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1leGVjdXRlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktZmVhdHVyZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1yZXBvc2l0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktc25hcHNob3QnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1zdGFjayc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cmUtcXVlcnknO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cmUtcXVlcnktY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1xdWVyeS1leGVjdXRlJztcbiJdfQ==
|