@onecx/angular-integration-interface 8.0.0-rc.10 → 8.0.0-rc.12

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.
@@ -4,7 +4,7 @@ import * as i0 from '@angular/core';
4
4
  import { inject, Injectable, InjectionToken } from '@angular/core';
5
5
  import { BehaviorSubject, firstValueFrom, map, combineLatest, of, first } from 'rxjs';
6
6
  import { createLoggerFactory, getNormalizedBrowserLocales } from '@onecx/accelerator';
7
- import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentLocationTopic, CurrentPageTopic, CurrentWorkspaceTopic, IsAuthenticatedTopic, ConfigurationTopic, PermissionsTopic, UserProfileTopic, ParametersTopic, ShellCapability, MessageTopic, CurrentThemeTopic, RemoteComponentsTopic, ImageRepositoryService as ImageRepositoryService$1, IconService as IconService$1, DynamicTranslationService as DynamicTranslationService$1 } from '@onecx/integration-interface';
7
+ import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentLocationTopic, CurrentPageTopic, CurrentWorkspaceTopic, IsAuthenticatedTopic, ConfigurationTopic, resolveConfigPayload, PermissionsTopic, UserProfileTopic, determineBrowserLanguage, resolveProfileLanguage, resolveLegacyLanguage, setShellCapabilities, hasShellCapability, ParametersTopic, ShellCapability, findParameterValue, MessageTopic, buildPortalMessagePayload, CurrentThemeTopic, RemoteComponentsTopic, constructRouteUrl, doesUrlExistForWorkspace, ImageRepositoryService as ImageRepositoryService$1, IconService as IconService$1, DynamicTranslationService as DynamicTranslationService$1, NotificationService as NotificationService$1 } from '@onecx/integration-interface';
8
8
  export { ShellCapability as Capability } from '@onecx/integration-interface';
9
9
  import Semaphore from 'ts-semaphore';
10
10
  import { TranslateService } from '@ngx-translate/core';
@@ -139,6 +139,10 @@ var CONFIG_KEY;
139
139
  CONFIG_KEY["KEYCLOAK_ENABLE_SILENT_SSO"] = "KEYCLOAK_ENABLE_SILENT_SSO";
140
140
  CONFIG_KEY["KEYCLOAK_URL"] = "KEYCLOAK_URL";
141
141
  CONFIG_KEY["KEYCLOAK_CLIENT_ID"] = "KEYCLOAK_CLIENT_ID";
142
+ CONFIG_KEY["KEYCLOAK_TIME_SKEW"] = "KEYCLOAK_TIME_SKEW";
143
+ CONFIG_KEY["KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY"] = "KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY";
144
+ CONFIG_KEY["KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED"] = "KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED";
145
+ CONFIG_KEY["KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED"] = "KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED";
142
146
  CONFIG_KEY["ONECX_PORTAL_FAVORITES_DISABLED"] = "ONECX_PORTAL_FAVORITES_DISABLED";
143
147
  CONFIG_KEY["ONECX_PORTAL_FEEDBACK_DISABLED"] = "ONECX_PORTAL_FEEDBACK_DISABLED";
144
148
  CONFIG_KEY["ONECX_PORTAL_SEARCH_DISABLED"] = "ONECX_PORTAL_SEARCH_DISABLED";
@@ -156,6 +160,7 @@ var CONFIG_KEY;
156
160
  CONFIG_KEY["AUTH_SERVICE_CUSTOM_MODULE_NAME"] = "AUTH_SERVICE_CUSTOM_MODULE_NAME";
157
161
  CONFIG_KEY["POLYFILL_SCOPE_MODE"] = "POLYFILL_SCOPE_MODE";
158
162
  CONFIG_KEY["KEYBOARD_FOCUSABLE_SELECTOR"] = "KEYBOARD_FOCUSABLE_SELECTOR";
163
+ CONFIG_KEY["CUSTOM_AUTH_SHARE_SCOPE"] = "CUSTOM_AUTH_SHARE_SCOPE";
159
164
  })(CONFIG_KEY || (CONFIG_KEY = {}));
160
165
  var POLYFILL_SCOPE_MODE;
161
166
  (function (POLYFILL_SCOPE_MODE) {
@@ -182,24 +187,21 @@ class ConfigurationService {
182
187
  }
183
188
  init() {
184
189
  return new Promise((resolve, reject) => {
185
- const skipRemoteConfigLoad = this.defaultConfig && this.defaultConfig['skipRemoteConfigLoad'];
186
- let loadConfigPromise;
187
- const inlinedConfig = window['APP_CONFIG'];
188
- if (inlinedConfig) {
189
- this.logger.info('ENV resolved from injected config');
190
- loadConfigPromise = Promise.resolve(inlinedConfig);
191
- }
192
- else {
193
- if (skipRemoteConfigLoad) {
194
- this.logger.info('📢 TKA001: Remote config load is disabled. To enable it, remove the "skipRemoteConfigLoad" key in your environment.json');
195
- loadConfigPromise = Promise.resolve(this.defaultConfig || {});
190
+ const skipRemoteConfigLoad = this.defaultConfig?.['skipRemoteConfigLoad'];
191
+ const remoteConfigURL = this.defaultConfig?.['remoteConfigURL'] ?? undefined;
192
+ resolveConfigPayload({
193
+ defaultConfig: this.defaultConfig ?? {},
194
+ skipRemoteConfigLoad: !!skipRemoteConfigLoad,
195
+ remoteConfigURL,
196
+ loadRemoteConfig: (url) => firstValueFrom(this.http.get(url)),
197
+ })
198
+ .then(async ({ config, source }) => {
199
+ if (source === 'inlined') {
200
+ this.logger.info('ENV resolved from injected config');
196
201
  }
197
- else {
198
- loadConfigPromise = firstValueFrom(this.http.get((this.defaultConfig && this.defaultConfig['remoteConfigURL']) || 'assets/env.json'));
202
+ if (source === 'default' && skipRemoteConfigLoad) {
203
+ this.logger.info('📢 TKA001: Remote config load is disabled. To enable it, remove the "skipRemoteConfigLoad" key in your environment.json');
199
204
  }
200
- }
201
- loadConfigPromise
202
- .then(async (config) => {
203
205
  await this.config$.publish({ ...this.defaultConfig, ...(config ?? {}) }).then(() => {
204
206
  resolve(true);
205
207
  });
@@ -251,21 +253,10 @@ class UserService {
251
253
  }
252
254
  constructor() {
253
255
  this.profile$ = new UserProfileTopic();
254
- this.lang$ = new BehaviorSubject(this.determineLanguage() ?? DEFAULT_LANG);
256
+ this.lang$ = new BehaviorSubject(determineBrowserLanguage() ?? DEFAULT_LANG);
255
257
  this.profile$
256
258
  .pipe(map((profile) => {
257
- let locales = profile.settings?.locales;
258
- if (!locales) {
259
- return this.useOldLangSetting(profile);
260
- }
261
- if (locales.length === 0) {
262
- locales = getNormalizedBrowserLocales();
263
- }
264
- // the lang$ should contain the first language, because locales is an ordered list
265
- // length of 2 is checked because we need the general language
266
- // never choose 'en-US', but choose 'en'
267
- const firstLang = locales.find((l) => l.length === 2) ?? DEFAULT_LANG;
268
- return firstLang;
259
+ return resolveProfileLanguage(profile, DEFAULT_LANG, getNormalizedBrowserLocales);
269
260
  }))
270
261
  .subscribe(this.lang$);
271
262
  }
@@ -274,7 +265,7 @@ class UserService {
274
265
  this._permissionsTopic$?.destroy();
275
266
  }
276
267
  useOldLangSetting(profile) {
277
- return profile.accountSettings?.localeAndTimeSettings?.locale ?? this.determineLanguage() ?? DEFAULT_LANG;
268
+ return resolveLegacyLanguage(profile, DEFAULT_LANG, determineBrowserLanguage);
278
269
  }
279
270
  getPermissions() {
280
271
  return this.permissionsTopic$.asObservable();
@@ -294,23 +285,6 @@ class UserService {
294
285
  return !!result;
295
286
  })));
296
287
  }
297
- determineLanguage() {
298
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
299
- return undefined;
300
- }
301
- let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;
302
- browserLang = browserLang || window.navigator.language;
303
- if (typeof browserLang === 'undefined') {
304
- return undefined;
305
- }
306
- if (browserLang.indexOf('-') !== -1) {
307
- browserLang = browserLang.split('-')[0];
308
- }
309
- if (browserLang.indexOf('_') !== -1) {
310
- browserLang = browserLang.split('_')[0];
311
- }
312
- return browserLang;
313
- }
314
288
  get isInitialized() {
315
289
  return Promise.all([
316
290
  this.permissionsTopic$.isInitialized,
@@ -328,10 +302,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
328
302
 
329
303
  class ShellCapabilityService {
330
304
  static setCapabilities(capabilities) {
331
- window['onecx-shell-capabilities'] = capabilities;
305
+ setShellCapabilities(capabilities);
332
306
  }
333
307
  hasCapability(capability) {
334
- return window['onecx-shell-capabilities']?.includes(capability) ?? false;
308
+ return hasShellCapability(capability);
335
309
  }
336
310
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ShellCapabilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
337
311
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ShellCapabilityService, providedIn: 'root' }); }
@@ -358,7 +332,7 @@ class ParametersService {
358
332
  }
359
333
  async get(key, defaultValue, productName = undefined, appId = undefined) {
360
334
  if (!this.shellCapabilityService.hasCapability(ShellCapability.PARAMETERS_TOPIC)) {
361
- return Promise.resolve(defaultValue);
335
+ return defaultValue;
362
336
  }
363
337
  if (!productName) {
364
338
  productName = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.productName)));
@@ -366,14 +340,7 @@ class ParametersService {
366
340
  if (!appId) {
367
341
  appId = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.appId)));
368
342
  }
369
- return firstValueFrom(this.parameters$.pipe(map((payload) => payload.parameters.find((p) => p.productName === productName && p.appId === appId)?.parameters[key]))).then((value) => {
370
- if (value === undefined) {
371
- return Promise.resolve(defaultValue);
372
- }
373
- else {
374
- return Promise.resolve(value);
375
- }
376
- });
343
+ return firstValueFrom(this.parameters$.pipe(map((payload) => findParameterValue(payload, key, productName, appId)))).then((value) => value ?? defaultValue);
377
344
  }
378
345
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ParametersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
379
346
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ParametersService, providedIn: 'root' }); }
@@ -413,12 +380,7 @@ class PortalMessageService {
413
380
  ])
414
381
  .pipe(first())
