@acorex/platform 19.3.0-next.5 → 19.3.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/common/lib/app/index.d.ts +0 -1
- package/common/lib/common.module.d.ts +1 -1
- package/common/lib/configs/app.config.d.ts +12 -3
- package/common/lib/home-page/home-page.service.d.ts +6 -0
- package/common/lib/layout/logo/logo.component.d.ts +4 -0
- package/common/lib/settings/settings.service.d.ts +4 -1
- package/common/lib/utils/regional-util.service.d.ts +2 -2
- package/common/lib/utils/regional.types.d.ts +6 -16
- package/core/lib/index.d.ts +1 -0
- package/{common/lib/app → core/lib/startup}/app-startup.service.d.ts +1 -5
- package/core/lib/startup/app-startup.types.d.ts +6 -0
- package/core/lib/startup/index.d.ts +2 -0
- package/core/lib/types/logo.types.d.ts +5 -9
- package/fesm2022/acorex-platform-auth.mjs +5 -1
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +130 -85
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +42 -13
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +17 -0
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +2 -2
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +44 -20
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-search.mjs +4 -3
- package/fesm2022/acorex-platform-layout-search.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-setting.mjs +5 -4
- package/fesm2022/acorex-platform-layout-setting.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-CuyWAi6X.mjs → acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs} +5 -4
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +18 -20
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +22 -18
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +770 -123
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/context-store.service.d.ts +2 -1
- package/layout/builder/lib/builder/widget-base.component.d.ts +1 -0
- package/layout/builder/lib/builder/widget-container.component.d.ts +1 -0
- package/layout/builder/lib/builder/widget-map.d.ts +1 -0
- package/layout/builder/lib/builder/widget-renderer.directive.d.ts +1 -0
- package/layout/entity/lib/entity-master-single.viewmodel.d.ts +1 -0
- package/layout/entity/lib/entity.module.d.ts +1 -1
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.d.ts +1 -1
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +1 -0
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.d.ts +0 -5
- package/layout/search/lib/search.module.d.ts +1 -1
- package/layout/setting/lib/settings.module.d.ts +1 -1
- package/package.json +4 -2
- package/themes/default/lib/layouts/root-layout/components/header/header.component.d.ts +12 -3
- package/themes/default/lib/layouts/root-layout/horizontal/horizontal-layout.component.d.ts +12 -6
- package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +2 -1
- package/themes/default/lib/layouts/root-layout/vertical/vertical-layout.component.d.ts +14 -5
- package/themes/shared/lib/shared.module.d.ts +1 -1
- package/widgets/lib/widgets/charts/bar-chart/bar-chart-widget.component.d.ts +31 -0
- package/widgets/lib/widgets/charts/gauge-chart/gauge-chart-widget.component.d.ts +18 -12
- package/widgets/lib/widgets/charts/index.d.ts +11 -0
- package/widgets/lib/widgets/charts/line-chart/index.d.ts +3 -0
- package/widgets/lib/widgets/charts/line-chart/line-chart-widget.component.d.ts +76 -0
- package/widgets/lib/widgets/charts/line-chart/line-chart-widget.config.d.ts +7 -0
- package/widgets/lib/widgets/charts/line-chart/line-chart.type.d.ts +41 -0
- package/widgets/lib/widgets/charts/shared/index.d.ts +3 -0
- package/widgets/lib/widgets/charts/weather/index.d.ts +0 -1
- package/widgets/lib/widgets/index.d.ts +3 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CuyWAi6X.mjs.map +0 -1
- package/widgets/lib/widgets/charts/weather/weather.module.d.ts +0 -11
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { AXPAppStartUpService } from '@acorex/platform/core';
|
|
1
2
|
import { ModuleWithProviders } from '@angular/core';
|
|
2
|
-
import { AXPAppStartUpService } from './app/app-startup.service';
|
|
3
3
|
import { AXPErrorHandler } from './errors';
|
|
4
4
|
import { AXPSettingService } from './settings';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -6,9 +6,18 @@ export interface AXPPlatformConfigs {
|
|
|
6
6
|
title?: string;
|
|
7
7
|
copyright?: string;
|
|
8
8
|
logo?: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
icon: {
|
|
10
|
+
light: AXPLogoConfig;
|
|
11
|
+
dark: AXPLogoConfig;
|
|
12
|
+
};
|
|
13
|
+
text: {
|
|
14
|
+
light: AXPLogoConfig;
|
|
15
|
+
dark: AXPLogoConfig;
|
|
16
|
+
};
|
|
17
|
+
full: {
|
|
18
|
+
light: AXPLogoConfig;
|
|
19
|
+
dark: AXPLogoConfig;
|
|
20
|
+
};
|
|
12
21
|
};
|
|
13
22
|
network?: {
|
|
14
23
|
timeOut?: number;
|
|
@@ -7,6 +7,9 @@ export declare class AXPHomePageService {
|
|
|
7
7
|
private candidates;
|
|
8
8
|
private settingsService;
|
|
9
9
|
private sessionService;
|
|
10
|
+
private injector;
|
|
11
|
+
private originalConfig;
|
|
12
|
+
private loginPath;
|
|
10
13
|
private get flatCandidates();
|
|
11
14
|
constructor();
|
|
12
15
|
private init;
|
|
@@ -19,6 +22,9 @@ export declare class AXPHomePageService {
|
|
|
19
22
|
};
|
|
20
23
|
private findPath;
|
|
21
24
|
private buildFullPaths;
|
|
25
|
+
private refreshRoutes;
|
|
26
|
+
private applyMergedConfig;
|
|
27
|
+
navigateTo(): Promise<void>;
|
|
22
28
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPHomePageService, never>;
|
|
23
29
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXPHomePageService>;
|
|
24
30
|
}
|
|
@@ -2,7 +2,11 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
export declare class AXPLogoComponent {
|
|
3
3
|
source: any;
|
|
4
4
|
protected logoType: string;
|
|
5
|
+
private platform;
|
|
5
6
|
ngOnInit(): void;
|
|
7
|
+
ngOnChanges(): void;
|
|
8
|
+
protected setLogoType(): void;
|
|
9
|
+
protected setLogoTheme(): void;
|
|
6
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPLogoComponent, never>;
|
|
7
11
|
static ɵcmp: i0.ɵɵComponentDeclaration<AXPLogoComponent, "axp-logo", never, { "source": { "alias": "source"; "required": false; }; }, {}, never, never, true, never>;
|
|
8
12
|
}
|
|
@@ -12,9 +12,12 @@ export declare class AXPSettingService implements AXPSettingServiceInterface {
|
|
|
12
12
|
private readonly providers;
|
|
13
13
|
private readonly injector;
|
|
14
14
|
private readonly eventService;
|
|
15
|
-
private
|
|
15
|
+
private readonly sessionService;
|
|
16
|
+
private readonly scopedSettingsCache;
|
|
16
17
|
readonly onChanged: Subject<AXPSettingChangedEvent>;
|
|
18
|
+
readonly onLoaded: Subject<void>;
|
|
17
19
|
constructor();
|
|
20
|
+
reload(): Promise<void>;
|
|
18
21
|
load(): Promise<AXPSettingValue[]>;
|
|
19
22
|
get<T = any>(key: string): Promise<T>;
|
|
20
23
|
defaultValues(scope: AXPPlatformScope): Promise<Record<string, unknown>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AXPCity, AXPCountry, AXPCurrency, AXPLanguage,
|
|
1
|
+
import { AXPCity, AXPCountry, AXPCurrency, AXPLanguage, AXPLocaleProfile, AXPProvince, AXPTimeZone } from './regional.types';
|
|
2
2
|
export declare abstract class AXPRegionalService {
|
|
3
3
|
abstract getCountries(): Promise<AXPCountry[]>;
|
|
4
4
|
abstract getProvinces(countryId?: string): Promise<AXPProvince[]>;
|
|
@@ -7,7 +7,7 @@ export declare abstract class AXPRegionalService {
|
|
|
7
7
|
provinceId?: string;
|
|
8
8
|
}): Promise<AXPCity[]>;
|
|
9
9
|
abstract getCurrencies(): Promise<AXPCurrency[]>;
|
|
10
|
-
abstract
|
|
10
|
+
abstract getLocaleProfiles(): Promise<AXPLocaleProfile[]>;
|
|
11
11
|
abstract getLanguages(): Promise<AXPLanguage[]>;
|
|
12
12
|
abstract getAvailableLanguages(): Promise<AXPLanguage[]>;
|
|
13
13
|
abstract getBrowserTimeZoneCode(): Promise<string>;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import { AXLocaleProfile } from "@acorex/core/locale";
|
|
2
|
+
export interface AXPLocaleProfile extends AXLocaleProfile {
|
|
3
|
+
code: string;
|
|
4
|
+
title: string;
|
|
5
|
+
nativeTitle: string;
|
|
6
|
+
}
|
|
1
7
|
export interface AXPLanguage {
|
|
2
8
|
code: string;
|
|
3
9
|
title: string;
|
|
@@ -37,19 +43,3 @@ export interface AXPCurrency {
|
|
|
37
43
|
symbol: string;
|
|
38
44
|
format: string;
|
|
39
45
|
}
|
|
40
|
-
export interface AXPRegionalFormat {
|
|
41
|
-
locale: string;
|
|
42
|
-
title: string;
|
|
43
|
-
dateFormat: {
|
|
44
|
-
short: string;
|
|
45
|
-
long: string;
|
|
46
|
-
};
|
|
47
|
-
timeFormat: {
|
|
48
|
-
short: string;
|
|
49
|
-
long: string;
|
|
50
|
-
};
|
|
51
|
-
numberFormat: string;
|
|
52
|
-
calendar: string;
|
|
53
|
-
currency: string;
|
|
54
|
-
layout: string;
|
|
55
|
-
}
|
package/core/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
+
import { AXPStartUpTask } from './app-startup.types';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
|
-
export interface AXPStartUpTask {
|
|
3
|
-
name: string;
|
|
4
|
-
statusText: string;
|
|
5
|
-
run: () => Promise<void>;
|
|
6
|
-
}
|
|
7
3
|
export declare class AXPAppStartUpService {
|
|
8
4
|
private tasks;
|
|
9
5
|
registerTask(task: AXPStartUpTask): void;
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { Type } from '@angular/core';
|
|
2
2
|
export interface AXPLogoConfig {
|
|
3
3
|
}
|
|
4
|
-
export declare class AXPTextLogoConfig implements AXPLogoConfig {
|
|
5
|
-
text: string;
|
|
6
|
-
constructor(text: string);
|
|
7
|
-
}
|
|
8
4
|
export declare class AXPImageUrlLogoConfig implements AXPLogoConfig {
|
|
9
5
|
url: string;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
iconClass: Type<any>;
|
|
14
|
-
constructor(iconClass: Type<any>);
|
|
6
|
+
width?: number | undefined;
|
|
7
|
+
height?: number | undefined;
|
|
8
|
+
constructor(url: string, width?: number | undefined, height?: number | undefined);
|
|
15
9
|
}
|
|
16
10
|
export declare class AXPComponentLogoConfig implements AXPLogoConfig {
|
|
17
11
|
component: Type<any>;
|
|
12
|
+
height?: number | undefined;
|
|
13
|
+
width?: number | undefined;
|
|
18
14
|
constructor(component: Type<any>);
|
|
19
15
|
}
|
|
@@ -285,6 +285,9 @@ class AXPSessionService {
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
async signin(credentials) {
|
|
288
|
+
//
|
|
289
|
+
this.clearSession();
|
|
290
|
+
//
|
|
288
291
|
const strategy = this.authStrategyRegistry.get(credentials.strategy);
|
|
289
292
|
if (!strategy) {
|
|
290
293
|
throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);
|
|
@@ -320,9 +323,10 @@ class AXPSessionService {
|
|
|
320
323
|
}
|
|
321
324
|
}
|
|
322
325
|
//
|
|
326
|
+
const userId = this.user?.id;
|
|
323
327
|
this.clearSession();
|
|
324
328
|
this.status.next(AXPSessionStatus.SignedOut);
|
|
325
|
-
this.eventService.publish(AXPSessionStatus.SignedOut, { id:
|
|
329
|
+
this.eventService.publish(AXPSessionStatus.SignedOut, { id: userId });
|
|
326
330
|
}
|
|
327
331
|
async refreshToken() {
|
|
328
332
|
return new Promise(async (resolve, reject) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-auth.mjs","sources":["../../../../libs/platform/auth/src/lib/application/application.loader.ts","../../../../libs/platform/auth/src/lib/tenant/tenant.loader.ts","../../../../libs/platform/auth/src/lib/auth-registry.service.ts","../../../../libs/platform/auth/src/lib/feature/feature.loader.ts","../../../../libs/platform/auth/src/lib/feature/feature.directive.ts","../../../../libs/platform/auth/src/lib/errors.types.ts","../../../../libs/platform/auth/src/lib/feature/feature.guard.ts","../../../../libs/platform/auth/src/lib/permission/permission.loader.ts","../../../../libs/platform/auth/src/lib/session.types.ts","../../../../libs/platform/auth/src/lib/session.service.ts","../../../../libs/platform/auth/src/lib/permission/permission.directive.ts","../../../../libs/platform/auth/src/lib/permission/permission.guard.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.builder.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.service.ts","../../../../libs/platform/auth/src/lib/auth.guard.ts","../../../../libs/platform/auth/src/lib/auth.module.ts","../../../../libs/platform/auth/src/acorex-platform-auth.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPApplication } from './application.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPApplicationLoader {\n getList(context: AXPSessionContext): Observable<AXPApplication[]>;\n}\n\nexport const AXP_APPLICATION_LOADER = new InjectionToken<AXPApplicationLoader>('AXP_APPLICATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPApplicationDefaultLoader();\n },\n});\n\nclass AXPApplicationDefaultLoader implements AXPApplicationLoader {\n getList(context: AXPSessionContext): Observable<AXPApplication[]> {\n return of([\n {\n id: '1',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n ]);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPTenant } from './tenant.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPTenantLoader {\n getList(context: AXPSessionContext): Observable<AXPTenant[]>;\n}\n\nexport const AXP_TENANT_LOADER = new InjectionToken<AXPTenantLoader>('AXP_TENANT_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPTenantDefaultLoader();\n },\n});\n\nclass AXPTenantDefaultLoader implements AXPTenantLoader {\n\n getList(context: AXPSessionContext): Observable<AXPTenant[]> {\n return of([\n {\n id: '1',\n name: 'default-tenant',\n title: 'Default Tenant',\n },\n ]);\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPAuthStrategy } from \"./auth.strategy\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPAuthStrategyRegistryService {\n private strategies = new Map<string, AXPAuthStrategy>();\n\n private injector: Injector;\n\n constructor(injector: Injector) {\n this.injector = injector;\n }\n\n register(...plugins: (new () => AXPAuthStrategy)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const strategy = childInjector.get(t);\n if (strategy) {\n this.strategies.set(strategy.name, strategy);\n }\n })\n }\n\n get(strategyKey: string): AXPAuthStrategy | undefined {\n return this.strategies.get(strategyKey);\n }\n}","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPFeature } from './feature.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPFeatureLoader {\n getList(context: AXPSessionContext): Observable<AXPFeature[]>;\n}\n\nexport const AXP_FEATURE_LOADER = new InjectionToken<AXPFeatureLoader>('AXP_FEATURE_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPFeatureDefaultLoader();\n },\n});\n\nclass AXPFeatureDefaultLoader implements AXPFeatureLoader {\n getList(context: AXPSessionContext): Observable<AXPFeature[]> {\n return of([]);\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n selector: '[feature]',\n standalone: false\n})\nexport class AXPFeatureDirective {\n private hasView = signal(false);\n private subscription!: Subscription;\n private sessionService = inject(AXPSessionService);\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef\n ) { }\n\n @Input()\n public set feature(featureKeys: string | string[] | null) {\n const keys: string[] = !featureKeys ? [] : (Array.isArray(featureKeys) ? featureKeys : [featureKeys]);\n if (keys.length == 0) {\n // If featureKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.features$\n //.pipe(first())\n .subscribe(() => {\n if (this.sessionService.isFeatureEnabled(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n } else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n\n @Input()\n public set featureElse(elseTemplateRef: TemplateRef<any>) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","export class AXPUnauthorizedError extends Error {\n constructor(message?: string, public data?: { redirectUrl?: string }) {\n super(message);\n this.name = 'AXPUnauthorizedError';\n }\n}\n\n\nexport class AXPUnauthenticatedError extends Error {\n constructor(message?: string, public data?: { redirectUrl?: string }) {\n super(message);\n this.name = 'AXPUnauthenticatedError';\n }\n}","import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot, UrlTree } from \"@angular/router\";\nimport { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nimport { Observable, first, map } from \"rxjs\";\nimport { AXPUnauthorizedError } from \"../errors.types\";\n\n\nexport const AXPFeatureGuard: CanActivateFn =\n (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> => {\n const sessionService = inject(AXPSessionService);\n const requiredFeatures = route.data['requiredFeature'] as (string | string[] | null);\n\n return sessionService.features$.pipe(\n map(() => {\n const keys: string[] = !requiredFeatures ? [] : (Array.isArray(requiredFeatures) ? requiredFeatures : [requiredFeatures]);\n const hasFeature = keys.length == 0 || sessionService.isFeatureEnabled(...keys);\n if (!hasFeature) {\n throw new AXPUnauthorizedError(\n `Access Denied. You do not have access to this feature. Required feature(s): ${keys.join(', ')}. Please contact support if you need access.`,\n {\n redirectUrl: state.url\n }\n );\n }\n return true;\n })\n );\n };\n","import { InjectionToken } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { AXPPermission } from \"./permission.types\";\nimport { AXPSessionContext } from \"../session.types\";\n\nexport interface AXPPermissionLoader {\n getList(context: AXPSessionContext): Observable<AXPPermission[]>;\n}\n\nexport const AXP_PERMISSION_LOADER = new InjectionToken<AXPPermissionLoader>('AXP_PERMISSION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPPermissionDefaultLoader();\n }\n});\n\n\nclass AXPPermissionDefaultLoader implements AXPPermissionLoader {\n getList(context: AXPSessionContext): Observable<AXPPermission[]> {\n return of([])\n }\n}","import { AXPApplication } from \"./application/application.types\";\nimport { AXPTenant } from \"./tenant/tenant.types\";\nimport { AXPUser } from \"./user/user.types\";\n\nexport class AXPSessionContext {\n\n private _user: AXPUser | null = null;\n public get user(): AXPUser | null {\n return this._user;\n }\n\n private _tenant: AXPTenant | null = null;\n public get tenant(): AXPTenant | null {\n return this._tenant;\n }\n\n private _application: AXPApplication | null = null;\n public get application(): AXPApplication | null {\n return this._application;\n }\n\n constructor(context: {\n user: AXPUser | null,\n tenant: AXPTenant | null,\n application: AXPApplication | null,\n }) {\n this._user = context.user;\n this._tenant = context.tenant;\n this._application = context.application;\n }\n}\n\n\nexport enum AXPSessionStatus {\n Authenticated = \"authenticated\",\n Unauthenticated = \"unauthenticated\",\n Unauthorized = \"unauthorized\",\n Authorized = \"authorized\",\n Expired = \"expired\",\n SignedOut = \"signedOut\"\n}","import { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, defaultIfEmpty, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { AXP_APPLICATION_LOADER } from './application/application.loader';\nimport { AXPApplication } from './application/application.types';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPBaseCredentials, AXPSessionData } from './auth.strategy';\nimport { AXPFeature, AXP_FEATURE_LOADER } from './feature';\nimport { AXP_PERMISSION_LOADER } from './permission/permission.loader';\nimport { AXPPermission } from './permission/permission.types';\nimport { AXPSessionContext, AXPSessionStatus } from './session.types';\nimport { AXP_TENANT_LOADER } from './tenant/tenant.loader';\nimport { AXPTenant } from './tenant/tenant.types';\nimport { AXPUser } from './user/user.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSessionService {\n private eventService = inject(AXPBroadcastEventService);\n\n private authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n public static readonly SESSION_KEY = 'AXP_SESSION';\n\n private readonly permissionLoader = inject(AXP_PERMISSION_LOADER);\n private readonly featureLoader = inject(AXP_FEATURE_LOADER);\n private readonly tenantLoader = inject(AXP_TENANT_LOADER);\n private readonly applicationLoader = inject(AXP_APPLICATION_LOADER);\n\n private status = new BehaviorSubject<AXPSessionStatus>(AXPSessionStatus.Unauthenticated);\n public readonly status$ = this.status.asObservable().pipe(shareReplay(1));\n\n private currentUserSubject = new BehaviorSubject<AXPUser | null>(null);\n public readonly user$ = this.currentUserSubject.asObservable().pipe(shareReplay(1));\n public get user(): AXPUser | null {\n const session = this.getSessionData();\n if (session?.user && !this.currentUserSubject.value) {\n this.currentUserSubject.next(session.user);\n }\n return this.currentUserSubject.value;\n }\n\n private currentTenantSubject = new BehaviorSubject<AXPTenant | null>(null);\n public readonly tenant$ = this.currentTenantSubject.asObservable().pipe(shareReplay(1));\n public get tenant(): AXPTenant | null {\n const session = this.getSessionData();\n if (session?.tenant && !this.currentTenantSubject.value) {\n this.currentTenantSubject.next(session.tenant);\n }\n return this.currentTenantSubject.value;\n }\n\n public get tenants$(): Observable<AXPTenant[]> {\n return this.tenantLoader.getList(this.getContext());\n }\n\n private currentApplicationSubject = new BehaviorSubject<AXPApplication | null>(null);\n public readonly application$ = this.currentApplicationSubject.asObservable().pipe(shareReplay(1));\n public get application(): AXPApplication | null {\n const session = this.getSessionData();\n if (session?.application && !this.currentApplicationSubject.value) {\n this.currentApplicationSubject.next(session.application);\n }\n return this.currentApplicationSubject.value;\n }\n\n public get applications$(): Observable<AXPApplication[]> {\n return this.applicationLoader.getList(this.getContext());\n }\n\n private permissionsSubject = new BehaviorSubject<AXPPermission[]>([]);\n public readonly permissions$ = this.permissionsSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n public get permissions(): AXPPermission[] {\n return this.permissionsSubject.value ?? [];\n }\n\n private featuresSubject = new BehaviorSubject<AXPFeature[]>([]);\n public readonly features$ = this.featuresSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n public get features(): AXPFeature[] {\n return this.featuresSubject.value ?? [];\n }\n\n public readonly isAuthenticated$ = this.status$.pipe(\n map((status) => status === AXPSessionStatus.Authenticated || status === AXPSessionStatus.Authorized),\n shareReplay(1)\n );\n\n public readonly isAuthorized$ = this.status$.pipe(\n map((status) => status === AXPSessionStatus.Authorized),\n shareReplay(1)\n );\n\n public async restoreSession(): Promise<void> {\n const sessionData = this.getSessionData();\n if (sessionData) {\n if (sessionData.user) {\n this.currentUserSubject.next(sessionData.user);\n this.status.next(AXPSessionStatus.Authenticated);\n }\n // if (sessionData.tenant) {\n // this.setTenant(sessionData.tenant);\n // }\n // if (sessionData.application) {\n // this.setApplication(sessionData.application);\n // }\n await this.loadPermissions();\n await this.loadFeatures();\n await this.signInComplete();\n } else {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n }\n\n async signin(credentials: AXPBaseCredentials): Promise<void> {\n const strategy = this.authStrategyRegistry.get(credentials.strategy);\n if (!strategy) {\n throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);\n }\n const result = await strategy.signin(credentials);\n if (result.succeed) {\n this.currentUserSubject.next(result.data!.user);\n this.setSession({\n accessToken: result.data!.accessToken,\n refreshToken: result.data!.refreshToken,\n strategy: credentials.strategy,\n user: result.data!.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n this.status.next(AXPSessionStatus.Authenticated);\n if (this.application && this.tenant) await this.signInComplete();\n } else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n\n async signout(): Promise<void> {\n const sessionData = this.getSessionData();\n if (sessionData?.strategy) {\n const strategy = this.authStrategyRegistry.get(sessionData?.strategy);\n if (strategy) {\n await strategy.signout();\n }\n }\n //\n this.clearSession();\n this.status.next(AXPSessionStatus.SignedOut);\n this.eventService.publish(AXPSessionStatus.SignedOut, { id: this.user?.id });\n }\n\n async refreshToken(): Promise<any> {\n return new Promise(async (resolve, reject) => {\n const sessionData = this.getSessionData();\n if (!sessionData || !sessionData?.refreshToken) {\n return;\n }\n const strategy = this.authStrategyRegistry.get(sessionData.strategy);\n if (!strategy) {\n reject();\n throw new Error(`Authentication strategy '${sessionData.strategy}' is not found`);\n }\n const result = await strategy.refreshToken(this.getContext());\n if (result.succeed) {\n this.setSession(result.data as AXPSessionData);\n resolve(result.data?.accessToken);\n } else {\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n }\n });\n }\n\n async setTenant(tenant: AXPTenant | null): Promise<void> {\n this.currentTenantSubject.next(tenant);\n if (tenant) {\n this.updateSession({ tenant: tenant });\n await this.refreshToken();\n }\n }\n\n async setApplication(application: AXPApplication | null): Promise<void> {\n this.currentApplicationSubject.next(application);\n if (application) {\n this.updateSession({ application: application });\n await this.refreshToken();\n await this.loadPermissions();\n await this.loadFeatures();\n }\n }\n\n private async loadPermissions(): Promise<void> {\n try {\n const permissions = await firstValueFrom(this.permissionLoader.getList(this.getContext()));\n this.permissionsSubject.next(permissions ?? []);\n } catch (error) {\n console.error('Error loading permissions:', error);\n this.permissionsSubject.next([]);\n }\n }\n\n private async loadFeatures(): Promise<void> {\n try {\n const features = await firstValueFrom(this.featureLoader.getList(this.getContext()));\n this.featuresSubject.next(features ?? []);\n } catch (error) {\n console.error('Error loading features:', error);\n this.featuresSubject.next([]);\n }\n }\n\n async signInComplete() {\n this.status.next(AXPSessionStatus.Authorized);\n }\n\n private setSession(tokens: Partial<AXPSessionData>): void {\n const sessionData: Partial<AXPSessionData> = {\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n strategy: tokens.strategy,\n user: this.user,\n application: tokens.application,\n tenant: tokens.tenant,\n expiresIn: tokens.expiresIn,\n idToken: tokens.idToken,\n };\n this.updateSession(sessionData);\n }\n\n private updateSession(update: Partial<AXPSessionData>) {\n const currentSession = this.getSessionData() ?? {};\n const updatedSession = merge({}, currentSession, update);\n localStorage.setItem(AXPSessionService.SESSION_KEY, JSON.stringify(updatedSession));\n }\n\n public getSessionData(): AXPSessionData | null {\n const sessionDataString = localStorage.getItem(AXPSessionService.SESSION_KEY);\n return sessionDataString ? JSON.parse(sessionDataString) : null;\n }\n\n private clearSession(): void {\n //\n this.currentUserSubject.next(null);\n //\n this.setTenant(null);\n //\n this.setApplication(null);\n //\n this.permissionsSubject.next([]);\n //\n this.featuresSubject.next([]);\n //\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n }\n\n public authorize(...keys: string[]): boolean {\n return keys.every((k) => isEmpty(k) || this.permissions.indexOf(k) > -1);\n }\n\n public isFeatureEnabled(...keys: string[]): boolean {\n return keys.every((k) => isEmpty(k) || this.features.some((c) => c.name == k && c.value == true));\n }\n\n public getToken(): string | undefined {\n const sessionData = this.getSessionData();\n\n return sessionData?.accessToken;\n }\n\n private checkTokenValidation(): boolean {\n let sessionData = this.getSessionData();\n\n if (sessionData && sessionData?.accessToken && sessionData.expiresIn) {\n const expiresInDate = new Date(sessionData.expiresIn);\n if (expiresInDate > new Date()) {\n // Token is still valid\n return true;\n }\n }\n return false;\n }\n\n private getContext(): AXPSessionContext {\n return new AXPSessionContext({\n user: this.user,\n tenant: this.tenant,\n application: this.application,\n });\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n selector: '[permission]',\n standalone: false\n})\nexport class AXPPermissionDirective {\n private hasView = signal(false);\n private subscription!: Subscription;\n private sessionService = inject(AXPSessionService);\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef\n ) { }\n\n @Input()\n public set permission(permissionKeys: string | string[] | null) {\n const keys: string[] = !permissionKeys ? [] : (Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys]);\n if (keys.length == 0) {\n // If permissionKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.isAuthorized$\n .subscribe((isAuthorized) => {\n if (isAuthorized && this.sessionService.authorize(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n } else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n\n @Input()\n public set permissionElse(elseTemplateRef: TemplateRef<any>) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map, tap } from 'rxjs';\nimport { AXPUnauthorizedError } from '../errors.types';\nimport { AXPSessionService } from '../session.service';\n\nexport const AXPPermissionGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n\n const sessionService = inject(AXPSessionService);\n\n const permissionKeys = route.data['requiredPermission'] as string | string[] | null;\n\n return sessionService.isAuthorized$.pipe(\n first(),\n map((value) => {\n const keys: string[] = !permissionKeys ? [] : Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];\n const hasPermission = keys.length == 0 || sessionService.authorize(...keys);\n if (!hasPermission) {\n throw new AXPUnauthorizedError(\n `Access denied. Required permissions: ${keys.join(', ')}. Please contact your administrator if you believe this is an error.`,\n {\n redirectUrl: state.url\n }\n );\n }\n return true;\n })\n );\n};\n","import { AXPSystemActions } from \"@acorex/platform/core\";\nimport { AXPPermissionDefinition, AXPPermissionGroupDefinition } from \"./permission.types\";\n\n\nexport class AXPPermissionDefinitionProviderContext {\n private builders: Map<string, AXPPermissionDefinitionGroupBuilder> = new Map();\n\n addGroup(name: string, title: string, description?: string): AXPPermissionDefinitionGroupBuilder {\n const group: AXPPermissionGroupDefinition = {\n name,\n title,\n description,\n permissions: []\n };\n const builder = new AXPPermissionDefinitionGroupBuilder(this, group);\n this.builders.set(name, builder);\n return builder;\n }\n\n getGroupDefinitions(): AXPPermissionGroupDefinition[] {\n return Array.from(this.builders.values()).map(b => b.group);\n }\n\n findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n return this.builders.get(name);\n }\n}\n\n\n\nexport class AXPPermissionDefinitionGroupBuilder {\n private context: AXPPermissionDefinitionProviderContext;\n private _group: AXPPermissionGroupDefinition;\n\n public get group(): AXPPermissionGroupDefinition {\n return this._group;\n }\n\n constructor(context: AXPPermissionDefinitionProviderContext, group: AXPPermissionGroupDefinition) {\n this.context = context;\n this._group = group;\n }\n\n addPermission(name: string, title: string, description: string): AXPPermissionDefinitionBuilder {\n const permission: AXPPermissionDefinition = {\n name,\n title,\n description,\n children: []\n };\n this._group.permissions.push(permission);\n return new AXPPermissionDefinitionBuilder(this, permission);\n }\n\n\n \n\n endGroup(): AXPPermissionDefinitionProviderContext {\n return this.context;\n }\n\n findPermission(path: string): AXPPermissionDefinition | undefined {\n return undefined;\n }\n\n findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n return undefined;\n }\n\n}\n\nexport class AXPPermissionDefinitionBuilder {\n private groupBuilder: AXPPermissionDefinitionGroupBuilder;\n private permission: AXPPermissionDefinition;\n\n constructor(groupBuilder: AXPPermissionDefinitionGroupBuilder, permission: AXPPermissionDefinition) {\n this.groupBuilder = groupBuilder;\n this.permission = permission;\n }\n\n addChild(name: string, title: string, description: string): AXPPermissionDefinitionBuilder {\n const permission: AXPPermissionDefinition = {\n name,\n title,\n description,\n children: []\n };\n this.permission.children.push(permission);\n return this;\n }\n\n\n endPermission(): AXPPermissionDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPPermissionDefinition, AXPPermissionGroupDefinition } from './permission.types';\nimport { AXPPermissionDefinitionProviderContext } from './permission-definition.builder';\n\n\n\nexport interface AXPPermissionDefinitionProvider {\n define(context: AXPPermissionDefinitionProviderContext): Promise<void>;\n}\n\nexport const AXP_PERMISSION_DEFINITION_PROVIDER = new InjectionToken<AXPPermissionDefinitionProvider[]>('AXP_PERMISSION_DEFINITION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return [];\n }\n});\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXPPermissionDefinitionService {\n private providers = inject(AXP_PERMISSION_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPPermissionGroupDefinition[] | null = null;\n\n\n private async load(): Promise<void> {\n if (this.cache) {\n return\n }\n const context = new AXPPermissionDefinitionProviderContext();\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.define(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.define(context);\n }\n }\n }\n this.cache = context.getGroupDefinitions();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getGroups(): Promise<AXPPermissionGroupDefinition[]> {\n await this.load();\n return this.cache ?? [];\n }\n\n public async getPermissions(): Promise<AXPPermissionDefinition[]> {\n await this.load();\n return this.cache?.flatMap(g => g.permissions) ?? [];\n }\n\n public async getGroup(name: string): Promise<AXPPermissionGroupDefinition | null> {\n await this.load();\n return this.cache?.find(g => g.name === name) ?? null;\n }\n\n public async getPermission(name: string): Promise<AXPPermissionDefinition | null> {\n await this.load();\n return this.cache?.find(g => g.permissions.find(p => p.name === name))?.permissions.find(p => p.name === name) ?? null;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthenticatedError } from './errors.types';\nimport { AXPSessionService } from './session.service';\n\nexport const AXPAuthGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const sessionService = inject(AXPSessionService);\n return sessionService.isAuthenticated$.pipe(\n first(),\n map((value) => {\n if (value) {\n return true;\n }\n throw new AXPUnauthenticatedError(\n `Access denied. You are not currently logged in. Please log in to access this page. If you continue to see this message after logging in, please contact support.`,\n {\n redirectUrl: state.url,\n }\n );\n })\n );\n};\n","import { Inject, ModuleWithProviders, NgModule, Optional, inject, provideAppInitializer } from '@angular/core';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPAuthStrategy } from './auth.strategy';\nimport { AXPFeatureDirective } from './feature';\nimport { AXPPermissionDirective } from './permission/permission.directive';\nimport { AXPSessionService } from './session.service';\n\nexport interface AXPAuthModuleConfigs {\n strategies: (new () => AXPAuthStrategy)[];\n}\n\nexport function initializeAppState(service: AXPSessionService) {\n return async () => {\n try {\n await service.restoreSession();\n } catch (error) {\n console.error(error);\n }\n };\n}\n\n@NgModule({\n imports: [],\n exports: [AXPPermissionDirective, AXPFeatureDirective],\n declarations: [AXPPermissionDirective, AXPFeatureDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = (initializeAppState)(inject(AXPSessionService));\n return initializerFn();\n }),\n ],\n})\nexport class AXPAuthModule {\n static forRoot(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(@Optional() @Inject('AXPAuthModuleFactory') instances: any[]) {\n instances?.forEach((f) => {\n f();\n });\n }\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":"acorex-platform-auth.mjs","sources":["../../../../libs/platform/auth/src/lib/application/application.loader.ts","../../../../libs/platform/auth/src/lib/tenant/tenant.loader.ts","../../../../libs/platform/auth/src/lib/auth-registry.service.ts","../../../../libs/platform/auth/src/lib/feature/feature.loader.ts","../../../../libs/platform/auth/src/lib/feature/feature.directive.ts","../../../../libs/platform/auth/src/lib/errors.types.ts","../../../../libs/platform/auth/src/lib/feature/feature.guard.ts","../../../../libs/platform/auth/src/lib/permission/permission.loader.ts","../../../../libs/platform/auth/src/lib/session.types.ts","../../../../libs/platform/auth/src/lib/session.service.ts","../../../../libs/platform/auth/src/lib/permission/permission.directive.ts","../../../../libs/platform/auth/src/lib/permission/permission.guard.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.builder.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.service.ts","../../../../libs/platform/auth/src/lib/auth.guard.ts","../../../../libs/platform/auth/src/lib/auth.module.ts","../../../../libs/platform/auth/src/acorex-platform-auth.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPApplication } from './application.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPApplicationLoader {\n getList(context: AXPSessionContext): Observable<AXPApplication[]>;\n}\n\nexport const AXP_APPLICATION_LOADER = new InjectionToken<AXPApplicationLoader>('AXP_APPLICATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPApplicationDefaultLoader();\n },\n});\n\nclass AXPApplicationDefaultLoader implements AXPApplicationLoader {\n getList(context: AXPSessionContext): Observable<AXPApplication[]> {\n return of([\n {\n id: '1',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n ]);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPTenant } from './tenant.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPTenantLoader {\n getList(context: AXPSessionContext): Observable<AXPTenant[]>;\n}\n\nexport const AXP_TENANT_LOADER = new InjectionToken<AXPTenantLoader>('AXP_TENANT_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPTenantDefaultLoader();\n },\n});\n\nclass AXPTenantDefaultLoader implements AXPTenantLoader {\n\n getList(context: AXPSessionContext): Observable<AXPTenant[]> {\n return of([\n {\n id: '1',\n name: 'default-tenant',\n title: 'Default Tenant',\n },\n ]);\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPAuthStrategy } from \"./auth.strategy\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPAuthStrategyRegistryService {\n private strategies = new Map<string, AXPAuthStrategy>();\n\n private injector: Injector;\n\n constructor(injector: Injector) {\n this.injector = injector;\n }\n\n register(...plugins: (new () => AXPAuthStrategy)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const strategy = childInjector.get(t);\n if (strategy) {\n this.strategies.set(strategy.name, strategy);\n }\n })\n }\n\n get(strategyKey: string): AXPAuthStrategy | undefined {\n return this.strategies.get(strategyKey);\n }\n}","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXPFeature } from './feature.types';\nimport { AXPSessionContext } from '../session.types';\n\nexport interface AXPFeatureLoader {\n getList(context: AXPSessionContext): Observable<AXPFeature[]>;\n}\n\nexport const AXP_FEATURE_LOADER = new InjectionToken<AXPFeatureLoader>('AXP_FEATURE_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPFeatureDefaultLoader();\n },\n});\n\nclass AXPFeatureDefaultLoader implements AXPFeatureLoader {\n getList(context: AXPSessionContext): Observable<AXPFeature[]> {\n return of([]);\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n selector: '[feature]',\n standalone: false\n})\nexport class AXPFeatureDirective {\n private hasView = signal(false);\n private subscription!: Subscription;\n private sessionService = inject(AXPSessionService);\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef\n ) { }\n\n @Input()\n public set feature(featureKeys: string | string[] | null) {\n const keys: string[] = !featureKeys ? [] : (Array.isArray(featureKeys) ? featureKeys : [featureKeys]);\n if (keys.length == 0) {\n // If featureKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.features$\n //.pipe(first())\n .subscribe(() => {\n if (this.sessionService.isFeatureEnabled(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n } else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n\n @Input()\n public set featureElse(elseTemplateRef: TemplateRef<any>) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","export class AXPUnauthorizedError extends Error {\n constructor(message?: string, public data?: { redirectUrl?: string }) {\n super(message);\n this.name = 'AXPUnauthorizedError';\n }\n}\n\n\nexport class AXPUnauthenticatedError extends Error {\n constructor(message?: string, public data?: { redirectUrl?: string }) {\n super(message);\n this.name = 'AXPUnauthenticatedError';\n }\n}","import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot, UrlTree } from \"@angular/router\";\nimport { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nimport { Observable, first, map } from \"rxjs\";\nimport { AXPUnauthorizedError } from \"../errors.types\";\n\n\nexport const AXPFeatureGuard: CanActivateFn =\n (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> => {\n const sessionService = inject(AXPSessionService);\n const requiredFeatures = route.data['requiredFeature'] as (string | string[] | null);\n\n return sessionService.features$.pipe(\n map(() => {\n const keys: string[] = !requiredFeatures ? [] : (Array.isArray(requiredFeatures) ? requiredFeatures : [requiredFeatures]);\n const hasFeature = keys.length == 0 || sessionService.isFeatureEnabled(...keys);\n if (!hasFeature) {\n throw new AXPUnauthorizedError(\n `Access Denied. You do not have access to this feature. Required feature(s): ${keys.join(', ')}. Please contact support if you need access.`,\n {\n redirectUrl: state.url\n }\n );\n }\n return true;\n })\n );\n };\n","import { InjectionToken } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { AXPPermission } from \"./permission.types\";\nimport { AXPSessionContext } from \"../session.types\";\n\nexport interface AXPPermissionLoader {\n getList(context: AXPSessionContext): Observable<AXPPermission[]>;\n}\n\nexport const AXP_PERMISSION_LOADER = new InjectionToken<AXPPermissionLoader>('AXP_PERMISSION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPPermissionDefaultLoader();\n }\n});\n\n\nclass AXPPermissionDefaultLoader implements AXPPermissionLoader {\n getList(context: AXPSessionContext): Observable<AXPPermission[]> {\n return of([])\n }\n}","import { AXPApplication } from \"./application/application.types\";\nimport { AXPTenant } from \"./tenant/tenant.types\";\nimport { AXPUser } from \"./user/user.types\";\n\nexport class AXPSessionContext {\n\n private _user: AXPUser | null = null;\n public get user(): AXPUser | null {\n return this._user;\n }\n\n private _tenant: AXPTenant | null = null;\n public get tenant(): AXPTenant | null {\n return this._tenant;\n }\n\n private _application: AXPApplication | null = null;\n public get application(): AXPApplication | null {\n return this._application;\n }\n\n constructor(context: {\n user: AXPUser | null,\n tenant: AXPTenant | null,\n application: AXPApplication | null,\n }) {\n this._user = context.user;\n this._tenant = context.tenant;\n this._application = context.application;\n }\n}\n\n\nexport enum AXPSessionStatus {\n Authenticated = \"authenticated\",\n Unauthenticated = \"unauthenticated\",\n Unauthorized = \"unauthorized\",\n Authorized = \"authorized\",\n Expired = \"expired\",\n SignedOut = \"signedOut\"\n}","import { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, defaultIfEmpty, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { AXP_APPLICATION_LOADER } from './application/application.loader';\nimport { AXPApplication } from './application/application.types';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPBaseCredentials, AXPSessionData } from './auth.strategy';\nimport { AXPFeature, AXP_FEATURE_LOADER } from './feature';\nimport { AXP_PERMISSION_LOADER } from './permission/permission.loader';\nimport { AXPPermission } from './permission/permission.types';\nimport { AXPSessionContext, AXPSessionStatus } from './session.types';\nimport { AXP_TENANT_LOADER } from './tenant/tenant.loader';\nimport { AXPTenant } from './tenant/tenant.types';\nimport { AXPUser } from './user/user.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPSessionService {\n private eventService = inject(AXPBroadcastEventService);\n\n private authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n public static readonly SESSION_KEY = 'AXP_SESSION';\n\n private readonly permissionLoader = inject(AXP_PERMISSION_LOADER);\n private readonly featureLoader = inject(AXP_FEATURE_LOADER);\n private readonly tenantLoader = inject(AXP_TENANT_LOADER);\n private readonly applicationLoader = inject(AXP_APPLICATION_LOADER);\n\n private status = new BehaviorSubject<AXPSessionStatus>(AXPSessionStatus.Unauthenticated);\n public readonly status$ = this.status.asObservable().pipe(shareReplay(1));\n\n private currentUserSubject = new BehaviorSubject<AXPUser | null>(null);\n public readonly user$ = this.currentUserSubject.asObservable().pipe(shareReplay(1));\n public get user(): AXPUser | null {\n const session = this.getSessionData();\n if (session?.user && !this.currentUserSubject.value) {\n this.currentUserSubject.next(session.user);\n }\n return this.currentUserSubject.value;\n }\n\n private currentTenantSubject = new BehaviorSubject<AXPTenant | null>(null);\n public readonly tenant$ = this.currentTenantSubject.asObservable().pipe(shareReplay(1));\n public get tenant(): AXPTenant | null {\n const session = this.getSessionData();\n if (session?.tenant && !this.currentTenantSubject.value) {\n this.currentTenantSubject.next(session.tenant);\n }\n return this.currentTenantSubject.value;\n }\n\n public get tenants$(): Observable<AXPTenant[]> {\n return this.tenantLoader.getList(this.getContext());\n }\n\n private currentApplicationSubject = new BehaviorSubject<AXPApplication | null>(null);\n public readonly application$ = this.currentApplicationSubject.asObservable().pipe(shareReplay(1));\n public get application(): AXPApplication | null {\n const session = this.getSessionData();\n if (session?.application && !this.currentApplicationSubject.value) {\n this.currentApplicationSubject.next(session.application);\n }\n return this.currentApplicationSubject.value;\n }\n\n public get applications$(): Observable<AXPApplication[]> {\n return this.applicationLoader.getList(this.getContext());\n }\n\n private permissionsSubject = new BehaviorSubject<AXPPermission[]>([]);\n public readonly permissions$ = this.permissionsSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n public get permissions(): AXPPermission[] {\n return this.permissionsSubject.value ?? [];\n }\n\n private featuresSubject = new BehaviorSubject<AXPFeature[]>([]);\n public readonly features$ = this.featuresSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n public get features(): AXPFeature[] {\n return this.featuresSubject.value ?? [];\n }\n\n public readonly isAuthenticated$ = this.status$.pipe(\n map((status) => status === AXPSessionStatus.Authenticated || status === AXPSessionStatus.Authorized),\n shareReplay(1)\n );\n\n public readonly isAuthorized$ = this.status$.pipe(\n map((status) => status === AXPSessionStatus.Authorized),\n shareReplay(1)\n );\n\n public async restoreSession(): Promise<void> {\n const sessionData = this.getSessionData();\n if (sessionData) {\n if (sessionData.user) {\n this.currentUserSubject.next(sessionData.user);\n this.status.next(AXPSessionStatus.Authenticated);\n }\n // if (sessionData.tenant) {\n // this.setTenant(sessionData.tenant);\n // }\n // if (sessionData.application) {\n // this.setApplication(sessionData.application);\n // }\n await this.loadPermissions();\n await this.loadFeatures();\n await this.signInComplete();\n } else {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n }\n\n async signin(credentials: AXPBaseCredentials): Promise<void> {\n // \n this.clearSession();\n //\n const strategy = this.authStrategyRegistry.get(credentials.strategy);\n if (!strategy) {\n throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);\n }\n const result = await strategy.signin(credentials);\n if (result.succeed) {\n this.currentUserSubject.next(result.data!.user);\n this.setSession({\n accessToken: result.data!.accessToken,\n refreshToken: result.data!.refreshToken,\n strategy: credentials.strategy,\n user: result.data!.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n this.status.next(AXPSessionStatus.Authenticated);\n if (this.application && this.tenant) await this.signInComplete();\n } else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n\n async signout(): Promise<void> {\n const sessionData = this.getSessionData();\n if (sessionData?.strategy) {\n const strategy = this.authStrategyRegistry.get(sessionData?.strategy);\n if (strategy) {\n await strategy.signout();\n }\n }\n //\n const userId = this.user?.id;\n this.clearSession();\n this.status.next(AXPSessionStatus.SignedOut);\n this.eventService.publish(AXPSessionStatus.SignedOut, { id: userId });\n }\n\n async refreshToken(): Promise<any> {\n return new Promise(async (resolve, reject) => {\n const sessionData = this.getSessionData();\n if (!sessionData || !sessionData?.refreshToken) {\n return;\n }\n const strategy = this.authStrategyRegistry.get(sessionData.strategy);\n if (!strategy) {\n reject();\n throw new Error(`Authentication strategy '${sessionData.strategy}' is not found`);\n }\n const result = await strategy.refreshToken(this.getContext());\n if (result.succeed) {\n this.setSession(result.data as AXPSessionData);\n resolve(result.data?.accessToken);\n } else {\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n }\n });\n }\n\n async setTenant(tenant: AXPTenant | null): Promise<void> {\n this.currentTenantSubject.next(tenant);\n if (tenant) {\n this.updateSession({ tenant: tenant });\n await this.refreshToken();\n }\n }\n\n async setApplication(application: AXPApplication | null): Promise<void> {\n this.currentApplicationSubject.next(application);\n if (application) {\n this.updateSession({ application: application });\n await this.refreshToken();\n await this.loadPermissions();\n await this.loadFeatures();\n }\n }\n\n private async loadPermissions(): Promise<void> {\n try {\n const permissions = await firstValueFrom(this.permissionLoader.getList(this.getContext()));\n this.permissionsSubject.next(permissions ?? []);\n } catch (error) {\n console.error('Error loading permissions:', error);\n this.permissionsSubject.next([]);\n }\n }\n\n private async loadFeatures(): Promise<void> {\n try {\n const features = await firstValueFrom(this.featureLoader.getList(this.getContext()));\n this.featuresSubject.next(features ?? []);\n } catch (error) {\n console.error('Error loading features:', error);\n this.featuresSubject.next([]);\n }\n }\n\n async signInComplete() {\n this.status.next(AXPSessionStatus.Authorized);\n }\n\n private setSession(tokens: Partial<AXPSessionData>): void {\n const sessionData: Partial<AXPSessionData> = {\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n strategy: tokens.strategy,\n user: this.user,\n application: tokens.application,\n tenant: tokens.tenant,\n expiresIn: tokens.expiresIn,\n idToken: tokens.idToken,\n };\n this.updateSession(sessionData);\n }\n\n private updateSession(update: Partial<AXPSessionData>) {\n const currentSession = this.getSessionData() ?? {};\n const updatedSession = merge({}, currentSession, update);\n localStorage.setItem(AXPSessionService.SESSION_KEY, JSON.stringify(updatedSession));\n }\n\n public getSessionData(): AXPSessionData | null {\n const sessionDataString = localStorage.getItem(AXPSessionService.SESSION_KEY);\n return sessionDataString ? JSON.parse(sessionDataString) : null;\n }\n\n private clearSession(): void {\n //\n this.currentUserSubject.next(null);\n //\n this.setTenant(null);\n //\n this.setApplication(null);\n //\n this.permissionsSubject.next([]);\n //\n this.featuresSubject.next([]);\n //\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n }\n\n public authorize(...keys: string[]): boolean {\n return keys.every((k) => isEmpty(k) || this.permissions.indexOf(k) > -1);\n }\n\n public isFeatureEnabled(...keys: string[]): boolean {\n return keys.every((k) => isEmpty(k) || this.features.some((c) => c.name == k && c.value == true));\n }\n\n public getToken(): string | undefined {\n const sessionData = this.getSessionData();\n\n return sessionData?.accessToken;\n }\n\n private checkTokenValidation(): boolean {\n let sessionData = this.getSessionData();\n\n if (sessionData && sessionData?.accessToken && sessionData.expiresIn) {\n const expiresInDate = new Date(sessionData.expiresIn);\n if (expiresInDate > new Date()) {\n // Token is still valid\n return true;\n }\n }\n return false;\n }\n\n private getContext(): AXPSessionContext {\n return new AXPSessionContext({\n user: this.user,\n tenant: this.tenant,\n application: this.application,\n });\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n selector: '[permission]',\n standalone: false\n})\nexport class AXPPermissionDirective {\n private hasView = signal(false);\n private subscription!: Subscription;\n private sessionService = inject(AXPSessionService);\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef\n ) { }\n\n @Input()\n public set permission(permissionKeys: string | string[] | null) {\n const keys: string[] = !permissionKeys ? [] : (Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys]);\n if (keys.length == 0) {\n // If permissionKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.isAuthorized$\n .subscribe((isAuthorized) => {\n if (isAuthorized && this.sessionService.authorize(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n } else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n\n @Input()\n public set permissionElse(elseTemplateRef: TemplateRef<any>) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map, tap } from 'rxjs';\nimport { AXPUnauthorizedError } from '../errors.types';\nimport { AXPSessionService } from '../session.service';\n\nexport const AXPPermissionGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n\n const sessionService = inject(AXPSessionService);\n\n const permissionKeys = route.data['requiredPermission'] as string | string[] | null;\n\n return sessionService.isAuthorized$.pipe(\n first(),\n map((value) => {\n const keys: string[] = !permissionKeys ? [] : Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];\n const hasPermission = keys.length == 0 || sessionService.authorize(...keys);\n if (!hasPermission) {\n throw new AXPUnauthorizedError(\n `Access denied. Required permissions: ${keys.join(', ')}. Please contact your administrator if you believe this is an error.`,\n {\n redirectUrl: state.url\n }\n );\n }\n return true;\n })\n );\n};\n","import { AXPSystemActions } from \"@acorex/platform/core\";\nimport { AXPPermissionDefinition, AXPPermissionGroupDefinition } from \"./permission.types\";\n\n\nexport class AXPPermissionDefinitionProviderContext {\n private builders: Map<string, AXPPermissionDefinitionGroupBuilder> = new Map();\n\n addGroup(name: string, title: string, description?: string): AXPPermissionDefinitionGroupBuilder {\n const group: AXPPermissionGroupDefinition = {\n name,\n title,\n description,\n permissions: []\n };\n const builder = new AXPPermissionDefinitionGroupBuilder(this, group);\n this.builders.set(name, builder);\n return builder;\n }\n\n getGroupDefinitions(): AXPPermissionGroupDefinition[] {\n return Array.from(this.builders.values()).map(b => b.group);\n }\n\n findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n return this.builders.get(name);\n }\n}\n\n\n\nexport class AXPPermissionDefinitionGroupBuilder {\n private context: AXPPermissionDefinitionProviderContext;\n private _group: AXPPermissionGroupDefinition;\n\n public get group(): AXPPermissionGroupDefinition {\n return this._group;\n }\n\n constructor(context: AXPPermissionDefinitionProviderContext, group: AXPPermissionGroupDefinition) {\n this.context = context;\n this._group = group;\n }\n\n addPermission(name: string, title: string, description: string): AXPPermissionDefinitionBuilder {\n const permission: AXPPermissionDefinition = {\n name,\n title,\n description,\n children: []\n };\n this._group.permissions.push(permission);\n return new AXPPermissionDefinitionBuilder(this, permission);\n }\n\n\n \n\n endGroup(): AXPPermissionDefinitionProviderContext {\n return this.context;\n }\n\n findPermission(path: string): AXPPermissionDefinition | undefined {\n return undefined;\n }\n\n findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n return undefined;\n }\n\n}\n\nexport class AXPPermissionDefinitionBuilder {\n private groupBuilder: AXPPermissionDefinitionGroupBuilder;\n private permission: AXPPermissionDefinition;\n\n constructor(groupBuilder: AXPPermissionDefinitionGroupBuilder, permission: AXPPermissionDefinition) {\n this.groupBuilder = groupBuilder;\n this.permission = permission;\n }\n\n addChild(name: string, title: string, description: string): AXPPermissionDefinitionBuilder {\n const permission: AXPPermissionDefinition = {\n name,\n title,\n description,\n children: []\n };\n this.permission.children.push(permission);\n return this;\n }\n\n\n endPermission(): AXPPermissionDefinitionGroupBuilder {\n return this.groupBuilder;\n }\n}","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPPermissionDefinition, AXPPermissionGroupDefinition } from './permission.types';\nimport { AXPPermissionDefinitionProviderContext } from './permission-definition.builder';\n\n\n\nexport interface AXPPermissionDefinitionProvider {\n define(context: AXPPermissionDefinitionProviderContext): Promise<void>;\n}\n\nexport const AXP_PERMISSION_DEFINITION_PROVIDER = new InjectionToken<AXPPermissionDefinitionProvider[]>('AXP_PERMISSION_DEFINITION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return [];\n }\n});\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXPPermissionDefinitionService {\n private providers = inject(AXP_PERMISSION_DEFINITION_PROVIDER, { optional: true });\n private cache: AXPPermissionGroupDefinition[] | null = null;\n\n\n private async load(): Promise<void> {\n if (this.cache) {\n return\n }\n const context = new AXPPermissionDefinitionProviderContext();\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.define(context);\n } else {\n // If provider is a direct instance, use it directly\n await provider.define(context);\n }\n }\n }\n this.cache = context.getGroupDefinitions();\n }\n\n public async reload(): Promise<void> {\n this.cache = null;\n await this.load();\n }\n\n public async getGroups(): Promise<AXPPermissionGroupDefinition[]> {\n await this.load();\n return this.cache ?? [];\n }\n\n public async getPermissions(): Promise<AXPPermissionDefinition[]> {\n await this.load();\n return this.cache?.flatMap(g => g.permissions) ?? [];\n }\n\n public async getGroup(name: string): Promise<AXPPermissionGroupDefinition | null> {\n await this.load();\n return this.cache?.find(g => g.name === name) ?? null;\n }\n\n public async getPermission(name: string): Promise<AXPPermissionDefinition | null> {\n await this.load();\n return this.cache?.find(g => g.permissions.find(p => p.name === name))?.permissions.find(p => p.name === name) ?? null;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthenticatedError } from './errors.types';\nimport { AXPSessionService } from './session.service';\n\nexport const AXPAuthGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const sessionService = inject(AXPSessionService);\n return sessionService.isAuthenticated$.pipe(\n first(),\n map((value) => {\n if (value) {\n return true;\n }\n throw new AXPUnauthenticatedError(\n `Access denied. You are not currently logged in. Please log in to access this page. If you continue to see this message after logging in, please contact support.`,\n {\n redirectUrl: state.url,\n }\n );\n })\n );\n};\n","import { Inject, ModuleWithProviders, NgModule, Optional, inject, provideAppInitializer } from '@angular/core';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPAuthStrategy } from './auth.strategy';\nimport { AXPFeatureDirective } from './feature';\nimport { AXPPermissionDirective } from './permission/permission.directive';\nimport { AXPSessionService } from './session.service';\n\nexport interface AXPAuthModuleConfigs {\n strategies: (new () => AXPAuthStrategy)[];\n}\n\nexport function initializeAppState(service: AXPSessionService) {\n return async () => {\n try {\n await service.restoreSession();\n } catch (error) {\n console.error(error);\n }\n };\n}\n\n@NgModule({\n imports: [],\n exports: [AXPPermissionDirective, AXPFeatureDirective],\n declarations: [AXPPermissionDirective, AXPFeatureDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = (initializeAppState)(inject(AXPSessionService));\n return initializerFn();\n }),\n ],\n})\nexport class AXPAuthModule {\n static forRoot(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor(@Optional() @Inject('AXPAuthModuleFactory') instances: any[]) {\n instances?.forEach((f) => {\n f();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|