@yuuvis/client-core 2.3.1 → 2.3.3

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.
@@ -5,11 +5,11 @@ import { HttpErrorResponse, HttpClient, HttpHeaders, HttpParams, HttpRequest, Ht
5
5
  import * as i0 from '@angular/core';
6
6
  import { inject, Injectable, InjectionToken, Inject, Directive, Pipe, importProvidersFrom, provideAppInitializer } from '@angular/core';
7
7
  import { tap, finalize, shareReplay, catchError, map, switchMap, first, filter, scan, delay } from 'rxjs/operators';
8
- import { EMPTY, of, forkJoin, Observable, ReplaySubject, Subject, BehaviorSubject, tap as tap$1, map as map$1, merge, fromEvent, filter as filter$1, debounceTime, throwError, isObservable, switchMap as switchMap$1 } from 'rxjs';
8
+ import { EMPTY, of, forkJoin, Observable, ReplaySubject, Subject, fromEvent, BehaviorSubject, tap as tap$1, map as map$1, merge, filter as filter$1, debounceTime, throwError, isObservable, switchMap as switchMap$1 } from 'rxjs';
9
9
  import { StorageMap } from '@ngx-pwa/local-storage';
10
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
10
11
  import { __decorate, __param, __metadata } from 'tslib';
11
12
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
12
- import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
13
  import { DeviceDetectorService } from 'ngx-device-detector';
14
14
  import { DOCUMENT, DecimalPipe, PercentPipe, CurrencyPipe, registerLocaleData } from '@angular/common';
15
15
  import { MatTabGroup } from '@angular/material/tabs';
@@ -2191,15 +2191,64 @@ var Direction;
2191
2191
  Direction["RTL"] = "rtl";
2192
2192
  })(Direction || (Direction = {}));
2193
2193
 
2194
+ /**
2195
+ * Mandatory Custom event prefix for all custom YUV events
2196
+ */
2197
+ const CUSTOM_EVENT_PREFIX = 'yuv.';
2198
+
2194
2199
  /**
2195
2200
  * Service for providing triggered events
2196
2201
  */