415
382
  .subscribe(([summaryTranslation, detailTranslation]) => {
416
- this.message$.publish({
417
- ...msg,
418
- severity: severity,
419
- summary: summaryTranslation,
420
- detail: detailTranslation,
421
- });
383
+ this.message$.publish(buildPortalMessagePayload(severity, msg, summaryTranslation, detailTranslation));
422
384
  });
423
385
  }
424
386
  ngOnDestroy() {
@@ -474,132 +436,15 @@ class WorkspaceService {
474
436
  constructor() {
475
437
  this.appStateService = inject(AppStateService);
476
438
  this.logger = createLogger('WorkspaceService');
477
- this.aliasStart = '[[';
478
- this.aliasEnd = ']]';
479
- this.paramStart = '{';
480
- this.paramEnd = '}';
481
439
  }
482
440
  getUrl(productName, appId, endpointName, endpointParameters) {
483
441
  return this.appStateService.currentWorkspace$.pipe(map((workspace) => {
484
- const finalUrl = this.constructRouteUrl(workspace, appId, productName, endpointName, endpointParameters);
442
+ const finalUrl = constructRouteUrl(workspace, appId, productName, endpointName, endpointParameters, this.logger.warn);
485
443
  return finalUrl;
486
444
  }));
487
445
  }
488
446
  doesUrlExistFor(productName, appId, endpointName) {
489
- return this.appStateService.currentWorkspace$.pipe(map((workspace) => {
490
- const checkEndpoint = endpointName !== undefined && endpointName.length > 0;
491
- if (workspace.routes == undefined) {
492
- return false;
493
- }
494
- const route = this.filterRouteFromList(workspace.routes, appId, productName);
495
- if (checkEndpoint) {
496
- if (!route || route.endpoints === undefined || route.endpoints.length == 0) {
497
- return false;
498
- }
499
- const endpoint = route.endpoints.find((ep) => ep.name === endpointName);
500
- return !!(endpoint && endpoint.path && endpoint.path.length > 0);
501
- }
502
- else {
503
- return !!(route && route.baseUrl && route.baseUrl.length > 0);
504
- }
505
- }));
506
- }
507
- constructBaseUrlFromWorkspace(workspace) {
508
- if (workspace.baseUrl === undefined) {
509
- this.logger.warn('There was no baseUrl for received workspace.');
510
- return '';
511
- }
512
- return workspace.baseUrl;
513
- }
514
- constructRouteUrl(workspace, appId, productName, endpointName, endpointParameters) {
515
- const route = this.filterRouteFromList(workspace.routes, appId, productName);
516
- let url = this.constructBaseUrlFromWorkspace(workspace);
517
- if (!route) {
518
- this.logger.warn(`No route.baseUrl could be found for given appId "${appId}" and productName "${productName}"`);
519
- return url;
520
- }
521
- if (route.baseUrl !== undefined && route.baseUrl.length > 0) {
522
- url = route.baseUrl;
523
- }
524
- if (endpointName == undefined) {
525
- return url;
526
- }
527
- url = Location.joinWithSlash(url, this.constructEndpointUrl(route, endpointName, endpointParameters));
528
- return url;
529
- }
530
- constructEndpointUrl(route, endpointName, endpointParameters = {}) {
531
- if (!route.endpoints) {
532
- return '';
533
- }
534
- const finalEndpoint = this.dissolveEndpoint(endpointName, route.endpoints);
535
- if (!finalEndpoint || finalEndpoint.path === undefined) {
536
- this.logger.warn('No endpoint or endpoint.path could be found');
537
- return '';
538
- }
539
- const paramsFilled = this.fillParamsForPath(finalEndpoint.path, endpointParameters);
540
- if (paramsFilled === undefined) {
541
- this.logger.warn('Params could not be filled correctly');
542
- return '';
543
- }
544
- return paramsFilled;
545
- }
546
- filterRouteFromList(routes, appId, productName) {
547
- if (!routes) {
548
- return undefined;
549
- }
550
- const productRoutes = routes.filter((route) => route.appId === appId && route.productName === productName);
551
- if (productRoutes.length === 0) {
552
- return undefined;
553
- }
554
- if (productRoutes.length > 1) {
555
- this.logger.warn('There were more than one route. First route has been used.');
556
- }
557
- return productRoutes[0];
558
- }
559
- dissolveEndpoint(endpointName, endpoints) {
560
- let endpoint = endpoints.find((ep) => ep.name === endpointName);
561
- if (!endpoint) {
562
- return undefined;
563
- }
564
- while (endpoint.path?.includes(this.aliasStart)) {
565
- const path = endpoint.path;
566
- const startIdx = path.indexOf(this.aliasStart) + this.aliasStart.length;
567
- const endIdx = path.lastIndexOf(this.aliasEnd);
568
- if (endIdx <= startIdx) {
569
- return undefined;
570
- }
571
- const aliasName = path.substring(startIdx, endIdx);
572
- endpoint = endpoints.find((ep) => ep.name === aliasName);
573
- if (!endpoint) {
574
- return undefined;
575
- }
576
- }
577
- return endpoint;
578
- }
579
- fillParamsForPath(path, endpointParameters) {
580
- while (path.includes(this.paramStart)) {
581
- const paramName = path.substring(path.indexOf(this.paramStart) + this.paramStart.length, path.indexOf(this.paramEnd));
582
- const paramValue = this.getStringFromUnknown(endpointParameters[paramName]);
583
- if (paramValue != undefined && paramValue.length > 0) {
584
- path = path.replace(this.paramStart.concat(paramName).concat(this.paramEnd), paramValue);
585
- }
586
- else {
587
- this.logger.warn(`Searched param "${paramName}" was not found in given param list `);
588
- return '';
589
- }
590
- }
591
- return path;
592
- }
593
- getStringFromUnknown(value) {
594
- if (value === null || value === undefined) {
595
- return '';
596
- }
597
- else if (typeof value === 'string') {
598
- return value;
599
- }
600
- else {
601
- return String(value);
602
- }
447
+ return this.appStateService.currentWorkspace$.pipe(map((workspace) => doesUrlExistForWorkspace(workspace, productName, appId, endpointName, this.logger.warn)));
603
448
  }
604
449
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: WorkspaceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
605
450
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: WorkspaceService, providedIn: 'root' }); }
@@ -680,11 +525,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
680
525
  args: [{ providedIn: 'root' }]
681
526
  }] });
682
527
 
528
+ class NotificationService {
529
+ constructor() {
530
+ this.notificationService = new NotificationService$1();
531
+ }
532
+ get notificationTopic() {
533
+ return this.notificationService.notificationTopic;
534
+ }
535
+ ngOnDestroy() {
536
+ this.notificationService.destroy();
537
+ }
538
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
539
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
540
+ }
541
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: NotificationService, decorators: [{
542
+ type: Injectable,
543
+ args: [{ providedIn: 'root' }]
544
+ }] });
545
+
683
546
  // services
684
547
 
685
548
  /**
686
549
  * Generated bundle index. Do not edit.
687
550
  */
688
551
 
