@3dsource/angular-unreal-module 0.0.74 → 0.0.76

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.
@@ -1,18 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, signal, makeEnvironmentProviders, provideEnvironmentInitializer, ChangeDetectionStrategy, Component, Pipe, ElementRef, input, HostListener, Input, ViewChild, DestroyRef, computed, viewChild, effect, untracked, output } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, signal, makeEnvironmentProviders, ChangeDetectionStrategy, Component, Pipe, ElementRef, input, HostListener, Input, ViewChild, DestroyRef, computed, viewChild, effect, untracked, output } from '@angular/core';
3
3
  import { filter, withLatestFrom, distinctUntilChanged, switchMap, catchError, timeout, tap, map as map$1, takeUntil, exhaustMap, debounceTime, takeWhile, delay, skip as skip$1 } from 'rxjs/operators';
4
4
  import { createAction, props, Store, provideState, createReducer, on, createFeature, createSelector } from '@ngrx/store';
5
5
  import { Actions, ofType, provideEffects, createEffect } from '@ngrx/effects';
6
6
  import { skip, share, merge, Subject, interval, of, map, from, take, fromEvent, timer, throwError, defer, Observable, switchMap as switchMap$1, retry, timeout as timeout$1, tap as tap$1, startWith, combineLatestWith, takeUntil as takeUntil$1, auditTime, EMPTY, debounceTime as debounceTime$1, mergeMap, scan, concatMap, animationFrameScheduler, BehaviorSubject, distinctUntilChanged as distinctUntilChanged$1, concat } from 'rxjs';
7
7
  import { Falsy, Truthy, Logger, calculateMedian, clampf, Signal, tapLog, generateUuid, COLOR_CODES, where, KeyboardNumericCode, InvertedKeyMap, Semaphore, lerp, getCanvasCached, getSnapshot, whereNot, HEXtoRGB, RGBtoHSV, inverseLerp, HSVtoRGB, RGBtoHEX, fpIsASameAsB, fitIntoRectangle } from '@3dsource/utils';
8
8
  import { HttpClient } from '@angular/common/http';
9
- import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
10
9
  import { DialogRef, DIALOG_DATA, Dialog } from '@angular/cdk/dialog';
11
10
  import { ScrollStrategyOptions } from '@angular/cdk/overlay';
12
11
  import { MetaBoxCommand } from '@3dsource/types-unreal';
13
12
  import { SourceButtonComponent, SourceLoadingComponent } from '@3dsource/source-ui-native';
14
13
  import * as i1 from '@angular/common';
15
14
  import { CommonModule, NgOptimizedImage, AsyncPipe, JsonPipe } from '@angular/common';
15
+ import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
16
16
  import { DomSanitizer } from '@angular/platform-browser';
17
17
  import * as i1$1 from '@angular/forms';
18
18
  import { FormsModule } from '@angular/forms';
@@ -297,7 +297,7 @@ class SubService {
297
297
 
298
298
  class AFKService extends SubService {
299
299
  constructor() {
300
- super();
300
+ super(...arguments);
301
301
  // Optionally detect if the user is not interacting (AFK) and disconnect them.
302
302
  this.enabled = true; // Set to true to enable the AFK system.
303
303
  this.closeTimeout = DEFAULT_AFK_TIMEOUT_PERIOD; // The time after the warning when we disconnect the user.
@@ -305,7 +305,6 @@ class AFKService extends SubService {
305
305
  this.countdown = 0; // The inactivity warning overlay has a countdown to show time until disconnect.
306
306
  this.selectWarnTimeout = this.store.selectSignal(selectWarnTimeout);
307
307
  this.isViewportReady = this.store.selectSignal(unrealFeature.selectViewportReady);
308
- this.init();
309
308
  }
310
309
  init() {
311
310
  merge(this.store.select(selectWarnTimeout), fromSignal(UnrealInternalSignalEvents.RestAfkTimer))
@@ -399,22 +398,22 @@ class AFKService extends SubService {
399
398
  }
400
399
  }, 1000);
401
400
  }
402
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AFKService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
401
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AFKService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
403
402
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AFKService }); }
404
403
  }
