@memberjunction/ng-bootstrap 3.4.0 → 4.1.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.
@@ -1,98 +0,0 @@
1
- /**
2
- * MemberJunction 3.0 Bootstrap Module
3
- *
4
- * Provides the MJBootstrapComponent and all necessary services for MemberJunction Angular applications.
5
- * This module encapsulates all the authentication and initialization logic that was previously
6
- * spread across app.component.ts and app.module.ts.
7
- *
8
- * Usage:
9
- * ```typescript
10
- * import { LoadGeneratedEntities } from 'mj_generatedentities';
11
- * LoadGeneratedEntities(); // Prevent tree shaking
12
- *
13
- * @NgModule({
14
- * imports: [
15
- * BrowserModule,
16
- * BrowserAnimationsModule,
17
- * MJBootstrapModule.forRoot(environment),
18
- * // ... other MJ modules
19
- * ],
20
- * bootstrap: [AppComponent]
21
- * })
22
- * export class AppModule {}
23
- * ```
24
- */
25
- import { NgModule, APP_INITIALIZER } from '@angular/core';
26
- import { CommonModule } from '@angular/common';
27
- import { MJBootstrapComponent } from './bootstrap.component';
28
- import { MJAuthShellComponent } from './components/auth-shell.component';
29
- import { MJ_ENVIRONMENT } from './bootstrap.types';
30
- import { MJAuthBase } from '@memberjunction/ng-auth-services';
31
- import * as i0 from "@angular/core";
32
- /**
33
- * Initialize auth provider before Angular routing starts
34
- * This ensures auth providers can process OAuth redirect responses before Angular's router
35
- * consumes the URL hash
36
- */
37
- export function initializeAuth(authService) {
38
- return () => authService.initialize();
39
- }
40
- export class MJBootstrapModule {
41
- /**
42
- * Configure the bootstrap module with environment settings
43
- *
44
- * @param environment - Environment configuration for the application
45
- * @returns ModuleWithProviders with environment configuration and all services
46
- *
47
- * @example
48
- * ```typescript
49
- * import { environment } from '../environments/environment';
50
- * import { LoadGeneratedEntities } from 'mj_generatedentities';
51
- * LoadGeneratedEntities();
52
- *
53
- * @NgModule({
54
- * imports: [
55
- * MJBootstrapModule.forRoot(environment)
56
- * ]
57
- * })
58
- * export class AppModule {}
59
- * ```
60
- */
61
- static forRoot(environment) {
62
- return {
63
- ngModule: MJBootstrapModule,
64
- providers: [
65
- { provide: MJ_ENVIRONMENT, useValue: environment },
66
- // MJInitializationService uses providedIn: 'root'
67
- {
68
- provide: APP_INITIALIZER,
69
- useFactory: initializeAuth,
70
- deps: [MJAuthBase],
71
- multi: true
72
- }
73
- ]
74
- };
75
- }
76
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
77
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapModule, declarations: [MJBootstrapComponent,
78
- MJAuthShellComponent], imports: [CommonModule], exports: [MJBootstrapComponent,
79
- MJAuthShellComponent] });
80
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapModule, imports: [CommonModule] });
81
- }
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapModule, decorators: [{
83
- type: NgModule,
84
- args: [{
85
- declarations: [
86
- MJBootstrapComponent,
87
- MJAuthShellComponent
88
- ],
89
- imports: [
90
- CommonModule
91
- ],
92
- exports: [
93
- MJBootstrapComponent,
94
- MJAuthShellComponent
95
- ]
96
- }]
97
- }] });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYm9vdHN0cmFwLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUF1QixlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXpFLE9BQU8sRUFBdUIsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUU5RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxXQUF1QjtJQUNwRCxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBZUQsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBZ0M7UUFDN0MsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO2dCQUNsRCxrREFBa0Q7Z0JBQ2xEO29CQUNFLE9BQU8sRUFBRSxlQUFlO29CQUN4QixVQUFVLEVBQUUsY0FBYztvQkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO29CQUNsQixLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7d0dBbkNVLGlCQUFpQjt5R0FBakIsaUJBQWlCLGlCQVgxQixvQkFBb0I7WUFDcEIsb0JBQW9CLGFBR3BCLFlBQVksYUFHWixvQkFBb0I7WUFDcEIsb0JBQW9CO3lHQUdYLGlCQUFpQixZQVAxQixZQUFZOzs0RkFPSCxpQkFBaUI7a0JBYjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3FCQUNyQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asb0JBQW9CO3dCQUNwQixvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1iZXJKdW5jdGlvbiAzLjAgQm9vdHN0cmFwIE1vZHVsZVxuICpcbiAqIFByb3ZpZGVzIHRoZSBNSkJvb3RzdHJhcENvbXBvbmVudCBhbmQgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNlcyBmb3IgTWVtYmVySnVuY3Rpb24gQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKiBUaGlzIG1vZHVsZSBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBhdXRoZW50aWNhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCB3YXMgcHJldmlvdXNseVxuICogc3ByZWFkIGFjcm9zcyBhcHAuY29tcG9uZW50LnRzIGFuZCBhcHAubW9kdWxlLnRzLlxuICpcbiAqIFVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgTG9hZEdlbmVyYXRlZEVudGl0aWVzIH0gZnJvbSAnbWpfZ2VuZXJhdGVkZW50aXRpZXMnO1xuICogTG9hZEdlbmVyYXRlZEVudGl0aWVzKCk7IC8vIFByZXZlbnQgdHJlZSBzaGFraW5nXG4gKlxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW1xuICogICAgIEJyb3dzZXJNb2R1bGUsXG4gKiAgICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXG4gKiAgICAgTUpCb290c3RyYXBNb2R1bGUuZm9yUm9vdChlbnZpcm9ubWVudCksXG4gKiAgICAgLy8gLi4uIG90aGVyIE1KIG1vZHVsZXNcbiAqICAgXSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBBUFBfSU5JVElBTElaRVIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNSkJvb3RzdHJhcENvbXBvbmVudCB9IGZyb20gJy4vYm9vdHN0cmFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNSkF1dGhTaGVsbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hdXRoLXNoZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNSkluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBNSkVudmlyb25tZW50Q29uZmlnLCBNSl9FTlZJUk9OTUVOVCB9IGZyb20gJy4vYm9vdHN0cmFwLnR5cGVzJztcbmltcG9ydCB7IE1KQXV0aEJhc2UgfSBmcm9tICdAbWVtYmVyanVuY3Rpb24vbmctYXV0aC1zZXJ2aWNlcyc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhdXRoIHByb3ZpZGVyIGJlZm9yZSBBbmd1bGFyIHJvdXRpbmcgc3RhcnRzXG4gKiBUaGlzIGVuc3VyZXMgYXV0aCBwcm92aWRlcnMgY2FuIHByb2Nlc3MgT0F1dGggcmVkaXJlY3QgcmVzcG9uc2VzIGJlZm9yZSBBbmd1bGFyJ3Mgcm91dGVyXG4gKiBjb25zdW1lcyB0aGUgVVJMIGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVBdXRoKGF1dGhTZXJ2aWNlOiBNSkF1dGhCYXNlKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiAoKSA9PiBhdXRoU2VydmljZS5pbml0aWFsaXplKCk7XG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIE1KQm9vdHN0cmFwQ29tcG9uZW50LFxuICAgIE1KQXV0aFNoZWxsQ29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIE1KQm9vdHN0cmFwQ29tcG9uZW50LFxuICAgIE1KQXV0aFNoZWxsQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTUpCb290c3RyYXBNb2R1bGUge1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBib290c3RyYXAgbW9kdWxlIHdpdGggZW52aXJvbm1lbnQgc2V0dGluZ3NcbiAgICpcbiAgICogQHBhcmFtIGVudmlyb25tZW50IC0gRW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uXG4gICAqIEByZXR1cm5zIE1vZHVsZVdpdGhQcm92aWRlcnMgd2l0aCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGFuZCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG4gICAqIGltcG9ydCB7IExvYWRHZW5lcmF0ZWRFbnRpdGllcyB9IGZyb20gJ21qX2dlbmVyYXRlZGVudGl0aWVzJztcbiAgICogTG9hZEdlbmVyYXRlZEVudGl0aWVzKCk7XG4gICAqXG4gICAqIEBOZ01vZHVsZSh7XG4gICAqICAgaW1wb3J0czogW1xuICAgKiAgICAgTUpCb290c3RyYXBNb2R1bGUuZm9yUm9vdChlbnZpcm9ubWVudClcbiAgICogICBdXG4gICAqIH0pXG4gICAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdChlbnZpcm9ubWVudDogTUpFbnZpcm9ubWVudENvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TUpCb290c3RyYXBNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE1KQm9vdHN0cmFwTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTUpfRU5WSVJPTk1FTlQsIHVzZVZhbHVlOiBlbnZpcm9ubWVudCB9LFxuICAgICAgICAvLyBNSkluaXRpYWxpemF0aW9uU2VydmljZSB1c2VzIHByb3ZpZGVkSW46ICdyb290J1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGluaXRpYWxpemVBdXRoLFxuICAgICAgICAgIGRlcHM6IFtNSkF1dGhCYXNlXSxcbiAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,13 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- /**
3
- * Injection token for MJ Environment Configuration
4
- */
5
- export const MJ_ENVIRONMENT = new InjectionToken('MJ_ENVIRONMENT');
6
- /**
7
- * Injection token for optional startup validation service
8
- */
9
- export const MJ_STARTUP_VALIDATION = new InjectionToken('MJ_STARTUP_VALIDATION', {
10
- providedIn: 'root',
11
- factory: () => null // Default to null if not provided
12
- });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ib290c3RyYXAudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsZ0JBQWdCLENBQUMsQ0FBQztBQUV4Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFvQyx1QkFBdUIsRUFBRTtJQUNsSCxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtDQUFrQztDQUN2RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgTUogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgTUpfRU5WSVJPTk1FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48TUpFbnZpcm9ubWVudENvbmZpZz4oJ01KX0VOVklST05NRU5UJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBvcHRpb25hbCBzdGFydHVwIHZhbGlkYXRpb24gc2VydmljZVxuICovXG5leHBvcnQgY29uc3QgTUpfU1RBUlRVUF9WQUxJREFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPE1KU3RhcnR1cFZhbGlkYXRpb25TZXJ2aWNlIHwgbnVsbD4oJ01KX1NUQVJUVVBfVkFMSURBVElPTicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBudWxsIC8vIERlZmF1bHQgdG8gbnVsbCBpZiBub3QgcHJvdmlkZWRcbn0pO1xuXG4vKipcbiAqIE9wdGlvbmFsIGludGVyZmFjZSBmb3Igc3RhcnR1cCB2YWxpZGF0aW9uIHNlcnZpY2VzXG4gKiBBcHBsaWNhdGlvbnMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBzdGFydHVwIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNSlN0YXJ0dXBWYWxpZGF0aW9uU2VydmljZSB7XG4gIC8qKlxuICAgKiBSdW5zIHZhbGlkYXRpb24gY2hlY2tzIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwXG4gICAqL1xuICB2YWxpZGF0ZVN5c3RlbVNldHVwKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB2YWxpZGF0aW9uIGlzc3VlIGZvciBtaXNzaW5nIHVzZXIgcm9sZXNcbiAgICovXG4gIGFkZE5vUm9sZXNWYWxpZGF0aW9uSXNzdWUoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgTWVtYmVySnVuY3Rpb24gQW5ndWxhciBhcHBsaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNSkVudmlyb25tZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFwcCBpcyBydW5uaW5nIGluIHByb2R1Y3Rpb24gbW9kZVxuICAgKi9cbiAgcHJvZHVjdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogR3JhcGhRTCBIVFRQIGVuZHBvaW50IFVSTFxuICAgKiBAZXhhbXBsZSAnaHR0cDovL2xvY2FsaG9zdDo0MDAwL2dyYXBocWwnXG4gICAqL1xuICBHUkFQSFFMX1VSSTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFwaFFMIFdlYlNvY2tldCBlbmRwb2ludCBVUkwgZm9yIHN1YnNjcmlwdGlvbnNcbiAgICogQGV4YW1wbGUgJ3dzOi8vbG9jYWxob3N0OjQwMDAvZ3JhcGhxbCdcbiAgICovXG4gIEdSQVBIUUxfV1NfVVJJOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHR5cGVcbiAgICovXG4gIEFVVEhfVFlQRTogJ21zYWwnIHwgJ2F1dGgwJztcblxuICAvKipcbiAgICogTWVtYmVySnVuY3Rpb24gY29yZSBzY2hlbWEgbmFtZSBpbiB0aGUgZGF0YWJhc2VcbiAgICogQGRlZmF1bHQgJ19fbWonXG4gICAqL1xuICBNSl9DT1JFX1NDSEVNQV9OQU1FOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pY3Jvc29mdCBBenVyZSBBRC9FbnRyYSBDbGllbnQgSUQgKGZvciBNU0FMIGF1dGgpXG4gICAqL1xuICBDTElFTlRfSUQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pY3Jvc29mdCBBenVyZSBBRC9FbnRyYSBUZW5hbnQgSUQgKGZvciBNU0FMIGF1dGgpXG4gICAqL1xuICBURU5BTlRfSUQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dGgwIGRvbWFpbiAoZm9yIEF1dGgwIGF1dGgpXG4gICAqIEBleGFtcGxlICdteWFwcC51cy5hdXRoMC5jb20nXG4gICAqL1xuICBBVVRIMF9ET01BSU4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dGgwIGNsaWVudCBJRCAoZm9yIEF1dGgwIGF1dGgpXG4gICAqL1xuICBBVVRIMF9DTElFTlRJRD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBjdXN0b20gZW52aXJvbm1lbnQgcHJvcGVydGllc1xuICAgKi9cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuIl19
@@ -1,148 +0,0 @@
1
- /**
2
- * MemberJunction 3.0 Auth Shell Component
3
- *
4
- * Handles authentication flow and initialization for MJ applications.
5
- * This component encapsulates all the auth logic that was previously in app.component.ts
6
- */
7
- import { Component, Inject } from '@angular/core';
8
- import { DOCUMENT } from '@angular/common';
9
- import { take } from 'rxjs/operators';
10
- import { SetProductionStatus, LogError } from '@memberjunction/core';
11
- import { MJ_ENVIRONMENT } from '../bootstrap.types';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/router";
14
- import * as i2 from "@memberjunction/ng-auth-services";
15
- import * as i3 from "../services/initialization.service";
16
- import * as i4 from "@angular/common";
17
- export class MJAuthShellComponent {
18
- router;
19
- document;
20
- authBase;
21
- initService;
22
- environment;
23
- HasError = false;
24
- ErrorMessage = '';
25
- showValidationOnly = false;
26
- subHeaderText = "Welcome back! Please log in to your account.";
27
- initialPath = '/';
28
- constructor(router, document, authBase, initService, environment) {
29
- this.router = router;
30
- this.document = document;
31
- this.authBase = authBase;
32
- this.initService = initService;
33
- this.environment = environment;
34
- }
35
- async ngOnInit() {
36
- console.log('🚀 MemberJunction 3.0 - Auth Shell Initializing');
37
- SetProductionStatus(this.environment.production);
38
- this.initialPath = window.location.pathname + (window.location.search ? window.location.search : '');
39
- await this.setupAuth();
40
- }
41
- /**
42
- * Handle successful login and initialize the application
43
- */
44
- async handleLogin(token, userInfo) {
45
- if (!token)
46
- return;
47
- try {
48
- // Initialize GraphQL client
49
- await this.initService.initializeGraphQL(token, this.environment);
50
- // Validate user access and refresh data
51
- const validationResult = await this.initService.validateUserAccess();
52
- if (!validationResult.success) {
53
- this.HasError = true;
54
- this.ErrorMessage = validationResult.error.message;
55
- throw new Error(this.ErrorMessage);
56
- }
57
- // Run startup validation checks
58
- this.initService.runValidationChecks();
59
- // Navigate to initial route
60
- this.initService.navigateToInitialRoute(this.initialPath, this.document);
61
- }
62
- catch (err) {
63
- // Check for no roles error
64
- if (this.initService.isNoUserRolesError(err)) {
65
- this.showValidationOnly = true;
66
- this.HasError = true;
67
- const result = this.initService.handleNoRolesError();
68
- return; // Don't throw, allow UI to show validation banner
69
- }
70
- // Try auth retry if applicable
71
- const retried = await this.initService.handleAuthRetry(err);
72
- if (retried) {
73
- return; // Retry initiated
74
- }
75
- // Show error
76
- this.HasError = true;
77
- this.ErrorMessage = err;
78
- LogError('Error Logging In: ' + err);
79
- throw err;
80
- }
81
- }
82
- /**
83
- * Setup authentication and handle auth state changes
84
- */
85
- async setupAuth() {
86
- // Auth provider already initialized by APP_INITIALIZER
87
- // Listen for user info changes
88
- this.authBase.getUserInfo()
89
- .pipe(take(1))
90
- .subscribe({
91
- next: async (userInfo) => {
92
- if (userInfo) {
93
- const token = await this.authBase.getIdToken();
94
- if (token) {
95
- await this.handleLogin(token, userInfo);
96
- }
97
- else {
98
- console.error('User info available but no token found');
99
- }
100
- }
101
- },
102
- error: (err) => {
103
- LogError('Error Logging In: ' + err);
104
- this.subHeaderText = this.initService.getAuthErrorMessage(err);
105
- }
106
- });
107
- // Check if user is authenticated
108
- this.authBase.isAuthenticated()
109
- .pipe(take(1))
110
- .subscribe((loggedIn) => {
111
- if (!loggedIn) {
112
- // Display login screen - auth state is managed by provider
113
- console.log('User not authenticated, showing login screen');
114
- }
115
- });
116
- }
117
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJAuthShellComponent, deps: [{ token: i1.Router }, { token: DOCUMENT }, { token: i2.MJAuthBase }, { token: i3.MJInitializationService }, { token: MJ_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
118
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MJAuthShellComponent, selector: "mj-auth-shell", ngImport: i0, template: `
119
- <div class="mj-auth-shell">
120
- <ng-content *ngIf="!HasError || showValidationOnly"></ng-content>
121
-
122
- <div *ngIf="HasError && !showValidationOnly" class="error-container">
123
- <h2>Error</h2>
124
- <p>{{ ErrorMessage }}</p>
125
- </div>
126
- </div>
127
- `, isInline: true, styles: [".mj-auth-shell{width:100%;height:100%;display:block}.error-container{padding:20px;text-align:center}.error-container h2{color:#d32f2f;margin-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
128
- }
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJAuthShellComponent, decorators: [{
130
- type: Component,
131
- args: [{ selector: 'mj-auth-shell', template: `
132
- <div class="mj-auth-shell">
133
- <ng-content *ngIf="!HasError || showValidationOnly"></ng-content>
134
-
135
- <div *ngIf="HasError && !showValidationOnly" class="error-container">
136
- <h2>Error</h2>
137
- <p>{{ ErrorMessage }}</p>
138
- </div>
139
- </div>
140
- `, styles: [".mj-auth-shell{width:100%;height:100%;display:block}.error-container{padding:20px;text-align:center}.error-container h2{color:#d32f2f;margin-bottom:10px}\n"] }]
141
- }], ctorParameters: () => [{ type: i1.Router }, { type: Document, decorators: [{
142
- type: Inject,
143
- args: [DOCUMENT]
144
- }] }, { type: i2.MJAuthBase }, { type: i3.MJInitializationService }, { type: undefined, decorators: [{
145
- type: Inject,
146
- args: [MJ_ENVIRONMENT]
147
- }] }] });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zaGVsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYXV0aC1zaGVsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRixPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFnQ3pFLE1BQU0sT0FBTyxvQkFBb0I7SUFTckI7SUFDaUI7SUFDbEI7SUFDQztJQUN3QjtJQVozQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzNCLGFBQWEsR0FBVyw4Q0FBOEMsQ0FBQztJQUV0RSxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBRTFCLFlBQ1UsTUFBYyxFQUNHLFFBQWtCLEVBQ3BDLFFBQW9CLEVBQ25CLFdBQW9DLEVBQ1osV0FBZ0M7UUFKeEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNHLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDWixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7SUFDL0QsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBRS9ELG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMs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QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztvQkFDMUQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVksRUFBRSxFQUFFO2dCQUN0QixRQUFRLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUwsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO2FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxRQUFpQixFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLDJEQUEyRDtnQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBN0dVLG9CQUFvQix3Q0FVckIsUUFBUSw4RUFHUixjQUFjOzRGQWJiLG9CQUFvQixxREE1QnJCOzs7Ozs7Ozs7R0FTVDs7NEZBbUJVLG9CQUFvQjtrQkE5QmhDLFNBQVM7K0JBQ0UsZUFBZSxZQUNmOzs7Ozs7Ozs7R0FTVDs7MEJBNkJFLE1BQU07MkJBQUMsUUFBUTs7MEJBR2YsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1iZXJKdW5jdGlvbiAzLjAgQXV0aCBTaGVsbCBDb21wb25lbnRcbiAqXG4gKiBIYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGZsb3cgYW5kIGluaXRpYWxpemF0aW9uIGZvciBNSiBhcHBsaWNhdGlvbnMuXG4gKiBUaGlzIGNvbXBvbmVudCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBhdXRoIGxvZ2ljIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gYXBwLmNvbXBvbmVudC50c1xuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2V0UHJvZHVjdGlvblN0YXR1cywgTG9nRXJyb3IsIExvZ1N0YXR1cyB9IGZyb20gJ0BtZW1iZXJqdW5jdGlvbi9jb3JlJztcbmltcG9ydCB7IE1KQXV0aEJhc2UsIFN0YW5kYXJkVXNlckluZm8sIEF1dGhFcnJvclR5cGUgfSBmcm9tICdAbWVtYmVyanVuY3Rpb24vbmctYXV0aC1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBNSkluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2luaXRpYWxpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTUpFbnZpcm9ubWVudENvbmZpZywgTUpfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi9ib290c3RyYXAudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtai1hdXRoLXNoZWxsJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibWotYXV0aC1zaGVsbFwiPlxuICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhSGFzRXJyb3IgfHwgc2hvd1ZhbGlkYXRpb25Pbmx5XCI+PC9uZy1jb250ZW50PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiSGFzRXJyb3IgJiYgIXNob3dWYWxpZGF0aW9uT25seVwiIGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCI+XG4gICAgICAgIDxoMj5FcnJvcjwvaDI+XG4gICAgICAgIDxwPnt7IEVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLm1qLWF1dGgtc2hlbGwge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAuZXJyb3ItY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLmVycm9yLWNvbnRhaW5lciBoMiB7XG4gICAgICBjb2xvcjogI2QzMmYyZjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBNSkF1dGhTaGVsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBIYXNFcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgRXJyb3JNZXNzYWdlOiBhbnkgPSAnJztcbiAgcHVibGljIHNob3dWYWxpZGF0aW9uT25seSA9IGZhbHNlO1xuICBwdWJsaWMgc3ViSGVhZGVyVGV4dDogc3RyaW5nID0gXCJXZWxjb21lIGJhY2shIFBsZWFzZSBsb2cgaW4gdG8geW91ciBhY2NvdW50LlwiO1xuXG4gIHByaXZhdGUgaW5pdGlhbFBhdGggPSAnLyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHB1YmxpYyBhdXRoQmFzZTogTUpBdXRoQmFzZSxcbiAgICBwcml2YXRlIGluaXRTZXJ2aWNlOiBNSkluaXRpYWxpemF0aW9uU2VydmljZSxcbiAgICBASW5qZWN0KE1KX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBNSkVudmlyb25tZW50Q29uZmlnXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygn8J+agCBNZW1iZXJKdW5jdGlvbiAzLjAgLSBBdXRoIFNoZWxsIEluaXRpYWxpemluZycpO1xuXG4gICAgU2V0UHJvZHVjdGlvblN0YXR1cyh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pO1xuICAgIHRoaXMuaW5pdGlhbFBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAod2luZG93LmxvY2F0aW9uLnNlYXJjaCA/IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggOiAnJyk7XG5cbiAgICBhd2FpdCB0aGlzLnNldHVwQXV0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzdWNjZXNzZnVsIGxvZ2luIGFuZCBpbml0aWFsaXplIHRoZSBhcHBsaWNhdGlvblxuICAgKi9cbiAgYXN5bmMgaGFuZGxlTG9naW4odG9rZW46IHN0cmluZywgdXNlckluZm86IFN0YW5kYXJkVXNlckluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBHcmFwaFFMIGNsaWVudFxuICAgICAgYXdhaXQgdGhpcy5pbml0U2VydmljZS5pbml0aWFsaXplR3JhcGhRTCh0b2tlbiwgdGhpcy5lbnZpcm9ubWVudCk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHVzZXIgYWNjZXNzIGFuZCByZWZyZXNoIGRhdGFcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzLmluaXRTZXJ2aWNlLnZhbGlkYXRlVXNlckFjY2VzcygpO1xuXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLkhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5FcnJvck1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0LmVycm9yIS5tZXNzYWdlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5FcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gc3RhcnR1cCB2YWxpZGF0aW9uIGNoZWNrc1xuICAgICAgdGhpcy5pbml0U2VydmljZS5ydW5WYWxpZGF0aW9uQ2hlY2tzKCk7XG5cbiAgICAgIC8vIE5hdmlnYXRlIHRvIGluaXRpYWwgcm91dGVcbiAgICAgIHRoaXMuaW5pdFNlcnZpY2UubmF2aWdhdGVUb0luaXRpYWxSb3V0ZSh0aGlzLmluaXRpYWxQYXRoLCB0aGlzLmRvY3VtZW50KTtcblxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAvLyBDaGVjayBmb3Igbm8gcm9sZXMgZXJyb3JcbiAgICAgIGlmICh0aGlzLmluaXRTZXJ2aWNlLmlzTm9Vc2VyUm9sZXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHRoaXMuc2hvd1ZhbGlkYXRpb25Pbmx5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5IYXNFcnJvciA9IHRydWU7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaW5pdFNlcnZpY2UuaGFuZGxlTm9Sb2xlc0Vycm9yKCk7XG4gICAgICAgIHJldHVybjsgLy8gRG9uJ3QgdGhyb3csIGFsbG93IFVJIHRvIHNob3cgdmFsaWRhdGlvbiBiYW5uZXJcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IGF1dGggcmV0cnkgaWYgYXBwbGljYWJsZVxuICAgICAgY29uc3QgcmV0cmllZCA9IGF3YWl0IHRoaXMuaW5pdFNlcnZpY2UuaGFuZGxlQXV0aFJldHJ5KGVycik7XG4gICAgICBpZiAocmV0cmllZCkge1xuICAgICAgICByZXR1cm47IC8vIFJldHJ5IGluaXRpYXRlZFxuICAgICAgfVxuXG4gICAgICAvLyBTaG93IGVycm9yXG4gICAgICB0aGlzLkhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuRXJyb3JNZXNzYWdlID0gZXJyO1xuICAgICAgTG9nRXJyb3IoJ0Vycm9yIExvZ2dpbmcgSW46ICcgKyBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBhdXRoZW50aWNhdGlvbiBhbmQgaGFuZGxlIGF1dGggc3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgYXN5bmMgc2V0dXBBdXRoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEF1dGggcHJvdmlkZXIgYWxyZWFkeSBpbml0aWFsaXplZCBieSBBUFBfSU5JVElBTElaRVJcblxuICAgIC8vIExpc3RlbiBmb3IgdXNlciBpbmZvIGNoYW5nZXNcbiAgICB0aGlzLmF1dGhCYXNlLmdldFVzZXJJbmZvKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogYXN5bmMgKHVzZXJJbmZvKSA9PiB7XG4gICAgICAgICAgaWYgKHVzZXJJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuYXV0aEJhc2UuZ2V0SWRUb2tlbigpO1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVMb2dpbih0b2tlbiwgdXNlckluZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlciBpbmZvIGF2YWlsYWJsZSBidXQgbm8gdG9rZW4gZm91bmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgTG9nRXJyb3IoJ0Vycm9yIExvZ2dpbmcgSW46ICcgKyBlcnIpO1xuICAgICAgICAgIHRoaXMuc3ViSGVhZGVyVGV4dCA9IHRoaXMuaW5pdFNlcnZpY2UuZ2V0QXV0aEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgYXV0aGVudGljYXRlZFxuICAgIHRoaXMuYXV0aEJhc2UuaXNBdXRoZW50aWNhdGVkKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2dnZWRJbjogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoIWxvZ2dlZEluKSB7XG4gICAgICAgICAgLy8gRGlzcGxheSBsb2dpbiBzY3JlZW4gLSBhdXRoIHN0YXRlIGlzIG1hbmFnZWQgYnkgcHJvdmlkZXJcbiAgICAgICAgICBjb25zb2xlLmxvZygnVXNlciBub3QgYXV0aGVudGljYXRlZCwgc2hvd2luZyBsb2dpbiBzY3JlZW4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,186 +0,0 @@
1
- /**
2
- * MemberJunction 3.0 Initialization Service
3
- *
4
- * Handles all core initialization tasks:
5
- * - Generated entities loading
6
- * - GraphQL client setup
7
- * - Token refresh configuration
8
- * - System validation
9
- */
10
- import { Injectable, Inject } from '@angular/core';
11
- import { Metadata } from '@memberjunction/core';
12
- import { setupGraphQLClient, GraphQLProviderConfigData } from '@memberjunction/graphql-dataprovider';
13
- import { AuthErrorType } from '@memberjunction/ng-auth-services';
14
- import { SharedService } from '@memberjunction/ng-shared';
15
- import { MJ_STARTUP_VALIDATION } from '../bootstrap.types';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/router";
18
- import * as i2 from "@memberjunction/ng-auth-services";
19
- export class MJInitializationService {
20
- router;
21
- authBase;
22
- startupValidationService;
23
- constructor(router, authBase, startupValidationService) {
24
- this.router = router;
25
- this.authBase = authBase;
26
- this.startupValidationService = startupValidationService;
27
- }
28
- /**
29
- * Initialize GraphQL client with authentication token and refresh callback
30
- */
31
- async initializeGraphQL(token, environment) {
32
- const url = environment.GRAPHQL_URI;
33
- const wsurl = environment.GRAPHQL_WS_URI;
34
- const start = Date.now();
35
- const config = new GraphQLProviderConfigData(token, url, wsurl, async () => {
36
- // Token refresh callback - refreshToken() returns StandardAuthToken directly or throws
37
- const token = await this.authBase.refreshToken();
38
- return token.idToken;
39
- }, environment.MJ_CORE_SCHEMA_NAME);
40
- await setupGraphQLClient(config);
41
- const end = Date.now();
42
- console.log(`✓ GraphQL Client Setup Complete: ${end - start}ms`);
43
- }
44
- /**
45
- * Refresh shared data and validate user access
46
- */
47
- async validateUserAccess() {
48
- await SharedService.RefreshData(true);
49
- const md = new Metadata();
50
- if (!md.CurrentUser) {
51
- return {
52
- success: false,
53
- error: {
54
- message: "You don't have access to the application, contact your system administrator.",
55
- type: 'no_access'
56
- }
57
- };
58
- }
59
- return { success: true };
60
- }
61
- /**
62
- * Run startup validation checks (if validation service is provided)
63
- */
64
- runValidationChecks() {
65
- if (!this.startupValidationService) {
66
- return; // No validation service provided
67
- }
68
- // Small delay to ensure everything is initialized
69
- setTimeout(() => {
70
- this.startupValidationService?.validateSystemSetup();
71
- }, 500);
72
- }
73
- /**
74
- * Navigate to initial route after successful login
75
- */
76
- navigateToInitialRoute(initialPath, document) {
77
- localStorage.removeItem('jwt-retry-ts');
78
- if (initialPath === '/') {
79
- // Use first nav item instead
80
- setTimeout(() => {
81
- // Find the KendoDrawer element and simulate a click for the first item
82
- const drawerElement = document.querySelector('li.k-drawer-item.k-level-0');
83
- if (drawerElement)
84
- drawerElement.click();
85
- }, 10); // Wait for the drawer to finish render
86
- }
87
- else {
88
- this.router.navigateByUrl(initialPath, { replaceUrl: true });
89
- }
90
- }
91
- /**
92
- * Check if error is related to missing user roles
93
- */
94
- isNoUserRolesError(err) {
95
- try {
96
- if (!err || typeof err !== 'object')
97
- return false;
98
- // Check for GraphQL-style errors
99
- if (err.response && Array.isArray(err.response.errors)) {
100
- return err.response.errors.some((e) => e && e.message && typeof e.message === 'string' &&
101
- e.message.includes('does not have read permissions on User Roles'));
102
- }
103
- // Check for specific "ResourceTypes" error
104
- if (err.toString && typeof err.toString === 'function') {
105
- const errorString = err.toString();
106
- if (errorString.includes("Cannot read properties of undefined (reading 'ResourceTypes')")) {
107
- return true;
108
- }
109
- }
110
- // Check for error message directly on the error object
111
- if (err.message && typeof err.message === 'string') {
112
- const message = err.message;
113
- return message.includes('does not have read permissions on User Roles') ||
114
- message.includes("Cannot read properties of undefined (reading 'ResourceTypes')");
115
- }
116
- // Check for nested error object
117
- if (err.error && typeof err.error === 'object') {
118
- return this.isNoUserRolesError(err.error);
119
- }
120
- return false;
121
- }
122
- catch (e) {
123
- console.error('Error while checking for user roles error:', e);
124
- return false;
125
- }
126
- }
127
- /**
128
- * Handle no roles error by showing validation banner (if validation service is provided)
129
- */
130
- handleNoRolesError() {
131
- this.startupValidationService?.addNoRolesValidationIssue();
132
- return {
133
- success: false,
134
- error: {
135
- message: 'User has no roles assigned',
136
- type: 'no_roles',
137
- showValidationOnly: true
138
- }
139
- };
140
- }
141
- /**
142
- * Handle authentication retry logic
143
- */
144
- async handleAuthRetry(err) {
145
- const retryKey = 'auth-retry-dt';
146
- const lastRetryDateTime = localStorage.getItem(retryKey);
147
- const yesterday = +new Date(Date.now() - 1 * 24 * 60 * 60 * 1000);
148
- const retriedRecently = lastRetryDateTime && +new Date(lastRetryDateTime) > yesterday;
149
- const authError = this.authBase.classifyError(err);
150
- const isTokenExpired = authError.type === AuthErrorType.TOKEN_EXPIRED;
151
- if (!retriedRecently && isTokenExpired) {
152
- console.log('JWT Expired, retrying once: ' + err);
153
- localStorage.setItem(retryKey, new Date().toISOString());
154
- await this.authBase.login({ appState: { target: window.location.pathname } }).toPromise();
155
- return true;
156
- }
157
- return false;
158
- }
159
- /**
160
- * Get auth error message for display
161
- */
162
- getAuthErrorMessage(err) {
163
- const authError = this.authBase.classifyError(err);
164
- switch (authError.type) {
165
- case AuthErrorType.NO_ACTIVE_SESSION:
166
- return "Welcome back! Please log in to your account.";
167
- case AuthErrorType.INTERACTION_REQUIRED:
168
- case AuthErrorType.TOKEN_EXPIRED:
169
- return "Your session has expired. Please log in to your account.";
170
- default:
171
- return authError.userMessage || "Welcome back! Please log in to your account.";
172
- }
173
- }
174
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJInitializationService, deps: [{ token: i1.Router }, { token: i2.MJAuthBase }, { token: MJ_STARTUP_VALIDATION }], target: i0.ɵɵFactoryTarget.Injectable });
175
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJInitializationService, providedIn: 'root' });
176
- }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJInitializationService, decorators: [{
178
- type: Injectable,
179
- args: [{
180
- providedIn: 'root'
181
- }]
182
- }], ctorParameters: () => [{ type: i1.Router }, { type: i2.MJAuthBase }, { type: undefined, decorators: [{
183
- type: Inject,
184
- args: [MJ_STARTUP_VALIDATION]
185
- }] }] });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvaW5pdGlhbGl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRyxPQUFPLEVBQWdDLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQW1FLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFjNUgsTUFBTSxPQUFPLHVCQUF1QjtJQUV4QjtJQUNBO0lBQytCO0lBSHpDLFlBQ1UsTUFBYyxFQUNkLFFBQW9CLEVBQ1csd0JBQTJEO1FBRjFGLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFZO1FBQ1csNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFtQztJQUNqRyxDQUFDO0lBRUo7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFdBQWdDO1FBQ3JFLE1BQU0sR0FBRyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLGNBQWMsQ0FBQztRQUVqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSx5QkFBeUIsQ0FDMUMsS0FBSyxFQUNMLEdBQUcsRUFDSCxLQUFLLEVBQ0wsS0FBSyxJQUFJLEVBQUU7WUFD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Q0FBQyxDQUFDO1FBRW5ELFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssYUFBYSxDQUFDLGlCQUFpQjtnQkFDbEMsT0FBTyw4Q0FBOEMsQ0FBQztZQUN4RCxLQUFLLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLGFBQWEsQ0FBQyxhQUFhO2dCQUM5QixPQUFPLDBEQUEwRCxDQUFDO1lBQ3BFO2dCQUNFLE9BQU8sU0FBUyxDQUFDLFdBQVcsSUFBSSw4Q0FBOEMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQzt3R0FwTFUsdUJBQXVCLGtFQUl4QixxQkFBcUI7NEdBSnBCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFLSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtYmVySnVuY3Rpb24gMy4wIEluaXRpYWxpemF0aW9uIFNlcnZpY2VcbiAqXG4gKiBIYW5kbGVzIGFsbCBjb3JlIGluaXRpYWxpemF0aW9uIHRhc2tzOlxuICogLSBHZW5lcmF0ZWQgZW50aXRpZXMgbG9hZGluZ1xuICogLSBHcmFwaFFMIGNsaWVudCBzZXR1cFxuICogLSBUb2tlbiByZWZyZXNoIGNvbmZpZ3VyYXRpb25cbiAqIC0gU3lzdGVtIHZhbGlkYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gJ0BtZW1iZXJqdW5jdGlvbi9jb3JlJztcbmltcG9ydCB7IHNldHVwR3JhcGhRTENsaWVudCwgR3JhcGhRTFByb3ZpZGVyQ29uZmlnRGF0YSB9IGZyb20gJ0BtZW1iZXJqdW5jdGlvbi9ncmFwaHFsLWRhdGFwcm92aWRlcic7XG5pbXBvcnQgeyBNSkF1dGhCYXNlLCBTdGFuZGFyZFVzZXJJbmZvLCBBdXRoRXJyb3JUeXBlIH0gZnJvbSAnQG1lbWJlcmp1bmN0aW9uL25nLWF1dGgtc2VydmljZXMnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJ0BtZW1iZXJqdW5jdGlvbi9uZy1zaGFyZWQnO1xuaW1wb3J0IHsgTUpFbnZpcm9ubWVudENvbmZpZywgTUpfRU5WSVJPTk1FTlQsIE1KU3RhcnR1cFZhbGlkYXRpb25TZXJ2aWNlLCBNSl9TVEFSVFVQX1ZBTElEQVRJT04gfSBmcm9tICcuLi9ib290c3RyYXAudHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxpemF0aW9uUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZXJyb3I/OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHR5cGU6ICdub19hY2Nlc3MnIHwgJ25vX3JvbGVzJyB8ICdhdXRoX2Vycm9yJyB8ICd1bmtub3duJztcbiAgICBzaG93VmFsaWRhdGlvbk9ubHk/OiBib29sZWFuO1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNSkluaXRpYWxpemF0aW9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhdXRoQmFzZTogTUpBdXRoQmFzZSxcbiAgICBASW5qZWN0KE1KX1NUQVJUVVBfVkFMSURBVElPTikgcHJpdmF0ZSBzdGFydHVwVmFsaWRhdGlvblNlcnZpY2U6IE1KU3RhcnR1cFZhbGlkYXRpb25TZXJ2aWNlIHwgbnVsbFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgR3JhcGhRTCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiB0b2tlbiBhbmQgcmVmcmVzaCBjYWxsYmFja1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZUdyYXBoUUwodG9rZW46IHN0cmluZywgZW52aXJvbm1lbnQ6IE1KRW52aXJvbm1lbnRDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IGVudmlyb25tZW50LkdSQVBIUUxfVVJJO1xuICAgIGNvbnN0IHdzdXJsOiBzdHJpbmcgPSBlbnZpcm9ubWVudC5HUkFQSFFMX1dTX1VSSTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBjb25maWcgPSBuZXcgR3JhcGhRTFByb3ZpZGVyQ29uZmlnRGF0YShcbiAgICAgIHRva2VuLFxuICAgICAgdXJsLFxuICAgICAgd3N1cmwsXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRva2VuIHJlZnJlc2ggY2FsbGJhY2sgLSByZWZyZXNoVG9rZW4oKSByZXR1cm5zIFN0YW5kYXJkQXV0aFRva2VuIGRpcmVjdGx5IG9yIHRocm93c1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuYXV0aEJhc2UucmVmcmVzaFRva2VuKCk7XG4gICAgICAgIHJldHVybiB0b2tlbi5pZFRva2VuO1xuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50Lk1KX0NPUkVfU0NIRU1BX05BTUVcbiAgICApO1xuXG4gICAgYXdhaXQgc2V0dXBHcmFwaFFMQ2xpZW50KGNvbmZpZyk7XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEdyYXBoUUwgQ2xpZW50IFNldHVwIENvbXBsZXRlOiAke2VuZCAtIHN0YXJ0fW1zYCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBzaGFyZWQgZGF0YSBhbmQgdmFsaWRhdGUgdXNlciBhY2Nlc3NcbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlVXNlckFjY2VzcygpOiBQcm9taXNlPEluaXRpYWxpemF0aW9uUmVzdWx0PiB7XG4gICAgYXdhaXQgU2hhcmVkU2VydmljZS5SZWZyZXNoRGF0YSh0cnVlKTtcblxuICAgIGNvbnN0IG1kID0gbmV3IE1ldGFkYXRhKCk7XG5cbiAgICBpZiAoIW1kLkN1cnJlbnRVc2VyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBtZXNzYWdlOiBcIllvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgYXBwbGljYXRpb24sIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci5cIixcbiAgICAgICAgICB0eXBlOiAnbm9fYWNjZXNzJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gc3RhcnR1cCB2YWxpZGF0aW9uIGNoZWNrcyAoaWYgdmFsaWRhdGlvbiBzZXJ2aWNlIGlzIHByb3ZpZGVkKVxuICAgKi9cbiAgcnVuVmFsaWRhdGlvbkNoZWNrcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhcnR1cFZhbGlkYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm47IC8vIE5vIHZhbGlkYXRpb24gc2VydmljZSBwcm92aWRlZFxuICAgIH1cblxuICAgIC8vIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0YXJ0dXBWYWxpZGF0aW9uU2VydmljZT8udmFsaWRhdGVTeXN0ZW1TZXR1cCgpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gaW5pdGlhbCByb3V0ZSBhZnRlciBzdWNjZXNzZnVsIGxvZ2luXG4gICAqL1xuICBuYXZpZ2F0ZVRvSW5pdGlhbFJvdXRlKGluaXRpYWxQYXRoOiBzdHJpbmcsIGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdqd3QtcmV0cnktdHMnKTtcblxuICAgIGlmIChpbml0aWFsUGF0aCA9PT0gJy8nKSB7XG4gICAgICAvLyBVc2UgZmlyc3QgbmF2IGl0ZW0gaW5zdGVhZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIEZpbmQgdGhlIEtlbmRvRHJhd2VyIGVsZW1lbnQgYW5kIHNpbXVsYXRlIGEgY2xpY2sgZm9yIHRoZSBmaXJzdCBpdGVtXG4gICAgICAgIGNvbnN0IGRyYXdlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaS5rLWRyYXdlci1pdGVtLmstbGV2ZWwtMCcpIGFzIGFueTtcbiAgICAgICAgaWYgKGRyYXdlckVsZW1lbnQpIGRyYXdlckVsZW1lbnQuY2xpY2soKTtcbiAgICAgIH0sIDEwKTsgLy8gV2FpdCBmb3IgdGhlIGRyYXdlciB0byBmaW5pc2ggcmVuZGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoaW5pdGlhbFBhdGgsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZXJyb3IgaXMgcmVsYXRlZCB0byBtaXNzaW5nIHVzZXIgcm9sZXNcbiAgICovXG4gIGlzTm9Vc2VyUm9sZXNFcnJvcihlcnI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWVyciB8fCB0eXBlb2YgZXJyICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBDaGVjayBmb3IgR3JhcGhRTC1zdHlsZSBlcnJvcnNcbiAgICAgIGlmIChlcnIucmVzcG9uc2UgJiYgQXJyYXkuaXNBcnJheShlcnIucmVzcG9uc2UuZXJyb3JzKSkge1xuICAgICAgICByZXR1cm4gZXJyLnJlc3BvbnNlLmVycm9ycy5zb21lKChlOiBhbnkpID0+XG4gICAgICAgICAgZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2RvZXMgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9ucyBvbiBVc2VyIFJvbGVzJylcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIFwiUmVzb3VyY2VUeXBlc1wiIGVycm9yXG4gICAgICBpZiAoZXJyLnRvU3RyaW5nICYmIHR5cGVvZiBlcnIudG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZXJyb3JTdHJpbmcgPSBlcnIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGVycm9yU3RyaW5nLmluY2x1ZGVzKFwiQ2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiB1bmRlZmluZWQgKHJlYWRpbmcgJ1Jlc291cmNlVHlwZXMnKVwiKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlcnJvciBtZXNzYWdlIGRpcmVjdGx5IG9uIHRoZSBlcnJvciBvYmplY3RcbiAgICAgIGlmIChlcnIubWVzc2FnZSAmJiB0eXBlb2YgZXJyLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2UuaW5jbHVkZXMoJ2RvZXMgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9ucyBvbiBVc2VyIFJvbGVzJykgfHxcbiAgICAgICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoXCJDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIHVuZGVmaW5lZCAocmVhZGluZyAnUmVzb3VyY2VUeXBlcycpXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbmVzdGVkIGVycm9yIG9iamVjdFxuICAgICAgaWYgKGVyci5lcnJvciAmJiB0eXBlb2YgZXJyLmVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc05vVXNlclJvbGVzRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGZvciB1c2VyIHJvbGVzIGVycm9yOicsIGUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbm8gcm9sZXMgZXJyb3IgYnkgc2hvd2luZyB2YWxpZGF0aW9uIGJhbm5lciAoaWYgdmFsaWRhdGlvbiBzZXJ2aWNlIGlzIHByb3ZpZGVkKVxuICAgKi9cbiAgaGFuZGxlTm9Sb2xlc0Vycm9yKCk6IEluaXRpYWxpemF0aW9uUmVzdWx0IHtcbiAgICB0aGlzLnN0YXJ0dXBWYWxpZGF0aW9uU2VydmljZT8uYWRkTm9Sb2xlc1ZhbGlkYXRpb25Jc3N1ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VzZXIgaGFzIG5vIHJvbGVzIGFzc2lnbmVkJyxcbiAgICAgICAgdHlwZTogJ25vX3JvbGVzJyxcbiAgICAgICAgc2hvd1ZhbGlkYXRpb25Pbmx5OiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYXV0aGVudGljYXRpb24gcmV0cnkgbG9naWNcbiAgICovXG4gIGFzeW5jIGhhbmRsZUF1dGhSZXRyeShlcnI6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJldHJ5S2V5ID0gJ2F1dGgtcmV0cnktZHQnO1xuICAgIGNvbnN0IGxhc3RSZXRyeURhdGVUaW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0ocmV0cnlLZXkpO1xuICAgIGNvbnN0IHllc3RlcmRheSA9ICtuZXcgRGF0ZShEYXRlLm5vdygpIC0gMSAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIGNvbnN0IHJldHJpZWRSZWNlbnRseSA9IGxhc3RSZXRyeURhdGVUaW1lICYmICtuZXcgRGF0ZShsYXN0UmV0cnlEYXRlVGltZSkgPiB5ZXN0ZXJkYXk7XG5cbiAgICBjb25zdCBhdXRoRXJyb3IgPSB0aGlzLmF1dGhCYXNlLmNsYXNzaWZ5RXJyb3IoZXJyKTtcbiAgICBjb25zdCBpc1Rva2VuRXhwaXJlZCA9IGF1dGhFcnJvci50eXBlID09PSBBdXRoRXJyb3JUeXBlLlRPS0VOX0VYUElSRUQ7XG5cbiAgICBpZiAoIXJldHJpZWRSZWNlbnRseSAmJiBpc1Rva2VuRXhwaXJlZCkge1xuICAgICAgY29uc29sZS5sb2coJ0pXVCBFeHBpcmVkLCByZXRyeWluZyBvbmNlOiAnICsgZXJyKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHJldHJ5S2V5LCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICAgICAgYXdhaXQgdGhpcy5hdXRoQmFzZS5sb2dpbih7IGFwcFN0YXRlOiB7IHRhcmdldDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIH0gfSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF1dGggZXJyb3IgbWVzc2FnZSBmb3IgZGlzcGxheVxuICAgKi9cbiAgZ2V0QXV0aEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGF1dGhFcnJvciA9IHRoaXMuYXV0aEJhc2UuY2xhc3NpZnlFcnJvcihlcnIpO1xuXG4gICAgc3dpdGNoIChhdXRoRXJyb3IudHlwZSkge1xuICAgICAgY2FzZSBBdXRoRXJyb3JUeXBlLk5PX0FDVElWRV9TRVNTSU9OOlxuICAgICAgICByZXR1cm4gXCJXZWxjb21lIGJhY2shIFBsZWFzZSBsb2cgaW4gdG8geW91ciBhY2NvdW50LlwiO1xuICAgICAgY2FzZSBBdXRoRXJyb3JUeXBlLklOVEVSQUNUSU9OX1JFUVVJUkVEOlxuICAgICAgY2FzZSBBdXRoRXJyb3JUeXBlLlRPS0VOX0VYUElSRUQ6XG4gICAgICAgIHJldHVybiBcIllvdXIgc2Vzc2lvbiBoYXMgZXhwaXJlZC4gUGxlYXNlIGxvZyBpbiB0byB5b3VyIGFjY291bnQuXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYXV0aEVycm9yLnVzZXJNZXNzYWdlIHx8IFwiV2VsY29tZSBiYWNrISBQbGVhc2UgbG9nIGluIHRvIHlvdXIgYWNjb3VudC5cIjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyanVuY3Rpb24tbmctYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lbWJlcmp1bmN0aW9uLW5nLWJvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,9 +0,0 @@
1
- /**
2
- * Public API Surface of @memberjunction/ng-bootstrap
3
- */
4
- export * from './lib/bootstrap.module';
5
- export * from './lib/bootstrap.component';
6
- export * from './lib/bootstrap.types';
7
- export * from './lib/services/initialization.service';
8
- export * from './lib/components/auth-shell.component';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHVDQUF1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQG1lbWJlcmp1bmN0aW9uL25nLWJvb3RzdHJhcFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jvb3RzdHJhcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYm9vdHN0cmFwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ib290c3RyYXAudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F1dGgtc2hlbGwuY29tcG9uZW50JztcbiJdfQ==
package/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="@memberjunction/ng-bootstrap" />
5
- export * from './public-api';
@@ -1,16 +0,0 @@
1
- /**
2
- * MemberJunction 3.0 Bootstrap Component
3
- *
4
- * Minimal placeholder component for future fully encapsulated bootstrap.
5
- * Currently applications should use MJInitializationService directly in their app.component.
6
- */
7
- import { OnInit } from '@angular/core';
8
- import { MJEnvironmentConfig } from './bootstrap.types';
9
- import * as i0 from "@angular/core";
10
- export declare class MJBootstrapComponent implements OnInit {
11
- private environment;
12
- constructor(environment: MJEnvironmentConfig);
13
- ngOnInit(): void;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<MJBootstrapComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<MJBootstrapComponent, "mj-bootstrap", never, {}, {}, never, ["*"], false, never>;
16
- }
@@ -1,63 +0,0 @@
1
- /**
2
- * MemberJunction 3.0 Bootstrap Module
3
- *
4
- * Provides the MJBootstrapComponent and all necessary services for MemberJunction Angular applications.
5
- * This module encapsulates all the authentication and initialization logic that was previously
6
- * spread across app.component.ts and app.module.ts.
7
- *
8
- * Usage:
9
- * ```typescript
10
- * import { LoadGeneratedEntities } from 'mj_generatedentities';
11
- * LoadGeneratedEntities(); // Prevent tree shaking
12
- *
13
- * @NgModule({
14
- * imports: [
15
- * BrowserModule,
16
- * BrowserAnimationsModule,
17
- * MJBootstrapModule.forRoot(environment),
18
- * // ... other MJ modules
19
- * ],
20
- * bootstrap: [AppComponent]
21
- * })
22
- * export class AppModule {}
23
- * ```
24
- */
25
- import { ModuleWithProviders } from '@angular/core';
26
- import { MJEnvironmentConfig } from './bootstrap.types';
27
- import { MJAuthBase } from '@memberjunction/ng-auth-services';
28
- import * as i0 from "@angular/core";
29
- import * as i1 from "./bootstrap.component";
30
- import * as i2 from "./components/auth-shell.component";
31
- import * as i3 from "@angular/common";
32
- /**
33
- * Initialize auth provider before Angular routing starts
34
- * This ensures auth providers can process OAuth redirect responses before Angular's router
35
- * consumes the URL hash
36
- */
37
- export declare function initializeAuth(authService: MJAuthBase): () => Promise<void>;
38
- export declare class MJBootstrapModule {
39
- /**
40
- * Configure the bootstrap module with environment settings
41
- *
42
- * @param environment - Environment configuration for the application
43
- * @returns ModuleWithProviders with environment configuration and all services
44
- *
45
- * @example
46
- * ```typescript
47
- * import { environment } from '../environments/environment';
48
- * import { LoadGeneratedEntities } from 'mj_generatedentities';
49
- * LoadGeneratedEntities();
50
- *
51
- * @NgModule({
52
- * imports: [
53
- * MJBootstrapModule.forRoot(environment)
54
- * ]
55
- * })
56
- * export class AppModule {}
57
- * ```
58
- */
59
- static forRoot(environment: MJEnvironmentConfig): ModuleWithProviders<MJBootstrapModule>;
60
- static ɵfac: i0.ɵɵFactoryDeclaration<MJBootstrapModule, never>;
61
- static ɵmod: i0.ɵɵNgModuleDeclaration<MJBootstrapModule, [typeof i1.MJBootstrapComponent, typeof i2.MJAuthShellComponent], [typeof i3.CommonModule], [typeof i1.MJBootstrapComponent, typeof i2.MJAuthShellComponent]>;
62
- static ɵinj: i0.ɵɵInjectorDeclaration<MJBootstrapModule>;
63
- }