@yuuvis/client-core 0.6.5
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 +111 -0
- package/esm2022/index.mjs +65 -0
- package/esm2022/lib/client-core.module.mjs +117 -0
- package/esm2022/lib/client-core.shared.module.mjs +18 -0
- package/esm2022/lib/common/pipes/filesize.pipe.mjs +37 -0
- package/esm2022/lib/common/pipes/index.mjs +6 -0
- package/esm2022/lib/common/pipes/keys.pipe.mjs +17 -0
- package/esm2022/lib/common/pipes/locale-date.pipe.mjs +45 -0
- package/esm2022/lib/common/pipes/locale-number.pipe.mjs +115 -0
- package/esm2022/lib/common/pipes/safe-html.pipe.mjs +44 -0
- package/esm2022/lib/common/services/native-notifications.interface.mjs +2 -0
- package/esm2022/lib/common/services/native-notifications.mjs +40 -0
- package/esm2022/lib/model/dms-object.interface.mjs +2 -0
- package/esm2022/lib/model/dms-object.model.mjs +79 -0
- package/esm2022/lib/model/object-flavor.interface.mjs +2 -0
- package/esm2022/lib/model/range-value.interface.mjs +2 -0
- package/esm2022/lib/model/yuv-error.model.mjs +37 -0
- package/esm2022/lib/model/yuv-user.model.mjs +38 -0
- package/esm2022/lib/service/audit/audit.interface.mjs +2 -0
- package/esm2022/lib/service/audit/audit.service.mjs +135 -0
- package/esm2022/lib/service/auth/auth.interceptor.mjs +50 -0
- package/esm2022/lib/service/auth/auth.interface.mjs +7 -0
- package/esm2022/lib/service/auth/auth.service.mjs +130 -0
- package/esm2022/lib/service/auth/oidc.service.mjs +81 -0
- package/esm2022/lib/service/backend/api.enum.mjs +11 -0
- package/esm2022/lib/service/backend/backend.interface.mjs +2 -0
- package/esm2022/lib/service/backend/backend.service.mjs +206 -0
- package/esm2022/lib/service/bpm/bpm.interface.mjs +8 -0
- package/esm2022/lib/service/bpm/bpm.service.mjs +51 -0
- package/esm2022/lib/service/cache/app-cache.service.mjs +51 -0
- package/esm2022/lib/service/catalog/catalog.interface.mjs +2 -0
- package/esm2022/lib/service/catalog/catalog.service.mjs +13 -0
- package/esm2022/lib/service/clipboard/clipboard.interface.mjs +2 -0
- package/esm2022/lib/service/clipboard/clipboard.service.mjs +90 -0
- package/esm2022/lib/service/config/config.interface.mjs +6 -0
- package/esm2022/lib/service/config/config.service.mjs +115 -0
- package/esm2022/lib/service/config/core-config.mjs +20 -0
- package/esm2022/lib/service/config/core-config.tokens.mjs +9 -0
- package/esm2022/lib/service/connection/connection.service.mjs +36 -0
- package/esm2022/lib/service/connection/offline.interceptor.mjs +28 -0
- package/esm2022/lib/service/core-init/core-init.service.mjs +29 -0
- package/esm2022/lib/service/core-init/missing-translation-handler.mjs +10 -0
- package/esm2022/lib/service/core-init/translate-json-loader.mjs +117 -0
- package/esm2022/lib/service/device/device.interface.mjs +6 -0
- package/esm2022/lib/service/device/device.service.mjs +144 -0
- package/esm2022/lib/service/dms/dms.service.interface.mjs +2 -0
- package/esm2022/lib/service/dms/dms.service.mjs +440 -0
- package/esm2022/lib/service/event/event.interface.mjs +2 -0
- package/esm2022/lib/service/event/event.service.mjs +38 -0
- package/esm2022/lib/service/event/events.mjs +14 -0
- package/esm2022/lib/service/idm/idm.interface.mjs +2 -0
- package/esm2022/lib/service/idm/idm.service.mjs +34 -0
- package/esm2022/lib/service/logger/logger-console.service.mjs +73 -0
- package/esm2022/lib/service/logger/logger.interface.mjs +2 -0
- package/esm2022/lib/service/logger/logger.mjs +27 -0
- package/esm2022/lib/service/notification/notification.service.mjs +131 -0
- package/esm2022/lib/service/object-config/object-config.interface.mjs +2 -0
- package/esm2022/lib/service/object-config/object-config.service.mjs +229 -0
- package/esm2022/lib/service/pending-changes/pending-changes-component.interface.mjs +5 -0
- package/esm2022/lib/service/pending-changes/pending-changes-guard.service.mjs +25 -0
- package/esm2022/lib/service/pending-changes/pending-changes.service.mjs +123 -0
- package/esm2022/lib/service/prediction/prediction.interface.mjs +2 -0
- package/esm2022/lib/service/prediction/prediction.service.mjs +60 -0
- package/esm2022/lib/service/search/search.service.interface.mjs +39 -0
- package/esm2022/lib/service/search/search.service.mjs +178 -0
- package/esm2022/lib/service/session-storage/session-storage.service.mjs +50 -0
- package/esm2022/lib/service/system/object-form.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.enum.mjs +179 -0
- package/esm2022/lib/service/system/system.interface.mjs +2 -0
- package/esm2022/lib/service/system/system.service.mjs +597 -0
- package/esm2022/lib/service/upload/upload.interface.mjs +2 -0
- package/esm2022/lib/service/upload/upload.service.mjs +228 -0
- package/esm2022/lib/service/user/user.service.mjs +211 -0
- package/esm2022/lib/util/utils.helper.enum.mjs +15 -0
- package/esm2022/lib/util/utils.mjs +373 -0
- package/esm2022/yuuvis-client-core.mjs +5 -0
- package/fesm2022/yuuvis-client-core.mjs +4775 -0
- package/fesm2022/yuuvis-client-core.mjs.map +1 -0
- package/index.d.ts +61 -0
- package/lib/client-core.module.d.ts +20 -0
- package/lib/client-core.shared.module.d.ts +10 -0
- package/lib/common/pipes/filesize.pipe.d.ts +18 -0
- package/lib/common/pipes/index.d.ts +5 -0
- package/lib/common/pipes/keys.pipe.d.ts +10 -0
- package/lib/common/pipes/locale-date.pipe.d.ts +12 -0
- package/lib/common/pipes/locale-number.pipe.d.ts +47 -0
- package/lib/common/pipes/safe-html.pipe.d.ts +28 -0
- package/lib/common/services/native-notifications.d.ts +8 -0
- package/lib/common/services/native-notifications.interface.d.ts +5 -0
- package/lib/model/dms-object.interface.d.ts +16 -0
- package/lib/model/dms-object.model.d.ts +26 -0
- package/lib/model/object-flavor.interface.d.ts +30 -0
- package/lib/model/range-value.interface.d.ts +9 -0
- package/lib/model/yuv-error.model.d.ts +18 -0
- package/lib/model/yuv-user.model.d.ts +44 -0
- package/lib/service/audit/audit.interface.d.ts +47 -0
- package/lib/service/audit/audit.service.d.ts +35 -0
- package/lib/service/auth/auth.interceptor.d.ts +12 -0
- package/lib/service/auth/auth.interface.d.ts +34 -0
- package/lib/service/auth/auth.service.d.ts +50 -0
- package/lib/service/auth/oidc.service.d.ts +16 -0
- package/lib/service/backend/api.enum.d.ts +7 -0
- package/lib/service/backend/backend.interface.d.ts +29 -0
- package/lib/service/backend/backend.service.d.ts +118 -0
- package/lib/service/bpm/bpm.interface.d.ts +86 -0
- package/lib/service/bpm/bpm.service.d.ts +19 -0
- package/lib/service/cache/app-cache.service.d.ts +18 -0
- package/lib/service/catalog/catalog.interface.d.ts +12 -0
- package/lib/service/catalog/catalog.service.d.ts +5 -0
- package/lib/service/clipboard/clipboard.interface.d.ts +11 -0
- package/lib/service/clipboard/clipboard.service.d.ts +23 -0
- package/lib/service/config/config.interface.d.ts +34 -0
- package/lib/service/config/config.service.d.ts +45 -0
- package/lib/service/config/core-config.d.ts +14 -0
- package/lib/service/config/core-config.tokens.d.ts +7 -0
- package/lib/service/connection/connection.service.d.ts +25 -0
- package/lib/service/connection/offline.interceptor.d.ts +15 -0
- package/lib/service/core-init/core-init.service.d.ts +11 -0
- package/lib/service/core-init/missing-translation-handler.d.ts +8 -0
- package/lib/service/core-init/translate-json-loader.d.ts +20 -0
- package/lib/service/device/device.interface.d.ts +15 -0
- package/lib/service/device/device.service.d.ts +54 -0
- package/lib/service/dms/dms.service.d.ts +153 -0
- package/lib/service/dms/dms.service.interface.d.ts +59 -0
- package/lib/service/event/event.interface.d.ts +13 -0
- package/lib/service/event/event.service.d.ts +23 -0
- package/lib/service/event/events.d.ts +12 -0
- package/lib/service/idm/idm.interface.d.ts +5 -0
- package/lib/service/idm/idm.service.d.ts +9 -0
- package/lib/service/logger/logger-console.service.d.ts +20 -0
- package/lib/service/logger/logger.d.ts +17 -0
- package/lib/service/logger/logger.interface.d.ts +10 -0
- package/lib/service/notification/notification.service.d.ts +71 -0
- package/lib/service/object-config/object-config.interface.d.ts +62 -0
- package/lib/service/object-config/object-config.service.d.ts +38 -0
- package/lib/service/pending-changes/pending-changes-component.interface.d.ts +6 -0
- package/lib/service/pending-changes/pending-changes-guard.service.d.ts +14 -0
- package/lib/service/pending-changes/pending-changes.service.d.ts +57 -0
- package/lib/service/prediction/prediction.interface.d.ts +18 -0
- package/lib/service/prediction/prediction.service.d.ts +15 -0
- package/lib/service/search/search.service.d.ts +46 -0
- package/lib/service/search/search.service.interface.d.ts +119 -0
- package/lib/service/session-storage/session-storage.service.d.ts +15 -0
- package/lib/service/system/object-form.interface.d.ts +46 -0
- package/lib/service/system/system.enum.d.ts +141 -0
- package/lib/service/system/system.interface.d.ts +146 -0
- package/lib/service/system/system.service.d.ts +168 -0
- package/lib/service/upload/upload.interface.d.ts +55 -0
- package/lib/service/upload/upload.service.d.ts +34 -0
- package/lib/service/user/user.service.d.ts +69 -0
- package/lib/util/utils.d.ts +118 -0
- package/lib/util/utils.helper.enum.d.ts +13 -0
- package/package.json +33 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { inject, Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { map, switchMap, tap } from 'rxjs/operators';
|
|
4
|
+
import { YuvUser } from '../../model/yuv-user.model';
|
|
5
|
+
import { Utils } from '../../util/utils';
|
|
6
|
+
import { BackendService } from '../backend/backend.service';
|
|
7
|
+
import { AppCacheService } from '../cache/app-cache.service';
|
|
8
|
+
import { CoreConfig } from '../config/core-config';
|
|
9
|
+
import { CORE_CONFIG } from '../config/core-config.tokens';
|
|
10
|
+
import { EventService } from '../event/event.service';
|
|
11
|
+
import { YuvEventType } from '../event/events';
|
|
12
|
+
import { SystemService } from '../system/system.service';
|
|
13
|
+
import { UserService } from '../user/user.service';
|
|
14
|
+
import { ObjectConfigService } from '../object-config/object-config.service';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "../config/core-config";
|
|
17
|
+
/**
|
|
18
|
+
* Service handling authentication related issues.
|
|
19
|
+
*/
|
|
20
|
+
export class AuthService {
|
|
21
|
+
#eventService;
|
|
22
|
+
#userService;
|
|
23
|
+
#objectConfigService;
|
|
24
|
+
#appCache;
|
|
25
|
+
#systemService;
|
|
26
|
+
#backend;
|
|
27
|
+
#INITAL_REQUEST_STORAGE_KEY;
|
|
28
|
+
#authenticated;
|
|
29
|
+
#authSource;
|
|
30
|
+
#authData;
|
|
31
|
+
constructor(coreConfig) {
|
|
32
|
+
this.coreConfig = coreConfig;
|
|
33
|
+
this.#eventService = inject(EventService);
|
|
34
|
+
this.#userService = inject(UserService);
|
|
35
|
+
this.#objectConfigService = inject(ObjectConfigService);
|
|
36
|
+
this.#appCache = inject(AppCacheService);
|
|
37
|
+
this.#systemService = inject(SystemService);
|
|
38
|
+
this.#backend = inject(BackendService);
|
|
39
|
+
this.#INITAL_REQUEST_STORAGE_KEY = 'yuv.core.auth.initialrequest';
|
|
40
|
+
this.USER_FETCH_URI = '/idm/whoami';
|
|
41
|
+
this.#authenticated = false;
|
|
42
|
+
this.#authSource = new BehaviorSubject(false);
|
|
43
|
+
this.authenticated$ = this.#authSource.asObservable();
|
|
44
|
+
}
|
|
45
|
+
isLoggedIn() {
|
|
46
|
+
return this.#authenticated;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Called while app/core is initialized (APP_INITIALIZER)
|
|
50
|
+
* @ignore
|
|
51
|
+
*/
|
|
52
|
+
initUser() {
|
|
53
|
+
return this.fetchUser();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the current tenant or the previous one persisted locally
|
|
57
|
+
*/
|
|
58
|
+
getTenant() {
|
|
59
|
+
return this.#authData?.tenant;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Fetch information about the user currently logged in
|
|
63
|
+
*/
|
|
64
|
+
fetchUser() {
|
|
65
|
+
return this.#backend.get(this.USER_FETCH_URI).pipe(tap(() => {
|
|
66
|
+
this.#authenticated = true;
|
|
67
|
+
this.#authSource.next(this.#authenticated);
|
|
68
|
+
}), switchMap((userJson) => this.#initApp(userJson)));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Logs out the current user.
|
|
72
|
+
*/
|
|
73
|
+
logout() {
|
|
74
|
+
this.#authenticated = false;
|
|
75
|
+
this.#authSource.next(this.#authenticated);
|
|
76
|
+
this.#eventService.trigger(YuvEventType.LOGOUT);
|
|
77
|
+
}
|
|
78
|
+
// called on core init
|
|
79
|
+
setInitialRequestUri() {
|
|
80
|
+
const ignore = ['/', '/index.html'];
|
|
81
|
+
let uri = `${location.pathname}${location.search}`.replace(Utils.getBaseHref(), '');
|
|
82
|
+
uri = !uri.startsWith('/') ? `/${uri}` : uri;
|
|
83
|
+
if (!ignore.includes(uri)) {
|
|
84
|
+
this.#appCache
|
|
85
|
+
.setItem(this.#INITAL_REQUEST_STORAGE_KEY, {
|
|
86
|
+
uri: uri,
|
|
87
|
+
timestamp: Date.now()
|
|
88
|
+
})
|
|
89
|
+
.subscribe();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get the URL that entered the app. May be a deep link that could then be
|
|
94
|
+
* picked up again after user has been authenticated.
|
|
95
|
+
*/
|
|
96
|
+
getInitialRequestUri() {
|
|
97
|
+
return this.#appCache.getItem(this.#INITAL_REQUEST_STORAGE_KEY);
|
|
98
|
+
}
|
|
99
|
+
resetInitialRequestUri() {
|
|
100
|
+
return this.#appCache.removeItem(this.#INITAL_REQUEST_STORAGE_KEY);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Initialize/setup the application for a given user. This involves fetching
|
|
104
|
+
* settings and schema information.
|
|
105
|
+
* @param userJson Data retrieved from the backend
|
|
106
|
+
*/
|
|
107
|
+
#initApp(userJson) {
|
|
108
|
+
return this.#userService.fetchUserSettings().pipe(switchMap((userSettings) => {
|
|
109
|
+
const currentUser = new YuvUser(userJson, userSettings);
|
|
110
|
+
this.#userService.setCurrentUser(currentUser);
|
|
111
|
+
this.#authData = {
|
|
112
|
+
tenant: currentUser.tenant,
|
|
113
|
+
language: currentUser.getClientLocale()
|
|
114
|
+
};
|
|
115
|
+
return this.#systemService.getSystemDefinition(this.#authData).pipe(switchMap(() => this.#objectConfigService.init()), map(() => currentUser));
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, deps: [{ token: CORE_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
119
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
120
|
+
}
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, decorators: [{
|
|
122
|
+
type: Injectable,
|
|
123
|
+
args: [{
|
|
124
|
+
providedIn: 'root'
|
|
125
|
+
}]
|
|
126
|
+
}], ctorParameters: () => [{ type: i1.CoreConfig, decorators: [{
|
|
127
|
+
type: Inject,
|
|
128
|
+
args: [CORE_CONFIG]
|
|
129
|
+
}] }] });
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL2F1dGgvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUU3RTs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBQ3RCLGFBQWEsQ0FBd0I7SUFDckMsWUFBWSxDQUF1QjtJQUNuQyxvQkFBb0IsQ0FB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QUUsTUFBTTtpQkFDbkI7OzBCQW9CYyxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNlclNldHRpbmdzLCBZdXZVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWwveXV2LXVzZXIubW9kZWwnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcbmltcG9ydCB7IEJhY2tlbmRTZXJ2aWNlIH0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vY2FjaGUvYXBwLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJRyB9IGZyb20gJy4uL2NvbmZpZy9jb3JlLWNvbmZpZy50b2tlbnMnO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vZXZlbnQvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBZdXZFdmVudFR5cGUgfSBmcm9tICcuLi9ldmVudC9ldmVudHMnO1xuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gJy4uL3N5c3RlbS9zeXN0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFl1dkluaXRFcnJvciB9IGZyb20gJy4vYXV0aC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JqZWN0Q29uZmlnU2VydmljZSB9IGZyb20gJy4uL29iamVjdC1jb25maWcvb2JqZWN0LWNvbmZpZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBTZXJ2aWNlIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgaXNzdWVzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gICNldmVudFNlcnZpY2UgPSBpbmplY3QoRXZlbnRTZXJ2aWNlKTtcbiAgI3VzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKTtcbiAgI29iamVjdENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoT2JqZWN0Q29uZmlnU2VydmljZSk7XG4gICNhcHBDYWNoZSA9IGluamVjdChBcHBDYWNoZVNlcnZpY2UpO1xuICAjc3lzdGVtU2VydmljZSA9IGluamVjdChTeXN0ZW1TZXJ2aWNlKTtcbiAgI2JhY2tlbmQgPSBpbmplY3QoQmFja2VuZFNlcnZpY2UpO1xuXG4gICNJTklUQUxfUkVRVUVTVF9TVE9SQUdFX0tFWSA9ICd5dXYuY29yZS5hdXRoLmluaXRpYWxyZXF1ZXN0JztcbiAgcmVhZG9ubHkgVVNFUl9GRVRDSF9VUkkgPSAnL2lkbS93aG9hbWknO1xuXG4gICNhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICNhdXRoU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1dGhlbnRpY2F0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy4jYXV0aFNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAjYXV0aERhdGEhOiBBdXRoRGF0YTtcbiAgLy8gc2V0IGJ5IGNvcmUtaW5pdFxuICBpbml0RXJyb3I/OiBZdXZJbml0RXJyb3I7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT1JFX0NPTkZJRykgcHVibGljIGNvcmVDb25maWc6IENvcmVDb25maWcpIHt9XG5cbiAgaXNMb2dnZWRJbigpIHtcbiAgICByZXR1cm4gdGhpcy4jYXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hpbGUgYXBwL2NvcmUgaXMgaW5pdGlhbGl6ZWQgKEFQUF9JTklUSUFMSVpFUilcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaW5pdFVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hVc2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHRlbmFudCBvciB0aGUgcHJldmlvdXMgb25lIHBlcnNpc3RlZCBsb2NhbGx5XG4gICAqL1xuICBnZXRUZW5hbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jYXV0aERhdGE/LnRlbmFudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBjdXJyZW50bHkgbG9nZ2VkIGluXG4gICAqL1xuICBmZXRjaFVzZXIoKTogT2JzZXJ2YWJsZTxZdXZVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQuZ2V0KHRoaXMuVVNFUl9GRVRDSF9VUkkpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLiNhdXRoZW50aWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4jYXV0aFNvdXJjZS5uZXh0KHRoaXMuI2F1dGhlbnRpY2F0ZWQpO1xuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKHVzZXJKc29uOiBhbnkpID0+IHRoaXMuI2luaXRBcHAodXNlckpzb24pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBvdXQgdGhlIGN1cnJlbnQgdXNlci5cbiAgICovXG4gIGxvZ291dCgpIHtcbiAgICB0aGlzLiNhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgdGhpcy4jYXV0aFNvdXJjZS5uZXh0KHRoaXMuI2F1dGhlbnRpY2F0ZWQpO1xuICAgIHRoaXMuI2V2ZW50U2VydmljZS50cmlnZ2VyKFl1dkV2ZW50VHlwZS5MT0dPVVQpO1xuICB9XG5cbiAgLy8gY2FsbGVkIG9uIGNvcmUgaW5pdFxuICBzZXRJbml0aWFsUmVxdWVzdFVyaSgpIHtcbiAgICBjb25zdCBpZ25vcmUgPSBbJy8nLCAnL2luZGV4Lmh0bWwnXTtcbiAgICBsZXQgdXJpID0gYCR7bG9jYXRpb24ucGF0aG5hbWV9JHtsb2NhdGlvbi5zZWFyY2h9YC5yZXBsYWNlKFV0aWxzLmdldEJhc2VIcmVmKCksICcnKTtcbiAgICB1cmkgPSAhdXJpLnN0YXJ0c1dpdGgoJy8nKSA/IGAvJHt1cml9YCA6IHVyaTtcblxuICAgIGlmICghaWdub3JlLmluY2x1ZGVzKHVyaSkpIHtcbiAgICAgIHRoaXMuI2FwcENhY2hlXG4gICAgICAgIC5zZXRJdGVtKHRoaXMuI0lOSVRBTF9SRVFVRVNUX1NUT1JBR0VfS0VZLCB7XG4gICAgICAgICAgdXJpOiB1cmksXG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBVUkwgdGhhdCBlbnRlcmVkIHRoZSBhcHAuIE1heSBiZSBhIGRlZXAgbGluayB0aGF0IGNvdWxkIHRoZW4gYmVcbiAgICogcGlja2VkIHVwIGFnYWluIGFmdGVyIHVzZXIgaGFzIGJlZW4gYXV0aGVudGljYXRlZC5cbiAgICovXG4gIGdldEluaXRpYWxSZXF1ZXN0VXJpKCk6IE9ic2VydmFibGU8eyB1cmk6IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLiNhcHBDYWNoZS5nZXRJdGVtKHRoaXMuI0lOSVRBTF9SRVFVRVNUX1NUT1JBR0VfS0VZKTtcbiAgfVxuXG4gIHJlc2V0SW5pdGlhbFJlcXVlc3RVcmkoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jYXBwQ2FjaGUucmVtb3ZlSXRlbSh0aGlzLiNJTklUQUxfUkVRVUVTVF9TVE9SQUdFX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZS9zZXR1cCB0aGUgYXBwbGljYXRpb24gZm9yIGEgZ2l2ZW4gdXNlci4gVGhpcyBpbnZvbHZlcyBmZXRjaGluZ1xuICAgKiBzZXR0aW5ncyBhbmQgc2NoZW1hIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gdXNlckpzb24gRGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgYmFja2VuZFxuICAgKi9cbiAgI2luaXRBcHAodXNlckpzb246IGFueSk6IE9ic2VydmFibGU8WXV2VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLiN1c2VyU2VydmljZS5mZXRjaFVzZXJTZXR0aW5ncygpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHVzZXJTZXR0aW5nczogVXNlclNldHRpbmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gbmV3IFl1dlVzZXIodXNlckpzb24sIHVzZXJTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuI3VzZXJTZXJ2aWNlLnNldEN1cnJlbnRVc2VyKGN1cnJlbnRVc2VyKTtcbiAgICAgICAgdGhpcy4jYXV0aERhdGEgPSB7XG4gICAgICAgICAgdGVuYW50OiBjdXJyZW50VXNlci50ZW5hbnQsXG4gICAgICAgICAgbGFuZ3VhZ2U6IGN1cnJlbnRVc2VyLmdldENsaWVudExvY2FsZSgpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLiNzeXN0ZW1TZXJ2aWNlLmdldFN5c3RlbURlZmluaXRpb24odGhpcy4jYXV0aERhdGEpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuI29iamVjdENvbmZpZ1NlcnZpY2UuaW5pdCgpKSxcbiAgICAgICAgICBtYXAoKCkgPT4gY3VycmVudFVzZXIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoRGF0YSB7XG4gIHRlbmFudDogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { OAuthModuleConfig, OAuthService } from 'angular-oauth2-oidc';
|
|
3
|
+
import { from, Observable, of } from 'rxjs';
|
|
4
|
+
import { map } from 'rxjs/operators';
|
|
5
|
+
import { CoreConfig } from '../config/core-config';
|
|
6
|
+
import { CORE_CONFIG } from '../config/core-config.tokens';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "angular-oauth2-oidc";
|
|
9
|
+
import * as i2 from "../config/core-config";
|
|
10
|
+
export class OidcService {
|
|
11
|
+
constructor(oAuthConfig, config, oauthService) {
|
|
12
|
+
this.oAuthConfig = oAuthConfig;
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.oauthService = oauthService;
|
|
15
|
+
}
|
|
16
|
+
initOpenIdConnect(oidc) {
|
|
17
|
+
oidc = this.config.oidc = oidc || this.config.oidc;
|
|
18
|
+
if (oidc?.host) {
|
|
19
|
+
oidc.host = oidc.host.endsWith('/') ? oidc.host.substring(0, -1) : oidc.host;
|
|
20
|
+
}
|
|
21
|
+
else
|
|
22
|
+
return of(undefined);
|
|
23
|
+
this.oAuthConfig.resourceServer = {
|
|
24
|
+
sendAccessToken: true,
|
|
25
|
+
allowedUrls: [oidc.host]
|
|
26
|
+
};
|
|
27
|
+
const authConfig = {
|
|
28
|
+
strictDiscoveryDocumentValidation: false,
|
|
29
|
+
issuer: oidc.issuer,
|
|
30
|
+
redirectUri: oidc.redirectUri || window.location.origin + '/',
|
|
31
|
+
postLogoutRedirectUri: oidc.postLogoutRedirectUri || window.location.origin + '/',
|
|
32
|
+
clientId: oidc.clientId,
|
|
33
|
+
responseType: 'code',
|
|
34
|
+
scope: 'openid profile email offline_access',
|
|
35
|
+
showDebugInformation: false,
|
|
36
|
+
requireHttps: false,
|
|
37
|
+
disableAtHashCheck: true,
|
|
38
|
+
sessionCheckIntervall: 60000,
|
|
39
|
+
sessionChecksEnabled: true,
|
|
40
|
+
clearHashAfterLogin: false,
|
|
41
|
+
silentRefreshTimeout: 5000 // For faster testing
|
|
42
|
+
};
|
|
43
|
+
this.oauthService.configure(authConfig);
|
|
44
|
+
this.oauthService.setupAutomaticSilentRefresh();
|
|
45
|
+
return from(this.oauthService.loadDiscoveryDocumentAndLogin()).pipe(map(() => this.config.oidc));
|
|
46
|
+
}
|
|
47
|
+
logout() {
|
|
48
|
+
this.oauthService.logOut();
|
|
49
|
+
}
|
|
50
|
+
setupCookie(viewer, path, headers) {
|
|
51
|
+
return new Observable((subscriber) => {
|
|
52
|
+
let iframe = document.querySelector('body > iframe#__oidc');
|
|
53
|
+
if (!iframe) {
|
|
54
|
+
iframe = document.createElement('iframe');
|
|
55
|
+
iframe.style.display = 'none';
|
|
56
|
+
iframe.id = '__oidc';
|
|
57
|
+
iframe.onload = () => {
|
|
58
|
+
iframe.subscriber.next({});
|
|
59
|
+
iframe.subscriber.complete();
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
iframe.subscriber = subscriber;
|
|
63
|
+
iframe.setAttribute('src', `${viewer}/download?setCookie=/&path=${encodeURIComponent(path)}&headers=${encodeURIComponent(JSON.stringify(headers))}`);
|
|
64
|
+
document.body.appendChild(iframe);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OidcService, deps: [{ token: i1.OAuthModuleConfig, optional: true }, { token: CORE_CONFIG }, { token: i1.OAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
68
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OidcService, providedIn: 'root' }); }
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OidcService, decorators: [{
|
|
71
|
+
type: Injectable,
|
|
72
|
+
args: [{
|
|
73
|
+
providedIn: 'root'
|
|
74
|
+
}]
|
|
75
|
+
}], ctorParameters: () => [{ type: i1.OAuthModuleConfig, decorators: [{
|
|
76
|
+
type: Optional
|
|
77
|
+
}] }, { type: i2.CoreConfig, decorators: [{
|
|
78
|
+
type: Inject,
|
|
79
|
+
args: [CORE_CONFIG]
|
|
80
|
+
}] }, { type: i1.OAuthService }] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL2F1dGgvb2lkYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEYsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBSzNELE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ3NCLFdBQThCLEVBQ3RCLE1BQWtCLEVBQ3RDLFlBQTBCO1FBRmQsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDdEMsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDakMsQ0FBQztJQUVKLGlCQUFpQixDQUFDLElBQThCO1FBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvRSxDQUFDOztZQUFNLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHO1lBQ2hDLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDekIsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFlO1lBQzdCLGlDQUFpQyxFQUFFLEtBQUs7WUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUc7WUFDN0QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUc7WUFDakYsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLEtBQUssRUFBRSxxQ0FBcUM7WUFDNUMsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixZQUFZLEVBQUUsS0FBSztZQUNuQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLHFCQUFxQixFQUFFLEtBQUs7WUFDNUIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7U0FDakQsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLE9BQVk7UUFDcEQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25DLElBQUksTUFBTSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQXNCLENBQUM7WUFDdEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNCLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9CLENBQUMsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUUvQixNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE1BQU0sOEJBQThCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckosUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTlEVSxXQUFXLG1FQUdaLFdBQVc7bUhBSFYsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aE1vZHVsZUNvbmZpZywgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3BlbklkQ29uZmlnIH0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb3JlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvcmUtY29uZmlnJztcbmltcG9ydCB7IENPUkVfQ09ORklHIH0gZnJvbSAnLi4vY29uZmlnL2NvcmUtY29uZmlnLnRva2Vucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE9pZGNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBvQXV0aENvbmZpZzogT0F1dGhNb2R1bGVDb25maWcsXG4gICAgQEluamVjdChDT1JFX0NPTkZJRykgcHVibGljIGNvbmZpZzogQ29yZUNvbmZpZyxcbiAgICBwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlXG4gICkge31cblxuICBpbml0T3BlbklkQ29ubmVjdChvaWRjOiBPcGVuSWRDb25maWcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPE9wZW5JZENvbmZpZyB8IHVuZGVmaW5lZD4ge1xuICAgIG9pZGMgPSB0aGlzLmNvbmZpZy5vaWRjID0gb2lkYyB8fCB0aGlzLmNvbmZpZy5vaWRjO1xuICAgIGlmIChvaWRjPy5ob3N0KSB7XG4gICAgICBvaWRjLmhvc3QgPSBvaWRjLmhvc3QuZW5kc1dpdGgoJy8nKSA/IG9pZGMuaG9zdC5zdWJzdHJpbmcoMCwgLTEpIDogb2lkYy5ob3N0O1xuICAgIH0gZWxzZSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgIHRoaXMub0F1dGhDb25maWcucmVzb3VyY2VTZXJ2ZXIgPSB7XG4gICAgICBzZW5kQWNjZXNzVG9rZW46IHRydWUsXG4gICAgICBhbGxvd2VkVXJsczogW29pZGMuaG9zdF1cbiAgICB9O1xuXG4gICAgY29uc3QgYXV0aENvbmZpZzogQXV0aENvbmZpZyA9IHtcbiAgICAgIHN0cmljdERpc2NvdmVyeURvY3VtZW50VmFsaWRhdGlvbjogZmFsc2UsXG4gICAgICBpc3N1ZXI6IG9pZGMuaXNzdWVyLFxuICAgICAgcmVkaXJlY3RVcmk6IG9pZGMucmVkaXJlY3RVcmkgfHwgd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvJyxcbiAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogb2lkYy5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgfHwgd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvJyxcbiAgICAgIGNsaWVudElkOiBvaWRjLmNsaWVudElkLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzY29wZTogJ29wZW5pZCBwcm9maWxlIGVtYWlsIG9mZmxpbmVfYWNjZXNzJyxcbiAgICAgIHNob3dEZWJ1Z0luZm9ybWF0aW9uOiBmYWxzZSxcbiAgICAgIHJlcXVpcmVIdHRwczogZmFsc2UsXG4gICAgICBkaXNhYmxlQXRIYXNoQ2hlY2s6IHRydWUsXG4gICAgICBzZXNzaW9uQ2hlY2tJbnRlcnZhbGw6IDYwMDAwLFxuICAgICAgc2Vzc2lvbkNoZWNrc0VuYWJsZWQ6IHRydWUsXG4gICAgICBjbGVhckhhc2hBZnRlckxvZ2luOiBmYWxzZSxcbiAgICAgIHNpbGVudFJlZnJlc2hUaW1lb3V0OiA1MDAwIC8vIEZvciBmYXN0ZXIgdGVzdGluZ1xuICAgIH07XG5cbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoYXV0aENvbmZpZyk7XG4gICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XG4gICAgcmV0dXJuIGZyb20odGhpcy5vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kTG9naW4oKSkucGlwZShtYXAoKCkgPT4gdGhpcy5jb25maWcub2lkYykpO1xuICB9XG5cbiAgbG9nb3V0KCkge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dCgpO1xuICB9XG5cbiAgc2V0dXBDb29raWUodmlld2VyOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgaGVhZGVyczogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBsZXQgaWZyYW1lOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5ID4gaWZyYW1lI19fb2lkYycpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xuICAgICAgaWYgKCFpZnJhbWUpIHtcbiAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBpZnJhbWUuaWQgPSAnX19vaWRjJztcbiAgICAgICAgaWZyYW1lLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICBpZnJhbWUuc3Vic2NyaWJlci5uZXh0KHt9KTtcbiAgICAgICAgICBpZnJhbWUuc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZnJhbWUuc3Vic2NyaWJlciA9IHN1YnNjcmliZXI7XG5cbiAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGAke3ZpZXdlcn0vZG93bmxvYWQ/c2V0Q29va2llPS8mcGF0aD0ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0maGVhZGVycz0ke2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShoZWFkZXJzKSl9YCk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// enumeration of API endpoints provided by the backend
|
|
2
|
+
export var ApiBase;
|
|
3
|
+
(function (ApiBase) {
|
|
4
|
+
ApiBase["core"] = "api";
|
|
5
|
+
ApiBase["apiWeb"] = "api-web/api";
|
|
6
|
+
ApiBase["predict"] = "predict-api/api";
|
|
7
|
+
// TODO: all custom services are deployed using this base
|
|
8
|
+
ApiBase["custom"] = "custom";
|
|
9
|
+
ApiBase["none"] = "";
|
|
10
|
+
})(ApiBase || (ApiBase = {}));
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvYmFja2VuZC9hcGkuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFOLElBQVksT0FPWDtBQVBELFdBQVksT0FBTztJQUNqQix1QkFBWSxDQUFBO0lBQ1osaUNBQXNCLENBQUE7SUFDdEIsc0NBQTJCLENBQUE7SUFDM0IseURBQXlEO0lBQ3pELDRCQUFpQixDQUFBO0lBQ2pCLG9CQUFTLENBQUE7QUFDWCxDQUFDLEVBUFcsT0FBTyxLQUFQLE9BQU8sUUFPbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlbnVtZXJhdGlvbiBvZiBBUEkgZW5kcG9pbnRzIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kXG5leHBvcnQgZW51bSBBcGlCYXNlIHtcbiAgY29yZSA9ICdhcGknLFxuICBhcGlXZWIgPSAnYXBpLXdlYi9hcGknLFxuICBwcmVkaWN0ID0gJ3ByZWRpY3QtYXBpL2FwaScsXG4gIC8vIFRPRE86IGFsbCBjdXN0b20gc2VydmljZXMgYXJlIGRlcGxveWVkIHVzaW5nIHRoaXMgYmFzZVxuICBjdXN0b20gPSAnY3VzdG9tJyxcbiAgbm9uZSA9ICcnXG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvYmFja2VuZC9iYWNrZW5kLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZyB7XG4gIGhvc3Q6IHN0cmluZztcbiAgdGVuYW50OiBzdHJpbmc7XG4gIGlzc3Vlcjogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICAvLyBVUkwgb2YgdGhlIFNQQSB0byByZWRpcmVjdCB0aGUgdXNlciB0byBhZnRlciBsb2dpblxuICByZWRpcmVjdFVyaT86IHN0cmluZztcbiAgcG9zdExvZ291dFJlZGlyZWN0VXJpPzogc3RyaW5nO1xufVxuLyoqXG4gKiBIdHRwT3B0aW9ucyBmb3IgaHR0cCByZXF1ZXN0XG4gKiBAcGFyYW0gb2JzZXJ2ZTogJ2JvZHknIHwgJ2V2ZW50cycgfCAncmVzcG9uc2UnXG4gKiBAcGFyYW0gcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cE9wdGlvbnMge1xuICBoZWFkZXJzPzpcbiAgICB8IEh0dHBIZWFkZXJzXG4gICAgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgfTtcbiAgb2JzZXJ2ZT86IGFueTtcbiAgcGFyYW1zPzpcbiAgICB8IEh0dHBQYXJhbXNcbiAgICB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH07XG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgcmVzcG9uc2VUeXBlPzogYW55O1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBEZWxldGVPcHRpb25zIGV4dGVuZHMgSHR0cE9wdGlvbnMge1xuICBib2R5PzogYW55O1xufVxuIl19
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { forkJoin, of } from 'rxjs';
|
|
4
|
+
import { catchError, finalize, shareReplay, tap } from 'rxjs/operators';
|
|
5
|
+
import { ConfigService } from '../config/config.service';
|
|
6
|
+
import { Logger } from '../logger/logger';
|
|
7
|
+
import { ApiBase } from './api.enum';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* Service for providing an yuuvis Backend
|
|
11
|
+
*/
|
|
12
|
+
export class BackendService {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.#http = inject(HttpClient);
|
|
15
|
+
this.#logger = inject(Logger);
|
|
16
|
+
this.configService = inject(ConfigService);
|
|
17
|
+
this.#cache = new Map();
|
|
18
|
+
this.#temp = new Map();
|
|
19
|
+
this.#headers = new HttpHeaders({
|
|
20
|
+
'Content-Type': 'application/json'
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
#http;
|
|
24
|
+
#logger;
|
|
25
|
+
#cache;
|
|
26
|
+
#temp;
|
|
27
|
+
#headers;
|
|
28
|
+
authUsesOpenIdConnect() {
|
|
29
|
+
return this.configService.authUsesOpenIdConnect();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* OpenIdConnect authorization headers
|
|
33
|
+
*/
|
|
34
|
+
getAuthHeaders() {
|
|
35
|
+
return this.configService.getAuthHeaders();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Add a new header.
|
|
39
|
+
* @param key The headers name
|
|
40
|
+
* @param value The value to be added to the headers. Setting this to null
|
|
41
|
+
* will remove the header
|
|
42
|
+
*/
|
|
43
|
+
setHeader(key, value) {
|
|
44
|
+
if (value && value.length) {
|
|
45
|
+
this.#headers = this.#headers.set(key, value);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.#headers = this.#headers.delete(key);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Wrapped HTTP GET method
|
|
53
|
+
* @param uri The REST URI to be queried
|
|
54
|
+
* @param base The Base URI (backend service) to be used
|
|
55
|
+
* @param requestOptions Additional request options
|
|
56
|
+
* @returns The data retrieved from the given endpoint
|
|
57
|
+
*/
|
|
58
|
+
get(uri, base, requestOptions) {
|
|
59
|
+
return this.#http.get(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Wrapped HTTP POST method
|
|
63
|
+
* @param uri The target REST URI
|
|
64
|
+
* @param data Data to be 'posted'
|
|
65
|
+
* @param base The Base URI (backend service) to be used
|
|
66
|
+
* @param requestOptions Additional request options
|
|
67
|
+
* @returns The return value of the target POST endpoint
|
|
68
|
+
*/
|
|
69
|
+
post(uri, data, base, requestOptions) {
|
|
70
|
+
const baseUri = this.getApiBase(base);
|
|
71
|
+
const payload = data && typeof data === 'object' ? JSON.stringify(data) : data || '';
|
|
72
|
+
return this.#http.post(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Performs a multipart form data POST request.
|
|
76
|
+
* @param uri The target REST URI
|
|
77
|
+
* @param formData FormData to be 'posted'
|
|
78
|
+
* @param base The Base URI (backend service) to be used
|
|
79
|
+
* @param requestOptions Additional request options
|
|
80
|
+
* @returns The return value of the target POST endpoint
|
|
81
|
+
*/
|
|
82
|
+
postMultiPart(uri, formData, base, requestOptions) {
|
|
83
|
+
return this.#http.post(`${this.getApiBase(base)}${uri}`, formData, this.getHttpOptions(requestOptions));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Wrapped HTTP PATCH method
|
|
87
|
+
* @param uri The target REST URI
|
|
88
|
+
* @param data Data to be 'patched'
|
|
89
|
+
* @param base The Base URI (backend service) to be used
|
|
90
|
+
* @param requestOptions Additional request options
|
|
91
|
+
* @returns The return value of the target PATCH endpoint
|
|
92
|
+
*/
|
|
93
|
+
patch(uri, data, base, requestOptions) {
|
|
94
|
+
const baseUri = this.getApiBase(base);
|
|
95
|
+
const payload = data ? JSON.stringify(data) : '';
|
|
96
|
+
return this.#http.patch(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Wrapped HTTP PUT method
|
|
100
|
+
* @param uri The target REST URI
|
|
101
|
+
* @param data Data to be 'posted'
|
|
102
|
+
* @param base The Base URI (backend service) to be used
|
|
103
|
+
* @param requestOptions Additional request options
|
|
104
|
+
* @returns The return value of the target PUT endpoint
|
|
105
|
+
*/
|
|
106
|
+
put(uri, data, base, requestOptions) {
|
|
107
|
+
return this.#http.put(this.getApiBase(base) + uri, data, this.getHttpOptions(requestOptions));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Wrapped HTTP DELETE method
|
|
111
|
+
* @param uri The target REST URI
|
|
112
|
+
* @param base The Base URI (backend service) to be used
|
|
113
|
+
* @param requestOptions Additional request options
|
|
114
|
+
* @returns The return value of the target DELETE endpoint
|
|
115
|
+
*/
|
|
116
|
+
delete(uri, base, requestOptions) {
|
|
117
|
+
return this.#http.delete(this.getApiBase(base) + uri, this.getHttpOptions(requestOptions));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @ignore
|
|
121
|
+
* Cache for small requests like icons and configs
|
|
122
|
+
*
|
|
123
|
+
* @param string uri
|
|
124
|
+
* @returns Observable<any>
|
|
125
|
+
*/
|
|
126
|
+
getViaCache(uri) {
|
|
127
|
+
if (this.#cache.has(uri)) {
|
|
128
|
+
return of(this.#cache.get(uri));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const requestOptions = {
|
|
132
|
+
responseType: 'text',
|
|
133
|
+
headers: this.getAuthHeaders()
|
|
134
|
+
};
|
|
135
|
+
return this.getViaTempCache(uri, () => this.#http.get(uri, requestOptions).pipe(tap((text) => this.#cache.set(uri, text))));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* @ignore
|
|
140
|
+
* Temporary Cache for multiple identical requests
|
|
141
|
+
*
|
|
142
|
+
* @param string id
|
|
143
|
+
* @param Function request
|
|
144
|
+
* @returns Observable<any>
|
|
145
|
+
*/
|
|
146
|
+
getViaTempCache(id, request) {
|
|
147
|
+
if (this.#temp.has(id)) {
|
|
148
|
+
return this.#temp.get(id);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const resp = (request ? request() : this.get(id)).pipe(finalize(() => this.#temp.delete(id)), shareReplay(1));
|
|
152
|
+
this.#temp.set(id, resp);
|
|
153
|
+
return resp;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
download(uri, filename) {
|
|
157
|
+
if (document && document.body) {
|
|
158
|
+
const a = document.createElement('a');
|
|
159
|
+
a.setAttribute('href', uri);
|
|
160
|
+
a.style.display = 'none';
|
|
161
|
+
a.setAttribute('download', filename || 'download');
|
|
162
|
+
document.body.appendChild(a);
|
|
163
|
+
a.click();
|
|
164
|
+
document.body.removeChild(a);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
this.#logger.error('Environment not supported. Downloading contents relies on a DOM being available.');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Gets the base URI for an API endpoint
|
|
172
|
+
* @param api The API to get the base URI for. Leaving this blank will return
|
|
173
|
+
* base URI for the web API
|
|
174
|
+
* @param origin The flag to include location origin
|
|
175
|
+
* @returns Base URI for the given API.
|
|
176
|
+
*/
|
|
177
|
+
getApiBase(api = ApiBase.apiWeb, origin = false) {
|
|
178
|
+
return this.configService.getApiBase(api, origin);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* @ignore
|
|
182
|
+
*/
|
|
183
|
+
getHttpOptions(requestOptions) {
|
|
184
|
+
// Object.entries(this.getAuthHeaders()).forEach(([h, v]) => this.setHeader(h, v as string));
|
|
185
|
+
this.getAuthHeaders()
|
|
186
|
+
.keys()
|
|
187
|
+
.forEach((k) => this.setHeader(k, this.getAuthHeaders().get(k)));
|
|
188
|
+
return Object.assign({ headers: this.#headers }, requestOptions);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Batch service
|
|
192
|
+
*/
|
|
193
|
+
batch(requests) {
|
|
194
|
+
const httpRequests = requests.map((r) => this[(r.method || 'get').toLowerCase()]
|
|
195
|
+
.apply(this, [r.uri, r.body, r.base, r.requestOptions].filter((a) => a))
|
|
196
|
+
.pipe(catchError((err) => of({ _error: err }))));
|
|
197
|
+
return forkJoin(httpRequests);
|
|
198
|
+
}
|
|
199
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackendService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
200
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackendService, providedIn: 'root' }); }
|
|
201
|
+
}
|
|
202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BackendService, decorators: [{
|
|
203
|
+
type: Injectable,
|
|
204
|
+
args: [{ providedIn: 'root' }]
|
|
205
|
+
}] });
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFHckM7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUQzQjtRQUVFLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUNoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDM0MsYUFBUSxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ3pCLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQyxDQUFDO0tBK0xKO0lBdk1DLEtBQUssQ0FBc0I7SUFDM0IsT0FBTyxDQUFrQjtJQUd6QixNQUFNLENBQTBC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QUFDLFlBQVksQ0FBc0IsQ0FBQztJQUNyRCxDQUFDOytHQXZNVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyL2xvZ2dlcic7XG5pbXBvcnQgeyBBcGlCYXNlIH0gZnJvbSAnLi9hcGkuZW51bSc7XG5pbXBvcnQgeyBIdHRwRGVsZXRlT3B0aW9ucywgSHR0cE9wdGlvbnMgfSBmcm9tICcuL2JhY2tlbmQuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBwcm92aWRpbmcgYW4geXV1dmlzIEJhY2tlbmRcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBCYWNrZW5kU2VydmljZSB7XG4gICNodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAjbG9nZ2VyID0gaW5qZWN0KExvZ2dlcik7XG4gIGNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlnU2VydmljZSk7XG5cbiAgI2NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgI3RlbXAgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxhbnk+PigpO1xuICAjaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICB9KTtcblxuICBhdXRoVXNlc09wZW5JZENvbm5lY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5hdXRoVXNlc09wZW5JZENvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuSWRDb25uZWN0IGF1dGhvcml6YXRpb24gaGVhZGVyc1xuICAgKi9cbiAgZ2V0QXV0aEhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5nZXRBdXRoSGVhZGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBoZWFkZXIuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGhlYWRlcnMgbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGFkZGVkIHRvIHRoZSBoZWFkZXJzLiBTZXR0aW5nIHRoaXMgdG8gbnVsbFxuICAgKiB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyXG4gICAqL1xuICBzZXRIZWFkZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNoZWFkZXJzID0gdGhpcy4jaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2hlYWRlcnMgPSB0aGlzLiNoZWFkZXJzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgR0VUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSBSRVNUIFVSSSB0byBiZSBxdWVyaWVkXG4gICAqIEBwYXJhbSBiYXNlIFRoZSBCYXNlIFVSSSAoYmFja2VuZCBzZXJ2aWNlKSB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgZ2l2ZW4gZW5kcG9pbnRcbiAgICovXG4gIGdldCh1cmk6IHN0cmluZywgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI2h0dHAuZ2V0KHRoaXMuZ2V0QXBpQmFzZShiYXNlKSArIHVyaSwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBQT1NUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBPU1QgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwb3N0KHVyaTogc3RyaW5nLCBkYXRhPzogYW55LCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBiYXNlVXJpID0gdGhpcy5nZXRBcGlCYXNlKGJhc2UpO1xuICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogZGF0YSB8fCAnJztcbiAgICByZXR1cm4gdGhpcy4jaHR0cC5wb3N0KGAke2Jhc2VVcml9JHt1cml9YCwgcGF5bG9hZCwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgbXVsdGlwYXJ0IGZvcm0gZGF0YSBQT1NUIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB1cmkgVGhlIHRhcmdldCBSRVNUIFVSSVxuICAgKiBAcGFyYW0gZm9ybURhdGEgRm9ybURhdGEgdG8gYmUgJ3Bvc3RlZCdcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBQT1NUIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcG9zdE11bHRpUGFydCh1cmk6IHN0cmluZywgZm9ybURhdGE6IEZvcm1EYXRhLCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jaHR0cC5wb3N0KGAke3RoaXMuZ2V0QXBpQmFzZShiYXNlKX0ke3VyaX1gLCBmb3JtRGF0YSwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZWQgSFRUUCBQQVRDSCBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgJ3BhdGNoZWQnXG4gICAqIEBwYXJhbSBiYXNlIFRoZSBCYXNlIFVSSSAoYmFja2VuZCBzZXJ2aWNlKSB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB0YXJnZXQgUEFUQ0ggZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwYXRjaCh1cmk6IHN0cmluZywgZGF0YT86IGFueSwgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYmFzZVVyaSA9IHRoaXMuZ2V0QXBpQmFzZShiYXNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogJyc7XG4gICAgcmV0dXJuIHRoaXMuI2h0dHAucGF0Y2goYCR7YmFzZVVyaX0ke3VyaX1gLCBwYXlsb2FkLCB0aGlzLmdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlZCBIVFRQIFBVVCBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgJ3Bvc3RlZCdcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBQVVQgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwdXQodXJpOiBzdHJpbmcsIGRhdGE/OiBhbnksIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLiNodHRwLnB1dCh0aGlzLmdldEFwaUJhc2UoYmFzZSkgKyB1cmksIGRhdGEsIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgREVMRVRFIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBERUxFVEUgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBkZWxldGUodXJpOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cERlbGV0ZU9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLiNodHRwLmRlbGV0ZSh0aGlzLmdldEFwaUJhc2UoYmFzZSkgKyB1cmksIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIENhY2hlIGZvciBzbWFsbCByZXF1ZXN0cyBsaWtlIGljb25zIGFuZCBjb25maWdzXG4gICAqXG4gICAqIEBwYXJhbSBzdHJpbmcgdXJpXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgcHVibGljIGdldFZpYUNhY2hlKHVyaTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy4jY2FjaGUuaGFzKHVyaSkpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLiNjYWNoZS5nZXQodXJpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEF1dGhIZWFkZXJzKClcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5nZXRWaWFUZW1wQ2FjaGUodXJpLCAoKSA9PiB0aGlzLiNodHRwLmdldCh1cmksIHJlcXVlc3RPcHRpb25zKS5waXBlKHRhcCgodGV4dCkgPT4gdGhpcy4jY2FjaGUuc2V0KHVyaSwgdGV4dCkpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogVGVtcG9yYXJ5IENhY2hlIGZvciBtdWx0aXBsZSBpZGVudGljYWwgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBpZFxuICAgKiBAcGFyYW0gRnVuY3Rpb24gcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHB1YmxpYyBnZXRWaWFUZW1wQ2FjaGUoaWQ6IHN0cmluZywgcmVxdWVzdD86ICgpID0+IE9ic2VydmFibGU8b2JqZWN0Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMuI3RlbXAuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuI3RlbXAuZ2V0KGlkKSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3AgPSAocmVxdWVzdCA/IHJlcXVlc3QoKSA6IHRoaXMuZ2V0KGlkKSkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jdGVtcC5kZWxldGUoaWQpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgICB0aGlzLiN0ZW1wLnNldChpZCwgcmVzcCk7XG4gICAgICByZXR1cm4gcmVzcDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQodXJpOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVyaSk7XG4gICAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBhLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSB8fCAnZG93bmxvYWQnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICBhLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNsb2dnZXIuZXJyb3IoJ0Vudmlyb25tZW50IG5vdCBzdXBwb3J0ZWQuIERvd25sb2FkaW5nIGNvbnRlbnRzIHJlbGllcyBvbiBhIERPTSBiZWluZyBhdmFpbGFibGUuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciBhbiBBUEkgZW5kcG9pbnRcbiAgICogQHBhcmFtIGFwaSBUaGUgQVBJIHRvIGdldCB0aGUgYmFzZSBVUkkgZm9yLiBMZWF2aW5nIHRoaXMgYmxhbmsgd2lsbCByZXR1cm5cbiAgICogYmFzZSBVUkkgZm9yIHRoZSB3ZWIgQVBJXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIGZsYWcgdG8gaW5jbHVkZSBsb2NhdGlvbiBvcmlnaW5cbiAgICogQHJldHVybnMgQmFzZSBVUkkgZm9yIHRoZSBnaXZlbiBBUEkuXG4gICAqL1xuICBnZXRBcGlCYXNlKGFwaTogc3RyaW5nID0gQXBpQmFzZS5hcGlXZWIsIG9yaWdpbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldEFwaUJhc2UoYXBpLCBvcmlnaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBIdHRwT3B0aW9ucyB7XG4gICAgLy8gT2JqZWN0LmVudHJpZXModGhpcy5nZXRBdXRoSGVhZGVycygpKS5mb3JFYWNoKChbaCwgdl0pID0+IHRoaXMuc2V0SGVhZGVyKGgsIHYgYXMgc3RyaW5nKSk7XG4gICAgdGhpcy5nZXRBdXRoSGVhZGVycygpXG4gICAgICAua2V5cygpXG4gICAgICAuZm9yRWFjaCgoaykgPT4gdGhpcy5zZXRIZWFkZXIoaywgdGhpcy5nZXRBdXRoSGVhZGVycygpLmdldChrKSEpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IGhlYWRlcnM6IHRoaXMuI2hlYWRlcnMgfSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhdGNoIHNlcnZpY2VcbiAgICovXG4gIGJhdGNoKHJlcXVlc3RzOiB7IG1ldGhvZD86IHN0cmluZzsgdXJpOiBzdHJpbmc7IGJvZHk/OiBhbnk7IGJhc2U/OiBzdHJpbmc7IHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMgfVtdKSB7XG4gICAgY29uc3QgaHR0cFJlcXVlc3RzID0gcmVxdWVzdHMubWFwKChyKSA9PlxuICAgICAgKHRoaXMgYXMgYW55KVsoci5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCldXG4gICAgICAgIC5hcHBseShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFtyLnVyaSwgci5ib2R5LCByLmJhc2UsIHIucmVxdWVzdE9wdGlvbnNdLmZpbHRlcigoYSkgPT4gYSlcbiAgICAgICAgKVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnIpID0+IG9mKHsgX2Vycm9yOiBlcnIgfSkpKVxuICAgICk7XG4gICAgcmV0dXJuIGZvcmtKb2luKGh0dHBSZXF1ZXN0cykgYXMgT2JzZXJ2YWJsZTxhbnlbXT47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const ProcessAction = {
|
|
2
|
+
complete: 'complete',
|
|
3
|
+
claim: 'claim',
|
|
4
|
+
delegate: 'delegate',
|
|
5
|
+
resolve: 'resolve',
|
|
6
|
+
save: 'save'
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1jb3JlL3NyYy9saWIvc2VydmljZS9icG0vYnBtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUc7SUFDM0IsUUFBUSxFQUFFLFVBQVU7SUFDcEIsS0FBSyxFQUFFLE9BQU87SUFDZCxRQUFRLEVBQUUsVUFBVTtJQUNwQixPQUFPLEVBQUUsU0FBUztJQUNsQixJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBjb25zdCBQcm9jZXNzQWN0aW9uID0ge1xuICBjb21wbGV0ZTogJ2NvbXBsZXRlJyxcbiAgY2xhaW06ICdjbGFpbScsXG4gIGRlbGVnYXRlOiAnZGVsZWdhdGUnLFxuICByZXNvbHZlOiAncmVzb2x2ZScsXG4gIHNhdmU6ICdzYXZlJ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzIHtcbiAgaWQ6IHN0cmluZztcbiAgLy8gb2JqZWN0cyAoSURzKSBhdHRhY2hlZCB0byB0aGUgcHJvY2Vzc1xuICBhdHRhY2htZW50czogc3RyaW5nW107XG4gIGJ1c2luZXNzS2V5OiBzdHJpbmc7IC8vXG4gIGRlbGV0ZVJlYXNvbjogc3RyaW5nO1xuICBkdXJhdGlvbkluTWlsbGlzOiBudW1iZXI7IC8vXG4gIGVuZEFjdGl2aXR5SWQ6IHN0cmluZztcbiAgZW5kVGltZTogRGF0ZTtcbiAgaW5pdGlhdG9yOiBQcm9jZXNzVXNlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9jZXNzRGVmaW5pdGlvbjogeyBkZXNjcmlwdGlvbjogc3RyaW5nOyBpZDogc3RyaW5nOyBpZFByZWZpeDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcbiAgc3RhcnRBY3Rpdml0eUlkOiBzdHJpbmc7XG4gIHN0YXJ0VGltZTogRGF0ZTtcbiAgc3RhcnRVc2VySWQ6IHN0cmluZztcbiAgLy8gc3ViamVjdDogc3RyaW5nO1xuICBzdXNwZW5kZWQ/OiBib29sZWFuO1xuICB2YXJpYWJsZXM6IFByb2Nlc3NWYXJpYWJsZVtdOyAvLyB0ZW5hbnQgYWRtaW4gb25seVxufVxuXG5cbi8vIHBheWxvYWQgZm9yIHN0YXJ0aW5nIGEgbmV3IHByb2Nlc3NcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0NyZWF0ZVBheWxvYWQgZXh0ZW5kcyBQcm9jZXNzUG9zdFBheWxvYWQge1xuICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBidXNpbmVzc0tleT86IHN0cmluZztcbiAgcmV0dXJuVmFyaWFibGVzPzogYm9vbGVhbjtcbn1cblxuLy8gcGF5bG9hZCBmb3IgcG9zdCByZXF1ZXN0cyB0byB0aGUgYnBtIGJhY2tlbmRcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1Bvc3RQYXlsb2FkIHtcbiAgdmFyaWFibGVzPzogUHJvY2Vzc1ZhcmlhYmxlW107XG4gIGF0dGFjaG1lbnRzPzogc3RyaW5nW107XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1ZhcmlhYmxlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICAvLyBUT0RPOiBOb3QgeWV0IHN1cHBvcnRlZCBieSBCUE0tRW5naW5lXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGFza3MgYXJlIGJhc2ljYWxseSBhY3Rpdml0aWVzIGRlZmluZWQgYnkgYSBwcm9jZXNzLlxuICogUHJvY2Vzc2VzIG1heSBjb250YWluIHNldmVyYWwgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5ib3hUYXNrIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIC8vIElEIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhpcyB0YXNrL2FjdGl2aXR5XG4gICAgcHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZztcbiAgICBhc3NpZ25lZTogUHJvY2Vzc1VzZXI7XG4gICAgY2xhaW1UaW1lOiBEYXRlO1xuICAgIGNyZWF0ZVRpbWU6IERhdGU7XG4gICAgZHVlRGF0ZTogRGF0ZTtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIC8vIHRhc2tNZXNzYWdlcz86IFRhc2tNZXNzYWdlW107XG4gICAgLy8gdGFza0Zvcm0/OiB7XG4gICAgLy8gICBzY2hlbWFQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgLy8gICBtb2RlbD86IGFueTtcbiAgICAvLyAgIGRhdGE/OiBhbnk7XG4gICAgLy8gICBvdXRjb21lcz86IFRhc2tPdXRjb21lW107XG4gICAgLy8gfTtcbiAgICBkZWxlZ2F0aW9uU3RhdGU/OiBzdHJpbmc7XG4gICAgZm9ybUtleTogc3RyaW5nO1xuICAgIGluaXRpYXRvcjogUHJvY2Vzc1VzZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG93bmVyOiBQcm9jZXNzVXNlcjtcbiAgICBwYXJlbnRUYXNrSWQ6IHN0cmluZztcbiAgICBwcm9jZXNzRGVmaW5pdGlvbjoge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIGlkUHJlZml4OiBzdHJpbmc7XG4gICAgfTtcbiAgICAvLyBzdWJqZWN0OiBzdHJpbmc7XG4gICAgc3VzcGVuZGVkOiBmYWxzZTtcbiAgICB2YXJpYWJsZXM6IFByb2Nlc3NWYXJpYWJsZVtdO1xuICAgIHJlc29sdmVkVmFsdWVzPzogeyBbaWQ6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGF0dGFjaG1lbnRzOiBzdHJpbmdbXTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1VzZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hUYXNrT3B0aW9ucyB7XG4gICAgYnVzaW5lc3NLZXk/OiBzdHJpbmc7XG4gICAgaW5jbHVkZVByb2Nlc3NWYXI/OiBib29sZWFuO1xuICAgIGlzQ29tcGxldGVkPzogYm9vbGVhbjtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleT86IHN0cmluZztcbiAgfSJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BackendService } from '../backend/backend.service';
|
|
3
|
+
import { ProcessAction } from './bpm.interface';
|
|
4
|
+
import { map, of } from 'rxjs';
|
|
5
|
+
import { ApiBase } from '../backend/api.enum';
|
|
6
|
+
import { Utils } from '../../util/utils';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class BpmService {
|
|
9
|
+
#backend = inject(BackendService);
|
|
10
|
+
startProcess(payload) {
|
|
11
|
+
return this.#backend.post('/bpm/processes', payload, ApiBase.apiWeb);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Finsihes a task.
|
|
15
|
+
* @param taskId ID of the taks to finish
|
|
16
|
+
* @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)
|
|
17
|
+
*/
|
|
18
|
+
completeTask(taskId, payload) {
|
|
19
|
+
return this.#putTask(taskId, ProcessAction.complete, payload || {});
|
|
20
|
+
}
|
|
21
|
+
updateTask(taskId, payload) {
|
|
22
|
+
return this.#putTask(taskId, ProcessAction.save, payload || {});
|
|
23
|
+
}
|
|
24
|
+
//TODO: replace with propper service call
|
|
25
|
+
getProcessPoll() {
|
|
26
|
+
const random = Math.random();
|
|
27
|
+
console.log('getProcessPoll: ', { random });
|
|
28
|
+
return of([{ title: `task title ${random}`, duedate: new Date() }]);
|
|
29
|
+
}
|
|
30
|
+
getProcessInstance(processDefinitionKey, options) {
|
|
31
|
+
return this.#backend
|
|
32
|
+
.get(`/bpm/processes${Utils.optionsToURLParams({ ...options, processDefinitionKey })}`, ApiBase.apiWeb)
|
|
33
|
+
.pipe(map(({ objects }) => objects[0]));
|
|
34
|
+
}
|
|
35
|
+
deleteProcess(processInstanceId) {
|
|
36
|
+
return this.#backend.delete(`/bpm/processes/${processInstanceId}`, ApiBase.apiWeb);
|
|
37
|
+
}
|
|
38
|
+
#putTask(taskId, action, payload) {
|
|
39
|
+
const pl = { ...payload, action: action };
|
|
40
|
+
return this.#backend.put(`/bpm/tasks/${taskId}`, pl, ApiBase.apiWeb);
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BpmService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BpmService, providedIn: 'root' }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BpmService, decorators: [{
|
|
46
|
+
type: Injectable,
|
|
47
|
+
args: [{
|
|
48
|
+
providedIn: 'root'
|
|
49
|
+
}]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnBtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvYnBtL2JwbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQTZCLGFBQWEsRUFBNEMsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUt6QyxNQUFNLE9BQU8sVUFBVTtJQUNyQixRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWxDLFlBQVksQ0FBQyxPQUE2QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBYyxFQUFFLE9BQTRCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBNEI7UUFDckQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLGNBQWM7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFNUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxjQUFjLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxvQkFBNEIsRUFBRSxPQUEwQjtRQUN6RSxPQUFPLElBQUksQ0FBQyxRQUFRO2FBQ2pCLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUN0RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUF5QjtRQUNyQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGtCQUFrQixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsT0FBMkI7UUFDbEUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkUsQ0FBQzsrR0F6Q1UsVUFBVTttSEFBVixVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhY2tlbmRTZXJ2aWNlIH0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmV0Y2hUYXNrT3B0aW9ucywgUHJvY2VzcywgUHJvY2Vzc0FjdGlvbiwgUHJvY2Vzc0NyZWF0ZVBheWxvYWQsIFByb2Nlc3NQb3N0UGF5bG9hZCB9IGZyb20gJy4vYnBtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcGlCYXNlIH0gZnJvbSAnLi4vYmFja2VuZC9hcGkuZW51bSc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCcG1TZXJ2aWNlIHtcbiAgI2JhY2tlbmQgPSBpbmplY3QoQmFja2VuZFNlcnZpY2UpO1xuXG4gIHN0YXJ0UHJvY2VzcyhwYXlsb2FkOiBQcm9jZXNzQ3JlYXRlUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQucG9zdCgnL2JwbS9wcm9jZXNzZXMnLCBwYXlsb2FkLCBBcGlCYXNlLmFwaVdlYik7XG4gIH1cblxuICAvKipcbiAgICogRmluc2loZXMgYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIElEIG9mIHRoZSB0YWtzIHRvIGZpbmlzaFxuICAgKiBAcGFyYW0gcGF5bG9hZCBEYXRhIHRvIGJlIHNlbmQgd2l0aCB0aGUgY29tcGxldGUgcmVxdWVzdCAobWF5IGNvbnRhaW4gYXR0YWNobWVudHMsIGEgbmV3IHN1YmplY3Qgb3IgdmFyaWFibGVzKVxuICAgKi9cbiAgY29tcGxldGVUYXNrKHRhc2tJZDogc3RyaW5nLCBwYXlsb2FkPzogUHJvY2Vzc1Bvc3RQYXlsb2FkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jcHV0VGFzayh0YXNrSWQsIFByb2Nlc3NBY3Rpb24uY29tcGxldGUsIHBheWxvYWQgfHwge30pO1xuICB9XG5cbiAgdXBkYXRlVGFzayh0YXNrSWQ6IHN0cmluZywgcGF5bG9hZD86IFByb2Nlc3NQb3N0UGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI3B1dFRhc2sodGFza0lkLCBQcm9jZXNzQWN0aW9uLnNhdmUsIHBheWxvYWQgfHwge30pO1xuICB9XG5cbiAgLy9UT0RPOiByZXBsYWNlIHdpdGggcHJvcHBlciBzZXJ2aWNlIGNhbGxcbiAgZ2V0UHJvY2Vzc1BvbGwoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpO1xuICAgIGNvbnNvbGUubG9nKCdnZXRQcm9jZXNzUG9sbDogJywgeyByYW5kb20gfSk7XG5cbiAgICByZXR1cm4gb2YoW3sgdGl0bGU6IGB0YXNrIHRpdGxlICR7cmFuZG9tfWAsIGR1ZWRhdGU6IG5ldyBEYXRlKCkgfV0pO1xuICB9XG5cbiAgZ2V0UHJvY2Vzc0luc3RhbmNlKHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaFRhc2tPcHRpb25zKTogT2JzZXJ2YWJsZTxQcm9jZXNzPiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmRcbiAgICAgIC5nZXQoYC9icG0vcHJvY2Vzc2VzJHtVdGlscy5vcHRpb25zVG9VUkxQYXJhbXMoeyAuLi5vcHRpb25zLCBwcm9jZXNzRGVmaW5pdGlvbktleSB9KX1gLCBBcGlCYXNlLmFwaVdlYilcbiAgICAgIC5waXBlKG1hcCgoeyBvYmplY3RzIH0pID0+IG9iamVjdHNbMF0pKTtcbiAgfVxuXG4gIGRlbGV0ZVByb2Nlc3MocHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI2JhY2tlbmQuZGVsZXRlKGAvYnBtL3Byb2Nlc3Nlcy8ke3Byb2Nlc3NJbnN0YW5jZUlkfWAsIEFwaUJhc2UuYXBpV2ViKTtcbiAgfVxuXG4gICNwdXRUYXNrKHRhc2tJZDogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgcGF5bG9hZDogUHJvY2Vzc1Bvc3RQYXlsb2FkKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBwbCA9IHsgLi4ucGF5bG9hZCwgYWN0aW9uOiBhY3Rpb24gfTtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZC5wdXQoYC9icG0vdGFza3MvJHt0YXNrSWR9YCwgcGwsIEFwaUJhc2UuYXBpV2ViKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { StorageMap } from '@ngx-pwa/local-storage';
|
|
3
|
+
import { forkJoin, Observable, of } from 'rxjs';
|
|
4
|
+
import { first, map, switchMap } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Service for saving or caching data on the users device. It uses the most efficient storage
|
|
8
|
+
* available (IndexDB, localstorage, ...) on the device. Depending on the type of storage used,
|
|
9
|
+
* its limitations apply.
|
|
10
|
+
*/
|
|
11
|
+
export class AppCacheService {
|
|
12
|
+
#storage = inject(StorageMap);
|
|
13
|
+
setItem(key, value) {
|
|
14
|
+
return this.#storage.set(key, value).pipe(map(() => true));
|
|
15
|
+
}
|
|
16
|
+
getItem(key) {
|
|
17
|
+
return this.#storage.get(key);
|
|
18
|
+
}
|
|
19
|
+
removeItem(key) {
|
|
20
|
+
return this.#storage.delete(key).pipe(map(() => true));
|
|
21
|
+
}
|
|
22
|
+
clear(filter) {
|
|
23
|
+
return filter
|
|
24
|
+
? this.getStorageKeys().pipe(switchMap((keys) => {
|
|
25
|
+
const list = keys.filter((k) => filter(k)).map((k) => this.removeItem(k));
|
|
26
|
+
return list.length ? forkJoin(list).pipe(map(() => true)) : of(true);
|
|
27
|
+
}))
|
|
28
|
+
: this.#storage.clear().pipe(map(() => true));
|
|
29
|
+
}
|
|
30
|
+
getStorageKeys() {
|
|
31
|
+
return new Observable((observer) => {
|
|
32
|
+
const keys = [];
|
|
33
|
+
this.#storage.keys().subscribe({
|
|
34
|
+
next: (key) => keys.push(key),
|
|
35
|
+
complete: () => observer.next(keys)
|
|
36
|
+
});
|
|
37
|
+
}).pipe(first());
|
|
38
|
+
}
|
|
39
|
+
setStorage(options) {
|
|
40
|
+
return forkJoin(Object.keys(options || {}).map((k) => this.setItem(k, options[k])));
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppCacheService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppCacheService, providedIn: 'root' }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppCacheService, decorators: [{
|
|
46
|
+
type: Injectable,
|
|
47
|
+
args: [{
|
|
48
|
+
providedIn: 'root'
|
|
49
|
+
}]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNhY2hlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtY29yZS9zcmMvbGliL3NlcnZpY2UvY2FjaGUvYXBwLWNhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFdkQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFOUIsT0FBTyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUE4QjtRQUNsQyxPQUFPLE1BQU07WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FDeEIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQUMsQ0FDSDtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxVQUFVLENBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQzdCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNwQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQVk7UUFDckIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQzsrR0F0Q1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VNYXAgfSBmcm9tICdAbmd4LXB3YS9sb2NhbC1zdG9yYWdlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHNhdmluZyBvciBjYWNoaW5nIGRhdGEgb24gdGhlIHVzZXJzIGRldmljZS4gSXQgdXNlcyB0aGUgbW9zdCBlZmZpY2llbnQgc3RvcmFnZVxuICogYXZhaWxhYmxlICAoSW5kZXhEQiwgbG9jYWxzdG9yYWdlLCAuLi4pIG9uIHRoZSBkZXZpY2UuIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBzdG9yYWdlIHVzZWQsXG4gKiBpdHMgbGltaXRhdGlvbnMgYXBwbHkuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcENhY2hlU2VydmljZSB7XG4gICNzdG9yYWdlID0gaW5qZWN0KFN0b3JhZ2VNYXApO1xuXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy4jc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICB9XG5cbiAgZ2V0SXRlbShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuI3N0b3JhZ2UuZ2V0KGtleSk7XG4gIH1cblxuICByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuI3N0b3JhZ2UuZGVsZXRlKGtleSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICB9XG5cbiAgY2xlYXIoZmlsdGVyPzogKGtleTogYW55KSA9PiBib29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGZpbHRlclxuICAgICAgPyB0aGlzLmdldFN0b3JhZ2VLZXlzKCkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGtleXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBrZXlzLmZpbHRlcigoazogYW55KSA9PiBmaWx0ZXIoaykpLm1hcCgoazogYW55KSA9PiB0aGlzLnJlbW92ZUl0ZW0oaykpO1xuICAgICAgICAgICAgcmV0dXJuIGxpc3QubGVuZ3RoID8gZm9ya0pvaW4obGlzdCkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpIDogb2YodHJ1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgOiB0aGlzLiNzdG9yYWdlLmNsZWFyKCkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICB9XG5cbiAgZ2V0U3RvcmFnZUtleXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nW10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIHRoaXMuI3N0b3JhZ2Uua2V5cygpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChrZXkpID0+IGtleXMucHVzaChrZXkpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gb2JzZXJ2ZXIubmV4dChrZXlzKVxuICAgICAgfSk7XG4gICAgfSkucGlwZShmaXJzdCgpKTtcbiAgfVxuXG4gIHNldFN0b3JhZ2Uob3B0aW9uczogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gZm9ya0pvaW4oT2JqZWN0LmtleXMob3B0aW9ucyB8fCB7fSkubWFwKChrKSA9PiB0aGlzLnNldEl0ZW0oaywgb3B0aW9uc1trXSkpKTtcbiAgfVxufVxuIl19
|