405
404
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AFKService, decorators: [{
406
405
  type: Injectable
407
- }], ctorParameters: () => [] });
406
+ }] });
408
407
 
409
408
  class FreezeFrameService extends SubService {
410
409
  constructor() {
411
- super();
410
+ super(...arguments);
412
411
  this.receiving = false;
413
412
  this.size = 0;
414
413
  this.freezeFrameOverlay = new Image();
415
- this.init();
416
414
  }
417
415
  init() {
416
+ console.log('DEBUG: FreezeFrameService init');
418
417
  this.store
419
418
  .select(unrealFeature.selectViewportReady)
420
419
  .pipe(filter(Truthy))
@@ -478,12 +477,12 @@ class FreezeFrameService extends SubService {
478
477
  progress: 1,
479
478
  }));
480
479
  }
481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FreezeFrameService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
480
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FreezeFrameService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
482
481
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FreezeFrameService }); }
483
482
  }
484
483
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FreezeFrameService, decorators: [{
485
484
  type: Injectable
486
- }], ctorParameters: () => [] });
485
+ }] });
487
486
 
488
487
  class DataFlowMonitor {
489
488
  /**
@@ -610,6 +609,7 @@ class VideoService extends SubService {
610
609
  this.init();
611
610
  }
612
611
  init() {
612
+ console.log('DEBUG: VideoService init');
613
613
  Signal.on('setKalmanParams').subscribe((data) => {
614
614
  this.kalmanFilter1D.config(data);
615
615
  BITRATE_MONITOR.config(data);
@@ -873,6 +873,7 @@ class CommandTelemetryService {
873
873
  this.init();
874
874
  }
875
875
  init() {
876
+ console.log('DEBUG: CommandTelemetryService init');
876
877
  if (!this.unrealInitialConfig?.commandTelemetryReceiver) {
877
878
  return;
878
879
  }
@@ -1198,6 +1199,7 @@ class SignallingService extends SubService {
1198
1199
  this.init();
1199
1200
  }
1200
1201
  init() {
1202
+ console.log('DEBUG: SignallingService init');
1201
1203
  this.setHandlersFromStream();
1202
1204
  this.store
1203
1205
  .select(unrealFeature.selectDataChannelConnected)
@@ -1509,6 +1511,7 @@ class WebRtcPlayerService extends SubService {
1509
1511
  this.init();
1510
1512
  }
1511
1513
  init() {
1514
+ console.log('DEBUG: WebRtcPlayerService init');
1512
1515
  const iceCandidateBuffer = [];
1513
1516
  const processBuffer = () => {
1514
1517
  iceCandidateBuffer.forEach((cnd) => {
@@ -1893,6 +1896,7 @@ class FileReceiverService extends SubService {
1893
1896
  this.init();
1894
1897
  }
1895
1898
  init() {
1899
+ console.log('DEBUG: FileReceiverService init');
1896
1900
  this.store
1897
1901
  .select(unrealFeature.selectViewportReady)
1898
1902
  .pipe(filter(Truthy))
@@ -1906,14 +1910,14 @@ class FileReceiverService extends SubService {
1906
1910
  this.chunks = 0;
1907
1911
  this.data = [];
1908
1912
  this.timestampStart = new Date().getTime();
1909
- //Logger.info('Received file state');
1913
+ // Logger.info('Received file state');
1910
1914
  }
1911
1915
  resetOnStart() {
1912
1916
  this.reset();
1913
1917
  this.receiving = true;
1914
1918
  }
1915
1919
  /**
1916
- * Processes a files extension when received over data channel
1920
+ * Processes a file extension when received over data channel
1917
1921
  * @param view - the file extension data
1918
1922
  */
1919
1923
  setExtensionFromBytes(view) {
@@ -1921,12 +1925,11 @@ class FileReceiverService extends SubService {
1921
1925
  if (!this.receiving) {
1922
1926
  this.resetOnStart();
1923
1927
  }
1924
- const extensionAsString = new TextDecoder('utf-16').decode(view.slice(1));
1925
1928
  //Logger.info(extensionAsString);
1926
- this.extension = extensionAsString;
1929
+ this.extension = new TextDecoder('utf-16').decode(view.slice(1));
1927
1930
  }
1928
1931
  /**
1929
- * Processes a files mime type when received over data channel
1932
+ * Processes a file mime type when received over data channel
1930
1933
  * @param view - the file mime type data
1931
1934
  */
1932
1935
  setMimeTypeFromBytes(view) {
@@ -1935,7 +1938,7 @@ class FileReceiverService extends SubService {
1935
1938
  this.resetOnStart();
1936
1939
  }
1937
1940
  const mimeAsString = new TextDecoder('utf-16').decode(view.slice(1));
1938
- //Logger.info(mimeAsString);
1941
+ // Logger.info(mimeAsString);
1939
1942
  this.mimetype = mimeAsString;
1940
1943
  }
1941
1944
  /*-------------------------------------------------------------------------------------------*/
@@ -1948,12 +1951,12 @@ class FileReceiverService extends SubService {
1948
1951
  const maxMessageSize = 16 * 1024;
1949
1952
  const headerSize = typeSize + intSize;
1950
1953
  const maxPayloadSize = maxMessageSize - headerSize;
1951
- // Calculate total number of chunks from the total this size
1954
+ // Calculate the total number of chunks from the total this size
1952
1955
  this.chunks = Math.ceil(new DataView(view.slice(typeSize, headerSize).buffer).getInt32(0, true) /
1953
1956
  maxPayloadSize);
1954
1957
  // Get the file part of the payload
1955
1958
  const thisBytes = view.slice(headerSize);
1956
- // Append to existing data that holds the this
1959
+ // Append to existing data that holds this
1957
1960
  this.data.push(thisBytes);
1958
1961
  // Uncomment for debug
1959
1962
  // Logger.info(`Received this chunk: ${this.data.length}/${this.chunks}`);
@@ -1995,8 +1998,8 @@ const filteredLogs = [
1995
1998
  ];
1996
1999
  class AggregatorService extends SubService {
1997
2000
  constructor() {
1998
- super();
1999
- this.selectStreamConfig = toSignal(this.store.select(selectStreamConfig));
2001
+ super(...arguments);
2002
+ this.selectStreamConfig = this.store.selectSignal(selectStreamConfig);
2000
2003
  this.videoService = inject(VideoService);
2001
2004
  this.webrtcPlayer = inject(WebRtcPlayerService);
2002
2005
  this.freezeFrame = inject(FreezeFrameService);
@@ -2007,9 +2010,9 @@ class AggregatorService extends SubService {
2007
2010
  * Never called for now
2008
2011
  */
2009
2012
  this.destroy$ = new Subject();
2010
- this.init();
2011
2013
  }
2012
2014
  init() {
2015
+ console.log('DEBUG: AggregatorService init');
2013
2016
  this.listenWebRTC();
2014
2017
  this.initialize();
2015
2018
  }
@@ -2177,21 +2180,18 @@ class AggregatorService extends SubService {
2177
2180
  Logger.warn(`unrecognized data received, packet ID ${view[0]}`);
2178
2181
  }
2179
2182
  }
2180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2183
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregatorService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2181
2184
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregatorService }); }
2182
2185
  }
