@memberjunction/ng-auth-services 5.51.0 → 6.1.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2023 MemberJunction
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -1,5 +1,6 @@
1
+ import { Provider } from '@angular/core';
1
2
  import { MJAuthBase } from '../mjexplorer-auth-base.service';
2
- import { AuthService, AuthGuard, Auth0ClientFactory, AuthClientConfig } from '@auth0/auth0-angular';
3
+ import { AuthService } from '@auth0/auth0-angular';
3
4
  import { StandardUserInfo, StandardAuthToken, StandardAuthError, TokenRefreshResult } from '../auth-types';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
@@ -18,28 +19,7 @@ export declare class MJAuth0Provider extends MJAuthBase {
18
19
  * Factory function to provide Angular dependencies required by Auth0
19
20
  * Stored as a static property for the factory to access without instantiation
20
21
  */
21
- static angularProviderFactory: (environment: Record<string, unknown>) => (typeof AuthService | typeof AuthGuard | {
22
- provide: import("@angular/core").InjectionToken<import("@auth0/auth0-angular").AuthConfig>;
23
- useValue: {
24
- domain: unknown;
25
- clientId: unknown;
26
- authorizationParams: {
27
- redirect_uri: string;
28
- scope: string;
29
- };
30
- cacheLocation: string;
31
- useRefreshTokens: boolean;
32
- useRefreshTokensFallback: boolean;
33
- skipRedirectCallback: boolean;
34
- };
35
- useFactory?: undefined;
36
- deps?: undefined;
37
- } | {
38
- provide: import("@angular/core").InjectionToken<import("@auth0/auth0-spa-js").Auth0Client>;
39
- useFactory: typeof Auth0ClientFactory.createClient;
40
- deps: (typeof AuthClientConfig)[];
41
- useValue?: undefined;
42
- })[];
22
+ static angularProviderFactory: (environment: Record<string, unknown>) => Provider[];
43
23
  constructor(auth: AuthService);
44
24
  initialize(): Promise<void>;
45
25
  protected loginInternal(options?: Record<string, unknown>): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"mjexplorer-auth0-provider.service.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAiB,SAAS,EAAyC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI1J,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,eAAe,CAAC;;AACvB;;;;;;GAMG;AACH,qBAIa,eAAgB,SAAQ,UAAU;IA+C1B,IAAI,EAAE,WAAW;IA9CpC,MAAM,CAAC,QAAQ,CAAC,aAAa,WAAW;IACxC,QAAQ,CAAC,IAAI,WAAiC;IAC9C,OAAO,CAAC,YAAY,CAAS;IAE7B;;;OAGG;IACH,MAAM,CAAC,sBAAsB,GAAI,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;SAoCnE;gBAEiB,IAAI,EAAE,WAAW;IAY9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cA0CjB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAK/D,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC;;;;;OAKG;cACa,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWhE;;;;OAIG;cACa,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAuB7E;;;;OAIG;cACa,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAc3E;;;;;OAKG;cACa,oBAAoB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6CnE;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB;YAgEpD,iBAAiB;IAM/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;;;;OAKG;cACa,4BAA4B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUtE;;;;;;OAMG;cACa,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IASnD,iBAAiB,IAAI,MAAM,EAAE;IAI7B,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;yCAjXvD,eAAe;6CAAf,eAAe;CAqX3B"}