2197
2202
  class EventService {
2203
+ #eventSource;
2204
+ #allowedOrigins;
2198
2205
  constructor() {
2199
2206
  this.#eventSource = new Subject();
2200
2207
  this.event$ = this.#eventSource.asObservable();
2208
+ this.#allowedOrigins = [window.location.origin];
2209
+ this.#listenToWindowEvents();
2210
+ }
2211
+ #isYuvMessage(data) {
2212
+ return data && typeof data.type === 'string' && data.type.startsWith(CUSTOM_EVENT_PREFIX);
2213
+ }
2214
+ #isValidExternalMessage(event) {
2215
+ // Skip Angular DevTools and other framework messages
2216
+ if (event.data?.source?.startsWith('angular-devtools'))
2217
+ return false;
2218
+ if (event.data?.source?.startsWith('react-devtools'))
2219
+ return false;
2220
+ if (event.data?.source?.startsWith('webpack'))
2221
+ return false;
2222
+ if (event.data?.type?.startsWith('webpackOk'))
2223
+ return false;
2224
+ // Accept messages from trusted origins
2225
+ const trustedOrigins = [window.location.origin];
2226
+ const isFromTrustedOrigin = trustedOrigins.includes(event.origin);
2227
+ const hasValidStructure = event.data && (event.data.type || event.data.eventType) && typeof event.data === 'object';
2228
+ return isFromTrustedOrigin && hasValidStructure && this.#isYuvMessage(event.data);
2229
+ }
2230
+ #listenToWindowEvents() {
2231
+ fromEvent(window, 'message')
2232
+ .pipe(
2233
+ // TODO: Prevent message spam (necessary?)
2234
+ // debounceTime(500),
2235
+ filter((event) => this.#isValidExternalMessage(event)), takeUntilDestroyed())
2236
+ .subscribe((event) => this.trigger(event.data.type, event.data.data));
2237
+ }
2238
+ /**
2239
+ * Triggers a postMessage event that will be sent to the yuuvis global event Trigger
2240
+ * @param type Type/key of the event
2241
+ * @param data Data to be sent along with the event
2242
+ */
2243
+ triggerPostMessageEvent(type, data) {
2244
+ const targetOrigin = window.location.origin;
2245
+ const payload = {
2246
+ type,
2247
+ data,
2248
+ timestamp: Date.now()
2249
+ };
2250
+ window.postMessage(payload, targetOrigin);
2201
2251
  }
2202
- #eventSource;
2203
2252
  /**
2204
2253
  * Trigger an global event
2205
2254
  * @param type Type/key of the event
@@ -2223,7 +2272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
2223
2272
  args: [{
2224
2273
  providedIn: 'root'
2225
2274
  }]
2226
- }] });
2275
+ }], ctorParameters: () => [] });
2227
2276
 
2228
2277
  /**
2229
2278
  * Events emitted by parts of the application
@@ -5425,5 +5474,5 @@ const provideYuvClientCore = (options = { translations: [] }) => {
5425
5474
  * Generated bundle index. Do not edit.
5426
5475
  */
5427
5476
 
5428
- export { AFO_STATE, AdministrationRoles, ApiBase, AppCacheService, AuditField, AuditService, AuthService, BackendService, BaseObjectTypeField, BpmService, CORE_CONFIG, CUSTOM_CONFIG, CatalogService, Classification, ClassificationPrefix, ClientDefaultsObjectTypeField, ClipboardService, ColumnConfigSkipFields, ConfigService, ConnectionService, ContentStreamAllowed, ContentStreamField, CoreConfig, DeviceScreenOrientation, DeviceService, DialogCloseGuard, Direction, DmsObject, DmsService, EventService, FileSizePipe, IdmService, InternalFieldType, KeysPipe, LocaleCurrencyPipe, LocaleDatePipe, LocaleDecimalPipe, LocaleNumberPipe, LocalePercentPipe, Logger, LoginStateName, NativeNotificationService, NotificationService, ObjectConfigService, ObjectFormControl, ObjectFormControlWrapper, ObjectFormGroup, ObjectTag, ObjectTypeClassification, ObjectTypePropertyClassification, Operator, OperatorLabel, ParentField, PendingChangesGuard, PendingChangesService, PredictionService, ProcessAction, RelationshipTypeField, RetentionField, RetentionService, SafeHtmlPipe, SafeUrlPipe, SearchService, SearchUtils, SecondaryObjectTypeClassification, SessionStorageService, Situation, Sort, SystemResult, SystemSOT, SystemService, SystemType, TENANT_HEADER, TabGuardDirective, ToastService, UploadService, UserRoles, UserService, UserStorageService, Utils, YUV_USER, YuvError, YuvEventType, YuvUser, init_moduleFnc, provideUser, provideYuvClientCore };
5477
+ export { AFO_STATE, AdministrationRoles, ApiBase, AppCacheService, AuditField, AuditService, AuthService, BackendService, BaseObjectTypeField, BpmService, CORE_CONFIG, CUSTOM_CONFIG, CUSTOM_EVENT_PREFIX, CatalogService, Classification, ClassificationPrefix, ClientDefaultsObjectTypeField, ClipboardService, ColumnConfigSkipFields, ConfigService, ConnectionService, ContentStreamAllowed, ContentStreamField, CoreConfig, DeviceScreenOrientation, DeviceService, DialogCloseGuard, Direction, DmsObject, DmsService, EventService, FileSizePipe, IdmService, InternalFieldType, KeysPipe, LocaleCurrencyPipe, LocaleDatePipe, LocaleDecimalPipe, LocaleNumberPipe, LocalePercentPipe, Logger, LoginStateName, NativeNotificationService, NotificationService, ObjectConfigService, ObjectFormControl, ObjectFormControlWrapper, ObjectFormGroup, ObjectTag, ObjectTypeClassification, ObjectTypePropertyClassification, Operator, OperatorLabel, ParentField, PendingChangesGuard, PendingChangesService, PredictionService, ProcessAction, RelationshipTypeField, RetentionField, RetentionService, SafeHtmlPipe, SafeUrlPipe, SearchService, SearchUtils, SecondaryObjectTypeClassification, SessionStorageService, Situation, Sort, SystemResult, SystemSOT, SystemService, SystemType, TENANT_HEADER, TabGuardDirective, ToastService, UploadService, UserRoles, UserService, UserStorageService, Utils, YUV_USER, YuvError, YuvEventType, YuvUser, init_moduleFnc, provideUser, provideYuvClientCore };
5429
5478
  //# sourceMappingURL=yuuvis-client-core.mjs.map