@odx/auth 4.0.7 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/esm2020/index.mjs +1 -1
- package/esm2020/lib/auth.component.mjs +4 -4
- package/esm2020/lib/auth.config.mjs +4 -3
- package/esm2020/lib/auth.directive.mjs +4 -4
- package/esm2020/lib/auth.guard.mjs +1 -1
- package/esm2020/lib/auth.i18n.mjs +1 -1
- package/esm2020/lib/auth.module.mjs +5 -5
- package/esm2020/lib/auth.providers.mjs +8 -7
- package/esm2020/lib/auth.service.mjs +42 -37
- package/esm2020/lib/auth.typings.mjs +1 -1
- package/esm2020/lib/components/auth-actions/auth-actions.component.mjs +4 -4
- package/esm2020/lib/components/auth-loading-screen/auth-loading-screen.component.mjs +6 -6
- package/esm2020/lib/components/index.mjs +1 -1
- package/esm2020/lib/directives/auth-action.directive.mjs +6 -6
- package/esm2020/lib/directives/index.mjs +1 -1
- package/esm2020/lib/directives/sign-in.directive.mjs +4 -4
- package/esm2020/lib/directives/sign-out.directive.mjs +4 -4
- package/esm2020/lib/helpers/create-inititals.mjs +1 -1
- package/esm2020/lib/helpers/handle-auth-error.mjs +1 -1
- package/esm2020/lib/helpers/handle-oauth-event.mjs +1 -1
- package/esm2020/lib/helpers/index.mjs +1 -1
- package/esm2020/lib/helpers/resolve-email.mjs +1 -1
- package/esm2020/lib/helpers/resolve-username.mjs +1 -1
- package/esm2020/lib/models/auth-environment.mjs +1 -1
- package/esm2020/lib/models/auth-http-cache.mjs +4 -4
- package/esm2020/lib/models/auth-plugin-manager.mjs +10 -5
- package/esm2020/lib/models/authorized-handler.mjs +1 -1
- package/esm2020/lib/models/index.mjs +1 -1
- package/esm2020/lib/models/offline-auth-error-handler.mjs +1 -1
- package/esm2020/lib/plugins/core-identity.plugin.mjs +1 -1
- package/esm2020/lib/plugins/index.mjs +1 -2
- package/esm2020/lib/plugins/user-profile-link.plugin.mjs +1 -1
- package/esm2020/lib/unauth.guard.mjs +1 -1
- package/esm2020/odx-auth.mjs +1 -1
- package/esm2020/plugins/service-connect/index.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/dtos/get-service-connect-rights-response.dto.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/dtos/index.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/helpers/build-service-connect-url.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/helpers/has-roles-or-rights-handler.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/helpers/has-roles-or-rights.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/helpers/index.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/helpers/service-connect-plugin-factory.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/service-connect-rights.directive.mjs +4 -4
- package/esm2020/plugins/service-connect/lib/service-connect-rights.guard.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/service-connect-rights.plugin.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/service-connect.config.mjs +1 -1
- package/esm2020/plugins/service-connect/lib/service-connect.typings.mjs +1 -1
- package/esm2020/plugins/service-connect/odx-auth-plugins-service-connect.mjs +1 -1
- package/fesm2015/odx-auth-plugins-service-connect.mjs +3 -3
- package/fesm2015/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2015/odx-auth.mjs +93 -87
- package/fesm2015/odx-auth.mjs.map +1 -1
- package/fesm2020/odx-auth-plugins-service-connect.mjs +3 -3
- package/fesm2020/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2020/odx-auth.mjs +89 -90
- package/fesm2020/odx-auth.mjs.map +1 -1
- package/lib/auth.config.d.ts +2 -1
- package/lib/auth.service.d.ts +5 -2
- package/lib/auth.typings.d.ts +0 -4
- package/lib/plugins/index.d.ts +0 -1
- package/package.json +1 -1
- package/esm2020/lib/plugins/loading-screen-plugin.mjs +0 -16
- package/lib/plugins/loading-screen-plugin.d.ts +0 -2
package/fesm2020/odx-auth.mjs
CHANGED
|
@@ -12,11 +12,10 @@ import { LogoDirective } from '@odx/angular/components/logo';
|
|
|
12
12
|
import { TranslatePipe, provideTranslations } from '@odx/angular/internal/translate';
|
|
13
13
|
import { isString, createConfigTokens, injectElement, untilDestroyed, Position, buildUrl } from '@odx/angular/utils';
|
|
14
14
|
import { OAuthErrorEvent, OAuthService, provideOAuthClient, OAuthModuleConfig, OAuthStorage } from 'angular-oauth2-oidc';
|
|
15
|
-
import { filter, switchMap, BehaviorSubject, map, distinctUntilChanged, share, of, combineLatest, catchError, tap, take, fromEvent, startWith,
|
|
15
|
+
import { filter, switchMap, BehaviorSubject, map, distinctUntilChanged, share, of, combineLatest, catchError, tap, take, fromEvent, startWith, shareReplay, merge, EMPTY } from 'rxjs';
|
|
16
16
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
17
17
|
import { Router } from '@angular/router';
|
|
18
18
|
import { deepmerge } from 'deepmerge-ts';
|
|
19
|
-
import jwtDecode from 'jwt-decode';
|
|
20
19
|
import { __decorate } from 'tslib';
|
|
21
20
|
import * as i2 from '@odx/angular/components/list';
|
|
22
21
|
import { ListModule } from '@odx/angular/components/list';
|
|
@@ -142,11 +141,12 @@ const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = c
|
|
|
142
141
|
createInitials,
|
|
143
142
|
resolveEmail,
|
|
144
143
|
resolveUsername,
|
|
145
|
-
showRedirectOverlay: false,
|
|
146
144
|
plugins: [],
|
|
147
145
|
defaultAuthorizedHandler: null,
|
|
148
|
-
enableLoadingScreen:
|
|
146
|
+
enableLoadingScreen: true,
|
|
149
147
|
loadingScreenMessage: null,
|
|
148
|
+
refreshTokenOnInit: true,
|
|
149
|
+
requireSignIn: false,
|
|
150
150
|
});
|
|
151
151
|
|
|
152
152
|
var translations = {
|
|
@@ -200,9 +200,9 @@ class AuthHttpCache {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
AuthHttpCache.CACHE_KEY = '@odx/auth/http-cache';
|
|
203
|
-
AuthHttpCache.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
204
|
-
AuthHttpCache.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
205
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
203
|
+
AuthHttpCache.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthHttpCache, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
+
AuthHttpCache.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthHttpCache, providedIn: 'root' });
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthHttpCache, decorators: [{
|
|
206
206
|
type: Injectable,
|
|
207
207
|
args: [{ providedIn: 'root' }]
|
|
208
208
|
}], ctorParameters: function () { return []; } });
|
|
@@ -219,7 +219,12 @@ class AuthPluginManager {
|
|
|
219
219
|
if (this.plugins.length < 1) {
|
|
220
220
|
return of({});
|
|
221
221
|
}
|
|
222
|
-
return authService.isInitialized$.pipe(switchMap(() =>
|
|
222
|
+
return authService.isInitialized$.pipe(switchMap(() => {
|
|
223
|
+
if (!authService.getAccessToken()) {
|
|
224
|
+
return of({});
|
|
225
|
+
}
|
|
226
|
+
return combineLatest(this.plugins.map((plugin) => plugin(authService).pipe(catchError(this.handlePluginError.bind(this))))).pipe(map((results) => deepmerge(...results)));
|
|
227
|
+
}), tap((result) => this.result$$.next(result)), take(1));
|
|
223
228
|
}
|
|
224
229
|
getResult() {
|
|
225
230
|
return this.result$$.getValue() ?? {};
|
|
@@ -229,9 +234,9 @@ class AuthPluginManager {
|
|
|
229
234
|
return of({});
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
|
-
AuthPluginManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
233
|
-
AuthPluginManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
234
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
237
|
+
AuthPluginManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthPluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
238
|
+
AuthPluginManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthPluginManager, providedIn: 'root' });
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthPluginManager, decorators: [{
|
|
235
240
|
type: Injectable,
|
|
236
241
|
args: [{ providedIn: 'root' }]
|
|
237
242
|
}] });
|
|
@@ -253,54 +258,40 @@ class AuthService {
|
|
|
253
258
|
this.isInitialized$$ = new BehaviorSubject(false);
|
|
254
259
|
this.isRedirecting$$ = new BehaviorSubject(false);
|
|
255
260
|
this.onAccessTokenUpdate$ = fromEvent(this.windowRef.nativeWindow, 'storage').pipe(filter(({ key }) => key === 'access_token' || key === null), startWith(null), share());
|
|
261
|
+
this.silentRefreshHandler$ = this.isInitialized$$.pipe(filter(Boolean), switchMap(() => this.windowRef.isOnline$), tap((isOnline) => this.updateSilentRefresh(isOnline)));
|
|
256
262
|
this.onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);
|
|
257
263
|
this.isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());
|
|
258
|
-
this.isRedirecting$ = this.isRedirecting$$.pipe(distinctUntilChanged(),
|
|
264
|
+
this.isRedirecting$ = this.isRedirecting$$.pipe(distinctUntilChanged(), shareReplay({ refCount: true }));
|
|
259
265
|
this.isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());
|
|
260
266
|
this.isAuthenticated$ = this.isInitialized$.pipe(switchMap(() => this.authPluginManager.pluginsReady$), switchMap(() => this.onAuthStateChange$), map(() => this.isAuthenticated()), shareReplay({ refCount: true }));
|
|
261
267
|
this.identityClaims$ = this.isAuthenticated$.pipe(map(() => this.getIdentityClaims()), shareReplay({ refCount: true }));
|
|
262
268
|
this.errors$ = this.oauthService.events.pipe(filter((event) => event instanceof OAuthErrorEvent), share());
|
|
263
|
-
const isOnline$ = this.isInitialized$.pipe(filter(Boolean), switchMap(() => this.windowRef.isOnline$));
|
|
264
|
-
isOnline$.subscribe((isOnline) => {
|
|
265
|
-
if (isOnline) {
|
|
266
|
-
this.oauthService.setupAutomaticSilentRefresh();
|
|
267
|
-
}
|
|
268
|
-
else {
|
|
269
|
-
this.oauthService.stopAutomaticRefresh();
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
269
|
this.authPluginManager.runPlugins(this).subscribe();
|
|
270
|
+
this.silentRefreshHandler$.subscribe();
|
|
273
271
|
}
|
|
274
272
|
async initialize(config) {
|
|
275
|
-
this.
|
|
276
|
-
|
|
277
|
-
openUri: this.redirectToLogin.bind(this),
|
|
278
|
-
});
|
|
273
|
+
this.assertAudience(config.clientId);
|
|
274
|
+
this.oauthService.configure({ ...config, openUri: this.redirectToLogin.bind(this) });
|
|
279
275
|
try {
|
|
280
276
|
await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);
|
|
281
277
|
await this.oauthService.tryLogin();
|
|
282
|
-
|
|
283
|
-
await this.oauthService.refreshToken();
|
|
284
|
-
}
|
|
285
|
-
this.isInitialized$$.next(true);
|
|
286
|
-
if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {
|
|
287
|
-
await this.loadUserProfile();
|
|
288
|
-
}
|
|
278
|
+
await this.tryRefreshToken();
|
|
289
279
|
}
|
|
290
280
|
catch (error) {
|
|
291
281
|
if (!(error instanceof HttpErrorResponse || error instanceof OAuthErrorEvent)) {
|
|
292
282
|
throw error;
|
|
293
283
|
}
|
|
294
|
-
|
|
295
|
-
if (error.type === 'token_refresh_error' || isUnauthenticated) {
|
|
284
|
+
if (error.type === 'token_refresh_error' || (error instanceof HttpErrorResponse && error.status === 401)) {
|
|
296
285
|
this.signOut(true);
|
|
297
286
|
this.signIn(this.windowRef.location.pathname);
|
|
298
287
|
}
|
|
299
|
-
this.isInitialized$$.next(true);
|
|
300
288
|
}
|
|
301
|
-
|
|
302
|
-
|
|
289
|
+
this.isInitialized$$.next(true);
|
|
290
|
+
if (this.authConfig.requireSignIn && !this.isAuthenticated()) {
|
|
291
|
+
this.signIn(this.windowRef.location.pathname);
|
|
303
292
|
}
|
|
293
|
+
await this.tryLoadUserProfile();
|
|
294
|
+
await this.routeToRequestedUrl();
|
|
304
295
|
}
|
|
305
296
|
getIssuer() {
|
|
306
297
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -321,10 +312,6 @@ class AuthService {
|
|
|
321
312
|
getAccessToken() {
|
|
322
313
|
return this.oauthService.getAccessToken() ?? null;
|
|
323
314
|
}
|
|
324
|
-
getAccessTokenPayload() {
|
|
325
|
-
const token = this.getAccessToken();
|
|
326
|
-
return token ? jwtDecode(token) : null;
|
|
327
|
-
}
|
|
328
315
|
getRefreshToken() {
|
|
329
316
|
return this.oauthService.getRefreshToken() ?? null;
|
|
330
317
|
}
|
|
@@ -355,7 +342,7 @@ class AuthService {
|
|
|
355
342
|
return this.isAuthenticated$.pipe(map(() => this.isAuthorized(authorizedHandler)));
|
|
356
343
|
}
|
|
357
344
|
async routeToRequestedUrl() {
|
|
358
|
-
if (!this.oauthService.state)
|
|
345
|
+
if (!this.oauthService.state || !this.oauthService.hasValidAccessToken())
|
|
359
346
|
return;
|
|
360
347
|
await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));
|
|
361
348
|
}
|
|
@@ -367,10 +354,34 @@ class AuthService {
|
|
|
367
354
|
this.windowRef.location.assign(uri);
|
|
368
355
|
this.isRedirecting$$.next(true);
|
|
369
356
|
}
|
|
357
|
+
async tryRefreshToken() {
|
|
358
|
+
if (!this.authConfig.refreshTokenOnInit || !this.getRefreshToken())
|
|
359
|
+
return;
|
|
360
|
+
await this.oauthService.refreshToken();
|
|
361
|
+
}
|
|
362
|
+
async tryLoadUserProfile() {
|
|
363
|
+
if (!this.authConfig.loadUserProfile || !this.oauthService.hasValidAccessToken())
|
|
364
|
+
return;
|
|
365
|
+
await this.loadUserProfile().catch(() => null);
|
|
366
|
+
}
|
|
367
|
+
assertAudience(clientId) {
|
|
368
|
+
const tokenClientId = this.getIdentityClaims()?.aud;
|
|
369
|
+
if (!clientId || !tokenClientId || clientId === tokenClientId)
|
|
370
|
+
return;
|
|
371
|
+
this.signOut(true);
|
|
372
|
+
}
|
|
373
|
+
updateSilentRefresh(enabled) {
|
|
374
|
+
if (enabled) {
|
|
375
|
+
this.oauthService.setupAutomaticSilentRefresh();
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
this.oauthService.stopAutomaticRefresh();
|
|
379
|
+
}
|
|
380
|
+
}
|
|
370
381
|
}
|
|
371
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
372
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
373
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
382
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
383
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
384
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthService, decorators: [{
|
|
374
385
|
type: Injectable,
|
|
375
386
|
args: [{ providedIn: 'root' }]
|
|
376
387
|
}], ctorParameters: function () { return []; } });
|
|
@@ -381,12 +392,12 @@ let AuthActionsComponent = class AuthActionsComponent {
|
|
|
381
392
|
this.claims = null;
|
|
382
393
|
}
|
|
383
394
|
};
|
|
384
|
-
AuthActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
385
|
-
AuthActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
395
|
+
AuthActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
396
|
+
AuthActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n </a>\n</odx-list>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i2.ListComponent, selector: "odx-list", inputs: ["multiple"] }, { kind: "component", type: i2.ListItemComponent, selector: "[odxListItem]", inputs: ["danger", "selected"] }, { kind: "component", type: i3.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
386
397
|
AuthActionsComponent = __decorate([
|
|
387
398
|
CSSComponent('auth-actions')
|
|
388
399
|
], AuthActionsComponent);
|
|
389
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthActionsComponent, decorators: [{
|
|
390
401
|
type: Component,
|
|
391
402
|
args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n </a>\n</odx-list>\n" }]
|
|
392
403
|
}], propDecorators: { claims: [{
|
|
@@ -396,7 +407,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
396
407
|
class AuthLoadingScreenComponent {
|
|
397
408
|
constructor() {
|
|
398
409
|
this.authConfig = injectAuthConfig();
|
|
399
|
-
this.icon$ = inject(AuthService).isRedirecting$.pipe(
|
|
410
|
+
this.icon$ = inject(AuthService).isRedirecting$.pipe(distinctUntilChanged(), map((isRedirecting) => (isRedirecting ? 'link-external' : 'user')));
|
|
400
411
|
}
|
|
401
412
|
static initialize(authService, dynamicViewService) {
|
|
402
413
|
authService.isLoading$.subscribe((isLoading) => {
|
|
@@ -411,9 +422,9 @@ class AuthLoadingScreenComponent {
|
|
|
411
422
|
}
|
|
412
423
|
}
|
|
413
424
|
AuthLoadingScreenComponent.instance = null;
|
|
414
|
-
AuthLoadingScreenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
415
|
-
AuthLoadingScreenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
425
|
+
AuthLoadingScreenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthLoadingScreenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
426
|
+
AuthLoadingScreenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AuthLoadingScreenComponent, isStandalone: true, selector: "div.odx-auth-loading-screen", host: { properties: { "@hostAnimation": "true" } }, ngImport: i0, template: "<div class=\"odx-auth-loading-screen__content\" odxLayout=\"grid 12 horizontal-center vertical-center gap-small\">\n <odx-logo size=\"large\"></odx-logo>\n <odx-circular-progress class=\"odx-auth-loading-screen__spinner\" value=\"-1\" size=\"medium\" stroke=\"3\">\n <odx-icon [name]=\"icon$ | async\" iconSet=\"core\"></odx-icon>\n </odx-circular-progress>\n <p class=\"odx-auth-loading-screen__message\" *ngIf=\"authConfig.loadingScreenMessage as content\">\n <ng-template [odxDynamicView]=\"content\"></ng-template>\n </p>\n</div>\n", styles: ["@keyframes odx-auth-loading-screen-animation{0%{opacity:0;transform:translate(-50%,-50%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%)}}.odx-auth-loading-screen{--odx-c-highlight: var(--odx-c-primary);background-color:var(--odx-c-background-content);position:fixed;z-index:var(--odx-v-layer-5);inset:0}.odx-auth-loading-screen__content{top:50%;left:50%;transform:translate(-50%,-50%);position:absolute;animation:odx-auth-loading-screen-animation .75s ease}.odx-auth-loading-screen__message{text-align:center}.odx-auth-loading-screen__spinner{position:relative}.odx-auth-loading-screen__spinner .odx-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "component", type: CircularProgressComponent, selector: "odx-circular-progress", inputs: ["stroke", "size", "value"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }], animations: [trigger('hostAnimation', [transition(':leave', useAnimation(fadeOut()))])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
427
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthLoadingScreenComponent, decorators: [{
|
|
417
428
|
type: Component,
|
|
418
429
|
args: [{ standalone: true, selector: 'div.odx-auth-loading-screen', imports: [CommonModule, ButtonComponent, IconComponent, LogoDirective, CircularProgressComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
419
430
|
'[@hostAnimation]': 'true',
|
|
@@ -428,14 +439,14 @@ class AuthActionDirective {
|
|
|
428
439
|
}
|
|
429
440
|
ngAfterViewInit() {
|
|
430
441
|
this.loadingSpinnerDirective.autoColor = true;
|
|
431
|
-
this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
432
|
-
this.loadingSpinnerDirective.isLoading =
|
|
442
|
+
this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe((isRedirecting) => {
|
|
443
|
+
this.loadingSpinnerDirective.isLoading = isRedirecting;
|
|
433
444
|
});
|
|
434
445
|
}
|
|
435
446
|
}
|
|
436
|
-
AuthActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
437
|
-
AuthActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
438
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
447
|
+
AuthActionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
448
|
+
AuthActionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AuthActionDirective, ngImport: i0 });
|
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthActionDirective, decorators: [{
|
|
439
450
|
type: Directive
|
|
440
451
|
}] });
|
|
441
452
|
|
|
@@ -450,9 +461,9 @@ class SignInDirective extends AuthActionDirective {
|
|
|
450
461
|
this.afterSignIn.next();
|
|
451
462
|
}
|
|
452
463
|
}
|
|
453
|
-
SignInDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
454
|
-
SignInDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
464
|
+
SignInDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SignInDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
465
|
+
SignInDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: SignInDirective, isStandalone: true, selector: "[odxButton][odxAuthSignIn]", outputs: { afterSignIn: "odxAuthSignIn" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1$1.LoadingSpinnerDirective }], ngImport: i0 });
|
|
466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SignInDirective, decorators: [{
|
|
456
467
|
type: Directive,
|
|
457
468
|
args: [{
|
|
458
469
|
standalone: true,
|
|
@@ -478,9 +489,9 @@ class SignOutDirective extends AuthActionDirective {
|
|
|
478
489
|
this.afterSignOut.next();
|
|
479
490
|
}
|
|
480
491
|
}
|
|
481
|
-
SignOutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
482
|
-
SignOutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
483
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
492
|
+
SignOutDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SignOutDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
493
|
+
SignOutDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: SignOutDirective, isStandalone: true, selector: "[odxButton][odxAuthSignOut]", outputs: { afterSignOut: "odxAuthSignOut" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1$1.LoadingSpinnerDirective }], ngImport: i0 });
|
|
494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SignOutDirective, decorators: [{
|
|
484
495
|
type: Directive,
|
|
485
496
|
args: [{
|
|
486
497
|
standalone: true,
|
|
@@ -506,9 +517,9 @@ class AuthComponent {
|
|
|
506
517
|
};
|
|
507
518
|
}
|
|
508
519
|
}
|
|
509
|
-
AuthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
510
|
-
AuthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
511
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
520
|
+
AuthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
521
|
+
AuthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AuthComponent, isStandalone: true, selector: "odx-auth", providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"], dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: AreaHeaderModule }, { kind: "component", type: i3$1.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i3$1.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i4.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i5.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i3.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "directive", type: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { kind: "directive", type: SignOutDirective, selector: "[odxButton][odxAuthSignOut]", outputs: ["odxAuthSignOut"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AuthActionsComponent, selector: "odx-auth-actions", inputs: ["claims"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthComponent, decorators: [{
|
|
512
523
|
type: Component,
|
|
513
524
|
args: [{ standalone: true, selector: 'odx-auth', imports: [
|
|
514
525
|
CoreModule,
|
|
@@ -542,9 +553,9 @@ class AuthDirective {
|
|
|
542
553
|
});
|
|
543
554
|
}
|
|
544
555
|
}
|
|
545
|
-
AuthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
546
|
-
AuthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.
|
|
547
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
556
|
+
AuthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
557
|
+
AuthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AuthDirective, isStandalone: true, selector: "ng-template[odxAuth]", inputs: { authorizationHandler: ["odxAuth", "authorizationHandler"], elseTemplate: ["odxAuthElse", "elseTemplate"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 });
|
|
558
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthDirective, decorators: [{
|
|
548
559
|
type: Directive,
|
|
549
560
|
args: [{
|
|
550
561
|
standalone: true,
|
|
@@ -586,10 +597,10 @@ function authGuard(authorizedHandler, redirectTo) {
|
|
|
586
597
|
const modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];
|
|
587
598
|
class AuthModule {
|
|
588
599
|
}
|
|
589
|
-
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
590
|
-
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
591
|
-
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
592
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
600
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
601
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: AuthModule, imports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective], exports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective] });
|
|
602
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthModule, imports: [AuthComponent] });
|
|
603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthModule, decorators: [{
|
|
593
604
|
type: NgModule,
|
|
594
605
|
args: [{
|
|
595
606
|
imports: [...modules],
|
|
@@ -608,17 +619,6 @@ const coreIdentityPlugin = () => {
|
|
|
608
619
|
};
|
|
609
620
|
};
|
|
610
621
|
|
|
611
|
-
const loadingScreenPlugin = () => {
|
|
612
|
-
const { enableLoadingScreen, showRedirectOverlay } = injectAuthConfig();
|
|
613
|
-
const dynamicViewService = inject(DynamicViewService);
|
|
614
|
-
return (authService) => {
|
|
615
|
-
if (enableLoadingScreen || showRedirectOverlay) {
|
|
616
|
-
AuthLoadingScreenComponent.initialize(authService, dynamicViewService);
|
|
617
|
-
}
|
|
618
|
-
return of({});
|
|
619
|
-
};
|
|
620
|
-
};
|
|
621
|
-
|
|
622
622
|
const userProfileUrlPlugin = () => {
|
|
623
623
|
const { environment, userProfileUrl } = injectAuthConfig();
|
|
624
624
|
return () => {
|
|
@@ -642,13 +642,12 @@ function initializeAuthErrorHandlers() {
|
|
|
642
642
|
authService.errors$.pipe(tap((error) => handler(error))).subscribe();
|
|
643
643
|
}
|
|
644
644
|
function initalizeAuthConfig() {
|
|
645
|
-
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();
|
|
645
|
+
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl, enableLoadingScreen } = injectAuthConfig();
|
|
646
646
|
const authService = inject(AuthService);
|
|
647
647
|
const origin = inject(WindowRef).getOrigin();
|
|
648
648
|
const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
authService.signOut(true);
|
|
649
|
+
if (enableLoadingScreen) {
|
|
650
|
+
AuthLoadingScreenComponent.initialize(authService, inject(DynamicViewService));
|
|
652
651
|
}
|
|
653
652
|
return () => authService.initialize({
|
|
654
653
|
clientId,
|
|
@@ -691,7 +690,7 @@ function provideAuth(config) {
|
|
|
691
690
|
},
|
|
692
691
|
{
|
|
693
692
|
provide: ODX_AUTH_CORE_PLUGINS,
|
|
694
|
-
useValue: [coreIdentityPlugin,
|
|
693
|
+
useValue: [coreIdentityPlugin, userProfileUrlPlugin],
|
|
695
694
|
},
|
|
696
695
|
]);
|
|
697
696
|
}
|
|
@@ -718,5 +717,5 @@ function unauthGuard(authorizedHandler, redirectTo) {
|
|
|
718
717
|
* Generated bundle index. Do not edit.
|
|
719
718
|
*/
|
|
720
719
|
|
|
721
|
-
export { AuthActionDirective, AuthActionsComponent, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthLoadingScreenComponent, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, DEFAULT_USER_PROFILE_URLS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_ERROR_HANDLERS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, handleAuthError, handleOAuthEvent, initalizeAuthConfig, initializeAuthErrorHandlers, injectAuthConfig,
|
|
720
|
+
export { AuthActionDirective, AuthActionsComponent, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthLoadingScreenComponent, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, DEFAULT_USER_PROFILE_URLS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_ERROR_HANDLERS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, handleAuthError, handleOAuthEvent, initalizeAuthConfig, initializeAuthErrorHandlers, injectAuthConfig, offlineAuthErrorHandler, provideAuth, provideAuthConfig, resolveEmail, resolveUsername, unauthGuard, userProfileUrlPlugin };
|
|
722
721
|
//# sourceMappingURL=odx-auth.mjs.map
|