@stemy/ngx-utils 13.6.13 → 13.6.15
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/assets/ng.mjs +5 -0
- package/esm2020/ngx-utils/components/dynamic-table/dynamic-table.component.mjs +3 -3
- package/fesm2015/stemy-ngx-utils.mjs +2 -2
- package/fesm2015/stemy-ngx-utils.mjs.map +1 -1
- package/fesm2020/stemy-ngx-utils.mjs +2 -2
- package/fesm2020/stemy-ngx-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/bundles/stemy-ngx-utils.umd.js +0 -6380
- package/bundles/stemy-ngx-utils.umd.js.map +0 -1
- package/esm2015/ngx-utils/common-types.js +0 -121
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +0 -139
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +0 -96
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +0 -51
- package/esm2015/ngx-utils/directives/async-method.base.js +0 -66
- package/esm2015/ngx-utils/directives/async-method.directive.js +0 -17
- package/esm2015/ngx-utils/directives/background.directive.js +0 -51
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +0 -19
- package/esm2015/ngx-utils/directives/global-template.directive.js +0 -27
- package/esm2015/ngx-utils/directives/icon.directive.js +0 -59
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +0 -88
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +0 -33
- package/esm2015/ngx-utils/directives/pagination.directive.js +0 -76
- package/esm2015/ngx-utils/directives/resource-if.directive.js +0 -51
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +0 -35
- package/esm2015/ngx-utils/directives/sticky.directive.js +0 -48
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +0 -70
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +0 -26
- package/esm2015/ngx-utils/ngx-utils.module.js +0 -246
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +0 -21
- package/esm2015/ngx-utils/pipes/entries.pipe.js +0 -24
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +0 -27
- package/esm2015/ngx-utils/pipes/filter.pipe.js +0 -33
- package/esm2015/ngx-utils/pipes/find.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +0 -13
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +0 -37
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +0 -23
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/join.pipe.js +0 -15
- package/esm2015/ngx-utils/pipes/keys.pipe.js +0 -18
- package/esm2015/ngx-utils/pipes/map.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/max.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/min.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/pop.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +0 -26
- package/esm2015/ngx-utils/pipes/remap.pipe.js +0 -28
- package/esm2015/ngx-utils/pipes/replace.pipe.js +0 -13
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +0 -20
- package/esm2015/ngx-utils/pipes/round.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +0 -32
- package/esm2015/ngx-utils/pipes/shift.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/split.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/translate.pipe.js +0 -81
- package/esm2015/ngx-utils/pipes/values.pipe.js +0 -18
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +0 -56
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +0 -36
- package/esm2015/ngx-utils/services/acl.service.js +0 -81
- package/esm2015/ngx-utils/services/api.service.js +0 -39
- package/esm2015/ngx-utils/services/auth.service.js +0 -14
- package/esm2015/ngx-utils/services/base-http.client.js +0 -46
- package/esm2015/ngx-utils/services/base-http.service.js +0 -284
- package/esm2015/ngx-utils/services/config.service.js +0 -137
- package/esm2015/ngx-utils/services/error-handler.service.js +0 -49
- package/esm2015/ngx-utils/services/events.service.js +0 -24
- package/esm2015/ngx-utils/services/formatter.service.js +0 -46
- package/esm2015/ngx-utils/services/global-template.service.js +0 -35
- package/esm2015/ngx-utils/services/icon.service.js +0 -24
- package/esm2015/ngx-utils/services/language.service.js +0 -129
- package/esm2015/ngx-utils/services/open-api.service.js +0 -41
- package/esm2015/ngx-utils/services/promise.service.js +0 -52
- package/esm2015/ngx-utils/services/state.service.js +0 -181
- package/esm2015/ngx-utils/services/static-language.service.js +0 -152
- package/esm2015/ngx-utils/services/storage.service.js +0 -48
- package/esm2015/ngx-utils/services/toaster.service.js +0 -29
- package/esm2015/ngx-utils/services/translated-url.serializer.js +0 -70
- package/esm2015/ngx-utils/services/universal.service.js +0 -78
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +0 -40
- package/esm2015/ngx-utils/utils/array.utils.js +0 -107
- package/esm2015/ngx-utils/utils/auth.guard.js +0 -156
- package/esm2015/ngx-utils/utils/canvas.utils.js +0 -388
- package/esm2015/ngx-utils/utils/date.utils.js +0 -29
- package/esm2015/ngx-utils/utils/file-system.js +0 -25
- package/esm2015/ngx-utils/utils/file.utils.js +0 -90
- package/esm2015/ngx-utils/utils/generic-value.js +0 -20
- package/esm2015/ngx-utils/utils/geometry.js +0 -132
- package/esm2015/ngx-utils/utils/initializer.js +0 -20
- package/esm2015/ngx-utils/utils/loader.utils.js +0 -55
- package/esm2015/ngx-utils/utils/math.utils.js +0 -45
- package/esm2015/ngx-utils/utils/object.utils.js +0 -320
- package/esm2015/ngx-utils/utils/observable.utils.js +0 -63
- package/esm2015/ngx-utils/utils/reflect.utils.js +0 -33
- package/esm2015/ngx-utils/utils/set.utils.js +0 -20
- package/esm2015/ngx-utils/utils/string.utils.js +0 -28
- package/esm2015/ngx-utils/utils/timer.utils.js +0 -52
- package/esm2015/ngx-utils/utils/unique.utils.js +0 -24
- package/esm2015/ngx-utils/utils/vector.js +0 -77
- package/esm2015/public_api.js +0 -89
- package/esm2015/stemy-ngx-utils.js +0 -7
- package/fesm2015/stemy-ngx-utils.js +0 -5060
- package/fesm2015/stemy-ngx-utils.js.map +0 -1
- package/stemy-ngx-utils.metadata.json +0 -1
- package/tools/circular.js +0 -117
- package/tools/circular.js.map +0 -1
- package/tools/config.js +0 -79
- package/tools/config.js.map +0 -1
- package/tools/icons.js +0 -14
- package/tools/icons.js.map +0 -1
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ɵangular_packages_platform_browser_platform_browser_g as EventManagerPlugin } from "@angular/platform-browser";
|
|
2
|
-
import { Inject, Injectable } from "@angular/core";
|
|
3
|
-
import { DOCUMENT } from "@angular/common";
|
|
4
|
-
import { UniversalService } from "../services/universal.service";
|
|
5
|
-
export function emptyRemove() {
|
|
6
|
-
}
|
|
7
|
-
export class ScrollEventPlugin extends EventManagerPlugin {
|
|
8
|
-
constructor(doc, universal) {
|
|
9
|
-
super(doc);
|
|
10
|
-
this.universal = universal;
|
|
11
|
-
}
|
|
12
|
-
supports(eventName) {
|
|
13
|
-
return eventName === ScrollEventPlugin.EVENT_NAME;
|
|
14
|
-
}
|
|
15
|
-
addEventListener(element, eventName, handler) {
|
|
16
|
-
const zone = this.manager.getZone();
|
|
17
|
-
return zone.runOutsideAngular(() => {
|
|
18
|
-
if (this.universal.isServer)
|
|
19
|
-
return emptyRemove;
|
|
20
|
-
const callback = (e) => {
|
|
21
|
-
zone.run(() => handler(e));
|
|
22
|
-
};
|
|
23
|
-
element.addEventListener(eventName, callback);
|
|
24
|
-
return () => element.removeEventListener(eventName, callback);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
ScrollEventPlugin.EVENT_NAME = "scroll";
|
|
29
|
-
ScrollEventPlugin.decorators = [
|
|
30
|
-
{ type: Injectable }
|
|
31
|
-
];
|
|
32
|
-
ScrollEventPlugin.ctorParameters = () => [
|
|
33
|
-
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
34
|
-
{ type: UniversalService }
|
|
35
|
-
];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWV2ZW50LnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvcGx1Z2lucy9zY3JvbGwtZXZlbnQucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxREFBcUQsSUFBSSxrQkFBa0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RILE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUvRCxNQUFNLFVBQVUsV0FBVztBQUUzQixDQUFDO0FBR0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQUlyRCxZQUE4QixHQUFRLEVBQVUsU0FBMkI7UUFDdkUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRGlDLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBRTNFLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBUztRQUNkLE9BQU8sU0FBUyxLQUFLLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBb0IsRUFBRSxTQUFpQixFQUFFLE9BQWlCO1FBQ3ZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1lBQ2hELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBUSxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QyxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQXBCYyw0QkFBVSxHQUFXLFFBQVEsQ0FBQzs7WUFIaEQsVUFBVTs7OzRDQUtNLE1BQU0sU0FBQyxRQUFRO1lBWHhCLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ybVhbmd1bGFyX3BhY2thZ2VzX3BsYXRmb3JtX2Jyb3dzZXJfcGxhdGZvcm1fYnJvd3Nlcl9nIGFzIEV2ZW50TWFuYWdlclBsdWdpbn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtTdHJpbmdVdGlsc30gZnJvbSBcIi4uL3V0aWxzL3N0cmluZy51dGlsc1wiO1xyXG5pbXBvcnQge1VuaXZlcnNhbFNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlcy91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5UmVtb3ZlKCk6IHZvaWQge1xyXG5cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2Nyb2xsRXZlbnRQbHVnaW4gZXh0ZW5kcyBFdmVudE1hbmFnZXJQbHVnaW4ge1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIEVWRU5UX05BTUU6IHN0cmluZyA9IFwic2Nyb2xsXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgZG9jOiBhbnksIHByaXZhdGUgdW5pdmVyc2FsOiBVbml2ZXJzYWxTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoZG9jKTtcclxuICAgIH1cclxuXHJcbiAgICBzdXBwb3J0cyhldmVudE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZXZlbnROYW1lID09PSBTY3JvbGxFdmVudFBsdWdpbi5FVkVOVF9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBoYW5kbGVyOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcclxuICAgICAgICBjb25zdCB6b25lID0gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtcclxuICAgICAgICByZXR1cm4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVuaXZlcnNhbC5pc1NlcnZlcikgcmV0dXJuIGVtcHR5UmVtb3ZlO1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IChlOiBFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgem9uZS5ydW4oKCkgPT4gaGFuZGxlcihlKSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Injector } from "@angular/core";
|
|
2
|
-
import { StateService } from "./state.service";
|
|
3
|
-
import { AUTH_SERVICE } from "../common-types";
|
|
4
|
-
import { ObjectUtils } from "../utils/object.utils";
|
|
5
|
-
import { AuthGuard } from "../utils/auth.guard";
|
|
6
|
-
const emptyGuards = [];
|
|
7
|
-
export class AclService {
|
|
8
|
-
constructor(injector, state, auth) {
|
|
9
|
-
this.injector = injector;
|
|
10
|
-
this.state = state;
|
|
11
|
-
this.auth = auth;
|
|
12
|
-
this.components = [];
|
|
13
|
-
this.auth.userChanged.subscribe(() => {
|
|
14
|
-
this.components.forEach(t => t.dirty = true);
|
|
15
|
-
const info = this.getStateInfo();
|
|
16
|
-
const check = info && info.guard instanceof AuthGuard ? info.guard.checkRoute(info.route) : Promise.resolve(true);
|
|
17
|
-
check.then(result => {
|
|
18
|
-
if (result) {
|
|
19
|
-
if (!info || !info.dirty)
|
|
20
|
-
return;
|
|
21
|
-
info.dirty = false;
|
|
22
|
-
const component = info.component;
|
|
23
|
-
if (!info.component)
|
|
24
|
-
return;
|
|
25
|
-
if (info.first) {
|
|
26
|
-
if (ObjectUtils.isFunction(component.onUserInitialized)) {
|
|
27
|
-
component.onUserInitialized();
|
|
28
|
-
}
|
|
29
|
-
info.first = false;
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (ObjectUtils.isFunction(component.onUserChanged)) {
|
|
33
|
-
component.onUserChanged();
|
|
34
|
-
}
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
info.guard.getReturnState(info.route).then(returnState => {
|
|
38
|
-
if (!returnState)
|
|
39
|
-
return;
|
|
40
|
-
this.state.navigate(returnState);
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
this.state.subscribe(() => {
|
|
45
|
-
const info = this.getStateInfo();
|
|
46
|
-
if (!(info === null || info === void 0 ? void 0 : info.component))
|
|
47
|
-
return;
|
|
48
|
-
const component = info.component;
|
|
49
|
-
if (ObjectUtils.isFunction(component.onUserInitialized)) {
|
|
50
|
-
component.onUserInitialized();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
getStateInfo() {
|
|
55
|
-
const route = this.state.route;
|
|
56
|
-
if (!route)
|
|
57
|
-
return null;
|
|
58
|
-
let info = this.components.find(t => t.route == this.state.route);
|
|
59
|
-
if (!info) {
|
|
60
|
-
const guardType = (route.canActivate || emptyGuards)[0];
|
|
61
|
-
info = {
|
|
62
|
-
route: this.state.route,
|
|
63
|
-
guard: guardType ? this.injector.get(guardType) : null,
|
|
64
|
-
dirty: true,
|
|
65
|
-
first: true
|
|
66
|
-
};
|
|
67
|
-
this.components.push(info);
|
|
68
|
-
}
|
|
69
|
-
info.component = this.state.component;
|
|
70
|
-
return info;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
AclService.decorators = [
|
|
74
|
-
{ type: Injectable }
|
|
75
|
-
];
|
|
76
|
-
AclService.ctorParameters = () => [
|
|
77
|
-
{ type: Injector },
|
|
78
|
-
{ type: StateService },
|
|
79
|
-
{ type: undefined, decorators: [{ type: Inject, args: [AUTH_SERVICE,] }] }
|
|
80
|
-
];
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2FjbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBTyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBK0MsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE1BQU0sV0FBVyxHQUFVLEVBQUUsQ0FBQztBQUc5QixNQUFNLE9BQU8sVUFBVTtJQUluQixZQUFxQixRQUFrQixFQUFXLEtBQW1CLEVBQWlDLElBQWtCO1FBQW5HLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQWlDLFNBQUksR0FBSixJQUFJLENBQWM7UUFDcEgsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxHQUFxQixJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssWUFBWSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNoQixJQUFJLE1BQU0sRUFBRTtvQkFDUixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7d0JBQUUsT0FBTztvQkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ25CLE1BQU0sU0FBUyxHQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7d0JBQUUsT0FBTztvQkFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNaLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRTs0QkFDckQsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7eUJBQ2pDO3dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUNuQixPQUFPO3FCQUNWO29CQUNELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ2pELFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDN0I7b0JBQ0QsT0FBTztpQkFDVjtnQkFDQSxJQUFJLENBQUMsS0FBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDcEUsSUFBSSxDQUFDLFdBQVc7d0JBQUUsT0FBTztvQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFNBQVMsQ0FBQTtnQkFBRSxPQUFPO1lBQzdCLE1BQU0sU0FBUyxHQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2hELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRTtnQkFDckQsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDakM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxZQUFZO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE1BQU0sU0FBUyxHQUFvQixDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxHQUFHO2dCQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ3ZCLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxLQUFLLEVBQUUsSUFBSTthQUNkLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7O1lBN0RKLFVBQVU7OztZQVJpQixRQUFRO1lBQzVCLFlBQVk7NENBWXdELE1BQU0sU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1N0YXRlU2VydmljZX0gZnJvbSBcIi4vc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0FVVEhfU0VSVklDRSwgSUFjbENvbXBvbmVudCwgSUF1dGhTZXJ2aWNlLCBJUm91dGVTdGF0ZUluZm99IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge0F1dGhHdWFyZH0gZnJvbSBcIi4uL3V0aWxzL2F1dGguZ3VhcmRcIjtcclxuXHJcbmNvbnN0IGVtcHR5R3VhcmRzOiBhbnlbXSA9IFtdO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWNsU2VydmljZSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudHM6IElSb3V0ZVN0YXRlSW5mb1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvciwgcmVhZG9ubHkgc3RhdGU6IFN0YXRlU2VydmljZSwgQEluamVjdChBVVRIX1NFUlZJQ0UpIHJlYWRvbmx5IGF1dGg6IElBdXRoU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXV0aC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh0ID0+IHQuZGlydHkgPSB0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZ2V0U3RhdGVJbmZvKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrOiBQcm9taXNlPGJvb2xlYW4+ID0gaW5mbyAmJiBpbmZvLmd1YXJkIGluc3RhbmNlb2YgQXV0aEd1YXJkID8gaW5mby5ndWFyZC5jaGVja1JvdXRlKGluZm8ucm91dGUpIDogUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICBjaGVjay50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvIHx8ICFpbmZvLmRpcnR5KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mby5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudDogSUFjbENvbXBvbmVudCA9IGluZm8uY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mby5jb21wb25lbnQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5maXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjb21wb25lbnQub25Vc2VySW5pdGlhbGl6ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQub25Vc2VySW5pdGlhbGl6ZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzRnVuY3Rpb24oY29tcG9uZW50Lm9uVXNlckNoYW5nZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5vblVzZXJDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIChpbmZvLmd1YXJkIGFzIEF1dGhHdWFyZCkuZ2V0UmV0dXJuU3RhdGUoaW5mby5yb3V0ZSkudGhlbihyZXR1cm5TdGF0ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXR1cm5TdGF0ZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUubmF2aWdhdGUocmV0dXJuU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGUuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZ2V0U3RhdGVJbmZvKCk7XHJcbiAgICAgICAgICAgIGlmICghaW5mbz8uY29tcG9uZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudDogSUFjbENvbXBvbmVudCA9IGluZm8uY29tcG9uZW50O1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjb21wb25lbnQub25Vc2VySW5pdGlhbGl6ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQub25Vc2VySW5pdGlhbGl6ZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRTdGF0ZUluZm8oKTogSVJvdXRlU3RhdGVJbmZvIHtcclxuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuc3RhdGUucm91dGU7XHJcbiAgICAgICAgaWYgKCFyb3V0ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgbGV0IGluZm8gPSB0aGlzLmNvbXBvbmVudHMuZmluZCh0ID0+IHQucm91dGUgPT0gdGhpcy5zdGF0ZS5yb3V0ZSk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkVHlwZTogVHlwZTxBdXRoR3VhcmQ+ID0gKHJvdXRlLmNhbkFjdGl2YXRlIHx8IGVtcHR5R3VhcmRzKVswXTtcclxuICAgICAgICAgICAgaW5mbyA9IHtcclxuICAgICAgICAgICAgICAgIHJvdXRlOiB0aGlzLnN0YXRlLnJvdXRlLFxyXG4gICAgICAgICAgICAgICAgZ3VhcmQ6IGd1YXJkVHlwZSA/IHRoaXMuaW5qZWN0b3IuZ2V0KGd1YXJkVHlwZSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZGlydHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBmaXJzdDogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChpbmZvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5mby5jb21wb25lbnQgPSB0aGlzLnN0YXRlLmNvbXBvbmVudDtcclxuICAgICAgICByZXR1cm4gaW5mbztcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { BaseHttpService } from "./base-http.service";
|
|
3
|
-
export class ApiService extends BaseHttpService {
|
|
4
|
-
get name() {
|
|
5
|
-
return "api";
|
|
6
|
-
}
|
|
7
|
-
url(url) {
|
|
8
|
-
const baseUrl = this.expressRequestUrl(`/api/${url}`);
|
|
9
|
-
if (url == "api-docs" || url == "socket") {
|
|
10
|
-
return baseUrl.replace("/api/", "/");
|
|
11
|
-
}
|
|
12
|
-
return baseUrl;
|
|
13
|
-
}
|
|
14
|
-
get(url, options, body) {
|
|
15
|
-
return this.getPromise(url, options, body);
|
|
16
|
-
}
|
|
17
|
-
delete(url, options, body) {
|
|
18
|
-
return this.deletePromise(url, options, body);
|
|
19
|
-
}
|
|
20
|
-
post(url, body, options) {
|
|
21
|
-
return this.postPromise(url, body, options);
|
|
22
|
-
}
|
|
23
|
-
put(url, body, options) {
|
|
24
|
-
return this.putPromise(url, body, options);
|
|
25
|
-
}
|
|
26
|
-
patch(url, body, options) {
|
|
27
|
-
return this.patchPromise(url, body, options);
|
|
28
|
-
}
|
|
29
|
-
upload(url, body, listener, options) {
|
|
30
|
-
return this.uploadPromise(url, body, listener, options);
|
|
31
|
-
}
|
|
32
|
-
list(url, params) {
|
|
33
|
-
return this.listPromise(url, params);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
ApiService.decorators = [
|
|
37
|
-
{ type: Injectable }
|
|
38
|
-
];
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBSXBELE1BQU0sT0FBTyxVQUFXLFNBQVEsZUFBZTtJQUUzQyxJQUFJLElBQUk7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDWCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksR0FBRyxJQUFJLFVBQVUsSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQ3RDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxPQUF5QixFQUFFLElBQVU7UUFDbEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFXLEVBQUUsT0FBeUIsRUFBRSxJQUFVO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVyxFQUFFLElBQVUsRUFBRSxPQUF5QjtRQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFVLEVBQUUsT0FBeUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXLEVBQUUsSUFBVSxFQUFFLE9BQXlCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVyxFQUFFLElBQVMsRUFBRSxRQUEyQixFQUFFLE9BQXlCO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVcsRUFBRSxNQUFtQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OztZQXpDSixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtJQXBpU2VydmljZSwgSUh0dHBQYXJhbXMsIElSZXF1ZXN0T3B0aW9ucywgUHJvZ3Jlc3NMaXN0ZW5lcn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Jhc2VIdHRwU2VydmljZX0gZnJvbSBcIi4vYmFzZS1odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtJUGFnaW5hdGlvbkRhdGF9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2UgZXh0ZW5kcyBCYXNlSHR0cFNlcnZpY2UgaW1wbGVtZW50cyBJQXBpU2VydmljZSB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJhcGlcIjtcclxuICAgIH1cclxuXHJcbiAgICB1cmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmV4cHJlc3NSZXF1ZXN0VXJsKGAvYXBpLyR7dXJsfWApO1xyXG4gICAgICAgIGlmICh1cmwgPT0gXCJhcGktZG9jc1wiIHx8IHVybCA9PSBcInNvY2tldFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlVXJsLnJlcGxhY2UoXCIvYXBpL1wiLCBcIi9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCh1cmw6IHN0cmluZywgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucywgYm9keT86IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvbWlzZSh1cmwsIG9wdGlvbnMsIGJvZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucywgYm9keT86IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlUHJvbWlzZSh1cmwsIG9wdGlvbnMsIGJvZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3QodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RQcm9taXNlKHVybCwgYm9keSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHV0KHVybDogc3RyaW5nLCBib2R5PzogYW55LCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdXRQcm9taXNlKHVybCwgYm9keSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2godXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhdGNoUHJvbWlzZSh1cmwsIGJvZHksIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwbG9hZCh1cmw6IHN0cmluZywgYm9keTogYW55LCBsaXN0ZW5lcj86IFByb2dyZXNzTGlzdGVuZXIsIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZFByb21pc2UodXJsLCBib2R5LCBsaXN0ZW5lciwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdCh1cmw6IHN0cmluZywgcGFyYW1zOiBJSHR0cFBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdFByb21pc2UodXJsLCBwYXJhbXMpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from "@angular/core";
|
|
2
|
-
export class StaticAuthService {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.isAuthenticated = true;
|
|
5
|
-
this.userChanged = new EventEmitter();
|
|
6
|
-
}
|
|
7
|
-
checkAuthenticated() {
|
|
8
|
-
return Promise.resolve(this.isAuthenticated);
|
|
9
|
-
}
|
|
10
|
-
getReturnState(route) {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUczQyxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBRUksb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQVM3RCxDQUFDO0lBUEcsa0JBQWtCO1FBQ2QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SVJvdXRlLCBJQXV0aFNlcnZpY2V9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdGF0aWNBdXRoU2VydmljZSBpbXBsZW1lbnRzIElBdXRoU2VydmljZSB7XHJcblxyXG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHVzZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGNoZWNrQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuaXNBdXRoZW50aWNhdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXR1cm5TdGF0ZShyb3V0ZTogSVJvdXRlKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { HttpClient, HttpHandler, HttpHeaders, HttpParams, HttpUrlEncodingCodec } from "@angular/common/http";
|
|
3
|
-
import { ObjectUtils } from "../utils/object.utils";
|
|
4
|
-
export class BaseHttpClient extends HttpClient {
|
|
5
|
-
constructor(handler) {
|
|
6
|
-
super(handler);
|
|
7
|
-
this.requestHeaders = {};
|
|
8
|
-
this.requestParams = {};
|
|
9
|
-
this.extraRequestParams = {
|
|
10
|
-
language: "en"
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
makeHeaders(headers, withCredentials = true) {
|
|
14
|
-
headers = Object.assign({}, this.requestHeaders, headers);
|
|
15
|
-
const authHeader = headers["Authorization"] || "";
|
|
16
|
-
if (!withCredentials && !authHeader.startsWith("Bearer")) {
|
|
17
|
-
delete headers["Authorization"];
|
|
18
|
-
}
|
|
19
|
-
return new HttpHeaders(headers);
|
|
20
|
-
}
|
|
21
|
-
makeParams(params) {
|
|
22
|
-
params = Object.assign({}, this.extraRequestParams, this.requestParams, params);
|
|
23
|
-
return new HttpParams({
|
|
24
|
-
encoder: new HttpUrlEncodingCodec(),
|
|
25
|
-
fromObject: Object.keys(params || {}).reduce((result, key) => {
|
|
26
|
-
const value = params[key];
|
|
27
|
-
result[key] = ObjectUtils.isObject(value) ? JSON.stringify(value) : (ObjectUtils.isNullOrUndefined(value) ? "" : value.toString());
|
|
28
|
-
return result;
|
|
29
|
-
}, {})
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
setExtraRequestParam(name, value) {
|
|
33
|
-
if (typeof value == "undefined") {
|
|
34
|
-
delete this.extraRequestParams[name];
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
this.extraRequestParams[name] = value;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
BaseHttpClient.decorators = [
|
|
41
|
-
{ type: Injectable }
|
|
42
|
-
];
|
|
43
|
-
BaseHttpClient.ctorParameters = () => [
|
|
44
|
-
{ type: HttpHandler }
|
|
45
|
-
];
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvc2VydmljZXMvYmFzZS1odHRwLmNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEQsTUFBTSxPQUFPLGNBQWUsU0FBUSxVQUFVO0lBUTFDLFlBQVksT0FBb0I7UUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQ3RCLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCLEVBQUUsa0JBQTJCLElBQUk7UUFDL0QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBVyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0RCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFvQjtRQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLFVBQVUsQ0FBQztZQUNsQixPQUFPLEVBQUUsSUFBSSxvQkFBb0IsRUFBRTtZQUNuQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbkksT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZLEVBQUUsS0FBVztRQUMxQyxJQUFJLE9BQU8sS0FBSyxJQUFJLFdBQVcsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7OztZQTdDSixVQUFVOzs7WUFKUyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIYW5kbGVyLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cFVybEVuY29kaW5nQ29kZWN9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0lIdHRwSGVhZGVycywgSUh0dHBQYXJhbXN9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQmFzZUh0dHBDbGllbnQgZXh0ZW5kcyBIdHRwQ2xpZW50IHtcclxuXHJcbiAgICByZXF1ZXN0SGVhZGVyczogSUh0dHBIZWFkZXJzO1xyXG4gICAgcmVxdWVzdFBhcmFtczogSUh0dHBQYXJhbXM7XHJcbiAgICByZW5ld1Rva2VuRnVuYzogKCkgPT4gdm9pZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFSZXF1ZXN0UGFyYW1zOiBJSHR0cFBhcmFtcztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBIdHRwSGFuZGxlcikge1xyXG4gICAgICAgIHN1cGVyKGhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RQYXJhbXMgPSB7fTtcclxuICAgICAgICB0aGlzLmV4dHJhUmVxdWVzdFBhcmFtcyA9IHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiZW5cIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUhlYWRlcnMoaGVhZGVycz86IElIdHRwSGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuID0gdHJ1ZSk6IEh0dHBIZWFkZXJzIHtcclxuICAgICAgICBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXF1ZXN0SGVhZGVycywgaGVhZGVycyk7XHJcbiAgICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdIGFzIHN0cmluZyB8fCBcIlwiO1xyXG4gICAgICAgIGlmICghd2l0aENyZWRlbnRpYWxzICYmICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoXCJCZWFyZXJcIikpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQYXJhbXMocGFyYW1zPzogSUh0dHBQYXJhbXMpOiBIdHRwUGFyYW1zIHtcclxuICAgICAgICBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmV4dHJhUmVxdWVzdFBhcmFtcywgdGhpcy5yZXF1ZXN0UGFyYW1zLCBwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgSHR0cFBhcmFtcyh7XHJcbiAgICAgICAgICAgIGVuY29kZXI6IG5ldyBIdHRwVXJsRW5jb2RpbmdDb2RlYygpLFxyXG4gICAgICAgICAgICBmcm9tT2JqZWN0OiBPYmplY3Qua2V5cyhwYXJhbXMgfHwge30pLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XHJcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IE9iamVjdFV0aWxzLmlzT2JqZWN0KHZhbHVlKSA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IChPYmplY3RVdGlscy5pc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBcIlwiIDogdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9LCB7fSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRFeHRyYVJlcXVlc3RQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV4dHJhUmVxdWVzdFBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4dHJhUmVxdWVzdFBhcmFtc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Inject, Injectable, Optional } from "@angular/core";
|
|
3
|
-
import { HttpEventType } from "@angular/common/http";
|
|
4
|
-
import { CONFIG_SERVICE, EXPRESS_REQUEST, HttpPromise, LANGUAGE_SERVICE, TOASTER_SERVICE } from "../common-types";
|
|
5
|
-
import { ObjectUtils } from "../utils/object.utils";
|
|
6
|
-
import { MathUtils } from "../utils/math.utils";
|
|
7
|
-
import { BaseHttpClient } from "./base-http.client";
|
|
8
|
-
import { StorageService } from "./storage.service";
|
|
9
|
-
import { timeout } from "rxjs/operators";
|
|
10
|
-
import { TimeoutError } from "rxjs";
|
|
11
|
-
export class BaseHttpService {
|
|
12
|
-
constructor(client, storage, language, toaster, configs, request = null) {
|
|
13
|
-
this.client = client;
|
|
14
|
-
this.storage = storage;
|
|
15
|
-
this.language = language;
|
|
16
|
-
this.toaster = toaster;
|
|
17
|
-
this.configs = configs;
|
|
18
|
-
this.request = request;
|
|
19
|
-
this.requestHeaders = {};
|
|
20
|
-
this.requestParams = {};
|
|
21
|
-
this.cache = {};
|
|
22
|
-
}
|
|
23
|
-
get name() {
|
|
24
|
-
return "base";
|
|
25
|
-
}
|
|
26
|
-
get withCredentials() {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
static retryFailedRequests() {
|
|
30
|
-
BaseHttpService.failedRequests.forEach(r => r());
|
|
31
|
-
BaseHttpService.failedRequests = [];
|
|
32
|
-
}
|
|
33
|
-
get universal() {
|
|
34
|
-
return this.storage.universal;
|
|
35
|
-
}
|
|
36
|
-
url(url) {
|
|
37
|
-
return url;
|
|
38
|
-
}
|
|
39
|
-
createUrl(url, params) {
|
|
40
|
-
const httpParams = this.client.makeParams(params);
|
|
41
|
-
const query = httpParams.keys().map(key => {
|
|
42
|
-
return `${key}=${httpParams.get(key)}`;
|
|
43
|
-
}).join("&");
|
|
44
|
-
return `${this.url(url)}?${query}`;
|
|
45
|
-
}
|
|
46
|
-
makeListParams(page, itemsPerPage, orderBy = null, orderDescending = null, filter = null) {
|
|
47
|
-
const params = {
|
|
48
|
-
page: (page - 1),
|
|
49
|
-
limit: itemsPerPage
|
|
50
|
-
};
|
|
51
|
-
if (!ObjectUtils.isNullOrUndefined(orderBy) && !ObjectUtils.isNullOrUndefined(orderDescending)) {
|
|
52
|
-
params.sort = `${orderDescending ? "-" : ""}${orderBy}`;
|
|
53
|
-
}
|
|
54
|
-
if (!ObjectUtils.isNullOrUndefined(filter)) {
|
|
55
|
-
params.filter = filter;
|
|
56
|
-
}
|
|
57
|
-
return params;
|
|
58
|
-
}
|
|
59
|
-
getPromise(url, options, body) {
|
|
60
|
-
options = this.makeOptions(options, "GET", body);
|
|
61
|
-
return this.toPromise(url, options);
|
|
62
|
-
}
|
|
63
|
-
deletePromise(url, options, body) {
|
|
64
|
-
options = this.makeOptions(options, "DELETE", body);
|
|
65
|
-
return this.toPromise(url, options);
|
|
66
|
-
}
|
|
67
|
-
postPromise(url, body, options) {
|
|
68
|
-
options = this.makeOptions(options, "POST", body);
|
|
69
|
-
return this.toPromise(url, options);
|
|
70
|
-
}
|
|
71
|
-
putPromise(url, body, options) {
|
|
72
|
-
options = this.makeOptions(options, "PUT", body);
|
|
73
|
-
return this.toPromise(url, options);
|
|
74
|
-
}
|
|
75
|
-
patchPromise(url, body, options) {
|
|
76
|
-
options = this.makeOptions(options, "PATCH", body);
|
|
77
|
-
return this.toPromise(url, options);
|
|
78
|
-
}
|
|
79
|
-
uploadPromise(url, body, listener, options) {
|
|
80
|
-
const headers = {};
|
|
81
|
-
if (body instanceof Blob) {
|
|
82
|
-
headers["Content-Type"] = "application/octet-stream";
|
|
83
|
-
}
|
|
84
|
-
options = this.makeOptions(Object.assign({
|
|
85
|
-
headers: headers,
|
|
86
|
-
reportProgress: true
|
|
87
|
-
}, options), "POST", body);
|
|
88
|
-
return this.toPromise(url, options, listener);
|
|
89
|
-
}
|
|
90
|
-
listPromise(url, params) {
|
|
91
|
-
return new Promise(resolve => {
|
|
92
|
-
this.getPromise(url, { params: params }).then(data => {
|
|
93
|
-
var _a, _b;
|
|
94
|
-
if (ObjectUtils.isArray(data)) {
|
|
95
|
-
resolve({
|
|
96
|
-
total: data.length,
|
|
97
|
-
items: data,
|
|
98
|
-
meta: {}
|
|
99
|
-
});
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
resolve({
|
|
103
|
-
total: ((_a = data.meta) === null || _a === void 0 ? void 0 : _a.total) || (data === null || data === void 0 ? void 0 : data.total) || ((_b = data.items) === null || _b === void 0 ? void 0 : _b.length) || 0,
|
|
104
|
-
items: data.items || [],
|
|
105
|
-
meta: data.meta || {}
|
|
106
|
-
});
|
|
107
|
-
}, response => {
|
|
108
|
-
if (response.status == 0 || response.status == 301) {
|
|
109
|
-
resolve({
|
|
110
|
-
total: 1,
|
|
111
|
-
items: [{
|
|
112
|
-
id: null,
|
|
113
|
-
label: "Not implemented."
|
|
114
|
-
}],
|
|
115
|
-
meta: {}
|
|
116
|
-
});
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
resolve({
|
|
120
|
-
total: 0,
|
|
121
|
-
items: [],
|
|
122
|
-
meta: {}
|
|
123
|
-
});
|
|
124
|
-
return false;
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
handleUnauthorizedError(absoluteUrl, options, reject) {
|
|
129
|
-
reject();
|
|
130
|
-
if (BaseHttpService.failedRequests.length > 1) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
if (this.universal.isServer)
|
|
134
|
-
return;
|
|
135
|
-
console.log("User auth error", absoluteUrl, options);
|
|
136
|
-
}
|
|
137
|
-
toastWarning(message, issueContext, reason, options) {
|
|
138
|
-
this.toaster.warning(message, { issueContext, reason, options });
|
|
139
|
-
}
|
|
140
|
-
toastError(message, issueContext, reason, options) {
|
|
141
|
-
this.toaster.warning(message, { issueContext, reason, options });
|
|
142
|
-
}
|
|
143
|
-
toPromise(url, options, listener) {
|
|
144
|
-
const issueContext = { url: "" };
|
|
145
|
-
return new HttpPromise(response => {
|
|
146
|
-
if (!response) {
|
|
147
|
-
if (this.universal.isServer)
|
|
148
|
-
return;
|
|
149
|
-
console.log("You may not need a reject Handler for this request!", this.name, url, options);
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const reason = response.error || {};
|
|
153
|
-
if (response.status == 0 || response.status == 301) {
|
|
154
|
-
this.toastWarning(`${url} endpoint is not implemented! Click here, to quickly create an issue.`, issueContext, reason, options);
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
const regex = /((E11000 duplicate key error collection: (.)+\.)|(_1 dup key:(.)+))/g;
|
|
158
|
-
if (reason.message && regex.test(reason.message)) {
|
|
159
|
-
this.toastError("message.duplicate-key.error." + reason.message.replace(regex, "").replace(" index: ", "-"), issueContext, reason, options);
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
this.toastWarning(`${url} endpoint error is not handled properly! Click here, to quickly create an issue.`, issueContext, reason, options);
|
|
163
|
-
}, (resolve, reject) => {
|
|
164
|
-
this.absoluteUrl(url, options).then(absoluteUrl => {
|
|
165
|
-
issueContext.url = absoluteUrl;
|
|
166
|
-
const request = this.client.request(options.method, absoluteUrl, options);
|
|
167
|
-
const finalRequest = ObjectUtils.isNumber(options.timeout) && options.timeout > 0
|
|
168
|
-
? request.pipe(timeout(options.timeout)) : request;
|
|
169
|
-
finalRequest.subscribe((event) => {
|
|
170
|
-
if (options.reportProgress && event.type === HttpEventType.UploadProgress) {
|
|
171
|
-
const progress = {
|
|
172
|
-
percentage: MathUtils.round(event.loaded / event.total, 2, 0.01),
|
|
173
|
-
loaded: event.loaded,
|
|
174
|
-
total: event.total
|
|
175
|
-
};
|
|
176
|
-
if (listener) {
|
|
177
|
-
listener(progress);
|
|
178
|
-
}
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
resolve(this.parseResponse(event, url, options));
|
|
182
|
-
const headers = options.headers;
|
|
183
|
-
const authKey = "Authorization";
|
|
184
|
-
// If we use token auth
|
|
185
|
-
if (this.client.renewTokenFunc && headers.has(authKey)) {
|
|
186
|
-
const currentTime = new Date().getTime();
|
|
187
|
-
const userTokenTime = this.getUserTokenTime() || currentTime;
|
|
188
|
-
// And the last request was a long-long time ago
|
|
189
|
-
if (currentTime - 600000 > userTokenTime) {
|
|
190
|
-
this.client.renewTokenFunc();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}, (response) => {
|
|
194
|
-
if (response instanceof TimeoutError || response.status == 0 || response.status == 301) {
|
|
195
|
-
reject(response);
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const headers = options.headers;
|
|
199
|
-
const authKey = "Authorization";
|
|
200
|
-
// If an authorization header exists, and we still have an Unauthorized response prompt the user to log in again
|
|
201
|
-
if (headers.has(authKey) && response.status == 401) {
|
|
202
|
-
const pushed = this.pushFailedRequest(url, options, () => {
|
|
203
|
-
options.headers = this.makeHeaders(options.originalHeaders);
|
|
204
|
-
this.toPromise(url, options, listener).then(resolve, reject);
|
|
205
|
-
});
|
|
206
|
-
if (pushed)
|
|
207
|
-
this.handleUnauthorizedError(absoluteUrl, options, () => reject(response));
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
reject(response);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
getUserTokenTime() {
|
|
216
|
-
return this.storage.get("userTokenTime");
|
|
217
|
-
}
|
|
218
|
-
pushFailedRequest(url, options, req) {
|
|
219
|
-
if (url.indexOf("tokens") >= 0)
|
|
220
|
-
return false;
|
|
221
|
-
BaseHttpService.failedRequests.push(req);
|
|
222
|
-
return true;
|
|
223
|
-
}
|
|
224
|
-
checkHeaders(headers) {
|
|
225
|
-
if (!headers || !headers.cookie || !headers.referer || !headers.host) {
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
return headers.referer.indexOf(headers.host) >= 0;
|
|
229
|
-
}
|
|
230
|
-
makeOptions(options, method = "GET", body) {
|
|
231
|
-
// Set base options
|
|
232
|
-
options = options ? Object.assign({}, options) : {};
|
|
233
|
-
options.method = method;
|
|
234
|
-
options.observe = options.observe || "body";
|
|
235
|
-
options.originalHeaders = options.originalHeaders || options.headers || {};
|
|
236
|
-
options.withCredentials = ObjectUtils.isBoolean(options.withCredentials) ? options.withCredentials : this.withCredentials;
|
|
237
|
-
options.body = body || {};
|
|
238
|
-
// Set cookies from server side request
|
|
239
|
-
const headers = !this.request ? null : this.request.headers;
|
|
240
|
-
if (this.checkHeaders(headers)) {
|
|
241
|
-
options.headers["Cookie"] = headers.cookie;
|
|
242
|
-
}
|
|
243
|
-
options.headers = this.makeHeaders(options);
|
|
244
|
-
options.params = this.makeParams(options);
|
|
245
|
-
return options;
|
|
246
|
-
}
|
|
247
|
-
makeHeaders(options) {
|
|
248
|
-
return this.client.makeHeaders(Object.assign({}, this.requestHeaders, (options === null || options === void 0 ? void 0 : options.headers) || {}));
|
|
249
|
-
}
|
|
250
|
-
makeParams(options) {
|
|
251
|
-
return this.client.makeParams(Object.assign({}, this.requestParams, (options === null || options === void 0 ? void 0 : options.params) || {}));
|
|
252
|
-
}
|
|
253
|
-
parseResponse(response, url, options) {
|
|
254
|
-
return response;
|
|
255
|
-
}
|
|
256
|
-
parseUrl(url) {
|
|
257
|
-
return this.url(url).replace(/(?:((?!:).\/)\/)/g, "$1");
|
|
258
|
-
}
|
|
259
|
-
absoluteUrl(url, options) {
|
|
260
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
261
|
-
return this.parseUrl(url);
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
expressRequestUrl(url) {
|
|
265
|
-
const req = this.request;
|
|
266
|
-
if (!req || !url || url.startsWith("http") || url.startsWith("//"))
|
|
267
|
-
return url;
|
|
268
|
-
const separator = url.startsWith("/") ? "" : "/";
|
|
269
|
-
return `${req.protocol}://${req.get("host")}${separator}${url}`;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
BaseHttpService.failedRequests = [];
|
|
273
|
-
BaseHttpService.decorators = [
|
|
274
|
-
{ type: Injectable }
|
|
275
|
-
];
|
|
276
|
-
BaseHttpService.ctorParameters = () => [
|
|
277
|
-
{ type: BaseHttpClient, decorators: [{ type: Inject, args: [BaseHttpClient,] }] },
|
|
278
|
-
{ type: StorageService, decorators: [{ type: Inject, args: [StorageService,] }] },
|
|
279
|
-
{ type: undefined, decorators: [{ type: Inject, args: [LANGUAGE_SERVICE,] }] },
|
|
280
|
-
{ type: undefined, decorators: [{ type: Inject, args: [TOASTER_SERVICE,] }] },
|
|
281
|
-
{ type: undefined, decorators: [{ type: Inject, args: [CONFIG_SERVICE,] }] },
|
|
282
|
-
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [EXPRESS_REQUEST,] }] }
|
|
283
|
-
];
|
|
284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1odHRwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3NlcnZpY2VzL2Jhc2UtaHR0cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFvQixhQUFhLEVBQXdDLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUNILGNBQWMsRUFDZCxlQUFlLEVBQ2YsV0FBVyxFQVVYLGdCQUFnQixFQUVoQixlQUFlLEVBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUU5QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR2xDLE1BQU0sT0FBTyxlQUFlO0lBeUJ4QixZQUE2QyxNQUFzQixFQUN0QixPQUF1QixFQUNyQixRQUEwQixFQUMzQixPQUF3QixFQUN6QixPQUF1QixFQUNWLFVBQW1CLElBQUk7UUFMcEMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDVixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUU3RSxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FB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ZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge1JlcXVlc3R9IGZyb20gXCJleHByZXNzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ09ORklHX1NFUlZJQ0UsXHJcbiAgICBFWFBSRVNTX1JFUVVFU1QsXHJcbiAgICBIdHRwUHJvbWlzZSxcclxuICAgIElDb25maWdTZXJ2aWNlLFxyXG4gICAgSUh0dHBIZWFkZXJzLFxyXG4gICAgSUh0dHBQYXJhbXMsXHJcbiAgICBJSHR0cFNlcnZpY2UsXHJcbiAgICBJSXNzdWVDb250ZXh0LFxyXG4gICAgSUxhbmd1YWdlU2VydmljZSxcclxuICAgIElQYWdpbmF0aW9uRGF0YSxcclxuICAgIElSZXF1ZXN0T3B0aW9ucyxcclxuICAgIElUb2FzdGVyU2VydmljZSxcclxuICAgIExBTkdVQUdFX1NFUlZJQ0UsXHJcbiAgICBQcm9ncmVzc0xpc3RlbmVyLFxyXG4gICAgVE9BU1RFUl9TRVJWSUNFXHJcbn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4uL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5pbXBvcnQge01hdGhVdGlsc30gZnJvbSBcIi4uL3V0aWxzL21hdGgudXRpbHNcIjtcclxuXHJcbmltcG9ydCB7QmFzZUh0dHBDbGllbnR9IGZyb20gXCIuL2Jhc2UtaHR0cC5jbGllbnRcIjtcclxuaW1wb3J0IHtVbml2ZXJzYWxTZXJ2aWNlfSBmcm9tIFwiLi91bml2ZXJzYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHt0aW1lb3V0fSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtUaW1lb3V0RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBCYXNlSHR0cFNlcnZpY2UgaW1wbGVtZW50cyBJSHR0cFNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBzdGF0aWMgZmFpbGVkUmVxdWVzdHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gXCJiYXNlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCB3aXRoQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVxdWVzdEhlYWRlcnM6IElIdHRwSGVhZGVycztcclxuICAgIHJlcXVlc3RQYXJhbXM6IElIdHRwUGFyYW1zO1xyXG4gICAgY2FjaGU6IGFueTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJldHJ5RmFpbGVkUmVxdWVzdHMoKTogdm9pZCB7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLmZvckVhY2gociA9PiByKCkpO1xyXG4gICAgICAgIEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB1bml2ZXJzYWwoKTogVW5pdmVyc2FsU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS51bml2ZXJzYWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChCYXNlSHR0cENsaWVudCkgcmVhZG9ubHkgY2xpZW50OiBCYXNlSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU3RvcmFnZVNlcnZpY2UpIHJlYWRvbmx5IHN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChMQU5HVUFHRV9TRVJWSUNFKSByZWFkb25seSBsYW5ndWFnZTogSUxhbmd1YWdlU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSByZWFkb25seSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KENPTkZJR19TRVJWSUNFKSByZWFkb25seSBjb25maWdzOiBJQ29uZmlnU2VydmljZSxcclxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVhQUkVTU19SRVFVRVNUKSByZWFkb25seSByZXF1ZXN0OiBSZXF1ZXN0ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICB1cmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVXJsKHVybDogc3RyaW5nLCBwYXJhbXM6IElIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBodHRwUGFyYW1zID0gdGhpcy5jbGllbnQubWFrZVBhcmFtcyhwYXJhbXMpO1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaHR0cFBhcmFtcy5rZXlzKCkubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aHR0cFBhcmFtcy5nZXQoa2V5KX1gO1xyXG4gICAgICAgIH0pLmpvaW4oXCImXCIpO1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybCh1cmwpfT8ke3F1ZXJ5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpc3RQYXJhbXMocGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogc3RyaW5nID0gbnVsbCwgb3JkZXJEZXNjZW5kaW5nOiBib29sZWFuID0gbnVsbCwgZmlsdGVyOiBzdHJpbmcgPSBudWxsKTogSUh0dHBQYXJhbXMge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogSUh0dHBQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSksXHJcbiAgICAgICAgICAgIGxpbWl0OiBpdGVtc1BlclBhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQob3JkZXJCeSkgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKG9yZGVyRGVzY2VuZGluZykpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnQgPSBgJHtvcmRlckRlc2NlbmRpbmcgPyBcIi1cIiA6IFwiXCJ9JHtvcmRlckJ5fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNOdWxsT3JVbmRlZmluZWQoZmlsdGVyKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiR0VUXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkZWxldGVQcm9taXNlKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVJlcXVlc3RPcHRpb25zLCBib2R5PzogYW55KTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMsIFwiREVMRVRFXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBwb3N0UHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1dFByb21pc2UodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIG9wdGlvbnM/OiBJUmVxdWVzdE9wdGlvbnMpOiBIdHRwUHJvbWlzZSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMubWFrZU9wdGlvbnMob3B0aW9ucywgXCJQVVRcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoUHJvbWlzZSh1cmw6IHN0cmluZywgYm9keT86IGFueSwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBvcHRpb25zID0gdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zLCBcIlBBVENIXCIsIGJvZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvUHJvbWlzZSh1cmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGxvYWRQcm9taXNlKHVybDogc3RyaW5nLCBib2R5OiBhbnksIGxpc3RlbmVyPzogUHJvZ3Jlc3NMaXN0ZW5lciwgb3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucyk6IEh0dHBQcm9taXNlIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICAgICAgaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm1ha2VPcHRpb25zKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZVxyXG4gICAgICAgIH0sIG9wdGlvbnMpLCBcIlBPU1RcIiwgYm9keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Qcm9taXNlKHVybCwgb3B0aW9ucywgbGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBsaXN0UHJvbWlzZSh1cmw6IHN0cmluZywgcGFyYW1zOiBJSHR0cFBhcmFtcyk6IFByb21pc2U8SVBhZ2luYXRpb25EYXRhPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElQYWdpbmF0aW9uRGF0YT4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZSh1cmwsIHtwYXJhbXM6IHBhcmFtc30pLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNBcnJheShkYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLm1ldGE/LnRvdGFsIHx8IGRhdGE/LnRvdGFsIHx8IGRhdGEuaXRlbXM/Lmxlbmd0aCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zIHx8IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IGRhdGEubWV0YSB8fCB7fVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTm90IGltcGxlbWVudGVkLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiB7fVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGE6IHt9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZVVuYXV0aG9yaXplZEVycm9yKGFic29sdXRlVXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgcmVqZWN0OiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgaWYgKEJhc2VIdHRwU2VydmljZS5mYWlsZWRSZXF1ZXN0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJVc2VyIGF1dGggZXJyb3JcIiwgYWJzb2x1dGVVcmwsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b2FzdFdhcm5pbmcobWVzc2FnZTogc3RyaW5nLCBpc3N1ZUNvbnRleHQ6IElJc3N1ZUNvbnRleHQsIHJlYXNvbjogYW55LCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIud2FybmluZyhtZXNzYWdlLCB7aXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9hc3RFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCwgcmVhc29uOiBhbnksIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci53YXJuaW5nKG1lc3NhZ2UsIHtpc3N1ZUNvbnRleHQsIHJlYXNvbiwgb3B0aW9uc30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b1Byb21pc2UodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgbGlzdGVuZXI/OiBQcm9ncmVzc0xpc3RlbmVyKTogSHR0cFByb21pc2Uge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlQ29udGV4dDogSUlzc3VlQ29udGV4dCA9IHt1cmw6IFwiXCJ9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEh0dHBQcm9taXNlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pdmVyc2FsLmlzU2VydmVyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIllvdSBtYXkgbm90IG5lZWQgYSByZWplY3QgSGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0IVwiLCB0aGlzLm5hbWUsIHVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVzcG9uc2UuZXJyb3IgfHwge307XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMCB8fCByZXNwb25zZS5zdGF0dXMgPT0gMzAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0V2FybmluZyhgJHt1cmx9IGVuZHBvaW50IGlzIG5vdCBpbXBsZW1lbnRlZCEgQ2xpY2sgaGVyZSwgdG8gcXVpY2tseSBjcmVhdGUgYW4gaXNzdWUuYCwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gLygoRTExMDAwIGR1cGxpY2F0ZSBrZXkgZXJyb3IgY29sbGVjdGlvbjogKC4pK1xcLil8KF8xIGR1cCBrZXk6KC4pKykpL2c7XHJcbiAgICAgICAgICAgIGlmIChyZWFzb24ubWVzc2FnZSAmJiByZWdleC50ZXN0KHJlYXNvbi5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdEVycm9yKFwibWVzc2FnZS5kdXBsaWNhdGUta2V5LmVycm9yLlwiICsgcmVhc29uLm1lc3NhZ2UucmVwbGFjZShyZWdleCwgXCJcIikucmVwbGFjZShcIiBpbmRleDogXCIsIFwiLVwiKSwgaXNzdWVDb250ZXh0LCByZWFzb24sIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RXYXJuaW5nKGAke3VybH0gZW5kcG9pbnQgZXJyb3IgaXMgbm90IGhhbmRsZWQgcHJvcGVybHkhIENsaWNrIGhlcmUsIHRvIHF1aWNrbHkgY3JlYXRlIGFuIGlzc3VlLmAsIGlzc3VlQ29udGV4dCwgcmVhc29uLCBvcHRpb25zKTtcclxuICAgICAgICB9LCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVVcmwodXJsLCBvcHRpb25zKS50aGVuKGFic29sdXRlVXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGlzc3VlQ29udGV4dC51cmwgPSBhYnNvbHV0ZVVybDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNsaWVudC5yZXF1ZXN0KG9wdGlvbnMubWV0aG9kLCBhYnNvbHV0ZVVybCwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFJlcXVlc3QgPSBPYmplY3RVdGlscy5pc051bWJlcihvcHRpb25zLnRpbWVvdXQpICYmIG9wdGlvbnMudGltZW91dCA+IDBcclxuICAgICAgICAgICAgICAgICAgICA/IHJlcXVlc3QucGlwZSh0aW1lb3V0KG9wdGlvbnMudGltZW91dCkpIDogcmVxdWVzdDtcclxuICAgICAgICAgICAgICAgIGZpbmFsUmVxdWVzdC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXBvcnRQcm9ncmVzcyAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZTogTWF0aFV0aWxzLnJvdW5kKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsLCAyLCAwLjAxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2ZW50LnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIocHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnBhcnNlUmVzcG9uc2UoZXZlbnQsIHVybCwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgYXMgSHR0cEhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0aEtleSA9IFwiQXV0aG9yaXphdGlvblwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0b2tlbiBhdXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jICYmIGhlYWRlcnMuaGFzKGF1dGhLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJUb2tlblRpbWUgPSB0aGlzLmdldFVzZXJUb2tlblRpbWUoKSB8fCBjdXJyZW50VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZSBsYXN0IHJlcXVlc3Qgd2FzIGEgbG9uZy1sb25nIHRpbWUgYWdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIDYwMDAwMCA+IHVzZXJUb2tlblRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpZW50LnJlbmV3VG9rZW5GdW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlIHwgVGltZW91dEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgVGltZW91dEVycm9yIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PSAzMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhLZXkgPSBcIkF1dGhvcml6YXRpb25cIjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbiBhdXRob3JpemF0aW9uIGhlYWRlciBleGlzdHMsIGFuZCB3ZSBzdGlsbCBoYXZlIGFuIFVuYXV0aG9yaXplZCByZXNwb25zZSBwcm9tcHQgdGhlIHVzZXIgdG8gbG9nIGluIGFnYWluXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzKGF1dGhLZXkpICYmIHJlc3BvbnNlLnN0YXR1cyA9PSA0MDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVzaGVkID0gdGhpcy5wdXNoRmFpbGVkUmVxdWVzdCh1cmwsIG9wdGlvbnMsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnMob3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b1Byb21pc2UodXJsLCBvcHRpb25zLCBsaXN0ZW5lcikudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1c2hlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVW5hdXRob3JpemVkRXJyb3IoYWJzb2x1dGVVcmwsIG9wdGlvbnMsICgpID0+IHJlamVjdChyZXNwb25zZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldFVzZXJUb2tlblRpbWUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldChcInVzZXJUb2tlblRpbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHB1c2hGYWlsZWRSZXF1ZXN0KHVybDogc3RyaW5nLCBvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMsIHJlcTogKCkgPT4gdm9pZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZihcInRva2Vuc1wiKSA+PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgQmFzZUh0dHBTZXJ2aWNlLmZhaWxlZFJlcXVlc3RzLnB1c2gocmVxKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2hlY2tIZWFkZXJzKGhlYWRlcnM6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaGVhZGVycyB8fCAhaGVhZGVycy5jb29raWUgfHwgIWhlYWRlcnMucmVmZXJlciB8fCAhaGVhZGVycy5ob3N0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMucmVmZXJlci5pbmRleE9mKGhlYWRlcnMuaG9zdCkgPj0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZU9wdGlvbnMob3B0aW9ucz86IElSZXF1ZXN0T3B0aW9ucywgbWV0aG9kOiBzdHJpbmcgPSBcIkdFVFwiLCBib2R5PzogYW55KTogSVJlcXVlc3RPcHRpb25zIHtcclxuICAgICAgICAvLyBTZXQgYmFzZSBvcHRpb25zXHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPyB7Li4ub3B0aW9uc30gOiB7fTtcclxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IG1ldGhvZDtcclxuICAgICAgICBvcHRpb25zLm9ic2VydmUgPSBvcHRpb25zLm9ic2VydmUgfHwgXCJib2R5XCI7XHJcbiAgICAgICAgb3B0aW9ucy5vcmlnaW5hbEhlYWRlcnMgPSBvcHRpb25zLm9yaWdpbmFsSGVhZGVycyB8fCAob3B0aW9ucy5oZWFkZXJzIGFzIElIdHRwSGVhZGVycykgfHwge307XHJcbiAgICAgICAgb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgPSBPYmplY3RVdGlscy5pc0Jvb2xlYW4ob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMpID8gb3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgOiB0aGlzLndpdGhDcmVkZW50aWFscztcclxuICAgICAgICBvcHRpb25zLmJvZHkgPSBib2R5IHx8IHt9O1xyXG4gICAgICAgIC8vIFNldCBjb29raWVzIGZyb20gc2VydmVyIHNpZGUgcmVxdWVzdFxyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSAhdGhpcy5yZXF1ZXN0ID8gbnVsbCA6IHRoaXMucmVxdWVzdC5oZWFkZXJzO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSGVhZGVycyhoZWFkZXJzKSkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb29raWVcIl0gPSBoZWFkZXJzLmNvb2tpZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVycyhvcHRpb25zKTtcclxuICAgICAgICBvcHRpb25zLnBhcmFtcyA9IHRoaXMubWFrZVBhcmFtcyhvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFrZUhlYWRlcnMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cEhlYWRlcnMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5tYWtlSGVhZGVycyhPYmplY3QuYXNzaWduKHt9LCB0aGlzLnJlcXVlc3RIZWFkZXJzLCBvcHRpb25zPy5oZWFkZXJzIHx8IHt9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1ha2VQYXJhbXMob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogSHR0cFBhcmFtcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1ha2VQYXJhbXMoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5yZXF1ZXN0UGFyYW1zLCBvcHRpb25zPy5wYXJhbXMgfHwge30pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcGFyc2VSZXNwb25zZShyZXNwb25zZTogYW55LCB1cmw6IHN0cmluZywgb3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogYW55IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhcnNlVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwodXJsKS5yZXBsYWNlKC8oPzooKD8hOikuXFwvKVxcLykvZywgXCIkMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgYWJzb2x1dGVVcmwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VVcmwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc1JlcXVlc3RVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdDtcclxuICAgICAgICBpZiAoIXJlcSB8fCAhdXJsIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSB8fCB1cmwuc3RhcnRzV2l0aChcIi8vXCIpKSByZXR1cm4gdXJsO1xyXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHVybC5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIjtcclxuICAgICAgICByZXR1cm4gYCR7cmVxLnByb3RvY29sfTovLyR7cmVxLmdldChcImhvc3RcIil9JHtzZXBhcmF0b3J9JHt1cmx9YDtcclxuICAgIH1cclxufVxyXG4iXX0=
|