689
- export { APPLICATION_NAME, APP_CONFIG, AppConfigService, AppStateService, CONFIG_KEY, ConfigurationService, DynamicTranslationService, IconService, ImageRepositoryService, POLYFILL_SCOPE_MODE, ParametersService, PortalMessageService, RemoteComponentsService, SANITY_CHECK, ShellCapabilityService, ThemeService, UserService, WorkspaceService };
552
+ export { APPLICATION_NAME, APP_CONFIG, AppConfigService, AppStateService, CONFIG_KEY, ConfigurationService, DynamicTranslationService, IconService, ImageRepositoryService, NotificationService, POLYFILL_SCOPE_MODE, ParametersService, PortalMessageService, RemoteComponentsService, SANITY_CHECK, ShellCapabilityService, ThemeService, UserService, WorkspaceService };
690
553
  //# sourceMappingURL=onecx-angular-integration-interface.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"onecx-angular-integration-interface.mjs","sources":["../../../../libs/angular-integration-interface/src/lib/utils/logger.utils.ts","../../../../libs/angular-integration-interface/src/lib/services/app-config-service.ts","../../../../libs/angular-integration-interface/src/lib/services/app-state.service.ts","../../../../libs/angular-integration-interface/src/lib/api/injection-tokens.ts","../../../../libs/angular-integration-interface/src/lib/model/config-key.model.ts","../../../../libs/angular-integration-interface/src/lib/services/configuration.service.ts","../../../../libs/angular-integration-interface/src/lib/api/constants.ts","../../../../libs/angular-integration-interface/src/lib/services/user.service.ts","../../../../libs/angular-integration-interface/src/lib/services/shell-capability.service.ts","../../../../libs/angular-integration-interface/src/lib/services/parameters.service.ts","../../../../libs/angular-integration-interface/src/lib/services/portal-message.service.ts","../../../../libs/angular-integration-interface/src/lib/services/theme.service.ts","../../../../libs/angular-integration-interface/src/lib/services/remote-components.service.ts","../../../../libs/angular-integration-interface/src/lib/services/workspace.service.ts","../../../../libs/angular-integration-interface/src/lib/services/image-repository.service.ts","../../../../libs/angular-integration-interface/src/lib/services/icon.service.ts","../../../../libs/angular-integration-interface/src/lib/services/dynamic-translation.service.ts","../../../../libs/angular-integration-interface/src/index.ts","../../../../libs/angular-integration-interface/src/onecx-angular-integration-interface.ts"],"sourcesContent":["// This file is not planned to be in the index.ts so it is private to this lib\nimport { createLoggerFactory } from '@onecx/accelerator'\n\nexport const createLogger = createLoggerFactory('@onecx/angular-integration-interface')\n","import { Location } from '@angular/common'\nimport { HttpClient } from '@angular/common/http'\nimport { Injectable, inject } from '@angular/core'\nimport { Config } from '@onecx/integration-interface'\nimport { BehaviorSubject, firstValueFrom } from 'rxjs'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable()\nexport class AppConfigService {\n private http = inject(HttpClient)\n private readonly logger = createLogger('AppConfigService')\n\n config$ = new BehaviorSubject<{ [key: string]: string }>({})\n\n public init(baseUrl: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const loadConfigPromise: Promise<Config> = firstValueFrom(\n this.http.get<Config>(Location.joinWithSlash(baseUrl, 'assets/env.json'))\n )\n\n loadConfigPromise\n .then(async (config) => {\n if (config) {\n this.config$.next(config)\n resolve()\n }\n })\n .catch((e) => {\n this.logger.error('Failed to load env configuration', e)\n reject(e)\n })\n })\n }\n\n public getProperty(key: string): string | undefined {\n return this.config$.getValue()?.[key]\n }\n\n public setProperty(key: string, val: string) {\n this.config$.next({ ...this.config$.value, [key]: val })\n }\n\n public getConfig(): { [key: string]: string } {\n return this.config$.getValue()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport {\n GlobalErrorTopic,\n GlobalLoadingTopic,\n CurrentMfeTopic,\n CurrentPageTopic,\n CurrentWorkspaceTopic,\n IsAuthenticatedTopic,\n CurrentLocationTopic,\n} from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class AppStateService implements OnDestroy {\n private _globalError$: GlobalErrorTopic | undefined\n get globalError$(): GlobalErrorTopic {\n this._globalError$ ??= new GlobalErrorTopic()\n return this._globalError$\n }\n set globalError$(source: GlobalErrorTopic) {\n this._globalError$ = source\n }\n private _globalLoading$: GlobalLoadingTopic | undefined\n get globalLoading$(): GlobalLoadingTopic {\n this._globalLoading$ ??= new GlobalLoadingTopic()\n return this._globalLoading$\n }\n set globalLoading$(source: GlobalLoadingTopic) {\n this._globalLoading$ = source\n }\n private _currentMfe$: CurrentMfeTopic | undefined\n get currentMfe$(): CurrentMfeTopic {\n this._currentMfe$ ??= new CurrentMfeTopic()\n return this._currentMfe$\n }\n set currentMfe$(source: CurrentMfeTopic) {\n this._currentMfe$ = source\n }\n private _currentLocation$: CurrentLocationTopic | undefined\n get currentLocation$(): CurrentLocationTopic {\n this._currentLocation$ ??= new CurrentLocationTopic()\n return this._currentLocation$\n }\n set currentLocation$(source: CurrentLocationTopic) {\n this._currentLocation$ = source\n }\n\n private _currentPage$: CurrentPageTopic | undefined\n /**\n * This topic will only fire when pageInfo.path matches document.location.pathname,\n * if not it will fire undefined.\n */\n get currentPage$(): CurrentPageTopic {\n this._currentPage$ ??= new CurrentPageTopic()\n return this._currentPage$\n }\n set currentPage$(source: CurrentPageTopic) {\n this._currentPage$ = source\n }\n _currentWorkspace$: CurrentWorkspaceTopic | undefined\n get currentWorkspace$(): CurrentWorkspaceTopic {\n this._currentWorkspace$ ??= new CurrentWorkspaceTopic()\n return this._currentWorkspace$\n }\n set currentWorkspace$(source: CurrentWorkspaceTopic) {\n this._currentWorkspace$ = source\n }\n\n /**\n * This Topic is initialized as soon as the authentication is done\n */\n private _isAuthenticated$: IsAuthenticatedTopic | undefined\n get isAuthenticated$(): IsAuthenticatedTopic {\n this._isAuthenticated$ ??= new IsAuthenticatedTopic()\n return this._isAuthenticated$\n }\n set isAuthenticated$(source: IsAuthenticatedTopic) {\n this._isAuthenticated$ = source\n }\n\n ngOnDestroy(): void {\n this._globalError$?.destroy()\n this._globalLoading$?.destroy()\n this._currentMfe$?.destroy()\n this._currentPage$?.destroy()\n this._currentLocation$?.destroy()\n this._currentWorkspace$?.destroy()\n this._isAuthenticated$?.destroy()\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport interface LibConfig {\n appId: string\n portalId: string\n /**\n * If true, the tkit-module will not try to load remote env values from server(GET /assets/env.json)\n */\n skipRemoteConfigLoad: boolean\n /**\n * URL from which the remote config will be loaded, default: '/assets/env.json'\n */\n remoteConfigURL: string\n}\nexport const APP_CONFIG = new InjectionToken<LibConfig>('APP_CONFIG')\n\nexport const SANITY_CHECK = new InjectionToken<string>('OCXSANITY_CHECK')\n\nexport const APPLICATION_NAME = new InjectionToken<string>('APPLICATION_NAME')\n","export enum CONFIG_KEY {\n TKIT_PORTAL_DEFAULT_THEME = 'TKIT_PORTAL_DEFAULT_THEME',\n TKIT_PORTAL_DISABLE_THEME_MANAGEMENT = 'TKIT_PORTAL_DISABLE_THEME_MANAGEMENT',\n TKIT_PORTAL_THEME_SERVER_URL = 'TKIT_PORTAL_THEME_SERVER_URL',\n TKIT_TOKEN_ROLE_CLAIM_NAME = 'TKIT_TOKEN_ROLE_CLAIM_NAME',\n TKIT_PORTAL_ID = 'TKIT_PORTAL_ID',\n TKIT_SUPPORTED_LANGUAGES = 'TKIT_SUPPORTED_LANGUAGES',\n TKIT_SEARCH_BASE_URL = 'TKIT_SEARCH_BASE_URL',\n APP_BASE_HREF = 'APP_BASE_HREF',\n KEYCLOAK_REALM = 'KEYCLOAK_REALM',\n KEYCLOAK_ENABLE_SILENT_SSO = 'KEYCLOAK_ENABLE_SILENT_SSO',\n KEYCLOAK_URL = 'KEYCLOAK_URL',\n KEYCLOAK_CLIENT_ID = 'KEYCLOAK_CLIENT_ID',\n ONECX_PORTAL_FAVORITES_DISABLED = 'ONECX_PORTAL_FAVORITES_DISABLED',\n ONECX_PORTAL_FEEDBACK_DISABLED = 'ONECX_PORTAL_FEEDBACK_DISABLED',\n ONECX_PORTAL_SEARCH_DISABLED = 'ONECX_PORTAL_SEARCH_DISABLED',\n ONECX_PORTAL_SUPPORT_TICKET_DISABLED = 'ONECX_PORTAL_SUPPORT_TICKET_DISABLED',\n ONECX_PORTAL_ANNOUNCEMENTS_DISABLED = 'ONECX_PORTAL_ANNOUNCEMENTS_DISABLED',\n ONECX_PORTAL_PASSWORD_CHANGE_DISABLED = 'ONECX_PORTAL_PASSWORD_CHANGE_DISABLED',\n ONECX_PORTAL_SETTINGS_DISABLED = 'ONECX_PORTAL_SETTINGS_DISABLED',\n ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED = 'ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED',\n ONECX_PORTAL_HELP_DISABLED = 'ONECX_PORTAL_HELP_DISABLED',\n ONECX_PORTAL_SEARCH_BUTTONS_REVERSED = 'ONECX_PORTAL_SEARCH_BUTTONS_REVERSED',\n APP_VERSION = 'APP_VERSION',\n IS_SHELL = 'IS_SHELL',\n AUTH_SERVICE = 'AUTH_SERVICE',\n AUTH_SERVICE_CUSTOM_URL = 'AUTH_SERVICE_CUSTOM_URL',\n AUTH_SERVICE_CUSTOM_MODULE_NAME = 'AUTH_SERVICE_CUSTOM_MODULE_NAME',\n POLYFILL_SCOPE_MODE = 'POLYFILL_SCOPE_MODE',\n KEYBOARD_FOCUSABLE_SELECTOR = 'KEYBOARD_FOCUSABLE_SELECTOR'\n}\n\nexport enum POLYFILL_SCOPE_MODE {\n PERFORMANCE = 'PERFORMANCE',\n PRECISION = 'PRECISION',\n}","import { HttpClient } from '@angular/common/http'\nimport { Injectable, OnDestroy, inject } from '@angular/core'\nimport { firstValueFrom, map } from 'rxjs'\nimport { Config, ConfigurationTopic } from '@onecx/integration-interface'\nimport { APP_CONFIG } from '../api/injection-tokens'\nimport { CONFIG_KEY } from '../model/config-key.model'\nimport Semaphore from 'ts-semaphore'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigurationService implements OnDestroy {\n private http = inject(HttpClient)\n private readonly logger = createLogger('ConfigurationService')\n private defaultConfig = inject<{\n [key: string]: string\n }>(APP_CONFIG, { optional: true })\n\n _config$: ConfigurationTopic | undefined\n get config$() {\n this._config$ ??= new ConfigurationTopic()\n return this._config$\n }\n set config$(source: ConfigurationTopic) {\n this._config$ = source\n }\n private semaphore = new Semaphore(1)\n\n ngOnDestroy(): void {\n this._config$?.destroy()\n }\n\n public init(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const skipRemoteConfigLoad = this.defaultConfig && this.defaultConfig['skipRemoteConfigLoad']\n let loadConfigPromise: Promise<Config>\n\n const inlinedConfig = (window as typeof window & { APP_CONFIG: Config })['APP_CONFIG']\n if (inlinedConfig) {\n this.logger.info('ENV resolved from injected config')\n loadConfigPromise = Promise.resolve(inlinedConfig)\n } else {\n if (skipRemoteConfigLoad) {\n this.logger.info(\n '📢 TKA001: Remote config load is disabled. To enable it, remove the \"skipRemoteConfigLoad\" key in your environment.json'\n )\n loadConfigPromise = Promise.resolve(this.defaultConfig || {})\n } else {\n loadConfigPromise = firstValueFrom(\n this.http.get<Config>((this.defaultConfig && this.defaultConfig['remoteConfigURL']) || 'assets/env.json')\n )\n }\n }\n\n loadConfigPromise\n .then(async (config) => {\n await this.config$.publish({ ...this.defaultConfig, ...(config ?? {}) }).then(() => {\n resolve(true)\n })\n })\n .catch((e) => {\n this.logger.error('Failed to load env configuration', e)\n reject(e)\n })\n })\n }\n\n get isInitialized(): Promise<void> {\n return this.config$.isInitialized\n }\n\n public async getProperty(key: CONFIG_KEY): Promise<string | undefined> {\n if (!Object.values(CONFIG_KEY).includes(key)) {\n this.logger.error('Invalid config key ', key)\n }\n return firstValueFrom(this.config$.pipe(map((config) => config[key])))\n }\n\n public async setProperty(key: string, val: string) {\n return this.semaphore.use(async () => {\n const currentValues = await firstValueFrom(this.config$.asObservable())\n currentValues[key] = val\n await this.config$.publish(currentValues)\n })\n }\n\n public async getConfig(): Promise<Config | undefined> {\n return firstValueFrom(this.config$.asObservable())\n }\n}\n","export const API_PREFIX = 'portal-api'\n\nexport const DEFAULT_LANG = 'en'\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { PermissionsTopic, UserProfile, UserProfileTopic } from '@onecx/integration-interface'\nimport { BehaviorSubject, firstValueFrom, map } from 'rxjs'\nimport { DEFAULT_LANG } from '../api/constants'\nimport { getNormalizedBrowserLocales } from '@onecx/accelerator'\nimport { createLogger } from '../utils/logger.utils'\n\nconst logger = createLogger('UserService')\n\n@Injectable({ providedIn: 'root' })\nexport class UserService implements OnDestroy {\n profile$ = new UserProfileTopic()\n lang$ = new BehaviorSubject(this.determineLanguage() ?? DEFAULT_LANG)\n\n _permissionsTopic$: PermissionsTopic | undefined\n get permissionsTopic$() {\n this._permissionsTopic$ ??= new PermissionsTopic()\n return this._permissionsTopic$\n }\n set permissionsTopic$(source: PermissionsTopic) {\n this._permissionsTopic$ = source\n }\n\n constructor() {\n this.profile$\n .pipe(\n map((profile) => {\n let locales = profile.settings?.locales\n\n if (!locales) {\n return this.useOldLangSetting(profile)\n }\n\n if (locales.length === 0) {\n locales = getNormalizedBrowserLocales()\n }\n\n // the lang$ should contain the first language, because locales is an ordered list\n // length of 2 is checked because we need the general language\n // never choose 'en-US', but choose 'en'\n const firstLang = locales.find((l) => l.length === 2) ?? DEFAULT_LANG\n return firstLang\n })\n )\n .subscribe(this.lang$)\n }\n\n ngOnDestroy(): void {\n this.profile$.destroy()\n this._permissionsTopic$?.destroy()\n }\n\n useOldLangSetting(profile: UserProfile): string {\n return profile.accountSettings?.localeAndTimeSettings?.locale ?? this.determineLanguage() ?? DEFAULT_LANG\n }\n\n getPermissions() {\n return this.permissionsTopic$.asObservable()\n }\n\n async hasPermission(permissionKey: string | string[] | undefined): Promise<boolean> {\n if (!permissionKey) return true\n\n if (Array.isArray(permissionKey)) {\n const permissions = await Promise.all(permissionKey.map((key) => this.hasPermission(key)))\n return permissions.every((hasPermission) => hasPermission)\n }\n\n return firstValueFrom(\n this.permissionsTopic$.pipe(\n map((permissions) => {\n const result = permissions.includes(permissionKey)\n if (!result) {\n logger.debug(`No permission for: ${permissionKey}`)\n }\n return !!result\n })\n )\n )\n }\n\n private determineLanguage(): string | undefined {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined\n }\n\n let browserLang: any = window.navigator.languages ? window.navigator.languages[0] : null\n browserLang = browserLang || window.navigator.language\n\n if (typeof browserLang === 'undefined') {\n return undefined\n }\n\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0]\n }\n\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0]\n }\n\n return browserLang\n }\n\n get isInitialized(): Promise<void> {\n return Promise.all([\n this.permissionsTopic$.isInitialized,\n this.profile$.isInitialized,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n ]).then(() => {})\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ShellCapability } from '@onecx/integration-interface';\n\n@Injectable({ providedIn: 'root' })\nexport class ShellCapabilityService {\n static setCapabilities(capabilities: ShellCapability[]): void {\n window['onecx-shell-capabilities'] = capabilities;\n }\n\n hasCapability(capability: ShellCapability): boolean {\n return window['onecx-shell-capabilities']?.includes(capability) ?? false;\n }\n}\n\nexport { ShellCapability as Capability } from '@onecx/integration-interface';\n\n","import { Injectable, OnDestroy, inject } from '@angular/core'\nimport { ParametersTopic } from '@onecx/integration-interface'\nimport { firstValueFrom, map } from 'rxjs'\nimport { AppStateService } from './app-state.service'\nimport { Capability, ShellCapabilityService } from './shell-capability.service'\n\ntype Parameter = boolean | number | string | object\n\n@Injectable({ providedIn: 'root' })\nexport class ParametersService implements OnDestroy {\n private shellCapabilityService = inject(ShellCapabilityService)\n private appStateService = inject(AppStateService)\n _parameters$: ParametersTopic | undefined\n get parameters$() {\n this._parameters$ ??= new ParametersTopic()\n return this._parameters$\n }\n set parameters$(source: ParametersTopic) {\n this._parameters$ = source\n }\n\n ngOnDestroy(): void {\n this._parameters$?.destroy()\n }\n\n /**\n * Use this method to get a parameter value in applications.\n *\n * @param key The key of the parameter to get. This is defined when the parameter is configured in parameter management.\n * @param defaultValue The default value that will be returned if the parameter is not found or if the shell is not yet providing the parameters because it is too old.\n */\n public async get<T extends Parameter>(key: string, defaultValue: T | Promise<T>): Promise<T>\n\n /**\n * Use this method to get a parameter value in remote components.\n *\n * @param key The key of the parameter to get. This is defined when the parameter is configured in parameter management.\n * @param defaultValue The default value that will be returned if the parameter is not found or if the shell is not yet providing the parameters because it is too old.\n * @param productName The name of the product in which the parameter is defined.\n * @param appId The id of the application in which the parameter is defined.\n * @returns The value of the parameter or the default value.\n */\n public async get<T extends Parameter>(\n key: string,\n defaultValue: T | Promise<T>,\n productName: string,\n appId: string\n ): Promise<T>\n\n public async get<T extends Parameter>(\n key: string,\n defaultValue: T | Promise<T>,\n productName: string | undefined = undefined,\n appId: string | undefined = undefined\n ): Promise<T> {\n if (!this.shellCapabilityService.hasCapability(Capability.PARAMETERS_TOPIC)) {\n return Promise.resolve(defaultValue)\n }\n\n if (!productName) {\n productName = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.productName)))\n }\n if (!appId) {\n appId = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.appId)))\n }\n\n return firstValueFrom(\n this.parameters$.pipe(\n map(\n (payload) =>\n payload.parameters.find((p) => p.productName === productName && p.appId === appId)?.parameters[key] as T\n )\n )\n ).then((value): Promise<T> => {\n if (value === undefined) {\n return Promise.resolve(defaultValue)\n } else {\n return Promise.resolve(value)\n }\n })\n }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { MessageTopic } from '@onecx/integration-interface'\nimport { combineLatest, first, of } from 'rxjs'\n\nexport type Message = {\n summaryKey?: string\n summaryParameters?: object\n detailKey?: string\n detailParameters?: object\n id?: any\n key?: string\n life?: number\n sticky?: boolean\n closable?: boolean\n data?: any\n icon?: string\n contentStyleClass?: string\n styleClass?: string\n}\n\n@Injectable({ providedIn: 'any' })\nexport class PortalMessageService implements OnDestroy {\n private translateService = inject(TranslateService)\n\n _message$: MessageTopic | undefined\n get message$() {\n this._message$ ??= new MessageTopic()\n return this._message$\n }\n set message$(source: MessageTopic) {\n this._message$ = source\n }\n\n success(msg: Message) {\n this.addTranslated('success', msg)\n }\n\n info(msg: Message) {\n this.addTranslated('info', msg)\n }\n\n error(msg: Message) {\n this.addTranslated('error', msg)\n }\n\n warning(msg: Message) {\n this.addTranslated('warning', msg)\n }\n\n private addTranslated(severity: string, msg: Message) {\n combineLatest([\n msg.summaryKey ? this.translateService.get(msg.summaryKey || '', msg.summaryParameters) : of(undefined),\n msg.detailKey ? this.translateService.get(msg.detailKey, msg.detailParameters) : of(undefined),\n ])\n .pipe(first())\n .subscribe(([summaryTranslation, detailTranslation]: string[]) => {\n this.message$.publish({\n ...msg,\n severity: severity,\n summary: summaryTranslation,\n detail: detailTranslation,\n })\n })\n }\n\n ngOnDestroy(): void {\n this._message$?.destroy()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { CurrentThemeTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService implements OnDestroy {\n _currentTheme$: CurrentThemeTopic | undefined\n get currentTheme$() {\n this._currentTheme$ ??= new CurrentThemeTopic()\n return this._currentTheme$\n }\n set currentTheme$(source: CurrentThemeTopic) {\n this._currentTheme$ = source\n }\n ngOnDestroy(): void {\n this._currentTheme$?.destroy()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { RemoteComponentsTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class RemoteComponentsService implements OnDestroy {\n _remoteComponents$: RemoteComponentsTopic | undefined\n get remoteComponents$() {\n this._remoteComponents$ ??= new RemoteComponentsTopic()\n return this._remoteComponents$\n }\n set remoteComponents$(source: RemoteComponentsTopic) {\n this._remoteComponents$ = source\n }\n\n ngOnDestroy(): void {\n this._remoteComponents$?.destroy()\n }\n}\n","import { Location } from '@angular/common'\nimport { Injectable, inject } from '@angular/core'\nimport { Endpoint, Route } from '@onecx/integration-interface'\nimport { Observable, map } from 'rxjs'\nimport { AppStateService } from './app-state.service'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkspaceService {\n protected appStateService = inject(AppStateService)\n\n private readonly logger = createLogger('WorkspaceService')\n\n private aliasStart = '[['\n private aliasEnd = ']]'\n private paramStart = '{'\n private paramEnd = '}'\n\n getUrl(\n productName: string,\n appId: string,\n endpointName?: string,\n endpointParameters?: Record<string, unknown>\n ): Observable<string> {\n return this.appStateService.currentWorkspace$.pipe(\n map((workspace) => {\n const finalUrl = this.constructRouteUrl(workspace, appId, productName, endpointName, endpointParameters)\n return finalUrl\n })\n )\n }\n\n doesUrlExistFor(productName: string, appId: string, endpointName?: string): Observable<boolean> {\n return this.appStateService.currentWorkspace$.pipe(\n map((workspace) => {\n const checkEndpoint = endpointName !== undefined && endpointName.length > 0\n\n if (workspace.routes == undefined) {\n return false\n }\n const route = this.filterRouteFromList(workspace.routes, appId, productName)\n\n if (checkEndpoint) {\n if (!route || route.endpoints === undefined || route.endpoints.length == 0) {\n return false\n }\n\n const endpoint = route.endpoints.find((ep) => ep.name === endpointName)\n return !!(endpoint && endpoint.path && endpoint.path.length > 0)\n } else {\n return !!(route && route.baseUrl && route.baseUrl.length > 0)\n }\n })\n )\n }\n\n private constructBaseUrlFromWorkspace(workspace: any): string {\n if (workspace.baseUrl === undefined) {\n this.logger.warn('There was no baseUrl for received workspace.')\n return ''\n }\n return workspace.baseUrl\n }\n\n private constructRouteUrl(\n workspace: any,\n appId: string,\n productName: string,\n endpointName?: string,\n endpointParameters?: Record<string, unknown>\n ): string {\n const route = this.filterRouteFromList(workspace.routes, appId, productName)\n let url = this.constructBaseUrlFromWorkspace(workspace)\n if (!route) {\n this.logger.warn(\n `No route.baseUrl could be found for given appId \"${appId}\" and productName \"${productName}\"`\n )\n\n return url\n }\n\n if (route.baseUrl !== undefined && route.baseUrl.length > 0) {\n url = route.baseUrl\n }\n if (endpointName == undefined) {\n return url\n }\n\n url = Location.joinWithSlash(url, this.constructEndpointUrl(route, endpointName, endpointParameters))\n return url\n }\n\n private constructEndpointUrl(\n route: any,\n endpointName: string,\n endpointParameters: Record<string, unknown> = {}\n ): string {\n if (!route.endpoints) {\n return ''\n }\n const finalEndpoint = this.dissolveEndpoint(endpointName, route.endpoints)\n if (!finalEndpoint || finalEndpoint.path === undefined) {\n this.logger.warn('No endpoint or endpoint.path could be found')\n return ''\n }\n\n const paramsFilled = this.fillParamsForPath(finalEndpoint.path, endpointParameters)\n if (paramsFilled === undefined) {\n this.logger.warn('Params could not be filled correctly')\n return ''\n }\n\n return paramsFilled\n }\n\n private filterRouteFromList(routes: Array<Route>, appId: string, productName: string): Route | undefined {\n if (!routes) {\n return undefined\n }\n\n const productRoutes = routes.filter((route) => route.appId === appId && route.productName === productName)\n\n if (productRoutes.length === 0) {\n return undefined\n }\n\n if (productRoutes.length > 1) {\n this.logger.warn('There were more than one route. First route has been used.')\n }\n\n return productRoutes[0]\n }\n\n private dissolveEndpoint(endpointName: string, endpoints: Array<Endpoint>): Endpoint | undefined {\n let endpoint = endpoints.find((ep) => ep.name === endpointName)\n\n if (!endpoint) {\n return undefined\n }\n\n while (endpoint.path?.includes(this.aliasStart)) {\n const path: string = endpoint.path\n const startIdx = path.indexOf(this.aliasStart) + this.aliasStart.length\n const endIdx = path.lastIndexOf(this.aliasEnd)\n if (endIdx <= startIdx) {\n return undefined\n }\n const aliasName = path.substring(startIdx, endIdx)\n endpoint = endpoints.find((ep) => ep.name === aliasName)\n\n if (!endpoint) {\n return undefined\n }\n }\n\n return endpoint\n }\n\n private fillParamsForPath(path: string, endpointParameters: Record<string, unknown>): string {\n while (path.includes(this.paramStart)) {\n const paramName = path.substring(\n path.indexOf(this.paramStart) + this.paramStart.length,\n path.indexOf(this.paramEnd)\n )\n const paramValue = this.getStringFromUnknown(endpointParameters[paramName])\n if (paramValue != undefined && paramValue.length > 0) {\n path = path.replace(this.paramStart.concat(paramName).concat(this.paramEnd), paramValue)\n } else {\n this.logger.warn(`Searched param \"${paramName}\" was not found in given param list `)\n return ''\n }\n }\n return path\n }\n\n private getStringFromUnknown(value: unknown): string {\n if (value === null || value === undefined) {\n return ''\n } else if (typeof value === 'string') {\n return value\n } else {\n return String(value)\n }\n }\n}\n","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { ImageRepositoryService as ImageRepositoryInterface } from '@onecx/integration-interface'\n\n@Injectable({providedIn: 'root'}) \nexport class ImageRepositoryService implements OnDestroy {\n private readonly imageRepositoryInterface = new ImageRepositoryInterface();\n\n get imageRepositoryTopic() {\n return this.imageRepositoryInterface.imageRepositoryTopic;\n }\n\n async getUrl(names: string[]): Promise<string | undefined>;\n async getUrl(names: string[], fallbackUrl: string): Promise<string>;\n async getUrl(names: string[], fallbackUrl?: string): Promise<string | undefined> {\n if (fallbackUrl) {\n return this.imageRepositoryInterface.getUrl(names, fallbackUrl);\n }\n return this.imageRepositoryInterface.getUrl(names);\n }\n\n ngOnDestroy(): void {\n this.imageRepositoryInterface.destroy();\n }\n}","import { Injectable, OnDestroy } from '@angular/core'\nimport { IconService as IconServiceInterface, IconClassType, IconTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class IconService implements OnDestroy {\n private readonly iconServiceInterface = new IconServiceInterface()\n\n get iconTopic(): IconTopic {\n return this.iconServiceInterface.iconTopic;\n }\n\n requestIcon(name: string, type?: IconClassType): string {\n return this.iconServiceInterface.requestIcon(name, type)\n }\n\n requestIconAsync(name: string, type?: IconClassType): Promise<string | null> {\n return this.iconServiceInterface.requestIconAsync(name, type)\n }\n\n ngOnDestroy(): void {\n this.iconServiceInterface.destroy();\n }\n}","import { Injectable, OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DynamicTranslationService as DynamicTranslationInterface,\n TranslationContext,\n} from '@onecx/integration-interface';\n\n@Injectable({ providedIn: 'root' })\nexport class DynamicTranslationService implements OnDestroy {\n private readonly dynamicTranslationInterface = new DynamicTranslationInterface();\n\n get dynamicTranslationsTopic$() {\n return this.dynamicTranslationInterface.dynamicTranslationsTopic$;\n }\n\n getTranslations(\n lang: string,\n contexts: TranslationContext[]\n ): Observable<Record<string, Record<string, unknown>>> {\n return this.dynamicTranslationInterface.getTranslations(lang, contexts);\n }\n\n ngOnDestroy(): void {\n this.dynamicTranslationInterface.destroy();\n }\n}\n","// services\nexport * from './lib/services/app-config-service'\nexport * from './lib/services/app-state.service'\nexport * from './lib/services/configuration.service'\nexport * from './lib/services/user.service'\nexport * from './lib/services/parameters.service'\nexport * from './lib/services/portal-message.service'\nexport * from './lib/services/theme.service'\nexport * from './lib/services/remote-components.service'\nexport * from './lib/services/workspace.service'\nexport * from './lib/services/shell-capability.service'\nexport * from './lib/services/image-repository.service'\nexport * from './lib/services/icon.service'\nexport * from './lib/services/dynamic-translation.service'\n\n// models\nexport * from './lib/model/config-key.model'\n\n// core\nexport * from './lib/api/injection-tokens'\n\n// utils\n\nexport { MfeInfo, Theme } from '@onecx/integration-interface'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Capability","ImageRepositoryInterface","IconServiceInterface","DynamicTranslationInterface"],"mappings":"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"}
