@memberjunction/ng-auth-services 5.0.0 → 5.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-auth-services",
3
- "version": "5.0.0",
3
+ "version": "5.2.0",
4
4
  "description": "MemberJunction Explorer: Authentication Services",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -30,8 +30,8 @@
30
30
  "@okta/okta-auth-js": "^7.14.1"
31
31
  },
32
32
  "dependencies": {
33
- "@memberjunction/core": "5.0.0",
34
- "@memberjunction/global": "5.0.0",
33
+ "@memberjunction/core": "5.2.0",
34
+ "@memberjunction/global": "5.2.0",
35
35
  "rxjs": "^7.8.2",
36
36
  "tslib": "^2.8.1"
37
37
  },
@@ -1,18 +0,0 @@
1
- import { MJAuthBase } from './mjexplorer-auth-base.service';
2
- import { AuthService, User } from '@auth0/auth0-angular';
3
- import { Observable } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- export declare class MJAuth0Provider extends MJAuthBase {
6
- auth: AuthService;
7
- constructor(auth: AuthService);
8
- login(options?: any): any;
9
- logout(): Promise<void>;
10
- refresh(): Promise<Observable<any>>;
11
- getUser(): Promise<Observable<User | null | undefined>>;
12
- isAuthenticated(): Promise<Observable<boolean>>;
13
- getUserClaims(): Promise<Observable<any>>;
14
- checkExpiredTokenError(error: string): boolean;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<MJAuth0Provider, never>;
16
- static ɵprov: i0.ɵɵInjectableDeclaration<MJAuth0Provider>;
17
- }
18
- //# sourceMappingURL=mjexplorer-auth0-provider.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mjexplorer-auth0-provider.service.d.ts","sourceRoot":"","sources":["../../src/lib/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAW,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAC;;AAEtC,qBAGa,eAAgB,SAAQ,UAAU;IAE1B,IAAI,EAAE,WAAW;gBAAjB,IAAI,EAAE,WAAW;IAO3B,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG;IAIrB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAK1C,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAIvD,eAAe;IAIf,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAI/C,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;yCAlCnC,eAAe;6CAAf,eAAe;CAsC3B"}
@@ -1,45 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { MJAuthBase } from './mjexplorer-auth-base.service';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@auth0/auth0-angular";
5
- export class MJAuth0Provider extends MJAuthBase {
6
- auth;
7
- constructor(auth) {
8
- super();
9
- this.auth = auth;
10
- this.auth.isAuthenticated$.subscribe((loggedIn) => {
11
- this.setAuthenticated(loggedIn);
12
- });
13
- }
14
- login(options) {
15
- this.auth.loginWithRedirect(options);
16
- }
17
- async logout() {
18
- this.auth.logout({ logoutParams: { returnTo: document.location.origin } });
19
- }
20
- async refresh() {
21
- await this.auth.getAccessTokenSilently();
22
- return this.auth.idTokenClaims$;
23
- }
24
- async getUser() {
25
- return this.auth.user$;
26
- }
27
- async isAuthenticated() {
28
- return this.auth.isAuthenticated$;
29
- }
30
- async getUserClaims() {
31
- return this.auth.idTokenClaims$;
32
- }
33
- checkExpiredTokenError(error) {
34
- return error?.includes('jwt expired');
35
- }
36
- static ɵfac = function MJAuth0Provider_Factory(t) { return new (t || MJAuth0Provider)(i0.ɵɵinject(i1.AuthService)); };
37
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MJAuth0Provider, factory: MJAuth0Provider.ɵfac, providedIn: 'root' });
38
- }
39
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAuth0Provider, [{
40
- type: Injectable,
41
- args: [{
42
- providedIn: 'root'
43
- }]
44
- }], () => [{ type: i1.AuthService }], null); })();
45
- //# sourceMappingURL=mjexplorer-auth0-provider.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mjexplorer-auth0-provider.service.js","sourceRoot":"","sources":["../../src/lib/mjexplorer-auth0-provider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;;;AAO5D,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAE1B;IAAnB,YAAmB,IAAiB;QAClC,KAAK,EAAE,CAAC;QADS,SAAI,GAAJ,IAAI,CAAa;QAElC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,OAAa;QAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IAClC,CAAC;IAED,sBAAsB,CAAC,KAAa;QAClC,OAAO,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;yEApCU,eAAe;gEAAf,eAAe,WAAf,eAAe,mBAFd,MAAM;;iFAEP,eAAe;cAH3B,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB"}
@@ -1,24 +0,0 @@
1
- import { MJAuthBase } from './mjexplorer-auth-base.service';
2
- import { Observable } from 'rxjs';
3
- import { MsalBroadcastService, MsalService } from '@azure/msal-angular';
4
- import { AccountInfo } from '@azure/msal-common';
5
- import * as i0 from "@angular/core";
6
- export declare class MJMSALProvider extends MJAuthBase {
7
- auth: MsalService;
8
- private msalBroadcastService;
9
- private readonly _destroying$;
10
- private readonly _initializationCompleted$;
11
- constructor(auth: MsalService, msalBroadcastService: MsalBroadcastService);
12
- private initializeMSAL;
13
- private ensureInitialized;
14
- login(options?: any): Promise<any>;
15
- logout(): Promise<void>;
16
- refresh(): Promise<Observable<any>>;
17
- getUser(): Promise<AccountInfo | null>;
18
- isAuthenticated(): Promise<Observable<boolean>>;
19
- getUserClaims(): Promise<Observable<any>>;
20
- checkExpiredTokenError(error: string): boolean;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<MJMSALProvider, never>;
22
- static ɵprov: i0.ɵɵInjectableDeclaration<MJMSALProvider>;
23
- }
24
- //# sourceMappingURL=mjexplorer-msal-provider.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mjexplorer-msal-provider.service.d.ts","sourceRoot":"","sources":["../../src/lib/mjexplorer-msal-provider.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAmB,UAAU,EAA2F,MAAM,MAAM,CAAC;AAC5I,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;;AAIvE,qBAGa,cAAe,SAAQ,UAAU;IAKzB,IAAI,EAAE,WAAW;IAAE,OAAO,CAAC,oBAAoB;IAHlE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAuC;gBAE9D,IAAI,EAAE,WAAW,EAAU,oBAAoB,EAAE,oBAAoB;YAK1E,cAAc;YAcd,iBAAiB;IAMhB,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBpC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAS1C,OAAO,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKtC,eAAe;IAKf,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAwB/C,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;yCAhGnC,cAAc;6CAAd,cAAc;CAoG1B"}
@@ -1,108 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { MJAuthBase } from './mjexplorer-auth-base.service';
3
- import { BehaviorSubject, Subject, catchError, filter, from, map, of, throwError, takeUntil, take, firstValueFrom } from 'rxjs';
4
- import { CacheLookupPolicy, InteractionRequiredAuthError, InteractionStatus } from '@azure/msal-browser';
5
- import { LogError } from '@memberjunction/core';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@azure/msal-angular";
8
- export class MJMSALProvider extends MJAuthBase {
9
- auth;
10
- msalBroadcastService;
11
- _destroying$ = new Subject();
12
- _initializationCompleted$ = new BehaviorSubject(false);
13
- constructor(auth, msalBroadcastService) {
14
- super();
15
- this.auth = auth;
16
- this.msalBroadcastService = msalBroadcastService;
17
- this.initializeMSAL();
18
- }
19
- async initializeMSAL() {
20
- await this.auth.instance.initialize();
21
- // After initialization logic
22
- this.auth.instance.setActiveAccount(this.auth.instance.getAllAccounts()[0] || null);
23
- this.msalBroadcastService.inProgress$
24
- .pipe(filter((status) => status === InteractionStatus.None), takeUntil(this._destroying$))
25
- .subscribe(() => {
26
- this.setAuthenticated(this.auth.instance.getAllAccounts().length > 0);
27
- this.auth.instance.setActiveAccount(this.auth.instance.getAllAccounts()[0] || null);
28
- this._initializationCompleted$.next(true); // Signal initialization complete
29
- });
30
- }
31
- // Ensure methods wait for initialization
32
- async ensureInitialized() {
33
- if (!this._initializationCompleted$.value) {
34
- await firstValueFrom(this._initializationCompleted$.pipe(filter(done => done), take(1)));
35
- }
36
- }
37
- async login(options) {
38
- await this.ensureInitialized();
39
- const silentRequest = {
40
- scopes: ['User.Read', 'email', 'profile']
41
- };
42
- this.auth.loginRedirect(silentRequest).subscribe({
43
- next: () => {
44
- this.auth.instance.setActiveAccount(this.auth.instance.getAllAccounts()[0] || null);
45
- window.location.reload();
46
- },
47
- error: (error) => {
48
- LogError(error);
49
- }
50
- });
51
- }
52
- async logout() {
53
- await this.ensureInitialized();
54
- this.auth.logoutRedirect().subscribe(() => {
55
- window.location.reload();
56
- });
57
- }
58
- async refresh() {
59
- await this.ensureInitialized();
60
- const silentRequest = {
61
- scopes: ['User.Read', 'email', 'profile'],
62
- cacheLookupPolicy: CacheLookupPolicy.RefreshTokenAndNetwork,
63
- };
64
- return from(this.auth.instance.acquireTokenSilent(silentRequest));
65
- }
66
- async getUser() {
67
- await this.ensureInitialized();
68
- return this.auth.instance.getActiveAccount();
69
- }
70
- async isAuthenticated() {
71
- await this.ensureInitialized();
72
- return of(this.auth.instance.getActiveAccount() != null);
73
- }
74
- async getUserClaims() {
75
- await this.ensureInitialized();
76
- const account = this.auth.instance.getActiveAccount();
77
- const silentRequest = {
78
- scopes: ['User.Read', 'email', 'profile'],
79
- account: account,
80
- cacheLookupPolicy: CacheLookupPolicy.RefreshTokenAndNetwork
81
- };
82
- if (account) {
83
- return from(this.auth.instance.acquireTokenSilent(silentRequest)).pipe(map((response) => response), catchError((error) => {
84
- LogError(error);
85
- if (error instanceof InteractionRequiredAuthError) {
86
- return from(this.auth.instance.acquireTokenSilent(silentRequest));
87
- }
88
- this.authenticated = false;
89
- return throwError(error);
90
- }));
91
- }
92
- else {
93
- return from(this.auth.instance.acquireTokenSilent(silentRequest));
94
- }
95
- }
96
- checkExpiredTokenError(error) {
97
- return error?.trim().toLowerCase().includes('you need to be authorized to perform');
98
- }
99
- static ɵfac = function MJMSALProvider_Factory(t) { return new (t || MJMSALProvider)(i0.ɵɵinject(i1.MsalService), i0.ɵɵinject(i1.MsalBroadcastService)); };
100
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MJMSALProvider, factory: MJMSALProvider.ɵfac, providedIn: 'root' });
101
- }
102
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJMSALProvider, [{
103
- type: Injectable,
104
- args: [{
105
- providedIn: 'root'
106
- }]
107
- }], () => [{ type: i1.MsalService }, { type: i1.MsalBroadcastService }], null); })();
108
- //# sourceMappingURL=mjexplorer-msal-provider.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mjexplorer-msal-provider.service.js","sourceRoot":"","sources":["../../src/lib/mjexplorer-msal-provider.service.ts"],"names":[],"mappings":"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"}