@odx/auth 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/esm2020/lib/auth.config.mjs +5 -1
- package/esm2020/lib/auth.providers.mjs +14 -9
- package/esm2020/lib/helpers/handle-auth-error.mjs +21 -0
- package/esm2020/lib/helpers/index.mjs +2 -1
- package/esm2020/lib/models/auth-http-cache.mjs +15 -6
- package/esm2020/lib/models/index.mjs +2 -1
- package/esm2020/lib/models/offline-auth-error-handler.mjs +7 -0
- package/esm2020/plugins/service-connect/lib/helpers/service-connect-plugin-factory.mjs +5 -17
- package/esm2020/plugins/service-connect/lib/service-connect-rights.plugin.mjs +1 -2
- package/esm2020/plugins/service-connect/lib/service-connect.config.mjs +4 -3
- package/fesm2015/odx-auth-plugins-service-connect.mjs +7 -21
- package/fesm2015/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2015/odx-auth.mjs +56 -14
- package/fesm2015/odx-auth.mjs.map +1 -1
- package/fesm2020/odx-auth-plugins-service-connect.mjs +7 -19
- package/fesm2020/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2020/odx-auth.mjs +55 -14
- package/fesm2020/odx-auth.mjs.map +1 -1
- package/lib/auth.config.d.ts +1 -0
- package/lib/auth.providers.d.ts +1 -1
- package/lib/helpers/handle-auth-error.d.ts +3 -0
- package/lib/helpers/index.d.ts +1 -0
- package/lib/models/auth-http-cache.d.ts +2 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/offline-auth-error-handler.d.ts +2 -0
- package/package.json +1 -1
- package/plugins/service-connect/lib/helpers/service-connect-plugin-factory.d.ts +3 -2
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +1 -1
- package/plugins/service-connect/lib/service-connect.config.d.ts +3 -0
package/README.md
CHANGED
|
@@ -9,6 +9,21 @@
|
|
|
9
9
|
npm install @odx/auth
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
+
### Library structure
|
|
13
|
+
|
|
14
|
+
- **@odx/auth**: main entry point
|
|
15
|
+
- **provideAuth**: Main provider factory to enable authentication for an Angular application
|
|
16
|
+
- **AuthModule**: Angular module which bundles all components and directives for the UI
|
|
17
|
+
- **AuthService**: Service to perform different tasks regarding authentication and authorization
|
|
18
|
+
- **authGuard**: Angular guard to protect routes that require authentication or authorization
|
|
19
|
+
- **unauthGuard**: Angular guard to protect routes that don't require authentication or authorization
|
|
20
|
+
- ...
|
|
21
|
+
- **@odx/auth/plugins/service-connect**: main entry point for service connect auth plugins
|
|
22
|
+
- **serviceConnectRightsPlugin**: Auth plugin to load user rights from service connect
|
|
23
|
+
- **serviceConnectRightsGuard**: Auth guard to check for service connect user rights
|
|
24
|
+
- **ServiceConnectRightsDirective**: Auth directive to check for service connect user rights
|
|
25
|
+
- ...
|
|
26
|
+
|
|
12
27
|
### Usage
|
|
13
28
|
|
|
14
29
|
Import the `AuthModule` from `@odx/auth` and add it to the application imports, to configure it use the `provideAuth` function.
|
|
@@ -54,5 +69,3 @@ In order to add the UI for signing in and out, add the `odx-auth` component to t
|
|
|
54
69
|
</odx-auth>
|
|
55
70
|
</odx-header>
|
|
56
71
|
```
|
|
57
|
-
|
|
58
|
-
> The library provides some additional plugins that can be imported from `@odx/auth/plugins/*`
|
|
@@ -11,6 +11,10 @@ export const ODX_AUTH_CORE_PLUGINS = new InjectionToken('@odx/auth::CorePlugins'
|
|
|
11
11
|
providedIn: 'root',
|
|
12
12
|
factory: () => [],
|
|
13
13
|
});
|
|
14
|
+
export const ODX_AUTH_ERROR_HANDLERS = new InjectionToken('@odx/auth::ErrorHandlers', {
|
|
15
|
+
providedIn: 'root',
|
|
16
|
+
factory: () => [],
|
|
17
|
+
});
|
|
14
18
|
export const ODX_AUTH_PLUGINS = new InjectionToken('@odx/auth::Plugins', {
|
|
15
19
|
providedIn: 'root',
|
|
16
20
|
factory: () => {
|
|
@@ -38,4 +42,4 @@ export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfi
|
|
|
38
42
|
enableLoadingScreen: false,
|
|
39
43
|
loadingScreenMessage: null,
|
|
40
44
|
});
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTFFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNwRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQW9DO0lBQzlELEdBQUcsRUFBRSw4Q0FBOEM7SUFDbkQsS0FBSyxFQUFFLCtDQUErQztJQUN0RCxJQUFJLEVBQUUsMENBQTBDO0NBQ2pELENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBc0Isd0JBQXdCLEVBQUU7SUFDckcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7Q0FDbEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQXVCLDBCQUEwQixFQUFFO0lBQzFHLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0NBQ2xCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFlLG9CQUFvQixFQUFFO0lBQ3JGLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDWixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVsRCxPQUFPLENBQUMsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNGLENBQUMsQ0FBQztBQStCSCxNQUFNLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7SUFDNUgsV0FBVyxFQUFFLE1BQU07SUFDbkIsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDNUIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsY0FBYztJQUNkLFlBQVk7SUFDWixlQUFlO0lBQ2YsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixPQUFPLEVBQUUsRUFBRTtJQUNYLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixvQkFBb0IsRUFBRSxJQUFJO0NBQ2IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY1RleHRDb250ZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9keW5hbWljLXZpZXcnO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCwgT0F1dGhTdG9yYWdlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBjcmVhdGVJbml0aWFscywgcmVzb2x2ZUVtYWlsLCByZXNvbHZlVXNlcm5hbWUgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBBdXRoRW52aXJvbm1lbnQsIEF1dGhvcml6ZWRIYW5kbGVyLCBBdXRoUGx1Z2luLCBBdXRoUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVVUSF9TQ09QRVMgPSBbJ29wZW5pZCcsICdwcm9maWxlJywgJ2VtYWlsJywgJ29mZmxpbmVfYWNjZXNzJ107XG5leHBvcnQgY29uc3QgREVGQVVMVF9JU1NVRVJTOiBSZWNvcmQ8QXV0aEVudmlyb25tZW50LCBzdHJpbmc+ID0ge1xuICBkZXY6ICdodHRwczovL2Rldi5sb2dpbi5kcmFlZ2VyLmNvbS9vYXV0aDIvZGVmYXVsdCcsXG4gIHN0YWdlOiAnaHR0cHM6Ly90ZXN0LmxvZ2luLmRyYWVnZXIuY29tL29hdXRoMi9kZWZhdWx0JyxcbiAgcHJvZDogJ2h0dHBzOi8vbG9naW4uZHJhZWdlci5jb20vb2F1dGgyL2RlZmF1bHQnLFxufTtcbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9DT1JFX1BMVUdJTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QXV0aFBsdWdpbkZhY3RvcnlbXT4oJ0BvZHgvYXV0aDo6Q29yZVBsdWdpbnMnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gW10sXG59KTtcbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9FUlJPUl9IQU5ETEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBdXRoRXJyb3JIYW5kbGVyRm5bXT4oJ0BvZHgvYXV0aDo6RXJyb3JIYW5kbGVycycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBbXSxcbn0pO1xuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX1BMVUdJTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QXV0aFBsdWdpbltdPignQG9keC9hdXRoOjpQbHVnaW5zJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB7IHBsdWdpbnMgfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgICBjb25zdCBjb3JlUGx1Z2lucyA9IGluamVjdChPRFhfQVVUSF9DT1JFX1BMVUdJTlMpO1xuXG4gICAgcmV0dXJuIFsuLi5jb3JlUGx1Z2lucywgLi4ucGx1Z2luc10ubWFwKChwbHVnaW5GYWN0b3J5KSA9PiBwbHVnaW5GYWN0b3J5KCkpO1xuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIEF1dGhFcnJvckhhbmRsZXJGbiA9IChlcnJvcjogT0F1dGhFcnJvckV2ZW50KSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgUmVzb2x2ZVVzZXJuYW1lRm4gPSAocmF3Q2xhaW1zOiBPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBSZXNvbHZlRW1haWxGbiA9IChyYXdDbGFpbXM6IE9keEF1dGguUmF3SWRlbnRpdHlDbGFpbXMpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIENyZWF0ZUluaXRpYWxzRm4gPSAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDb25maWcge1xuICBlbnZpcm9ubWVudDogQXV0aEVudmlyb25tZW50O1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICByZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgYWxsb3dlZFVybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIHRpbWVvdXRGYWN0b3I6IG51bWJlcjtcbiAgbWF4T2ZmbGluZVRpbWU6IG51bWJlcjtcbiAgbG9hZFVzZXJQcm9maWxlOiBib29sZWFuO1xuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICBkaXNjb3ZlcnlVcmw/OiBzdHJpbmc7XG4gIGVycm9ySGFuZGxlcjogQXV0aEVycm9ySGFuZGxlckZuO1xuICBjcmVhdGVJbml0aWFsczogQ3JlYXRlSW5pdGlhbHNGbjtcbiAgcmVzb2x2ZUVtYWlsOiBSZXNvbHZlRW1haWxGbjtcbiAgcmVzb2x2ZVVzZXJuYW1lOiBSZXNvbHZlVXNlcm5hbWVGbjtcbiAgc3RvcmFnZT86IE9BdXRoU3RvcmFnZTtcbiAgcGx1Z2luczogQXV0aFBsdWdpbkZhY3RvcnlbXTtcbiAgc2hvd1JlZGlyZWN0T3ZlcmxheTogYm9vbGVhbjtcbiAgZGVmYXVsdEF1dGhvcml6ZWRIYW5kbGVyPzogQXV0aG9yaXplZEhhbmRsZXIgfCBudWxsO1xuICBlbmFibGVMb2FkaW5nU2NyZWVuOiBib29sZWFuO1xuICBsb2FkaW5nU2NyZWVuTWVzc2FnZT86IER5bmFtaWNUZXh0Q29udGVudCB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCB7IEF1dGhEZWZhdWx0Q29uZmlnLCBBdXRoQ29uZmlnLCBpbmplY3RBdXRoQ29uZmlnLCBwcm92aWRlQXV0aENvbmZpZyB9ID0gY3JlYXRlQ29uZmlnVG9rZW5zKCdBdXRoJywgJ0BvZHgvYXV0aCcsIHtcbiAgZW52aXJvbm1lbnQ6ICdwcm9kJyxcbiAgcmVkaXJlY3RQYXRoOiAnbG9naW4vY2FsbGJhY2snLFxuICBhbGxvd2VkVXJsczogW10sXG4gIHRpbWVvdXRGYWN0b3I6IDAuNzUsXG4gIG1heE9mZmxpbmVUaW1lOiAyNCAqIDYwICogNjAsIC8vIDEgZGF5XG4gIGxvYWRVc2VyUHJvZmlsZTogZmFsc2UsXG4gIGVycm9ySGFuZGxlcjogKGVycm9yKSA9PiB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0sXG4gIGNyZWF0ZUluaXRpYWxzLFxuICByZXNvbHZlRW1haWwsXG4gIHJlc29sdmVVc2VybmFtZSxcbiAgc2hvd1JlZGlyZWN0T3ZlcmxheTogZmFsc2UsXG4gIHBsdWdpbnM6IFtdLFxuICBkZWZhdWx0QXV0aG9yaXplZEhhbmRsZXI6IG51bGwsXG4gIGVuYWJsZUxvYWRpbmdTY3JlZW46IGZhbHNlLFxuICBsb2FkaW5nU2NyZWVuTWVzc2FnZTogbnVsbCxcbn0gYXMgQXV0aENvbmZpZyk7XG4iXX0=
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { APP_INITIALIZER,
|
|
1
|
+
import { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';
|
|
2
2
|
import { WindowRef } from '@odx/angular';
|
|
3
3
|
import { buildUrl, isString } from '@odx/angular/utils';
|
|
4
4
|
import { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';
|
|
5
5
|
import { tap } from 'rxjs';
|
|
6
|
-
import {
|
|
6
|
+
import { DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthConfig, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_ERROR_HANDLERS, provideAuthConfig, } from './auth.config';
|
|
7
7
|
import { AuthService } from './auth.service';
|
|
8
|
+
import { handleAuthError } from './helpers';
|
|
9
|
+
import { offlineAuthErrorHandler } from './models';
|
|
8
10
|
import { coreIdentityPlugin, loadingScreenPlugin } from './plugins';
|
|
9
11
|
export function configureInterceptor() {
|
|
10
12
|
const { allowedUrls } = injectAuthConfig();
|
|
@@ -15,11 +17,10 @@ export function configureInterceptor() {
|
|
|
15
17
|
},
|
|
16
18
|
};
|
|
17
19
|
}
|
|
18
|
-
export function
|
|
20
|
+
export function initializeAuthErrorHandlers() {
|
|
19
21
|
const authService = inject(AuthService);
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
authService.errors$.pipe(tap((error) => injector.runInContext(() => errorHandler(error)))).subscribe();
|
|
22
|
+
const handler = handleAuthError(inject(ODX_AUTH_ERROR_HANDLERS));
|
|
23
|
+
authService.errors$.pipe(tap((error) => handler(error))).subscribe();
|
|
23
24
|
}
|
|
24
25
|
export function initalizeAuthConfig() {
|
|
25
26
|
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();
|
|
@@ -49,9 +50,13 @@ export function provideAuth(config) {
|
|
|
49
50
|
},
|
|
50
51
|
{
|
|
51
52
|
provide: ENVIRONMENT_INITIALIZER,
|
|
52
|
-
useValue:
|
|
53
|
+
useValue: initializeAuthErrorHandlers,
|
|
53
54
|
multi: true,
|
|
54
55
|
},
|
|
56
|
+
{
|
|
57
|
+
provide: ODX_AUTH_ERROR_HANDLERS,
|
|
58
|
+
useFactory: () => [offlineAuthErrorHandler, injectAuthConfig().errorHandler],
|
|
59
|
+
},
|
|
55
60
|
{
|
|
56
61
|
provide: APP_INITIALIZER,
|
|
57
62
|
useFactory: initalizeAuthConfig,
|
|
@@ -59,7 +64,7 @@ export function provideAuth(config) {
|
|
|
59
64
|
},
|
|
60
65
|
{
|
|
61
66
|
provide: OAuthStorage,
|
|
62
|
-
useFactory: () =>
|
|
67
|
+
useFactory: () => injectAuthConfig().storage ?? inject(WindowRef).nativeWindow.localStorage,
|
|
63
68
|
},
|
|
64
69
|
{
|
|
65
70
|
provide: ODX_AUTH_CORE_PLUGINS,
|
|
@@ -67,4 +72,4 @@ export function provideAuth(config) {
|
|
|
67
72
|
},
|
|
68
73
|
]);
|
|
69
74
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvYXV0aC5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBd0IsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBc0MsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0IsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEUsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxPQUFPO1FBQ0wsY0FBYyxFQUFFO1lBQ2QsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENB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QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IGJ1aWxkVXJsLCBDb25maWdEZXBlbmRlbmNpZXMsIENvbmZpZ1Byb3ZpZGVyLCBpc1N0cmluZyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPQXV0aE1vZHVsZUNvbmZpZywgT0F1dGhTdG9yYWdlLCBwcm92aWRlT0F1dGhDbGllbnQgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXV0aENvbmZpZyxcbiAgREVGQVVMVF9BVVRIX1NDT1BFUyxcbiAgREVGQVVMVF9JU1NVRVJTLFxuICBpbmplY3RBdXRoQ29uZmlnLFxuICBPRFhfQVVUSF9DT1JFX1BMVUdJTlMsXG4gIE9EWF9BVVRIX0VSUk9SX0hBTkRMRVJTLFxuICBwcm92aWRlQXV0aENvbmZpZyxcbn0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IGhhbmRsZUF1dGhFcnJvciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBvZmZsaW5lQXV0aEVycm9ySGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IGNvcmVJZGVudGl0eVBsdWdpbiwgbG9hZGluZ1NjcmVlblBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVJbnRlcmNlcHRvcigpOiBPQXV0aE1vZHVsZUNvbmZpZyB7XG4gIGNvbnN0IHsgYWxsb3dlZFVybHMgfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgcmV0dXJuIHtcbiAgICByZXNvdXJjZVNlcnZlcjoge1xuICAgICAgY3VzdG9tVXJsVmFsaWRhdGlvbjogKHVybCkgPT4gYWxsb3dlZFVybHMuc29tZSgoYWxsb3dlZFVybCkgPT4gKGlzU3RyaW5nKGFsbG93ZWRVcmwpID8gdXJsLnN0YXJ0c1dpdGgoYWxsb3dlZFVybCkgOiAhIXVybC5tYXRjaChhbGxvd2VkVXJsKSkpLFxuICAgICAgc2VuZEFjY2Vzc1Rva2VuOiB0cnVlLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXV0aEVycm9ySGFuZGxlcnMoKTogdm9pZCB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3QgaGFuZGxlciA9IGhhbmRsZUF1dGhFcnJvcihpbmplY3QoT0RYX0FVVEhfRVJST1JfSEFORExFUlMpKTtcblxuICBhdXRoU2VydmljZS5lcnJvcnMkLnBpcGUodGFwKChlcnJvcikgPT4gaGFuZGxlcihlcnJvcikpKS5zdWJzY3JpYmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRhbGl6ZUF1dGhDb25maWcoKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY2xpZW50SWQsIHNjb3BlcywgcmVkaXJlY3RQYXRoLCBlbnZpcm9ubWVudCwgcG9zdExvZ291dFJlZGlyZWN0VXJsLCBpc3N1ZXIsIHRpbWVvdXRGYWN0b3IsIGRpc2NvdmVyeVVybCB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIGNvbnN0IG9yaWdpbiA9IGluamVjdChXaW5kb3dSZWYpLmdldE9yaWdpbigpO1xuICBjb25zdCBzY29wZSA9IEFycmF5LmZyb20obmV3IFNldChERUZBVUxUX0FVVEhfU0NPUEVTLmNvbmNhdChzY29wZXMgPz8gW10pKSkuam9pbignICcpO1xuXG4gIHJldHVybiAoKSA9PlxuICAgIGF1dGhTZXJ2aWNlLmluaXRpYWxpemUoe1xuICAgICAgY2xpZW50SWQsXG4gICAgICBpc3N1ZXI6IGlzc3VlciA/PyBERUZBVUxUX0lTU1VFUlNbZW52aXJvbm1lbnRdLFxuICAgICAgc2NvcGUsXG4gICAgICByZWRpcmVjdFVyaTogYnVpbGRVcmwob3JpZ2luLCByZWRpcmVjdFBhdGgpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZW52aXJvbm1lbnQgPT09ICdkZXYnLFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoPEQgZXh0ZW5kcyBDb25maWdEZXBlbmRlbmNpZXM+KGNvbmZpZzogQ29uZmlnUHJvdmlkZXI8UGFydGlhbDxBdXRoQ29uZmlnPiwgRD4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHByb3ZpZGVBdXRoQ29uZmlnKGNvbmZpZyksXG4gICAgcHJvdmlkZU9BdXRoQ2xpZW50KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhNb2R1bGVDb25maWcsXG4gICAgICB1c2VGYWN0b3J5OiBjb25maWd1cmVJbnRlcmNlcHRvcixcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlVmFsdWU6IGluaXRpYWxpemVBdXRoRXJyb3JIYW5kbGVycyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0RYX0FVVEhfRVJST1JfSEFORExFUlMsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBbb2ZmbGluZUF1dGhFcnJvckhhbmRsZXIsIGluamVjdEF1dGhDb25maWcoKS5lcnJvckhhbmRsZXJdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogaW5pdGFsaXplQXV0aENvbmZpZyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhTdG9yYWdlLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gaW5qZWN0QXV0aENvbmZpZygpLnN0b3JhZ2UgPz8gaW5qZWN0KFdpbmRvd1JlZikubmF0aXZlV2luZG93LmxvY2FsU3RvcmFnZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9EWF9BVVRIX0NPUkVfUExVR0lOUyxcbiAgICAgIHVzZVZhbHVlOiBbY29yZUlkZW50aXR5UGx1Z2luLCBsb2FkaW5nU2NyZWVuUGx1Z2luXSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EnvironmentInjector, inject } from '@angular/core';
|
|
2
|
+
import { OAuthErrorEvent } from 'angular-oauth2-oidc';
|
|
3
|
+
export function handleAuthError(handlers) {
|
|
4
|
+
const injector = inject(EnvironmentInjector);
|
|
5
|
+
return (error) => {
|
|
6
|
+
injector.runInContext(() => {
|
|
7
|
+
for (const handler of handlers) {
|
|
8
|
+
try {
|
|
9
|
+
handler(error);
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
catch (unhandledError) {
|
|
13
|
+
if (!(unhandledError instanceof OAuthErrorEvent))
|
|
14
|
+
throw error;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWF1dGgtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvaGVscGVycy9oYW5kbGUtYXV0aC1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQThCO0lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ3pCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM5QixJQUFJO29CQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZixNQUFNO2lCQUNQO2dCQUFDLE9BQU8sY0FBYyxFQUFFO29CQUN2QixJQUFJLENBQUMsQ0FBQyxjQUFjLFlBQVksZUFBZSxDQUFDO3dCQUFFLE1BQU0sS0FBSyxDQUFDO29CQUM5RCxTQUFTO2lCQUNWO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudEluamVjdG9yLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgQXV0aEVycm9ySGFuZGxlckZuIH0gZnJvbSAnLi4vYXV0aC5jb25maWcnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQXV0aEVycm9yKGhhbmRsZXJzOiBBdXRoRXJyb3JIYW5kbGVyRm5bXSk6IChlcnJvcjogT0F1dGhFcnJvckV2ZW50KSA9PiB2b2lkIHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgcmV0dXJuIChlcnJvcikgPT4ge1xuICAgIGluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBoYW5kbGVyKGVycm9yKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodW5oYW5kbGVkRXJyb3IpIHtcbiAgICAgICAgICBpZiAoISh1bmhhbmRsZWRFcnJvciBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCkpIHRocm93IGVycm9yO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './create-inititals';
|
|
2
|
+
export * from './handle-auth-error';
|
|
2
3
|
export * from './resolve-email';
|
|
3
4
|
export * from './resolve-username';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtaW5pdGl0YWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaGFuZGxlLWF1dGgtZXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvbHZlLWVtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb2x2ZS11c2VybmFtZSc7XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
2
|
import { WindowRef } from '@odx/angular';
|
|
3
|
+
import { OAuthService } from 'angular-oauth2-oidc';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken('@odx/auth::AuthHttpCacheStorage', {
|
|
5
6
|
providedIn: 'root',
|
|
@@ -8,18 +9,26 @@ export const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken('@odx/auth::AuthHt
|
|
|
8
9
|
export class AuthHttpCache {
|
|
9
10
|
constructor() {
|
|
10
11
|
this.cacheStorage = inject(ODX_AUTH_HTTP_CACHE_STORAGE);
|
|
12
|
+
this.oauthService = inject(OAuthService);
|
|
11
13
|
}
|
|
12
14
|
async delete(request) {
|
|
13
15
|
const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);
|
|
14
16
|
return cache.delete(request);
|
|
15
17
|
}
|
|
16
|
-
async request(
|
|
18
|
+
async request(requestInfo, authentication = false) {
|
|
19
|
+
const request = new Request(requestInfo);
|
|
20
|
+
const authorizationHeader = authentication ? this.oauthService.authorizationHeader() : null;
|
|
21
|
+
if (authorizationHeader) {
|
|
22
|
+
request.headers.set('Authorization', authorizationHeader);
|
|
23
|
+
}
|
|
17
24
|
const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
const response = await fetch(request).catch(() => null);
|
|
26
|
+
if (response?.ok) {
|
|
27
|
+
await cache.put(request, response);
|
|
20
28
|
}
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
if (authorizationHeader && response?.status === 401) {
|
|
30
|
+
await cache.delete(request);
|
|
31
|
+
await this.oauthService.refreshToken().catch(() => null);
|
|
23
32
|
}
|
|
24
33
|
return cache.match(request).then((res) => res?.json() ?? null);
|
|
25
34
|
}
|
|
@@ -31,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
31
40
|
type: Injectable,
|
|
32
41
|
args: [{ providedIn: 'root' }]
|
|
33
42
|
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1odHRwLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL21vZGVscy9hdXRoLWh0dHAtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUVuRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FBZSxpQ0FBaUMsRUFBRTtJQUM3RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO0NBQ3JELENBQUMsQ0FBQztBQUdILE1BQU0sT0FBTyxhQUFhO0lBRDFCO1FBR21CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDbkQsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0EwQnREO0lBeEJRLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBMEI7UUFDNUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFJLFdBQThCLEVBQUUsY0FBYyxHQUFHLEtBQUs7UUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVGLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDM0Q7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLG1CQUFtQixJQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFEO1FBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7O0FBM0J1Qix1QkFBUyxHQUFHLHNCQUFzQixDQUFDOzBHQURoRCxhQUFhOzhHQUFiLGFBQWEsY0FEQSxNQUFNOzJGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcblxuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX0hUVFBfQ0FDSEVfU1RPUkFHRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDYWNoZVN0b3JhZ2U+KCdAb2R4L2F1dGg6OkF1dGhIdHRwQ2FjaGVTdG9yYWdlJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IGluamVjdChXaW5kb3dSZWYpLm5hdGl2ZVdpbmRvdy5jYWNoZXMsXG59KTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoSHR0cENhY2hlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfS0VZID0gJ0BvZHgvYXV0aC9odHRwLWNhY2hlJztcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZVN0b3JhZ2UgPSBpbmplY3QoT0RYX0FVVEhfSFRUUF9DQUNIRV9TVE9SQUdFKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNlcnZpY2UgPSBpbmplY3QoT0F1dGhTZXJ2aWNlKTtcblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlcXVlc3Q6IFJlcXVlc3RJbmZvIHwgVVJMKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmNhY2hlU3RvcmFnZS5vcGVuKEF1dGhIdHRwQ2FjaGUuQ0FDSEVfS0VZKTtcblxuICAgIHJldHVybiBjYWNoZS5kZWxldGUocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPihyZXF1ZXN0SW5mbzogUmVxdWVzdEluZm8gfCBVUkwsIGF1dGhlbnRpY2F0aW9uID0gZmFsc2UpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3RJbmZvKTtcbiAgICBjb25zdCBhdXRob3JpemF0aW9uSGVhZGVyID0gYXV0aGVudGljYXRpb24gPyB0aGlzLm9hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyKCkgOiBudWxsO1xuICAgIGlmIChhdXRob3JpemF0aW9uSGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYXV0aG9yaXphdGlvbkhlYWRlcik7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5jYWNoZVN0b3JhZ2Uub3BlbihBdXRoSHR0cENhY2hlLkNBQ0hFX0tFWSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAocmVzcG9uc2U/Lm9rKSB7XG4gICAgICBhd2FpdCBjYWNoZS5wdXQocmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgIH1cbiAgICBpZiAoYXV0aG9yaXphdGlvbkhlYWRlciAmJiByZXNwb25zZT8uc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIGF3YWl0IGNhY2hlLmRlbGV0ZShyZXF1ZXN0KTtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZS5tYXRjaChyZXF1ZXN0KS50aGVuKChyZXMpID0+IHJlcz8uanNvbigpID8/IG51bGwpO1xuICB9XG59XG4iXX0=
|
|
@@ -2,4 +2,5 @@ export * from './auth-environment';
|
|
|
2
2
|
export * from './auth-http-cache';
|
|
3
3
|
export * from './auth-plugin-manager';
|
|
4
4
|
export * from './authorized-handler';
|
|
5
|
-
|
|
5
|
+
export * from './offline-auth-error-handler';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0aC1lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgtaHR0cC1jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgtcGx1Z2luLW1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRob3JpemVkLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9vZmZsaW5lLWF1dGgtZXJyb3ItaGFuZGxlcic7XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const offlineAuthErrorHandler = (error) => {
|
|
2
|
+
if (error.type === 'discovery_document_load_error' && error.reason?.status === 504) {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
5
|
+
throw error;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1hdXRoLWVycm9yLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvbW9kZWxzL29mZmxpbmUtYXV0aC1lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF1QixDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ25FLElBQUksS0FBSyxDQUFDLElBQUksS0FBSywrQkFBK0IsSUFBSyxLQUFLLENBQUMsTUFBNEIsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFO1FBQ3pHLE9BQU87S0FDUjtJQUNELE1BQU0sS0FBSyxDQUFDO0FBQ2QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBdXRoRXJyb3JIYW5kbGVyRm4gfSBmcm9tICcuLi9hdXRoLmNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBvZmZsaW5lQXV0aEVycm9ySGFuZGxlcjogQXV0aEVycm9ySGFuZGxlckZuID0gKGVycm9yKSA9PiB7XG4gIGlmIChlcnJvci50eXBlID09PSAnZGlzY292ZXJ5X2RvY3VtZW50X2xvYWRfZXJyb3InICYmIChlcnJvci5yZWFzb24gYXMgSHR0cEVycm9yUmVzcG9uc2UpPy5zdGF0dXMgPT09IDUwNCkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn07XG4iXX0=
|
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { AuthHttpCache, injectAuthConfig } from '@odx/auth';
|
|
3
|
-
import { defer } from 'rxjs';
|
|
3
|
+
import { defer, map } from 'rxjs';
|
|
4
4
|
import { buildServiceConnectUrl } from './build-service-connect-url';
|
|
5
5
|
export function serviceConnectPluginFactory(options) {
|
|
6
6
|
return (pluginOptions) => () => {
|
|
7
|
+
options.setup?.(pluginOptions);
|
|
7
8
|
const { environment } = injectAuthConfig();
|
|
8
9
|
const httpCache = inject(AuthHttpCache);
|
|
9
|
-
options.setup?.();
|
|
10
10
|
const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const token = authService.getAccessToken();
|
|
14
|
-
let result = null;
|
|
15
|
-
if (token) {
|
|
16
|
-
request.headers.set('Authorization', `Bearer ${token}`);
|
|
17
|
-
result = await httpCache.request(request).then((res) => options.parseResponse(res));
|
|
18
|
-
}
|
|
19
|
-
else if (!authService.isAuthenticated()) {
|
|
20
|
-
await httpCache.delete(request);
|
|
21
|
-
}
|
|
22
|
-
return result ?? options.defaultValue ?? {};
|
|
23
|
-
});
|
|
24
|
-
return plugin;
|
|
11
|
+
const parseResponse = (dto) => options.parseResponse(dto) ?? options.defaultValue ?? {};
|
|
12
|
+
return () => defer(() => httpCache.request(url, true)).pipe(map((dto) => parseResponse(dto)));
|
|
25
13
|
};
|
|
26
14
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXBsdWdpbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9wbHVnaW5zL3NlcnZpY2UtY29ubmVjdC9zcmMvbGliL2hlbHBlcnMvc2VydmljZS1jb25uZWN0LXBsdWdpbi1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFlckUsTUFBTSxVQUFVLDJCQUEyQixDQUFnQixPQUFnRDtJQUN6RyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDN0IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxJQUFJLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUVwRyxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aEh0dHBDYWNoZSwgQXV0aFBsdWdpbkZhY3RvcnksIGluamVjdEF1dGhDb25maWcgfSBmcm9tICdAb2R4L2F1dGgnO1xuaW1wb3J0IHsgZGVmZXIsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VydmljZUNvbm5lY3RFbnZpcm9ubWVudCB9IGZyb20gJy4uL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29ubmVjdFVybCB9IGZyb20gJy4vYnVpbGQtc2VydmljZS1jb25uZWN0LXVybCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RQbHVnaW5PcHRpb25zIHtcbiAgZW52aXJvbm1lbnQ/OiBTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeU9wdGlvbnM8RHRvPiB7XG4gIGVuZHBvaW50OiBzdHJpbmdbXTtcbiAgcGFyc2VSZXNwb25zZTogKHJlczogRHRvIHwgbnVsbCkgPT4gUGFydGlhbDxPZHhBdXRoLkF1dGhQbHVnaW5SZXN1bHQ+O1xuICBkZWZhdWx0VmFsdWU/OiBQYXJ0aWFsPE9keEF1dGguQXV0aFBsdWdpblJlc3VsdD47XG4gIHNldHVwPzogKHBsdWdpbk9wdGlvbnM/OiBTZXJ2aWNlQ29ubmVjdFBsdWdpbk9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSA9IChwbHVnaW5PcHRpb25zPzogU2VydmljZUNvbm5lY3RQbHVnaW5PcHRpb25zKSA9PiBBdXRoUGx1Z2luRmFjdG9yeTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeTxEdG8gPSB1bmtub3duPihvcHRpb25zOiBTZXJ2aWNlQ29ubmVjdFBsdWdpbkZhY3RvcnlPcHRpb25zPER0bz4pOiBTZXJ2aWNlQ29ubmVjdFBsdWdpbkZhY3Rvcnkge1xuICByZXR1cm4gKHBsdWdpbk9wdGlvbnMpID0+ICgpID0+IHtcbiAgICBvcHRpb25zLnNldHVwPy4ocGx1Z2luT3B0aW9ucyk7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudCB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICAgIGNvbnN0IGh0dHBDYWNoZSA9IGluamVjdChBdXRoSHR0cENhY2hlKTtcbiAgICBjb25zdCB1cmwgPSBidWlsZFNlcnZpY2VDb25uZWN0VXJsKHBsdWdpbk9wdGlvbnM/LmVudmlyb25tZW50ID8/IGVudmlyb25tZW50LCAuLi5vcHRpb25zLmVuZHBvaW50KTtcbiAgICBjb25zdCBwYXJzZVJlc3BvbnNlID0gKGR0bzogRHRvIHwgbnVsbCkgPT4gb3B0aW9ucy5wYXJzZVJlc3BvbnNlKGR0bykgPz8gb3B0aW9ucy5kZWZhdWx0VmFsdWUgPz8ge307XG5cbiAgICByZXR1cm4gKCkgPT4gZGVmZXIoKCkgPT4gaHR0cENhY2hlLnJlcXVlc3Q8RHRvPih1cmwsIHRydWUpKS5waXBlKG1hcCgoZHRvKSA9PiBwYXJzZVJlc3BvbnNlKGR0bykpKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -5,6 +5,5 @@ export const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
|
5
5
|
endpoint: [ServiceConnectEndpoints.userRights],
|
|
6
6
|
parseResponse: (res) => ({ rights: res?.rights ?? [] }),
|
|
7
7
|
defaultValue: { rights: [] },
|
|
8
|
-
// setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
9
8
|
});
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvc2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sMkJBQTJCLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsMkJBQTJCLENBQXFDO0lBQ3hHLFFBQVEsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztJQUM5QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldFNlcnZpY2VDb25uZWN0UmlnaHRzUmVzcG9uc2VEdG8gfSBmcm9tICcuL2R0b3MnO1xuaW1wb3J0IHsgc2VydmljZUNvbm5lY3RQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNlcnZpY2VDb25uZWN0RW5kcG9pbnRzIH0gZnJvbSAnLi9zZXJ2aWNlLWNvbm5lY3QuY29uZmlnJztcbmltcG9ydCAnLi9zZXJ2aWNlLWNvbm5lY3QudHlwaW5ncyc7XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlQ29ubmVjdFJpZ2h0c1BsdWdpbiA9IHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeTxHZXRTZXJ2aWNlQ29ubmVjdFJpZ2h0c1Jlc3BvbnNlRHRvPih7XG4gIGVuZHBvaW50OiBbU2VydmljZUNvbm5lY3RFbmRwb2ludHMudXNlclJpZ2h0c10sXG4gIHBhcnNlUmVzcG9uc2U6IChyZXMpID0+ICh7IHJpZ2h0czogcmVzPy5yaWdodHMgPz8gW10gfSksXG4gIGRlZmF1bHRWYWx1ZTogeyByaWdodHM6IFtdIH0sXG59KTtcbiJdfQ==
|
|
@@ -5,10 +5,11 @@ export const ServiceConnnectEnvironments = {
|
|
|
5
5
|
};
|
|
6
6
|
export const ServiceConnectScopes = {
|
|
7
7
|
BASE: 'dcid',
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
PROFILE: 'dcid.profile',
|
|
9
|
+
RIGHTS: 'dcid.rights',
|
|
10
|
+
INSTITUTION: 'dcid.instiution',
|
|
10
11
|
};
|
|
11
12
|
export const ServiceConnectEndpoints = {
|
|
12
13
|
userRights: '/users/me/rights',
|
|
13
14
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvcGx1Z2lucy9zZXJ2aWNlLWNvbm5lY3Qvc3JjL2xpYi9zZXJ2aWNlLWNvbm5lY3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFvQztJQUMxRSxHQUFHLEVBQUUsc0NBQXNDO0lBQzNDLEtBQUssRUFBRSx5Q0FBeUM7SUFDaEQsSUFBSSxFQUFFLGlDQUFpQztDQUN4QyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsSUFBSSxFQUFFLE1BQU07SUFDWixPQUFPLEVBQUUsY0FBYztJQUN2QixNQUFNLEVBQUUsYUFBYTtJQUNyQixXQUFXLEVBQUUsaUJBQWlCO0NBQy9CLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxVQUFVLEVBQUUsa0JBQWtCO0NBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoRW52aXJvbm1lbnQgfSBmcm9tICdAb2R4L2F1dGgnO1xuXG5leHBvcnQgdHlwZSBTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50ID0geyBjdXN0b206IHN0cmluZyB9O1xuZXhwb3J0IGNvbnN0IFNlcnZpY2VDb25ubmVjdEVudmlyb25tZW50czogUmVjb3JkPEF1dGhFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9hcGkudGVzdC5jb25uZWN0LmRyYWVnZXIuY29tJyxcbiAgc3RhZ2U6ICdodHRwczovL2FwaS5zdGFnaW5nLmNvbm5lY3QuZHJhZWdlci5jb20nLFxuICBwcm9kOiAnaHR0cHM6Ly9hcGkuY29ubmVjdC5kcmFlZ2VyLmNvbScsXG59O1xuZXhwb3J0IGNvbnN0IFNlcnZpY2VDb25uZWN0U2NvcGVzID0ge1xuICBCQVNFOiAnZGNpZCcsXG4gIFBST0ZJTEU6ICdkY2lkLnByb2ZpbGUnLFxuICBSSUdIVFM6ICdkY2lkLnJpZ2h0cycsXG4gIElOU1RJVFVUSU9OOiAnZGNpZC5pbnN0aXV0aW9uJyxcbn07XG5leHBvcnQgY29uc3QgU2VydmljZUNvbm5lY3RFbmRwb2ludHMgPSB7XG4gIHVzZXJSaWdodHM6ICcvdXNlcnMvbWUvcmlnaHRzJyxcbn07XG4iXX0=
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { isString, buildUrl } from '@odx/angular/utils';
|
|
2
|
-
import { __awaiter } from 'tslib';
|
|
3
2
|
import * as i0 from '@angular/core';
|
|
4
3
|
import { inject, Directive, Input } from '@angular/core';
|
|
5
4
|
import * as i1 from '@odx/auth';
|
|
6
5
|
import { injectAuthConfig, AuthHttpCache, AuthDirective, authGuard } from '@odx/auth';
|
|
7
|
-
import { defer } from 'rxjs';
|
|
6
|
+
import { defer, map } from 'rxjs';
|
|
8
7
|
|
|
9
8
|
const ServiceConnnectEnvironments = {
|
|
10
9
|
dev: 'https://api.test.connect.draeger.com',
|
|
@@ -13,8 +12,9 @@ const ServiceConnnectEnvironments = {
|
|
|
13
12
|
};
|
|
14
13
|
const ServiceConnectScopes = {
|
|
15
14
|
BASE: 'dcid',
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
PROFILE: 'dcid.profile',
|
|
16
|
+
RIGHTS: 'dcid.rights',
|
|
17
|
+
INSTITUTION: 'dcid.instiution',
|
|
18
18
|
};
|
|
19
19
|
const ServiceConnectEndpoints = {
|
|
20
20
|
userRights: '/users/me/rights',
|
|
@@ -38,25 +38,12 @@ function hasRolesOrRightsHandler(rolesOrRights) {
|
|
|
38
38
|
function serviceConnectPluginFactory(options) {
|
|
39
39
|
return (pluginOptions) => () => {
|
|
40
40
|
var _a, _b;
|
|
41
|
+
(_a = options.setup) === null || _a === void 0 ? void 0 : _a.call(options, pluginOptions);
|
|
41
42
|
const { environment } = injectAuthConfig();
|
|
42
43
|
const httpCache = inject(AuthHttpCache);
|
|
43
|
-
(_a = options.setup) === null || _a === void 0 ? void 0 : _a.call(options);
|
|
44
44
|
const url = buildServiceConnectUrl((_b = pluginOptions === null || pluginOptions === void 0 ? void 0 : pluginOptions.environment) !== null && _b !== void 0 ? _b : environment, ...options.endpoint);
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
const request = new Request(url);
|
|
48
|
-
const token = authService.getAccessToken();
|
|
49
|
-
let result = null;
|
|
50
|
-
if (token) {
|
|
51
|
-
request.headers.set('Authorization', `Bearer ${token}`);
|
|
52
|
-
result = yield httpCache.request(request).then((res) => options.parseResponse(res));
|
|
53
|
-
}
|
|
54
|
-
else if (!authService.isAuthenticated()) {
|
|
55
|
-
yield httpCache.delete(request);
|
|
56
|
-
}
|
|
57
|
-
return (_c = result !== null && result !== void 0 ? result : options.defaultValue) !== null && _c !== void 0 ? _c : {};
|
|
58
|
-
}));
|
|
59
|
-
return plugin;
|
|
45
|
+
const parseResponse = (dto) => { var _a, _b; return (_b = (_a = options.parseResponse(dto)) !== null && _a !== void 0 ? _a : options.defaultValue) !== null && _b !== void 0 ? _b : {}; };
|
|
46
|
+
return () => defer(() => httpCache.request(url, true)).pipe(map((dto) => parseResponse(dto)));
|
|
60
47
|
};
|
|
61
48
|
}
|
|
62
49
|
|
|
@@ -96,7 +83,6 @@ const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
|
96
83
|
endpoint: [ServiceConnectEndpoints.userRights],
|
|
97
84
|
parseResponse: (res) => { var _a; return ({ rights: (_a = res === null || res === void 0 ? void 0 : res.rights) !== null && _a !== void 0 ? _a : [] }); },
|
|
98
85
|
defaultValue: { rights: [] },
|
|
99
|
-
// setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
100
86
|
});
|
|
101
87
|
|
|
102
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.staging.connect.draeger.com',\n prod: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n // RIGHTS: 'dcid-rights', // TODO: enable scope when supported by the CSI team\n // INSTITUTION: 'dcid-instiution', // TODO: enable scope when supported by the CSI team\n};\nexport const ServiceConnectEndpoints = {\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { inject } from '@angular/core';\nimport { AuthHttpCache, AuthPlugin, AuthPluginFactory, injectAuthConfig } from '@odx/auth';\nimport { defer } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: () => void;\n}\n\nexport function serviceConnectPluginFactory<Dto = unknown>(\n options: ServiceConnectPluginFactoryOptions<Dto>,\n): (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory {\n return (pluginOptions) => () => {\n const { environment } = injectAuthConfig();\n const httpCache = inject(AuthHttpCache);\n options.setup?.();\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n\n const plugin: AuthPlugin = (authService) =>\n defer(async () => {\n const request = new Request(url);\n const token = authService.getAccessToken();\n let result = null;\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`);\n\n result = await httpCache.request<Dto>(request).then((res) => options.parseResponse(res));\n } else if (!authService.isAuthenticated()) {\n await httpCache.delete(request);\n }\n\n return result ?? options.defaultValue ?? {};\n });\n\n return plugin;\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[]): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\nimport './service-connect.typings';\n\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n // setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.staging.connect.draeger.com',\n prod: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n PROFILE: 'dcid.profile',\n RIGHTS: 'dcid.rights',\n INSTITUTION: 'dcid.instiution',\n};\nexport const ServiceConnectEndpoints = {\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { inject } from '@angular/core';\nimport { AuthHttpCache, AuthPluginFactory, injectAuthConfig } from '@odx/auth';\nimport { defer, map } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: (pluginOptions?: ServiceConnectPluginOptions) => void;\n}\n\nexport type ServiceConnectPluginFactory = (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory;\n\nexport function serviceConnectPluginFactory<Dto = unknown>(options: ServiceConnectPluginFactoryOptions<Dto>): ServiceConnectPluginFactory {\n return (pluginOptions) => () => {\n options.setup?.(pluginOptions);\n const { environment } = injectAuthConfig();\n const httpCache = inject(AuthHttpCache);\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n const parseResponse = (dto: Dto | null) => options.parseResponse(dto) ?? options.defaultValue ?? {};\n\n return () => defer(() => httpCache.request<Dto>(url, true)).pipe(map((dto) => parseResponse(dto)));\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[]): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\nimport './service-connect.typings';\n\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAGa,MAAA,2BAA2B,GAAoC;AAC1E,IAAA,GAAG,EAAE,sCAAsC;AAC3C,IAAA,KAAK,EAAE,yCAAyC;AAChD,IAAA,IAAI,EAAE,iCAAiC;EACvC;AACW,MAAA,oBAAoB,GAAG;AAClC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,WAAW,EAAE,iBAAiB;EAC9B;AACW,MAAA,uBAAuB,GAAG;AACrC,IAAA,UAAU,EAAE,kBAAkB;;;SCXhB,sBAAsB,CAAC,WAAwD,EAAE,GAAG,SAAmB,EAAA;AACrH,IAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;AACzE,KAAA;IACD,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AACpD;;ACLgB,SAAA,gBAAgB,CAAC,UAAmB,EAAE,aAA4B,EAAA;IAChF,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,OAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AACnI;;ACHM,SAAU,uBAAuB,CAAC,aAA4B,EAAA;IAClE,OAAO,CAAC,MAAM,eAAK,OAAA,gBAAgB,CAAC,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAAE,aAAa,CAAC,CAAA,EAAA,CAAC;AAC3E;;ACcM,SAAU,2BAA2B,CAAgB,OAAgD,EAAA;AACzG,IAAA,OAAO,CAAC,aAAa,KAAK,MAAK;;AAC7B,QAAA,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAA,aAAa,CAAC,CAAC;AAC/B,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnG,MAAM,aAAa,GAAG,CAAC,GAAe,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAA,EAAA,CAAC;AAEpG,QAAA,OAAO,MAAM,KAAK,CAAC,MAAM,SAAS,CAAC,OAAO,CAAM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrG,KAAC,CAAC;AACJ;;MCfa,6BAA6B,CAAA;AAV1C,IAAA,WAAA,GAAA;AAWmB,QAAA,IAAa,CAAA,aAAA,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAMxE;IAJC,IACW,aAAa,CAAC,KAAuC,EAAA;AAC9D,QAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,CAAC,CAAC;KAChF;;0HANU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;8GAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,6BAAA,EAAA,eAAA,CAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iCAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAVzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,0CAA0C;AACpD,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,aAAa;4BACxB,MAAM,EAAE,CAAC,6CAA6C,CAAC;AACxD,yBAAA;AACF,qBAAA;iBACF,CAAA;8BAKY,aAAa,EAAA,CAAA;sBADvB,KAAK;uBAAC,6BAA6B,CAAA;;;ACbtC;AACgB,SAAA,yBAAyB,CAAC,aAA4B,EAAE,UAA2B,EAAA;IACjG,OAAO,SAAS,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;AACvE;;ACFO,MAAM,0BAA0B,GAAG,2BAA2B,CAAqC;AACxG,IAAA,QAAQ,EAAE,CAAC,uBAAuB,CAAC,UAAU,CAAC;IAC9C,aAAa,EAAE,CAAC,GAAG,eAAK,QAAC,EAAE,MAAM,EAAE,CAAA,EAAA,GAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,MAAM,mCAAI,EAAE,EAAE,EAAC,EAAA;AACvD,IAAA,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AAC7B,CAAA;;ACTD;;AAEG;;;;"}
|