@smartbit4all/ng-client 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +386 -0
- package/esm2020/lib/session/api/api/api.mjs +4 -0
- package/esm2020/lib/session/api/api/session.service.mjs +306 -0
- package/esm2020/lib/session/api/configuration.mjs +91 -0
- package/esm2020/lib/session/api/encoder.mjs +19 -0
- package/esm2020/lib/session/api/index.mjs +3 -0
- package/esm2020/lib/session/api/model/accountInfo.mjs +13 -0
- package/esm2020/lib/session/api/model/apiError.mjs +13 -0
- package/esm2020/lib/session/api/model/authenticationProviderData.mjs +13 -0
- package/esm2020/lib/session/api/model/getAuthenticationProvidersResponse.mjs +2 -0
- package/esm2020/lib/session/api/model/models.mjs +9 -0
- package/esm2020/lib/session/api/model/refreshSessionRequest.mjs +13 -0
- package/esm2020/lib/session/api/model/session.mjs +2 -0
- package/esm2020/lib/session/api/model/sessionInfoData.mjs +2 -0
- package/esm2020/lib/session/api/model/userActivityLog.mjs +13 -0
- package/esm2020/lib/session/api/param.mjs +2 -0
- package/esm2020/lib/session/api/variables.mjs +9 -0
- package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +225 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +90 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +43 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +40 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +52 -0
- package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +161 -0
- package/esm2020/lib/session/projects.mjs +12 -0
- package/esm2020/lib/session/smart-error-catching.interceptor.mjs +71 -0
- package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +36 -0
- package/esm2020/lib/session/smart-session-handler.service.mjs +6 -0
- package/esm2020/lib/session/smart-session.module.mjs +74 -0
- package/esm2020/lib/session/smart-session.service.mjs +204 -0
- package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +35 -0
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +51 -0
- package/esm2020/lib/smart-ng-client.module.mjs +20 -0
- package/esm2020/lib/smart-ng-client.service.mjs +19 -0
- package/esm2020/lib/view-context/api/api/api.mjs +4 -0
- package/esm2020/lib/view-context/api/api/view.service.mjs +401 -0
- package/esm2020/lib/view-context/api/api.module.mjs +40 -0
- package/esm2020/lib/view-context/api/configuration.mjs +91 -0
- package/esm2020/lib/view-context/api/encoder.mjs +19 -0
- package/esm2020/lib/view-context/api/index.mjs +7 -0
- package/esm2020/lib/view-context/api/model/closeResult.mjs +17 -0
- package/esm2020/lib/view-context/api/model/componentConstraint.mjs +2 -0
- package/esm2020/lib/view-context/api/model/messageData.mjs +2 -0
- package/esm2020/lib/view-context/api/model/messageOption.mjs +2 -0
- package/esm2020/lib/view-context/api/model/messageOptionType.mjs +17 -0
- package/esm2020/lib/view-context/api/model/messageResult.mjs +2 -0
- package/esm2020/lib/view-context/api/model/messageType.mjs +18 -0
- package/esm2020/lib/view-context/api/model/models.mjs +29 -0
- package/esm2020/lib/view-context/api/model/openPendingData.mjs +2 -0
- package/esm2020/lib/view-context/api/model/smartLinkData.mjs +2 -0
- package/esm2020/lib/view-context/api/model/uiAction.mjs +2 -0
- package/esm2020/lib/view-context/api/model/uiActionButtonDescriptor.mjs +13 -0
- package/esm2020/lib/view-context/api/model/uiActionButtonIconPos.mjs +16 -0
- package/esm2020/lib/view-context/api/model/uiActionButtonType.mjs +21 -0
- package/esm2020/lib/view-context/api/model/uiActionDescriptor.mjs +2 -0
- package/esm2020/lib/view-context/api/model/uiActionDialogDescriptor.mjs +2 -0
- package/esm2020/lib/view-context/api/model/uiActionFeedbackType.mjs +16 -0
- package/esm2020/lib/view-context/api/model/uiActionInputType.mjs +18 -0
- package/esm2020/lib/view-context/api/model/uiActionRequest.mjs +13 -0
- package/esm2020/lib/view-context/api/model/view.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewApiError.mjs +13 -0
- package/esm2020/lib/view-context/api/model/viewConstraint.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewContext.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewContextData.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewContextUpdate.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewData.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewState.mjs +21 -0
- package/esm2020/lib/view-context/api/model/viewStateUpdate.mjs +2 -0
- package/esm2020/lib/view-context/api/model/viewType.mjs +17 -0
- package/esm2020/lib/view-context/api/param.mjs +2 -0
- package/esm2020/lib/view-context/api/variables.mjs +9 -0
- package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +63 -0
- package/esm2020/lib/view-context/projects.mjs +17 -0
- package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +53 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +47 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +112 -0
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +51 -0
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +81 -0
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +113 -0
- package/esm2020/lib/view-context/smart-ui-action/ui-action.model.mjs +7 -0
- package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +149 -0
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +24 -0
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +44 -0
- package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +28 -0
- package/esm2020/lib/view-context/smart-view-context.model.mjs +2 -0
- package/esm2020/lib/view-context/smart-view-context.module.mjs +84 -0
- package/esm2020/lib/view-context/smart-view-context.service.mjs +310 -0
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -0
- package/esm2020/lib/view-context/value-api/api.module.mjs +40 -0
- package/esm2020/lib/view-context/value-api/configuration.mjs +91 -0
- package/esm2020/lib/view-context/value-api/index.mjs +6 -0
- package/esm2020/lib/view-context/value-api/model/models.mjs +2 -0
- package/esm2020/lib/view-context/value-api/model/valueSetData.mjs +13 -0
- package/esm2020/lib/view-context/value-api/param.mjs +2 -0
- package/esm2020/lib/view-context/value-api/variables.mjs +9 -0
- package/esm2020/projects.mjs +8 -0
- package/esm2020/smartbit4all-ng-client.mjs +5 -0
- package/fesm2015/smartbit4all-ng-client.mjs +3418 -0
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -0
- package/fesm2020/smartbit4all-ng-client.mjs +3423 -0
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -0
- package/lib/session/api/api/api.d.ts +3 -0
- package/lib/session/api/api/session.service.d.ts +107 -0
- package/lib/session/api/configuration.d.ts +104 -0
- package/lib/session/api/encoder.d.ts +11 -0
- package/lib/session/api/index.d.ts +2 -0
- package/lib/session/api/model/accountInfo.d.ts +22 -0
- package/lib/session/api/model/apiError.d.ts +15 -0
- package/lib/session/api/model/authenticationProviderData.d.ts +17 -0
- package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -0
- package/lib/session/api/model/models.d.ts +8 -0
- package/lib/session/api/model/refreshSessionRequest.d.ts +14 -0
- package/lib/session/api/model/session.d.ts +32 -0
- package/lib/session/api/model/sessionInfoData.d.ts +22 -0
- package/lib/session/api/model/userActivityLog.d.ts +33 -0
- package/lib/session/api/param.d.ts +37 -0
- package/lib/session/api/variables.d.ts +8 -0
- package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -0
- package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.d.ts +28 -0
- package/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.d.ts +18 -0
- package/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.d.ts +15 -0
- package/lib/session/dev-tool/smart-dev-tool.interceptor.d.ts +18 -0
- package/lib/session/dev-tool/smart-dev-tool.service.d.ts +55 -0
- package/lib/session/projects.d.ts +8 -0
- package/lib/session/smart-error-catching.interceptor.d.ts +13 -0
- package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -0
- package/lib/session/smart-session-handler.service.d.ts +11 -0
- package/lib/session/smart-session.module.d.ts +15 -0
- package/lib/session/smart-session.service.d.ts +50 -0
- package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -0
- package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -0
- package/lib/smart-ng-client.module.d.ts +8 -0
- package/lib/smart-ng-client.service.d.ts +10 -0
- package/lib/view-context/api/api/api.d.ts +3 -0
- package/lib/view-context/api/api/view.service.d.ts +147 -0
- package/lib/view-context/api/api.module.d.ts +11 -0
- package/lib/view-context/api/configuration.d.ts +104 -0
- package/lib/view-context/api/encoder.d.ts +11 -0
- package/lib/view-context/api/index.d.ts +6 -0
- package/lib/view-context/api/model/closeResult.d.ts +17 -0
- package/lib/view-context/api/model/componentConstraint.d.ts +25 -0
- package/lib/view-context/api/model/messageData.d.ts +27 -0
- package/lib/view-context/api/model/messageOption.d.ts +18 -0
- package/lib/view-context/api/model/messageOptionType.d.ts +17 -0
- package/lib/view-context/api/model/messageResult.d.ts +16 -0
- package/lib/view-context/api/model/messageType.d.ts +18 -0
- package/lib/view-context/api/model/models.d.ts +28 -0
- package/lib/view-context/api/model/openPendingData.d.ts +22 -0
- package/lib/view-context/api/model/smartLinkData.d.ts +21 -0
- package/lib/view-context/api/model/uiAction.d.ts +26 -0
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -0
- package/lib/view-context/api/model/uiActionButtonIconPos.d.ts +19 -0
- package/lib/view-context/api/model/uiActionButtonType.d.ts +24 -0
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +32 -0
- package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +22 -0
- package/lib/view-context/api/model/uiActionFeedbackType.d.ts +19 -0
- package/lib/view-context/api/model/uiActionInputType.d.ts +18 -0
- package/lib/view-context/api/model/uiActionRequest.d.ts +27 -0
- package/lib/view-context/api/model/view.d.ts +36 -0
- package/lib/view-context/api/model/viewApiError.d.ts +18 -0
- package/lib/view-context/api/model/viewConstraint.d.ts +18 -0
- package/lib/view-context/api/model/viewContext.d.ts +22 -0
- package/lib/view-context/api/model/viewContextData.d.ts +19 -0
- package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -0
- package/lib/view-context/api/model/viewData.d.ts +25 -0
- package/lib/view-context/api/model/viewState.d.ts +21 -0
- package/lib/view-context/api/model/viewStateUpdate.d.ts +22 -0
- package/lib/view-context/api/model/viewType.d.ts +17 -0
- package/lib/view-context/api/param.d.ts +37 -0
- package/lib/view-context/api/variables.d.ts +8 -0
- package/lib/view-context/message-dialog/message-dialog.component.d.ts +17 -0
- package/lib/view-context/projects.d.ts +13 -0
- package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +28 -0
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -0
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +24 -0
- package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +21 -0
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +30 -0
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +21 -0
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -0
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +17 -0
- package/lib/view-context/smart-view-context.interceptor.d.ts +13 -0
- package/lib/view-context/smart-view-context.model.d.ts +30 -0
- package/lib/view-context/smart-view-context.module.d.ts +20 -0
- package/lib/view-context/smart-view-context.service.d.ts +60 -0
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -0
- package/lib/view-context/value-api/api.module.d.ts +11 -0
- package/lib/view-context/value-api/configuration.d.ts +104 -0
- package/lib/view-context/value-api/index.d.ts +5 -0
- package/lib/view-context/value-api/model/models.d.ts +1 -0
- package/lib/view-context/value-api/model/valueSetData.d.ts +39 -0
- package/lib/view-context/value-api/param.d.ts +37 -0
- package/lib/view-context/value-api/variables.d.ts +8 -0
- package/package.json +38 -0
- package/projects.d.ts +4 -0
- package/smartbit4all-ng-client-1.0.0.tgz +0 -0
- package/smartbit4all-ng-client.d.ts +5 -0
- package/src/lib/session/api/README.md +226 -0
- package/src/lib/view-context/api/README.md +226 -0
- package/src/lib/view-context/value-api/README.md +226 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { HttpEventType, } from "@angular/common/http";
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { catchError, map, throwError } from "rxjs";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./smart-dev-tool.service";
|
|
6
|
+
export class SmartDevToolInterceptor {
|
|
7
|
+
constructor(service) {
|
|
8
|
+
this.service = service;
|
|
9
|
+
}
|
|
10
|
+
intercept(request, next) {
|
|
11
|
+
if (!this.service.isActive) {
|
|
12
|
+
return next.handle(request);
|
|
13
|
+
}
|
|
14
|
+
let requestDate = new Date();
|
|
15
|
+
return next.handle(request).pipe(map((event) => {
|
|
16
|
+
if (event.type === HttpEventType.Response) {
|
|
17
|
+
let responseDate = new Date();
|
|
18
|
+
this.service.writeResponse(request, event, requestDate, responseDate);
|
|
19
|
+
}
|
|
20
|
+
return event;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
SmartDevToolInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolInterceptor, deps: [{ token: i1.SmartDevToolService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
25
|
+
SmartDevToolInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolInterceptor });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolInterceptor, decorators: [{
|
|
27
|
+
type: Injectable
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.SmartDevToolService }]; } });
|
|
29
|
+
export class SmartDevToolErrorInterceptor {
|
|
30
|
+
constructor(service) {
|
|
31
|
+
this.service = service;
|
|
32
|
+
}
|
|
33
|
+
intercept(request, next) {
|
|
34
|
+
if (!this.service.isActive) {
|
|
35
|
+
return next.handle(request);
|
|
36
|
+
}
|
|
37
|
+
let requestDate = new Date();
|
|
38
|
+
return next.handle(request).pipe(catchError((error) => {
|
|
39
|
+
if (error.status !== 200) {
|
|
40
|
+
let responseDate = new Date();
|
|
41
|
+
this.service.writeResponse(request, error, requestDate, responseDate);
|
|
42
|
+
}
|
|
43
|
+
return throwError(error);
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
SmartDevToolErrorInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolErrorInterceptor, deps: [{ token: i1.SmartDevToolService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
48
|
+
SmartDevToolErrorInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolErrorInterceptor });
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolErrorInterceptor, decorators: [{
|
|
50
|
+
type: Injectable
|
|
51
|
+
}], ctorParameters: function () { return [{ type: i1.SmartDevToolService }]; } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZGV2LXRvb2wuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL2Rldi10b29sL3NtYXJ0LWRldi10b29sLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxhQUFhLEdBSWhCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUkvRCxNQUFNLE9BQU8sdUJBQXVCO0lBQ2hDLFlBQW9CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQUcsQ0FBQztJQUVwRCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLElBQUksWUFBWSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQ3pFO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7O3FIQWxCUSx1QkFBdUI7eUhBQXZCLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOztBQXNCWCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLFlBQW9CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQUcsQ0FBQztJQUVwRCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDekU7WUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7MEhBbEJRLDRCQUE0Qjs4SEFBNUIsNEJBQTRCOzRGQUE1Qiw0QkFBNEI7a0JBRHhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEh0dHBFcnJvclJlc3BvbnNlLFxuICAgIEh0dHBFdmVudCxcbiAgICBIdHRwRXZlbnRUeXBlLFxuICAgIEh0dHBIYW5kbGVyLFxuICAgIEh0dHBJbnRlcmNlcHRvcixcbiAgICBIdHRwUmVxdWVzdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBTbWFydERldlRvb2xTZXJ2aWNlIH0gZnJvbSBcIi4vc21hcnQtZGV2LXRvb2wuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU21hcnREZXZUb29sSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogU21hcnREZXZUb29sU2VydmljZSkge31cblxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXF1ZXN0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgICAgICAgbWFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLndyaXRlUmVzcG9uc2UocmVxdWVzdCwgZXZlbnQsIHJlcXVlc3REYXRlLCByZXNwb25zZURhdGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNtYXJ0RGV2VG9vbEVycm9ySW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogU21hcnREZXZUb29sU2VydmljZSkge31cblxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXF1ZXN0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2Uud3JpdGVSZXNwb25zZShyZXF1ZXN0LCBlcnJvciwgcmVxdWVzdERhdGUsIHJlc3BvbnNlRGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { DatePipe } from "@angular/common";
|
|
2
|
+
import { Injectable, Pipe } from "@angular/core";
|
|
3
|
+
import { Subject } from "rxjs";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../cookie-service/smart-cookie.service";
|
|
6
|
+
export class SmartDevToolService {
|
|
7
|
+
constructor(cookieService) {
|
|
8
|
+
this.cookieService = cookieService;
|
|
9
|
+
this.smartDevToolName = "smartDevTool";
|
|
10
|
+
this.isSmartDevToolActiveName = "smartDevToolActive";
|
|
11
|
+
this.isActive = false;
|
|
12
|
+
this.smartDevToolHoursName = "smartDevToolHours";
|
|
13
|
+
this.smartDevToolMaxName = "smartDevToolMaxCalls";
|
|
14
|
+
this.hoursToSave = 1;
|
|
15
|
+
this.maxNumOfSavedCalls = 50;
|
|
16
|
+
this.descriptorChanged = new Subject();
|
|
17
|
+
this.newErrorsCount = 0;
|
|
18
|
+
this.newErrorsCountChanged = new Subject();
|
|
19
|
+
this.setUpLocalStorage();
|
|
20
|
+
let apiCallsFromLocalStorage = localStorage.getItem(this.smartDevToolName);
|
|
21
|
+
if (apiCallsFromLocalStorage) {
|
|
22
|
+
this.descriptor = JSON.parse(apiCallsFromLocalStorage);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
this.descriptor = { apiCalls: [] };
|
|
26
|
+
this.save();
|
|
27
|
+
}
|
|
28
|
+
window.addEventListener("storage", (event) => {
|
|
29
|
+
if (event.storageArea === localStorage) {
|
|
30
|
+
this.isActive = localStorage.getItem(this.isSmartDevToolActiveName) === "true";
|
|
31
|
+
let hoursToSaveString = localStorage.getItem(this.smartDevToolHoursName);
|
|
32
|
+
if (hoursToSaveString) {
|
|
33
|
+
this.hoursToSave = Number.parseInt(hoursToSaveString);
|
|
34
|
+
}
|
|
35
|
+
let maxNumOfSavedCalls = localStorage.getItem(this.smartDevToolMaxName);
|
|
36
|
+
if (maxNumOfSavedCalls) {
|
|
37
|
+
this.maxNumOfSavedCalls = Number.parseInt(maxNumOfSavedCalls);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
setUpLocalStorage() {
|
|
43
|
+
let keysOfLocalStorage = Object.keys(localStorage);
|
|
44
|
+
if (!keysOfLocalStorage.includes(this.isSmartDevToolActiveName)) {
|
|
45
|
+
localStorage.setItem(this.isSmartDevToolActiveName, "true");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
writeResponse(request, response, requestDate, responseDate) {
|
|
49
|
+
this.sanitizeByLength();
|
|
50
|
+
this.sanitizeByTime();
|
|
51
|
+
let requestHeader = this.createObject(request.headers.keys(), request.headers, false);
|
|
52
|
+
let responseHeader = this.createObject(response.headers.keys(), response.headers, false);
|
|
53
|
+
let _localStorage = this.createObject(Object.keys(localStorage).filter((key) => key !== this.smartDevToolName), localStorage, true);
|
|
54
|
+
let _sessionStorage = this.createObject(Object.keys(sessionStorage), sessionStorage, true);
|
|
55
|
+
let _cookies = this.cookieService.getAll();
|
|
56
|
+
this.descriptor.apiCalls = [
|
|
57
|
+
{
|
|
58
|
+
url: response.url,
|
|
59
|
+
requestBody: request.body,
|
|
60
|
+
requestHeader,
|
|
61
|
+
requestDate,
|
|
62
|
+
requestMethod: request.method,
|
|
63
|
+
responseBody: response.body ?? null,
|
|
64
|
+
responseHeader,
|
|
65
|
+
responseStatus: response.status,
|
|
66
|
+
responseStatusText: response.statusText,
|
|
67
|
+
responseDate,
|
|
68
|
+
localStorage: _localStorage,
|
|
69
|
+
sessionStorage: _sessionStorage,
|
|
70
|
+
cookies: _cookies,
|
|
71
|
+
},
|
|
72
|
+
...this.descriptor.apiCalls,
|
|
73
|
+
];
|
|
74
|
+
if (response.status !== 200) {
|
|
75
|
+
this.newErrorsCount++;
|
|
76
|
+
this.newErrorsCountChanged.next();
|
|
77
|
+
}
|
|
78
|
+
this.save();
|
|
79
|
+
}
|
|
80
|
+
clearErrors() {
|
|
81
|
+
this.newErrorsCount = 0;
|
|
82
|
+
this.newErrorsCountChanged.next();
|
|
83
|
+
}
|
|
84
|
+
createObject(keys, mapWithValues, useGetItem) {
|
|
85
|
+
let newObject = {};
|
|
86
|
+
keys.forEach((key) => {
|
|
87
|
+
if (useGetItem) {
|
|
88
|
+
newObject[key] = mapWithValues.getItem(key);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
newObject[key] = mapWithValues.get(key);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return newObject;
|
|
95
|
+
}
|
|
96
|
+
sanitizeByTime() {
|
|
97
|
+
let now = new Date();
|
|
98
|
+
this.descriptor.apiCalls = this.descriptor.apiCalls.filter((apiCall) => {
|
|
99
|
+
let hoursBetween;
|
|
100
|
+
if (typeof apiCall.requestDate === "string") {
|
|
101
|
+
hoursBetween = Math.floor(Math.abs(now.getMilliseconds() - new Date(apiCall.requestDate).getMilliseconds()) / 36e5);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
hoursBetween = Math.floor(Math.abs(now.getMilliseconds() - apiCall.requestDate.getMilliseconds()) /
|
|
105
|
+
36e5);
|
|
106
|
+
}
|
|
107
|
+
return hoursBetween < this.hoursToSave;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
sanitizeByLength() {
|
|
111
|
+
if (this.descriptor?.apiCalls &&
|
|
112
|
+
this.descriptor.apiCalls.length > this.maxNumOfSavedCalls) {
|
|
113
|
+
let length = this.descriptor.apiCalls.length;
|
|
114
|
+
this.descriptor.apiCalls.splice(this.maxNumOfSavedCalls - 1, length - this.maxNumOfSavedCalls);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
save() {
|
|
118
|
+
try {
|
|
119
|
+
localStorage.setItem(this.smartDevToolName, JSON.stringify(this.descriptor));
|
|
120
|
+
this.descriptorChanged.next();
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
// localStorage.setItem() throws a "QuotaExceededError" DOMException exception if the new value
|
|
124
|
+
// couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site,
|
|
125
|
+
// or if the quota has been exceeded.)
|
|
126
|
+
this.sanitizeByLength();
|
|
127
|
+
this.save();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
clear() {
|
|
131
|
+
this.descriptor = {
|
|
132
|
+
apiCalls: [],
|
|
133
|
+
};
|
|
134
|
+
this.save();
|
|
135
|
+
}
|
|
136
|
+
getPureString() {
|
|
137
|
+
return localStorage.getItem(this.smartDevToolName);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
SmartDevToolService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolService, deps: [{ token: i1.SmartCookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
141
|
+
SmartDevToolService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolService, providedIn: "root" });
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolService, decorators: [{
|
|
143
|
+
type: Injectable,
|
|
144
|
+
args: [{
|
|
145
|
+
providedIn: "root",
|
|
146
|
+
}]
|
|
147
|
+
}], ctorParameters: function () { return [{ type: i1.SmartCookieService }]; } });
|
|
148
|
+
export class SmartDevToolDatePipe extends DatePipe {
|
|
149
|
+
transform(value, format = "yyyy.MM.dd. H:mm:ss") {
|
|
150
|
+
return super.transform(value, format);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
SmartDevToolDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolDatePipe, deps: null, target: i0.ɵɵFactoryTarget.Pipe });
|
|
154
|
+
SmartDevToolDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolDatePipe, name: "smartDevToolDatePipe" });
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartDevToolDatePipe, decorators: [{
|
|
156
|
+
type: Pipe,
|
|
157
|
+
args: [{
|
|
158
|
+
name: "smartDevToolDatePipe",
|
|
159
|
+
}]
|
|
160
|
+
}] });
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZGV2LXRvb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3Nlc3Npb24vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQU0vQixNQUFNLE9BQU8sbUJBQW1CO0lBZ0I1QixZQUFvQixhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFickQscUJBQWdCLEdBQVcsY0FBYyxDQUFDO1FBQzFDLDZCQUF3QixHQUFXLG9CQUFvQixDQUFDO1FBQ3hELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsMEJBQXFCLEdBQVcsbUJBQW1CLENBQUM7UUFDcEQsd0JBQW1CLEdBQVcsc0JBQXNCLENBQUM7UUFDckQsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsdUJBQWtCLEdBQVcsRUFBRSxDQUFDO1FBRWhDLHNCQUFpQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpELG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLDBCQUFxQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR2pELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksd0JBQXdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxJQUFJLHdCQUF3QixFQUFFO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQzFE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QyxJQUFJLEVBQUUsQ0FBQztTQUNqQztRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ2pCLCtGQUErRjtZQUMvRiw2RkFBNkY7WUFDN0Ysc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2QsUUFBUSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBRSxDQUFDO0lBQ3hELENBQUM7O2lIQW5MUSxtQkFBbUI7cUhBQW5CLG1CQUFtQixjQUZoQixNQUFNOzRGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7O0FBOE1ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxRQUFRO0lBQ3JDLFNBQVMsQ0FBQyxLQUFVLEVBQUUsU0FBaUIscUJBQXFCO1FBQ2pFLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7a0hBSFEsb0JBQW9CO2dIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFIaEMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsc0JBQXNCO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdGFibGUsIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBTbWFydENvb2tpZVNlcnZpY2UgfSBmcm9tIFwiLi4vY29va2llLXNlcnZpY2Uvc21hcnQtY29va2llLnNlcnZpY2VcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydERldlRvb2xTZXJ2aWNlIHtcbiAgICBkZXNjcmlwdG9yPzogU21hcnREZXZUb29sRGVzY3JpcHRvcjtcblxuICAgIHNtYXJ0RGV2VG9vbE5hbWU6IHN0cmluZyA9IFwic21hcnREZXZUb29sXCI7XG4gICAgaXNTbWFydERldlRvb2xBY3RpdmVOYW1lOiBzdHJpbmcgPSBcInNtYXJ0RGV2VG9vbEFjdGl2ZVwiO1xuICAgIGlzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gICAgc21hcnREZXZUb29sSG91cnNOYW1lOiBzdHJpbmcgPSBcInNtYXJ0RGV2VG9vbEhvdXJzXCI7XG4gICAgc21hcnREZXZUb29sTWF4TmFtZTogc3RyaW5nID0gXCJzbWFydERldlRvb2xNYXhDYWxsc1wiO1xuICAgIGhvdXJzVG9TYXZlOiBudW1iZXIgPSAxO1xuICAgIG1heE51bU9mU2F2ZWRDYWxsczogbnVtYmVyID0gNTA7XG5cbiAgICBkZXNjcmlwdG9yQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBuZXdFcnJvcnNDb3VudDogbnVtYmVyID0gMDtcbiAgICBuZXdFcnJvcnNDb3VudENoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBTbWFydENvb2tpZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5zZXRVcExvY2FsU3RvcmFnZSgpO1xuXG4gICAgICAgIGxldCBhcGlDYWxsc0Zyb21Mb2NhbFN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnNtYXJ0RGV2VG9vbE5hbWUpO1xuICAgICAgICBpZiAoYXBpQ2FsbHNGcm9tTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSBKU09OLnBhcnNlKGFwaUNhbGxzRnJvbUxvY2FsU3RvcmFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSB7IGFwaUNhbGxzOiBbXSB9O1xuICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInN0b3JhZ2VcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc3RvcmFnZUFyZWEgPT09IGxvY2FsU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmlzU21hcnREZXZUb29sQWN0aXZlTmFtZSkgPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgIGxldCBob3Vyc1RvU2F2ZVN0cmluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc21hcnREZXZUb29sSG91cnNOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnNUb1NhdmVTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3Vyc1RvU2F2ZSA9IE51bWJlci5wYXJzZUludChob3Vyc1RvU2F2ZVN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBtYXhOdW1PZlNhdmVkQ2FsbHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnNtYXJ0RGV2VG9vbE1heE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChtYXhOdW1PZlNhdmVkQ2FsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhOdW1PZlNhdmVkQ2FsbHMgPSBOdW1iZXIucGFyc2VJbnQobWF4TnVtT2ZTYXZlZENhbGxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VXBMb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgICAgIGxldCBrZXlzT2ZMb2NhbFN0b3JhZ2UgPSBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpO1xuICAgICAgICBpZiAoIWtleXNPZkxvY2FsU3RvcmFnZS5pbmNsdWRlcyh0aGlzLmlzU21hcnREZXZUb29sQWN0aXZlTmFtZSkpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuaXNTbWFydERldlRvb2xBY3RpdmVOYW1lLCBcInRydWVcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVJlc3BvbnNlKFxuICAgICAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgICAgICByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gfCBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICAgICAgcmVxdWVzdERhdGU6IERhdGUsXG4gICAgICAgIHJlc3BvbnNlRGF0ZTogRGF0ZVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhbml0aXplQnlMZW5ndGgoKTtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZUJ5VGltZSgpO1xuXG4gICAgICAgIGxldCByZXF1ZXN0SGVhZGVyOiBhbnkgPSB0aGlzLmNyZWF0ZU9iamVjdChyZXF1ZXN0LmhlYWRlcnMua2V5cygpLCByZXF1ZXN0LmhlYWRlcnMsIGZhbHNlKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlSGVhZGVyOiBhbnkgPSB0aGlzLmNyZWF0ZU9iamVjdChcbiAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpLFxuICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IF9sb2NhbFN0b3JhZ2U6IGFueSA9IHRoaXMuY3JlYXRlT2JqZWN0KFxuICAgICAgICAgICAgT2JqZWN0LmtleXMobG9jYWxTdG9yYWdlKS5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiBrZXkgIT09IHRoaXMuc21hcnREZXZUb29sTmFtZSksXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGxldCBfc2Vzc2lvblN0b3JhZ2U6IGFueSA9IHRoaXMuY3JlYXRlT2JqZWN0KFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2Vzc2lvblN0b3JhZ2UpLFxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGxldCBfY29va2llczogYW55ID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldEFsbCgpO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvciEuYXBpQ2FsbHMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXJsOiByZXNwb25zZS51cmwsXG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHk6IHJlcXVlc3QuYm9keSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyLFxuICAgICAgICAgICAgICAgIHJlcXVlc3REYXRlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keTogKHJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZTxhbnk+KS5ib2R5ID8/IG51bGwsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VTdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VEYXRlLFxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZTogX2xvY2FsU3RvcmFnZSxcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZTogX3Nlc3Npb25TdG9yYWdlLFxuICAgICAgICAgICAgICAgIGNvb2tpZXM6IF9jb29raWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGVzY3JpcHRvciEuYXBpQ2FsbHMsXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0Vycm9yc0NvdW50Kys7XG4gICAgICAgICAgICB0aGlzLm5ld0Vycm9yc0NvdW50Q2hhbmdlZC5uZXh0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckVycm9ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZXdFcnJvcnNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMubmV3RXJyb3JzQ291bnRDaGFuZ2VkLm5leHQoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVPYmplY3Qoa2V5czogc3RyaW5nW10sIG1hcFdpdGhWYWx1ZXM6IGFueSwgdXNlR2V0SXRlbTogYm9vbGVhbik6IGFueSB7XG4gICAgICAgIGxldCBuZXdPYmplY3Q6IGFueSA9IHt9O1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAodXNlR2V0SXRlbSkge1xuICAgICAgICAgICAgICAgIG5ld09iamVjdFtrZXldID0gbWFwV2l0aFZhbHVlcy5nZXRJdGVtKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld09iamVjdFtrZXldID0gbWFwV2l0aFZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgfVxuXG4gICAgc2FuaXRpemVCeVRpbWUoKTogdm9pZCB7XG4gICAgICAgIGxldCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IhLmFwaUNhbGxzID0gdGhpcy5kZXNjcmlwdG9yIS5hcGlDYWxscy5maWx0ZXIoXG4gICAgICAgICAgICAoYXBpQ2FsbDogU21hcnREZXZUb29sQXBpQ2FsbERlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaG91cnNCZXR3ZWVuOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcGlDYWxsLnJlcXVlc3REYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzQmV0d2VlbiA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cuZ2V0TWlsbGlzZWNvbmRzKCkgLSBuZXcgRGF0ZShhcGlDYWxsLnJlcXVlc3REYXRlKS5nZXRNaWxsaXNlY29uZHMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSAvIDM2ZTVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc0JldHdlZW4gPSBNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnMobm93LmdldE1pbGxpc2Vjb25kcygpIC0gYXBpQ2FsbC5yZXF1ZXN0RGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2ZTVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNCZXR3ZWVuIDwgdGhpcy5ob3Vyc1RvU2F2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYW5pdGl6ZUJ5TGVuZ3RoKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3I/LmFwaUNhbGxzICYmXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IuYXBpQ2FsbHMubGVuZ3RoID4gdGhpcy5tYXhOdW1PZlNhdmVkQ2FsbHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5kZXNjcmlwdG9yLmFwaUNhbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvci5hcGlDYWxscy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhOdW1PZlNhdmVkQ2FsbHMgLSAxLFxuICAgICAgICAgICAgICAgIGxlbmd0aCAtIHRoaXMubWF4TnVtT2ZTYXZlZENhbGxzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZSgpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc21hcnREZXZUb29sTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kZXNjcmlwdG9yKSk7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3JDaGFuZ2VkLm5leHQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oKSB0aHJvd3MgYSBcIlF1b3RhRXhjZWVkZWRFcnJvclwiIERPTUV4Y2VwdGlvbiBleGNlcHRpb24gaWYgdGhlIG5ldyB2YWx1ZVxuICAgICAgICAgICAgLy8gY291bGRuJ3QgYmUgc2V0LiAoU2V0dGluZyBjb3VsZCBmYWlsIGlmLCBlLmcuLCB0aGUgdXNlciBoYXMgZGlzYWJsZWQgc3RvcmFnZSBmb3IgdGhlIHNpdGUsXG4gICAgICAgICAgICAvLyBvciBpZiB0aGUgcXVvdGEgaGFzIGJlZW4gZXhjZWVkZWQuKVxuICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZUJ5TGVuZ3RoKCk7XG4gICAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSB7XG4gICAgICAgICAgICBhcGlDYWxsczogW10sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgIH1cblxuICAgIGdldFB1cmVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc21hcnREZXZUb29sTmFtZSkhO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydERldlRvb2xEZXNjcmlwdG9yIHtcbiAgICBhcGlDYWxsczogU21hcnREZXZUb29sQXBpQ2FsbERlc2NyaXB0b3JbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydERldlRvb2xBcGlDYWxsRGVzY3JpcHRvciB7XG4gICAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3BvbnNlQm9keTogYW55O1xuICAgIHJlc3BvbnNlSGVhZGVyOiBhbnk7XG4gICAgcmVzcG9uc2VTdGF0dXM6IG51bWJlcjtcbiAgICByZXNwb25zZVN0YXR1c1RleHQ6IHN0cmluZztcbiAgICByZXNwb25zZURhdGU6IERhdGU7XG4gICAgcmVxdWVzdEhlYWRlcjogYW55O1xuICAgIHJlcXVlc3RCb2R5OiBhbnk7XG4gICAgcmVxdWVzdERhdGU6IERhdGU7XG4gICAgcmVxdWVzdE1ldGhvZDogc3RyaW5nO1xuICAgIGxvY2FsU3RvcmFnZTogYW55O1xuICAgIHNlc3Npb25TdG9yYWdlOiBhbnk7XG4gICAgY29va2llczogYW55O1xufVxuXG5AUGlwZSh7XG4gICAgbmFtZTogXCJzbWFydERldlRvb2xEYXRlUGlwZVwiLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydERldlRvb2xEYXRlUGlwZSBleHRlbmRzIERhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgb3ZlcnJpZGUgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdDogc3RyaW5nID0gXCJ5eXl5Lk1NLmRkLiBIOm1tOnNzXCIpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNmb3JtKHZhbHVlLCBmb3JtYXQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of smart-session
|
|
3
|
+
*/
|
|
4
|
+
export * from "./smart-session.service";
|
|
5
|
+
export * from "./api/index";
|
|
6
|
+
export * from "./smart-session.module";
|
|
7
|
+
export * from "./dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component";
|
|
8
|
+
export * from "./dev-tool/smart-dev-tool.service";
|
|
9
|
+
export * from "./smart-session-handler.service";
|
|
10
|
+
export * from "./smart-timer/smart-session-timer.component";
|
|
11
|
+
export * from "./smart-timer/smart-session-timer.service";
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3Byb2plY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsb0ZBQW9GLENBQUM7QUFDbkcsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc21hcnQtc2Vzc2lvblxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL3NtYXJ0LXNlc3Npb24uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2luZGV4XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zbWFydC1zZXNzaW9uLm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wtZmxvYXRpbmctYnV0dG9uL3NtYXJ0LWRldi10b29sLWZsb2F0aW5nLWJ1dHRvbi5jb21wb25lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rldi10b29sL3NtYXJ0LWRldi10b29sLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zbWFydC10aW1lci9zbWFydC1zZXNzaW9uLXRpbWVyLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc21hcnQtdGltZXIvc21hcnQtc2Vzc2lvbi10aW1lci5zZXJ2aWNlXCI7XG4iXX0=
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { from, throwError } from "rxjs";
|
|
3
|
+
import { catchError, switchMap } from "rxjs/operators";
|
|
4
|
+
import { SessionErrorBehaviour, } from "./projects";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./projects";
|
|
7
|
+
export class SmartErrorCatchingInterceptor {
|
|
8
|
+
constructor(session) {
|
|
9
|
+
this.session = session;
|
|
10
|
+
this.sessionErrorCodes = [
|
|
11
|
+
{
|
|
12
|
+
code: "session.expired",
|
|
13
|
+
behaviour: SessionErrorBehaviour.REFRESH,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
code: "session.refreshtoken.invalid",
|
|
17
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
code: "session.badrequest.missingtoken",
|
|
21
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
code: "session.security.nocontext",
|
|
25
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
code: "session.invalidsessionuri",
|
|
29
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
code: "session.notinitialized",
|
|
33
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
code: "session.viewcontext.missing",
|
|
37
|
+
behaviour: SessionErrorBehaviour.RESTART,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
intercept(request, next) {
|
|
42
|
+
return next.handle(request).pipe(catchError((error) => {
|
|
43
|
+
if (error.status === 400 && error.error.code) {
|
|
44
|
+
let sessionError = this.sessionErrorCodes.find((sessionError) => sessionError.code === error.error.code);
|
|
45
|
+
if (sessionError) {
|
|
46
|
+
return this.resolveError(sessionError).pipe(switchMap(() => {
|
|
47
|
+
this.session.headerParams.map((headerParam) => {
|
|
48
|
+
request = request.clone({
|
|
49
|
+
headers: request.headers.set(headerParam.headerName, headerParam.value),
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
return next.handle(request);
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return throwError(error);
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
resolveError(sessionError) {
|
|
60
|
+
if (sessionError.behaviour === SessionErrorBehaviour.RESTART) {
|
|
61
|
+
return from(this.session.handleSessionError(sessionError));
|
|
62
|
+
}
|
|
63
|
+
return from(this.session.refreshSession());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
SmartErrorCatchingInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartErrorCatchingInterceptor, deps: [{ token: i1.SmartSessionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
67
|
+
SmartErrorCatchingInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartErrorCatchingInterceptor });
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartErrorCatchingInterceptor, decorators: [{
|
|
69
|
+
type: Injectable
|
|
70
|
+
}], ctorParameters: function () { return [{ type: i1.SmartSessionService }]; } });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZXJyb3ItY2F0Y2hpbmcuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LWVycm9yLWNhdGNoaW5nLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBSUgscUJBQXFCLEdBRXhCLE1BQU0sWUFBWSxDQUFDOzs7QUFHcEIsTUFBTSxPQUFPLDZCQUE2QjtJQWdDdEMsWUFBb0IsT0FBNEI7UUFBNUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUEvQmhELHNCQUFpQixHQUFtQjtZQUNoQztnQkFDSSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztZQUNEO2dCQUNJLElBQUksRUFBRSw4QkFBOEI7Z0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQzNDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDM0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztZQUNEO2dCQUNJLElBQUksRUFBRSwyQkFBMkI7Z0JBQ2pDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO2FBQzNDO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsU0FBUyxFQUFFLHFCQUFxQixDQUFDLE9BQU87YUFDM0M7WUFDRDtnQkFDSSxJQUFJLEVBQUUsNkJBQTZCO2dCQUNuQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsT0FBTzthQUMzQztTQUNKLENBQUM7SUFFaUQsQ0FBQztJQUVwRCxTQUFTLENBQUMsT0FBNkIsRUFBRSxJQUFpQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSyxLQUFLLENBQUMsS0FBa0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQzFDLENBQUMsWUFBMEIsRUFBRSxFQUFFLENBQzNCLFlBQVksQ0FBQyxJQUFJLEtBQU0sS0FBSyxDQUFDLEtBQWtCLENBQUMsSUFBSSxDQUMzRCxDQUFDO2dCQUNGLElBQUksWUFBWSxFQUFFO29CQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFOzRCQUN2RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQ0FDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUN4QixXQUFXLENBQUMsVUFBVSxFQUN0QixXQUFXLENBQUMsS0FBSyxDQUNwQjs2QkFDSixDQUFDLENBQUM7d0JBQ1AsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoQyxDQUFDLENBQUMsQ0FDTCxDQUFDO2lCQUNMO2FBQ0o7WUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxZQUEwQjtRQUNuQyxJQUFJLFlBQVksQ0FBQyxTQUFTLEtBQUsscUJBQXFCLENBQUMsT0FBTyxFQUFFO1lBQzFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOzsySEFyRVEsNkJBQTZCOytIQUE3Qiw2QkFBNkI7NEZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSHR0cEVycm9yUmVzcG9uc2UsXG4gICAgSHR0cEV2ZW50LFxuICAgIEh0dHBIYW5kbGVyLFxuICAgIEh0dHBJbnRlcmNlcHRvcixcbiAgICBIdHRwUmVxdWVzdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICAgIEFwaUVycm9yLFxuICAgIEhlYWRlclBhcmFtLFxuICAgIFNlc3Npb25FcnJvcixcbiAgICBTZXNzaW9uRXJyb3JCZWhhdmlvdXIsXG4gICAgU21hcnRTZXNzaW9uU2VydmljZSxcbn0gZnJvbSBcIi4vcHJvamVjdHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNtYXJ0RXJyb3JDYXRjaGluZ0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgICBzZXNzaW9uRXJyb3JDb2RlczogU2Vzc2lvbkVycm9yW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6IFwic2Vzc2lvbi5leHBpcmVkXCIsXG4gICAgICAgICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRUZSRVNILFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBcInNlc3Npb24ucmVmcmVzaHRva2VuLmludmFsaWRcIixcbiAgICAgICAgICAgIGJlaGF2aW91cjogU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6IFwic2Vzc2lvbi5iYWRyZXF1ZXN0Lm1pc3Npbmd0b2tlblwiLFxuICAgICAgICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogXCJzZXNzaW9uLnNlY3VyaXR5Lm5vY29udGV4dFwiLFxuICAgICAgICAgICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXIuUkVTVEFSVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY29kZTogXCJzZXNzaW9uLmludmFsaWRzZXNzaW9udXJpXCIsXG4gICAgICAgICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiBcInNlc3Npb24ubm90aW5pdGlhbGl6ZWRcIixcbiAgICAgICAgICAgIGJlaGF2aW91cjogU2Vzc2lvbkVycm9yQmVoYXZpb3VyLlJFU1RBUlQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6IFwic2Vzc2lvbi52aWV3Y29udGV4dC5taXNzaW5nXCIsXG4gICAgICAgICAgICBiZWhhdmlvdXI6IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJULFxuICAgICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb246IFNtYXJ0U2Vzc2lvblNlcnZpY2UpIHt9XG5cbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgKGVycm9yLmVycm9yIGFzIEFwaUVycm9yKS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uRXJyb3IgPSB0aGlzLnNlc3Npb25FcnJvckNvZGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2Vzc2lvbkVycm9yOiBTZXNzaW9uRXJyb3IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkVycm9yLmNvZGUgPT09IChlcnJvci5lcnJvciBhcyBBcGlFcnJvcikuY29kZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRXJyb3Ioc2Vzc2lvbkVycm9yKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5oZWFkZXJQYXJhbXMubWFwKChoZWFkZXJQYXJhbTogSGVhZGVyUGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJQYXJhbS5oZWFkZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJQYXJhbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUVycm9yKHNlc3Npb25FcnJvcjogU2Vzc2lvbkVycm9yKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHNlc3Npb25FcnJvci5iZWhhdmlvdXIgPT09IFNlc3Npb25FcnJvckJlaGF2aW91ci5SRVNUQVJUKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnNlc3Npb24uaGFuZGxlU2Vzc2lvbkVycm9yKHNlc3Npb25FcnJvcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuc2Vzc2lvbi5yZWZyZXNoU2Vzc2lvbigpKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./smart-session.service";
|
|
4
|
+
export class SmartHeaderMaintainerInterceptor {
|
|
5
|
+
constructor(session) {
|
|
6
|
+
this.session = session;
|
|
7
|
+
}
|
|
8
|
+
intercept(request, next) {
|
|
9
|
+
const hasHeaders = this.session.headerParams && this.session.headerParams.length;
|
|
10
|
+
let headers = {};
|
|
11
|
+
if (hasHeaders) {
|
|
12
|
+
this.session.headerParams.map((headerParam) => {
|
|
13
|
+
headers[headerParam.headerName] = headerParam.value;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
let url = request.urlWithParams.replace("http://localhost", this.session.getBasePath());
|
|
17
|
+
// TODO fix me
|
|
18
|
+
if (request.urlWithParams.includes("/kerb/sso")) {
|
|
19
|
+
request = request.clone({
|
|
20
|
+
url: url,
|
|
21
|
+
});
|
|
22
|
+
return next.handle(request);
|
|
23
|
+
}
|
|
24
|
+
request = request.clone({
|
|
25
|
+
url: url,
|
|
26
|
+
setHeaders: headers,
|
|
27
|
+
});
|
|
28
|
+
return next.handle(request);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
SmartHeaderMaintainerInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartHeaderMaintainerInterceptor, deps: [{ token: i1.SmartSessionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
32
|
+
SmartHeaderMaintainerInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartHeaderMaintainerInterceptor });
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartHeaderMaintainerInterceptor, decorators: [{
|
|
34
|
+
type: Injectable
|
|
35
|
+
}], ctorParameters: function () { return [{ type: i1.SmartSessionService }]; } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtaGVhZGVyLW1haW50YWluZXIuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LWhlYWRlci1tYWludGFpbmVyLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8sZ0NBQWdDO0lBQ3pDLFlBQW9CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQUcsQ0FBQztJQUVwRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDakYsSUFBSSxPQUFPLEdBQTBDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUV4RixjQUFjO1FBQ2QsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM3QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDcEIsR0FBRyxFQUFFLEdBQUc7YUFDWCxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFFRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNwQixHQUFHLEVBQUUsR0FBRztZQUNSLFVBQVUsRUFBRSxPQUFPO1NBQ3RCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs4SEE3QlEsZ0NBQWdDO2tJQUFoQyxnQ0FBZ0M7NEZBQWhDLGdDQUFnQztrQkFENUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQsIEh0dHBJbnRlcmNlcHRvciB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBTbWFydFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vc21hcnQtc2Vzc2lvbi5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbWFydEhlYWRlck1haW50YWluZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXNzaW9uOiBTbWFydFNlc3Npb25TZXJ2aWNlKSB7fVxuXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgICAgICBjb25zdCBoYXNIZWFkZXJzID0gdGhpcy5zZXNzaW9uLmhlYWRlclBhcmFtcyAmJiB0aGlzLnNlc3Npb24uaGVhZGVyUGFyYW1zLmxlbmd0aDtcbiAgICAgICAgbGV0IGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gPSB7fTtcbiAgICAgICAgaWYgKGhhc0hlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5oZWFkZXJQYXJhbXMubWFwKChoZWFkZXJQYXJhbSkgPT4ge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbaGVhZGVyUGFyYW0uaGVhZGVyTmFtZV0gPSBoZWFkZXJQYXJhbS52YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsV2l0aFBhcmFtcy5yZXBsYWNlKFwiaHR0cDovL2xvY2FsaG9zdFwiLCB0aGlzLnNlc3Npb24uZ2V0QmFzZVBhdGgoKSk7XG5cbiAgICAgICAgLy8gVE9ETyBmaXggbWVcbiAgICAgICAgaWYgKHJlcXVlc3QudXJsV2l0aFBhcmFtcy5pbmNsdWRlcyhcIi9rZXJiL3Nzb1wiKSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgc2V0SGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export var SessionErrorBehaviour;
|
|
2
|
+
(function (SessionErrorBehaviour) {
|
|
3
|
+
SessionErrorBehaviour[SessionErrorBehaviour["REFRESH"] = 0] = "REFRESH";
|
|
4
|
+
SessionErrorBehaviour[SessionErrorBehaviour["RESTART"] = 1] = "RESTART";
|
|
5
|
+
})(SessionErrorBehaviour || (SessionErrorBehaviour = {}));
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24taGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sQ0FBTixJQUFZLHFCQUdYO0FBSEQsV0FBWSxxQkFBcUI7SUFDN0IsdUVBQU8sQ0FBQTtJQUNQLHVFQUFPLENBQUE7QUFDWCxDQUFDLEVBSFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU21hcnRTZXNzaW9uSGFuZGxlclNlcnZpY2Uge1xuICAgIGhhbmRsZVNlc3Npb25FcnJvcihzZXNzaW9uRXJyb3I6IFNlc3Npb25FcnJvcik6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkVycm9yIHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgYmVoYXZpb3VyOiBTZXNzaW9uRXJyb3JCZWhhdmlvdXI7XG59XG5cbmV4cG9ydCBlbnVtIFNlc3Npb25FcnJvckJlaGF2aW91ciB7XG4gICAgUkVGUkVTSCxcbiAgICBSRVNUQVJULFxufVxuIl19
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { HTTP_INTERCEPTORS } from "@angular/common/http";
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
|
|
3
|
+
import { MatButtonModule } from "@angular/material/button";
|
|
4
|
+
import { MatCommonModule } from "@angular/material/core";
|
|
5
|
+
import { MatExpansionModule } from "@angular/material/expansion";
|
|
6
|
+
import { BrowserModule } from "@angular/platform-browser";
|
|
7
|
+
import { SmartdialogModule } from "@smartbit4all/dialog";
|
|
8
|
+
import { SmartIconModule } from "@smartbit4all/icon";
|
|
9
|
+
import { SmartCookieService } from "./cookie-service/smart-cookie.service";
|
|
10
|
+
import { SmartDevToolDialogComponent } from "./dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component";
|
|
11
|
+
import { SmartDevToolFloatingButtonComponent } from "./dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component";
|
|
12
|
+
import { SmartDevToolInterceptor, SmartDevToolErrorInterceptor, } from "./dev-tool/smart-dev-tool.interceptor";
|
|
13
|
+
import { SmartDevToolDatePipe } from "./dev-tool/smart-dev-tool.service";
|
|
14
|
+
import { SmartErrorCatchingInterceptor } from "./smart-error-catching.interceptor";
|
|
15
|
+
import { SmartHeaderMaintainerInterceptor } from "./smart-header-maintainer.interceptor";
|
|
16
|
+
import { SmartSessionService } from "./smart-session.service";
|
|
17
|
+
import { SmartSessionTimerComponent } from "./smart-timer/smart-session-timer.component";
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
export class SmartSessionModule {
|
|
20
|
+
}
|
|
21
|
+
SmartSessionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
22
|
+
SmartSessionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionModule, declarations: [SmartDevToolDialogComponent,
|
|
23
|
+
SmartDevToolFloatingButtonComponent,
|
|
24
|
+
SmartDevToolDatePipe,
|
|
25
|
+
SmartSessionTimerComponent], imports: [BrowserModule, MatCommonModule, MatExpansionModule, MatButtonModule, SmartIconModule], exports: [SmartDevToolFloatingButtonComponent, SmartSessionTimerComponent] });
|
|
26
|
+
SmartSessionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionModule, providers: [
|
|
27
|
+
SmartCookieService,
|
|
28
|
+
SmartSessionService,
|
|
29
|
+
SmartdialogModule,
|
|
30
|
+
{
|
|
31
|
+
provide: HTTP_INTERCEPTORS,
|
|
32
|
+
useClass: SmartErrorCatchingInterceptor,
|
|
33
|
+
multi: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
provide: HTTP_INTERCEPTORS,
|
|
37
|
+
useClass: SmartHeaderMaintainerInterceptor,
|
|
38
|
+
multi: true,
|
|
39
|
+
},
|
|
40
|
+
{ provide: HTTP_INTERCEPTORS, useClass: SmartDevToolInterceptor, multi: true },
|
|
41
|
+
{ provide: HTTP_INTERCEPTORS, useClass: SmartDevToolErrorInterceptor, multi: true },
|
|
42
|
+
], imports: [[BrowserModule, MatCommonModule, MatExpansionModule, MatButtonModule, SmartIconModule]] });
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SmartSessionModule, decorators: [{
|
|
44
|
+
type: NgModule,
|
|
45
|
+
args: [{
|
|
46
|
+
declarations: [
|
|
47
|
+
SmartDevToolDialogComponent,
|
|
48
|
+
SmartDevToolFloatingButtonComponent,
|
|
49
|
+
SmartDevToolDatePipe,
|
|
50
|
+
SmartSessionTimerComponent,
|
|
51
|
+
],
|
|
52
|
+
imports: [BrowserModule, MatCommonModule, MatExpansionModule, MatButtonModule, SmartIconModule],
|
|
53
|
+
exports: [SmartDevToolFloatingButtonComponent, SmartSessionTimerComponent],
|
|
54
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
55
|
+
providers: [
|
|
56
|
+
SmartCookieService,
|
|
57
|
+
SmartSessionService,
|
|
58
|
+
SmartdialogModule,
|
|
59
|
+
{
|
|
60
|
+
provide: HTTP_INTERCEPTORS,
|
|
61
|
+
useClass: SmartErrorCatchingInterceptor,
|
|
62
|
+
multi: true,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
provide: HTTP_INTERCEPTORS,
|
|
66
|
+
useClass: SmartHeaderMaintainerInterceptor,
|
|
67
|
+
multi: true,
|
|
68
|
+
},
|
|
69
|
+
{ provide: HTTP_INTERCEPTORS, useClass: SmartDevToolInterceptor, multi: true },
|
|
70
|
+
{ provide: HTTP_INTERCEPTORS, useClass: SmartDevToolErrorInterceptor, multi: true },
|
|
71
|
+
],
|
|
72
|
+
}]
|
|
73
|
+
}] });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtc2Vzc2lvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLG9GQUFvRixDQUFDO0FBQ3pJLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsNEJBQTRCLEdBQy9CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBOEJ6RixNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBMUJ2QiwyQkFBMkI7UUFDM0IsbUNBQW1DO1FBQ25DLG9CQUFvQjtRQUNwQiwwQkFBMEIsYUFFcEIsYUFBYSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxhQUNwRixtQ0FBbUMsRUFBRSwwQkFBMEI7aUhBb0JoRSxrQkFBa0IsYUFsQmhCO1FBQ1Asa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakI7WUFDSSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFFBQVEsRUFBRSw2QkFBNkI7WUFDdkMsS0FBSyxFQUFFLElBQUk7U0FDZDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixRQUFRLEVBQUUsZ0NBQWdDO1lBQzFDLEtBQUssRUFBRSxJQUFJO1NBQ2Q7UUFDRCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUM5RSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtLQUN0RixZQW5CUSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQzs0RkFxQnRGLGtCQUFrQjtrQkE1QjlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLDJCQUEyQjt3QkFDM0IsbUNBQW1DO3dCQUNuQyxvQkFBb0I7d0JBQ3BCLDBCQUEwQjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDO29CQUMvRixPQUFPLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSwwQkFBMEIsQ0FBQztvQkFDMUUsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFNBQVMsRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQjs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixRQUFRLEVBQUUsNkJBQTZCOzRCQUN2QyxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixRQUFRLEVBQUUsZ0NBQWdDOzRCQUMxQyxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDOUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQ3RGO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcbmltcG9ydCB7IE1hdENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uXCI7XG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFNtYXJ0ZGlhbG9nTW9kdWxlIH0gZnJvbSBcIkBzbWFydGJpdDRhbGwvZGlhbG9nXCI7XG5pbXBvcnQgeyBTbWFydEljb25Nb2R1bGUgfSBmcm9tIFwiQHNtYXJ0Yml0NGFsbC9pY29uXCI7XG5pbXBvcnQgeyBTbWFydENvb2tpZVNlcnZpY2UgfSBmcm9tIFwiLi9jb29raWUtc2VydmljZS9zbWFydC1jb29raWUuc2VydmljZVwiO1xuaW1wb3J0IHsgU21hcnREZXZUb29sRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIi4vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wtZGlhbG9nL3NtYXJ0LWRldi10b29sLWRpYWxvZy5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNtYXJ0RGV2VG9vbEZsb2F0aW5nQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIi4vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wtZmxvYXRpbmctYnV0dG9uL3NtYXJ0LWRldi10b29sLWZsb2F0aW5nLWJ1dHRvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7XG4gICAgU21hcnREZXZUb29sSW50ZXJjZXB0b3IsXG4gICAgU21hcnREZXZUb29sRXJyb3JJbnRlcmNlcHRvcixcbn0gZnJvbSBcIi4vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wuaW50ZXJjZXB0b3JcIjtcbmltcG9ydCB7IFNtYXJ0RGV2VG9vbERhdGVQaXBlIH0gZnJvbSBcIi4vZGV2LXRvb2wvc21hcnQtZGV2LXRvb2wuc2VydmljZVwiO1xuaW1wb3J0IHsgU21hcnRFcnJvckNhdGNoaW5nSW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9zbWFydC1lcnJvci1jYXRjaGluZy5pbnRlcmNlcHRvclwiO1xuaW1wb3J0IHsgU21hcnRIZWFkZXJNYWludGFpbmVySW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9zbWFydC1oZWFkZXItbWFpbnRhaW5lci5pbnRlcmNlcHRvclwiO1xuaW1wb3J0IHsgU21hcnRTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuL3NtYXJ0LXNlc3Npb24uc2VydmljZVwiO1xuaW1wb3J0IHsgU21hcnRTZXNzaW9uVGltZXJDb21wb25lbnQgfSBmcm9tIFwiLi9zbWFydC10aW1lci9zbWFydC1zZXNzaW9uLXRpbWVyLmNvbXBvbmVudFwiO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBTbWFydERldlRvb2xEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIFNtYXJ0RGV2VG9vbEZsb2F0aW5nQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBTbWFydERldlRvb2xEYXRlUGlwZSxcbiAgICAgICAgU21hcnRTZXNzaW9uVGltZXJDb21wb25lbnQsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbQnJvd3Nlck1vZHVsZSwgTWF0Q29tbW9uTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgU21hcnRJY29uTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbU21hcnREZXZUb29sRmxvYXRpbmdCdXR0b25Db21wb25lbnQsIFNtYXJ0U2Vzc2lvblRpbWVyQ29tcG9uZW50XSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFNtYXJ0Q29va2llU2VydmljZSxcbiAgICAgICAgU21hcnRTZXNzaW9uU2VydmljZSxcbiAgICAgICAgU21hcnRkaWFsb2dNb2R1bGUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IFNtYXJ0RXJyb3JDYXRjaGluZ0ludGVyY2VwdG9yLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IFNtYXJ0SGVhZGVyTWFpbnRhaW5lckludGVyY2VwdG9yLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHsgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsIHVzZUNsYXNzOiBTbWFydERldlRvb2xJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFNtYXJ0RGV2VG9vbEVycm9ySW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU21hcnRTZXNzaW9uTW9kdWxlIHt9XG4iXX0=
|