@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.
Files changed (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/fesm2022/ethlete-query.mjs +21 -37
  3. package/fesm2022/ethlete-query.mjs.map +1 -1
  4. package/package.json +5 -7
  5. package/esm2022/ethlete-query.mjs +0 -5
  6. package/esm2022/index.mjs +0 -21
  7. package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
  8. package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
  9. package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
  10. package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
  11. package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
  12. package/esm2022/lib/auth/index.mjs +0 -6
  13. package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
  14. package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
  15. package/esm2022/lib/class-validator/index.mjs +0 -3
  16. package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
  17. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
  18. package/esm2022/lib/devtools/pipes/index.mjs +0 -2
  19. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
  20. package/esm2022/lib/devtools/utils/index.mjs +0 -2
  21. package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
  22. package/esm2022/lib/directives/index.mjs +0 -4
  23. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
  24. package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
  25. package/esm2022/lib/directives/query.directive.mjs +0 -123
  26. package/esm2022/lib/entity/entity-store.mjs +0 -127
  27. package/esm2022/lib/entity/entity.types.mjs +0 -2
  28. package/esm2022/lib/entity/entity.utils.mjs +0 -29
  29. package/esm2022/lib/entity/index.mjs +0 -4
  30. package/esm2022/lib/experimental/bearer-auth-provider-config.mjs +0 -19
  31. package/esm2022/lib/experimental/bearer-auth-provider.mjs +0 -245
  32. package/esm2022/lib/experimental/http-request.mjs +0 -154
  33. package/esm2022/lib/experimental/index.mjs +0 -23
  34. package/esm2022/lib/experimental/paged-query.mjs +0 -194
  35. package/esm2022/lib/experimental/query-client-config.mjs +0 -13
  36. package/esm2022/lib/experimental/query-client.mjs +0 -16
  37. package/esm2022/lib/experimental/query-creator-templates.mjs +0 -33
  38. package/esm2022/lib/experimental/query-creator.mjs +0 -28
  39. package/esm2022/lib/experimental/query-dependencies.mjs +0 -14
  40. package/esm2022/lib/experimental/query-errors.mjs +0 -70
  41. package/esm2022/lib/experimental/query-execute-utils.mjs +0 -54
  42. package/esm2022/lib/experimental/query-execute.mjs +0 -14
  43. package/esm2022/lib/experimental/query-features.mjs +0 -126
  44. package/esm2022/lib/experimental/query-repository.mjs +0 -97
  45. package/esm2022/lib/experimental/query-snapshot.mjs +0 -45
  46. package/esm2022/lib/experimental/query-stack.mjs +0 -65
  47. package/esm2022/lib/experimental/query-state.mjs +0 -20
  48. package/esm2022/lib/experimental/query-utils.mjs +0 -176
  49. package/esm2022/lib/experimental/query.mjs +0 -29
  50. package/esm2022/lib/experimental/secure-query-creator.mjs +0 -15
  51. package/esm2022/lib/experimental/secure-query-execute.mjs +0 -80
  52. package/esm2022/lib/experimental/secure-query.mjs +0 -33
  53. package/esm2022/lib/gql/gql.mjs +0 -23
  54. package/esm2022/lib/gql/index.mjs +0 -2
  55. package/esm2022/lib/infinite-query/index.mjs +0 -4
  56. package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
  57. package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
  58. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
  59. package/esm2022/lib/logger/index.mjs +0 -2
  60. package/esm2022/lib/logger/logger.mjs +0 -16
  61. package/esm2022/lib/query/index.mjs +0 -4
  62. package/esm2022/lib/query/query.mjs +0 -431
  63. package/esm2022/lib/query/query.types.mjs +0 -2
  64. package/esm2022/lib/query/query.utils.mjs +0 -253
  65. package/esm2022/lib/query-client/index.mjs +0 -4
  66. package/esm2022/lib/query-client/query-client.mjs +0 -80
  67. package/esm2022/lib/query-client/query-client.types.mjs +0 -2
  68. package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
  69. package/esm2022/lib/query-creator/index.mjs +0 -3
  70. package/esm2022/lib/query-creator/query-creator.mjs +0 -55
  71. package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
  72. package/esm2022/lib/query-form/index.mjs +0 -4
  73. package/esm2022/lib/query-form/query-form.mjs +0 -412
  74. package/esm2022/lib/query-form/query-form.types.mjs +0 -2
  75. package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
  76. package/esm2022/lib/query-store/index.mjs +0 -2
  77. package/esm2022/lib/query-store/query-store.mjs +0 -144
  78. package/esm2022/lib/request/index.mjs +0 -4
  79. package/esm2022/lib/request/request.mjs +0 -196
  80. package/esm2022/lib/request/request.types.mjs +0 -2
  81. package/esm2022/lib/request/request.util.mjs +0 -252
  82. package/esm2022/lib/symfony/index.mjs +0 -3
  83. package/esm2022/lib/symfony/symfony.types.mjs +0 -2
  84. package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
  85. package/esm2022/lib/utils/data.utils.mjs +0 -138
  86. package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
  87. package/esm2022/lib/utils/def.util.mjs +0 -8
  88. 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==