@aakash58/chatbot 1.1.15 → 1.1.17
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/esm2022/aakash58-chatbot.mjs +5 -0
- package/esm2022/lib/app/chat/chat-ui-state.service.mjs +170 -0
- package/esm2022/lib/app/chat/chat.service.mjs +445 -0
- package/esm2022/lib/app/chat/components/chat-button/chat-button.component.mjs +50 -0
- package/esm2022/lib/app/chat/components/chat-footer/chat-footer.component.mjs +12 -0
- package/esm2022/lib/app/chat/components/chat-header/chat-header.component.mjs +66 -0
- package/esm2022/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.mjs +186 -0
- package/esm2022/lib/app/chat/components/chat-window/chat-window.component.mjs +312 -0
- package/esm2022/lib/app/chat/components/message-input/message-input.component.mjs +36 -0
- package/esm2022/lib/app/chat/components/message-list/message-list.component.mjs +115 -0
- package/esm2022/lib/app/chat/model/chat-history.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-request.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-response.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-session.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-stream-message.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-stream-response.model.mjs +2 -0
- package/esm2022/lib/app/chat/services/chat-api.service.mjs +61 -0
- package/esm2022/lib/app/chat/services/chat-audio.service.mjs +50 -0
- package/esm2022/lib/app/chat/services/chat-history.service.mjs +252 -0
- package/esm2022/lib/app/login/login-form.component.mjs +46 -0
- package/esm2022/lib/app/personalization/personalization-dialog.component.mjs +194 -0
- package/esm2022/lib/app/personalization/personalization.service.mjs +149 -0
- package/esm2022/lib/app/personalization/sections/account/account-section.component.mjs +122 -0
- package/esm2022/lib/app/personalization/sections/preferences/color-picker-dialog.component.mjs +86 -0
- package/esm2022/lib/app/personalization/sections/preferences/preferences-section.component.mjs +115 -0
- package/esm2022/lib/app/personalization/sections/profile/profile-section.component.mjs +29 -0
- package/esm2022/lib/app/personalization/sections/settings/setting-section.component.mjs +30 -0
- package/esm2022/lib/app/personalization/sections/terms/terms-section.component.mjs +12 -0
- package/esm2022/lib/constant/doohbot-constant.mjs +28 -0
- package/esm2022/lib/constant/html-entities.mjs +9 -0
- package/esm2022/lib/constant/utf8.mjs +10 -0
- package/esm2022/lib/core/app-const.mjs +61 -0
- package/esm2022/lib/core/auth/account-api.service.mjs +40 -0
- package/esm2022/lib/core/auth/auth.service.mjs +391 -0
- package/esm2022/lib/core/auth/models/auth-result.model.mjs +3 -0
- package/esm2022/lib/core/auth/models/federated-login-request.model.mjs +6 -0
- package/esm2022/lib/core/auth/models/login-request.model.mjs +6 -0
- package/esm2022/lib/core/auth/storage.service.mjs +110 -0
- package/esm2022/lib/core/directives/draggable/draggable-dialog.directive.mjs +112 -0
- package/esm2022/lib/core/directives/fullscreen/fullscreen.directive.mjs +55 -0
- package/esm2022/lib/core/directives/resizable/resizable-dialog.directive.mjs +179 -0
- package/esm2022/lib/core/environments/environment.mjs +15 -0
- package/esm2022/lib/core/environments/environment.prod.mjs +15 -0
- package/esm2022/lib/core/helpers/crypto-helper.service.mjs +52 -0
- package/esm2022/lib/core/http/http-stream.service.mjs +97 -0
- package/esm2022/lib/core/http/http.service.mjs +103 -0
- package/esm2022/lib/core/interceptors/auth.interceptor.mjs +96 -0
- package/esm2022/lib/core/interceptors/license.interceptor.mjs +44 -0
- package/esm2022/lib/core/models/api-config.model.mjs +18 -0
- package/esm2022/lib/core/models/api-request.model.mjs +2 -0
- package/esm2022/lib/core/models/api-response.model.mjs +8 -0
- package/esm2022/lib/core/models/doohbot-config.model.mjs +18 -0
- package/esm2022/lib/core/models/license.model.mjs +2 -0
- package/esm2022/lib/core/models/message.mjs +2 -0
- package/esm2022/lib/core/models/theme-config.model.mjs +2 -0
- package/esm2022/lib/core/services/core-config.service.mjs +52 -0
- package/esm2022/lib/core/services/license.service.mjs +145 -0
- package/esm2022/lib/core/services/markdown.service.mjs +64 -0
- package/esm2022/lib/core/services/theme.service.mjs +248 -0
- package/esm2022/lib/core/types/auth-mode.type.mjs +2 -0
- package/esm2022/lib/core/types/auth-status.type.mjs +5 -0
- package/esm2022/lib/core/types/chat-stream.type.mjs +2 -0
- package/esm2022/lib/core/types/message-role.type.mjs +2 -0
- package/esm2022/lib/core/types/prompt-mode.type.mjs +5 -0
- package/esm2022/lib/core/types/snackbar-error.type.mjs +5 -0
- package/esm2022/lib/core/types/tenant-resolution-strategy.type.mjs +2 -0
- package/esm2022/lib/core/utils/logger.service.mjs +42 -0
- package/esm2022/lib/doohbot-input.mjs +20 -0
- package/esm2022/lib/doohbot.component.mjs +444 -0
- package/esm2022/lib/predefined_messages.mjs +15 -0
- package/esm2022/lib/shared/chips/chips.component.mjs +28 -0
- package/esm2022/lib/shared/dialog/dialog.component.mjs +36 -0
- package/esm2022/lib/shared/dialog/dialog.service.mjs +64 -0
- package/esm2022/lib/shared/dialog/dialog.utils.mjs +85 -0
- package/esm2022/lib/shared/dropdown-menu/dropdown-menu.component.mjs +29 -0
- package/esm2022/lib/shared/input-dialog/input-dialog.component.mjs +38 -0
- package/esm2022/lib/shared/menu-item/menu-item.component.mjs +24 -0
- package/esm2022/lib/shared/pipes/simple-markdown.pipe.mjs +27 -0
- package/esm2022/lib/shared/snackbar/snackbar.component.mjs +43 -0
- package/esm2022/lib/shared/snackbar/snackbar.service.mjs +46 -0
- package/esm2022/lib/shared/snackbar/snackbar.utils.mjs +43 -0
- package/esm2022/public-api.mjs +37 -0
- package/fesm2022/aakash58-chatbot.mjs +1114 -867
- package/fesm2022/aakash58-chatbot.mjs.map +1 -1
- package/index.d.ts +3 -377
- package/lib/app/chat/chat-ui-state.service.d.ts +96 -0
- package/lib/app/chat/chat.service.d.ts +88 -0
- package/lib/app/chat/components/chat-button/chat-button.component.d.ts +16 -0
- package/lib/app/chat/components/chat-footer/chat-footer.component.d.ts +5 -0
- package/lib/app/chat/components/chat-header/chat-header.component.d.ts +24 -0
- package/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.d.ts +49 -0
- package/lib/app/chat/components/chat-window/chat-window.component.d.ts +107 -0
- package/lib/app/chat/components/message-input/message-input.component.d.ts +12 -0
- package/lib/app/chat/components/message-list/message-list.component.d.ts +40 -0
- package/lib/app/chat/model/chat-history.model.d.ts +51 -0
- package/lib/app/chat/model/chat-request.model.d.ts +10 -0
- package/lib/app/chat/model/chat-response.model.d.ts +9 -0
- package/lib/app/chat/model/chat-session.model.d.ts +12 -0
- package/lib/app/chat/model/chat-stream-message.model.d.ts +5 -0
- package/lib/app/chat/model/chat-stream-response.model.d.ts +10 -0
- package/lib/app/chat/services/chat-api.service.d.ts +30 -0
- package/lib/app/chat/services/chat-audio.service.d.ts +19 -0
- package/lib/app/chat/services/chat-history.service.d.ts +53 -0
- package/lib/app/login/login-form.component.d.ts +20 -0
- package/lib/app/personalization/personalization-dialog.component.d.ts +53 -0
- package/lib/app/personalization/personalization.service.d.ts +66 -0
- package/lib/app/personalization/sections/account/account-section.component.d.ts +30 -0
- package/lib/app/personalization/sections/preferences/color-picker-dialog.component.d.ts +17 -0
- package/lib/app/personalization/sections/preferences/preferences-section.component.d.ts +27 -0
- package/lib/app/personalization/sections/profile/profile-section.component.d.ts +17 -0
- package/lib/app/personalization/sections/settings/setting-section.component.d.ts +10 -0
- package/lib/app/personalization/sections/terms/terms-section.component.d.ts +5 -0
- package/lib/constant/doohbot-constant.d.ts +12 -0
- package/lib/constant/html-entities.d.ts +8 -0
- package/lib/constant/utf8.d.ts +9 -0
- package/lib/core/app-const.d.ts +11 -0
- package/lib/core/auth/account-api.service.d.ts +20 -0
- package/lib/core/auth/auth.service.d.ts +90 -0
- package/lib/core/auth/models/auth-result.model.d.ts +4 -0
- package/lib/core/auth/models/federated-login-request.model.d.ts +5 -0
- package/lib/core/auth/models/login-request.model.d.ts +6 -0
- package/lib/core/auth/storage.service.d.ts +21 -0
- package/lib/core/directives/draggable/draggable-dialog.directive.d.ts +23 -0
- package/lib/core/directives/fullscreen/fullscreen.directive.d.ts +14 -0
- package/lib/core/directives/resizable/resizable-dialog.directive.d.ts +30 -0
- package/lib/core/environments/environment.d.ts +7 -0
- package/lib/core/environments/environment.prod.d.ts +7 -0
- package/lib/core/helpers/crypto-helper.service.d.ts +12 -0
- package/lib/core/http/http-stream.service.d.ts +18 -0
- package/lib/core/http/http.service.d.ts +20 -0
- package/lib/core/interceptors/auth.interceptor.d.ts +18 -0
- package/lib/core/interceptors/license.interceptor.d.ts +11 -0
- package/lib/core/models/api-config.model.d.ts +58 -0
- package/lib/core/models/api-request.model.d.ts +77 -0
- package/lib/core/models/api-response.model.d.ts +6 -0
- package/lib/core/models/doohbot-config.model.d.ts +81 -0
- package/lib/core/models/license.model.d.ts +23 -0
- package/lib/core/models/message.d.ts +16 -0
- package/lib/core/models/theme-config.model.d.ts +28 -0
- package/lib/core/services/core-config.service.d.ts +23 -0
- package/lib/core/services/license.service.d.ts +33 -0
- package/lib/core/services/markdown.service.d.ts +8 -0
- package/lib/core/services/theme.service.d.ts +40 -0
- package/lib/core/types/auth-mode.type.d.ts +4 -0
- package/lib/core/types/auth-status.type.d.ts +4 -0
- package/lib/core/types/chat-stream.type.d.ts +4 -0
- package/lib/core/types/message-role.type.d.ts +4 -0
- package/lib/core/types/prompt-mode.type.d.ts +4 -0
- package/lib/core/types/snackbar-error.type.d.ts +4 -0
- package/lib/core/types/tenant-resolution-strategy.type.d.ts +4 -0
- package/lib/core/utils/logger.service.d.ts +11 -0
- package/lib/doohbot-input.d.ts +19 -0
- package/lib/doohbot.component.d.ts +108 -0
- package/lib/predefined_messages.d.ts +2 -0
- package/lib/shared/chips/chips.component.d.ts +10 -0
- package/lib/shared/dialog/dialog.component.d.ts +19 -0
- package/lib/shared/dialog/dialog.service.d.ts +29 -0
- package/lib/shared/dialog/dialog.utils.d.ts +41 -0
- package/lib/shared/dropdown-menu/dropdown-menu.component.d.ts +11 -0
- package/lib/shared/input-dialog/input-dialog.component.d.ts +20 -0
- package/lib/shared/menu-item/menu-item.component.d.ts +9 -0
- package/lib/shared/pipes/simple-markdown.pipe.d.ts +10 -0
- package/lib/shared/snackbar/snackbar.component.d.ts +14 -0
- package/lib/shared/snackbar/snackbar.service.d.ts +19 -0
- package/lib/shared/snackbar/snackbar.utils.d.ts +33 -0
- package/package.json +4 -2
- package/public-api.d.ts +11 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { delay, retry, map, catchError, of } from 'rxjs';
|
|
3
|
+
import logger from '../utils/logger.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
import * as i2 from "../auth/storage.service";
|
|
7
|
+
import * as i3 from "../services/core-config.service";
|
|
8
|
+
export class HttpService {
|
|
9
|
+
// @BlockUI() blockUI!: NgBlockUI;
|
|
10
|
+
get apiUrl() {
|
|
11
|
+
return this.coreConfig.apiUrl;
|
|
12
|
+
}
|
|
13
|
+
constructor(http, tokenStorage, coreConfig) {
|
|
14
|
+
this.http = http;
|
|
15
|
+
this.tokenStorage = tokenStorage;
|
|
16
|
+
this.coreConfig = coreConfig;
|
|
17
|
+
logger.log('HttpService: Initialized');
|
|
18
|
+
}
|
|
19
|
+
get(url, param, nestedParam = false, showLoader = false, refresh = true, headers) {
|
|
20
|
+
// if (showLoader && !this.blockUI.isActive) {
|
|
21
|
+
// this.blockUI.start();
|
|
22
|
+
// }
|
|
23
|
+
let params = {};
|
|
24
|
+
if (nestedParam) {
|
|
25
|
+
this.buildHttpParams(params, param, '');
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
params = param;
|
|
29
|
+
}
|
|
30
|
+
return this.http
|
|
31
|
+
.get(`${this.apiUrl}${url}`, {
|
|
32
|
+
params: params,
|
|
33
|
+
// withCredentials: true,
|
|
34
|
+
headers,
|
|
35
|
+
})
|
|
36
|
+
.pipe(delay(100), retry(0), map((response) => this.returnResponse(response, showLoader)), catchError((error) => {
|
|
37
|
+
// if (this.blockUI.isActive) {
|
|
38
|
+
// this.blockUI.stop();
|
|
39
|
+
// }
|
|
40
|
+
return of(error);
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
buildHttpParams(params, data, currentPath) {
|
|
44
|
+
Object.keys(data).forEach((key) => {
|
|
45
|
+
if (data[key] instanceof Object && !(data[key] instanceof Array)) {
|
|
46
|
+
this.buildHttpParams(params, data[key], `${currentPath}${key}.`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
params[`${currentPath}${key}`] = data[key];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
post(url, param, showLoader = false, headers) {
|
|
54
|
+
// if (showLoader && !this.blockUI.isActive) {
|
|
55
|
+
// this.blockUI.start();
|
|
56
|
+
// }
|
|
57
|
+
return this.http.post(`${this.apiUrl}${url}`, param, { headers }).pipe(delay(100), retry(0), map((response) => this.returnResponse(response, showLoader)), catchError((error) => {
|
|
58
|
+
// if (this.blockUI.isActive) {
|
|
59
|
+
// this.blockUI.stop();
|
|
60
|
+
// }
|
|
61
|
+
return of(error);
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
patch(url, param, showLoader = false, headers) {
|
|
65
|
+
// if (showLoader && !this.blockUI.isActive) {
|
|
66
|
+
// this.blockUI.start();
|
|
67
|
+
// }
|
|
68
|
+
return this.http.patch(`${this.apiUrl}${url}`, param, { headers }).pipe(delay(100), retry(0), map((response) => this.returnResponse(response, showLoader)), catchError((error) => {
|
|
69
|
+
// if (this.blockUI.isActive) {
|
|
70
|
+
// this.blockUI.stop();
|
|
71
|
+
// }
|
|
72
|
+
return of(error);
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
delete(url, param, showLoader = false, headers) {
|
|
76
|
+
// if (showLoader && !this.blockUI.isActive) {
|
|
77
|
+
// this.blockUI.start();
|
|
78
|
+
// }
|
|
79
|
+
let params = {};
|
|
80
|
+
params = param;
|
|
81
|
+
return this.http.delete(`${this.apiUrl}${url}`, { body: param, headers }).pipe(delay(100), retry(0), map((response) => this.returnResponse(response, showLoader)), catchError((error) => {
|
|
82
|
+
// if (this.blockUI.isActive) {
|
|
83
|
+
// this.blockUI.stop();
|
|
84
|
+
// }
|
|
85
|
+
return of(error);
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
returnResponse(value, showLoader = true) {
|
|
89
|
+
// if (showLoader && this.blockUI.isActive) {
|
|
90
|
+
// this.blockUI.reset();
|
|
91
|
+
// }
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i2.StorageService }, { token: i3.CoreConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
95
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpService, providedIn: 'root' }); }
|
|
96
|
+
}
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpService, decorators: [{
|
|
98
|
+
type: Injectable,
|
|
99
|
+
args: [{
|
|
100
|
+
providedIn: 'root',
|
|
101
|
+
}]
|
|
102
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.StorageService }, { type: i3.CoreConfigService }] });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2NvcmUvaHR0cC9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdyRSxPQUFPLE1BQU0sTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFLN0MsTUFBTSxPQUFPLFdBQVc7SUFDdEIsb0NBQW9DO0lBRXBDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQ1UsSUFBZ0IsRUFDaEIsWUFBNEIsRUFDNUIsVUFBNkI7UUFGN0IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFFckMsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxHQUFHLENBQ0QsR0FBVyxFQUNYLEtBQWMsRUFDZCxXQUFXLEdBQUcsS0FBSyxFQUNuQixVQUFVLEdBQUcsS0FBSyxFQUNsQixPQUFPLEdBQUcsSUFBSSxFQUNkLE9BQXFCO1FBRXJCLDhDQUE4QztRQUU5QywwQkFBMEI7UUFFMUIsSUFBSTtRQUVKLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVoQixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0wsTUFBTSxHQUFHLEtBQW1CLENBQUM7U0FDOUI7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRTtZQUMzQixNQUFNLEVBQUUsTUFBTTtZQUNkLHlCQUF5QjtZQUN6QixPQUFPO1NBQ1IsQ0FBQzthQUNELElBQUksQ0FDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBRVYsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUVSLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFFNUQsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsK0JBQStCO1lBRS9CLHlCQUF5QjtZQUV6QixJQUFJO1lBRUosT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxXQUFtQjtRQUNqRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNsRTtpQkFBTTtnQkFDTCxNQUFNLENBQUMsR0FBRyxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxVQUFVLEdBQUcsS0FBSyxFQUFFLE9BQXFCO1FBQ3pFLDhDQUE4QztRQUM5QywwQkFBMEI7UUFDMUIsSUFBSTtRQUVKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbEYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQ2pFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsSUFBSTtZQUVKLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRSxPQUFxQjtRQUMxRSw4Q0FBOEM7UUFDOUMsMEJBQTBCO1FBQzFCLElBQUk7UUFFSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFtQixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUNqRSxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQiwrQkFBK0I7WUFDL0IseUJBQXlCO1lBQ3pCLElBQUk7WUFFSixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLFVBQVUsR0FBRyxLQUFLLEVBQUUsT0FBcUI7UUFDM0UsOENBQThDO1FBQzlDLDBCQUEwQjtRQUMxQixJQUFJO1FBQ0osSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sR0FBRyxLQUFtQixDQUFDO1FBRTdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQ2pFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsSUFBSTtZQUVKLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVUsRUFBRSxhQUFzQixJQUFJO1FBQzNELDZDQUE2QztRQUM3QywwQkFBMEI7UUFDMUIsSUFBSTtRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrR0F4SVUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkZWxheSwgcmV0cnksIG1hcCwgY2F0Y2hFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcclxuICAvLyAgIEBCbG9ja1VJKCkgYmxvY2tVSSE6IE5nQmxvY2tVSTtcclxuXHJcbiAgZ2V0IGFwaVVybCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29yZUNvbmZpZy5hcGlVcmw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdG9rZW5TdG9yYWdlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbmZpZzogQ29yZUNvbmZpZ1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBsb2dnZXIubG9nKCdIdHRwU2VydmljZTogSW5pdGlhbGl6ZWQnKTtcclxuICB9XHJcblxyXG4gIGdldChcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgcGFyYW0/OiBvYmplY3QsXHJcbiAgICBuZXN0ZWRQYXJhbSA9IGZhbHNlLFxyXG4gICAgc2hvd0xvYWRlciA9IGZhbHNlLFxyXG4gICAgcmVmcmVzaCA9IHRydWUsXHJcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMsXHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGlmIChzaG93TG9hZGVyICYmICF0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuXHJcbiAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdGFydCgpO1xyXG5cclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgcGFyYW1zID0ge307XHJcblxyXG4gICAgaWYgKG5lc3RlZFBhcmFtKSB7XHJcbiAgICAgIHRoaXMuYnVpbGRIdHRwUGFyYW1zKHBhcmFtcywgcGFyYW0sICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtIGFzIEh0dHBQYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KGAke3RoaXMuYXBpVXJsfSR7dXJsfWAsIHtcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgICAgaGVhZGVycyxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVsYXkoMTAwKSxcclxuXHJcbiAgICAgICAgcmV0cnkoMCksXHJcblxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHRoaXMucmV0dXJuUmVzcG9uc2UocmVzcG9uc2UsIHNob3dMb2FkZXIpKSxcclxuXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuXHJcbiAgICAgICAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdG9wKCk7XHJcblxyXG4gICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgIHJldHVybiBvZihlcnJvcik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkSHR0cFBhcmFtcyhwYXJhbXM6IGFueSwgZGF0YTogYW55LCBjdXJyZW50UGF0aDogc3RyaW5nKSB7XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgaWYgKGRhdGFba2V5XSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKGRhdGFba2V5XSBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgIHRoaXMuYnVpbGRIdHRwUGFyYW1zKHBhcmFtcywgZGF0YVtrZXldLCBgJHtjdXJyZW50UGF0aH0ke2tleX0uYCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyYW1zW2Ake2N1cnJlbnRQYXRofSR7a2V5fWBdID0gZGF0YVtrZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBvc3QodXJsOiBzdHJpbmcsIHBhcmFtPzogb2JqZWN0LCBzaG93TG9hZGVyID0gZmFsc2UsIGhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBpZiAoc2hvd0xvYWRlciAmJiAhdGhpcy5ibG9ja1VJLmlzQWN0aXZlKSB7XHJcbiAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdGFydCgpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmFwaVVybH0ke3VybH1gLCBwYXJhbSBhcyBIdHRwUGFyYW1zLCB7IGhlYWRlcnMgfSkucGlwZShcclxuICAgICAgZGVsYXkoMTAwKSxcclxuICAgICAgcmV0cnkoMCksXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gdGhpcy5yZXR1cm5SZXNwb25zZShyZXNwb25zZSwgc2hvd0xvYWRlcikpLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vIGlmICh0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdG9wKCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXRjaCh1cmw6IHN0cmluZywgcGFyYW0/OiBvYmplY3QsIHNob3dMb2FkZXIgPSBmYWxzZSwgaGVhZGVycz86IEh0dHBIZWFkZXJzKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGlmIChzaG93TG9hZGVyICYmICF0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuICAgIC8vICAgdGhpcy5ibG9ja1VJLnN0YXJ0KCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaChgJHt0aGlzLmFwaVVybH0ke3VybH1gLCBwYXJhbSBhcyBIdHRwUGFyYW1zLCB7IGhlYWRlcnMgfSkucGlwZShcclxuICAgICAgZGVsYXkoMTAwKSxcclxuICAgICAgcmV0cnkoMCksXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gdGhpcy5yZXR1cm5SZXNwb25zZShyZXNwb25zZSwgc2hvd0xvYWRlcikpLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vIGlmICh0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdG9wKCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUodXJsOiBzdHJpbmcsIHBhcmFtPzogb2JqZWN0LCBzaG93TG9hZGVyID0gZmFsc2UsIGhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBpZiAoc2hvd0xvYWRlciAmJiAhdGhpcy5ibG9ja1VJLmlzQWN0aXZlKSB7XHJcbiAgICAvLyAgIHRoaXMuYmxvY2tVSS5zdGFydCgpO1xyXG4gICAgLy8gfVxyXG4gICAgbGV0IHBhcmFtcyA9IHt9O1xyXG4gICAgcGFyYW1zID0gcGFyYW0gYXMgSHR0cFBhcmFtcztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmFwaVVybH0ke3VybH1gLCB7IGJvZHk6IHBhcmFtLCBoZWFkZXJzIH0pLnBpcGUoXHJcbiAgICAgIGRlbGF5KDEwMCksXHJcbiAgICAgIHJldHJ5KDApLFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMucmV0dXJuUmVzcG9uc2UocmVzcG9uc2UsIHNob3dMb2FkZXIpKSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAvLyBpZiAodGhpcy5ibG9ja1VJLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmJsb2NrVUkuc3RvcCgpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKGVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXR1cm5SZXNwb25zZSh2YWx1ZTogYW55LCBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XHJcbiAgICAvLyBpZiAoc2hvd0xvYWRlciAmJiB0aGlzLmJsb2NrVUkuaXNBY3RpdmUpIHtcclxuICAgIC8vICAgdGhpcy5ibG9ja1VJLnJlc2V0KCk7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { HttpErrorResponse, } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, catchError, filter, switchMap, take, throwError } from 'rxjs';
|
|
4
|
+
import { AuthService } from '../auth/auth.service';
|
|
5
|
+
import logger from '../utils/logger.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../auth/storage.service";
|
|
8
|
+
export class AuthInterceptor {
|
|
9
|
+
constructor(tokenStorage, injector) {
|
|
10
|
+
this.tokenStorage = tokenStorage;
|
|
11
|
+
this.injector = injector;
|
|
12
|
+
this.isRefreshing = false;
|
|
13
|
+
this.clearingAuth = false; // Prevent multiple clearAuth calls
|
|
14
|
+
this.refreshTokenSubject = new BehaviorSubject(null);
|
|
15
|
+
}
|
|
16
|
+
intercept(req, next) {
|
|
17
|
+
const authReq = this.getRequestWithHeaders(req);
|
|
18
|
+
return next.handle(authReq).pipe(catchError((error) => {
|
|
19
|
+
// Handle 401 Unauthorized errors
|
|
20
|
+
if (error instanceof HttpErrorResponse &&
|
|
21
|
+
error.status === 401 &&
|
|
22
|
+
!authReq.url.includes('auth/login') && // Don't retry login
|
|
23
|
+
!authReq.url.includes('auth/federated/login') && // Don't retry federated login
|
|
24
|
+
!authReq.url.includes('auth/logout') && // Don't retry logout
|
|
25
|
+
!authReq.url.includes('auth/refresh') // Don't retry refresh itself
|
|
26
|
+
) {
|
|
27
|
+
logger.error('[AuthInterceptor] 401 Unauthorized:', {
|
|
28
|
+
url: authReq.url,
|
|
29
|
+
userId: this.tokenStorage.get('user_id'),
|
|
30
|
+
});
|
|
31
|
+
return this.handle401Error(authReq, next);
|
|
32
|
+
}
|
|
33
|
+
return throwError(() => error);
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
handle401Error(request, next) {
|
|
37
|
+
// If already clearing, don't retry
|
|
38
|
+
if (this.clearingAuth) {
|
|
39
|
+
logger.log('[AuthInterceptor] Already clearing auth, rejecting request');
|
|
40
|
+
return throwError(() => new Error('Authentication cleared'));
|
|
41
|
+
}
|
|
42
|
+
if (!this.isRefreshing) {
|
|
43
|
+
this.isRefreshing = true;
|
|
44
|
+
this.refreshTokenSubject.next(null);
|
|
45
|
+
const authService = this.injector.get(AuthService);
|
|
46
|
+
return authService.refreshToken().pipe(switchMap((token) => {
|
|
47
|
+
this.isRefreshing = false;
|
|
48
|
+
this.refreshTokenSubject.next(token.access_token);
|
|
49
|
+
// Retry the original request with the new token
|
|
50
|
+
return next.handle(this.getRequestWithHeaders(request));
|
|
51
|
+
}), catchError((err) => {
|
|
52
|
+
this.isRefreshing = false;
|
|
53
|
+
// Refresh failed - logout user (only once)
|
|
54
|
+
if (!this.clearingAuth) {
|
|
55
|
+
this.clearingAuth = true;
|
|
56
|
+
const authService = this.injector.get(AuthService);
|
|
57
|
+
authService.clearAuth();
|
|
58
|
+
this.clearingAuth = false;
|
|
59
|
+
}
|
|
60
|
+
return throwError(() => err);
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Wait while getting new token
|
|
65
|
+
return this.refreshTokenSubject.pipe(filter((token) => token != null), take(1), switchMap((jwt) => {
|
|
66
|
+
// Rewrite with new token and retry
|
|
67
|
+
return next.handle(this.getRequestWithHeaders(request));
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
getRequestWithHeaders(req) {
|
|
72
|
+
// Skip adding token for login/refresh/logout endpoints
|
|
73
|
+
if (req.url.includes('auth/login') ||
|
|
74
|
+
req.url.includes('auth/federated/login') ||
|
|
75
|
+
req.url.includes('auth/refresh') ||
|
|
76
|
+
req.url.includes('auth/logout')) {
|
|
77
|
+
return req;
|
|
78
|
+
}
|
|
79
|
+
let headers = req.headers;
|
|
80
|
+
// Get fresh token from new storage service
|
|
81
|
+
const token = this.tokenStorage.get('access_token') ?? '';
|
|
82
|
+
if (token != '') {
|
|
83
|
+
headers = headers.set('authorization', `Bearer ${token}`);
|
|
84
|
+
}
|
|
85
|
+
return req.clone({ headers });
|
|
86
|
+
}
|
|
87
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthInterceptor, deps: [{ token: i1.StorageService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
88
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthInterceptor, providedIn: 'root' }); }
|
|
89
|
+
}
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
91
|
+
type: Injectable,
|
|
92
|
+
args: [{
|
|
93
|
+
providedIn: 'root',
|
|
94
|
+
}]
|
|
95
|
+
}], ctorParameters: () => [{ type: i1.StorageService }, { type: i0.Injector }] });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsR0FLbEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbkQsT0FBTyxNQUFNLE1BQU0seUJBQXlCLENBQUM7OztBQUs3QyxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNVLFlBQTRCLEVBQzVCLFFBQWtCO1FBRGxCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTnBCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsbUNBQW1DO1FBQ3pELHdCQUFtQixHQUF5QixJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUtoRixDQUFDO0lBRUosU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWhELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzlCLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLGlDQUFpQztZQUNqQyxJQUNFLEtBQUssWUFBWSxpQkFBaUI7Z0JBQ2xDLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRztnQkFDcEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxvQkFBb0I7Z0JBQzNELENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSw4QkFBOEI7Z0JBQy9FLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUkscUJBQXFCO2dCQUM3RCxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLDZCQUE2QjtjQUNuRTtnQkFDQSxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFO29CQUNsRCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7b0JBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7aUJBQ3pDLENBQUMsQ0FBQztnQkFDSCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNqRSxtQ0FBbUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsNERBQTRELENBQUMsQ0FBQztZQUN6RSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDcEMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEQsZ0RBQWdEO2dCQUNoRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQiwyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ25ELFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQzNCO2dCQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDthQUFNO1lBQ0wsK0JBQStCO1lBQy9CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDbEMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEIsbUNBQW1DO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQXFCO1FBQ3pDLHVEQUF1RDtRQUN2RCxJQUNFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUM5QixHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztZQUN4QyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDaEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQy9CO1lBQ0EsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDMUIsMkNBQTJDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUxRCxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUU7WUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDOytHQW5HVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBIYW5kbGVyLFxyXG4gIEh0dHBJbnRlcmNlcHRvcixcclxuICBIdHRwUmVxdWVzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBmaWx0ZXIsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGFrZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgcHJpdmF0ZSBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGNsZWFyaW5nQXV0aCA9IGZhbHNlOyAvLyBQcmV2ZW50IG11bHRpcGxlIGNsZWFyQXV0aCBjYWxsc1xyXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgKSB7fVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGNvbnN0IGF1dGhSZXEgPSB0aGlzLmdldFJlcXVlc3RXaXRoSGVhZGVycyhyZXEpO1xyXG5cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShhdXRoUmVxKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vIEhhbmRsZSA0MDEgVW5hdXRob3JpemVkIGVycm9yc1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiZcclxuICAgICAgICAgIGVycm9yLnN0YXR1cyA9PT0gNDAxICYmXHJcbiAgICAgICAgICAhYXV0aFJlcS51cmwuaW5jbHVkZXMoJ2F1dGgvbG9naW4nKSAmJiAvLyBEb24ndCByZXRyeSBsb2dpblxyXG4gICAgICAgICAgIWF1dGhSZXEudXJsLmluY2x1ZGVzKCdhdXRoL2ZlZGVyYXRlZC9sb2dpbicpICYmIC8vIERvbid0IHJldHJ5IGZlZGVyYXRlZCBsb2dpblxyXG4gICAgICAgICAgIWF1dGhSZXEudXJsLmluY2x1ZGVzKCdhdXRoL2xvZ291dCcpICYmIC8vIERvbid0IHJldHJ5IGxvZ291dFxyXG4gICAgICAgICAgIWF1dGhSZXEudXJsLmluY2x1ZGVzKCdhdXRoL3JlZnJlc2gnKSAvLyBEb24ndCByZXRyeSByZWZyZXNoIGl0c2VsZlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdbQXV0aEludGVyY2VwdG9yXSA0MDEgVW5hdXRob3JpemVkOicsIHtcclxuICAgICAgICAgICAgdXJsOiBhdXRoUmVxLnVybCxcclxuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnRva2VuU3RvcmFnZS5nZXQoJ3VzZXJfaWQnKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlNDAxRXJyb3IoYXV0aFJlcSwgbmV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGU0MDFFcnJvcihyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xyXG4gICAgLy8gSWYgYWxyZWFkeSBjbGVhcmluZywgZG9uJ3QgcmV0cnlcclxuICAgIGlmICh0aGlzLmNsZWFyaW5nQXV0aCkge1xyXG4gICAgICBsb2dnZXIubG9nKCdbQXV0aEludGVyY2VwdG9yXSBBbHJlYWR5IGNsZWFyaW5nIGF1dGgsIHJlamVjdGluZyByZXF1ZXN0Jyk7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gY2xlYXJlZCcpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XHJcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQobnVsbCk7XHJcblxyXG4gICAgICBjb25zdCBhdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKTtcclxuICAgICAgcmV0dXJuIGF1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCh0b2tlbjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQodG9rZW4uYWNjZXNzX3Rva2VuKTtcclxuICAgICAgICAgIC8vIFJldHJ5IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHdpdGggdGhlIG5ldyB0b2tlblxyXG4gICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuZ2V0UmVxdWVzdFdpdGhIZWFkZXJzKHJlcXVlc3QpKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBSZWZyZXNoIGZhaWxlZCAtIGxvZ291dCB1c2VyIChvbmx5IG9uY2UpXHJcbiAgICAgICAgICBpZiAoIXRoaXMuY2xlYXJpbmdBdXRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJpbmdBdXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgYXV0aFNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBdXRoU2VydmljZSk7XHJcbiAgICAgICAgICAgIGF1dGhTZXJ2aWNlLmNsZWFyQXV0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyaW5nQXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdhaXQgd2hpbGUgZ2V0dGluZyBuZXcgdG9rZW5cclxuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigodG9rZW4pID0+IHRva2VuICE9IG51bGwpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgc3dpdGNoTWFwKChqd3QpID0+IHtcclxuICAgICAgICAgIC8vIFJld3JpdGUgd2l0aCBuZXcgdG9rZW4gYW5kIHJldHJ5XHJcbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5nZXRSZXF1ZXN0V2l0aEhlYWRlcnMocmVxdWVzdCkpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVxdWVzdFdpdGhIZWFkZXJzKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBSZXF1ZXN0PGFueT4ge1xyXG4gICAgLy8gU2tpcCBhZGRpbmcgdG9rZW4gZm9yIGxvZ2luL3JlZnJlc2gvbG9nb3V0IGVuZHBvaW50c1xyXG4gICAgaWYgKFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL2xvZ2luJykgfHxcclxuICAgICAgcmVxLnVybC5pbmNsdWRlcygnYXV0aC9mZWRlcmF0ZWQvbG9naW4nKSB8fFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL3JlZnJlc2gnKSB8fFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL2xvZ291dCcpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHJlcTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IHJlcS5oZWFkZXJzO1xyXG4gICAgLy8gR2V0IGZyZXNoIHRva2VuIGZyb20gbmV3IHN0b3JhZ2Ugc2VydmljZVxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuU3RvcmFnZS5nZXQoJ2FjY2Vzc190b2tlbicpID8/ICcnO1xyXG5cclxuICAgIGlmICh0b2tlbiAhPSAnJykge1xyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ2F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlcS5jbG9uZSh7IGhlYWRlcnMgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { AuthService } from '../auth/auth.service';
|
|
3
|
+
import { LicenseService } from '../services/license.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LicenseInterceptor {
|
|
6
|
+
constructor(injector) {
|
|
7
|
+
this.injector = injector;
|
|
8
|
+
}
|
|
9
|
+
intercept(req, next) {
|
|
10
|
+
const authService = this.injector.get(AuthService);
|
|
11
|
+
const licenseService = this.injector.get(LicenseService);
|
|
12
|
+
// Skip if this is a login/auth request (AccountService handles it explicitly)
|
|
13
|
+
if (req.url.includes('auth/login') ||
|
|
14
|
+
req.url.includes('auth/federated/login') ||
|
|
15
|
+
req.url.includes('auth/refresh') ||
|
|
16
|
+
req.url.includes('auth/logout')) {
|
|
17
|
+
return next.handle(req);
|
|
18
|
+
}
|
|
19
|
+
// Determine if this is an internal API request
|
|
20
|
+
const apiUrl = authService.apiUrl;
|
|
21
|
+
const isInternalApi = (apiUrl && req.url.startsWith(apiUrl)) ||
|
|
22
|
+
(!req.url.startsWith('http') && !req.url.startsWith('assets/'));
|
|
23
|
+
if (!isInternalApi) {
|
|
24
|
+
return next.handle(req);
|
|
25
|
+
}
|
|
26
|
+
// Resolve License Key for Authenticated Request
|
|
27
|
+
const context = authService.getLicensingContext();
|
|
28
|
+
// Post-login, context.tenantId should be company_id
|
|
29
|
+
const licenseKey = licenseService.resolveLicenseKey(context, '');
|
|
30
|
+
if (licenseKey) {
|
|
31
|
+
const clonedReq = req.clone({
|
|
32
|
+
headers: req.headers.set('x-license-key', licenseKey),
|
|
33
|
+
});
|
|
34
|
+
return next.handle(clonedReq);
|
|
35
|
+
}
|
|
36
|
+
return next.handle(req);
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseInterceptor }); }
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseInterceptor, decorators: [{
|
|
42
|
+
type: Injectable
|
|
43
|
+
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL2ludGVyY2VwdG9ycy9saWNlbnNlLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFHN0QsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUUxQyxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjtRQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV6RCw4RUFBOEU7UUFDOUUsSUFDRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDOUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7WUFDeEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUMvQjtZQUNBLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUVELCtDQUErQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBRWxDLE1BQU0sYUFBYSxHQUNqQixDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xELG9EQUFvRDtRQUNwRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpFLElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7K0dBekNVLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGljZW5zZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9saWNlbnNlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGljZW5zZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cclxuXHJcbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICBjb25zdCBhdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKTtcclxuICAgIGNvbnN0IGxpY2Vuc2VTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTGljZW5zZVNlcnZpY2UpO1xyXG5cclxuICAgIC8vIFNraXAgaWYgdGhpcyBpcyBhIGxvZ2luL2F1dGggcmVxdWVzdCAoQWNjb3VudFNlcnZpY2UgaGFuZGxlcyBpdCBleHBsaWNpdGx5KVxyXG4gICAgaWYgKFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL2xvZ2luJykgfHxcclxuICAgICAgcmVxLnVybC5pbmNsdWRlcygnYXV0aC9mZWRlcmF0ZWQvbG9naW4nKSB8fFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL3JlZnJlc2gnKSB8fFxyXG4gICAgICByZXEudXJsLmluY2x1ZGVzKCdhdXRoL2xvZ291dCcpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gaW50ZXJuYWwgQVBJIHJlcXVlc3RcclxuICAgIGNvbnN0IGFwaVVybCA9IGF1dGhTZXJ2aWNlLmFwaVVybDtcclxuXHJcbiAgICBjb25zdCBpc0ludGVybmFsQXBpID1cclxuICAgICAgKGFwaVVybCAmJiByZXEudXJsLnN0YXJ0c1dpdGgoYXBpVXJsKSkgfHxcclxuICAgICAgKCFyZXEudXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSAmJiAhcmVxLnVybC5zdGFydHNXaXRoKCdhc3NldHMvJykpO1xyXG5cclxuICAgIGlmICghaXNJbnRlcm5hbEFwaSkge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNvbHZlIExpY2Vuc2UgS2V5IGZvciBBdXRoZW50aWNhdGVkIFJlcXVlc3RcclxuICAgIGNvbnN0IGNvbnRleHQgPSBhdXRoU2VydmljZS5nZXRMaWNlbnNpbmdDb250ZXh0KCk7XHJcbiAgICAvLyBQb3N0LWxvZ2luLCBjb250ZXh0LnRlbmFudElkIHNob3VsZCBiZSBjb21wYW55X2lkXHJcbiAgICBjb25zdCBsaWNlbnNlS2V5ID0gbGljZW5zZVNlcnZpY2UucmVzb2x2ZUxpY2Vuc2VLZXkoY29udGV4dCwgJycpO1xyXG5cclxuICAgIGlmIChsaWNlbnNlS2V5KSB7XHJcbiAgICAgIGNvbnN0IGNsb25lZFJlcSA9IHJlcS5jbG9uZSh7XHJcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KCd4LWxpY2Vuc2Uta2V5JywgbGljZW5zZUtleSksXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUoY2xvbmVkUmVxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Injection token for providing Doohbot API configuration
|
|
4
|
+
*/
|
|
5
|
+
export const DOOHBOT_API_CONFIG = new InjectionToken('DOOHBOT_API_CONFIG', {
|
|
6
|
+
providedIn: 'root',
|
|
7
|
+
factory: () => ({
|
|
8
|
+
apiUrl: '',
|
|
9
|
+
timeout: 30000,
|
|
10
|
+
enableApi: false,
|
|
11
|
+
includeHistory: false,
|
|
12
|
+
maxHistoryMessages: 10,
|
|
13
|
+
enableRetry: true,
|
|
14
|
+
retryAttempts: 2,
|
|
15
|
+
retryDelay: 1000,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL21vZGVscy9hcGktY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFrRS9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQW1CLG9CQUFvQixFQUFFO0lBQzNGLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxFQUFFLEVBQUU7UUFDVixPQUFPLEVBQUUsS0FBSztRQUNkLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGtCQUFrQixFQUFFLEVBQUU7UUFDdEIsV0FBVyxFQUFFLElBQUk7UUFDakIsYUFBYSxFQUFFLENBQUM7UUFDaEIsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQztDQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnByb2QnO1xyXG5cclxuLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gZm9yIERvb2hib3QgQVBJIGludGVncmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERvb2hib3RBcGlDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEJhY2tlbmQgQVBJIGVuZHBvaW50IFVSTFxyXG4gICAqIEV4YW1wbGU6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbS9jaGF0J1xyXG4gICAqL1xyXG4gIGFwaVVybDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvblxyXG4gICAqL1xyXG4gIGFwaUtleT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xyXG4gICAqIEBkZWZhdWx0IDMwMDAwICgzMCBzZWNvbmRzKVxyXG4gICAqL1xyXG4gIHRpbWVvdXQ/OiBudW1iZXI7IC8vIG5vIG5lZWRcclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIEFQSSBtb2RlICh0cnVlKSBvciB1c2UgbG9jYWwgaW50ZW50IG1hdGNoaW5nIChmYWxzZSlcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGVuYWJsZUFwaT86IGJvb2xlYW47IC8vIG5vIG5lZWRcclxuXHJcbiAgLyoqXHJcbiAgICogSW5jbHVkZSBtZXNzYWdlIGhpc3RvcnkgaW4gQVBJIHJlcXVlc3RzXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBpbmNsdWRlSGlzdG9yeT86IGJvb2xlYW47IC8vIG5vIG5lZWRcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBtZXNzYWdlcyB0byBpbmNsdWRlIGluIHJlcXVlc3RzXHJcbiAgICogQGRlZmF1bHQgMTBcclxuICAgKi9cclxuICBtYXhIaXN0b3J5TWVzc2FnZXM/OiBudW1iZXI7IC8vIG5vIG5lZWRcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBBUEkgcmVxdWVzdHNcclxuICAgKi9cclxuICBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIHJldHJ5IG9uIGZhaWx1cmVcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgZW5hYmxlUmV0cnk/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHNcclxuICAgKiBAZGVmYXVsdCAyXHJcbiAgICovXHJcbiAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1pbGxpc2Vjb25kc1xyXG4gICAqIEBkZWZhdWx0IDEwMDBcclxuICAgKi9cclxuICByZXRyeURlbGF5PzogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogSW5qZWN0aW9uIHRva2VuIGZvciBwcm92aWRpbmcgRG9vaGJvdCBBUEkgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERPT0hCT1RfQVBJX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEb29oYm90QXBpQ29uZmlnPignRE9PSEJPVF9BUElfQ09ORklHJywge1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxuICBmYWN0b3J5OiAoKSA9PiAoe1xyXG4gICAgYXBpVXJsOiAnJyxcclxuICAgIHRpbWVvdXQ6IDMwMDAwLFxyXG4gICAgZW5hYmxlQXBpOiBmYWxzZSxcclxuICAgIGluY2x1ZGVIaXN0b3J5OiBmYWxzZSxcclxuICAgIG1heEhpc3RvcnlNZXNzYWdlczogMTAsXHJcbiAgICBlbmFibGVSZXRyeTogdHJ1ZSxcclxuICAgIHJldHJ5QXR0ZW1wdHM6IDIsXHJcbiAgICByZXRyeURlbGF5OiAxMDAwLFxyXG4gIH0pLFxyXG59KTtcclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlcXVlc3QubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9tb2RlbHMvYXBpLXJlcXVlc3QubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb21wdE1vZGUgfSBmcm9tICcuLi90eXBlcy9wcm9tcHQtbW9kZS50eXBlJztcclxuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vbWVzc2FnZSc7XHJcblxyXG4vKipcclxuICogUmVxdWVzdCBwYXlsb2FkIGZvciBjaGF0IEFQSVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDaGF0QXBpUmVxdWVzdCB7XHJcbiAgLyoqXHJcbiAgICogVXNlcidzIG1lc3NhZ2UgdGV4dFxyXG4gICAqL1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogUHJvbXB0IG1vZGVcclxuICAgKi9cclxuICBwcm9tcHRfbW9kZT86IFByb21wdE1vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIG1lc3NhZ2UgaGlzdG9yeSBmb3IgY29udGV4dFxyXG4gICAqL1xyXG4gIGhpc3Rvcnk/OiBNZXNzYWdlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIG1ldGFkYXRhXHJcbiAgICovXHJcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBUaW1lc3RhbXAgb2YgdGhlIHJlcXVlc3RcclxuICAgKi9cclxuICB0aW1lc3RhbXA/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNwb25zZSBmcm9tIGNoYXQgQVBJXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENoYXRBcGlSZXNwb25zZSB7XHJcbiAgLyoqXHJcbiAgICogQm90J3MgcmVwbHkgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHJlcGx5OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGNvbmZpZGVuY2Ugc2NvcmUgKDAtMSlcclxuICAgKi9cclxuICBjb25maWRlbmNlPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIHNob3cgc3VnZ2VzdGlvbiBjaGlwc1xyXG4gICAqL1xyXG4gIHNob3dTdWdnZXN0aW9ucz86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHN1Z2dlc3RlZCByZXNwb25zZXNcclxuICAgKi9cclxuICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBBUElcclxuICAgKi9cclxuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIG1lc3NhZ2UgSUQgZnJvbSB0aGUgYmFja2VuZFxyXG4gICAqL1xyXG4gIG1lc3NhZ2VJZD86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEVycm9yIHJlc3BvbnNlIGZyb20gY2hhdCBBUElcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdEFwaUVycm9yIHtcclxuICAvKipcclxuICAgKiBFcnJvciBtZXNzYWdlXHJcbiAgICovXHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBFcnJvciBjb2RlXHJcbiAgICovXHJcbiAgY29kZT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogSFRUUCBzdGF0dXMgY29kZVxyXG4gICAqL1xyXG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZGl0aW9uYWwgZXJyb3IgZGV0YWlsc1xyXG4gICAqL1xyXG4gIGRldGFpbHM/OiBhbnk7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class ApiResponse {
|
|
2
|
+
constructor(success, message, data) {
|
|
3
|
+
this.success = success;
|
|
4
|
+
this.message = message;
|
|
5
|
+
this.data = data;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlc3BvbnNlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2NvcmUvbW9kZWxzL2FwaS1yZXNwb25zZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sV0FBVztJQU90QixZQUFZLE9BQWdCLEVBQUUsT0FBZSxFQUFFLElBQVE7UUFDckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlPFQ+IHtcclxuICBzdWNjZXNzITogYm9vbGVhbjtcclxuXHJcbiAgbWVzc2FnZSE6IHN0cmluZztcclxuXHJcbiAgZGF0YT86IFQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3M6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFQpIHtcclxuICAgIHRoaXMuc3VjY2VzcyA9IHN1Y2Nlc3M7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Injection token for advanced configuration
|
|
4
|
+
*/
|
|
5
|
+
export const DOOHBOT_ADVANCED_CONFIG = new InjectionToken('DOOHBOT_ADVANCED_CONFIG', {
|
|
6
|
+
providedIn: 'root',
|
|
7
|
+
factory: () => ({
|
|
8
|
+
authMode: 'manual',
|
|
9
|
+
tenantResolution: 'static',
|
|
10
|
+
enableMultiTenant: false,
|
|
11
|
+
persistChatPerTenant: true,
|
|
12
|
+
authHeaderName: 'Authorization',
|
|
13
|
+
authHeaderFormat: 'Bearer {token}',
|
|
14
|
+
enableRoleBasedFeatures: false,
|
|
15
|
+
debugMode: false,
|
|
16
|
+
}),
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9vaGJvdC1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9tb2RlbHMvZG9vaGJvdC1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTBGL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQseUJBQXlCLEVBQ3pCO0lBQ0UsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixnQkFBZ0IsRUFBRSxRQUFRO1FBQzFCLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsb0JBQW9CLEVBQUUsSUFBSTtRQUMxQixjQUFjLEVBQUUsZUFBZTtRQUMvQixnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsdUJBQXVCLEVBQUUsS0FBSztRQUM5QixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDO0NBQ0gsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aE1vZGUgfSBmcm9tICcuLi90eXBlcy9hdXRoLW1vZGUudHlwZSc7XHJcbmltcG9ydCB7IFRlbmFudFJlc29sdXRpb25TdHJhdGVneSB9IGZyb20gJy4uL3R5cGVzL3RlbmFudC1yZXNvbHV0aW9uLXN0cmF0ZWd5LnR5cGUnO1xyXG5pbXBvcnQgeyBQcm9tcHRNb2RlIH0gZnJvbSAnLi4vdHlwZXMvcHJvbXB0LW1vZGUudHlwZSc7XHJcblxyXG4vKipcclxuICogQWR2YW5jZWQgY29uZmlndXJhdGlvbiBmb3IgRG9vaEJvdCBwYWNrYWdlXHJcbiAqIFN1cHBvcnRzIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHVzZSBjYXNlc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEb29oYm90QWR2YW5jZWRDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEF1dGhlbnRpY2F0aW9uIG1vZGVcclxuICAgKiAtICdtYW51YWwnOiBZb3UgcHJvdmlkZSBwbGF0Zm9ybVRlbmFudCwgc3ViVGVuYW50LCBhZ2VudCBtYW51YWxseVxyXG4gICAqIC0gJ2F1dG8nOiBQYWNrYWdlIHJlYWRzIGZyb20geW91ciBhdXRoIHNlcnZpY2UgdmlhIHJlc29sdmVyXHJcbiAgICogQGRlZmF1bHQgJ21hbnVhbCdcclxuICAgKi9cclxuICBhdXRoTW9kZT86IEF1dGhNb2RlO1xyXG5cclxuICAvKipcclxuICAgKiBUZW5hbnQgcmVzb2x1dGlvbiBzdHJhdGVneVxyXG4gICAqIC0gJ3N0YXRpYyc6IFVzZSBmaXhlZCB2YWx1ZXMgcHJvdmlkZWQgdmlhIGlucHV0c1xyXG4gICAqIC0gJ2R5bmFtaWMnOiBBdXRvbWF0aWNhbGx5IHVwZGF0ZSB3aGVuIGF1dGggc3RhdGUgY2hhbmdlc1xyXG4gICAqIC0gJ2NhbGxiYWNrJzogVXNlIGN1c3RvbSByZXNvbHZlciBmdW5jdGlvblxyXG4gICAqIEBkZWZhdWx0ICdzdGF0aWMnXHJcbiAgICovXHJcbiAgdGVuYW50UmVzb2x1dGlvbj86IFRlbmFudFJlc29sdXRpb25TdHJhdGVneTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXV0by1jb25maWd1cmUgZnJvbSBsb2NhbFN0b3JhZ2Uga2V5XHJcbiAgICogSWYgcHJvdmlkZWQsIHBhY2thZ2Ugd2lsbCByZWFkIGF1dGggZGF0YSBmcm9tIGxvY2FsU3RvcmFnZVxyXG4gICAqIEV4YW1wbGU6ICdhdXRoX3VzZXInIG9yICdzYWFzX3Nlc3Npb24nXHJcbiAgICovXHJcbiAgYXV0b0NvbmZpZ0Zyb21TdG9yYWdlPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgbXVsdGktdGVuYW50IG1vZGVcclxuICAgKiBBbGxvd3Mgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50IHRlbmFudCBjb250ZXh0c1xyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgZW5hYmxlTXVsdGlUZW5hbnQ/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBQZXJzaXN0IGNoYXQgaGlzdG9yeSBwZXIgdGVuYW50XHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIHBlcnNpc3RDaGF0UGVyVGVuYW50PzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGF1dGhlbnRpY2F0aW9uIGhlYWRlciBuYW1lXHJcbiAgICogQGRlZmF1bHQgJ0F1dGhvcml6YXRpb24nXHJcbiAgICovXHJcbiAgYXV0aEhlYWRlck5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBhdXRoZW50aWNhdGlvbiBoZWFkZXIgZm9ybWF0XHJcbiAgICogVXNlIHt0b2tlbn0gYXMgcGxhY2Vob2xkZXJcclxuICAgKiBAZGVmYXVsdCAnQmVhcmVyIHt0b2tlbn0nXHJcbiAgICovXHJcbiAgYXV0aEhlYWRlckZvcm1hdD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIHJvbGUtYmFzZWQgZmVhdHVyZXNcclxuICAgKiBTaG93cy9oaWRlcyBmZWF0dXJlcyBiYXNlZCBvbiB1c2VyIHBlcm1pc3Npb25zXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBlbmFibGVSb2xlQmFzZWRGZWF0dXJlcz86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZXIgcGVybWlzc2lvbnMgKGZvciByb2xlLWJhc2VkIGZlYXR1cmVzKVxyXG4gICAqL1xyXG4gIHVzZXJQZXJtaXNzaW9ucz86IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsYmFjayB3aGVuIGF1dGhlbnRpY2F0aW9uIGZhaWxzXHJcbiAgICovXHJcbiAgb25BdXRoRmFpbHVyZT86IChlcnJvcjogYW55KSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgZGVidWcgbW9kZSAobG9ncyBjb25maWd1cmF0aW9uIGFuZCByZXF1ZXN0cylcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGRlYnVnTW9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb21wdCBtb2RlIGZvciBjaGF0IHJlc3BvbnNlc1xyXG4gICAqIEBkZWZhdWx0ICdtYXJrZG93bidcclxuICAgKi9cclxuICBwcm9tcHRNb2RlPzogUHJvbXB0TW9kZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERPT0hCT1RfQURWQU5DRURfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPERvb2hib3RBZHZhbmNlZENvbmZpZz4oXHJcbiAgJ0RPT0hCT1RfQURWQU5DRURfQ09ORklHJyxcclxuICB7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbiAgICBmYWN0b3J5OiAoKSA9PiAoe1xyXG4gICAgICBhdXRoTW9kZTogJ21hbnVhbCcsXHJcbiAgICAgIHRlbmFudFJlc29sdXRpb246ICdzdGF0aWMnLFxyXG4gICAgICBlbmFibGVNdWx0aVRlbmFudDogZmFsc2UsXHJcbiAgICAgIHBlcnNpc3RDaGF0UGVyVGVuYW50OiB0cnVlLFxyXG4gICAgICBhdXRoSGVhZGVyTmFtZTogJ0F1dGhvcml6YXRpb24nLFxyXG4gICAgICBhdXRoSGVhZGVyRm9ybWF0OiAnQmVhcmVyIHt0b2tlbn0nLFxyXG4gICAgICBlbmFibGVSb2xlQmFzZWRGZWF0dXJlczogZmFsc2UsXHJcbiAgICAgIGRlYnVnTW9kZTogZmFsc2UsXHJcbiAgICB9KSxcclxuICB9LFxyXG4pO1xyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL21vZGVscy9saWNlbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIExpY2Vuc2luZ0NvbnRleHQge1xyXG4gICAgdGVuYW50SWQ6IHN0cmluZzsgICAgLy8gVW5pcXVlIGNvbXBhbnkvb3JnIElEXHJcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nOyAvLyBVc2VyIC8gTWVyY2hhbnQgSURcclxuICAgIHJvbGVzPzogc3RyaW5nW107ICAgIC8vIE9wdGlvbmFsIHJvbGVzL2dyb3Vwc1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExpY2Vuc2VQYWNrYWdlIHtcclxuICAgIFtwYWNrYWdlSWQ6IHN0cmluZ106IHN0cmluZzsgLy8gcGFja2FnZUlkIC0+IGxpY2Vuc2VLZXlcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdWJqZWN0TGljZW5zZSB7XHJcbiAgICBzdWJqZWN0VHlwZTogJ3VzZXInIHwgJ3JvbGUnIHwgJ3RlbmFudCc7XHJcbiAgICBzdWJqZWN0SWQ6IHN0cmluZztcclxuICAgIHBhY2thZ2VzOiBMaWNlbnNlUGFja2FnZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaWNlbnNlRmlsZUNvbnRlbnQge1xyXG4gICAgYWNjb3VudElkOiBzdHJpbmc7XHJcbiAgICBpc3N1ZWRCeTogc3RyaW5nO1xyXG4gICAgaXNzdWVkQXQ6IHN0cmluZztcclxuICAgIGxpY2Vuc2VzOiBTdWJqZWN0TGljZW5zZVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExpY2Vuc2VSZWdpc3RyeSB7XHJcbiAgICBhY2NvdW50SWQ6IHN0cmluZztcclxuICAgIHN1YmplY3RMaWNlbnNlczogTWFwPHN0cmluZywgTGljZW5zZVBhY2thZ2U+O1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL21vZGVscy9tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlUm9sZSB9IGZyb20gJy4uL3R5cGVzL21lc3NhZ2Utcm9sZS50eXBlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBzZW5kZXI6IE1lc3NhZ2VSb2xlO1xyXG4gIHNlbmRlck5hbWU/OiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nOyAvLyEgdXNlZCBmb3Igbm9uLXN0cmVhbWluZ1xyXG4gIGNodW5rcz86IHN0cmluZ1tdOyAvLyEgdXNlZCBmb3Igc3RyZWFtaW5nXHJcbiAgdGltZXN0YW1wPzogRGF0ZTtcclxuICBzaG93U3VnZ2VzdGlvbnM/OiBib29sZWFuO1xyXG4gIC8vIE9wdGlvbmFsIGNvbnRleHQgZmllbGRzIGZvciBBUEkgaW50ZWdyYXRpb25cclxuICBwbGF0Zm9ybVRlbmFudD86IHN0cmluZztcclxuICBzdWJUZW5hbnQ/OiBzdHJpbmc7XHJcbiAgYWdlbnQ/OiBzdHJpbmc7XHJcbiAgY29tcGxldGVkOiBib29sZWFuIHwgdHJ1ZTtcclxuICBpc0hpc3Rvcnk6IGJvb2xlYW4gfCB0cnVlOyAvLyEgSW5kaWNhdGVkIHRoZSBtZXNzYWdlIGlzIGZyb20gaGlzdG9yeVxyXG4gIGNvcGllZD86IGJvb2xlYW47XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2NvcmUvbW9kZWxzL3RoZW1lLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ET1xyXG5leHBvcnQgaW50ZXJmYWNlIERvb2hib3RUaGVtZUNvbmZpZyB7XHJcbiAgLy8gRm9udFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmc7XHJcblxyXG4gIC8vIFByaW1hcnkgJiBTZWNvbmRhcnlcclxuICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XHJcbiAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XHJcblxyXG4gIC8vIEJhY2tncm91bmRzXHJcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xyXG4gIGNoYXRJbnB1dENvbG9yPzogc3RyaW5nO1xyXG5cclxuICAvLyBUZXh0IENvbG9yc1xyXG4gIHRleHRBbHRDb2xvcj86IHN0cmluZztcclxuICB0ZXh0Q29sb3I/OiBzdHJpbmc7XHJcbiAgc2Vjb25kYXJ5VGV4dENvbG9yPzogc3RyaW5nO1xyXG4gIGhpbnRUZXh0Q29sb3I/OiBzdHJpbmc7XHJcblxyXG4gIC8vIEJ1dHRvbiBDb2xvcnNcclxuICBidXR0b25Db2xvcj86IHN0cmluZztcclxuXHJcbiAgLy8gTWVzc2FnZSBDb2xvcnNcclxuICB1c2VyTWVzc2FnZUNvbG9yPzogc3RyaW5nO1xyXG4gIGJvdE1lc3NhZ2VDb2xvcj86IHN0cmluZztcclxuXHJcbiAgLy8gTWVzc2FnZSBUZXh0IENvbG9yc1xyXG4gIHVzZXJUZXh0Q29sb3I/OiBzdHJpbmc7XHJcbiAgYm90VGV4dENvbG9yPzogc3RyaW5nO1xyXG5cclxuICAvLyBCb3JkZXJzXHJcbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XHJcbiAgYm9yZGVyU2hhZG93Q29sb3I/OiBzdHJpbmc7XHJcbiAgYm9yZGVyVG9wQ29sb3I/OiBzdHJpbmc7XHJcblxyXG4gIC8vIEluZGljYXRvcnNcclxuICB0eXBpbmdJbmRpY2F0b3JDb2xvcj86IHN0cmluZztcclxuXHJcbiAgLy8gVXRpbGl0eSBDb2xvcnNcclxuICB3aGl0ZT86IHN0cmluZztcclxuICBibGFjaz86IHN0cmluZztcclxuICBncmV5Pzogc3RyaW5nO1xyXG4gIHJlZD86IHN0cmluZztcclxuICB5ZWxsb3c/OiBzdHJpbmc7XHJcbiAgb3JhbmdlPzogc3RyaW5nO1xyXG4gIGdyZWVuPzogc3RyaW5nO1xyXG4gIGJsdWU/OiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import { DoohbotInput } from '../../doohbot-input';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class CoreConfigService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.configSignal = signal(new DoohbotInput());
|
|
7
|
+
this.config$ = this.configSignal.asReadonly();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Updates the global library configuration
|
|
11
|
+
*/
|
|
12
|
+
updateConfig(config) {
|
|
13
|
+
this.configSignal.set(config);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Dynamic getters for common config properties
|
|
17
|
+
*/
|
|
18
|
+
get apiUrl() {
|
|
19
|
+
const config = this.configSignal();
|
|
20
|
+
return `${config.apiBaseUrl}${config.apiSegment}`;
|
|
21
|
+
}
|
|
22
|
+
get storageKey() {
|
|
23
|
+
return this.configSignal().storageKey || '';
|
|
24
|
+
}
|
|
25
|
+
get secretKey() {
|
|
26
|
+
return this.configSignal().secretKey || '';
|
|
27
|
+
}
|
|
28
|
+
get companyCode() {
|
|
29
|
+
return this.configSignal().companyCode || '';
|
|
30
|
+
}
|
|
31
|
+
get tenancyName() {
|
|
32
|
+
return this.configSignal().tenancyName || '';
|
|
33
|
+
}
|
|
34
|
+
get licenseKey() {
|
|
35
|
+
return this.configSignal().licenseKey || '';
|
|
36
|
+
}
|
|
37
|
+
get licenseFilePath() {
|
|
38
|
+
return this.configSignal().licenseFilePath || '';
|
|
39
|
+
}
|
|
40
|
+
get rememberMe() {
|
|
41
|
+
return this.configSignal().rememberMe !== undefined ? this.configSignal().rememberMe : false;
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoreConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoreConfigService, providedIn: 'root' }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoreConfigService, decorators: [{
|
|
47
|
+
type: Injectable,
|
|
48
|
+
args: [{
|
|
49
|
+
providedIn: 'root',
|
|
50
|
+
}]
|
|
51
|
+
}] });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2NvcmUtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlVLGlCQUFZLEdBQWlDLE1BQU0sQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDekUsWUFBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7S0E0Q2pEO0lBMUNDOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQW9CO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEcsQ0FBQzsrR0E3Q1UsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9vaGJvdElucHV0IH0gZnJvbSAnLi4vLi4vZG9vaGJvdC1pbnB1dCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZUNvbmZpZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29uZmlnU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxEb29oYm90SW5wdXQ+ID0gc2lnbmFsKG5ldyBEb29oYm90SW5wdXQoKSk7XHJcbiAgcHVibGljIGNvbmZpZyQgPSB0aGlzLmNvbmZpZ1NpZ25hbC5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGdsb2JhbCBsaWJyYXJ5IGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnOiBEb29oYm90SW5wdXQpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnU2lnbmFsLnNldChjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRHluYW1pYyBnZXR0ZXJzIGZvciBjb21tb24gY29uZmlnIHByb3BlcnRpZXNcclxuICAgKi9cclxuICBnZXQgYXBpVXJsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xyXG4gICAgcmV0dXJuIGAke2NvbmZpZy5hcGlCYXNlVXJsfSR7Y29uZmlnLmFwaVNlZ21lbnR9YDtcclxuICB9XHJcblxyXG4gIGdldCBzdG9yYWdlS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTaWduYWwoKS5zdG9yYWdlS2V5IHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlY3JldEtleSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2lnbmFsKCkuc2VjcmV0S2V5IHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbXBhbnlDb2RlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTaWduYWwoKS5jb21wYW55Q29kZSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldCB0ZW5hbmN5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2lnbmFsKCkudGVuYW5jeU5hbWUgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgbGljZW5zZUtleSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2lnbmFsKCkubGljZW5zZUtleSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldCBsaWNlbnNlRmlsZVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NpZ25hbCgpLmxpY2Vuc2VGaWxlUGF0aCB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldCByZW1lbWJlck1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2lnbmFsKCkucmVtZW1iZXJNZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWdTaWduYWwoKS5yZW1lbWJlck1lISA6IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { inject, Injectable, signal } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { firstValueFrom } from 'rxjs';
|
|
4
|
+
import logger from '../utils/logger.service';
|
|
5
|
+
import { CoreConfigService } from './core-config.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class LicenseService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.http = inject(HttpClient);
|
|
10
|
+
this.coreConfig = inject(CoreConfigService);
|
|
11
|
+
this.registry = signal(null);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load the license configuration from a JSON file.
|
|
15
|
+
* Supports both Hierarchical (entitlements) and Flat-map (package:key) formats.
|
|
16
|
+
* @param filePath Path to the license JSON file
|
|
17
|
+
*/
|
|
18
|
+
async loadLicenseFile(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
const finalPath = filePath || this.coreConfig.licenseFilePath;
|
|
21
|
+
const data = await firstValueFrom(this.http.get(finalPath));
|
|
22
|
+
if (!data) {
|
|
23
|
+
throw new Error('Empty license file');
|
|
24
|
+
}
|
|
25
|
+
// Detection: Hierarchical Format (subjectId/licenses array)
|
|
26
|
+
if (data.licenses && Array.isArray(data.licenses)) {
|
|
27
|
+
this.processHierarchicalLicense(data);
|
|
28
|
+
}
|
|
29
|
+
// Detection: Flat Map Format (packageId: key)
|
|
30
|
+
else {
|
|
31
|
+
this.processFlatMapLicense(data);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// Industry pattern: Silent loading for optional registry files
|
|
36
|
+
logger.log('[LicenseService] No external license file found or failed to load. Falling back to AppConst.');
|
|
37
|
+
this.registry.set(null);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
processHierarchicalLicense(data) {
|
|
41
|
+
const subjectMap = new Map();
|
|
42
|
+
data.licenses.forEach((license) => {
|
|
43
|
+
const key = `${license.subjectType}:${license.subjectId}`;
|
|
44
|
+
subjectMap.set(key, license.packages);
|
|
45
|
+
});
|
|
46
|
+
this.registry.set({
|
|
47
|
+
accountId: data.accountId,
|
|
48
|
+
subjectLicenses: subjectMap,
|
|
49
|
+
});
|
|
50
|
+
logger.log(`[LicenseService] Hierarchical Registry loaded for account: ${data.accountId}`);
|
|
51
|
+
}
|
|
52
|
+
processFlatMapLicense(data) {
|
|
53
|
+
// Flat-map format: { "tenantName": "license_key" }
|
|
54
|
+
// Convert each entry to: tenant:tenantName -> { doohbot: license_key }
|
|
55
|
+
const subjectMap = new Map();
|
|
56
|
+
Object.entries(data).forEach(([tenantName, licenseKey]) => {
|
|
57
|
+
const tenantKey = `tenant:${tenantName}`;
|
|
58
|
+
subjectMap.set(tenantKey, {
|
|
59
|
+
doohbot: licenseKey,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
this.registry.set({
|
|
63
|
+
accountId: 'FLAT_MAP_REGISTRY',
|
|
64
|
+
subjectLicenses: subjectMap,
|
|
65
|
+
});
|
|
66
|
+
logger.log(`[LicenseService] Flat-map registry loaded with ${subjectMap.size} tenant(s)`);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the correct license key based on context and requested package
|
|
70
|
+
* @param context The current licensing context (tenant, user, roles)
|
|
71
|
+
* @param packageId The ID of the package requesting a license
|
|
72
|
+
* @returns The resolved license key, or null if unauthorized
|
|
73
|
+
*/
|
|
74
|
+
resolveLicenseKey(context, packageId) {
|
|
75
|
+
// Hierarchical Registry (Most Specific)
|
|
76
|
+
const keyFromRegistry = this.resolveFromRegistry(context, packageId);
|
|
77
|
+
if (keyFromRegistry)
|
|
78
|
+
return keyFromRegistry;
|
|
79
|
+
logger.warn(`[LicenseService] No license found for package: ${packageId} and user: ${context.principalId}`);
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
resolveFromRegistry(context, packageId) {
|
|
83
|
+
const reg = this.registry();
|
|
84
|
+
if (!reg)
|
|
85
|
+
return null;
|
|
86
|
+
// Strict Account Check
|
|
87
|
+
if (reg.accountId !== 'EXTERNAL_OVERRIDE' && reg.accountId !== context.tenantId) {
|
|
88
|
+
logger.error(`[LicenseService] Account mismatch! Registry: ${reg.accountId}, Context: ${context.tenantId}`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const subjectsToSearch = [
|
|
92
|
+
`user:${context.principalId}`,
|
|
93
|
+
...(context.roles?.map((r) => `role:${r}`) || []),
|
|
94
|
+
`tenant:${context.tenantId}`,
|
|
95
|
+
'tenant:default', // Fallback for flat-map external files
|
|
96
|
+
];
|
|
97
|
+
for (const subjectKey of subjectsToSearch) {
|
|
98
|
+
const packages = reg.subjectLicenses.get(subjectKey);
|
|
99
|
+
if (packages && packages[packageId]) {
|
|
100
|
+
logger.debug(`[LicenseService] Resolved key for ${packageId} via Registry (${subjectKey})`);
|
|
101
|
+
return packages[packageId];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Resolves the license key for the current tenant.
|
|
108
|
+
*/
|
|
109
|
+
resolveTenantLicenseKey(tenancyName) {
|
|
110
|
+
const activeTenancy = tenancyName || this.coreConfig.tenancyName;
|
|
111
|
+
if (!activeTenancy) {
|
|
112
|
+
logger.warn('[LicenseService] No tenancy name found.');
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const reg = this.registry();
|
|
116
|
+
if (!reg) {
|
|
117
|
+
logger.error('[LicenseService] License registry not loaded.');
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const tenantLicenses = reg.subjectLicenses.get(`tenant:${activeTenancy}`);
|
|
121
|
+
const licenseKey = tenantLicenses?.['doohbot'] || null;
|
|
122
|
+
if (licenseKey) {
|
|
123
|
+
logger.info(`[LicenseService] Resolved Doohbot license for: ${activeTenancy}`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
logger.warn(`[LicenseService] No license key found for tenant: ${activeTenancy}`);
|
|
127
|
+
}
|
|
128
|
+
return licenseKey;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Check if a registry is currently loaded
|
|
132
|
+
*/
|
|
133
|
+
isRegistryLoaded() {
|
|
134
|
+
return this.registry() !== null;
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
137
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseService, providedIn: 'root' }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LicenseService, decorators: [{
|
|
140
|
+
type: Injectable,
|
|
141
|
+
args: [{
|
|
142
|
+
providedIn: 'root',
|
|
143
|
+
}]
|
|
144
|
+
}] });
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2NvcmUvc2VydmljZXMvbGljZW5zZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU90QyxPQUFPLE1BQU0sTUFBTSx5QkFBeUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLMUQsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJVSxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLGVBQVUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2QyxhQUFRLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsQ0FBQztLQXdKekQ7SUF0SkM7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBaUI7UUFDckMsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUU5RCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBRWpFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsNERBQTREO1lBQzVELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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R0FBRyxDQUFDLFVBQVUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFdkQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ2hGO2FBQU07WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDO0lBQ2xDLENBQUM7K0dBMUpVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBMaWNlbnNlRmlsZUNvbnRlbnQsXHJcbiAgTGljZW5zZVJlZ2lzdHJ5LFxyXG4gIExpY2Vuc2luZ0NvbnRleHQsXHJcbiAgTGljZW5zZVBhY2thZ2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2xpY2Vuc2UubW9kZWwnO1xyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL3V0aWxzL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvcmUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpY2Vuc2VTZXJ2aWNlIHtcclxuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJpdmF0ZSBjb3JlQ29uZmlnID0gaW5qZWN0KENvcmVDb25maWdTZXJ2aWNlKTtcclxuICBwcml2YXRlIHJlZ2lzdHJ5ID0gc2lnbmFsPExpY2Vuc2VSZWdpc3RyeSB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHRoZSBsaWNlbnNlIGNvbmZpZ3VyYXRpb24gZnJvbSBhIEpTT04gZmlsZS5cclxuICAgKiBTdXBwb3J0cyBib3RoIEhpZXJhcmNoaWNhbCAoZW50aXRsZW1lbnRzKSBhbmQgRmxhdC1tYXAgKHBhY2thZ2U6a2V5KSBmb3JtYXRzLlxyXG4gICAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIHRvIHRoZSBsaWNlbnNlIEpTT04gZmlsZVxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWRMaWNlbnNlRmlsZShmaWxlUGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmluYWxQYXRoID0gZmlsZVBhdGggfHwgdGhpcy5jb3JlQ29uZmlnLmxpY2Vuc2VGaWxlUGF0aDtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PGFueT4oZmluYWxQYXRoKSk7XHJcblxyXG4gICAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IGxpY2Vuc2UgZmlsZScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlY3Rpb246IEhpZXJhcmNoaWNhbCBGb3JtYXQgKHN1YmplY3RJZC9saWNlbnNlcyBhcnJheSlcclxuICAgICAgaWYgKGRhdGEubGljZW5zZXMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmxpY2Vuc2VzKSkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0hpZXJhcmNoaWNhbExpY2Vuc2UoZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gRGV0ZWN0aW9uOiBGbGF0IE1hcCBGb3JtYXQgKHBhY2thZ2VJZDoga2V5KVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NGbGF0TWFwTGljZW5zZShkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gSW5kdXN0cnkgcGF0dGVybjogU2lsZW50IGxvYWRpbmcgZm9yIG9wdGlvbmFsIHJlZ2lzdHJ5IGZpbGVzXHJcbiAgICAgIGxvZ2dlci5sb2coXHJcbiAgICAgICAgJ1tMaWNlbnNlU2VydmljZV0gTm8gZXh0ZXJuYWwgbGljZW5zZSBmaWxlIGZvdW5kIG9yIGZhaWxlZCB0byBsb2FkLiBGYWxsaW5nIGJhY2sgdG8gQXBwQ29uc3QuJyxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZWdpc3RyeS5zZXQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NIaWVyYXJjaGljYWxMaWNlbnNlKGRhdGE6IExpY2Vuc2VGaWxlQ29udGVudCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3ViamVjdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBMaWNlbnNlUGFja2FnZT4oKTtcclxuXHJcbiAgICBkYXRhLmxpY2Vuc2VzLmZvckVhY2goKGxpY2Vuc2UpID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gYCR7bGljZW5zZS5zdWJqZWN0VHlwZX06JHtsaWNlbnNlLnN1YmplY3RJZH1gO1xyXG4gICAgICBzdWJqZWN0TWFwLnNldChrZXksIGxpY2Vuc2UucGFja2FnZXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZWdpc3RyeS5zZXQoe1xyXG4gICAgICBhY2NvdW50SWQ6IGRhdGEuYWNjb3VudElkLFxyXG4gICAgICBzdWJqZWN0TGljZW5zZXM6IHN1YmplY3RNYXAsXHJcbiAgICB9KTtcclxuXHJcbiAgICBsb2dnZXIubG9nKGBbTGljZW5zZVNlcnZpY2VdIEhpZXJhcmNoaWNhbCBSZWdpc3RyeSBsb2FkZWQgZm9yIGFjY291bnQ6ICR7ZGF0YS5hY2NvdW50SWR9YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NGbGF0TWFwTGljZW5zZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XHJcbiAgICAvLyBGbGF0LW1hcCBmb3JtYXQ6IHsgXCJ0ZW5hbnROYW1lXCI6IFwibGljZW5zZV9rZXlcIiB9XHJcbiAgICAvLyBDb252ZXJ0IGVhY2ggZW50cnkgdG86IHRlbmFudDp0ZW5hbnROYW1lIC0+IHsgZG9vaGJvdDogbGljZW5zZV9rZXkgfVxyXG5cclxuICAgIGNvbnN0IHN1YmplY3RNYXAgPSBuZXcgTWFwPHN0cmluZywgTGljZW5zZVBhY2thZ2U+KCk7XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW3RlbmFudE5hbWUsIGxpY2Vuc2VLZXldKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRlbmFudEtleSA9IGB0ZW5hbnQ6JHt0ZW5hbnROYW1lfWA7XHJcbiAgICAgIHN1YmplY3RNYXAuc2V0KHRlbmFudEtleSwge1xyXG4gICAgICAgIGRvb2hib3Q6IGxpY2Vuc2VLZXksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZWdpc3RyeS5zZXQoe1xyXG4gICAgICBhY2NvdW50SWQ6ICdGTEFUX01BUF9SRUdJU1RSWScsXHJcbiAgICAgIHN1YmplY3RMaWNlbnNlczogc3ViamVjdE1hcCxcclxuICAgIH0pO1xyXG5cclxuICAgIGxvZ2dlci5sb2coYFtMaWNlbnNlU2VydmljZV0gRmxhdC1tYXAgcmVnaXN0cnkgbG9hZGVkIHdpdGggJHtzdWJqZWN0TWFwLnNpemV9IHRlbmFudChzKWApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZSB0aGUgY29ycmVjdCBsaWNlbnNlIGtleSBiYXNlZCBvbiBjb250ZXh0IGFuZCByZXF1ZXN0ZWQgcGFja2FnZVxyXG4gICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjdXJyZW50IGxpY2Vuc2luZyBjb250ZXh0ICh0ZW5hbnQsIHVzZXIsIHJvbGVzKVxyXG4gICAqIEBwYXJhbSBwYWNrYWdlSWQgVGhlIElEIG9mIHRoZSBwYWNrYWdlIHJlcXVlc3RpbmcgYSBsaWNlbnNlXHJcbiAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIGxpY2Vuc2Uga2V5LCBvciBudWxsIGlmIHVuYXV0aG9yaXplZFxyXG4gICAqL1xyXG4gIHJlc29sdmVMaWNlbnNlS2V5KGNvbnRleHQ6IExpY2Vuc2luZ0NvbnRleHQsIHBhY2thZ2VJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAvLyAgIEhpZXJhcmNoaWNhbCBSZWdpc3RyeSAoTW9zdCBTcGVjaWZpYylcclxuICAgIGNvbnN0IGtleUZyb21SZWdpc3RyeSA9IHRoaXMucmVzb2x2ZUZyb21SZWdpc3RyeShjb250ZXh0LCBwYWNrYWdlSWQpO1xyXG4gICAgaWYgKGtleUZyb21SZWdpc3RyeSkgcmV0dXJuIGtleUZyb21SZWdpc3RyeTtcclxuXHJcbiAgICBsb2dnZXIud2FybihcclxuICAgICAgYFtMaWNlbnNlU2VydmljZV0gTm8gbGljZW5zZSBmb3VuZCBmb3IgcGFja2FnZTogJHtwYWNrYWdlSWR9IGFuZCB1c2VyOiAke2NvbnRleHQucHJpbmNpcGFsSWR9YCxcclxuICAgICk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUZyb21SZWdpc3RyeShjb250ZXh0OiBMaWNlbnNpbmdDb250ZXh0LCBwYWNrYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5yZWdpc3RyeSgpO1xyXG4gICAgaWYgKCFyZWcpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIFN0cmljdCBBY2NvdW50IENoZWNrXHJcbiAgICBpZiAocmVnLmFjY291bnRJZCAhPT0gJ0VYVEVSTkFMX09WRVJSSURFJyAmJiByZWcuYWNjb3VudElkICE9PSBjb250ZXh0LnRlbmFudElkKSB7XHJcbiAgICAgIGxvZ2dlci5lcnJvcihcclxuICAgICAgICBgW0xpY2Vuc2VTZXJ2aWNlXSBBY2NvdW50IG1pc21hdGNoISBSZWdpc3RyeTogJHtyZWcuYWNjb3VudElkfSwgQ29udGV4dDogJHtjb250ZXh0LnRlbmFudElkfWAsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN1YmplY3RzVG9TZWFyY2ggPSBbXHJcbiAgICAgIGB1c2VyOiR7Y29udGV4dC5wcmluY2lwYWxJZH1gLFxyXG4gICAgICAuLi4oY29udGV4dC5yb2xlcz8ubWFwKChyKSA9PiBgcm9sZToke3J9YCkgfHwgW10pLFxyXG4gICAgICBgdGVuYW50OiR7Y29udGV4dC50ZW5hbnRJZH1gLFxyXG4gICAgICAndGVuYW50OmRlZmF1bHQnLCAvLyBGYWxsYmFjayBmb3IgZmxhdC1tYXAgZXh0ZXJuYWwgZmlsZXNcclxuICAgIF07XHJcblxyXG4gICAgZm9yIChjb25zdCBzdWJqZWN0S2V5IG9mIHN1YmplY3RzVG9TZWFyY2gpIHtcclxuICAgICAgY29uc3QgcGFja2FnZXMgPSByZWcuc3ViamVjdExpY2Vuc2VzLmdldChzdWJqZWN0S2V5KTtcclxuICAgICAgaWYgKHBhY2thZ2VzICYmIHBhY2thZ2VzW3BhY2thZ2VJZF0pIHtcclxuICAgICAgICBsb2dnZXIuZGVidWcoYFtMaWNlbnNlU2VydmljZV0gUmVzb2x2ZWQga2V5IGZvciAke3BhY2thZ2VJZH0gdmlhIFJlZ2lzdHJ5ICgke3N1YmplY3RLZXl9KWApO1xyXG4gICAgICAgIHJldHVybiBwYWNrYWdlc1twYWNrYWdlSWRdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIHRoZSBsaWNlbnNlIGtleSBmb3IgdGhlIGN1cnJlbnQgdGVuYW50LlxyXG4gICAqL1xyXG4gIHJlc29sdmVUZW5hbnRMaWNlbnNlS2V5KHRlbmFuY3lOYW1lPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBhY3RpdmVUZW5hbmN5ID0gdGVuYW5jeU5hbWUgfHwgdGhpcy5jb3JlQ29uZmlnLnRlbmFuY3lOYW1lO1xyXG5cclxuICAgIGlmICghYWN0aXZlVGVuYW5jeSkge1xyXG4gICAgICBsb2dnZXIud2FybignW0xpY2Vuc2VTZXJ2aWNlXSBObyB0ZW5hbmN5IG5hbWUgZm91bmQuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZyA9IHRoaXMucmVnaXN0cnkoKTtcclxuICAgIGlmICghcmVnKSB7XHJcbiAgICAgIGxvZ2dlci5lcnJvcignW0xpY2Vuc2VTZXJ2aWNlXSBMaWNlbnNlIHJlZ2lzdHJ5IG5vdCBsb2FkZWQuJyk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRlbmFudExpY2Vuc2VzID0gcmVnLnN1YmplY3RMaWNlbnNlcy5nZXQoYHRlbmFudDoke2FjdGl2ZVRlbmFuY3l9YCk7XHJcbiAgICBjb25zdCBsaWNlbnNlS2V5ID0gdGVuYW50TGljZW5zZXM/LlsnZG9vaGJvdCddIHx8IG51bGw7XHJcblxyXG4gICAgaWYgKGxpY2Vuc2VLZXkpIHtcclxuICAgICAgbG9nZ2VyLmluZm8oYFtMaWNlbnNlU2VydmljZV0gUmVzb2x2ZWQgRG9vaGJvdCBsaWNlbnNlIGZvcjogJHthY3RpdmVUZW5hbmN5fWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9nZ2VyLndhcm4oYFtMaWNlbnNlU2VydmljZV0gTm8gbGljZW5zZSBrZXkgZm91bmQgZm9yIHRlbmFudDogJHthY3RpdmVUZW5hbmN5fWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaWNlbnNlS2V5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSByZWdpc3RyeSBpcyBjdXJyZW50bHkgbG9hZGVkXHJcbiAgICovXHJcbiAgaXNSZWdpc3RyeUxvYWRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5KCkgIT09IG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|