1
+ {"version":3,"file":"mjexplorer-auth0-provider.service.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAyG,MAAM,sBAAsB,CAAC;AAI1J,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,eAAe,CAAC;;AACvB;;;;;;GAMG;AACH,qBAIa,eAAgB,SAAQ,UAAU;IA+C1B,IAAI,EAAE,WAAW;IA9CpC,MAAM,CAAC,QAAQ,CAAC,aAAa,WAAW;IACxC,QAAQ,CAAC,IAAI,WAAiC;IAC9C,OAAO,CAAC,YAAY,CAAS;IAE7B;;;OAGG;IACH,MAAM,CAAC,sBAAsB,GAAI,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,QAAQ,EAAE,CAoChF;gBAEiB,IAAI,EAAE,WAAW;IAY9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cA0CjB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAK/D,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC;;;;;OAKG;cACa,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWhE;;;;OAIG;cACa,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAuB7E;;;;OAIG;cACa,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAc3E;;;;;OAKG;cACa,oBAAoB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6CnE;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB;YAgEpD,iBAAiB;IAM/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;;;;OAKG;cACa,4BAA4B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUtE;;;;;;OAMG;cACa,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IASnD,iBAAiB,IAAI,MAAM,EAAE;IAI7B,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;yCAjXvD,eAAe;6CAAf,eAAe;CAqX3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"mjexplorer-auth0-provider.service.js","sourceRoot":"","sources":["../../../src/lib/providers/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { MJAuthBase } from '../mjexplorer-auth-base.service';\nimport { AuthService, IdToken, User, AuthGuard, AuthConfigService, Auth0ClientService, Auth0ClientFactory, AuthClientConfig } from '@auth0/auth0-angular';\nimport { Observable, of, firstValueFrom } from 'rxjs';\nimport { take, filter } from 'rxjs/operators';\nimport { AngularAuthProviderConfig } from '../IAuthProvider';\nimport {\n StandardUserInfo,\n StandardAuthToken,\n StandardAuthError,\n AuthErrorType,\n TokenRefreshResult\n} from '../auth-types';\n/**\n * Auth0 authentication provider implementation - v3.0.0\n *\n * Implements the abstract methods from MJAuthBase to hide Auth0-specific details.\n * The key abstraction is that Auth0 stores the JWT in `idTokenClaims.__raw`,\n * but consumers never need to know this detail.\n */\n@Injectable({\n providedIn: 'root'\n})\n@RegisterClass(MJAuthBase, 'auth0')\nexport class MJAuth0Provider extends MJAuthBase {\n static readonly PROVIDER_TYPE = 'auth0';\n readonly type = MJAuth0Provider.PROVIDER_TYPE;\n private _initialized = false;\n\n /**\n * Factory function to provide Angular dependencies required by Auth0\n * Stored as a static property for the factory to access without instantiation\n */\n static angularProviderFactory = (environment: Record<string, unknown>) => {\n // Check if we're on the MCP OAuth callback path\n const isMCPOAuthCallback = window.location.pathname.startsWith('/oauth/callback');\n\n return [\n AuthService,\n AuthGuard,\n {\n provide: AuthConfigService,\n useValue: {\n domain: environment['AUTH0_DOMAIN'],\n clientId: environment['AUTH0_CLIENTID'],\n authorizationParams: {\n redirect_uri: window.location.origin,\n scope: 'openid profile email offline_access',\n // No audience parameter - uses ID tokens (matches pre-refactor behavior)\n // ID tokens have aud=clientId by default and contain user claims\n },\n cacheLocation: 'localstorage',\n // Enable refresh tokens so we can refresh without relying on Auth0 session cookies\n useRefreshTokens: true,\n // Use rotating refresh tokens for better security\n useRefreshTokensFallback: true,\n // CRITICAL: Skip Auth0's redirect callback handling for MCP OAuth callbacks\n // The /oauth/callback path is used by MCP OAuth, not Auth0. If we don't skip,\n // Auth0 will consume the code parameter and redirect to /, preventing the\n // OAuthCallbackComponent from processing the MCP OAuth flow.\n skipRedirectCallback: isMCPOAuthCallback,\n },\n },\n {\n provide: Auth0ClientService,\n useFactory: Auth0ClientFactory.createClient,\n deps: [AuthClientConfig],\n }\n ];\n };\n\n constructor(public auth: AuthService) {\n const config: AngularAuthProviderConfig = {\n name: MJAuth0Provider.PROVIDER_TYPE,\n type: MJAuth0Provider.PROVIDER_TYPE\n };\n super(config);\n }\n\n // ============================================================================\n // LIFECYCLE METHODS\n // ============================================================================\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n // CRITICAL: Wait for Auth0 SDK to process any redirect callback\n // The SDK handles this internally and updates isLoading$ when done\n await firstValueFrom(this.auth.isLoading$.pipe(\n filter(loading => !loading),\n take(1)\n ));\n\n // Get current authentication state\n const isAuthenticated = await firstValueFrom(this.auth.isAuthenticated$);\n\n // CRITICAL: Get current user BEFORE setting up subscriptions\n // This ensures userInfo$ has a value before app.component.ts subscribes\n if (isAuthenticated) {\n const user = await firstValueFrom(this.auth.user$);\n if (user) {\n const userInfo = this.mapAuth0UserToStandard(user);\n this.updateUserInfo(userInfo);\n }\n }\n\n // Subscribe to authentication state and user info for future changes\n this.auth.isAuthenticated$.subscribe((loggedIn) => {\n this.updateAuthState(loggedIn);\n });\n\n this.auth.user$.subscribe((user) => {\n if (user) {\n const userInfo = this.mapAuth0UserToStandard(user);\n this.updateUserInfo(userInfo);\n } else {\n this.updateUserInfo(null);\n }\n });\n\n this._initialized = true;\n }\n\n protected async loginInternal(options?: Record<string, unknown>): Promise<void> {\n await this.ensureInitialized();\n this.auth.loginWithRedirect(options);\n }\n\n protected async logoutInternal(): Promise<void> {\n // Subscribe to the Observable so Auth0 Angular SDK v2's authState.refresh() fires.\n try {\n await firstValueFrom(\n this.auth.logout({ logoutParams: { returnTo: document.location.origin } })\n );\n } catch {\n // Expected when Auth0 redirects the browser before the Observable completes.\n }\n }\n\n async handleCallback(): Promise<void> {\n // Auth0 Angular SDK handles callbacks internally via interceptors\n // This method exists for interface compatibility\n }\n\n // ============================================================================\n // ABSTRACT METHOD IMPLEMENTATIONS (v3.0.0)\n // ============================================================================\n\n /**\n * Extract ID token from Auth0's storage\n *\n * Auth0 stores the JWT string in idTokenClaims.__raw\n * This is the key abstraction - consumers never need to know about __raw!\n */\n protected async extractIdTokenInternal(): Promise<string | null> {\n try {\n const claims = await firstValueFrom(this.auth.idTokenClaims$);\n // Auth0-specific detail: JWT is in __raw property\n return claims?.__raw || null;\n } catch (error) {\n console.error('[Auth0] Error extracting ID token:', error);\n return null;\n }\n }\n\n /**\n * Extract complete token info from Auth0\n *\n * Maps Auth0's token structure to StandardAuthToken\n */\n protected async extractTokenInfoInternal(): Promise<StandardAuthToken | null> {\n try {\n const claims = await firstValueFrom(this.auth.idTokenClaims$);\n if (!claims) {\n return null;\n }\n\n const idToken = claims.__raw;\n if (!idToken) {\n return null;\n }\n\n return {\n idToken,\n expiresAt: claims.exp ? claims.exp * 1000 : 0, // Convert to milliseconds\n scopes: claims.scope ? claims.scope.split(' ') : undefined\n };\n } catch (error) {\n console.error('[Auth0] Error extracting token info:', error);\n return null;\n }\n }\n\n /**\n * Extract user info from Auth0 claims\n *\n * Maps Auth0's user object structure to StandardUserInfo\n */\n protected async extractUserInfoInternal(): Promise<StandardUserInfo | null> {\n try {\n const user = await firstValueFrom(this.auth.user$);\n if (!user) {\n return null;\n }\n\n return this.mapAuth0UserToStandard(user);\n } catch (error) {\n console.error('[Auth0] Error extracting user info:', error);\n return null;\n }\n }\n\n /**\n * Refresh token using Auth0's silent authentication\n *\n * Uses cacheMode: 'off' to bypass cache and force token refresh\n * With useRefreshTokens: true and offline_access scope, this will use refresh tokens\n */\n protected async refreshTokenInternal(): Promise<TokenRefreshResult> {\n try {\n console.log('[Auth0] Attempting to refresh token...');\n\n // Force token refresh by bypassing cache\n // With useRefreshTokens: true and offline_access scope, this will use refresh tokens\n await firstValueFrom(this.auth.getAccessTokenSilently({\n cacheMode: 'off'\n }));\n\n // Small delay to ensure Auth0 SDK has updated observables\n await new Promise(resolve => setTimeout(resolve, 100));\n\n // Extract fresh token info from updated observables\n const token = await this.extractTokenInfoInternal();\n\n if (!token) {\n return {\n success: false,\n error: {\n type: AuthErrorType.NO_ACTIVE_SESSION,\n message: 'Token refresh succeeded but could not extract token info',\n userMessage: 'Session refresh failed. Please log in again.'\n }\n };\n }\n\n console.log('[Auth0] Token refresh successful', {\n expiresAt: new Date(token.expiresAt).toISOString()\n });\n\n return {\n success: true,\n token\n };\n } catch (error) {\n console.error('[Auth0] Token refresh failed:', error);\n\n return {\n success: false,\n error: this.classifyErrorInternal(error)\n };\n }\n }\n\n /**\n * Classify Auth0-specific errors into semantic types\n *\n * Maps Auth0 error patterns to AuthErrorType enum\n */\n protected classifyErrorInternal(error: unknown): StandardAuthError {\n const errorObj = error as Record<string, unknown>;\n const message = errorObj?.['message'] as string || 'Unknown error';\n const errorType = errorObj?.['error'] as string || '';\n\n // Check for specific Auth0 error patterns\n if (message.includes('jwt expired') || message.includes('token expired')) {\n return {\n type: AuthErrorType.TOKEN_EXPIRED,\n message,\n originalError: error,\n userMessage: 'Your session has expired. Please log in again.'\n };\n }\n\n if (errorType === 'login_required' || message.includes('login_required')) {\n return {\n type: AuthErrorType.NO_ACTIVE_SESSION,\n message,\n originalError: error,\n userMessage: 'You need to log in to continue.'\n };\n }\n\n if (errorType === 'consent_required' || message.includes('consent_required')) {\n return {\n type: AuthErrorType.INTERACTION_REQUIRED,\n message,\n originalError: error,\n userMessage: 'Additional permissions are required. Please log in again.'\n };\n }\n\n if (message.includes('user closed') || message.includes('cancelled')) {\n return {\n type: AuthErrorType.USER_CANCELLED,\n message,\n originalError: error,\n userMessage: 'Login was cancelled.'\n };\n }\n\n if (message.includes('network') || message.includes('fetch')) {\n return {\n type: AuthErrorType.NETWORK_ERROR,\n message,\n originalError: error,\n userMessage: 'Network error. Please check your connection and try again.'\n };\n }\n\n // Default to unknown error\n return {\n type: AuthErrorType.UNKNOWN_ERROR,\n message,\n originalError: error,\n userMessage: 'An unexpected error occurred. Please try again.'\n };\n }\n\n // ============================================================================\n // HELPER METHODS\n // ============================================================================\n\n private async ensureInitialized(): Promise<void> {\n if (!this._initialized) {\n await this.initialize();\n }\n }\n\n /**\n * Map Auth0 User object to StandardUserInfo\n */\n private mapAuth0UserToStandard(user: User): StandardUserInfo {\n return {\n id: user.sub || '',\n email: user.email || '',\n name: user.name || '',\n givenName: user.given_name,\n familyName: user.family_name,\n preferredUsername: user.nickname,\n pictureUrl: user.picture,\n locale: user.locale,\n emailVerified: user.email_verified\n };\n }\n\n /**\n * Get profile picture URL from Auth0\n *\n * Auth0 includes the picture URL directly in user claims.\n * No additional API call needed.\n */\n protected async getProfilePictureUrlInternal(): Promise<string | null> {\n try {\n const user = await firstValueFrom(this.auth.user$);\n return user?.picture || null;\n } catch (error) {\n console.error('[Auth0] Error getting profile picture:', error);\n return null;\n }\n }\n\n /**\n * Handle session expiry - no-op for Auth0\n *\n * Auth0 uses refresh tokens (offline_access scope), so it doesn't need\n * interactive re-authentication when tokens expire. If refresh fails,\n * the base class will throw an error and the user must log out/in manually.\n */\n protected async handleSessionExpiryInternal(): Promise<void> {\n // No-op - Auth0 doesn't need interactive re-auth\n return;\n }\n\n // ============================================================================\n // CONFIGURATION\n // ============================================================================\n\n override getRequiredConfig(): string[] {\n return ['clientId', 'domain'];\n }\n\n override validateConfig(_config: Record<string, unknown>): boolean {\n // Auth0 configuration is handled by Angular module providers\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"mjexplorer-auth0-provider.service.js","sourceRoot":"","sources":["../../../src/lib/providers/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Provider } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { MJAuthBase } from '../mjexplorer-auth-base.service';\nimport { AuthService, IdToken, User, AuthGuard, AuthConfigService, Auth0ClientService, Auth0ClientFactory, AuthClientConfig } from '@auth0/auth0-angular';\nimport { Observable, of, firstValueFrom } from 'rxjs';\nimport { take, filter } from 'rxjs/operators';\nimport { AngularAuthProviderConfig } from '../IAuthProvider';\nimport {\n StandardUserInfo,\n StandardAuthToken,\n StandardAuthError,\n AuthErrorType,\n TokenRefreshResult\n} from '../auth-types';\n/**\n * Auth0 authentication provider implementation - v3.0.0\n *\n * Implements the abstract methods from MJAuthBase to hide Auth0-specific details.\n * The key abstraction is that Auth0 stores the JWT in `idTokenClaims.__raw`,\n * but consumers never need to know this detail.\n */\n@Injectable({\n providedIn: 'root'\n})\n@RegisterClass(MJAuthBase, 'auth0')\nexport class MJAuth0Provider extends MJAuthBase {\n static readonly PROVIDER_TYPE = 'auth0';\n readonly type = MJAuth0Provider.PROVIDER_TYPE;\n private _initialized = false;\n\n /**\n * Factory function to provide Angular dependencies required by Auth0\n * Stored as a static property for the factory to access without instantiation\n */\n static angularProviderFactory = (environment: Record<string, unknown>): Provider[] => {\n // Check if we're on the MCP OAuth callback path\n const isMCPOAuthCallback = window.location.pathname.startsWith('/oauth/callback');\n\n return [\n AuthService,\n AuthGuard,\n {\n provide: AuthConfigService,\n useValue: {\n domain: environment['AUTH0_DOMAIN'],\n clientId: environment['AUTH0_CLIENTID'],\n authorizationParams: {\n redirect_uri: window.location.origin,\n scope: 'openid profile email offline_access',\n // No audience parameter - uses ID tokens (matches pre-refactor behavior)\n // ID tokens have aud=clientId by default and contain user claims\n },\n cacheLocation: 'localstorage',\n // Enable refresh tokens so we can refresh without relying on Auth0 session cookies\n useRefreshTokens: true,\n // Use rotating refresh tokens for better security\n useRefreshTokensFallback: true,\n // CRITICAL: Skip Auth0's redirect callback handling for MCP OAuth callbacks\n // The /oauth/callback path is used by MCP OAuth, not Auth0. If we don't skip,\n // Auth0 will consume the code parameter and redirect to /, preventing the\n // OAuthCallbackComponent from processing the MCP OAuth flow.\n skipRedirectCallback: isMCPOAuthCallback,\n },\n },\n {\n provide: Auth0ClientService,\n useFactory: Auth0ClientFactory.createClient,\n deps: [AuthClientConfig],\n }\n ];\n };\n\n constructor(public auth: AuthService) {\n const config: AngularAuthProviderConfig = {\n name: MJAuth0Provider.PROVIDER_TYPE,\n type: MJAuth0Provider.PROVIDER_TYPE\n };\n super(config);\n }\n\n // ============================================================================\n // LIFECYCLE METHODS\n // ============================================================================\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n // CRITICAL: Wait for Auth0 SDK to process any redirect callback\n // The SDK handles this internally and updates isLoading$ when done\n await firstValueFrom(this.auth.isLoading$.pipe(\n filter(loading => !loading),\n take(1)\n ));\n\n // Get current authentication state\n const isAuthenticated = await firstValueFrom(this.auth.isAuthenticated$);\n\n // CRITICAL: Get current user BEFORE setting up subscriptions\n // This ensures userInfo$ has a value before app.component.ts subscribes\n if (isAuthenticated) {\n const user = await firstValueFrom(this.auth.user$);\n if (user) {\n const userInfo = this.mapAuth0UserToStandard(user);\n this.updateUserInfo(userInfo);\n }\n }\n\n // Subscribe to authentication state and user info for future changes\n this.auth.isAuthenticated$.subscribe((loggedIn) => {\n this.updateAuthState(loggedIn);\n });\n\n this.auth.user$.subscribe((user) => {\n if (user) {\n const userInfo = this.mapAuth0UserToStandard(user);\n this.updateUserInfo(userInfo);\n } else {\n this.updateUserInfo(null);\n }\n });\n\n this._initialized = true;\n }\n\n protected async loginInternal(options?: Record<string, unknown>): Promise<void> {\n await this.ensureInitialized();\n this.auth.loginWithRedirect(options);\n }\n\n protected async logoutInternal(): Promise<void> {\n // Subscribe to the Observable so Auth0 Angular SDK v2's authState.refresh() fires.\n try {\n await firstValueFrom(\n this.auth.logout({ logoutParams: { returnTo: document.location.origin } })\n );\n } catch {\n // Expected when Auth0 redirects the browser before the Observable completes.\n }\n }\n\n async handleCallback(): Promise<void> {\n // Auth0 Angular SDK handles callbacks internally via interceptors\n // This method exists for interface compatibility\n }\n\n // ============================================================================\n // ABSTRACT METHOD IMPLEMENTATIONS (v3.0.0)\n // ============================================================================\n\n /**\n * Extract ID token from Auth0's storage\n *\n * Auth0 stores the JWT string in idTokenClaims.__raw\n * This is the key abstraction - consumers never need to know about __raw!\n */\n protected async extractIdTokenInternal(): Promise<string | null> {\n try {\n const claims = await firstValueFrom(this.auth.idTokenClaims$);\n // Auth0-specific detail: JWT is in __raw property\n return claims?.__raw || null;\n } catch (error) {\n console.error('[Auth0] Error extracting ID token:', error);\n return null;\n }\n }\n\n /**\n * Extract complete token info from Auth0\n *\n * Maps Auth0's token structure to StandardAuthToken\n */\n protected async extractTokenInfoInternal(): Promise<StandardAuthToken | null> {\n try {\n const claims = await firstValueFrom(this.auth.idTokenClaims$);\n if (!claims) {\n return null;\n }\n\n const idToken = claims.__raw;\n if (!idToken) {\n return null;\n }\n\n return {\n idToken,\n expiresAt: claims.exp ? claims.exp * 1000 : 0, // Convert to milliseconds\n scopes: claims.scope ? claims.scope.split(' ') : undefined\n };\n } catch (error) {\n console.error('[Auth0] Error extracting token info:', error);\n return null;\n }\n }\n\n /**\n * Extract user info from Auth0 claims\n *\n * Maps Auth0's user object structure to StandardUserInfo\n */\n protected async extractUserInfoInternal(): Promise<StandardUserInfo | null> {\n try {\n const user = await firstValueFrom(this.auth.user$);\n if (!user) {\n return null;\n }\n\n return this.mapAuth0UserToStandard(user);\n } catch (error) {\n console.error('[Auth0] Error extracting user info:', error);\n return null;\n }\n }\n\n /**\n * Refresh token using Auth0's silent authentication\n *\n * Uses cacheMode: 'off' to bypass cache and force token refresh\n * With useRefreshTokens: true and offline_access scope, this will use refresh tokens\n */\n protected async refreshTokenInternal(): Promise<TokenRefreshResult> {\n try {\n console.log('[Auth0] Attempting to refresh token...');\n\n // Force token refresh by bypassing cache\n // With useRefreshTokens: true and offline_access scope, this will use refresh tokens\n await firstValueFrom(this.auth.getAccessTokenSilently({\n cacheMode: 'off'\n }));\n\n // Small delay to ensure Auth0 SDK has updated observables\n await new Promise(resolve => setTimeout(resolve, 100));\n\n // Extract fresh token info from updated observables\n const token = await this.extractTokenInfoInternal();\n\n if (!token) {\n return {\n success: false,\n error: {\n type: AuthErrorType.NO_ACTIVE_SESSION,\n message: 'Token refresh succeeded but could not extract token info',\n userMessage: 'Session refresh failed. Please log in again.'\n }\n };\n }\n\n console.log('[Auth0] Token refresh successful', {\n expiresAt: new Date(token.expiresAt).toISOString()\n });\n\n return {\n success: true,\n token\n };\n } catch (error) {\n console.error('[Auth0] Token refresh failed:', error);\n\n return {\n success: false,\n error: this.classifyErrorInternal(error)\n };\n }\n }\n\n /**\n * Classify Auth0-specific errors into semantic types\n *\n * Maps Auth0 error patterns to AuthErrorType enum\n */\n protected classifyErrorInternal(error: unknown): StandardAuthError {\n const errorObj = error as Record<string, unknown>;\n const message = errorObj?.['message'] as string || 'Unknown error';\n const errorType = errorObj?.['error'] as string || '';\n\n // Check for specific Auth0 error patterns\n if (message.includes('jwt expired') || message.includes('token expired')) {\n return {\n type: AuthErrorType.TOKEN_EXPIRED,\n message,\n originalError: error,\n userMessage: 'Your session has expired. Please log in again.'\n };\n }\n\n if (errorType === 'login_required' || message.includes('login_required')) {\n return {\n type: AuthErrorType.NO_ACTIVE_SESSION,\n message,\n originalError: error,\n userMessage: 'You need to log in to continue.'\n };\n }\n\n if (errorType === 'consent_required' || message.includes('consent_required')) {\n return {\n type: AuthErrorType.INTERACTION_REQUIRED,\n message,\n originalError: error,\n userMessage: 'Additional permissions are required. Please log in again.'\n };\n }\n\n if (message.includes('user closed') || message.includes('cancelled')) {\n return {\n type: AuthErrorType.USER_CANCELLED,\n message,\n originalError: error,\n userMessage: 'Login was cancelled.'\n };\n }\n\n if (message.includes('network') || message.includes('fetch')) {\n return {\n type: AuthErrorType.NETWORK_ERROR,\n message,\n originalError: error,\n userMessage: 'Network error. Please check your connection and try again.'\n };\n }\n\n // Default to unknown error\n return {\n type: AuthErrorType.UNKNOWN_ERROR,\n message,\n originalError: error,\n userMessage: 'An unexpected error occurred. Please try again.'\n };\n }\n\n // ============================================================================\n // HELPER METHODS\n // ============================================================================\n\n private async ensureInitialized(): Promise<void> {\n if (!this._initialized) {\n await this.initialize();\n }\n }\n\n /**\n * Map Auth0 User object to StandardUserInfo\n */\n private mapAuth0UserToStandard(user: User): StandardUserInfo {\n return {\n id: user.sub || '',\n email: user.email || '',\n name: user.name || '',\n givenName: user.given_name,\n familyName: user.family_name,\n preferredUsername: user.nickname,\n pictureUrl: user.picture,\n locale: user.locale,\n emailVerified: user.email_verified\n };\n }\n\n /**\n * Get profile picture URL from Auth0\n *\n * Auth0 includes the picture URL directly in user claims.\n * No additional API call needed.\n */\n protected async getProfilePictureUrlInternal(): Promise<string | null> {\n try {\n const user = await firstValueFrom(this.auth.user$);\n return user?.picture || null;\n } catch (error) {\n console.error('[Auth0] Error getting profile picture:', error);\n return null;\n }\n }\n\n /**\n * Handle session expiry - no-op for Auth0\n *\n * Auth0 uses refresh tokens (offline_access scope), so it doesn't need\n * interactive re-authentication when tokens expire. If refresh fails,\n * the base class will throw an error and the user must log out/in manually.\n */\n protected async handleSessionExpiryInternal(): Promise<void> {\n // No-op - Auth0 doesn't need interactive re-auth\n return;\n }\n\n // ============================================================================\n // CONFIGURATION\n // ============================================================================\n\n override getRequiredConfig(): string[] {\n return ['clientId', 'domain'];\n }\n\n override validateConfig(_config: Record<string, unknown>): boolean {\n // Auth0 configuration is handled by Angular module providers\n return true;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,16 +1,12 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-auth-services",
3
- "version": "5.51.0",
3
+ "version": "6.1.0-edge.0",
4
4
  "description": "MemberJunction Explorer: Authentication Services",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
7
7
  "files": [
8
8
  "/dist"
9
9
  ],
10
- "scripts": {
11
- "test": "vitest run",
12
- "build": "ngc"
13
- },
14
10
  "keywords": [],
15
11
  "author": "",
16
12
  "license": "ISC",
@@ -22,7 +18,6 @@
22
18
  "@angular/common": "21.1.3",
23
19
  "@angular/core": "21.1.3",
24
20
  "@angular/forms": "21.1.3",
25
- "@angular/router": "21.1.3",
26
21
  "@auth0/auth0-angular": "^2.6.0",
27
22
  "@azure/msal-angular": "^5.0.3",
28
23
  "@azure/msal-browser": "^5.1.0",
@@ -32,14 +27,20 @@
32
27
  "aws-amplify": "^6.0.0"
33
28
  },
34
29
  "dependencies": {
35
- "@memberjunction/core": "5.51.0",
36
- "@memberjunction/global": "5.51.0",
30
+ "@memberjunction/core": "6.1.0-edge.0",
31
+ "@memberjunction/global": "6.1.0-edge.0",
37
32
  "rxjs": "^7.8.2",
38
- "tslib": "^2.8.1"
33
+ "tslib": "^2.8.1",
34
+ "@auth0/auth0-spa-js": "^2.14.0"
39
35
  },
40
36
  "sideEffects": false,
41
37
  "repository": {
42
38
  "type": "git",
43
39
  "url": "https://github.com/MemberJunction/MJ"
40
+ },
41
+ "mjUILayer": "surface",
42
+ "scripts": {
43
+ "test": "vitest run",
44
+ "build": "ngc"
44
45
  }
45
- }
46
+ }