2183
2186
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AggregatorService, decorators: [{
2184
2187
  type: Injectable
2185
- }], ctorParameters: () => [] });
2188
+ }] });
2186
2189
 
2187
2190
  class ConsoleExtensionsService extends SubService {
2188
2191
  #httpClient = inject(HttpClient);
2189
2192
  #isDevMode = inject(DevModeService).isDevMode;
2190
- constructor() {
2191
- super();
2192
- this.init();
2193
- }
2194
2193
  init() {
2194
+ console.log('DEBUG: ConsoleExtensionsService init');
2195
2195
  if (!this.#isDevMode) {
2196
2196
  return;
2197
2197
  }
@@ -2233,12 +2233,12 @@ class ConsoleExtensionsService extends SubService {
2233
2233
  Logger.info('setWarnTime() => set time to appear the AFK window.');
2234
2234
  Logger.info('emitCommand(command) => send command to Unreal Engine.');
2235
2235
  }
2236
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConsoleExtensionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConsoleExtensionsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2237
2237
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConsoleExtensionsService }); }
2238
2238
  }
2239
2239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ConsoleExtensionsService, decorators: [{
2240
2240
  type: Injectable
2241
- }], ctorParameters: () => [] });
2241
+ }] });
2242
2242
 
2243
2243
  class DevModeService {
2244
2244
  get isDevMode() {
@@ -2419,16 +2419,17 @@ class TouchEmulator {
2419
2419
  class UnrealCommunicatorService {
2420
2420
  constructor() {
2421
2421
  this.store = inject(Store);
2422
- this.telemetry = inject(CommandTelemetryService);
2423
- this.freezeFrame = inject(FreezeFrameService);
2424
- this.webrtcPlayer = inject(WebRtcPlayerService);
2422
+ this.commandTelemetryService = inject(CommandTelemetryService);
2423
+ this.freezeFrameService = inject(FreezeFrameService);
2424
+ this.webRtcPlayerService = inject(WebRtcPlayerService);
2425
2425
  this.videoService = inject(VideoService);
2426
2426
  this.destroy$ = new Subject();
2427
- this.cirrusConnected = toSignal(this.store.select(unrealFeature.selectCirrusConnected));
2427
+ this.cirrusConnected = this.store.selectSignal(unrealFeature.selectCirrusConnected);
2428
2428
  this.init();
2429
2429
  }
2430
2430
  init() {
2431
- this.emitUIInteraction = this.telemetry.decorate(this.emitUIInteraction.bind(this));
2431
+ console.log('DEBUG: UnrealCommunicatorService init');
2432
+ this.emitUIInteraction = this.commandTelemetryService.decorate(this.emitUIInteraction.bind(this));
2432
2433
  this.listenVideo();
2433
2434
  this.store
2434
2435
  .select(unrealFeature.selectDataChannelConnected)
@@ -2443,7 +2444,7 @@ class UnrealCommunicatorService {
2443
2444
  this.destroy$.complete();
2444
2445
  }
2445
2446
  sendCommandToUnreal(data) {
2446
- if (this.webrtcPlayer.canSend()) {
2447
+ if (this.webRtcPlayerService.canSend()) {
2447
2448
  const uniqId = data?.correlationId ?? generateUuid();
2448
2449
  const sendData = { ...data, correlationId: uniqId };
2449
2450
  Logger.colored(...COLOR_CODES.TO_UNREAL, sendData);
@@ -2471,7 +2472,7 @@ class UnrealCommunicatorService {
2471
2472
  sendInputData(data) {
2472
2473
  try {
2473
2474
  resetAfk();
2474
- this.webrtcPlayer.send(data);
2475
+ this.webRtcPlayerService.send(data);
2475
2476
  }
2476
2477
  catch (error) {
2477
2478
  if (this.cirrusConnected()) {
@@ -2507,7 +2508,7 @@ class UnrealCommunicatorService {
2507
2508
  }
2508
2509
  prepareScreen() {
2509
2510
  this.showPlayOverlay();
2510
- this.freezeFrame.invalidate();
2511
+ this.freezeFrameService.invalidate();
2511
2512
  }
2512
2513
  showPlayOverlay() {
2513
2514
  const callback = () => {
@@ -2532,7 +2533,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
2532
2533
 
2533
2534
  class InputService extends SubService {
2534
2535
  constructor() {
2535
- super();
2536
+ super(...arguments);
2536
2537
  this.commandsSender = inject(UnrealCommunicatorService);
2537
2538
  this.isDevMode = inject(DevModeService).isDevMode;
2538
2539
  this.defaultKeys = [
@@ -2565,6 +2566,9 @@ class InputService extends SubService {
2565
2566
  offsetByY: 0,
2566
2567
  offsetByX: 0,
2567
2568
  };
2569
+ }
2570
+ init() {
2571
+ console.log('DEBUG: InputService init');
2568
2572
  const visibilityHiddenTrigger$ = fromEvent(document, 'visibilitychange').pipe(map$1(() => document.visibilityState === 'hidden'), filter(Truthy));
2569
2573
  const visibilityVisibleTrigger$ = fromEvent(document, 'visibilitychange').pipe(map$1(() => document.visibilityState === 'visible'), filter(Truthy), startWith(true));
2570
2574
  this.deactivatedVideoTrigger$ = merge(this.disconnect$, this.reInit$, visibilityHiddenTrigger$);
@@ -3114,14 +3118,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3114
3118
  }], ctorParameters: () => [] });
3115
3119
 
3116
3120
  class StreamStatusTelemetryService {
3117
- constructor() {
3118
- this.store = inject(Store);
3119
- this.videoService = inject(VideoService);
3120
- this.init();
3121
- }
3121
+ #store = inject(Store);
3122
+ #videoService = inject(VideoService);
3122
3123
  init() {
3123
- this.videoService.videoStats$
3124
- .pipe(withLatestFrom(this.store.select(unrealFeature.selectAwsInstance), this.store.select(unrealFeature.selectLowBandwidth), this.store.select(unrealFeature.selectLowBandwidthStats), this.store.select(unrealFeature.selectCirrusConnected)), auditTime(5000), filter(([, , , , cirrusConnected]) => cirrusConnected), map$1(([data, signalingServer, isLowBandwidth, lbmStats]) => this.mapEventData(data, signalingServer, isLowBandwidth, lbmStats)))
3124
+ console.log('DEBUG: StreamStatusTelemetryService init');
3125
+ this.#videoService.videoStats$
3126
+ .pipe(withLatestFrom(this.#store.select(unrealFeature.selectAwsInstance), this.#store.select(unrealFeature.selectLowBandwidth), this.#store.select(unrealFeature.selectLowBandwidthStats), this.#store.select(unrealFeature.selectCirrusConnected)), auditTime(5000), filter(([, , , , cirrusConnected]) => cirrusConnected), map$1(([data, signalingServer, isLowBandwidth, lbmStats]) => this.mapEventData(data, signalingServer, isLowBandwidth, lbmStats)))
3125
3127
  .subscribe((data) => this.trackEventToMixPanel(data));
3126
3128
  }
3127
3129
  mapEventData(data, signalingServer, isLowBandwidth, lbmStats) {
@@ -3144,14 +3146,14 @@ class StreamStatusTelemetryService {
3144
3146
  };
3145
3147
  }
3146
3148
  trackEventToMixPanel(data) {
3147
- this.store.dispatch(trackMixpanelEvent({ event: 'streamStatus', data }));
3149
+ this.#store.dispatch(trackMixpanelEvent({ event: 'streamStatus', data }));
3148
3150
  }
3149
3151
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: StreamStatusTelemetryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3150
3152
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: StreamStatusTelemetryService }); }
3151
3153
  }
3152
3154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: StreamStatusTelemetryService, decorators: [{
3153
3155
  type: Injectable
3154
- }], ctorParameters: () => [] });
3156
+ }] });
3155
3157
 
3156
3158
  class AfkPlaywrightService extends AFKService {
3157
3159
  init() {
@@ -3263,6 +3265,17 @@ class FileReceiverPlaywrightService extends FileReceiverService {
3263
3265
  }
3264
3266
  }
3265
3267
 
3268
+ class InputPlaywrightService extends InputService {
3269
+ init() {
3270
+ return;
3271
+ }
3272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3273
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputPlaywrightService }); }
3274
+ }
3275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: InputPlaywrightService, decorators: [{
3276
+ type: Injectable
3277
+ }] });
3278
+
3266
3279
  /*
3267
3280
  * Copyright (c) 2025.
3268
3281
  * 3DSource.com. Sergii Karanda steve@3dsource.com. All Rights Reserved.
@@ -3376,13 +3389,6 @@ function provideAngularUnrealModule(config) {
3376
3389
  FileReceiverService,
3377
3390
  FileHandlerService,
3378
3391
  providePlaywrightProviders(config),
3379
- provideEnvironmentInitializer(() => {
3380
- inject(AggregatorService);
3381
- inject(StreamStatusTelemetryService);
3382
- inject(ConsoleExtensionsService);
3383
- inject(AFKService);
3384
- inject(FreezeFrameService);
3385
- }),
3386
3392
  ]);
3387
3393
  }
3388
3394
 
@@ -3647,17 +3653,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
3647
3653
 
3648
3654
  class UnrealEffects {
3649
3655
  constructor() {
3656
+ this.actions$ = inject(Actions);
3650
3657
  this.dialog = inject(Dialog);
3651
3658
  this.http = inject(HttpClient);
3652
3659
  this.store = inject(Store);
3653
3660
  this.isDevMode = inject(DevModeService).isDevMode;
3654
- this.unrealInitialConfig = inject(UNREAL_CONFIG, { optional: true });
3655
- this.actions$ = inject(Actions);
3656
- this.player = inject(WebRtcPlayerService);
3657
- this.signallingService = inject(SignallingService);
3658
3661
  this.scrollStrategy = inject(ScrollStrategyOptions).block();
3662
+ this.unrealInitialConfig = inject(UNREAL_CONFIG);
3663
+ this.webRtcPlayerService = inject(WebRtcPlayerService);
3659
3664
  this.commandsSender = inject(UnrealCommunicatorService);
3665
+ this.freezeFrame = inject(FreezeFrameService);
3666
+ this.inputService = inject(InputService);
3667
+ this.signallingService = inject(SignallingService);
3660
3668
  this.videoService = inject(VideoService);
3669
+ this.afkService = inject(AFKService);
3670
+ this.consoleExtensions = inject(ConsoleExtensionsService);
3671
+ this.streamStatusTelemetryService = inject(StreamStatusTelemetryService);
3672
+ this.aggregatorService = inject(AggregatorService);
3661
3673
  this.dataChannelConnectionTimeout = this.unrealInitialConfig?.dataChannelConnectionTimeout ??
3662
3674
  DATA_CHANNEL_CONNECTION_TIMEOUT;
3663
3675
  this.connectionCompleted$ = this.store
@@ -3688,7 +3700,7 @@ class UnrealEffects {
3688
3700
  code: WSCloseCode_FORCE_CIRRUS_CLOSE,
3689
3701
  reason,
3690
3702
  });
3691
- this.player.closePC();
3703
+ this.webRtcPlayerService.closePC();
3692
3704
  }), filter(({ reason }) => reason === DisconnectReason.DropConnection), map(() => dropConnection()));
3693
3705
  });
3694
3706
  this.webrtcErrorModalComponent$ = createEffect(() => {
@@ -3876,13 +3888,20 @@ class UnrealEffects {
3876
3888
  this.forceViewportNotReady$ = createEffect(() => {
3877
3889
  return this.actions$.pipe(ofType(destroyRemoteConnections), map(() => setViewportNotReady()));
3878
3890
  });
3891
+ // TODO will better to
3892
+ this.inputService.init();
3893
+ this.consoleExtensions.init();
3894
+ this.afkService.init();
3895
+ this.freezeFrame.init();
3896
+ this.streamStatusTelemetryService.init();
3897
+ this.aggregatorService.init();
3879
3898
  }
3880
3899
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: UnrealEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3881
3900
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: UnrealEffects }); }
3882
3901
  }
3883
3902
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: UnrealEffects, decorators: [{
3884
3903
  type: Injectable
3885
- }] });
3904
+ }], ctorParameters: () => [] });
3886
3905
 
3887
3906
  const selectFreezeFrameDataUrlFromVideo = createSelector(unrealFeature.selectFreezeFrameFromVideo, unrealFeature.selectLowBandwidth, (freezeFrameFromVideo, isLow) => isLow ? null : freezeFrameFromVideo?.dataUrl || null);
3888
3907
  const selectFreezeFrameProgressMessageFromVideo = createSelector(unrealFeature.selectFreezeFrameFromVideo, unrealFeature.selectLowBandwidth, (freezeFrameFromVideo, isLow) => isLow ? null : freezeFrameFromVideo?.progress || null);
@@ -3893,6 +3912,7 @@ const selectIsFreezeFrameLoading = createSelector(unrealFeature.selectFreezeFram
3893
3912
  const selectFreezeFrameCombinedDataUrl = createSelector(selectFreezeFrameDataUrlFromVideo, selectFreezeFrameDataUrl, (dataUrlFromVideo, remoteDataUrl) => dataUrlFromVideo || remoteDataUrl || null);
3894
3913
  const selectStreamConfig = createSelector(unrealFeature.selectStreamConfig, (config) => config);
3895
3914
  const selectWarnTimeout = createSelector(selectStreamConfig, (config) => config?.warnTimeout || DEFAULT_AFK_TIMEOUT);
3915
+ const selectIsExistMatchUrls = createSelector(unrealFeature.selectMatchUrls, (urls) => urls?.length > 0);
3896
3916
  const selectIsAutostart = createSelector(selectStreamConfig, (config) => config?.autoStart);
3897
3917
  const showPopupWithoutAutoStart = createSelector(selectStreamConfig, unrealFeature.selectWasInitialized, (config, wasInitialized) => !config.autoStart && !wasInitialized);
3898
3918
  const selectShowReconnectPopup = createSelector(unrealFeature.selectCirrusConnected, unrealFeature.selectEstablishingConnection, (connected, establishing) => !connected && !establishing);
@@ -4711,8 +4731,11 @@ class ResumeStreamButtonComponent {
4711
4731
  this.showReconnectPopup = this.store.selectSignal(selectShowReconnectPopup);
4712
4732
  this.isLoaderScreenVisible = this.store.selectSignal(isLoaderScreenVisible);
4713
4733
  this.streamConfig = this.store.selectSignal(selectStreamConfig);
4734
+ this.isExistMatchUrls = this.store.selectSignal(selectIsExistMatchUrls);
4714
4735
  this.isSecondStart = signal(!!(this.streamConfig()?.autoStart && location.href.match(/^https/gi)), ...(ngDevMode ? [{ debugName: "isSecondStart" }] : []));
4715
- this.isShowResumeButton = computed(() => this.isLoaderScreenVisible() && this.showReconnectPopup(), ...(ngDevMode ? [{ debugName: "isShowResumeButton" }] : []));
4736
+ this.isShowResumeButton = computed(() => this.isLoaderScreenVisible() &&
4737
+ this.showReconnectPopup() &&
4738
+ this.isExistMatchUrls(), ...(ngDevMode ? [{ debugName: "isShowResumeButton" }] : []));
4716
4739
  this.playCallBack = null;
4717
4740
  }
4718
4741
  ngOnInit() {
@@ -5204,5 +5227,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
5204
5227
  * Generated bundle index. Do not edit.
5205
5228
  */
5206
5229
 
5207
- export { AFKService, AfkPlaywrightService, AggregatorPlaywrightService, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryPlaywrightService, CommandTelemetryService, ConfigHandler, ConsoleExtensionsPlaywrightService, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverPlaywrightService, FileReceiverService, FilterSettingsComponent, FreezeFrameComponent, FreezeFramePlaywrightService, FreezeFrameService, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingPlaywrightService, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryPlaywrightService, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorPlaywrightService, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoRecorder, VideoService, VideoStatsComponent, WSCloseCode_CIRRUS_ABNORMAL_CLOSURE, WSCloseCode_CIRRUS_MAX_PLAYERS_ERROR, WSCloseCode_CIRRUS_PLAYER_DISCONNECTED, WSCloseCode_CIRRUS_STREAMER_KIKED_PLAYER, WSCloseCode_FORCE_CIRRUS_CLOSE, WSCloseCode_NORMAL_AFK_TIMEOUT, WSCloseCode_NORMAL_CLOSURE, WSCloseCode_NORMAL_MANUAL_DISCONNECT, WSCloseCode_UNKNOWN, WSCloseCodes, WS_OPEN_STATE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, changeLowBandwidth, changeStatusMainVideoOnScene, changeStreamResolutionAction, changeStreamResolutionSuccessAction, commandCompleted, commandStarted, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, floatToSmoothPercents, forceResizeUnrealVideo, fromResizeObserver, fromSignal, fromUnrealCallBackSignal, getActiveUrl, getImageFromVideoStream, getRtcErrorMessage, initSignalling, initialState, isLoaderScreenVisible, keepMaxUntilReset, mapQpToQuality, observeCommandResponse, provideAngularUnrealModule, removeExileCommands, resetAfk, resetAfkAction, resetConfig, resetIntroSrc, resetWarnTimeout, selectClientAndViewIds, selectCommandProgress, selectCommandsInProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsFreezeFrameLoading, selectIsVideoPlayingAndDataChannelConnected, selectLastCommandInProgress, selectLoaderCommands, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectWarnTimeout, sendSignal, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setDataChannelConnected, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setViewportNotReady, setViewportReady, showPopupWithoutAutoStart, showUnrealErrorMessage, smoothTransition, startStream, trackMixpanelEvent, unrealFeature, unrealReducer, updateCirrusInfo };
5230
+ export { AFKService, AfkPlaywrightService, AggregatorPlaywrightService, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryPlaywrightService, CommandTelemetryService, ConfigHandler, ConsoleExtensionsPlaywrightService, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverPlaywrightService, FileReceiverService, FilterSettingsComponent, FreezeFrameComponent, FreezeFramePlaywrightService, FreezeFrameService, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputPlaywrightService, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingPlaywrightService, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryPlaywrightService, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorPlaywrightService, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoRecorder, VideoService, VideoStatsComponent, WSCloseCode_CIRRUS_ABNORMAL_CLOSURE, WSCloseCode_CIRRUS_MAX_PLAYERS_ERROR, WSCloseCode_CIRRUS_PLAYER_DISCONNECTED, WSCloseCode_CIRRUS_STREAMER_KIKED_PLAYER, WSCloseCode_FORCE_CIRRUS_CLOSE, WSCloseCode_NORMAL_AFK_TIMEOUT, WSCloseCode_NORMAL_CLOSURE, WSCloseCode_NORMAL_MANUAL_DISCONNECT, WSCloseCode_UNKNOWN, WSCloseCodes, WS_OPEN_STATE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, changeLowBandwidth, changeStatusMainVideoOnScene, changeStreamResolutionAction, changeStreamResolutionSuccessAction, commandCompleted, commandStarted, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, floatToSmoothPercents, forceResizeUnrealVideo, fromResizeObserver, fromSignal, fromUnrealCallBackSignal, getActiveUrl, getImageFromVideoStream, getRtcErrorMessage, initSignalling, initialState, isLoaderScreenVisible, keepMaxUntilReset, mapQpToQuality, observeCommandResponse, provideAngularUnrealModule, removeExileCommands, resetAfk, resetAfkAction, resetConfig, resetIntroSrc, resetWarnTimeout, selectClientAndViewIds, selectCommandProgress, selectCommandsInProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsVideoPlayingAndDataChannelConnected, selectLastCommandInProgress, selectLoaderCommands, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectWarnTimeout, sendSignal, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setDataChannelConnected, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setViewportNotReady, setViewportReady, showPopupWithoutAutoStart, showUnrealErrorMessage, smoothTransition, startStream, trackMixpanelEvent, unrealFeature, unrealReducer, updateCirrusInfo };
5208
5231
  //# sourceMappingURL=3dsource-angular-unreal-module.mjs.map