@memberjunction/ng-bootstrap 3.4.0 → 4.0.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 +1 @@
1
- {"version":3,"file":"memberjunction-ng-bootstrap.mjs","sources":["../../src/lib/bootstrap.types.ts","../../src/lib/bootstrap.component.ts","../../src/lib/services/initialization.service.ts","../../src/lib/components/auth-shell.component.ts","../../src/lib/bootstrap.module.ts","../../src/public-api.ts","../../src/memberjunction-ng-bootstrap.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token for MJ Environment Configuration\n */\nexport const MJ_ENVIRONMENT = new InjectionToken<MJEnvironmentConfig>('MJ_ENVIRONMENT');\n\n/**\n * Injection token for optional startup validation service\n */\nexport const MJ_STARTUP_VALIDATION = new InjectionToken<MJStartupValidationService | null>('MJ_STARTUP_VALIDATION', {\n providedIn: 'root',\n factory: () => null // Default to null if not provided\n});\n\n/**\n * Optional interface for startup validation services\n * Applications can provide their own implementation to handle startup validation\n */\nexport interface MJStartupValidationService {\n /**\n * Runs validation checks during application startup\n */\n validateSystemSetup(): void;\n\n /**\n * Adds a validation issue for missing user roles\n */\n addNoRolesValidationIssue(): void;\n}\n\n/**\n * Environment configuration interface for MemberJunction Angular applications\n */\nexport interface MJEnvironmentConfig {\n /**\n * Whether the app is running in production mode\n */\n production: boolean;\n\n /**\n * GraphQL HTTP endpoint URL\n * @example 'http://localhost:4000/graphql'\n */\n GRAPHQL_URI: string;\n\n /**\n * GraphQL WebSocket endpoint URL for subscriptions\n * @example 'ws://localhost:4000/graphql'\n */\n GRAPHQL_WS_URI: string;\n\n /**\n * Authentication provider type\n */\n AUTH_TYPE: 'msal' | 'auth0';\n\n /**\n * MemberJunction core schema name in the database\n * @default '__mj'\n */\n MJ_CORE_SCHEMA_NAME: string;\n\n /**\n * Microsoft Azure AD/Entra Client ID (for MSAL auth)\n */\n CLIENT_ID?: string;\n\n /**\n * Microsoft Azure AD/Entra Tenant ID (for MSAL auth)\n */\n TENANT_ID?: string;\n\n /**\n * Auth0 domain (for Auth0 auth)\n * @example 'myapp.us.auth0.com'\n */\n AUTH0_DOMAIN?: string;\n\n /**\n * Auth0 client ID (for Auth0 auth)\n */\n AUTH0_CLIENTID?: string;\n\n /**\n * Additional custom environment properties\n */\n [key: string]: any;\n}\n","/**\n * MemberJunction 3.0 Bootstrap Component\n *\n * Minimal placeholder component for future fully encapsulated bootstrap.\n * Currently applications should use MJInitializationService directly in their app.component.\n */\n\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { SetProductionStatus } from '@memberjunction/core';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from './bootstrap.types';\n\n@Component({\n selector: 'mj-bootstrap',\n template: `\n <div class=\"mj-bootstrap-container\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n .mj-bootstrap-container {\n display: block;\n width: 100%;\n height: 100%;\n }\n `]\n})\nexport class MJBootstrapComponent implements OnInit {\n constructor(\n @Inject(MJ_ENVIRONMENT) private environment: MJEnvironmentConfig\n ) {}\n\n ngOnInit() {\n console.log('🚀 MemberJunction 3.0 Bootstrap');\n SetProductionStatus(this.environment.production);\n }\n}\n","/**\n * MemberJunction 3.0 Initialization Service\n *\n * Handles all core initialization tasks:\n * - Generated entities loading\n * - GraphQL client setup\n * - Token refresh configuration\n * - System validation\n */\n\nimport { Injectable, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Metadata } from '@memberjunction/core';\nimport { setupGraphQLClient, GraphQLProviderConfigData } from '@memberjunction/graphql-dataprovider';\nimport { MJAuthBase, StandardUserInfo, AuthErrorType } from '@memberjunction/ng-auth-services';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT, MJStartupValidationService, MJ_STARTUP_VALIDATION } from '../bootstrap.types';\n\nexport interface InitializationResult {\n success: boolean;\n error?: {\n message: string;\n type: 'no_access' | 'no_roles' | 'auth_error' | 'unknown';\n showValidationOnly?: boolean;\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MJInitializationService {\n constructor(\n private router: Router,\n private authBase: MJAuthBase,\n @Inject(MJ_STARTUP_VALIDATION) private startupValidationService: MJStartupValidationService | null\n ) {}\n\n /**\n * Initialize GraphQL client with authentication token and refresh callback\n */\n async initializeGraphQL(token: string, environment: MJEnvironmentConfig): Promise<void> {\n const url: string = environment.GRAPHQL_URI;\n const wsurl: string = environment.GRAPHQL_WS_URI;\n\n const start = Date.now();\n const config = new GraphQLProviderConfigData(\n token,\n url,\n wsurl,\n async () => {\n // Token refresh callback - refreshToken() returns StandardAuthToken directly or throws\n const token = await this.authBase.refreshToken();\n return token.idToken;\n },\n environment.MJ_CORE_SCHEMA_NAME\n );\n\n await setupGraphQLClient(config);\n const end = Date.now();\n console.log(`✓ GraphQL Client Setup Complete: ${end - start}ms`);\n }\n\n /**\n * Refresh shared data and validate user access\n */\n async validateUserAccess(): Promise<InitializationResult> {\n await SharedService.RefreshData(true);\n\n const md = new Metadata();\n\n if (!md.CurrentUser) {\n return {\n success: false,\n error: {\n message: \"You don't have access to the application, contact your system administrator.\",\n type: 'no_access'\n }\n };\n }\n\n return { success: true };\n }\n\n /**\n * Run startup validation checks (if validation service is provided)\n */\n runValidationChecks(): void {\n if (!this.startupValidationService) {\n return; // No validation service provided\n }\n\n // Small delay to ensure everything is initialized\n setTimeout(() => {\n this.startupValidationService?.validateSystemSetup();\n }, 500);\n }\n\n /**\n * Navigate to initial route after successful login\n */\n navigateToInitialRoute(initialPath: string, document: Document): void {\n localStorage.removeItem('jwt-retry-ts');\n\n if (initialPath === '/') {\n // Use first nav item instead\n setTimeout(() => {\n // Find the KendoDrawer element and simulate a click for the first item\n const drawerElement = document.querySelector('li.k-drawer-item.k-level-0') as any;\n if (drawerElement) drawerElement.click();\n }, 10); // Wait for the drawer to finish render\n } else {\n this.router.navigateByUrl(initialPath, { replaceUrl: true });\n }\n }\n\n /**\n * Check if error is related to missing user roles\n */\n isNoUserRolesError(err: any): boolean {\n try {\n if (!err || typeof err !== 'object') return false;\n\n // Check for GraphQL-style errors\n if (err.response && Array.isArray(err.response.errors)) {\n return err.response.errors.some((e: any) =>\n e && e.message && typeof e.message === 'string' &&\n e.message.includes('does not have read permissions on User Roles')\n );\n }\n\n // Check for specific \"ResourceTypes\" error\n if (err.toString && typeof err.toString === 'function') {\n const errorString = err.toString();\n if (errorString.includes(\"Cannot read properties of undefined (reading 'ResourceTypes')\")) {\n return true;\n }\n }\n\n // Check for error message directly on the error object\n if (err.message && typeof err.message === 'string') {\n const message = err.message;\n return message.includes('does not have read permissions on User Roles') ||\n message.includes(\"Cannot read properties of undefined (reading 'ResourceTypes')\");\n }\n\n // Check for nested error object\n if (err.error && typeof err.error === 'object') {\n return this.isNoUserRolesError(err.error);\n }\n\n return false;\n } catch (e) {\n console.error('Error while checking for user roles error:', e);\n return false;\n }\n }\n\n /**\n * Handle no roles error by showing validation banner (if validation service is provided)\n */\n handleNoRolesError(): InitializationResult {\n this.startupValidationService?.addNoRolesValidationIssue();\n\n return {\n success: false,\n error: {\n message: 'User has no roles assigned',\n type: 'no_roles',\n showValidationOnly: true\n }\n };\n }\n\n /**\n * Handle authentication retry logic\n */\n async handleAuthRetry(err: any): Promise<boolean> {\n const retryKey = 'auth-retry-dt';\n const lastRetryDateTime = localStorage.getItem(retryKey);\n const yesterday = +new Date(Date.now() - 1 * 24 * 60 * 60 * 1000);\n const retriedRecently = lastRetryDateTime && +new Date(lastRetryDateTime) > yesterday;\n\n const authError = this.authBase.classifyError(err);\n const isTokenExpired = authError.type === AuthErrorType.TOKEN_EXPIRED;\n\n if (!retriedRecently && isTokenExpired) {\n console.log('JWT Expired, retrying once: ' + err);\n localStorage.setItem(retryKey, new Date().toISOString());\n await this.authBase.login({ appState: { target: window.location.pathname } }).toPromise();\n return true;\n }\n\n return false;\n }\n\n /**\n * Get auth error message for display\n */\n getAuthErrorMessage(err: unknown): string {\n const authError = this.authBase.classifyError(err);\n\n switch (authError.type) {\n case AuthErrorType.NO_ACTIVE_SESSION:\n return \"Welcome back! Please log in to your account.\";\n case AuthErrorType.INTERACTION_REQUIRED:\n case AuthErrorType.TOKEN_EXPIRED:\n return \"Your session has expired. Please log in to your account.\";\n default:\n return authError.userMessage || \"Welcome back! Please log in to your account.\";\n }\n }\n}\n","/**\n * MemberJunction 3.0 Auth Shell Component\n *\n * Handles authentication flow and initialization for MJ applications.\n * This component encapsulates all the auth logic that was previously in app.component.ts\n */\n\nimport { Component, OnInit, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { SetProductionStatus, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAuthBase, StandardUserInfo, AuthErrorType } from '@memberjunction/ng-auth-services';\nimport { MJInitializationService } from '../services/initialization.service';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from '../bootstrap.types';\n\n@Component({\n selector: 'mj-auth-shell',\n template: `\n <div class=\"mj-auth-shell\">\n <ng-content *ngIf=\"!HasError || showValidationOnly\"></ng-content>\n\n <div *ngIf=\"HasError && !showValidationOnly\" class=\"error-container\">\n <h2>Error</h2>\n <p>{{ ErrorMessage }}</p>\n </div>\n </div>\n `,\n styles: [`\n .mj-auth-shell {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n .error-container {\n padding: 20px;\n text-align: center;\n }\n\n .error-container h2 {\n color: #d32f2f;\n margin-bottom: 10px;\n }\n `]\n})\nexport class MJAuthShellComponent implements OnInit {\n public HasError = false;\n public ErrorMessage: any = '';\n public showValidationOnly = false;\n public subHeaderText: string = \"Welcome back! Please log in to your account.\";\n\n private initialPath = '/';\n\n constructor(\n private router: Router,\n @Inject(DOCUMENT) public document: Document,\n public authBase: MJAuthBase,\n private initService: MJInitializationService,\n @Inject(MJ_ENVIRONMENT) private environment: MJEnvironmentConfig\n ) {}\n\n async ngOnInit() {\n console.log('🚀 MemberJunction 3.0 - Auth Shell Initializing');\n\n SetProductionStatus(this.environment.production);\n this.initialPath = window.location.pathname + (window.location.search ? window.location.search : '');\n\n await this.setupAuth();\n }\n\n /**\n * Handle successful login and initialize the application\n */\n async handleLogin(token: string, userInfo: StandardUserInfo): Promise<void> {\n if (!token) return;\n\n try {\n // Initialize GraphQL client\n await this.initService.initializeGraphQL(token, this.environment);\n\n // Validate user access and refresh data\n const validationResult = await this.initService.validateUserAccess();\n\n if (!validationResult.success) {\n this.HasError = true;\n this.ErrorMessage = validationResult.error!.message;\n throw new Error(this.ErrorMessage);\n }\n\n // Run startup validation checks\n this.initService.runValidationChecks();\n\n // Navigate to initial route\n this.initService.navigateToInitialRoute(this.initialPath, this.document);\n\n } catch (err: any) {\n // Check for no roles error\n if (this.initService.isNoUserRolesError(err)) {\n this.showValidationOnly = true;\n this.HasError = true;\n const result = this.initService.handleNoRolesError();\n return; // Don't throw, allow UI to show validation banner\n }\n\n // Try auth retry if applicable\n const retried = await this.initService.handleAuthRetry(err);\n if (retried) {\n return; // Retry initiated\n }\n\n // Show error\n this.HasError = true;\n this.ErrorMessage = err;\n LogError('Error Logging In: ' + err);\n throw err;\n }\n }\n\n /**\n * Setup authentication and handle auth state changes\n */\n async setupAuth(): Promise<void> {\n // Auth provider already initialized by APP_INITIALIZER\n\n // Listen for user info changes\n this.authBase.getUserInfo()\n .pipe(take(1))\n .subscribe({\n next: async (userInfo) => {\n if (userInfo) {\n const token = await this.authBase.getIdToken();\n\n if (token) {\n await this.handleLogin(token, userInfo);\n } else {\n console.error('User info available but no token found');\n }\n }\n },\n error: (err: unknown) => {\n LogError('Error Logging In: ' + err);\n this.subHeaderText = this.initService.getAuthErrorMessage(err);\n }\n });\n\n // Check if user is authenticated\n this.authBase.isAuthenticated()\n .pipe(take(1))\n .subscribe((loggedIn: boolean) => {\n if (!loggedIn) {\n // Display login screen - auth state is managed by provider\n console.log('User not authenticated, showing login screen');\n }\n });\n }\n}\n","/**\n * MemberJunction 3.0 Bootstrap Module\n *\n * Provides the MJBootstrapComponent and all necessary services for MemberJunction Angular applications.\n * This module encapsulates all the authentication and initialization logic that was previously\n * spread across app.component.ts and app.module.ts.\n *\n * Usage:\n * ```typescript\n * import { LoadGeneratedEntities } from 'mj_generatedentities';\n * LoadGeneratedEntities(); // Prevent tree shaking\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * BrowserAnimationsModule,\n * MJBootstrapModule.forRoot(environment),\n * // ... other MJ modules\n * ],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n * ```\n */\n\nimport { NgModule, ModuleWithProviders, APP_INITIALIZER } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJBootstrapComponent } from './bootstrap.component';\nimport { MJAuthShellComponent } from './components/auth-shell.component';\nimport { MJInitializationService } from './services/initialization.service';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from './bootstrap.types';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\n\n/**\n * Initialize auth provider before Angular routing starts\n * This ensures auth providers can process OAuth redirect responses before Angular's router\n * consumes the URL hash\n */\nexport function initializeAuth(authService: MJAuthBase): () => Promise<void> {\n return () => authService.initialize();\n}\n\n@NgModule({\n declarations: [\n MJBootstrapComponent,\n MJAuthShellComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n MJBootstrapComponent,\n MJAuthShellComponent\n ]\n})\nexport class MJBootstrapModule {\n /**\n * Configure the bootstrap module with environment settings\n *\n * @param environment - Environment configuration for the application\n * @returns ModuleWithProviders with environment configuration and all services\n *\n * @example\n * ```typescript\n * import { environment } from '../environments/environment';\n * import { LoadGeneratedEntities } from 'mj_generatedentities';\n * LoadGeneratedEntities();\n *\n * @NgModule({\n * imports: [\n * MJBootstrapModule.forRoot(environment)\n * ]\n * })\n * export class AppModule {}\n * ```\n */\n static forRoot(environment: MJEnvironmentConfig): ModuleWithProviders<MJBootstrapModule> {\n return {\n ngModule: MJBootstrapModule,\n providers: [\n { provide: MJ_ENVIRONMENT, useValue: environment },\n // MJInitializationService uses providedIn: 'root'\n {\n provide: APP_INITIALIZER,\n useFactory: initializeAuth,\n deps: [MJAuthBase],\n multi: true\n }\n ]\n };\n }\n}\n","/**\n * Public API Surface of @memberjunction/ng-bootstrap\n */\n\nexport * from './lib/bootstrap.module';\nexport * from './lib/bootstrap.component';\nexport * from './lib/bootstrap.types';\nexport * from './lib/services/initialization.service';\nexport * from './lib/components/auth-shell.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.MJInitializationService"],"mappings":"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"}
1
+ {"version":3,"file":"memberjunction-ng-bootstrap.mjs","sources":["../../src/lib/bootstrap.types.ts","../../src/lib/bootstrap.component.ts","../../src/lib/services/initialization.service.ts","../../src/lib/components/auth-shell.component.ts","../../src/lib/bootstrap.module.ts","../../src/generated/mj-class-registrations.ts","../../src/public-api.ts","../../src/memberjunction-ng-bootstrap.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token for MJ Environment Configuration\n */\nexport const MJ_ENVIRONMENT = new InjectionToken<MJEnvironmentConfig>('MJ_ENVIRONMENT');\n\n/**\n * Injection token for optional startup validation service\n */\nexport const MJ_STARTUP_VALIDATION = new InjectionToken<MJStartupValidationService | null>('MJ_STARTUP_VALIDATION', {\n providedIn: 'root',\n factory: () => null // Default to null if not provided\n});\n\n/**\n * Optional interface for startup validation services\n * Applications can provide their own implementation to handle startup validation\n */\nexport interface MJStartupValidationService {\n /**\n * Runs validation checks during application startup\n */\n validateSystemSetup(): void;\n\n /**\n * Adds a validation issue for missing user roles\n */\n addNoRolesValidationIssue(): void;\n}\n\n/**\n * Environment configuration interface for MemberJunction Angular applications\n */\nexport interface MJEnvironmentConfig {\n /**\n * Whether the app is running in production mode\n */\n production: boolean;\n\n /**\n * GraphQL HTTP endpoint URL\n * @example 'http://localhost:4000/graphql'\n */\n GRAPHQL_URI: string;\n\n /**\n * GraphQL WebSocket endpoint URL for subscriptions\n * @example 'ws://localhost:4000/graphql'\n */\n GRAPHQL_WS_URI: string;\n\n /**\n * Authentication provider type\n */\n AUTH_TYPE: 'msal' | 'auth0';\n\n /**\n * MemberJunction core schema name in the database\n * @default '__mj'\n */\n MJ_CORE_SCHEMA_NAME: string;\n\n /**\n * Microsoft Azure AD/Entra Client ID (for MSAL auth)\n */\n CLIENT_ID?: string;\n\n /**\n * Microsoft Azure AD/Entra Tenant ID (for MSAL auth)\n */\n TENANT_ID?: string;\n\n /**\n * Auth0 domain (for Auth0 auth)\n * @example 'myapp.us.auth0.com'\n */\n AUTH0_DOMAIN?: string;\n\n /**\n * Auth0 client ID (for Auth0 auth)\n */\n AUTH0_CLIENTID?: string;\n\n /**\n * Additional custom environment properties\n */\n [key: string]: any;\n}\n","/**\n * MemberJunction 3.0 Bootstrap Component\n *\n * Minimal placeholder component for future fully encapsulated bootstrap.\n * Currently applications should use MJInitializationService directly in their app.component.\n */\n\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { SetProductionStatus } from '@memberjunction/core';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from './bootstrap.types';\n\n@Component({\n standalone: false,\n selector: 'mj-bootstrap',\n template: `\n <div class=\"mj-bootstrap-container\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n .mj-bootstrap-container {\n display: block;\n width: 100%;\n height: 100%;\n }\n `]\n})\nexport class MJBootstrapComponent implements OnInit {\n constructor(\n @Inject(MJ_ENVIRONMENT) private environment: MJEnvironmentConfig\n ) {}\n\n ngOnInit() {\n console.log('🚀 MemberJunction 3.0 Bootstrap');\n SetProductionStatus(this.environment.production);\n }\n}\n","/**\n * MemberJunction 3.0 Initialization Service\n *\n * Handles all core initialization tasks:\n * - Generated entities loading\n * - GraphQL client setup\n * - Token refresh configuration\n * - System validation\n */\n\nimport { Injectable, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Metadata } from '@memberjunction/core';\nimport { setupGraphQLClient, GraphQLProviderConfigData } from '@memberjunction/graphql-dataprovider';\nimport { MJAuthBase, StandardUserInfo, AuthErrorType } from '@memberjunction/ng-auth-services';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT, MJStartupValidationService, MJ_STARTUP_VALIDATION } from '../bootstrap.types';\n\nexport interface InitializationResult {\n success: boolean;\n error?: {\n message: string;\n type: 'no_access' | 'no_roles' | 'auth_error' | 'unknown';\n showValidationOnly?: boolean;\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MJInitializationService {\n constructor(\n private router: Router,\n private authBase: MJAuthBase,\n @Inject(MJ_STARTUP_VALIDATION) private startupValidationService: MJStartupValidationService | null\n ) {}\n\n /**\n * Initialize GraphQL client with authentication token and refresh callback\n */\n async initializeGraphQL(token: string, environment: MJEnvironmentConfig): Promise<void> {\n const url: string = environment.GRAPHQL_URI;\n const wsurl: string = environment.GRAPHQL_WS_URI;\n\n const start = Date.now();\n const config = new GraphQLProviderConfigData(\n token,\n url,\n wsurl,\n async () => {\n // Token refresh callback - refreshToken() returns StandardAuthToken directly or throws\n const token = await this.authBase.refreshToken();\n return token.idToken;\n },\n environment.MJ_CORE_SCHEMA_NAME\n );\n\n await setupGraphQLClient(config);\n const end = Date.now();\n console.log(`✓ GraphQL Client Setup Complete: ${end - start}ms`);\n }\n\n /**\n * Refresh shared data and validate user access\n */\n async validateUserAccess(): Promise<InitializationResult> {\n await SharedService.RefreshData(true);\n\n const md = new Metadata();\n\n if (!md.CurrentUser) {\n return {\n success: false,\n error: {\n message: \"You don't have access to the application, contact your system administrator.\",\n type: 'no_access'\n }\n };\n }\n\n return { success: true };\n }\n\n /**\n * Run startup validation checks (if validation service is provided)\n */\n runValidationChecks(): void {\n if (!this.startupValidationService) {\n return; // No validation service provided\n }\n\n // Small delay to ensure everything is initialized\n setTimeout(() => {\n this.startupValidationService?.validateSystemSetup();\n }, 500);\n }\n\n /**\n * Navigate to initial route after successful login\n */\n navigateToInitialRoute(initialPath: string, document: Document): void {\n localStorage.removeItem('jwt-retry-ts');\n\n if (initialPath === '/') {\n // Use first nav item instead\n setTimeout(() => {\n // Find the KendoDrawer element and simulate a click for the first item\n const drawerElement = document.querySelector('li.k-drawer-item.k-level-0') as any;\n if (drawerElement) drawerElement.click();\n }, 10); // Wait for the drawer to finish render\n } else {\n this.router.navigateByUrl(initialPath, { replaceUrl: true });\n }\n }\n\n /**\n * Check if error is related to missing user roles\n */\n isNoUserRolesError(err: any): boolean {\n try {\n if (!err || typeof err !== 'object') return false;\n\n // Check for GraphQL-style errors\n if (err.response && Array.isArray(err.response.errors)) {\n return err.response.errors.some((e: any) =>\n e && e.message && typeof e.message === 'string' &&\n e.message.includes('does not have read permissions on User Roles')\n );\n }\n\n // Check for specific \"ResourceTypes\" error\n if (err.toString && typeof err.toString === 'function') {\n const errorString = err.toString();\n if (errorString.includes(\"Cannot read properties of undefined (reading 'ResourceTypes')\")) {\n return true;\n }\n }\n\n // Check for error message directly on the error object\n if (err.message && typeof err.message === 'string') {\n const message = err.message;\n return message.includes('does not have read permissions on User Roles') ||\n message.includes(\"Cannot read properties of undefined (reading 'ResourceTypes')\");\n }\n\n // Check for nested error object\n if (err.error && typeof err.error === 'object') {\n return this.isNoUserRolesError(err.error);\n }\n\n return false;\n } catch (e) {\n console.error('Error while checking for user roles error:', e);\n return false;\n }\n }\n\n /**\n * Handle no roles error by showing validation banner (if validation service is provided)\n */\n handleNoRolesError(): InitializationResult {\n this.startupValidationService?.addNoRolesValidationIssue();\n\n return {\n success: false,\n error: {\n message: 'User has no roles assigned',\n type: 'no_roles',\n showValidationOnly: true\n }\n };\n }\n\n /**\n * Handle authentication retry logic\n */\n async handleAuthRetry(err: any): Promise<boolean> {\n const retryKey = 'auth-retry-dt';\n const lastRetryDateTime = localStorage.getItem(retryKey);\n const yesterday = +new Date(Date.now() - 1 * 24 * 60 * 60 * 1000);\n const retriedRecently = lastRetryDateTime && +new Date(lastRetryDateTime) > yesterday;\n\n const authError = this.authBase.classifyError(err);\n const isTokenExpired = authError.type === AuthErrorType.TOKEN_EXPIRED;\n\n if (!retriedRecently && isTokenExpired) {\n console.log('JWT Expired, retrying once: ' + err);\n localStorage.setItem(retryKey, new Date().toISOString());\n await this.authBase.login({ appState: { target: window.location.pathname } }).toPromise();\n return true;\n }\n\n return false;\n }\n\n /**\n * Get auth error message for display\n */\n getAuthErrorMessage(err: unknown): string {\n const authError = this.authBase.classifyError(err);\n\n switch (authError.type) {\n case AuthErrorType.NO_ACTIVE_SESSION:\n return \"Welcome back! Please log in to your account.\";\n case AuthErrorType.INTERACTION_REQUIRED:\n case AuthErrorType.TOKEN_EXPIRED:\n return \"Your session has expired. Please log in to your account.\";\n default:\n return authError.userMessage || \"Welcome back! Please log in to your account.\";\n }\n }\n}\n","/**\n * MemberJunction 3.0 Auth Shell Component\n *\n * Handles authentication flow and initialization for MJ applications.\n * This component encapsulates all the auth logic that was previously in app.component.ts\n */\n\nimport { Component, OnInit, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { SetProductionStatus, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAuthBase, StandardUserInfo, AuthErrorType } from '@memberjunction/ng-auth-services';\nimport { MJInitializationService } from '../services/initialization.service';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from '../bootstrap.types';\n\n@Component({\n standalone: false,\n selector: 'mj-auth-shell',\n template: `\n <div class=\"mj-auth-shell\">\n @if (!HasError || showValidationOnly) {\n <ng-content></ng-content>\n }\n \n @if (HasError && !showValidationOnly) {\n <div class=\"error-container\">\n <h2>Error</h2>\n <p>{{ ErrorMessage }}</p>\n </div>\n }\n </div>\n `,\n styles: [`\n .mj-auth-shell {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n .error-container {\n padding: 20px;\n text-align: center;\n }\n\n .error-container h2 {\n color: #d32f2f;\n margin-bottom: 10px;\n }\n `]\n})\nexport class MJAuthShellComponent implements OnInit {\n public HasError = false;\n public ErrorMessage: any = '';\n public showValidationOnly = false;\n public subHeaderText: string = \"Welcome back! Please log in to your account.\";\n\n private initialPath = '/';\n\n constructor(\n private router: Router,\n @Inject(DOCUMENT) public document: Document,\n public authBase: MJAuthBase,\n private initService: MJInitializationService,\n @Inject(MJ_ENVIRONMENT) private environment: MJEnvironmentConfig\n ) {}\n\n async ngOnInit() {\n console.log('🚀 MemberJunction 3.0 - Auth Shell Initializing');\n\n SetProductionStatus(this.environment.production);\n this.initialPath = window.location.pathname + (window.location.search ? window.location.search : '');\n\n await this.setupAuth();\n }\n\n /**\n * Handle successful login and initialize the application\n */\n async handleLogin(token: string, userInfo: StandardUserInfo): Promise<void> {\n if (!token) return;\n\n try {\n // Initialize GraphQL client\n await this.initService.initializeGraphQL(token, this.environment);\n\n // Validate user access and refresh data\n const validationResult = await this.initService.validateUserAccess();\n\n if (!validationResult.success) {\n this.HasError = true;\n this.ErrorMessage = validationResult.error!.message;\n throw new Error(this.ErrorMessage);\n }\n\n // Run startup validation checks\n this.initService.runValidationChecks();\n\n // Navigate to initial route\n this.initService.navigateToInitialRoute(this.initialPath, this.document);\n\n } catch (err: any) {\n // Check for no roles error\n if (this.initService.isNoUserRolesError(err)) {\n this.showValidationOnly = true;\n this.HasError = true;\n const result = this.initService.handleNoRolesError();\n return; // Don't throw, allow UI to show validation banner\n }\n\n // Try auth retry if applicable\n const retried = await this.initService.handleAuthRetry(err);\n if (retried) {\n return; // Retry initiated\n }\n\n // Show error\n this.HasError = true;\n this.ErrorMessage = err;\n LogError('Error Logging In: ' + err);\n throw err;\n }\n }\n\n /**\n * Setup authentication and handle auth state changes\n */\n async setupAuth(): Promise<void> {\n // Auth provider already initialized by APP_INITIALIZER\n\n // Listen for user info changes\n this.authBase.getUserInfo()\n .pipe(take(1))\n .subscribe({\n next: async (userInfo) => {\n if (userInfo) {\n const token = await this.authBase.getIdToken();\n\n if (token) {\n await this.handleLogin(token, userInfo);\n } else {\n console.error('User info available but no token found');\n }\n }\n },\n error: (err: unknown) => {\n LogError('Error Logging In: ' + err);\n this.subHeaderText = this.initService.getAuthErrorMessage(err);\n }\n });\n\n // Check if user is authenticated\n this.authBase.isAuthenticated()\n .pipe(take(1))\n .subscribe((loggedIn: boolean) => {\n if (!loggedIn) {\n // Display login screen - auth state is managed by provider\n console.log('User not authenticated, showing login screen');\n }\n });\n }\n}\n","/**\n * MemberJunction 3.0 Bootstrap Module\n *\n * Provides the MJBootstrapComponent and all necessary services for MemberJunction Angular applications.\n * This module encapsulates all the authentication and initialization logic that was previously\n * spread across app.component.ts and app.module.ts.\n *\n * Usage:\n * ```typescript\n * @NgModule({\n * imports: [\n * BrowserModule,\n * BrowserAnimationsModule,\n * MJBootstrapModule.forRoot(environment),\n * // ... other MJ modules\n * ],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n * ```\n */\n\nimport { NgModule, ModuleWithProviders, APP_INITIALIZER } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJBootstrapComponent } from './bootstrap.component';\nimport { MJAuthShellComponent } from './components/auth-shell.component';\nimport { MJInitializationService } from './services/initialization.service';\nimport { MJEnvironmentConfig, MJ_ENVIRONMENT } from './bootstrap.types';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\n\n/**\n * Initialize auth provider before Angular routing starts\n * This ensures auth providers can process OAuth redirect responses before Angular's router\n * consumes the URL hash\n */\nexport function initializeAuth(authService: MJAuthBase): () => Promise<void> {\n return () => authService.initialize();\n}\n\n@NgModule({\n declarations: [\n MJBootstrapComponent,\n MJAuthShellComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n MJBootstrapComponent,\n MJAuthShellComponent\n ]\n})\nexport class MJBootstrapModule {\n /**\n * Configure the bootstrap module with environment settings\n *\n * @param environment - Environment configuration for the application\n * @returns ModuleWithProviders with environment configuration and all services\n *\n * @example\n * ```typescript\n * import { environment } from '../environments/environment';\n *\n * @NgModule({\n * imports: [\n * MJBootstrapModule.forRoot(environment)\n * ]\n * })\n * export class AppModule {}\n * ```\n */\n static forRoot(environment: MJEnvironmentConfig): ModuleWithProviders<MJBootstrapModule> {\n return {\n ngModule: MJBootstrapModule,\n providers: [\n { provide: MJ_ENVIRONMENT, useValue: environment },\n // MJInitializationService uses providedIn: 'root'\n {\n provide: APP_INITIALIZER,\n useFactory: initializeAuth,\n deps: [MJAuthBase],\n multi: true\n }\n ]\n };\n }\n}\n","/**\n * AUTO-GENERATED FILE - DO NOT EDIT\n * Generated by mj codegen manifest\n * App: @memberjunction/ng-bootstrap\n * Dependency tree: 491 packages walked, 14 contain @RegisterClass\n *\n * This file imports every @RegisterClass decorated class by name and places\n * them in an exported array, creating a static code path that prevents\n * tree-shaking from removing them.\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n// @memberjunction/actions-base (2 classes)\nimport {\n ActionEntityExtended,\n EntityActionEntityExtended,\n} from '@memberjunction/actions-base';\n\n// @memberjunction/ai-core-plus (7 classes)\nimport {\n AIAgentEntityExtended,\n AIAgentRunEntityExtended,\n AIAgentRunStepEntityExtended,\n AIModelEntityExtended,\n AIPromptCategoryEntityExtended,\n AIPromptEntityExtended,\n AIPromptRunEntityExtended,\n} from '@memberjunction/ai-core-plus';\n\n// @memberjunction/ai-engine-base (4 classes)\nimport {\n AICredentialBindingEntityExtended,\n PerHundredThousandTokensPriceUnitType,\n PerMillionTokensPriceUnitType,\n PerThousandTokensPriceUnitType,\n} from '@memberjunction/ai-engine-base';\n\n// @memberjunction/communication-types (1 classes)\nimport {\n CommunicationProviderEntityExtended,\n} from '@memberjunction/communication-types';\n\n// @memberjunction/core-entities (282 classes)\nimport {\n AIActionEntity,\n AIAgentActionEntity,\n AIAgentArtifactTypeEntity,\n AIAgentConfigurationEntity,\n AIAgentDataSourceEntity,\n AIAgentEntity,\n AIAgentExampleEntity,\n AIAgentLearningCycleEntity,\n AIAgentModalityEntity,\n AIAgentModelEntity,\n AIAgentNoteEntity,\n AIAgentNoteTypeEntity,\n AIAgentPermissionEntity,\n AIAgentPromptEntity,\n AIAgentRelationshipEntity,\n AIAgentRequestEntity,\n AIAgentRunEntity,\n AIAgentRunMediaEntity,\n AIAgentRunStepEntity,\n AIAgentStepEntity,\n AIAgentStepPathEntity,\n AIAgentTypeEntity,\n AIArchitectureEntity,\n AIConfigurationEntity,\n AIConfigurationParamEntity,\n AICredentialBindingEntity,\n AIModalityEntity,\n AIModelActionEntity,\n AIModelArchitectureEntity,\n AIModelCostEntity,\n AIModelEntity,\n AIModelModalityEntity,\n AIModelPriceTypeEntity,\n AIModelPriceUnitTypeEntity,\n AIModelTypeEntity,\n AIModelVendorEntity,\n AIPromptCategoryEntity,\n AIPromptEntity,\n AIPromptModelEntity,\n AIPromptRunEntity,\n AIPromptRunMediaEntity,\n AIPromptTypeEntity,\n AIResultCacheEntity,\n AIVendorEntity,\n AIVendorTypeDefinitionEntity,\n AIVendorTypeEntity,\n APIApplicationEntity,\n APIApplicationScopeEntity,\n APIKeyApplicationEntity,\n APIKeyEntity,\n APIKeyScopeEntity,\n APIKeyUsageLogEntity,\n APIScopeEntity,\n AccessControlRuleEntity,\n ActionAuthorizationEntity,\n ActionCategoryEntity,\n ActionContextEntity,\n ActionContextTypeEntity,\n ActionEntity,\n ActionExecutionLogEntity,\n ActionFilterEntity,\n ActionLibraryEntity,\n ActionParamEntity,\n ActionResultCodeEntity,\n ApplicationEntity,\n ApplicationEntityEntity,\n ApplicationSettingEntity,\n ArtifactEntity,\n ArtifactPermissionEntity,\n ArtifactTypeEntity,\n ArtifactUseEntity,\n ArtifactVersionAttributeEntity,\n ArtifactVersionEntity,\n AuditLogEntity,\n AuditLogTypeEntity,\n AuthorizationEntity,\n AuthorizationRoleEntity,\n CollectionArtifactEntity,\n CollectionEntity,\n CollectionPermissionEntity,\n CommunicationBaseMessageTypeEntity,\n CommunicationLogEntity,\n CommunicationProviderEntity,\n CommunicationProviderMessageTypeEntity,\n CommunicationRunEntity,\n CompanyEntity,\n CompanyIntegrationEntity,\n CompanyIntegrationRecordMapEntity,\n CompanyIntegrationRunAPILogEntity,\n CompanyIntegrationRunDetailEntity,\n CompanyIntegrationRunEntity,\n ComponentDependencyEntity,\n ComponentEntity,\n ComponentEntityExtended,\n ComponentLibraryEntity,\n ComponentLibraryLinkEntity,\n ComponentRegistryEntity,\n ContentFileTypeEntity,\n ContentItemAttributeEntity,\n ContentItemEntity,\n ContentItemTagEntity,\n ContentProcessRunEntity,\n ContentSourceEntity,\n ContentSourceParamEntity,\n ContentSourceTypeEntity,\n ContentSourceTypeParamEntity,\n ContentTypeAttributeEntity,\n ContentTypeEntity,\n ConversationArtifactEntity,\n ConversationArtifactPermissionEntity,\n ConversationArtifactVersionEntity,\n ConversationDetailArtifactEntity,\n ConversationDetailAttachmentEntity,\n ConversationDetailEntity,\n ConversationDetailRatingEntity,\n ConversationEntity,\n CredentialCategoryEntity,\n CredentialEntity,\n CredentialTypeEntity,\n DashboardCategoryEntity,\n DashboardCategoryLinkEntity,\n DashboardCategoryPermissionEntity,\n DashboardEntity,\n DashboardEntityExtended,\n DashboardPartTypeEntity,\n DashboardPermissionEntity,\n DashboardUserPreferenceEntity,\n DashboardUserStateEntity,\n DataContextEntity,\n DataContextItemEntity,\n DatasetEntity,\n DatasetItemEntity,\n DuplicateRunDetailEntity,\n DuplicateRunDetailMatchEntity,\n DuplicateRunEntity,\n EmployeeCompanyIntegrationEntity,\n EmployeeEntity,\n EmployeeRoleEntity,\n EmployeeSkillEntity,\n EncryptionAlgorithmEntity,\n EncryptionKeyEntity,\n EncryptionKeySourceEntity,\n EntityAIActionEntity,\n EntityActionEntity,\n EntityActionFilterEntity,\n EntityActionInvocationEntity,\n EntityActionInvocationTypeEntity,\n EntityActionParamEntity,\n EntityCommunicationFieldEntity,\n EntityCommunicationMessageTypeEntity,\n EntityDocumentEntity,\n EntityDocumentRunEntity,\n EntityDocumentSettingEntity,\n EntityDocumentTypeEntity,\n EntityEntity,\n EntityEntityExtended,\n EntityFieldEntity,\n EntityFieldEntityExtended,\n EntityFieldValueEntity,\n EntityPermissionEntity,\n EntityRecordDocumentEntity,\n EntityRelationshipDisplayComponentEntity,\n EntityRelationshipEntity,\n EntitySettingEntity,\n EnvironmentEntity,\n EnvironmentEntityExtended,\n ErrorLogEntity,\n ExplorerNavigationItemEntity,\n FileCategoryEntity,\n FileEntity,\n FileEntityRecordLinkEntity,\n FileStorageAccountEntity,\n FileStorageProviderEntity,\n GeneratedCodeCategoryEntity,\n GeneratedCodeEntity,\n IntegrationEntity,\n IntegrationURLFormatEntity,\n LibraryEntity,\n LibraryItemEntity,\n ListCategoryEntity,\n ListDetailEntity,\n ListDetailEntityExtended,\n ListEntity,\n ListInvitationEntity,\n ListShareEntity,\n MCPServerConnectionEntity,\n MCPServerConnectionPermissionEntity,\n MCPServerConnectionToolEntity,\n MCPServerEntity,\n MCPServerToolEntity,\n MCPToolExecutionLogEntity,\n OAuthAuthServerMetadataCacheEntity,\n OAuthAuthorizationStateEntity,\n OAuthClientRegistrationEntity,\n OAuthTokenEntity,\n OutputDeliveryTypeEntity,\n OutputFormatTypeEntity,\n OutputTriggerTypeEntity,\n ProjectEntity,\n PublicLinkEntity,\n QueryCategoryEntity,\n QueryEntity,\n QueryEntityEntity,\n QueryFieldEntity,\n QueryParameterEntity,\n QueryPermissionEntity,\n QueueEntity,\n QueueTaskEntity,\n QueueTypeEntity,\n RecommendationEntity,\n RecommendationItemEntity,\n RecommendationProviderEntity,\n RecommendationRunEntity,\n RecordChangeEntity,\n RecordChangeReplayRunEntity,\n RecordLinkEntity,\n RecordMergeDeletionLogEntity,\n RecordMergeLogEntity,\n ReportCategoryEntity,\n ReportEntity,\n ReportSnapshotEntity,\n ReportUserStateEntity,\n ReportVersionEntity,\n ResourceLinkEntity,\n ResourcePermissionEntity,\n ResourcePermissionEntityExtended,\n ResourceTypeEntity,\n RoleEntity,\n RowLevelSecurityFilterEntity,\n ScheduledActionEntity,\n ScheduledActionEntityExtended,\n ScheduledActionParamEntity,\n ScheduledJobEntity,\n ScheduledJobRunEntity,\n ScheduledJobTypeEntity,\n SchemaInfoEntity,\n SkillEntity,\n TagEntity,\n TaggedItemEntity,\n TaskDependencyEntity,\n TaskEntity,\n TaskTypeEntity,\n TemplateCategoryEntity,\n TemplateContentEntity,\n TemplateContentTypeEntity,\n TemplateEntity,\n TemplateEntityExtended,\n TemplateParamEntity,\n TestEntity,\n TestRubricEntity,\n TestRunEntity,\n TestRunFeedbackEntity,\n TestSuiteEntity,\n TestSuiteRunEntity,\n TestSuiteTestEntity,\n TestTypeEntity,\n UserApplicationEntity,\n UserApplicationEntityEntity,\n UserEntity,\n UserFavoriteEntity,\n UserNotificationEntity,\n UserNotificationPreferenceEntity,\n UserNotificationTypeEntity,\n UserRecordLogEntity,\n UserRoleEntity,\n UserSettingEntity,\n UserViewCategoryEntity,\n UserViewEntity,\n UserViewEntityExtended,\n UserViewRunDetailEntity,\n UserViewRunEntity,\n VectorDatabaseEntity,\n VectorIndexEntity,\n VersionInstallationEntity,\n VersionLabelEntity,\n VersionLabelItemEntity,\n VersionLabelRestoreEntity,\n WorkflowEngineEntity,\n WorkflowEntity,\n WorkflowRunEntity,\n WorkspaceEntity,\n WorkspaceItemEntity,\n} from '@memberjunction/core-entities';\n\n// @memberjunction/entity-communications-base (1 classes)\nimport {\n EntityCommunicationMessageTypeExtended,\n} from '@memberjunction/entity-communications-base';\n\n// @memberjunction/ng-artifacts (6 classes)\nimport {\n CodeArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n JsonArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n SvgArtifactViewerComponent,\n} from '@memberjunction/ng-artifacts';\n\n// @memberjunction/ng-auth-services (3 classes)\nimport {\n MJAuth0Provider,\n MJMSALProvider,\n MJOktaProvider,\n} from '@memberjunction/ng-auth-services';\n\n// @memberjunction/ng-core-entity-forms (1 classes)\nimport {\n FlowAgentFormSectionComponent,\n} from '@memberjunction/ng-core-entity-forms';\n\n// @memberjunction/ng-dashboard-viewer (8 classes)\nimport {\n ArtifactConfigPanelComponent,\n ArtifactPartComponent,\n QueryConfigPanelComponent,\n QueryPartComponent,\n ViewConfigPanelComponent,\n ViewPartComponent,\n WebURLConfigPanelComponent,\n WebURLPartComponent,\n} from '@memberjunction/ng-dashboard-viewer';\n\n// @memberjunction/ng-dashboards (52 classes)\nimport {\n APIKeysResourceComponent,\n ActionExplorerComponent,\n ActionsOverviewComponent,\n AgentConfigurationComponent,\n CodeManagementComponent,\n CommunicationDashboardComponent,\n CommunicationLogsResourceComponent,\n CommunicationMonitorResourceComponent,\n CommunicationProvidersResourceComponent,\n CommunicationRunsResourceComponent,\n CommunicationTemplatesResourceComponent,\n ComponentStudioDashboardComponent,\n CredentialsAuditResourceComponent,\n CredentialsCategoriesResourceComponent,\n CredentialsDashboardComponent,\n CredentialsListResourceComponent,\n CredentialsOverviewResourceComponent,\n CredentialsTypesResourceComponent,\n DashboardBrowserResourceComponent,\n DataExplorerDashboardComponent,\n DataExplorerResourceComponent,\n EntityAdminDashboardComponent,\n EntityIntegrationComponent,\n ExecutionMonitoringComponent,\n HomeApplication,\n HomeDashboardComponent,\n ListsBrowseResource,\n ListsCategoriesResource,\n ListsMyListsResource,\n ListsOperationsResource,\n MCPDashboardComponent,\n ModelManagementComponent,\n PromptManagementComponent,\n QueryBrowserResourceComponent,\n ScheduledActionsComponent,\n SchedulingActivityResourceComponent,\n SchedulingDashboardComponent,\n SchedulingJobsResourceComponent,\n SchedulingOverviewResourceComponent,\n SecurityPermissionsComponent,\n SystemConfigurationComponent,\n SystemDiagnosticsComponent,\n TestingAnalyticsResourceComponent,\n TestingDashboardComponent,\n TestingDashboardTabResourceComponent,\n TestingExplorerResourceComponent,\n TestingReviewResourceComponent,\n TestingRunsResourceComponent,\n VersionHistoryDiffResourceComponent,\n VersionHistoryGraphResourceComponent,\n VersionHistoryLabelsResourceComponent,\n VersionHistoryRestoreResourceComponent,\n} from '@memberjunction/ng-dashboards';\n\n// @memberjunction/ng-explorer-core (9 classes)\nimport {\n ArtifactResource,\n BaseUserMenu,\n ChatConversationsResource,\n DashboardResource,\n EntityRecordResource,\n ListDetailResource,\n QueryResource,\n SearchResultsResource,\n UserViewResource,\n} from '@memberjunction/ng-explorer-core';\n\n// @memberjunction/ng-explorer-settings (6 classes)\nimport {\n ApplicationManagementComponent,\n EntityPermissionsComponent,\n RoleManagementComponent,\n SettingsComponent,\n SqlLoggingComponent,\n UserManagementComponent,\n} from '@memberjunction/ng-explorer-settings';\n\n// @memberjunction/ng-file-storage (1 classes)\nimport {\n FileBrowserResource,\n} from '@memberjunction/ng-file-storage';\n\n/**\n * Runtime references to every @RegisterClass decorated class.\n * This array creates a static code path the bundler cannot tree-shake.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CLASS_REGISTRATIONS: any[] = [\n ActionEntityExtended,\n EntityActionEntityExtended,\n AIAgentEntityExtended,\n AIAgentRunEntityExtended,\n AIAgentRunStepEntityExtended,\n AIModelEntityExtended,\n AIPromptCategoryEntityExtended,\n AIPromptEntityExtended,\n AIPromptRunEntityExtended,\n AICredentialBindingEntityExtended,\n PerHundredThousandTokensPriceUnitType,\n PerMillionTokensPriceUnitType,\n PerThousandTokensPriceUnitType,\n CommunicationProviderEntityExtended,\n AIActionEntity,\n AIAgentActionEntity,\n AIAgentArtifactTypeEntity,\n AIAgentConfigurationEntity,\n AIAgentDataSourceEntity,\n AIAgentEntity,\n AIAgentExampleEntity,\n AIAgentLearningCycleEntity,\n AIAgentModalityEntity,\n AIAgentModelEntity,\n AIAgentNoteEntity,\n AIAgentNoteTypeEntity,\n AIAgentPermissionEntity,\n AIAgentPromptEntity,\n AIAgentRelationshipEntity,\n AIAgentRequestEntity,\n AIAgentRunEntity,\n AIAgentRunMediaEntity,\n AIAgentRunStepEntity,\n AIAgentStepEntity,\n AIAgentStepPathEntity,\n AIAgentTypeEntity,\n AIArchitectureEntity,\n AIConfigurationEntity,\n AIConfigurationParamEntity,\n AICredentialBindingEntity,\n AIModalityEntity,\n AIModelActionEntity,\n AIModelArchitectureEntity,\n AIModelCostEntity,\n AIModelEntity,\n AIModelModalityEntity,\n AIModelPriceTypeEntity,\n AIModelPriceUnitTypeEntity,\n AIModelTypeEntity,\n AIModelVendorEntity,\n AIPromptCategoryEntity,\n AIPromptEntity,\n AIPromptModelEntity,\n AIPromptRunEntity,\n AIPromptRunMediaEntity,\n AIPromptTypeEntity,\n AIResultCacheEntity,\n AIVendorEntity,\n AIVendorTypeDefinitionEntity,\n AIVendorTypeEntity,\n APIApplicationEntity,\n APIApplicationScopeEntity,\n APIKeyApplicationEntity,\n APIKeyEntity,\n APIKeyScopeEntity,\n APIKeyUsageLogEntity,\n APIScopeEntity,\n AccessControlRuleEntity,\n ActionAuthorizationEntity,\n ActionCategoryEntity,\n ActionContextEntity,\n ActionContextTypeEntity,\n ActionEntity,\n ActionExecutionLogEntity,\n ActionFilterEntity,\n ActionLibraryEntity,\n ActionParamEntity,\n ActionResultCodeEntity,\n ApplicationEntity,\n ApplicationEntityEntity,\n ApplicationSettingEntity,\n ArtifactEntity,\n ArtifactPermissionEntity,\n ArtifactTypeEntity,\n ArtifactUseEntity,\n ArtifactVersionAttributeEntity,\n ArtifactVersionEntity,\n AuditLogEntity,\n AuditLogTypeEntity,\n AuthorizationEntity,\n AuthorizationRoleEntity,\n CollectionArtifactEntity,\n CollectionEntity,\n CollectionPermissionEntity,\n CommunicationBaseMessageTypeEntity,\n CommunicationLogEntity,\n CommunicationProviderEntity,\n CommunicationProviderMessageTypeEntity,\n CommunicationRunEntity,\n CompanyEntity,\n CompanyIntegrationEntity,\n CompanyIntegrationRecordMapEntity,\n CompanyIntegrationRunAPILogEntity,\n CompanyIntegrationRunDetailEntity,\n CompanyIntegrationRunEntity,\n ComponentDependencyEntity,\n ComponentEntity,\n ComponentEntityExtended,\n ComponentLibraryEntity,\n ComponentLibraryLinkEntity,\n ComponentRegistryEntity,\n ContentFileTypeEntity,\n ContentItemAttributeEntity,\n ContentItemEntity,\n ContentItemTagEntity,\n ContentProcessRunEntity,\n ContentSourceEntity,\n ContentSourceParamEntity,\n ContentSourceTypeEntity,\n ContentSourceTypeParamEntity,\n ContentTypeAttributeEntity,\n ContentTypeEntity,\n ConversationArtifactEntity,\n ConversationArtifactPermissionEntity,\n ConversationArtifactVersionEntity,\n ConversationDetailArtifactEntity,\n ConversationDetailAttachmentEntity,\n ConversationDetailEntity,\n ConversationDetailRatingEntity,\n ConversationEntity,\n CredentialCategoryEntity,\n CredentialEntity,\n CredentialTypeEntity,\n DashboardCategoryEntity,\n DashboardCategoryLinkEntity,\n DashboardCategoryPermissionEntity,\n DashboardEntity,\n DashboardEntityExtended,\n DashboardPartTypeEntity,\n DashboardPermissionEntity,\n DashboardUserPreferenceEntity,\n DashboardUserStateEntity,\n DataContextEntity,\n DataContextItemEntity,\n DatasetEntity,\n DatasetItemEntity,\n DuplicateRunDetailEntity,\n DuplicateRunDetailMatchEntity,\n DuplicateRunEntity,\n EmployeeCompanyIntegrationEntity,\n EmployeeEntity,\n EmployeeRoleEntity,\n EmployeeSkillEntity,\n EncryptionAlgorithmEntity,\n EncryptionKeyEntity,\n EncryptionKeySourceEntity,\n EntityAIActionEntity,\n EntityActionEntity,\n EntityActionFilterEntity,\n EntityActionInvocationEntity,\n EntityActionInvocationTypeEntity,\n EntityActionParamEntity,\n EntityCommunicationFieldEntity,\n EntityCommunicationMessageTypeEntity,\n EntityDocumentEntity,\n EntityDocumentRunEntity,\n EntityDocumentSettingEntity,\n EntityDocumentTypeEntity,\n EntityEntity,\n EntityEntityExtended,\n EntityFieldEntity,\n EntityFieldEntityExtended,\n EntityFieldValueEntity,\n EntityPermissionEntity,\n EntityRecordDocumentEntity,\n EntityRelationshipDisplayComponentEntity,\n EntityRelationshipEntity,\n EntitySettingEntity,\n EnvironmentEntity,\n EnvironmentEntityExtended,\n ErrorLogEntity,\n ExplorerNavigationItemEntity,\n FileCategoryEntity,\n FileEntity,\n FileEntityRecordLinkEntity,\n FileStorageAccountEntity,\n FileStorageProviderEntity,\n GeneratedCodeCategoryEntity,\n GeneratedCodeEntity,\n IntegrationEntity,\n IntegrationURLFormatEntity,\n LibraryEntity,\n LibraryItemEntity,\n ListCategoryEntity,\n ListDetailEntity,\n ListDetailEntityExtended,\n ListEntity,\n ListInvitationEntity,\n ListShareEntity,\n MCPServerConnectionEntity,\n MCPServerConnectionPermissionEntity,\n MCPServerConnectionToolEntity,\n MCPServerEntity,\n MCPServerToolEntity,\n MCPToolExecutionLogEntity,\n OAuthAuthServerMetadataCacheEntity,\n OAuthAuthorizationStateEntity,\n OAuthClientRegistrationEntity,\n OAuthTokenEntity,\n OutputDeliveryTypeEntity,\n OutputFormatTypeEntity,\n OutputTriggerTypeEntity,\n ProjectEntity,\n PublicLinkEntity,\n QueryCategoryEntity,\n QueryEntity,\n QueryEntityEntity,\n QueryFieldEntity,\n QueryParameterEntity,\n QueryPermissionEntity,\n QueueEntity,\n QueueTaskEntity,\n QueueTypeEntity,\n RecommendationEntity,\n RecommendationItemEntity,\n RecommendationProviderEntity,\n RecommendationRunEntity,\n RecordChangeEntity,\n RecordChangeReplayRunEntity,\n RecordLinkEntity,\n RecordMergeDeletionLogEntity,\n RecordMergeLogEntity,\n ReportCategoryEntity,\n ReportEntity,\n ReportSnapshotEntity,\n ReportUserStateEntity,\n ReportVersionEntity,\n ResourceLinkEntity,\n ResourcePermissionEntity,\n ResourcePermissionEntityExtended,\n ResourceTypeEntity,\n RoleEntity,\n RowLevelSecurityFilterEntity,\n ScheduledActionEntity,\n ScheduledActionEntityExtended,\n ScheduledActionParamEntity,\n ScheduledJobEntity,\n ScheduledJobRunEntity,\n ScheduledJobTypeEntity,\n SchemaInfoEntity,\n SkillEntity,\n TagEntity,\n TaggedItemEntity,\n TaskDependencyEntity,\n TaskEntity,\n TaskTypeEntity,\n TemplateCategoryEntity,\n TemplateContentEntity,\n TemplateContentTypeEntity,\n TemplateEntity,\n TemplateEntityExtended,\n TemplateParamEntity,\n TestEntity,\n TestRubricEntity,\n TestRunEntity,\n TestRunFeedbackEntity,\n TestSuiteEntity,\n TestSuiteRunEntity,\n TestSuiteTestEntity,\n TestTypeEntity,\n UserApplicationEntity,\n UserApplicationEntityEntity,\n UserEntity,\n UserFavoriteEntity,\n UserNotificationEntity,\n UserNotificationPreferenceEntity,\n UserNotificationTypeEntity,\n UserRecordLogEntity,\n UserRoleEntity,\n UserSettingEntity,\n UserViewCategoryEntity,\n UserViewEntity,\n UserViewEntityExtended,\n UserViewRunDetailEntity,\n UserViewRunEntity,\n VectorDatabaseEntity,\n VectorIndexEntity,\n VersionInstallationEntity,\n VersionLabelEntity,\n VersionLabelItemEntity,\n VersionLabelRestoreEntity,\n WorkflowEngineEntity,\n WorkflowEntity,\n WorkflowRunEntity,\n WorkspaceEntity,\n WorkspaceItemEntity,\n EntityCommunicationMessageTypeExtended,\n CodeArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n JsonArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n SvgArtifactViewerComponent,\n MJAuth0Provider,\n MJMSALProvider,\n MJOktaProvider,\n FlowAgentFormSectionComponent,\n ArtifactConfigPanelComponent,\n ArtifactPartComponent,\n QueryConfigPanelComponent,\n QueryPartComponent,\n ViewConfigPanelComponent,\n ViewPartComponent,\n WebURLConfigPanelComponent,\n WebURLPartComponent,\n APIKeysResourceComponent,\n ActionExplorerComponent,\n ActionsOverviewComponent,\n AgentConfigurationComponent,\n CodeManagementComponent,\n CommunicationDashboardComponent,\n CommunicationLogsResourceComponent,\n CommunicationMonitorResourceComponent,\n CommunicationProvidersResourceComponent,\n CommunicationRunsResourceComponent,\n CommunicationTemplatesResourceComponent,\n ComponentStudioDashboardComponent,\n CredentialsAuditResourceComponent,\n CredentialsCategoriesResourceComponent,\n CredentialsDashboardComponent,\n CredentialsListResourceComponent,\n CredentialsOverviewResourceComponent,\n CredentialsTypesResourceComponent,\n DashboardBrowserResourceComponent,\n DataExplorerDashboardComponent,\n DataExplorerResourceComponent,\n EntityAdminDashboardComponent,\n EntityIntegrationComponent,\n ExecutionMonitoringComponent,\n HomeApplication,\n HomeDashboardComponent,\n ListsBrowseResource,\n ListsCategoriesResource,\n ListsMyListsResource,\n ListsOperationsResource,\n MCPDashboardComponent,\n ModelManagementComponent,\n PromptManagementComponent,\n QueryBrowserResourceComponent,\n ScheduledActionsComponent,\n SchedulingActivityResourceComponent,\n SchedulingDashboardComponent,\n SchedulingJobsResourceComponent,\n SchedulingOverviewResourceComponent,\n SecurityPermissionsComponent,\n SystemConfigurationComponent,\n SystemDiagnosticsComponent,\n TestingAnalyticsResourceComponent,\n TestingDashboardComponent,\n TestingDashboardTabResourceComponent,\n TestingExplorerResourceComponent,\n TestingReviewResourceComponent,\n TestingRunsResourceComponent,\n VersionHistoryDiffResourceComponent,\n VersionHistoryGraphResourceComponent,\n VersionHistoryLabelsResourceComponent,\n VersionHistoryRestoreResourceComponent,\n ArtifactResource,\n BaseUserMenu,\n ChatConversationsResource,\n DashboardResource,\n EntityRecordResource,\n ListDetailResource,\n QueryResource,\n SearchResultsResource,\n UserViewResource,\n ApplicationManagementComponent,\n EntityPermissionsComponent,\n RoleManagementComponent,\n SettingsComponent,\n SqlLoggingComponent,\n UserManagementComponent,\n FileBrowserResource,\n];\n\n/** Marker constant indicating the manifest has been loaded. */\nexport const CLASS_REGISTRATIONS_MANIFEST_LOADED = true;\n\n/** Total @RegisterClass decorated classes discovered in dependency tree */\nexport const CLASS_REGISTRATIONS_COUNT = 383;\n\n/** Packages imported by this manifest */\nexport const CLASS_REGISTRATIONS_PACKAGES = [\n '@memberjunction/actions-base',\n '@memberjunction/ai-core-plus',\n '@memberjunction/ai-engine-base',\n '@memberjunction/communication-types',\n '@memberjunction/core-entities',\n '@memberjunction/entity-communications-base',\n '@memberjunction/ng-artifacts',\n '@memberjunction/ng-auth-services',\n '@memberjunction/ng-core-entity-forms',\n '@memberjunction/ng-dashboard-viewer',\n '@memberjunction/ng-dashboards',\n '@memberjunction/ng-explorer-core',\n '@memberjunction/ng-explorer-settings',\n '@memberjunction/ng-file-storage',\n] as const;\n","/**\n * Public API Surface of @memberjunction/ng-bootstrap\n */\n\nexport * from './lib/bootstrap.module';\nexport * from './lib/bootstrap.component';\nexport * from './lib/bootstrap.types';\nexport * from './lib/services/initialization.service';\nexport * from './lib/components/auth-shell.component';\n\n/**\n * Pre-built class registrations manifest for all @memberjunction/* Angular packages.\n * Importing this module prevents tree-shaking of MJ's dynamically registered classes.\n * Generated at MJ build time and ships with the package.\n */\nexport * from './generated/mj-class-registrations';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.MJInitializationService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-bootstrap",
3
- "version": "3.4.0",
3
+ "version": "4.0.0",
4
4
  "description": "MemberJunction Angular Bootstrap - Encapsulates all Angular authentication and initialization logic",
5
5
  "keywords": [
6
6
  "memberjunction",
@@ -11,17 +11,30 @@
11
11
  "author": "MemberJunction",
12
12
  "license": "MIT",
13
13
  "peerDependencies": {
14
- "@angular/common": "^18.0.0",
15
- "@angular/core": "^18.0.0",
16
- "@angular/router": "^18.0.0",
17
- "rxjs": "^7.8.1"
14
+ "@angular/common": "^21.0.0",
15
+ "@angular/core": "^21.0.0",
16
+ "@angular/router": "^21.0.0",
17
+ "rxjs": "^7.8.2"
18
18
  },
19
19
  "dependencies": {
20
- "@memberjunction/core": "3.4.0",
21
- "@memberjunction/graphql-dataprovider": "3.4.0",
22
- "@memberjunction/ng-auth-services": "3.4.0",
23
- "@memberjunction/ng-shared": "3.4.0",
24
- "rxjs": "^7.8.1",
20
+ "@memberjunction/actions-base": "4.0.0",
21
+ "@memberjunction/ai-core-plus": "4.0.0",
22
+ "@memberjunction/ai-engine-base": "4.0.0",
23
+ "@memberjunction/communication-types": "4.0.0",
24
+ "@memberjunction/core": "4.0.0",
25
+ "@memberjunction/core-entities": "4.0.0",
26
+ "@memberjunction/entity-communications-base": "4.0.0",
27
+ "@memberjunction/graphql-dataprovider": "4.0.0",
28
+ "@memberjunction/ng-artifacts": "4.0.0",
29
+ "@memberjunction/ng-auth-services": "4.0.0",
30
+ "@memberjunction/ng-core-entity-forms": "4.0.0",
31
+ "@memberjunction/ng-dashboard-viewer": "4.0.0",
32
+ "@memberjunction/ng-dashboards": "4.0.0",
33
+ "@memberjunction/ng-explorer-core": "4.0.0",
34
+ "@memberjunction/ng-explorer-settings": "4.0.0",
35
+ "@memberjunction/ng-file-storage": "4.0.0",
36
+ "@memberjunction/ng-shared": "4.0.0",
37
+ "rxjs": "^7.8.2",
25
38
  "tslib": "^2.3.0"
26
39
  },
27
40
  "repository": {
@@ -29,17 +42,15 @@
29
42
  "url": "https://github.com/MemberJunction/MJ"
30
43
  },
31
44
  "module": "fesm2022/memberjunction-ng-bootstrap.mjs",
32
- "typings": "index.d.ts",
45
+ "typings": "types/memberjunction-ng-bootstrap.d.ts",
33
46
  "exports": {
34
47
  "./package.json": {
35
48
  "default": "./package.json"
36
49
  },
37
50
  ".": {
38
- "types": "./index.d.ts",
39
- "esm2022": "./esm2022/memberjunction-ng-bootstrap.mjs",
40
- "esm": "./esm2022/memberjunction-ng-bootstrap.mjs",
51
+ "types": "./types/memberjunction-ng-bootstrap.d.ts",
41
52
  "default": "./fesm2022/memberjunction-ng-bootstrap.mjs"
42
53
  }
43
54
  },
44
- "sideEffects": false
55
+ "sideEffects": true
45
56
  }
@@ -0,0 +1,251 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, OnInit, ModuleWithProviders } from '@angular/core';
3
+ import { MJAuthBase, StandardUserInfo } from '@memberjunction/ng-auth-services';
4
+ import { Router } from '@angular/router';
5
+ import * as i3 from '@angular/common';
6
+
7
+ /**
8
+ * Injection token for MJ Environment Configuration
9
+ */
10
+ declare const MJ_ENVIRONMENT: InjectionToken<MJEnvironmentConfig>;
11
+ /**
12
+ * Injection token for optional startup validation service
13
+ */
14
+ declare const MJ_STARTUP_VALIDATION: InjectionToken<MJStartupValidationService>;
15
+ /**
16
+ * Optional interface for startup validation services
17
+ * Applications can provide their own implementation to handle startup validation
18
+ */
19
+ interface MJStartupValidationService {
20
+ /**
21
+ * Runs validation checks during application startup
22
+ */
23
+ validateSystemSetup(): void;
24
+ /**
25
+ * Adds a validation issue for missing user roles
26
+ */
27
+ addNoRolesValidationIssue(): void;
28
+ }
29
+ /**
30
+ * Environment configuration interface for MemberJunction Angular applications
31
+ */
32
+ interface MJEnvironmentConfig {
33
+ /**
34
+ * Whether the app is running in production mode
35
+ */
36
+ production: boolean;
37
+ /**
38
+ * GraphQL HTTP endpoint URL
39
+ * @example 'http://localhost:4000/graphql'
40
+ */
41
+ GRAPHQL_URI: string;
42
+ /**
43
+ * GraphQL WebSocket endpoint URL for subscriptions
44
+ * @example 'ws://localhost:4000/graphql'
45
+ */
46
+ GRAPHQL_WS_URI: string;
47
+ /**
48
+ * Authentication provider type
49
+ */
50
+ AUTH_TYPE: 'msal' | 'auth0';
51
+ /**
52
+ * MemberJunction core schema name in the database
53
+ * @default '__mj'
54
+ */
55
+ MJ_CORE_SCHEMA_NAME: string;
56
+ /**
57
+ * Microsoft Azure AD/Entra Client ID (for MSAL auth)
58
+ */
59
+ CLIENT_ID?: string;
60
+ /**
61
+ * Microsoft Azure AD/Entra Tenant ID (for MSAL auth)
62
+ */
63
+ TENANT_ID?: string;
64
+ /**
65
+ * Auth0 domain (for Auth0 auth)
66
+ * @example 'myapp.us.auth0.com'
67
+ */
68
+ AUTH0_DOMAIN?: string;
69
+ /**
70
+ * Auth0 client ID (for Auth0 auth)
71
+ */
72
+ AUTH0_CLIENTID?: string;
73
+ /**
74
+ * Additional custom environment properties
75
+ */
76
+ [key: string]: any;
77
+ }
78
+
79
+ /**
80
+ * MemberJunction 3.0 Bootstrap Component
81
+ *
82
+ * Minimal placeholder component for future fully encapsulated bootstrap.
83
+ * Currently applications should use MJInitializationService directly in their app.component.
84
+ */
85
+
86
+ declare class MJBootstrapComponent implements OnInit {
87
+ private environment;
88
+ constructor(environment: MJEnvironmentConfig);
89
+ ngOnInit(): void;
90
+ static ɵfac: i0.ɵɵFactoryDeclaration<MJBootstrapComponent, never>;
91
+ static ɵcmp: i0.ɵɵComponentDeclaration<MJBootstrapComponent, "mj-bootstrap", never, {}, {}, never, ["*"], false, never>;
92
+ }
93
+
94
+ interface InitializationResult {
95
+ success: boolean;
96
+ error?: {
97
+ message: string;
98
+ type: 'no_access' | 'no_roles' | 'auth_error' | 'unknown';
99
+ showValidationOnly?: boolean;
100
+ };
101
+ }
102
+ declare class MJInitializationService {
103
+ private router;
104
+ private authBase;
105
+ private startupValidationService;
106
+ constructor(router: Router, authBase: MJAuthBase, startupValidationService: MJStartupValidationService | null);
107
+ /**
108
+ * Initialize GraphQL client with authentication token and refresh callback
109
+ */
110
+ initializeGraphQL(token: string, environment: MJEnvironmentConfig): Promise<void>;
111
+ /**
112
+ * Refresh shared data and validate user access
113
+ */
114
+ validateUserAccess(): Promise<InitializationResult>;
115
+ /**
116
+ * Run startup validation checks (if validation service is provided)
117
+ */
118
+ runValidationChecks(): void;
119
+ /**
120
+ * Navigate to initial route after successful login
121
+ */
122
+ navigateToInitialRoute(initialPath: string, document: Document): void;
123
+ /**
124
+ * Check if error is related to missing user roles
125
+ */
126
+ isNoUserRolesError(err: any): boolean;
127
+ /**
128
+ * Handle no roles error by showing validation banner (if validation service is provided)
129
+ */
130
+ handleNoRolesError(): InitializationResult;
131
+ /**
132
+ * Handle authentication retry logic
133
+ */
134
+ handleAuthRetry(err: any): Promise<boolean>;
135
+ /**
136
+ * Get auth error message for display
137
+ */
138
+ getAuthErrorMessage(err: unknown): string;
139
+ static ɵfac: i0.ɵɵFactoryDeclaration<MJInitializationService, never>;
140
+ static ɵprov: i0.ɵɵInjectableDeclaration<MJInitializationService>;
141
+ }
142
+
143
+ /**
144
+ * MemberJunction 3.0 Auth Shell Component
145
+ *
146
+ * Handles authentication flow and initialization for MJ applications.
147
+ * This component encapsulates all the auth logic that was previously in app.component.ts
148
+ */
149
+
150
+ declare class MJAuthShellComponent implements OnInit {
151
+ private router;
152
+ document: Document;
153
+ authBase: MJAuthBase;
154
+ private initService;
155
+ private environment;
156
+ HasError: boolean;
157
+ ErrorMessage: any;
158
+ showValidationOnly: boolean;
159
+ subHeaderText: string;
160
+ private initialPath;
161
+ constructor(router: Router, document: Document, authBase: MJAuthBase, initService: MJInitializationService, environment: MJEnvironmentConfig);
162
+ ngOnInit(): Promise<void>;
163
+ /**
164
+ * Handle successful login and initialize the application
165
+ */
166
+ handleLogin(token: string, userInfo: StandardUserInfo): Promise<void>;
167
+ /**
168
+ * Setup authentication and handle auth state changes
169
+ */
170
+ setupAuth(): Promise<void>;
171
+ static ɵfac: i0.ɵɵFactoryDeclaration<MJAuthShellComponent, never>;
172
+ static ɵcmp: i0.ɵɵComponentDeclaration<MJAuthShellComponent, "mj-auth-shell", never, {}, {}, never, ["*"], false, never>;
173
+ }
174
+
175
+ /**
176
+ * MemberJunction 3.0 Bootstrap Module
177
+ *
178
+ * Provides the MJBootstrapComponent and all necessary services for MemberJunction Angular applications.
179
+ * This module encapsulates all the authentication and initialization logic that was previously
180
+ * spread across app.component.ts and app.module.ts.
181
+ *
182
+ * Usage:
183
+ * ```typescript
184
+ * @NgModule({
185
+ * imports: [
186
+ * BrowserModule,
187
+ * BrowserAnimationsModule,
188
+ * MJBootstrapModule.forRoot(environment),
189
+ * // ... other MJ modules
190
+ * ],
191
+ * bootstrap: [AppComponent]
192
+ * })
193
+ * export class AppModule {}
194
+ * ```
195
+ */
196
+
197
+ /**
198
+ * Initialize auth provider before Angular routing starts
199
+ * This ensures auth providers can process OAuth redirect responses before Angular's router
200
+ * consumes the URL hash
201
+ */
202
+ declare function initializeAuth(authService: MJAuthBase): () => Promise<void>;
203
+ declare class MJBootstrapModule {
204
+ /**
205
+ * Configure the bootstrap module with environment settings
206
+ *
207
+ * @param environment - Environment configuration for the application
208
+ * @returns ModuleWithProviders with environment configuration and all services
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * import { environment } from '../environments/environment';
213
+ *
214
+ * @NgModule({
215
+ * imports: [
216
+ * MJBootstrapModule.forRoot(environment)
217
+ * ]
218
+ * })
219
+ * export class AppModule {}
220
+ * ```
221
+ */
222
+ static forRoot(environment: MJEnvironmentConfig): ModuleWithProviders<MJBootstrapModule>;
223
+ static ɵfac: i0.ɵɵFactoryDeclaration<MJBootstrapModule, never>;
224
+ static ɵmod: i0.ɵɵNgModuleDeclaration<MJBootstrapModule, [typeof MJBootstrapComponent, typeof MJAuthShellComponent], [typeof i3.CommonModule], [typeof MJBootstrapComponent, typeof MJAuthShellComponent]>;
225
+ static ɵinj: i0.ɵɵInjectorDeclaration<MJBootstrapModule>;
226
+ }
227
+
228
+ /**
229
+ * AUTO-GENERATED FILE - DO NOT EDIT
230
+ * Generated by mj codegen manifest
231
+ * App: @memberjunction/ng-bootstrap
232
+ * Dependency tree: 491 packages walked, 14 contain @RegisterClass
233
+ *
234
+ * This file imports every @RegisterClass decorated class by name and places
235
+ * them in an exported array, creating a static code path that prevents
236
+ * tree-shaking from removing them.
237
+ */
238
+ /**
239
+ * Runtime references to every @RegisterClass decorated class.
240
+ * This array creates a static code path the bundler cannot tree-shake.
241
+ */
242
+ declare const CLASS_REGISTRATIONS: any[];
243
+ /** Marker constant indicating the manifest has been loaded. */
244
+ declare const CLASS_REGISTRATIONS_MANIFEST_LOADED = true;
245
+ /** Total @RegisterClass decorated classes discovered in dependency tree */
246
+ declare const CLASS_REGISTRATIONS_COUNT = 383;
247
+ /** Packages imported by this manifest */
248
+ declare const CLASS_REGISTRATIONS_PACKAGES: readonly ["@memberjunction/actions-base", "@memberjunction/ai-core-plus", "@memberjunction/ai-engine-base", "@memberjunction/communication-types", "@memberjunction/core-entities", "@memberjunction/entity-communications-base", "@memberjunction/ng-artifacts", "@memberjunction/ng-auth-services", "@memberjunction/ng-core-entity-forms", "@memberjunction/ng-dashboard-viewer", "@memberjunction/ng-dashboards", "@memberjunction/ng-explorer-core", "@memberjunction/ng-explorer-settings", "@memberjunction/ng-file-storage"];
249
+
250
+ export { CLASS_REGISTRATIONS, CLASS_REGISTRATIONS_COUNT, CLASS_REGISTRATIONS_MANIFEST_LOADED, CLASS_REGISTRATIONS_PACKAGES, MJAuthShellComponent, MJBootstrapComponent, MJBootstrapModule, MJInitializationService, MJ_ENVIRONMENT, MJ_STARTUP_VALIDATION, initializeAuth };
251
+ export type { InitializationResult, MJEnvironmentConfig, MJStartupValidationService };
@@ -1,38 +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 { Component, Inject } from '@angular/core';
8
- import { SetProductionStatus } from '@memberjunction/core';
9
- import { MJ_ENVIRONMENT } from './bootstrap.types';
10
- import * as i0 from "@angular/core";
11
- export class MJBootstrapComponent {
12
- environment;
13
- constructor(environment) {
14
- this.environment = environment;
15
- }
16
- ngOnInit() {
17
- console.log('🚀 MemberJunction 3.0 Bootstrap');
18
- SetProductionStatus(this.environment.production);
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapComponent, deps: [{ token: MJ_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MJBootstrapComponent, selector: "mj-bootstrap", ngImport: i0, template: `
22
- <div class="mj-bootstrap-container">
23
- <ng-content></ng-content>
24
- </div>
25
- `, isInline: true, styles: [".mj-bootstrap-container{display:block;width:100%;height:100%}\n"] });
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MJBootstrapComponent, decorators: [{
28
- type: Component,
29
- args: [{ selector: 'mj-bootstrap', template: `
30
- <div class="mj-bootstrap-container">
31
- <ng-content></ng-content>
32
- </div>
33
- `, styles: [".mj-bootstrap-container{display:block;width:100%;height:100%}\n"] }]
34
- }], ctorParameters: () => [{ type: undefined, decorators: [{
35
- type: Inject,
36
- args: [MJ_ENVIRONMENT]
37
- }] }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYm9vdHN0cmFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBdUIsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBaUJ4RSxNQUFNLE9BQU8sb0JBQW9CO0lBRUc7SUFEbEMsWUFDa0MsV0FBZ0M7UUFBaEMsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO0lBQy9ELENBQUM7SUFFSixRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQy9DLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQzt3R0FSVSxvQkFBb0Isa0JBRXJCLGNBQWM7NEZBRmIsb0JBQW9CLG9EQWJyQjs7OztHQUlUOzs0RkFTVSxvQkFBb0I7a0JBZmhDLFNBQVM7K0JBQ0UsY0FBYyxZQUNkOzs7O0dBSVQ7OzBCQVdFLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtYmVySnVuY3Rpb24gMy4wIEJvb3RzdHJhcCBDb21wb25lbnRcbiAqXG4gKiBNaW5pbWFsIHBsYWNlaG9sZGVyIGNvbXBvbmVudCBmb3IgZnV0dXJlIGZ1bGx5IGVuY2Fwc3VsYXRlZCBib290c3RyYXAuXG4gKiBDdXJyZW50bHkgYXBwbGljYXRpb25zIHNob3VsZCB1c2UgTUpJbml0aWFsaXphdGlvblNlcnZpY2UgZGlyZWN0bHkgaW4gdGhlaXIgYXBwLmNvbXBvbmVudC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXRQcm9kdWN0aW9uU3RhdHVzIH0gZnJvbSAnQG1lbWJlcmp1bmN0aW9uL2NvcmUnO1xuaW1wb3J0IHsgTUpFbnZpcm9ubWVudENvbmZpZywgTUpfRU5WSVJPTk1FTlQgfSBmcm9tICcuL2Jvb3RzdHJhcC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21qLWJvb3RzdHJhcCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cIm1qLWJvb3RzdHJhcC1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5tai1ib290c3RyYXAtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBNSkJvb3RzdHJhcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUpfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IE1KRW52aXJvbm1lbnRDb25maWdcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCfwn5qAIE1lbWJlckp1bmN0aW9uIDMuMCBCb290c3RyYXAnKTtcbiAgICBTZXRQcm9kdWN0aW9uU3RhdHVzKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbik7XG4gIH1cbn1cbiJdfQ==