1
+ {"version":3,"file":"onecx-angular-integration-interface.mjs","sources":["../../../../libs/angular-integration-interface/src/lib/utils/logger.utils.ts","../../../../libs/angular-integration-interface/src/lib/services/app-config-service.ts","../../../../libs/angular-integration-interface/src/lib/services/app-state.service.ts","../../../../libs/angular-integration-interface/src/lib/api/injection-tokens.ts","../../../../libs/angular-integration-interface/src/lib/model/config-key.model.ts","../../../../libs/angular-integration-interface/src/lib/services/configuration.service.ts","../../../../libs/angular-integration-interface/src/lib/api/constants.ts","../../../../libs/angular-integration-interface/src/lib/services/user.service.ts","../../../../libs/angular-integration-interface/src/lib/services/shell-capability.service.ts","../../../../libs/angular-integration-interface/src/lib/services/parameters.service.ts","../../../../libs/angular-integration-interface/src/lib/services/portal-message.service.ts","../../../../libs/angular-integration-interface/src/lib/services/theme.service.ts","../../../../libs/angular-integration-interface/src/lib/services/remote-components.service.ts","../../../../libs/angular-integration-interface/src/lib/services/workspace.service.ts","../../../../libs/angular-integration-interface/src/lib/services/image-repository.service.ts","../../../../libs/angular-integration-interface/src/lib/services/icon.service.ts","../../../../libs/angular-integration-interface/src/lib/services/dynamic-translation.service.ts","../../../../libs/angular-integration-interface/src/lib/services/notification.service.ts","../../../../libs/angular-integration-interface/src/index.ts","../../../../libs/angular-integration-interface/src/onecx-angular-integration-interface.ts"],"sourcesContent":["// This file is not planned to be in the index.ts so it is private to this lib\nimport { createLoggerFactory } from '@onecx/accelerator'\n\nexport const createLogger = createLoggerFactory('@onecx/angular-integration-interface')\n","import { Location } from '@angular/common'\nimport { HttpClient } from '@angular/common/http'\nimport { Injectable, inject } from '@angular/core'\nimport { Config } from '@onecx/integration-interface'\nimport { BehaviorSubject, firstValueFrom } from 'rxjs'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable()\nexport class AppConfigService {\n private http = inject(HttpClient)\n private readonly logger = createLogger('AppConfigService')\n\n config$ = new BehaviorSubject<{ [key: string]: string }>({})\n\n public init(baseUrl: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const loadConfigPromise: Promise<Config> = firstValueFrom(\n this.http.get<Config>(Location.joinWithSlash(baseUrl, 'assets/env.json'))\n )\n\n loadConfigPromise\n .then(async (config) => {\n if (config) {\n this.config$.next(config)\n resolve()\n }\n })\n .catch((e) => {\n this.logger.error('Failed to load env configuration', e)\n reject(e)\n })\n })\n }\n\n public getProperty(key: string): string | undefined {\n return this.config$.getValue()?.[key]\n }\n\n public setProperty(key: string, val: string) {\n this.config$.next({ ...this.config$.value, [key]: val })\n }\n\n public getConfig(): { [key: string]: string } {\n return this.config$.getValue()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport {\n GlobalErrorTopic,\n GlobalLoadingTopic,\n CurrentMfeTopic,\n CurrentPageTopic,\n CurrentWorkspaceTopic,\n IsAuthenticatedTopic,\n CurrentLocationTopic,\n} from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class AppStateService implements OnDestroy {\n private _globalError$: GlobalErrorTopic | undefined\n get globalError$(): GlobalErrorTopic {\n this._globalError$ ??= new GlobalErrorTopic()\n return this._globalError$\n }\n set globalError$(source: GlobalErrorTopic) {\n this._globalError$ = source\n }\n private _globalLoading$: GlobalLoadingTopic | undefined\n get globalLoading$(): GlobalLoadingTopic {\n this._globalLoading$ ??= new GlobalLoadingTopic()\n return this._globalLoading$\n }\n set globalLoading$(source: GlobalLoadingTopic) {\n this._globalLoading$ = source\n }\n private _currentMfe$: CurrentMfeTopic | undefined\n get currentMfe$(): CurrentMfeTopic {\n this._currentMfe$ ??= new CurrentMfeTopic()\n return this._currentMfe$\n }\n set currentMfe$(source: CurrentMfeTopic) {\n this._currentMfe$ = source\n }\n private _currentLocation$: CurrentLocationTopic | undefined\n get currentLocation$(): CurrentLocationTopic {\n this._currentLocation$ ??= new CurrentLocationTopic()\n return this._currentLocation$\n }\n set currentLocation$(source: CurrentLocationTopic) {\n this._currentLocation$ = source\n }\n\n private _currentPage$: CurrentPageTopic | undefined\n /**\n * This topic will only fire when pageInfo.path matches document.location.pathname,\n * if not it will fire undefined.\n */\n get currentPage$(): CurrentPageTopic {\n this._currentPage$ ??= new CurrentPageTopic()\n return this._currentPage$\n }\n set currentPage$(source: CurrentPageTopic) {\n this._currentPage$ = source\n }\n _currentWorkspace$: CurrentWorkspaceTopic | undefined\n get currentWorkspace$(): CurrentWorkspaceTopic {\n this._currentWorkspace$ ??= new CurrentWorkspaceTopic()\n return this._currentWorkspace$\n }\n set currentWorkspace$(source: CurrentWorkspaceTopic) {\n this._currentWorkspace$ = source\n }\n\n /**\n * This Topic is initialized as soon as the authentication is done\n */\n private _isAuthenticated$: IsAuthenticatedTopic | undefined\n get isAuthenticated$(): IsAuthenticatedTopic {\n this._isAuthenticated$ ??= new IsAuthenticatedTopic()\n return this._isAuthenticated$\n }\n set isAuthenticated$(source: IsAuthenticatedTopic) {\n this._isAuthenticated$ = source\n }\n\n ngOnDestroy(): void {\n this._globalError$?.destroy()\n this._globalLoading$?.destroy()\n this._currentMfe$?.destroy()\n this._currentPage$?.destroy()\n this._currentLocation$?.destroy()\n this._currentWorkspace$?.destroy()\n this._isAuthenticated$?.destroy()\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport interface LibConfig {\n appId: string\n portalId: string\n /**\n * If true, the tkit-module will not try to load remote env values from server(GET /assets/env.json)\n */\n skipRemoteConfigLoad: boolean\n /**\n * URL from which the remote config will be loaded, default: '/assets/env.json'\n */\n remoteConfigURL: string\n}\nexport const APP_CONFIG = new InjectionToken<LibConfig>('APP_CONFIG')\n\nexport const SANITY_CHECK = new InjectionToken<string>('OCXSANITY_CHECK')\n\nexport const APPLICATION_NAME = new InjectionToken<string>('APPLICATION_NAME')\n","export enum CONFIG_KEY {\n TKIT_PORTAL_DEFAULT_THEME = 'TKIT_PORTAL_DEFAULT_THEME',\n TKIT_PORTAL_DISABLE_THEME_MANAGEMENT = 'TKIT_PORTAL_DISABLE_THEME_MANAGEMENT',\n TKIT_PORTAL_THEME_SERVER_URL = 'TKIT_PORTAL_THEME_SERVER_URL',\n TKIT_TOKEN_ROLE_CLAIM_NAME = 'TKIT_TOKEN_ROLE_CLAIM_NAME',\n TKIT_PORTAL_ID = 'TKIT_PORTAL_ID',\n TKIT_SUPPORTED_LANGUAGES = 'TKIT_SUPPORTED_LANGUAGES',\n TKIT_SEARCH_BASE_URL = 'TKIT_SEARCH_BASE_URL',\n APP_BASE_HREF = 'APP_BASE_HREF',\n KEYCLOAK_REALM = 'KEYCLOAK_REALM',\n KEYCLOAK_ENABLE_SILENT_SSO = 'KEYCLOAK_ENABLE_SILENT_SSO',\n KEYCLOAK_URL = 'KEYCLOAK_URL',\n KEYCLOAK_CLIENT_ID = 'KEYCLOAK_CLIENT_ID',\n KEYCLOAK_TIME_SKEW = 'KEYCLOAK_TIME_SKEW',\n KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY = 'KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY',\n KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED = 'KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED',\n KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED = 'KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED',\n ONECX_PORTAL_FAVORITES_DISABLED = 'ONECX_PORTAL_FAVORITES_DISABLED',\n ONECX_PORTAL_FEEDBACK_DISABLED = 'ONECX_PORTAL_FEEDBACK_DISABLED',\n ONECX_PORTAL_SEARCH_DISABLED = 'ONECX_PORTAL_SEARCH_DISABLED',\n ONECX_PORTAL_SUPPORT_TICKET_DISABLED = 'ONECX_PORTAL_SUPPORT_TICKET_DISABLED',\n ONECX_PORTAL_ANNOUNCEMENTS_DISABLED = 'ONECX_PORTAL_ANNOUNCEMENTS_DISABLED',\n ONECX_PORTAL_PASSWORD_CHANGE_DISABLED = 'ONECX_PORTAL_PASSWORD_CHANGE_DISABLED',\n ONECX_PORTAL_SETTINGS_DISABLED = 'ONECX_PORTAL_SETTINGS_DISABLED',\n ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED = 'ONECX_PORTAL_MY_ROLES_PERMISSIONS_DISABLED',\n ONECX_PORTAL_HELP_DISABLED = 'ONECX_PORTAL_HELP_DISABLED',\n ONECX_PORTAL_SEARCH_BUTTONS_REVERSED = 'ONECX_PORTAL_SEARCH_BUTTONS_REVERSED',\n APP_VERSION = 'APP_VERSION',\n IS_SHELL = 'IS_SHELL',\n AUTH_SERVICE = 'AUTH_SERVICE',\n AUTH_SERVICE_CUSTOM_URL = 'AUTH_SERVICE_CUSTOM_URL',\n AUTH_SERVICE_CUSTOM_MODULE_NAME = 'AUTH_SERVICE_CUSTOM_MODULE_NAME',\n POLYFILL_SCOPE_MODE = 'POLYFILL_SCOPE_MODE',\n KEYBOARD_FOCUSABLE_SELECTOR = 'KEYBOARD_FOCUSABLE_SELECTOR',\n CUSTOM_AUTH_SHARE_SCOPE = 'CUSTOM_AUTH_SHARE_SCOPE',\n}\n\nexport enum POLYFILL_SCOPE_MODE {\n PERFORMANCE = 'PERFORMANCE',\n PRECISION = 'PRECISION',\n}\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, OnDestroy, inject } from '@angular/core'\nimport { firstValueFrom, map } from 'rxjs'\nimport { Config, ConfigurationTopic, resolveConfigPayload } from '@onecx/integration-interface'\nimport { APP_CONFIG } from '../api/injection-tokens'\nimport { CONFIG_KEY } from '../model/config-key.model'\nimport Semaphore from 'ts-semaphore'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigurationService implements OnDestroy {\n private http = inject(HttpClient)\n private readonly logger = createLogger('ConfigurationService')\n private defaultConfig = inject<{\n [key: string]: string\n }>(APP_CONFIG, { optional: true })\n\n _config$: ConfigurationTopic | undefined\n get config$() {\n this._config$ ??= new ConfigurationTopic()\n return this._config$\n }\n set config$(source: ConfigurationTopic) {\n this._config$ = source\n }\n private semaphore = new Semaphore(1)\n\n ngOnDestroy(): void {\n this._config$?.destroy()\n }\n\n public init(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n const skipRemoteConfigLoad = this.defaultConfig?.['skipRemoteConfigLoad']\n const remoteConfigURL = this.defaultConfig?.['remoteConfigURL'] ?? undefined\n\n resolveConfigPayload({\n defaultConfig: this.defaultConfig ?? {},\n skipRemoteConfigLoad: !!skipRemoteConfigLoad,\n remoteConfigURL,\n loadRemoteConfig: (url) => firstValueFrom(this.http.get<Config>(url)),\n })\n .then(async ({ config, source }) => {\n if (source === 'inlined') {\n this.logger.info('ENV resolved from injected config')\n }\n if (source === 'default' && skipRemoteConfigLoad) {\n this.logger.info(\n '📢 TKA001: Remote config load is disabled. To enable it, remove the \"skipRemoteConfigLoad\" key in your environment.json'\n )\n }\n\n await this.config$.publish({ ...this.defaultConfig, ...(config ?? {}) }).then(() => {\n resolve(true)\n })\n })\n .catch((e) => {\n this.logger.error('Failed to load env configuration', e)\n reject(e)\n })\n })\n }\n\n get isInitialized(): Promise<void> {\n return this.config$.isInitialized\n }\n\n public async getProperty(key: CONFIG_KEY): Promise<string | undefined> {\n if (!Object.values(CONFIG_KEY).includes(key)) {\n this.logger.error('Invalid config key ', key)\n }\n return firstValueFrom(this.config$.pipe(map((config) => config[key])))\n }\n\n public async setProperty(key: string, val: string) {\n return this.semaphore.use(async () => {\n const currentValues = await firstValueFrom(this.config$.asObservable())\n currentValues[key] = val\n await this.config$.publish(currentValues)\n })\n }\n\n public async getConfig(): Promise<Config | undefined> {\n return firstValueFrom(this.config$.asObservable())\n }\n}\n","export const API_PREFIX = 'portal-api'\n\nexport const DEFAULT_LANG = 'en'\n","import { Injectable, OnDestroy } from '@angular/core'\nimport {\n PermissionsTopic,\n type UserProfile,\n UserProfileTopic,\n determineBrowserLanguage,\n resolveLegacyLanguage,\n resolveProfileLanguage,\n} from '@onecx/integration-interface'\nimport { BehaviorSubject, firstValueFrom, map } from 'rxjs'\nimport { DEFAULT_LANG } from '../api/constants'\nimport { getNormalizedBrowserLocales } from '@onecx/accelerator'\nimport { createLogger } from '../utils/logger.utils'\n\nconst logger = createLogger('UserService')\n\n@Injectable({ providedIn: 'root' })\nexport class UserService implements OnDestroy {\n profile$ = new UserProfileTopic()\n lang$ = new BehaviorSubject(determineBrowserLanguage() ?? DEFAULT_LANG)\n\n _permissionsTopic$: PermissionsTopic | undefined\n get permissionsTopic$() {\n this._permissionsTopic$ ??= new PermissionsTopic()\n return this._permissionsTopic$\n }\n set permissionsTopic$(source: PermissionsTopic) {\n this._permissionsTopic$ = source\n }\n\n constructor() {\n this.profile$\n .pipe(\n map((profile) => {\n return resolveProfileLanguage(profile, DEFAULT_LANG, getNormalizedBrowserLocales)\n })\n )\n .subscribe(this.lang$)\n }\n\n ngOnDestroy(): void {\n this.profile$.destroy()\n this._permissionsTopic$?.destroy()\n }\n\n useOldLangSetting(profile: UserProfile): string {\n return resolveLegacyLanguage(profile, DEFAULT_LANG, determineBrowserLanguage)\n }\n\n getPermissions() {\n return this.permissionsTopic$.asObservable()\n }\n\n async hasPermission(permissionKey: string | string[] | undefined): Promise<boolean> {\n if (!permissionKey) return true\n\n if (Array.isArray(permissionKey)) {\n const permissions = await Promise.all(permissionKey.map((key) => this.hasPermission(key)))\n return permissions.every((hasPermission) => hasPermission)\n }\n\n return firstValueFrom(\n this.permissionsTopic$.pipe(\n map((permissions) => {\n const result = permissions.includes(permissionKey)\n if (!result) {\n logger.debug(`No permission for: ${permissionKey}`)\n }\n return !!result\n })\n )\n )\n }\n\n get isInitialized(): Promise<void> {\n return Promise.all([\n this.permissionsTopic$.isInitialized,\n this.profile$.isInitialized,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n ]).then(() => {})\n }\n}\n","import { Injectable } from '@angular/core'\nimport { ShellCapability, hasShellCapability, setShellCapabilities } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class ShellCapabilityService {\n static setCapabilities(capabilities: ShellCapability[]): void {\n setShellCapabilities(capabilities)\n }\n\n hasCapability(capability: ShellCapability): boolean {\n return hasShellCapability(capability)\n }\n}\nexport { ShellCapability as Capability } from '@onecx/integration-interface'\n","import { Injectable, OnDestroy, inject } from '@angular/core'\nimport {\n ParametersTopic,\n findParameterValue,\n type ParameterValue,\n ShellCapability as Capability,\n Parameters,\n} from '@onecx/integration-interface'\nimport { firstValueFrom, map } from 'rxjs'\nimport { AppStateService } from './app-state.service'\nimport { ShellCapabilityService } from './shell-capability.service'\n\n@Injectable({ providedIn: 'root' })\nexport class ParametersService implements OnDestroy {\n private readonly shellCapabilityService = inject(ShellCapabilityService)\n private readonly appStateService = inject(AppStateService)\n _parameters$: ParametersTopic | undefined\n get parameters$() {\n this._parameters$ ??= new ParametersTopic()\n return this._parameters$\n }\n set parameters$(source: ParametersTopic) {\n this._parameters$ = source\n }\n\n ngOnDestroy(): void {\n this._parameters$?.destroy()\n }\n\n /**\n * Use this method to get a parameter value in applications.\n *\n * @param key The key of the parameter to get. This is defined when the parameter is configured in parameter management.\n * @param defaultValue The default value that will be returned if the parameter is not found or if the shell is not yet providing the parameters because it is too old.\n */\n public async get<T extends ParameterValue>(key: string, defaultValue: T | Promise<T>): Promise<T>\n\n /**\n * Use this method to get a parameter value in remote components.\n *\n * @param key The key of the parameter to get. This is defined when the parameter is configured in parameter management.\n * @param defaultValue The default value that will be returned if the parameter is not found or if the shell is not yet providing the parameters because it is too old.\n * @param productName The name of the product in which the parameter is defined.\n * @param appId The id of the application in which the parameter is defined.\n * @returns The value of the parameter or the default value.\n */\n public async get<T extends ParameterValue>(\n key: string,\n defaultValue: T | Promise<T>,\n productName: string,\n appId: string\n ): Promise<T>\n\n public async get<T extends Parameters>(\n key: string,\n defaultValue: T | Promise<T>,\n productName: string | undefined = undefined,\n appId: string | undefined = undefined\n ): Promise<T> {\n if (!this.shellCapabilityService.hasCapability(Capability.PARAMETERS_TOPIC)) {\n return defaultValue\n }\n\n if (!productName) {\n productName = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.productName)))\n }\n if (!appId) {\n appId = await firstValueFrom(this.appStateService.currentMfe$.pipe(map((mfe) => mfe.appId)))\n }\n\n return firstValueFrom(\n this.parameters$.pipe(map((payload) => findParameterValue(payload, key, productName, appId) as T))\n ).then((value): T => value ?? defaultValue)\n }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { MessageTopic, buildPortalMessagePayload, type PortalMessage } from '@onecx/integration-interface'\nimport { combineLatest, first, of } from 'rxjs'\n\nexport type Message = PortalMessage\n\n@Injectable({ providedIn: 'any' })\nexport class PortalMessageService implements OnDestroy {\n private translateService = inject(TranslateService)\n\n _message$: MessageTopic | undefined\n get message$() {\n this._message$ ??= new MessageTopic()\n return this._message$\n }\n set message$(source: MessageTopic) {\n this._message$ = source\n }\n\n success(msg: Message) {\n this.addTranslated('success', msg)\n }\n\n info(msg: Message) {\n this.addTranslated('info', msg)\n }\n\n error(msg: Message) {\n this.addTranslated('error', msg)\n }\n\n warning(msg: Message) {\n this.addTranslated('warning', msg)\n }\n\n private addTranslated(severity: string, msg: Message) {\n combineLatest([\n msg.summaryKey ? this.translateService.get(msg.summaryKey || '', msg.summaryParameters) : of(undefined),\n msg.detailKey ? this.translateService.get(msg.detailKey, msg.detailParameters) : of(undefined),\n ])\n .pipe(first())\n .subscribe(([summaryTranslation, detailTranslation]: string[]) => {\n this.message$.publish(buildPortalMessagePayload(severity, msg, summaryTranslation, detailTranslation))\n })\n }\n\n ngOnDestroy(): void {\n this._message$?.destroy()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { CurrentThemeTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService implements OnDestroy {\n _currentTheme$: CurrentThemeTopic | undefined\n get currentTheme$() {\n this._currentTheme$ ??= new CurrentThemeTopic()\n return this._currentTheme$\n }\n set currentTheme$(source: CurrentThemeTopic) {\n this._currentTheme$ = source\n }\n ngOnDestroy(): void {\n this._currentTheme$?.destroy()\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { RemoteComponentsTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class RemoteComponentsService implements OnDestroy {\n _remoteComponents$: RemoteComponentsTopic | undefined\n get remoteComponents$() {\n this._remoteComponents$ ??= new RemoteComponentsTopic()\n return this._remoteComponents$\n }\n set remoteComponents$(source: RemoteComponentsTopic) {\n this._remoteComponents$ = source\n }\n\n ngOnDestroy(): void {\n this._remoteComponents$?.destroy()\n }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { constructRouteUrl, doesUrlExistForWorkspace, type EndpointParameters } from '@onecx/integration-interface'\nimport { Observable, map } from 'rxjs'\nimport { AppStateService } from './app-state.service'\nimport { createLogger } from '../utils/logger.utils'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkspaceService {\n protected appStateService = inject(AppStateService)\n\n private readonly logger = createLogger('WorkspaceService')\n\n getUrl(\n productName: string,\n appId: string,\n endpointName?: string,\n endpointParameters?: EndpointParameters\n ): Observable<string> {\n return this.appStateService.currentWorkspace$.pipe(\n map((workspace) => {\n const finalUrl = constructRouteUrl(\n workspace,\n appId,\n productName,\n endpointName,\n endpointParameters,\n this.logger.warn\n )\n return finalUrl\n })\n )\n }\n\n doesUrlExistFor(productName: string, appId: string, endpointName?: string): Observable<boolean> {\n return this.appStateService.currentWorkspace$.pipe(\n map((workspace) => doesUrlExistForWorkspace(workspace, productName, appId, endpointName, this.logger.warn))\n )\n }\n}\n","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { ImageRepositoryService as ImageRepositoryInterface } from '@onecx/integration-interface'\n\n@Injectable({providedIn: 'root'}) \nexport class ImageRepositoryService implements OnDestroy {\n private readonly imageRepositoryInterface = new ImageRepositoryInterface();\n\n get imageRepositoryTopic() {\n return this.imageRepositoryInterface.imageRepositoryTopic;\n }\n\n async getUrl(names: string[]): Promise<string | undefined>;\n async getUrl(names: string[], fallbackUrl: string): Promise<string>;\n async getUrl(names: string[], fallbackUrl?: string): Promise<string | undefined> {\n if (fallbackUrl) {\n return this.imageRepositoryInterface.getUrl(names, fallbackUrl);\n }\n return this.imageRepositoryInterface.getUrl(names);\n }\n\n ngOnDestroy(): void {\n this.imageRepositoryInterface.destroy();\n }\n}","import { Injectable, OnDestroy } from '@angular/core'\nimport { IconService as IconServiceInterface, IconClassType, IconTopic } from '@onecx/integration-interface'\n\n@Injectable({ providedIn: 'root' })\nexport class IconService implements OnDestroy {\n private readonly iconServiceInterface = new IconServiceInterface()\n\n get iconTopic(): IconTopic {\n return this.iconServiceInterface.iconTopic;\n }\n\n requestIcon(name: string, type?: IconClassType): string {\n return this.iconServiceInterface.requestIcon(name, type)\n }\n\n requestIconAsync(name: string, type?: IconClassType): Promise<string | null> {\n return this.iconServiceInterface.requestIconAsync(name, type)\n }\n\n ngOnDestroy(): void {\n this.iconServiceInterface.destroy();\n }\n}","import { Injectable, OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DynamicTranslationService as DynamicTranslationInterface,\n TranslationContext,\n} from '@onecx/integration-interface';\n\n@Injectable({ providedIn: 'root' })\nexport class DynamicTranslationService implements OnDestroy {\n private readonly dynamicTranslationInterface = new DynamicTranslationInterface();\n\n get dynamicTranslationsTopic$() {\n return this.dynamicTranslationInterface.dynamicTranslationsTopic$;\n }\n\n getTranslations(\n lang: string,\n contexts: TranslationContext[]\n ): Observable<Record<string, Record<string, unknown>>> {\n return this.dynamicTranslationInterface.getTranslations(lang, contexts);\n }\n\n ngOnDestroy(): void {\n this.dynamicTranslationInterface.destroy();\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { NotificationService as NotificationServiceFromIntegrationInterface, NotificationTopic } from '@onecx/integration-interface'\n\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService implements OnDestroy {\n\n private readonly notificationService = new NotificationServiceFromIntegrationInterface()\n\n get notificationTopic(): NotificationTopic {\n return this.notificationService.notificationTopic;\n }\n\n ngOnDestroy(): void {\n this.notificationService.destroy();\n }\n\n}\n","// services\nexport * from './lib/services/app-config-service'\nexport * from './lib/services/app-state.service'\nexport * from './lib/services/configuration.service'\nexport * from './lib/services/user.service'\nexport * from './lib/services/parameters.service'\nexport * from './lib/services/portal-message.service'\nexport * from './lib/services/theme.service'\nexport * from './lib/services/remote-components.service'\nexport * from './lib/services/workspace.service'\nexport * from './lib/services/shell-capability.service'\nexport * from './lib/services/image-repository.service'\nexport * from './lib/services/icon.service'\nexport * from './lib/services/dynamic-translation.service'\n\n// models\nexport * from './lib/model/config-key.model'\n\n// core\nexport * from './lib/api/injection-tokens'\n\n// utils\n\nexport { MfeInfo, Theme } from '@onecx/integration-interface'\n\nexport * from './lib/services/image-repository.service'\nexport * from './lib/services/notification.service'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Capability","ImageRepositoryInterface","IconServiceInterface","DynamicTranslationInterface","NotificationServiceFromIntegrationInterface"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onecx/angular-integration-interface",
3
- "version": "8.0.0-rc.10",
3
+ "version": "8.0.0-rc.12",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,8 +8,8 @@
8
8
  },
9
9
  "peerDependencies": {
10
10
  "@angular/core": "^21.0.0",
11
- "@onecx/accelerator": "^8.0.0-rc.10",
12
- "@onecx/integration-interface": "^8.0.0-rc.10",
11
+ "@onecx/accelerator": "^8.0.0-rc.12",
12
+ "@onecx/integration-interface": "^8.0.0-rc.12",
13
13
  "rxjs": "~7.8.1",
14
14
  "@phenomnomnominal/tsquery": "^6",
15
15
  "ts-semaphore": "^1.0.0",
@@ -3,7 +3,7 @@ import { BehaviorSubject, Observable } from 'rxjs';
3
3
  import * as i0 from '@angular/core';
4
4
  import { OnDestroy, InjectionToken } from '@angular/core';
5
5
  import * as _onecx_integration_interface from '@onecx/integration-interface';
6
- import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentLocationTopic, CurrentPageTopic, CurrentWorkspaceTopic, IsAuthenticatedTopic, ConfigurationTopic, Config, UserProfileTopic, PermissionsTopic, UserProfile, ParametersTopic, MessageTopic, CurrentThemeTopic, RemoteComponentsTopic, ShellCapability, IconTopic, IconClassType, TranslationContext } from '@onecx/integration-interface';
6
+ import { GlobalErrorTopic, GlobalLoadingTopic, CurrentMfeTopic, CurrentLocationTopic, CurrentPageTopic, CurrentWorkspaceTopic, IsAuthenticatedTopic, ConfigurationTopic, Config, UserProfileTopic, PermissionsTopic, UserProfile, ParametersTopic, ParameterValue, PortalMessage, MessageTopic, CurrentThemeTopic, RemoteComponentsTopic, EndpointParameters, ShellCapability, IconTopic, IconClassType, TranslationContext, NotificationTopic } from '@onecx/integration-interface';
7
7
  export { ShellCapability as Capability, MfeInfo, Theme } from '@onecx/integration-interface';
8
8
 
9
9
  declare class AppConfigService {
@@ -69,6 +69,10 @@ declare enum CONFIG_KEY {
69
69
  KEYCLOAK_ENABLE_SILENT_SSO = "KEYCLOAK_ENABLE_SILENT_SSO",
70
70
  KEYCLOAK_URL = "KEYCLOAK_URL",
71
71
  KEYCLOAK_CLIENT_ID = "KEYCLOAK_CLIENT_ID",
72
+ KEYCLOAK_TIME_SKEW = "KEYCLOAK_TIME_SKEW",
73
+ KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY = "KEYCLOAK_UPDATE_TOKEN_MIN_VALIDITY",
74
+ KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED = "KEYCLOAK_ON_TOKEN_EXPIRED_ENABLED",
75
+ KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED = "KEYCLOAK_ON_AUTH_REFRESH_ERROR_ENABLED",
72
76
  ONECX_PORTAL_FAVORITES_DISABLED = "ONECX_PORTAL_FAVORITES_DISABLED",
73
77
  ONECX_PORTAL_FEEDBACK_DISABLED = "ONECX_PORTAL_FEEDBACK_DISABLED",
74
78
  ONECX_PORTAL_SEARCH_DISABLED = "ONECX_PORTAL_SEARCH_DISABLED",
@@ -85,7 +89,8 @@ declare enum CONFIG_KEY {
85
89
  AUTH_SERVICE_CUSTOM_URL = "AUTH_SERVICE_CUSTOM_URL",
86
90
  AUTH_SERVICE_CUSTOM_MODULE_NAME = "AUTH_SERVICE_CUSTOM_MODULE_NAME",
87
91
  POLYFILL_SCOPE_MODE = "POLYFILL_SCOPE_MODE",
88
- KEYBOARD_FOCUSABLE_SELECTOR = "KEYBOARD_FOCUSABLE_SELECTOR"
92
+ KEYBOARD_FOCUSABLE_SELECTOR = "KEYBOARD_FOCUSABLE_SELECTOR",
93
+ CUSTOM_AUTH_SHARE_SCOPE = "CUSTOM_AUTH_SHARE_SCOPE"
89
94
  }
90
95
  declare enum POLYFILL_SCOPE_MODE {
91
96
  PERFORMANCE = "PERFORMANCE",
@@ -121,16 +126,14 @@ declare class UserService implements OnDestroy {
121
126
  useOldLangSetting(profile: UserProfile): string;
122
127
  getPermissions(): rxjs.Observable<string[]>;
123
128
  hasPermission(permissionKey: string | string[] | undefined): Promise<boolean>;
124
- private determineLanguage;
125
129
  get isInitialized(): Promise<void>;
126
130
  static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
127
131
  static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
128
132
  }
129
133
 
130
- type Parameter = boolean | number | string | object;
131
134
  declare class ParametersService implements OnDestroy {
132
- private shellCapabilityService;
133
- private appStateService;
135
+ private readonly shellCapabilityService;
136
+ private readonly appStateService;
134
137
  _parameters$: ParametersTopic | undefined;
135
138
  get parameters$(): ParametersTopic;
136
139
  set parameters$(source: ParametersTopic);
@@ -141,7 +144,7 @@ declare class ParametersService implements OnDestroy {
141
144
  * @param key The key of the parameter to get. This is defined when the parameter is configured in parameter management.
142
145
  * @param defaultValue The default value that will be returned if the parameter is not found or if the shell is not yet providing the parameters because it is too old.
143
146
  */
144
- get<T extends Parameter>(key: string, defaultValue: T | Promise<T>): Promise<T>;
147
+ get<T extends ParameterValue>(key: string, defaultValue: T | Promise<T>): Promise<T>;
145
148
  /**
146
149
  * Use this method to get a parameter value in remote components.
147
150
  *
@@ -151,26 +154,12 @@ declare class ParametersService implements OnDestroy {
151
154
  * @param appId The id of the application in which the parameter is defined.
152
155
  * @returns The value of the parameter or the default value.
153
156
  */
154
- get<T extends Parameter>(key: string, defaultValue: T | Promise<T>, productName: string, appId: string): Promise<T>;
157
+ get<T extends ParameterValue>(key: string, defaultValue: T | Promise<T>, productName: string, appId: string): Promise<T>;
155
158
  static ɵfac: i0.ɵɵFactoryDeclaration<ParametersService, never>;
156
159
  static ɵprov: i0.ɵɵInjectableDeclaration<ParametersService>;
157
160
  }
158
161
 
159
- type Message = {
160
- summaryKey?: string;
161
- summaryParameters?: object;
162
- detailKey?: string;
163
- detailParameters?: object;
164
- id?: any;
165
- key?: string;
166
- life?: number;
167
- sticky?: boolean;
168
- closable?: boolean;
169
- data?: any;
170
- icon?: string;
171
- contentStyleClass?: string;
172
- styleClass?: string;
173
- };
162
+ type Message = PortalMessage;
174
163
  declare class PortalMessageService implements OnDestroy {
175
164
  private translateService;
176
165
  _message$: MessageTopic | undefined;
@@ -207,19 +196,8 @@ declare class RemoteComponentsService implements OnDestroy {
207
196
  declare class WorkspaceService {
208
197
  protected appStateService: AppStateService;
209
198
  private readonly logger;
210
- private aliasStart;
211
- private aliasEnd;
212
- private paramStart;
213
- private paramEnd;
214
- getUrl(productName: string, appId: string, endpointName?: string, endpointParameters?: Record<string, unknown>): Observable<string>;
199
+ getUrl(productName: string, appId: string, endpointName?: string, endpointParameters?: EndpointParameters): Observable<string>;
215
200
  doesUrlExistFor(productName: string, appId: string, endpointName?: string): Observable<boolean>;
216
- private constructBaseUrlFromWorkspace;
217
- private constructRouteUrl;
218
- private constructEndpointUrl;
219
- private filterRouteFromList;
220
- private dissolveEndpoint;
221
- private fillParamsForPath;
222
- private getStringFromUnknown;
223
201
  static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceService, never>;
224
202
  static ɵprov: i0.ɵɵInjectableDeclaration<WorkspaceService>;
225
203
  }
@@ -276,5 +254,13 @@ declare const APP_CONFIG: InjectionToken<LibConfig>;
276
254
  declare const SANITY_CHECK: InjectionToken<string>;
277
255
  declare const APPLICATION_NAME: InjectionToken<string>;
278
256
 
279
- export { APPLICATION_NAME, APP_CONFIG, AppConfigService, AppStateService, CONFIG_KEY, ConfigurationService, DynamicTranslationService, IconService, ImageRepositoryService, POLYFILL_SCOPE_MODE, ParametersService, PortalMessageService, RemoteComponentsService, SANITY_CHECK, ShellCapabilityService, ThemeService, UserService, WorkspaceService };
257
+ declare class NotificationService implements OnDestroy {
258
+ private readonly notificationService;
259
+ get notificationTopic(): NotificationTopic;
260
+ ngOnDestroy(): void;
261
+ static ɵfac: i0.ɵɵFactoryDeclaration<NotificationService, never>;
262
+ static ɵprov: i0.ɵɵInjectableDeclaration<NotificationService>;
263
+ }
264
+
265
+ export { APPLICATION_NAME, APP_CONFIG, AppConfigService, AppStateService, CONFIG_KEY, ConfigurationService, DynamicTranslationService, IconService, ImageRepositoryService, NotificationService, POLYFILL_SCOPE_MODE, ParametersService, PortalMessageService, RemoteComponentsService, SANITY_CHECK, ShellCapabilityService, ThemeService, UserService, WorkspaceService };
280
266
  export type { LibConfig, Message };